arp.c revision 5811662b15db018c740c57d037523683fd3e6123
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>
118struct neigh_table *clip_tbl_hook;
119EXPORT_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 */
130static u32 arp_hash(const void *pkey, const struct net_device *dev, __u32 rnd);
131static int arp_constructor(struct neighbour *neigh);
132static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
133static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
134static void parp_redo(struct sk_buff *skb);
135
136static 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
146static 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
156static 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
164static 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
174struct 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};
202EXPORT_SYMBOL(arp_tbl);
203
204int 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
228static 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
235static 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
330static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
331{
332	dst_link_failure(skb);
333	kfree_skb(skb);
334}
335
336static 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
400static 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
434static 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
464static 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
483int 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}
515EXPORT_SYMBOL(arp_find);
516
517/* END OF OBSOLETE FUNCTIONS */
518
519int 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 */
546static 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 */
591static 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 */
617struct 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
714out:
715	kfree_skb(skb);
716	return NULL;
717}
718EXPORT_SYMBOL(arp_create);
719
720/*
721 *	Send an arp packet.
722 */
723void 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}
728EXPORT_SYMBOL(arp_xmit);
729
730/*
731 *	Create and send an arp packet.
732 */
733void 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}
754EXPORT_SYMBOL(arp_send);
755
756/*
757 *	Process an arp request.
758 */
759
760static 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
960out:
961	consume_skb(skb);
962	return 0;
963}
964
965static 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
975static 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
1000freeskb:
1001	kfree_skb(skb);
1002out_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
1014static 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
1027static 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(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
1050static 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
1111static 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
1125static 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
1145static int arp_req_delete_public(struct net *net, struct arpreq *r,
1146		struct net_device *dev)
1147{
1148	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1149	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1150
1151	if (mask == htonl(0xFFFFFFFF))
1152		return pneigh_delete(&arp_tbl, net, &ip, dev);
1153
1154	if (mask)
1155		return -EINVAL;
1156
1157	return arp_req_set_proxy(net, dev, 0);
1158}
1159
1160static int arp_req_delete(struct net *net, struct arpreq *r,
1161			  struct net_device *dev)
1162{
1163	int err;
1164	__be32 ip;
1165	struct neighbour *neigh;
1166
1167	if (r->arp_flags & ATF_PUBL)
1168		return arp_req_delete_public(net, r, dev);
1169
1170	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1171	if (dev == NULL) {
1172		struct flowi fl = { .fl4_dst = ip,
1173				    .fl4_tos = RTO_ONLINK };
1174		struct rtable *rt;
1175		err = ip_route_output_key(net, &rt, &fl);
1176		if (err != 0)
1177			return err;
1178		dev = rt->dst.dev;
1179		ip_rt_put(rt);
1180		if (!dev)
1181			return -EINVAL;
1182	}
1183	err = -ENXIO;
1184	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1185	if (neigh) {
1186		if (neigh->nud_state & ~NUD_NOARP)
1187			err = neigh_update(neigh, NULL, NUD_FAILED,
1188					   NEIGH_UPDATE_F_OVERRIDE|
1189					   NEIGH_UPDATE_F_ADMIN);
1190		neigh_release(neigh);
1191	}
1192	return err;
1193}
1194
1195/*
1196 *	Handle an ARP layer I/O control request.
1197 */
1198
1199int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
1200{
1201	int err;
1202	struct arpreq r;
1203	struct net_device *dev = NULL;
1204
1205	switch (cmd) {
1206	case SIOCDARP:
1207	case SIOCSARP:
1208		if (!capable(CAP_NET_ADMIN))
1209			return -EPERM;
1210	case SIOCGARP:
1211		err = copy_from_user(&r, arg, sizeof(struct arpreq));
1212		if (err)
1213			return -EFAULT;
1214		break;
1215	default:
1216		return -EINVAL;
1217	}
1218
1219	if (r.arp_pa.sa_family != AF_INET)
1220		return -EPFNOSUPPORT;
1221
1222	if (!(r.arp_flags & ATF_PUBL) &&
1223	    (r.arp_flags & (ATF_NETMASK | ATF_DONTPUB)))
1224		return -EINVAL;
1225	if (!(r.arp_flags & ATF_NETMASK))
1226		((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
1227							   htonl(0xFFFFFFFFUL);
1228	rtnl_lock();
1229	if (r.arp_dev[0]) {
1230		err = -ENODEV;
1231		dev = __dev_get_by_name(net, r.arp_dev);
1232		if (dev == NULL)
1233			goto out;
1234
1235		/* Mmmm... It is wrong... ARPHRD_NETROM==0 */
1236		if (!r.arp_ha.sa_family)
1237			r.arp_ha.sa_family = dev->type;
1238		err = -EINVAL;
1239		if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
1240			goto out;
1241	} else if (cmd == SIOCGARP) {
1242		err = -ENODEV;
1243		goto out;
1244	}
1245
1246	switch (cmd) {
1247	case SIOCDARP:
1248		err = arp_req_delete(net, &r, dev);
1249		break;
1250	case SIOCSARP:
1251		err = arp_req_set(net, &r, dev);
1252		break;
1253	case SIOCGARP:
1254		err = arp_req_get(&r, dev);
1255		if (!err && copy_to_user(arg, &r, sizeof(r)))
1256			err = -EFAULT;
1257		break;
1258	}
1259out:
1260	rtnl_unlock();
1261	return err;
1262}
1263
1264static int arp_netdev_event(struct notifier_block *this, unsigned long event,
1265			    void *ptr)
1266{
1267	struct net_device *dev = ptr;
1268
1269	switch (event) {
1270	case NETDEV_CHANGEADDR:
1271		neigh_changeaddr(&arp_tbl, dev);
1272		rt_cache_flush(dev_net(dev), 0);
1273		break;
1274	default:
1275		break;
1276	}
1277
1278	return NOTIFY_DONE;
1279}
1280
1281static struct notifier_block arp_netdev_notifier = {
1282	.notifier_call = arp_netdev_event,
1283};
1284
1285/* Note, that it is not on notifier chain.
1286   It is necessary, that this routine was called after route cache will be
1287   flushed.
1288 */
1289void arp_ifdown(struct net_device *dev)
1290{
1291	neigh_ifdown(&arp_tbl, dev);
1292}
1293
1294
1295/*
1296 *	Called once on startup.
1297 */
1298
1299static struct packet_type arp_packet_type __read_mostly = {
1300	.type =	cpu_to_be16(ETH_P_ARP),
1301	.func =	arp_rcv,
1302};
1303
1304static int arp_proc_init(void);
1305
1306void __init arp_init(void)
1307{
1308	neigh_table_init(&arp_tbl);
1309
1310	dev_add_pack(&arp_packet_type);
1311	arp_proc_init();
1312#ifdef CONFIG_SYSCTL
1313	neigh_sysctl_register(NULL, &arp_tbl.parms, "ipv4", NULL);
1314#endif
1315	register_netdevice_notifier(&arp_netdev_notifier);
1316}
1317
1318#ifdef CONFIG_PROC_FS
1319#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1320
1321/* ------------------------------------------------------------------------ */
1322/*
1323 *	ax25 -> ASCII conversion
1324 */
1325static char *ax2asc2(ax25_address *a, char *buf)
1326{
1327	char c, *s;
1328	int n;
1329
1330	for (n = 0, s = buf; n < 6; n++) {
1331		c = (a->ax25_call[n] >> 1) & 0x7F;
1332
1333		if (c != ' ')
1334			*s++ = c;
1335	}
1336
1337	*s++ = '-';
1338	n = (a->ax25_call[6] >> 1) & 0x0F;
1339	if (n > 9) {
1340		*s++ = '1';
1341		n -= 10;
1342	}
1343
1344	*s++ = n + '0';
1345	*s++ = '\0';
1346
1347	if (*buf == '\0' || *buf == '-')
1348		return "*";
1349
1350	return buf;
1351}
1352#endif /* CONFIG_AX25 */
1353
1354#define HBUFFERLEN 30
1355
1356static void arp_format_neigh_entry(struct seq_file *seq,
1357				   struct neighbour *n)
1358{
1359	char hbuffer[HBUFFERLEN];
1360	int k, j;
1361	char tbuf[16];
1362	struct net_device *dev = n->dev;
1363	int hatype = dev->type;
1364
1365	read_lock(&n->lock);
1366	/* Convert hardware address to XX:XX:XX:XX ... form. */
1367#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1368	if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
1369		ax2asc2((ax25_address *)n->ha, hbuffer);
1370	else {
1371#endif
1372	for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) {
1373		hbuffer[k++] = hex_asc_hi(n->ha[j]);
1374		hbuffer[k++] = hex_asc_lo(n->ha[j]);
1375		hbuffer[k++] = ':';
1376	}
1377	if (k != 0)
1378		--k;
1379	hbuffer[k] = 0;
1380#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1381	}
1382#endif
1383	sprintf(tbuf, "%pI4", n->primary_key);
1384	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1385		   tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
1386	read_unlock(&n->lock);
1387}
1388
1389static void arp_format_pneigh_entry(struct seq_file *seq,
1390				    struct pneigh_entry *n)
1391{
1392	struct net_device *dev = n->dev;
1393	int hatype = dev ? dev->type : 0;
1394	char tbuf[16];
1395
1396	sprintf(tbuf, "%pI4", n->key);
1397	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1398		   tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
1399		   dev ? dev->name : "*");
1400}
1401
1402static int arp_seq_show(struct seq_file *seq, void *v)
1403{
1404	if (v == SEQ_START_TOKEN) {
1405		seq_puts(seq, "IP address       HW type     Flags       "
1406			      "HW address            Mask     Device\n");
1407	} else {
1408		struct neigh_seq_state *state = seq->private;
1409
1410		if (state->flags & NEIGH_SEQ_IS_PNEIGH)
1411			arp_format_pneigh_entry(seq, v);
1412		else
1413			arp_format_neigh_entry(seq, v);
1414	}
1415
1416	return 0;
1417}
1418
1419static void *arp_seq_start(struct seq_file *seq, loff_t *pos)
1420{
1421	/* Don't want to confuse "arp -a" w/ magic entries,
1422	 * so we tell the generic iterator to skip NUD_NOARP.
1423	 */
1424	return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP);
1425}
1426
1427/* ------------------------------------------------------------------------ */
1428
1429static const struct seq_operations arp_seq_ops = {
1430	.start	= arp_seq_start,
1431	.next	= neigh_seq_next,
1432	.stop	= neigh_seq_stop,
1433	.show	= arp_seq_show,
1434};
1435
1436static int arp_seq_open(struct inode *inode, struct file *file)
1437{
1438	return seq_open_net(inode, file, &arp_seq_ops,
1439			    sizeof(struct neigh_seq_state));
1440}
1441
1442static const struct file_operations arp_seq_fops = {
1443	.owner		= THIS_MODULE,
1444	.open           = arp_seq_open,
1445	.read           = seq_read,
1446	.llseek         = seq_lseek,
1447	.release	= seq_release_net,
1448};
1449
1450
1451static int __net_init arp_net_init(struct net *net)
1452{
1453	if (!proc_net_fops_create(net, "arp", S_IRUGO, &arp_seq_fops))
1454		return -ENOMEM;
1455	return 0;
1456}
1457
1458static void __net_exit arp_net_exit(struct net *net)
1459{
1460	proc_net_remove(net, "arp");
1461}
1462
1463static struct pernet_operations arp_net_ops = {
1464	.init = arp_net_init,
1465	.exit = arp_net_exit,
1466};
1467
1468static int __init arp_proc_init(void)
1469{
1470	return register_pernet_subsys(&arp_net_ops);
1471}
1472
1473#else /* CONFIG_PROC_FS */
1474
1475static int __init arp_proc_init(void)
1476{
1477	return 0;
1478}
1479
1480#endif /* CONFIG_PROC_FS */
1481