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