xref: /linux/net/ipv4/arp.c (revision d39d0ed196aa1685bb24771e92f78633c66ac9cb)
1 /* linux/net/ipv4/arp.c
2  *
3  * Copyright (C) 1994 by Florian  La Roche
4  *
5  * This module implements the Address Resolution Protocol ARP (RFC 826),
6  * which is used to convert IP addresses (or in the future maybe other
7  * high-level addresses) into a low-level hardware address (like an Ethernet
8  * address).
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version
13  * 2 of the License, or (at your option) any later version.
14  *
15  * Fixes:
16  *		Alan Cox	:	Removed the Ethernet assumptions in
17  *					Florian's code
18  *		Alan Cox	:	Fixed some small errors in the ARP
19  *					logic
20  *		Alan Cox	:	Allow >4K in /proc
21  *		Alan Cox	:	Make ARP add its own protocol entry
22  *		Ross Martin     :       Rewrote arp_rcv() and arp_get_info()
23  *		Stephen Henson	:	Add AX25 support to arp_get_info()
24  *		Alan Cox	:	Drop data when a device is downed.
25  *		Alan Cox	:	Use init_timer().
26  *		Alan Cox	:	Double lock fixes.
27  *		Martin Seine	:	Move the arphdr structure
28  *					to if_arp.h for compatibility.
29  *					with BSD based programs.
30  *		Andrew Tridgell :       Added ARP netmask code and
31  *					re-arranged proxy handling.
32  *		Alan Cox	:	Changed to use notifiers.
33  *		Niibe Yutaka	:	Reply for this device or proxies only.
34  *		Alan Cox	:	Don't proxy across hardware types!
35  *		Jonathan Naylor :	Added support for NET/ROM.
36  *		Mike Shaver     :       RFC1122 checks.
37  *		Jonathan Naylor :	Only lookup the hardware address for
38  *					the correct hardware type.
39  *		Germano Caronni	:	Assorted subtle races.
40  *		Craig Schlenter :	Don't modify permanent entry
41  *					during arp_rcv.
42  *		Russ Nelson	:	Tidied up a few bits.
43  *		Alexey Kuznetsov:	Major changes to caching and behaviour,
44  *					eg intelligent arp probing and
45  *					generation
46  *					of host down events.
47  *		Alan Cox	:	Missing unlock in device events.
48  *		Eckes		:	ARP ioctl control errors.
49  *		Alexey Kuznetsov:	Arp free fix.
50  *		Manuel Rodriguez:	Gratuitous ARP.
51  *              Jonathan Layes  :       Added arpd support through kerneld
52  *                                      message queue (960314)
53  *		Mike Shaver	:	/proc/sys/net/ipv4/arp_* support
54  *		Mike McLagan    :	Routing by source
55  *		Stuart Cheshire	:	Metricom and grat arp fixes
56  *					*** FOR 2.1 clean this up ***
57  *		Lawrence V. Stefani: (08/12/96) Added FDDI support.
58  *		Alan Cox 	:	Took the AP1000 nasty FDDI hack and
59  *					folded into the mainstream FDDI code.
60  *					Ack spit, Linus how did you allow that
61  *					one in...
62  *		Jes Sorensen	:	Make FDDI work again in 2.1.x and
63  *					clean up the APFDDI & gen. FDDI bits.
64  *		Alexey Kuznetsov:	new arp state machine;
65  *					now it is in net/core/neighbour.c.
66  *		Krzysztof Halasa:	Added Frame Relay ARP support.
67  *		Arnaldo C. Melo :	convert /proc/net/arp to seq_file
68  *		Shmulik Hen:		Split arp_send to arp_create and
69  *					arp_xmit so intermediate drivers like
70  *					bonding can change the skb before
71  *					sending (e.g. insert 8021q tag).
72  *		Harald Welte	:	convert to make use of jenkins hash
73  *		Jesper D. Brouer:       Proxy ARP PVLAN RFC 3069 support.
74  */
75 
76 #include <linux/module.h>
77 #include <linux/types.h>
78 #include <linux/string.h>
79 #include <linux/kernel.h>
80 #include <linux/capability.h>
81 #include <linux/socket.h>
82 #include <linux/sockios.h>
83 #include <linux/errno.h>
84 #include <linux/in.h>
85 #include <linux/mm.h>
86 #include <linux/inet.h>
87 #include <linux/inetdevice.h>
88 #include <linux/netdevice.h>
89 #include <linux/etherdevice.h>
90 #include <linux/fddidevice.h>
91 #include <linux/if_arp.h>
92 #include <linux/trdevice.h>
93 #include <linux/skbuff.h>
94 #include <linux/proc_fs.h>
95 #include <linux/seq_file.h>
96 #include <linux/stat.h>
97 #include <linux/init.h>
98 #include <linux/net.h>
99 #include <linux/rcupdate.h>
100 #include <linux/jhash.h>
101 #include <linux/slab.h>
102 #ifdef CONFIG_SYSCTL
103 #include <linux/sysctl.h>
104 #endif
105 
106 #include <net/net_namespace.h>
107 #include <net/ip.h>
108 #include <net/icmp.h>
109 #include <net/route.h>
110 #include <net/protocol.h>
111 #include <net/tcp.h>
112 #include <net/sock.h>
113 #include <net/arp.h>
114 #include <net/ax25.h>
115 #include <net/netrom.h>
116 #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
117 #include <net/atmclip.h>
118 struct neigh_table *clip_tbl_hook;
119 EXPORT_SYMBOL(clip_tbl_hook);
120 #endif
121 
122 #include <asm/system.h>
123 #include <asm/uaccess.h>
124 
125 #include <linux/netfilter_arp.h>
126 
127 /*
128  *	Interface to generic neighbour cache.
129  */
130 static u32 arp_hash(const void *pkey, const struct net_device *dev);
131 static int arp_constructor(struct neighbour *neigh);
132 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
133 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
134 static void parp_redo(struct sk_buff *skb);
135 
136 static const struct neigh_ops arp_generic_ops = {
137 	.family =		AF_INET,
138 	.solicit =		arp_solicit,
139 	.error_report =		arp_error_report,
140 	.output =		neigh_resolve_output,
141 	.connected_output =	neigh_connected_output,
142 	.hh_output =		dev_queue_xmit,
143 	.queue_xmit =		dev_queue_xmit,
144 };
145 
146 static const struct neigh_ops arp_hh_ops = {
147 	.family =		AF_INET,
148 	.solicit =		arp_solicit,
149 	.error_report =		arp_error_report,
150 	.output =		neigh_resolve_output,
151 	.connected_output =	neigh_resolve_output,
152 	.hh_output =		dev_queue_xmit,
153 	.queue_xmit =		dev_queue_xmit,
154 };
155 
156 static const struct neigh_ops arp_direct_ops = {
157 	.family =		AF_INET,
158 	.output =		dev_queue_xmit,
159 	.connected_output =	dev_queue_xmit,
160 	.hh_output =		dev_queue_xmit,
161 	.queue_xmit =		dev_queue_xmit,
162 };
163 
164 const struct neigh_ops arp_broken_ops = {
165 	.family =		AF_INET,
166 	.solicit =		arp_solicit,
167 	.error_report =		arp_error_report,
168 	.output =		neigh_compat_output,
169 	.connected_output =	neigh_compat_output,
170 	.hh_output =		dev_queue_xmit,
171 	.queue_xmit =		dev_queue_xmit,
172 };
173 EXPORT_SYMBOL(arp_broken_ops);
174 
175 struct neigh_table arp_tbl = {
176 	.family =	AF_INET,
177 	.entry_size =	sizeof(struct neighbour) + 4,
178 	.key_len =	4,
179 	.hash =		arp_hash,
180 	.constructor =	arp_constructor,
181 	.proxy_redo =	parp_redo,
182 	.id =		"arp_cache",
183 	.parms = {
184 		.tbl =			&arp_tbl,
185 		.base_reachable_time =	30 * HZ,
186 		.retrans_time =	1 * HZ,
187 		.gc_staletime =	60 * HZ,
188 		.reachable_time =		30 * HZ,
189 		.delay_probe_time =	5 * HZ,
190 		.queue_len =		3,
191 		.ucast_probes =	3,
192 		.mcast_probes =	3,
193 		.anycast_delay =	1 * HZ,
194 		.proxy_delay =		(8 * HZ) / 10,
195 		.proxy_qlen =		64,
196 		.locktime =		1 * HZ,
197 	},
198 	.gc_interval =	30 * HZ,
199 	.gc_thresh1 =	128,
200 	.gc_thresh2 =	512,
201 	.gc_thresh3 =	1024,
202 };
203 EXPORT_SYMBOL(arp_tbl);
204 
205 int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir)
206 {
207 	switch (dev->type) {
208 	case ARPHRD_ETHER:
209 	case ARPHRD_FDDI:
210 	case ARPHRD_IEEE802:
211 		ip_eth_mc_map(addr, haddr);
212 		return 0;
213 	case ARPHRD_IEEE802_TR:
214 		ip_tr_mc_map(addr, haddr);
215 		return 0;
216 	case ARPHRD_INFINIBAND:
217 		ip_ib_mc_map(addr, dev->broadcast, haddr);
218 		return 0;
219 	default:
220 		if (dir) {
221 			memcpy(haddr, dev->broadcast, dev->addr_len);
222 			return 0;
223 		}
224 	}
225 	return -EINVAL;
226 }
227 
228 
229 static u32 arp_hash(const void *pkey, const struct net_device *dev)
230 {
231 	return jhash_2words(*(u32 *)pkey, dev->ifindex, arp_tbl.hash_rnd);
232 }
233 
234 static int arp_constructor(struct neighbour *neigh)
235 {
236 	__be32 addr = *(__be32*)neigh->primary_key;
237 	struct net_device *dev = neigh->dev;
238 	struct in_device *in_dev;
239 	struct neigh_parms *parms;
240 
241 	rcu_read_lock();
242 	in_dev = __in_dev_get_rcu(dev);
243 	if (in_dev == NULL) {
244 		rcu_read_unlock();
245 		return -EINVAL;
246 	}
247 
248 	neigh->type = inet_addr_type(dev_net(dev), addr);
249 
250 	parms = in_dev->arp_parms;
251 	__neigh_parms_put(neigh->parms);
252 	neigh->parms = neigh_parms_clone(parms);
253 	rcu_read_unlock();
254 
255 	if (!dev->header_ops) {
256 		neigh->nud_state = NUD_NOARP;
257 		neigh->ops = &arp_direct_ops;
258 		neigh->output = neigh->ops->queue_xmit;
259 	} else {
260 		/* Good devices (checked by reading texts, but only Ethernet is
261 		   tested)
262 
263 		   ARPHRD_ETHER: (ethernet, apfddi)
264 		   ARPHRD_FDDI: (fddi)
265 		   ARPHRD_IEEE802: (tr)
266 		   ARPHRD_METRICOM: (strip)
267 		   ARPHRD_ARCNET:
268 		   etc. etc. etc.
269 
270 		   ARPHRD_IPDDP will also work, if author repairs it.
271 		   I did not it, because this driver does not work even
272 		   in old paradigm.
273 		 */
274 
275 #if 1
276 		/* So... these "amateur" devices are hopeless.
277 		   The only thing, that I can say now:
278 		   It is very sad that we need to keep ugly obsolete
279 		   code to make them happy.
280 
281 		   They should be moved to more reasonable state, now
282 		   they use rebuild_header INSTEAD OF hard_start_xmit!!!
283 		   Besides that, they are sort of out of date
284 		   (a lot of redundant clones/copies, useless in 2.1),
285 		   I wonder why people believe that they work.
286 		 */
287 		switch (dev->type) {
288 		default:
289 			break;
290 		case ARPHRD_ROSE:
291 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
292 		case ARPHRD_AX25:
293 #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
294 		case ARPHRD_NETROM:
295 #endif
296 			neigh->ops = &arp_broken_ops;
297 			neigh->output = neigh->ops->output;
298 			return 0;
299 #endif
300 		;}
301 #endif
302 		if (neigh->type == RTN_MULTICAST) {
303 			neigh->nud_state = NUD_NOARP;
304 			arp_mc_map(addr, neigh->ha, dev, 1);
305 		} else if (dev->flags&(IFF_NOARP|IFF_LOOPBACK)) {
306 			neigh->nud_state = NUD_NOARP;
307 			memcpy(neigh->ha, dev->dev_addr, dev->addr_len);
308 		} else if (neigh->type == RTN_BROADCAST || dev->flags&IFF_POINTOPOINT) {
309 			neigh->nud_state = NUD_NOARP;
310 			memcpy(neigh->ha, dev->broadcast, dev->addr_len);
311 		}
312 
313 		if (dev->header_ops->cache)
314 			neigh->ops = &arp_hh_ops;
315 		else
316 			neigh->ops = &arp_generic_ops;
317 
318 		if (neigh->nud_state&NUD_VALID)
319 			neigh->output = neigh->ops->connected_output;
320 		else
321 			neigh->output = neigh->ops->output;
322 	}
323 	return 0;
324 }
325 
326 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
327 {
328 	dst_link_failure(skb);
329 	kfree_skb(skb);
330 }
331 
332 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
333 {
334 	__be32 saddr = 0;
335 	u8  *dst_ha = NULL;
336 	struct net_device *dev = neigh->dev;
337 	__be32 target = *(__be32*)neigh->primary_key;
338 	int probes = atomic_read(&neigh->probes);
339 	struct in_device *in_dev;
340 
341 	rcu_read_lock();
342 	in_dev = __in_dev_get_rcu(dev);
343 	if (!in_dev) {
344 		rcu_read_unlock();
345 		return;
346 	}
347 	switch (IN_DEV_ARP_ANNOUNCE(in_dev)) {
348 	default:
349 	case 0:		/* By default announce any local IP */
350 		if (skb && inet_addr_type(dev_net(dev), ip_hdr(skb)->saddr) == RTN_LOCAL)
351 			saddr = ip_hdr(skb)->saddr;
352 		break;
353 	case 1:		/* Restrict announcements of saddr in same subnet */
354 		if (!skb)
355 			break;
356 		saddr = ip_hdr(skb)->saddr;
357 		if (inet_addr_type(dev_net(dev), saddr) == RTN_LOCAL) {
358 			/* saddr should be known to target */
359 			if (inet_addr_onlink(in_dev, target, saddr))
360 				break;
361 		}
362 		saddr = 0;
363 		break;
364 	case 2:		/* Avoid secondary IPs, get a primary/preferred one */
365 		break;
366 	}
367 	rcu_read_unlock();
368 
369 	if (!saddr)
370 		saddr = inet_select_addr(dev, target, RT_SCOPE_LINK);
371 
372 	if ((probes -= neigh->parms->ucast_probes) < 0) {
373 		if (!(neigh->nud_state&NUD_VALID))
374 			printk(KERN_DEBUG "trying to ucast probe in NUD_INVALID\n");
375 		dst_ha = neigh->ha;
376 		read_lock_bh(&neigh->lock);
377 	} else if ((probes -= neigh->parms->app_probes) < 0) {
378 #ifdef CONFIG_ARPD
379 		neigh_app_ns(neigh);
380 #endif
381 		return;
382 	}
383 
384 	arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr,
385 		 dst_ha, dev->dev_addr, NULL);
386 	if (dst_ha)
387 		read_unlock_bh(&neigh->lock);
388 }
389 
390 static int arp_ignore(struct in_device *in_dev, __be32 sip, __be32 tip)
391 {
392 	int scope;
393 
394 	switch (IN_DEV_ARP_IGNORE(in_dev)) {
395 	case 0:	/* Reply, the tip is already validated */
396 		return 0;
397 	case 1:	/* Reply only if tip is configured on the incoming interface */
398 		sip = 0;
399 		scope = RT_SCOPE_HOST;
400 		break;
401 	case 2:	/*
402 		 * Reply only if tip is configured on the incoming interface
403 		 * and is in same subnet as sip
404 		 */
405 		scope = RT_SCOPE_HOST;
406 		break;
407 	case 3:	/* Do not reply for scope host addresses */
408 		sip = 0;
409 		scope = RT_SCOPE_LINK;
410 		break;
411 	case 4:	/* Reserved */
412 	case 5:
413 	case 6:
414 	case 7:
415 		return 0;
416 	case 8:	/* Do not reply */
417 		return 1;
418 	default:
419 		return 0;
420 	}
421 	return !inet_confirm_addr(in_dev, sip, tip, scope);
422 }
423 
424 static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
425 {
426 	struct flowi fl = { .nl_u = { .ip4_u = { .daddr = sip,
427 						 .saddr = tip } } };
428 	struct rtable *rt;
429 	int flag = 0;
430 	/*unsigned long now; */
431 	struct net *net = dev_net(dev);
432 
433 	if (ip_route_output_key(net, &rt, &fl) < 0)
434 		return 1;
435 	if (rt->dst.dev != dev) {
436 		NET_INC_STATS_BH(net, LINUX_MIB_ARPFILTER);
437 		flag = 1;
438 	}
439 	ip_rt_put(rt);
440 	return flag;
441 }
442 
443 /* OBSOLETE FUNCTIONS */
444 
445 /*
446  *	Find an arp mapping in the cache. If not found, post a request.
447  *
448  *	It is very UGLY routine: it DOES NOT use skb->dst->neighbour,
449  *	even if it exists. It is supposed that skb->dev was mangled
450  *	by a virtual device (eql, shaper). Nobody but broken devices
451  *	is allowed to use this function, it is scheduled to be removed. --ANK
452  */
453 
454 static int arp_set_predefined(int addr_hint, unsigned char * haddr, __be32 paddr, struct net_device * dev)
455 {
456 	switch (addr_hint) {
457 	case RTN_LOCAL:
458 		printk(KERN_DEBUG "ARP: arp called for own IP address\n");
459 		memcpy(haddr, dev->dev_addr, dev->addr_len);
460 		return 1;
461 	case RTN_MULTICAST:
462 		arp_mc_map(paddr, haddr, dev, 1);
463 		return 1;
464 	case RTN_BROADCAST:
465 		memcpy(haddr, dev->broadcast, dev->addr_len);
466 		return 1;
467 	}
468 	return 0;
469 }
470 
471 
472 int arp_find(unsigned char *haddr, struct sk_buff *skb)
473 {
474 	struct net_device *dev = skb->dev;
475 	__be32 paddr;
476 	struct neighbour *n;
477 
478 	if (!skb_dst(skb)) {
479 		printk(KERN_DEBUG "arp_find is called with dst==NULL\n");
480 		kfree_skb(skb);
481 		return 1;
482 	}
483 
484 	paddr = skb_rtable(skb)->rt_gateway;
485 
486 	if (arp_set_predefined(inet_addr_type(dev_net(dev), paddr), haddr, paddr, dev))
487 		return 0;
488 
489 	n = __neigh_lookup(&arp_tbl, &paddr, dev, 1);
490 
491 	if (n) {
492 		n->used = jiffies;
493 		if (n->nud_state&NUD_VALID || neigh_event_send(n, skb) == 0) {
494 			read_lock_bh(&n->lock);
495 			memcpy(haddr, n->ha, dev->addr_len);
496 			read_unlock_bh(&n->lock);
497 			neigh_release(n);
498 			return 0;
499 		}
500 		neigh_release(n);
501 	} else
502 		kfree_skb(skb);
503 	return 1;
504 }
505 EXPORT_SYMBOL(arp_find);
506 
507 /* END OF OBSOLETE FUNCTIONS */
508 
509 int arp_bind_neighbour(struct dst_entry *dst)
510 {
511 	struct net_device *dev = dst->dev;
512 	struct neighbour *n = dst->neighbour;
513 
514 	if (dev == NULL)
515 		return -EINVAL;
516 	if (n == NULL) {
517 		__be32 nexthop = ((struct rtable *)dst)->rt_gateway;
518 		if (dev->flags&(IFF_LOOPBACK|IFF_POINTOPOINT))
519 			nexthop = 0;
520 		n = __neigh_lookup_errno(
521 #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
522 		    dev->type == ARPHRD_ATM ? clip_tbl_hook :
523 #endif
524 		    &arp_tbl, &nexthop, dev);
525 		if (IS_ERR(n))
526 			return PTR_ERR(n);
527 		dst->neighbour = n;
528 	}
529 	return 0;
530 }
531 
532 /*
533  * Check if we can use proxy ARP for this path
534  */
535 static inline int arp_fwd_proxy(struct in_device *in_dev,
536 				struct net_device *dev,	struct rtable *rt)
537 {
538 	struct in_device *out_dev;
539 	int imi, omi = -1;
540 
541 	if (rt->dst.dev == dev)
542 		return 0;
543 
544 	if (!IN_DEV_PROXY_ARP(in_dev))
545 		return 0;
546 
547 	if ((imi = IN_DEV_MEDIUM_ID(in_dev)) == 0)
548 		return 1;
549 	if (imi == -1)
550 		return 0;
551 
552 	/* place to check for proxy_arp for routes */
553 
554 	out_dev = __in_dev_get_rcu(rt->dst.dev);
555 	if (out_dev)
556 		omi = IN_DEV_MEDIUM_ID(out_dev);
557 
558 	return (omi != imi && omi != -1);
559 }
560 
561 /*
562  * Check for RFC3069 proxy arp private VLAN (allow to send back to same dev)
563  *
564  * RFC3069 supports proxy arp replies back to the same interface.  This
565  * is done to support (ethernet) switch features, like RFC 3069, where
566  * the individual ports are not allowed to communicate with each
567  * other, BUT they are allowed to talk to the upstream router.  As
568  * described in RFC 3069, it is possible to allow these hosts to
569  * communicate through the upstream router, by proxy_arp'ing.
570  *
571  * RFC 3069: "VLAN Aggregation for Efficient IP Address Allocation"
572  *
573  *  This technology is known by different names:
574  *    In RFC 3069 it is called VLAN Aggregation.
575  *    Cisco and Allied Telesyn call it Private VLAN.
576  *    Hewlett-Packard call it Source-Port filtering or port-isolation.
577  *    Ericsson call it MAC-Forced Forwarding (RFC Draft).
578  *
579  */
580 static inline int arp_fwd_pvlan(struct in_device *in_dev,
581 				struct net_device *dev,	struct rtable *rt,
582 				__be32 sip, __be32 tip)
583 {
584 	/* Private VLAN is only concerned about the same ethernet segment */
585 	if (rt->dst.dev != dev)
586 		return 0;
587 
588 	/* Don't reply on self probes (often done by windowz boxes)*/
589 	if (sip == tip)
590 		return 0;
591 
592 	if (IN_DEV_PROXY_ARP_PVLAN(in_dev))
593 		return 1;
594 	else
595 		return 0;
596 }
597 
598 /*
599  *	Interface to link layer: send routine and receive handler.
600  */
601 
602 /*
603  *	Create an arp packet. If (dest_hw == NULL), we create a broadcast
604  *	message.
605  */
606 struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
607 			   struct net_device *dev, __be32 src_ip,
608 			   const unsigned char *dest_hw,
609 			   const unsigned char *src_hw,
610 			   const unsigned char *target_hw)
611 {
612 	struct sk_buff *skb;
613 	struct arphdr *arp;
614 	unsigned char *arp_ptr;
615 
616 	/*
617 	 *	Allocate a buffer
618 	 */
619 
620 	skb = alloc_skb(arp_hdr_len(dev) + LL_ALLOCATED_SPACE(dev), GFP_ATOMIC);
621 	if (skb == NULL)
622 		return NULL;
623 
624 	skb_reserve(skb, LL_RESERVED_SPACE(dev));
625 	skb_reset_network_header(skb);
626 	arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev));
627 	skb->dev = dev;
628 	skb->protocol = htons(ETH_P_ARP);
629 	if (src_hw == NULL)
630 		src_hw = dev->dev_addr;
631 	if (dest_hw == NULL)
632 		dest_hw = dev->broadcast;
633 
634 	/*
635 	 *	Fill the device header for the ARP frame
636 	 */
637 	if (dev_hard_header(skb, dev, ptype, dest_hw, src_hw, skb->len) < 0)
638 		goto out;
639 
640 	/*
641 	 * Fill out the arp protocol part.
642 	 *
643 	 * The arp hardware type should match the device type, except for FDDI,
644 	 * which (according to RFC 1390) should always equal 1 (Ethernet).
645 	 */
646 	/*
647 	 *	Exceptions everywhere. AX.25 uses the AX.25 PID value not the
648 	 *	DIX code for the protocol. Make these device structure fields.
649 	 */
650 	switch (dev->type) {
651 	default:
652 		arp->ar_hrd = htons(dev->type);
653 		arp->ar_pro = htons(ETH_P_IP);
654 		break;
655 
656 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
657 	case ARPHRD_AX25:
658 		arp->ar_hrd = htons(ARPHRD_AX25);
659 		arp->ar_pro = htons(AX25_P_IP);
660 		break;
661 
662 #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
663 	case ARPHRD_NETROM:
664 		arp->ar_hrd = htons(ARPHRD_NETROM);
665 		arp->ar_pro = htons(AX25_P_IP);
666 		break;
667 #endif
668 #endif
669 
670 #if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
671 	case ARPHRD_FDDI:
672 		arp->ar_hrd = htons(ARPHRD_ETHER);
673 		arp->ar_pro = htons(ETH_P_IP);
674 		break;
675 #endif
676 #if defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
677 	case ARPHRD_IEEE802_TR:
678 		arp->ar_hrd = htons(ARPHRD_IEEE802);
679 		arp->ar_pro = htons(ETH_P_IP);
680 		break;
681 #endif
682 	}
683 
684 	arp->ar_hln = dev->addr_len;
685 	arp->ar_pln = 4;
686 	arp->ar_op = htons(type);
687 
688 	arp_ptr=(unsigned char *)(arp+1);
689 
690 	memcpy(arp_ptr, src_hw, dev->addr_len);
691 	arp_ptr += dev->addr_len;
692 	memcpy(arp_ptr, &src_ip, 4);
693 	arp_ptr += 4;
694 	if (target_hw != NULL)
695 		memcpy(arp_ptr, target_hw, dev->addr_len);
696 	else
697 		memset(arp_ptr, 0, dev->addr_len);
698 	arp_ptr += dev->addr_len;
699 	memcpy(arp_ptr, &dest_ip, 4);
700 
701 	return skb;
702 
703 out:
704 	kfree_skb(skb);
705 	return NULL;
706 }
707 EXPORT_SYMBOL(arp_create);
708 
709 /*
710  *	Send an arp packet.
711  */
712 void arp_xmit(struct sk_buff *skb)
713 {
714 	/* Send it off, maybe filter it using firewalling first.  */
715 	NF_HOOK(NFPROTO_ARP, NF_ARP_OUT, skb, NULL, skb->dev, dev_queue_xmit);
716 }
717 EXPORT_SYMBOL(arp_xmit);
718 
719 /*
720  *	Create and send an arp packet.
721  */
722 void arp_send(int type, int ptype, __be32 dest_ip,
723 	      struct net_device *dev, __be32 src_ip,
724 	      const unsigned char *dest_hw, const unsigned char *src_hw,
725 	      const unsigned char *target_hw)
726 {
727 	struct sk_buff *skb;
728 
729 	/*
730 	 *	No arp on this interface.
731 	 */
732 
733 	if (dev->flags&IFF_NOARP)
734 		return;
735 
736 	skb = arp_create(type, ptype, dest_ip, dev, src_ip,
737 			 dest_hw, src_hw, target_hw);
738 	if (skb == NULL) {
739 		return;
740 	}
741 
742 	arp_xmit(skb);
743 }
744 EXPORT_SYMBOL(arp_send);
745 
746 /*
747  *	Process an arp request.
748  */
749 
750 static int arp_process(struct sk_buff *skb)
751 {
752 	struct net_device *dev = skb->dev;
753 	struct in_device *in_dev = __in_dev_get_rcu(dev);
754 	struct arphdr *arp;
755 	unsigned char *arp_ptr;
756 	struct rtable *rt;
757 	unsigned char *sha;
758 	__be32 sip, tip;
759 	u16 dev_type = dev->type;
760 	int addr_type;
761 	struct neighbour *n;
762 	struct net *net = dev_net(dev);
763 
764 	/* arp_rcv below verifies the ARP header and verifies the device
765 	 * is ARP'able.
766 	 */
767 
768 	if (in_dev == NULL)
769 		goto out;
770 
771 	arp = arp_hdr(skb);
772 
773 	switch (dev_type) {
774 	default:
775 		if (arp->ar_pro != htons(ETH_P_IP) ||
776 		    htons(dev_type) != arp->ar_hrd)
777 			goto out;
778 		break;
779 	case ARPHRD_ETHER:
780 	case ARPHRD_IEEE802_TR:
781 	case ARPHRD_FDDI:
782 	case ARPHRD_IEEE802:
783 		/*
784 		 * ETHERNET, Token Ring and Fibre Channel (which are IEEE 802
785 		 * devices, according to RFC 2625) devices will accept ARP
786 		 * hardware types of either 1 (Ethernet) or 6 (IEEE 802.2).
787 		 * This is the case also of FDDI, where the RFC 1390 says that
788 		 * FDDI devices should accept ARP hardware of (1) Ethernet,
789 		 * however, to be more robust, we'll accept both 1 (Ethernet)
790 		 * or 6 (IEEE 802.2)
791 		 */
792 		if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
793 		     arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
794 		    arp->ar_pro != htons(ETH_P_IP))
795 			goto out;
796 		break;
797 	case ARPHRD_AX25:
798 		if (arp->ar_pro != htons(AX25_P_IP) ||
799 		    arp->ar_hrd != htons(ARPHRD_AX25))
800 			goto out;
801 		break;
802 	case ARPHRD_NETROM:
803 		if (arp->ar_pro != htons(AX25_P_IP) ||
804 		    arp->ar_hrd != htons(ARPHRD_NETROM))
805 			goto out;
806 		break;
807 	}
808 
809 	/* Understand only these message types */
810 
811 	if (arp->ar_op != htons(ARPOP_REPLY) &&
812 	    arp->ar_op != htons(ARPOP_REQUEST))
813 		goto out;
814 
815 /*
816  *	Extract fields
817  */
818 	arp_ptr= (unsigned char *)(arp+1);
819 	sha	= arp_ptr;
820 	arp_ptr += dev->addr_len;
821 	memcpy(&sip, arp_ptr, 4);
822 	arp_ptr += 4;
823 	arp_ptr += dev->addr_len;
824 	memcpy(&tip, arp_ptr, 4);
825 /*
826  *	Check for bad requests for 127.x.x.x and requests for multicast
827  *	addresses.  If this is one such, delete it.
828  */
829 	if (ipv4_is_loopback(tip) || ipv4_is_multicast(tip))
830 		goto out;
831 
832 /*
833  *     Special case: We must set Frame Relay source Q.922 address
834  */
835 	if (dev_type == ARPHRD_DLCI)
836 		sha = dev->broadcast;
837 
838 /*
839  *  Process entry.  The idea here is we want to send a reply if it is a
840  *  request for us or if it is a request for someone else that we hold
841  *  a proxy for.  We want to add an entry to our cache if it is a reply
842  *  to us or if it is a request for our address.
843  *  (The assumption for this last is that if someone is requesting our
844  *  address, they are probably intending to talk to us, so it saves time
845  *  if we cache their address.  Their address is also probably not in
846  *  our cache, since ours is not in their cache.)
847  *
848  *  Putting this another way, we only care about replies if they are to
849  *  us, in which case we add them to the cache.  For requests, we care
850  *  about those for us and those for our proxies.  We reply to both,
851  *  and in the case of requests for us we add the requester to the arp
852  *  cache.
853  */
854 
855 	/* Special case: IPv4 duplicate address detection packet (RFC2131) */
856 	if (sip == 0) {
857 		if (arp->ar_op == htons(ARPOP_REQUEST) &&
858 		    inet_addr_type(net, tip) == RTN_LOCAL &&
859 		    !arp_ignore(in_dev, sip, tip))
860 			arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
861 				 dev->dev_addr, sha);
862 		goto out;
863 	}
864 
865 	if (arp->ar_op == htons(ARPOP_REQUEST) &&
866 	    ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {
867 
868 		rt = skb_rtable(skb);
869 		addr_type = rt->rt_type;
870 
871 		if (addr_type == RTN_LOCAL) {
872 			int dont_send = 0;
873 
874 			if (!dont_send)
875 				dont_send |= arp_ignore(in_dev,sip,tip);
876 			if (!dont_send && IN_DEV_ARPFILTER(in_dev))
877 				dont_send |= arp_filter(sip,tip,dev);
878 			if (!dont_send) {
879 				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
880 				if (n) {
881 					arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
882 					neigh_release(n);
883 				}
884 			}
885 			goto out;
886 		} else if (IN_DEV_FORWARD(in_dev)) {
887 			if (addr_type == RTN_UNICAST  &&
888 			    (arp_fwd_proxy(in_dev, dev, rt) ||
889 			     arp_fwd_pvlan(in_dev, dev, rt, sip, tip) ||
890 			     pneigh_lookup(&arp_tbl, net, &tip, dev, 0)))
891 			{
892 				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
893 				if (n)
894 					neigh_release(n);
895 
896 				if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
897 				    skb->pkt_type == PACKET_HOST ||
898 				    in_dev->arp_parms->proxy_delay == 0) {
899 					arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
900 				} else {
901 					pneigh_enqueue(&arp_tbl, in_dev->arp_parms, skb);
902 					return 0;
903 				}
904 				goto out;
905 			}
906 		}
907 	}
908 
909 	/* Update our ARP tables */
910 
911 	n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
912 
913 	if (IPV4_DEVCONF_ALL(dev_net(dev), ARP_ACCEPT)) {
914 		/* Unsolicited ARP is not accepted by default.
915 		   It is possible, that this option should be enabled for some
916 		   devices (strip is candidate)
917 		 */
918 		if (n == NULL &&
919 		    (arp->ar_op == htons(ARPOP_REPLY) ||
920 		     (arp->ar_op == htons(ARPOP_REQUEST) && tip == sip)) &&
921 		    inet_addr_type(net, sip) == RTN_UNICAST)
922 			n = __neigh_lookup(&arp_tbl, &sip, dev, 1);
923 	}
924 
925 	if (n) {
926 		int state = NUD_REACHABLE;
927 		int override;
928 
929 		/* If several different ARP replies follows back-to-back,
930 		   use the FIRST one. It is possible, if several proxy
931 		   agents are active. Taking the first reply prevents
932 		   arp trashing and chooses the fastest router.
933 		 */
934 		override = time_after(jiffies, n->updated + n->parms->locktime);
935 
936 		/* Broadcast replies and request packets
937 		   do not assert neighbour reachability.
938 		 */
939 		if (arp->ar_op != htons(ARPOP_REPLY) ||
940 		    skb->pkt_type != PACKET_HOST)
941 			state = NUD_STALE;
942 		neigh_update(n, sha, state, override ? NEIGH_UPDATE_F_OVERRIDE : 0);
943 		neigh_release(n);
944 	}
945 
946 out:
947 	consume_skb(skb);
948 	return 0;
949 }
950 
951 static void parp_redo(struct sk_buff *skb)
952 {
953 	arp_process(skb);
954 }
955 
956 
957 /*
958  *	Receive an arp request from the device layer.
959  */
960 
961 static int arp_rcv(struct sk_buff *skb, struct net_device *dev,
962 		   struct packet_type *pt, struct net_device *orig_dev)
963 {
964 	struct arphdr *arp;
965 
966 	/* ARP header, plus 2 device addresses, plus 2 IP addresses.  */
967 	if (!pskb_may_pull(skb, arp_hdr_len(dev)))
968 		goto freeskb;
969 
970 	arp = arp_hdr(skb);
971 	if (arp->ar_hln != dev->addr_len ||
972 	    dev->flags & IFF_NOARP ||
973 	    skb->pkt_type == PACKET_OTHERHOST ||
974 	    skb->pkt_type == PACKET_LOOPBACK ||
975 	    arp->ar_pln != 4)
976 		goto freeskb;
977 
978 	if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
979 		goto out_of_mem;
980 
981 	memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
982 
983 	return NF_HOOK(NFPROTO_ARP, NF_ARP_IN, skb, dev, NULL, arp_process);
984 
985 freeskb:
986 	kfree_skb(skb);
987 out_of_mem:
988 	return 0;
989 }
990 
991 /*
992  *	User level interface (ioctl)
993  */
994 
995 /*
996  *	Set (create) an ARP cache entry.
997  */
998 
999 static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on)
1000 {
1001 	if (dev == NULL) {
1002 		IPV4_DEVCONF_ALL(net, PROXY_ARP) = on;
1003 		return 0;
1004 	}
1005 	if (__in_dev_get_rtnl(dev)) {
1006 		IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on);
1007 		return 0;
1008 	}
1009 	return -ENXIO;
1010 }
1011 
1012 static int arp_req_set_public(struct net *net, struct arpreq *r,
1013 		struct net_device *dev)
1014 {
1015 	__be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1016 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1017 
1018 	if (mask && mask != htonl(0xFFFFFFFF))
1019 		return -EINVAL;
1020 	if (!dev && (r->arp_flags & ATF_COM)) {
1021 		dev = dev_getbyhwaddr(net, r->arp_ha.sa_family,
1022 				r->arp_ha.sa_data);
1023 		if (!dev)
1024 			return -ENODEV;
1025 	}
1026 	if (mask) {
1027 		if (pneigh_lookup(&arp_tbl, net, &ip, dev, 1) == NULL)
1028 			return -ENOBUFS;
1029 		return 0;
1030 	}
1031 
1032 	return arp_req_set_proxy(net, dev, 1);
1033 }
1034 
1035 static int arp_req_set(struct net *net, struct arpreq *r,
1036 		struct net_device * dev)
1037 {
1038 	__be32 ip;
1039 	struct neighbour *neigh;
1040 	int err;
1041 
1042 	if (r->arp_flags & ATF_PUBL)
1043 		return arp_req_set_public(net, r, dev);
1044 
1045 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1046 	if (r->arp_flags & ATF_PERM)
1047 		r->arp_flags |= ATF_COM;
1048 	if (dev == NULL) {
1049 		struct flowi fl = { .nl_u = { .ip4_u = { .daddr = ip,
1050 							 .tos = RTO_ONLINK } } };
1051 		struct rtable * rt;
1052 		if ((err = ip_route_output_key(net, &rt, &fl)) != 0)
1053 			return err;
1054 		dev = rt->dst.dev;
1055 		ip_rt_put(rt);
1056 		if (!dev)
1057 			return -EINVAL;
1058 	}
1059 	switch (dev->type) {
1060 #if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
1061 	case ARPHRD_FDDI:
1062 		/*
1063 		 * According to RFC 1390, FDDI devices should accept ARP
1064 		 * hardware types of 1 (Ethernet).  However, to be more
1065 		 * robust, we'll accept hardware types of either 1 (Ethernet)
1066 		 * or 6 (IEEE 802.2).
1067 		 */
1068 		if (r->arp_ha.sa_family != ARPHRD_FDDI &&
1069 		    r->arp_ha.sa_family != ARPHRD_ETHER &&
1070 		    r->arp_ha.sa_family != ARPHRD_IEEE802)
1071 			return -EINVAL;
1072 		break;
1073 #endif
1074 	default:
1075 		if (r->arp_ha.sa_family != dev->type)
1076 			return -EINVAL;
1077 		break;
1078 	}
1079 
1080 	neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
1081 	err = PTR_ERR(neigh);
1082 	if (!IS_ERR(neigh)) {
1083 		unsigned state = NUD_STALE;
1084 		if (r->arp_flags & ATF_PERM)
1085 			state = NUD_PERMANENT;
1086 		err = neigh_update(neigh, (r->arp_flags&ATF_COM) ?
1087 				   r->arp_ha.sa_data : NULL, state,
1088 				   NEIGH_UPDATE_F_OVERRIDE|
1089 				   NEIGH_UPDATE_F_ADMIN);
1090 		neigh_release(neigh);
1091 	}
1092 	return err;
1093 }
1094 
1095 static unsigned arp_state_to_flags(struct neighbour *neigh)
1096 {
1097 	unsigned flags = 0;
1098 	if (neigh->nud_state&NUD_PERMANENT)
1099 		flags = ATF_PERM|ATF_COM;
1100 	else if (neigh->nud_state&NUD_VALID)
1101 		flags = ATF_COM;
1102 	return flags;
1103 }
1104 
1105 /*
1106  *	Get an ARP cache entry.
1107  */
1108 
1109 static int arp_req_get(struct arpreq *r, struct net_device *dev)
1110 {
1111 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1112 	struct neighbour *neigh;
1113 	int err = -ENXIO;
1114 
1115 	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1116 	if (neigh) {
1117 		read_lock_bh(&neigh->lock);
1118 		memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len);
1119 		r->arp_flags = arp_state_to_flags(neigh);
1120 		read_unlock_bh(&neigh->lock);
1121 		r->arp_ha.sa_family = dev->type;
1122 		strlcpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
1123 		neigh_release(neigh);
1124 		err = 0;
1125 	}
1126 	return err;
1127 }
1128 
1129 static int arp_req_delete_public(struct net *net, struct arpreq *r,
1130 		struct net_device *dev)
1131 {
1132 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1133 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1134 
1135 	if (mask == htonl(0xFFFFFFFF))
1136 		return pneigh_delete(&arp_tbl, net, &ip, dev);
1137 
1138 	if (mask)
1139 		return -EINVAL;
1140 
1141 	return arp_req_set_proxy(net, dev, 0);
1142 }
1143 
1144 static int arp_req_delete(struct net *net, struct arpreq *r,
1145 		struct net_device * dev)
1146 {
1147 	int err;
1148 	__be32 ip;
1149 	struct neighbour *neigh;
1150 
1151 	if (r->arp_flags & ATF_PUBL)
1152 		return arp_req_delete_public(net, r, dev);
1153 
1154 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1155 	if (dev == NULL) {
1156 		struct flowi fl = { .nl_u = { .ip4_u = { .daddr = ip,
1157 							 .tos = RTO_ONLINK } } };
1158 		struct rtable * rt;
1159 		if ((err = ip_route_output_key(net, &rt, &fl)) != 0)
1160 			return err;
1161 		dev = rt->dst.dev;
1162 		ip_rt_put(rt);
1163 		if (!dev)
1164 			return -EINVAL;
1165 	}
1166 	err = -ENXIO;
1167 	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1168 	if (neigh) {
1169 		if (neigh->nud_state&~NUD_NOARP)
1170 			err = neigh_update(neigh, NULL, NUD_FAILED,
1171 					   NEIGH_UPDATE_F_OVERRIDE|
1172 					   NEIGH_UPDATE_F_ADMIN);
1173 		neigh_release(neigh);
1174 	}
1175 	return err;
1176 }
1177 
1178 /*
1179  *	Handle an ARP layer I/O control request.
1180  */
1181 
1182 int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
1183 {
1184 	int err;
1185 	struct arpreq r;
1186 	struct net_device *dev = NULL;
1187 
1188 	switch (cmd) {
1189 		case SIOCDARP:
1190 		case SIOCSARP:
1191 			if (!capable(CAP_NET_ADMIN))
1192 				return -EPERM;
1193 		case SIOCGARP:
1194 			err = copy_from_user(&r, arg, sizeof(struct arpreq));
1195 			if (err)
1196 				return -EFAULT;
1197 			break;
1198 		default:
1199 			return -EINVAL;
1200 	}
1201 
1202 	if (r.arp_pa.sa_family != AF_INET)
1203 		return -EPFNOSUPPORT;
1204 
1205 	if (!(r.arp_flags & ATF_PUBL) &&
1206 	    (r.arp_flags & (ATF_NETMASK|ATF_DONTPUB)))
1207 		return -EINVAL;
1208 	if (!(r.arp_flags & ATF_NETMASK))
1209 		((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
1210 							   htonl(0xFFFFFFFFUL);
1211 	rtnl_lock();
1212 	if (r.arp_dev[0]) {
1213 		err = -ENODEV;
1214 		if ((dev = __dev_get_by_name(net, r.arp_dev)) == NULL)
1215 			goto out;
1216 
1217 		/* Mmmm... It is wrong... ARPHRD_NETROM==0 */
1218 		if (!r.arp_ha.sa_family)
1219 			r.arp_ha.sa_family = dev->type;
1220 		err = -EINVAL;
1221 		if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
1222 			goto out;
1223 	} else if (cmd == SIOCGARP) {
1224 		err = -ENODEV;
1225 		goto out;
1226 	}
1227 
1228 	switch (cmd) {
1229 	case SIOCDARP:
1230 		err = arp_req_delete(net, &r, dev);
1231 		break;
1232 	case SIOCSARP:
1233 		err = arp_req_set(net, &r, dev);
1234 		break;
1235 	case SIOCGARP:
1236 		err = arp_req_get(&r, dev);
1237 		if (!err && copy_to_user(arg, &r, sizeof(r)))
1238 			err = -EFAULT;
1239 		break;
1240 	}
1241 out:
1242 	rtnl_unlock();
1243 	return err;
1244 }
1245 
1246 static int arp_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
1247 {
1248 	struct net_device *dev = ptr;
1249 
1250 	switch (event) {
1251 	case NETDEV_CHANGEADDR:
1252 		neigh_changeaddr(&arp_tbl, dev);
1253 		rt_cache_flush(dev_net(dev), 0);
1254 		break;
1255 	default:
1256 		break;
1257 	}
1258 
1259 	return NOTIFY_DONE;
1260 }
1261 
1262 static struct notifier_block arp_netdev_notifier = {
1263 	.notifier_call = arp_netdev_event,
1264 };
1265 
1266 /* Note, that it is not on notifier chain.
1267    It is necessary, that this routine was called after route cache will be
1268    flushed.
1269  */
1270 void arp_ifdown(struct net_device *dev)
1271 {
1272 	neigh_ifdown(&arp_tbl, dev);
1273 }
1274 
1275 
1276 /*
1277  *	Called once on startup.
1278  */
1279 
1280 static struct packet_type arp_packet_type __read_mostly = {
1281 	.type =	cpu_to_be16(ETH_P_ARP),
1282 	.func =	arp_rcv,
1283 };
1284 
1285 static int arp_proc_init(void);
1286 
1287 void __init arp_init(void)
1288 {
1289 	neigh_table_init(&arp_tbl);
1290 
1291 	dev_add_pack(&arp_packet_type);
1292 	arp_proc_init();
1293 #ifdef CONFIG_SYSCTL
1294 	neigh_sysctl_register(NULL, &arp_tbl.parms, "ipv4", NULL);
1295 #endif
1296 	register_netdevice_notifier(&arp_netdev_notifier);
1297 }
1298 
1299 #ifdef CONFIG_PROC_FS
1300 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1301 
1302 /* ------------------------------------------------------------------------ */
1303 /*
1304  *	ax25 -> ASCII conversion
1305  */
1306 static char *ax2asc2(ax25_address *a, char *buf)
1307 {
1308 	char c, *s;
1309 	int n;
1310 
1311 	for (n = 0, s = buf; n < 6; n++) {
1312 		c = (a->ax25_call[n] >> 1) & 0x7F;
1313 
1314 		if (c != ' ') *s++ = c;
1315 	}
1316 
1317 	*s++ = '-';
1318 
1319 	if ((n = ((a->ax25_call[6] >> 1) & 0x0F)) > 9) {
1320 		*s++ = '1';
1321 		n -= 10;
1322 	}
1323 
1324 	*s++ = n + '0';
1325 	*s++ = '\0';
1326 
1327 	if (*buf == '\0' || *buf == '-')
1328 	   return "*";
1329 
1330 	return buf;
1331 
1332 }
1333 #endif /* CONFIG_AX25 */
1334 
1335 #define HBUFFERLEN 30
1336 
1337 static void arp_format_neigh_entry(struct seq_file *seq,
1338 				   struct neighbour *n)
1339 {
1340 	char hbuffer[HBUFFERLEN];
1341 	int k, j;
1342 	char tbuf[16];
1343 	struct net_device *dev = n->dev;
1344 	int hatype = dev->type;
1345 
1346 	read_lock(&n->lock);
1347 	/* Convert hardware address to XX:XX:XX:XX ... form. */
1348 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1349 	if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
1350 		ax2asc2((ax25_address *)n->ha, hbuffer);
1351 	else {
1352 #endif
1353 	for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) {
1354 		hbuffer[k++] = hex_asc_hi(n->ha[j]);
1355 		hbuffer[k++] = hex_asc_lo(n->ha[j]);
1356 		hbuffer[k++] = ':';
1357 	}
1358 	if (k != 0)
1359 		--k;
1360 	hbuffer[k] = 0;
1361 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1362 	}
1363 #endif
1364 	sprintf(tbuf, "%pI4", n->primary_key);
1365 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1366 		   tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
1367 	read_unlock(&n->lock);
1368 }
1369 
1370 static void arp_format_pneigh_entry(struct seq_file *seq,
1371 				    struct pneigh_entry *n)
1372 {
1373 	struct net_device *dev = n->dev;
1374 	int hatype = dev ? dev->type : 0;
1375 	char tbuf[16];
1376 
1377 	sprintf(tbuf, "%pI4", n->key);
1378 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1379 		   tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
1380 		   dev ? dev->name : "*");
1381 }
1382 
1383 static int arp_seq_show(struct seq_file *seq, void *v)
1384 {
1385 	if (v == SEQ_START_TOKEN) {
1386 		seq_puts(seq, "IP address       HW type     Flags       "
1387 			      "HW address            Mask     Device\n");
1388 	} else {
1389 		struct neigh_seq_state *state = seq->private;
1390 
1391 		if (state->flags & NEIGH_SEQ_IS_PNEIGH)
1392 			arp_format_pneigh_entry(seq, v);
1393 		else
1394 			arp_format_neigh_entry(seq, v);
1395 	}
1396 
1397 	return 0;
1398 }
1399 
1400 static void *arp_seq_start(struct seq_file *seq, loff_t *pos)
1401 {
1402 	/* Don't want to confuse "arp -a" w/ magic entries,
1403 	 * so we tell the generic iterator to skip NUD_NOARP.
1404 	 */
1405 	return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP);
1406 }
1407 
1408 /* ------------------------------------------------------------------------ */
1409 
1410 static const struct seq_operations arp_seq_ops = {
1411 	.start  = arp_seq_start,
1412 	.next   = neigh_seq_next,
1413 	.stop   = neigh_seq_stop,
1414 	.show   = arp_seq_show,
1415 };
1416 
1417 static int arp_seq_open(struct inode *inode, struct file *file)
1418 {
1419 	return seq_open_net(inode, file, &arp_seq_ops,
1420 			    sizeof(struct neigh_seq_state));
1421 }
1422 
1423 static const struct file_operations arp_seq_fops = {
1424 	.owner		= THIS_MODULE,
1425 	.open           = arp_seq_open,
1426 	.read           = seq_read,
1427 	.llseek         = seq_lseek,
1428 	.release	= seq_release_net,
1429 };
1430 
1431 
1432 static int __net_init arp_net_init(struct net *net)
1433 {
1434 	if (!proc_net_fops_create(net, "arp", S_IRUGO, &arp_seq_fops))
1435 		return -ENOMEM;
1436 	return 0;
1437 }
1438 
1439 static void __net_exit arp_net_exit(struct net *net)
1440 {
1441 	proc_net_remove(net, "arp");
1442 }
1443 
1444 static struct pernet_operations arp_net_ops = {
1445 	.init = arp_net_init,
1446 	.exit = arp_net_exit,
1447 };
1448 
1449 static int __init arp_proc_init(void)
1450 {
1451 	return register_pernet_subsys(&arp_net_ops);
1452 }
1453 
1454 #else /* CONFIG_PROC_FS */
1455 
1456 static int __init arp_proc_init(void)
1457 {
1458 	return 0;
1459 }
1460 
1461 #endif /* CONFIG_PROC_FS */
1462