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