xref: /openbmc/linux/net/ipv4/arp.c (revision df2634f43f5106947f3735a0b61a6527a4b278cd)
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_rtnl(dev)) {
1021 		IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on);
1022 		return 0;
1023 	}
1024 	return -ENXIO;
1025 }
1026 
1027 static int arp_req_set_public(struct net *net, struct arpreq *r,
1028 		struct net_device *dev)
1029 {
1030 	__be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1031 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1032 
1033 	if (mask && mask != htonl(0xFFFFFFFF))
1034 		return -EINVAL;
1035 	if (!dev && (r->arp_flags & ATF_COM)) {
1036 		dev = dev_getbyhwaddr_rcu(net, r->arp_ha.sa_family,
1037 				      r->arp_ha.sa_data);
1038 		if (!dev)
1039 			return -ENODEV;
1040 	}
1041 	if (mask) {
1042 		if (pneigh_lookup(&arp_tbl, net, &ip, dev, 1) == NULL)
1043 			return -ENOBUFS;
1044 		return 0;
1045 	}
1046 
1047 	return arp_req_set_proxy(net, dev, 1);
1048 }
1049 
1050 static int arp_req_set(struct net *net, struct arpreq *r,
1051 		       struct net_device *dev)
1052 {
1053 	__be32 ip;
1054 	struct neighbour *neigh;
1055 	int err;
1056 
1057 	if (r->arp_flags & ATF_PUBL)
1058 		return arp_req_set_public(net, r, dev);
1059 
1060 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1061 	if (r->arp_flags & ATF_PERM)
1062 		r->arp_flags |= ATF_COM;
1063 	if (dev == NULL) {
1064 		struct flowi fl = { .fl4_dst = ip,
1065 				    .fl4_tos = RTO_ONLINK };
1066 		struct rtable *rt;
1067 		err = ip_route_output_key(net, &rt, &fl);
1068 		if (err != 0)
1069 			return err;
1070 		dev = rt->dst.dev;
1071 		ip_rt_put(rt);
1072 		if (!dev)
1073 			return -EINVAL;
1074 	}
1075 	switch (dev->type) {
1076 #if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
1077 	case ARPHRD_FDDI:
1078 		/*
1079 		 * According to RFC 1390, FDDI devices should accept ARP
1080 		 * hardware types of 1 (Ethernet).  However, to be more
1081 		 * robust, we'll accept hardware types of either 1 (Ethernet)
1082 		 * or 6 (IEEE 802.2).
1083 		 */
1084 		if (r->arp_ha.sa_family != ARPHRD_FDDI &&
1085 		    r->arp_ha.sa_family != ARPHRD_ETHER &&
1086 		    r->arp_ha.sa_family != ARPHRD_IEEE802)
1087 			return -EINVAL;
1088 		break;
1089 #endif
1090 	default:
1091 		if (r->arp_ha.sa_family != dev->type)
1092 			return -EINVAL;
1093 		break;
1094 	}
1095 
1096 	neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
1097 	err = PTR_ERR(neigh);
1098 	if (!IS_ERR(neigh)) {
1099 		unsigned state = NUD_STALE;
1100 		if (r->arp_flags & ATF_PERM)
1101 			state = NUD_PERMANENT;
1102 		err = neigh_update(neigh, (r->arp_flags & ATF_COM) ?
1103 				   r->arp_ha.sa_data : NULL, state,
1104 				   NEIGH_UPDATE_F_OVERRIDE |
1105 				   NEIGH_UPDATE_F_ADMIN);
1106 		neigh_release(neigh);
1107 	}
1108 	return err;
1109 }
1110 
1111 static unsigned arp_state_to_flags(struct neighbour *neigh)
1112 {
1113 	if (neigh->nud_state&NUD_PERMANENT)
1114 		return ATF_PERM | ATF_COM;
1115 	else if (neigh->nud_state&NUD_VALID)
1116 		return ATF_COM;
1117 	else
1118 		return 0;
1119 }
1120 
1121 /*
1122  *	Get an ARP cache entry.
1123  */
1124 
1125 static int arp_req_get(struct arpreq *r, struct net_device *dev)
1126 {
1127 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1128 	struct neighbour *neigh;
1129 	int err = -ENXIO;
1130 
1131 	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1132 	if (neigh) {
1133 		read_lock_bh(&neigh->lock);
1134 		memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len);
1135 		r->arp_flags = arp_state_to_flags(neigh);
1136 		read_unlock_bh(&neigh->lock);
1137 		r->arp_ha.sa_family = dev->type;
1138 		strlcpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
1139 		neigh_release(neigh);
1140 		err = 0;
1141 	}
1142 	return err;
1143 }
1144 
1145 int arp_invalidate(struct net_device *dev, __be32 ip)
1146 {
1147 	struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);
1148 	int err = -ENXIO;
1149 
1150 	if (neigh) {
1151 		if (neigh->nud_state & ~NUD_NOARP)
1152 			err = neigh_update(neigh, NULL, NUD_FAILED,
1153 					   NEIGH_UPDATE_F_OVERRIDE|
1154 					   NEIGH_UPDATE_F_ADMIN);
1155 		neigh_release(neigh);
1156 	}
1157 
1158 	return err;
1159 }
1160 EXPORT_SYMBOL(arp_invalidate);
1161 
1162 static int arp_req_delete_public(struct net *net, struct arpreq *r,
1163 		struct net_device *dev)
1164 {
1165 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1166 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1167 
1168 	if (mask == htonl(0xFFFFFFFF))
1169 		return pneigh_delete(&arp_tbl, net, &ip, dev);
1170 
1171 	if (mask)
1172 		return -EINVAL;
1173 
1174 	return arp_req_set_proxy(net, dev, 0);
1175 }
1176 
1177 static int arp_req_delete(struct net *net, struct arpreq *r,
1178 			  struct net_device *dev)
1179 {
1180 	int err;
1181 	__be32 ip;
1182 
1183 	if (r->arp_flags & ATF_PUBL)
1184 		return arp_req_delete_public(net, r, dev);
1185 
1186 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1187 	if (dev == NULL) {
1188 		struct flowi fl = { .fl4_dst = ip,
1189 				    .fl4_tos = RTO_ONLINK };
1190 		struct rtable *rt;
1191 		err = ip_route_output_key(net, &rt, &fl);
1192 		if (err != 0)
1193 			return err;
1194 		dev = rt->dst.dev;
1195 		ip_rt_put(rt);
1196 		if (!dev)
1197 			return -EINVAL;
1198 	}
1199 	return arp_invalidate(dev, ip);
1200 }
1201 
1202 /*
1203  *	Handle an ARP layer I/O control request.
1204  */
1205 
1206 int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
1207 {
1208 	int err;
1209 	struct arpreq r;
1210 	struct net_device *dev = NULL;
1211 
1212 	switch (cmd) {
1213 	case SIOCDARP:
1214 	case SIOCSARP:
1215 		if (!capable(CAP_NET_ADMIN))
1216 			return -EPERM;
1217 	case SIOCGARP:
1218 		err = copy_from_user(&r, arg, sizeof(struct arpreq));
1219 		if (err)
1220 			return -EFAULT;
1221 		break;
1222 	default:
1223 		return -EINVAL;
1224 	}
1225 
1226 	if (r.arp_pa.sa_family != AF_INET)
1227 		return -EPFNOSUPPORT;
1228 
1229 	if (!(r.arp_flags & ATF_PUBL) &&
1230 	    (r.arp_flags & (ATF_NETMASK | ATF_DONTPUB)))
1231 		return -EINVAL;
1232 	if (!(r.arp_flags & ATF_NETMASK))
1233 		((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
1234 							   htonl(0xFFFFFFFFUL);
1235 	rtnl_lock();
1236 	if (r.arp_dev[0]) {
1237 		err = -ENODEV;
1238 		dev = __dev_get_by_name(net, r.arp_dev);
1239 		if (dev == NULL)
1240 			goto out;
1241 
1242 		/* Mmmm... It is wrong... ARPHRD_NETROM==0 */
1243 		if (!r.arp_ha.sa_family)
1244 			r.arp_ha.sa_family = dev->type;
1245 		err = -EINVAL;
1246 		if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
1247 			goto out;
1248 	} else if (cmd == SIOCGARP) {
1249 		err = -ENODEV;
1250 		goto out;
1251 	}
1252 
1253 	switch (cmd) {
1254 	case SIOCDARP:
1255 		err = arp_req_delete(net, &r, dev);
1256 		break;
1257 	case SIOCSARP:
1258 		err = arp_req_set(net, &r, dev);
1259 		break;
1260 	case SIOCGARP:
1261 		err = arp_req_get(&r, dev);
1262 		break;
1263 	}
1264 out:
1265 	rtnl_unlock();
1266 	if (cmd == SIOCGARP && !err && copy_to_user(arg, &r, sizeof(r)))
1267 		err = -EFAULT;
1268 	return err;
1269 }
1270 
1271 static int arp_netdev_event(struct notifier_block *this, unsigned long event,
1272 			    void *ptr)
1273 {
1274 	struct net_device *dev = ptr;
1275 
1276 	switch (event) {
1277 	case NETDEV_CHANGEADDR:
1278 		neigh_changeaddr(&arp_tbl, dev);
1279 		rt_cache_flush(dev_net(dev), 0);
1280 		break;
1281 	default:
1282 		break;
1283 	}
1284 
1285 	return NOTIFY_DONE;
1286 }
1287 
1288 static struct notifier_block arp_netdev_notifier = {
1289 	.notifier_call = arp_netdev_event,
1290 };
1291 
1292 /* Note, that it is not on notifier chain.
1293    It is necessary, that this routine was called after route cache will be
1294    flushed.
1295  */
1296 void arp_ifdown(struct net_device *dev)
1297 {
1298 	neigh_ifdown(&arp_tbl, dev);
1299 }
1300 
1301 
1302 /*
1303  *	Called once on startup.
1304  */
1305 
1306 static struct packet_type arp_packet_type __read_mostly = {
1307 	.type =	cpu_to_be16(ETH_P_ARP),
1308 	.func =	arp_rcv,
1309 };
1310 
1311 static int arp_proc_init(void);
1312 
1313 void __init arp_init(void)
1314 {
1315 	neigh_table_init(&arp_tbl);
1316 
1317 	dev_add_pack(&arp_packet_type);
1318 	arp_proc_init();
1319 #ifdef CONFIG_SYSCTL
1320 	neigh_sysctl_register(NULL, &arp_tbl.parms, "ipv4", NULL);
1321 #endif
1322 	register_netdevice_notifier(&arp_netdev_notifier);
1323 }
1324 
1325 #ifdef CONFIG_PROC_FS
1326 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1327 
1328 /* ------------------------------------------------------------------------ */
1329 /*
1330  *	ax25 -> ASCII conversion
1331  */
1332 static char *ax2asc2(ax25_address *a, char *buf)
1333 {
1334 	char c, *s;
1335 	int n;
1336 
1337 	for (n = 0, s = buf; n < 6; n++) {
1338 		c = (a->ax25_call[n] >> 1) & 0x7F;
1339 
1340 		if (c != ' ')
1341 			*s++ = c;
1342 	}
1343 
1344 	*s++ = '-';
1345 	n = (a->ax25_call[6] >> 1) & 0x0F;
1346 	if (n > 9) {
1347 		*s++ = '1';
1348 		n -= 10;
1349 	}
1350 
1351 	*s++ = n + '0';
1352 	*s++ = '\0';
1353 
1354 	if (*buf == '\0' || *buf == '-')
1355 		return "*";
1356 
1357 	return buf;
1358 }
1359 #endif /* CONFIG_AX25 */
1360 
1361 #define HBUFFERLEN 30
1362 
1363 static void arp_format_neigh_entry(struct seq_file *seq,
1364 				   struct neighbour *n)
1365 {
1366 	char hbuffer[HBUFFERLEN];
1367 	int k, j;
1368 	char tbuf[16];
1369 	struct net_device *dev = n->dev;
1370 	int hatype = dev->type;
1371 
1372 	read_lock(&n->lock);
1373 	/* Convert hardware address to XX:XX:XX:XX ... form. */
1374 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1375 	if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
1376 		ax2asc2((ax25_address *)n->ha, hbuffer);
1377 	else {
1378 #endif
1379 	for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) {
1380 		hbuffer[k++] = hex_asc_hi(n->ha[j]);
1381 		hbuffer[k++] = hex_asc_lo(n->ha[j]);
1382 		hbuffer[k++] = ':';
1383 	}
1384 	if (k != 0)
1385 		--k;
1386 	hbuffer[k] = 0;
1387 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1388 	}
1389 #endif
1390 	sprintf(tbuf, "%pI4", n->primary_key);
1391 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1392 		   tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
1393 	read_unlock(&n->lock);
1394 }
1395 
1396 static void arp_format_pneigh_entry(struct seq_file *seq,
1397 				    struct pneigh_entry *n)
1398 {
1399 	struct net_device *dev = n->dev;
1400 	int hatype = dev ? dev->type : 0;
1401 	char tbuf[16];
1402 
1403 	sprintf(tbuf, "%pI4", n->key);
1404 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1405 		   tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
1406 		   dev ? dev->name : "*");
1407 }
1408 
1409 static int arp_seq_show(struct seq_file *seq, void *v)
1410 {
1411 	if (v == SEQ_START_TOKEN) {
1412 		seq_puts(seq, "IP address       HW type     Flags       "
1413 			      "HW address            Mask     Device\n");
1414 	} else {
1415 		struct neigh_seq_state *state = seq->private;
1416 
1417 		if (state->flags & NEIGH_SEQ_IS_PNEIGH)
1418 			arp_format_pneigh_entry(seq, v);
1419 		else
1420 			arp_format_neigh_entry(seq, v);
1421 	}
1422 
1423 	return 0;
1424 }
1425 
1426 static void *arp_seq_start(struct seq_file *seq, loff_t *pos)
1427 {
1428 	/* Don't want to confuse "arp -a" w/ magic entries,
1429 	 * so we tell the generic iterator to skip NUD_NOARP.
1430 	 */
1431 	return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP);
1432 }
1433 
1434 /* ------------------------------------------------------------------------ */
1435 
1436 static const struct seq_operations arp_seq_ops = {
1437 	.start	= arp_seq_start,
1438 	.next	= neigh_seq_next,
1439 	.stop	= neigh_seq_stop,
1440 	.show	= arp_seq_show,
1441 };
1442 
1443 static int arp_seq_open(struct inode *inode, struct file *file)
1444 {
1445 	return seq_open_net(inode, file, &arp_seq_ops,
1446 			    sizeof(struct neigh_seq_state));
1447 }
1448 
1449 static const struct file_operations arp_seq_fops = {
1450 	.owner		= THIS_MODULE,
1451 	.open           = arp_seq_open,
1452 	.read           = seq_read,
1453 	.llseek         = seq_lseek,
1454 	.release	= seq_release_net,
1455 };
1456 
1457 
1458 static int __net_init arp_net_init(struct net *net)
1459 {
1460 	if (!proc_net_fops_create(net, "arp", S_IRUGO, &arp_seq_fops))
1461 		return -ENOMEM;
1462 	return 0;
1463 }
1464 
1465 static void __net_exit arp_net_exit(struct net *net)
1466 {
1467 	proc_net_remove(net, "arp");
1468 }
1469 
1470 static struct pernet_operations arp_net_ops = {
1471 	.init = arp_net_init,
1472 	.exit = arp_net_exit,
1473 };
1474 
1475 static int __init arp_proc_init(void)
1476 {
1477 	return register_pernet_subsys(&arp_net_ops);
1478 }
1479 
1480 #else /* CONFIG_PROC_FS */
1481 
1482 static int __init arp_proc_init(void)
1483 {
1484 	return 0;
1485 }
1486 
1487 #endif /* CONFIG_PROC_FS */
1488