arp.c revision b23dd4fe42b455af5c6e20966b7d6959fa8352ea
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	rt = ip_route_output_key(net, &fl);
444	if (IS_ERR(rt))
445		return 1;
446	if (rt->dst.dev != dev) {
447		NET_INC_STATS_BH(net, LINUX_MIB_ARPFILTER);
448		flag = 1;
449	}
450	ip_rt_put(rt);
451	return flag;
452}
453
454/* OBSOLETE FUNCTIONS */
455
456/*
457 *	Find an arp mapping in the cache. If not found, post a request.
458 *
459 *	It is very UGLY routine: it DOES NOT use skb->dst->neighbour,
460 *	even if it exists. It is supposed that skb->dev was mangled
461 *	by a virtual device (eql, shaper). Nobody but broken devices
462 *	is allowed to use this function, it is scheduled to be removed. --ANK
463 */
464
465static int arp_set_predefined(int addr_hint, unsigned char *haddr,
466			      __be32 paddr, struct net_device *dev)
467{
468	switch (addr_hint) {
469	case RTN_LOCAL:
470		printk(KERN_DEBUG "ARP: arp called for own IP address\n");
471		memcpy(haddr, dev->dev_addr, dev->addr_len);
472		return 1;
473	case RTN_MULTICAST:
474		arp_mc_map(paddr, haddr, dev, 1);
475		return 1;
476	case RTN_BROADCAST:
477		memcpy(haddr, dev->broadcast, dev->addr_len);
478		return 1;
479	}
480	return 0;
481}
482
483
484int arp_find(unsigned char *haddr, struct sk_buff *skb)
485{
486	struct net_device *dev = skb->dev;
487	__be32 paddr;
488	struct neighbour *n;
489
490	if (!skb_dst(skb)) {
491		printk(KERN_DEBUG "arp_find is called with dst==NULL\n");
492		kfree_skb(skb);
493		return 1;
494	}
495
496	paddr = skb_rtable(skb)->rt_gateway;
497
498	if (arp_set_predefined(inet_addr_type(dev_net(dev), paddr), haddr,
499			       paddr, dev))
500		return 0;
501
502	n = __neigh_lookup(&arp_tbl, &paddr, dev, 1);
503
504	if (n) {
505		n->used = jiffies;
506		if (n->nud_state & NUD_VALID || neigh_event_send(n, skb) == 0) {
507			neigh_ha_snapshot(haddr, n, dev);
508			neigh_release(n);
509			return 0;
510		}
511		neigh_release(n);
512	} else
513		kfree_skb(skb);
514	return 1;
515}
516EXPORT_SYMBOL(arp_find);
517
518/* END OF OBSOLETE FUNCTIONS */
519
520int arp_bind_neighbour(struct dst_entry *dst)
521{
522	struct net_device *dev = dst->dev;
523	struct neighbour *n = dst->neighbour;
524
525	if (dev == NULL)
526		return -EINVAL;
527	if (n == NULL) {
528		__be32 nexthop = ((struct rtable *)dst)->rt_gateway;
529		if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
530			nexthop = 0;
531		n = __neigh_lookup_errno(
532#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
533					 dev->type == ARPHRD_ATM ?
534					 clip_tbl_hook :
535#endif
536					 &arp_tbl, &nexthop, dev);
537		if (IS_ERR(n))
538			return PTR_ERR(n);
539		dst->neighbour = n;
540	}
541	return 0;
542}
543
544/*
545 * Check if we can use proxy ARP for this path
546 */
547static inline int arp_fwd_proxy(struct in_device *in_dev,
548				struct net_device *dev,	struct rtable *rt)
549{
550	struct in_device *out_dev;
551	int imi, omi = -1;
552
553	if (rt->dst.dev == dev)
554		return 0;
555
556	if (!IN_DEV_PROXY_ARP(in_dev))
557		return 0;
558	imi = IN_DEV_MEDIUM_ID(in_dev);
559	if (imi == 0)
560		return 1;
561	if (imi == -1)
562		return 0;
563
564	/* place to check for proxy_arp for routes */
565
566	out_dev = __in_dev_get_rcu(rt->dst.dev);
567	if (out_dev)
568		omi = IN_DEV_MEDIUM_ID(out_dev);
569
570	return omi != imi && omi != -1;
571}
572
573/*
574 * Check for RFC3069 proxy arp private VLAN (allow to send back to same dev)
575 *
576 * RFC3069 supports proxy arp replies back to the same interface.  This
577 * is done to support (ethernet) switch features, like RFC 3069, where
578 * the individual ports are not allowed to communicate with each
579 * other, BUT they are allowed to talk to the upstream router.  As
580 * described in RFC 3069, it is possible to allow these hosts to
581 * communicate through the upstream router, by proxy_arp'ing.
582 *
583 * RFC 3069: "VLAN Aggregation for Efficient IP Address Allocation"
584 *
585 *  This technology is known by different names:
586 *    In RFC 3069 it is called VLAN Aggregation.
587 *    Cisco and Allied Telesyn call it Private VLAN.
588 *    Hewlett-Packard call it Source-Port filtering or port-isolation.
589 *    Ericsson call it MAC-Forced Forwarding (RFC Draft).
590 *
591 */
592static inline int arp_fwd_pvlan(struct in_device *in_dev,
593				struct net_device *dev,	struct rtable *rt,
594				__be32 sip, __be32 tip)
595{
596	/* Private VLAN is only concerned about the same ethernet segment */
597	if (rt->dst.dev != dev)
598		return 0;
599
600	/* Don't reply on self probes (often done by windowz boxes)*/
601	if (sip == tip)
602		return 0;
603
604	if (IN_DEV_PROXY_ARP_PVLAN(in_dev))
605		return 1;
606	else
607		return 0;
608}
609
610/*
611 *	Interface to link layer: send routine and receive handler.
612 */
613
614/*
615 *	Create an arp packet. If (dest_hw == NULL), we create a broadcast
616 *	message.
617 */
618struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
619			   struct net_device *dev, __be32 src_ip,
620			   const unsigned char *dest_hw,
621			   const unsigned char *src_hw,
622			   const unsigned char *target_hw)
623{
624	struct sk_buff *skb;
625	struct arphdr *arp;
626	unsigned char *arp_ptr;
627
628	/*
629	 *	Allocate a buffer
630	 */
631
632	skb = alloc_skb(arp_hdr_len(dev) + LL_ALLOCATED_SPACE(dev), GFP_ATOMIC);
633	if (skb == NULL)
634		return NULL;
635
636	skb_reserve(skb, LL_RESERVED_SPACE(dev));
637	skb_reset_network_header(skb);
638	arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev));
639	skb->dev = dev;
640	skb->protocol = htons(ETH_P_ARP);
641	if (src_hw == NULL)
642		src_hw = dev->dev_addr;
643	if (dest_hw == NULL)
644		dest_hw = dev->broadcast;
645
646	/*
647	 *	Fill the device header for the ARP frame
648	 */
649	if (dev_hard_header(skb, dev, ptype, dest_hw, src_hw, skb->len) < 0)
650		goto out;
651
652	/*
653	 * Fill out the arp protocol part.
654	 *
655	 * The arp hardware type should match the device type, except for FDDI,
656	 * which (according to RFC 1390) should always equal 1 (Ethernet).
657	 */
658	/*
659	 *	Exceptions everywhere. AX.25 uses the AX.25 PID value not the
660	 *	DIX code for the protocol. Make these device structure fields.
661	 */
662	switch (dev->type) {
663	default:
664		arp->ar_hrd = htons(dev->type);
665		arp->ar_pro = htons(ETH_P_IP);
666		break;
667
668#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
669	case ARPHRD_AX25:
670		arp->ar_hrd = htons(ARPHRD_AX25);
671		arp->ar_pro = htons(AX25_P_IP);
672		break;
673
674#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
675	case ARPHRD_NETROM:
676		arp->ar_hrd = htons(ARPHRD_NETROM);
677		arp->ar_pro = htons(AX25_P_IP);
678		break;
679#endif
680#endif
681
682#if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
683	case ARPHRD_FDDI:
684		arp->ar_hrd = htons(ARPHRD_ETHER);
685		arp->ar_pro = htons(ETH_P_IP);
686		break;
687#endif
688#if defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
689	case ARPHRD_IEEE802_TR:
690		arp->ar_hrd = htons(ARPHRD_IEEE802);
691		arp->ar_pro = htons(ETH_P_IP);
692		break;
693#endif
694	}
695
696	arp->ar_hln = dev->addr_len;
697	arp->ar_pln = 4;
698	arp->ar_op = htons(type);
699
700	arp_ptr = (unsigned char *)(arp + 1);
701
702	memcpy(arp_ptr, src_hw, dev->addr_len);
703	arp_ptr += dev->addr_len;
704	memcpy(arp_ptr, &src_ip, 4);
705	arp_ptr += 4;
706	if (target_hw != NULL)
707		memcpy(arp_ptr, target_hw, dev->addr_len);
708	else
709		memset(arp_ptr, 0, dev->addr_len);
710	arp_ptr += dev->addr_len;
711	memcpy(arp_ptr, &dest_ip, 4);
712
713	return skb;
714
715out:
716	kfree_skb(skb);
717	return NULL;
718}
719EXPORT_SYMBOL(arp_create);
720
721/*
722 *	Send an arp packet.
723 */
724void arp_xmit(struct sk_buff *skb)
725{
726	/* Send it off, maybe filter it using firewalling first.  */
727	NF_HOOK(NFPROTO_ARP, NF_ARP_OUT, skb, NULL, skb->dev, dev_queue_xmit);
728}
729EXPORT_SYMBOL(arp_xmit);
730
731/*
732 *	Create and send an arp packet.
733 */
734void arp_send(int type, int ptype, __be32 dest_ip,
735	      struct net_device *dev, __be32 src_ip,
736	      const unsigned char *dest_hw, const unsigned char *src_hw,
737	      const unsigned char *target_hw)
738{
739	struct sk_buff *skb;
740
741	/*
742	 *	No arp on this interface.
743	 */
744
745	if (dev->flags&IFF_NOARP)
746		return;
747
748	skb = arp_create(type, ptype, dest_ip, dev, src_ip,
749			 dest_hw, src_hw, target_hw);
750	if (skb == NULL)
751		return;
752
753	arp_xmit(skb);
754}
755EXPORT_SYMBOL(arp_send);
756
757/*
758 *	Process an arp request.
759 */
760
761static int arp_process(struct sk_buff *skb)
762{
763	struct net_device *dev = skb->dev;
764	struct in_device *in_dev = __in_dev_get_rcu(dev);
765	struct arphdr *arp;
766	unsigned char *arp_ptr;
767	struct rtable *rt;
768	unsigned char *sha;
769	__be32 sip, tip;
770	u16 dev_type = dev->type;
771	int addr_type;
772	struct neighbour *n;
773	struct net *net = dev_net(dev);
774
775	/* arp_rcv below verifies the ARP header and verifies the device
776	 * is ARP'able.
777	 */
778
779	if (in_dev == NULL)
780		goto out;
781
782	arp = arp_hdr(skb);
783
784	switch (dev_type) {
785	default:
786		if (arp->ar_pro != htons(ETH_P_IP) ||
787		    htons(dev_type) != arp->ar_hrd)
788			goto out;
789		break;
790	case ARPHRD_ETHER:
791	case ARPHRD_IEEE802_TR:
792	case ARPHRD_FDDI:
793	case ARPHRD_IEEE802:
794		/*
795		 * ETHERNET, Token Ring and Fibre Channel (which are IEEE 802
796		 * devices, according to RFC 2625) devices will accept ARP
797		 * hardware types of either 1 (Ethernet) or 6 (IEEE 802.2).
798		 * This is the case also of FDDI, where the RFC 1390 says that
799		 * FDDI devices should accept ARP hardware of (1) Ethernet,
800		 * however, to be more robust, we'll accept both 1 (Ethernet)
801		 * or 6 (IEEE 802.2)
802		 */
803		if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
804		     arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
805		    arp->ar_pro != htons(ETH_P_IP))
806			goto out;
807		break;
808	case ARPHRD_AX25:
809		if (arp->ar_pro != htons(AX25_P_IP) ||
810		    arp->ar_hrd != htons(ARPHRD_AX25))
811			goto out;
812		break;
813	case ARPHRD_NETROM:
814		if (arp->ar_pro != htons(AX25_P_IP) ||
815		    arp->ar_hrd != htons(ARPHRD_NETROM))
816			goto out;
817		break;
818	}
819
820	/* Understand only these message types */
821
822	if (arp->ar_op != htons(ARPOP_REPLY) &&
823	    arp->ar_op != htons(ARPOP_REQUEST))
824		goto out;
825
826/*
827 *	Extract fields
828 */
829	arp_ptr = (unsigned char *)(arp + 1);
830	sha	= arp_ptr;
831	arp_ptr += dev->addr_len;
832	memcpy(&sip, arp_ptr, 4);
833	arp_ptr += 4;
834	arp_ptr += dev->addr_len;
835	memcpy(&tip, arp_ptr, 4);
836/*
837 *	Check for bad requests for 127.x.x.x and requests for multicast
838 *	addresses.  If this is one such, delete it.
839 */
840	if (ipv4_is_loopback(tip) || ipv4_is_multicast(tip))
841		goto out;
842
843/*
844 *     Special case: We must set Frame Relay source Q.922 address
845 */
846	if (dev_type == ARPHRD_DLCI)
847		sha = dev->broadcast;
848
849/*
850 *  Process entry.  The idea here is we want to send a reply if it is a
851 *  request for us or if it is a request for someone else that we hold
852 *  a proxy for.  We want to add an entry to our cache if it is a reply
853 *  to us or if it is a request for our address.
854 *  (The assumption for this last is that if someone is requesting our
855 *  address, they are probably intending to talk to us, so it saves time
856 *  if we cache their address.  Their address is also probably not in
857 *  our cache, since ours is not in their cache.)
858 *
859 *  Putting this another way, we only care about replies if they are to
860 *  us, in which case we add them to the cache.  For requests, we care
861 *  about those for us and those for our proxies.  We reply to both,
862 *  and in the case of requests for us we add the requester to the arp
863 *  cache.
864 */
865
866	/* Special case: IPv4 duplicate address detection packet (RFC2131) */
867	if (sip == 0) {
868		if (arp->ar_op == htons(ARPOP_REQUEST) &&
869		    inet_addr_type(net, tip) == RTN_LOCAL &&
870		    !arp_ignore(in_dev, sip, tip))
871			arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
872				 dev->dev_addr, sha);
873		goto out;
874	}
875
876	if (arp->ar_op == htons(ARPOP_REQUEST) &&
877	    ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {
878
879		rt = skb_rtable(skb);
880		addr_type = rt->rt_type;
881
882		if (addr_type == RTN_LOCAL) {
883			int dont_send;
884
885			dont_send = arp_ignore(in_dev, sip, tip);
886			if (!dont_send && IN_DEV_ARPFILTER(in_dev))
887				dont_send = arp_filter(sip, tip, dev);
888			if (!dont_send) {
889				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
890				if (n) {
891					arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
892						 dev, tip, sha, dev->dev_addr,
893						 sha);
894					neigh_release(n);
895				}
896			}
897			goto out;
898		} else if (IN_DEV_FORWARD(in_dev)) {
899			if (addr_type == RTN_UNICAST  &&
900			    (arp_fwd_proxy(in_dev, dev, rt) ||
901			     arp_fwd_pvlan(in_dev, dev, rt, sip, tip) ||
902			     pneigh_lookup(&arp_tbl, net, &tip, dev, 0))) {
903				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
904				if (n)
905					neigh_release(n);
906
907				if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
908				    skb->pkt_type == PACKET_HOST ||
909				    in_dev->arp_parms->proxy_delay == 0) {
910					arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
911						 dev, tip, sha, dev->dev_addr,
912						 sha);
913				} else {
914					pneigh_enqueue(&arp_tbl,
915						       in_dev->arp_parms, skb);
916					return 0;
917				}
918				goto out;
919			}
920		}
921	}
922
923	/* Update our ARP tables */
924
925	n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
926
927	if (IPV4_DEVCONF_ALL(dev_net(dev), ARP_ACCEPT)) {
928		/* Unsolicited ARP is not accepted by default.
929		   It is possible, that this option should be enabled for some
930		   devices (strip is candidate)
931		 */
932		if (n == NULL &&
933		    (arp->ar_op == htons(ARPOP_REPLY) ||
934		     (arp->ar_op == htons(ARPOP_REQUEST) && tip == sip)) &&
935		    inet_addr_type(net, sip) == RTN_UNICAST)
936			n = __neigh_lookup(&arp_tbl, &sip, dev, 1);
937	}
938
939	if (n) {
940		int state = NUD_REACHABLE;
941		int override;
942
943		/* If several different ARP replies follows back-to-back,
944		   use the FIRST one. It is possible, if several proxy
945		   agents are active. Taking the first reply prevents
946		   arp trashing and chooses the fastest router.
947		 */
948		override = time_after(jiffies, n->updated + n->parms->locktime);
949
950		/* Broadcast replies and request packets
951		   do not assert neighbour reachability.
952		 */
953		if (arp->ar_op != htons(ARPOP_REPLY) ||
954		    skb->pkt_type != PACKET_HOST)
955			state = NUD_STALE;
956		neigh_update(n, sha, state,
957			     override ? NEIGH_UPDATE_F_OVERRIDE : 0);
958		neigh_release(n);
959	}
960
961out:
962	consume_skb(skb);
963	return 0;
964}
965
966static void parp_redo(struct sk_buff *skb)
967{
968	arp_process(skb);
969}
970
971
972/*
973 *	Receive an arp request from the device layer.
974 */
975
976static int arp_rcv(struct sk_buff *skb, struct net_device *dev,
977		   struct packet_type *pt, struct net_device *orig_dev)
978{
979	struct arphdr *arp;
980
981	/* ARP header, plus 2 device addresses, plus 2 IP addresses.  */
982	if (!pskb_may_pull(skb, arp_hdr_len(dev)))
983		goto freeskb;
984
985	arp = arp_hdr(skb);
986	if (arp->ar_hln != dev->addr_len ||
987	    dev->flags & IFF_NOARP ||
988	    skb->pkt_type == PACKET_OTHERHOST ||
989	    skb->pkt_type == PACKET_LOOPBACK ||
990	    arp->ar_pln != 4)
991		goto freeskb;
992
993	skb = skb_share_check(skb, GFP_ATOMIC);
994	if (skb == NULL)
995		goto out_of_mem;
996
997	memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
998
999	return NF_HOOK(NFPROTO_ARP, NF_ARP_IN, skb, dev, NULL, arp_process);
1000
1001freeskb:
1002	kfree_skb(skb);
1003out_of_mem:
1004	return 0;
1005}
1006
1007/*
1008 *	User level interface (ioctl)
1009 */
1010
1011/*
1012 *	Set (create) an ARP cache entry.
1013 */
1014
1015static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on)
1016{
1017	if (dev == NULL) {
1018		IPV4_DEVCONF_ALL(net, PROXY_ARP) = on;
1019		return 0;
1020	}
1021	if (__in_dev_get_rtnl(dev)) {
1022		IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on);
1023		return 0;
1024	}
1025	return -ENXIO;
1026}
1027
1028static int arp_req_set_public(struct net *net, struct arpreq *r,
1029		struct net_device *dev)
1030{
1031	__be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1032	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1033
1034	if (mask && mask != htonl(0xFFFFFFFF))
1035		return -EINVAL;
1036	if (!dev && (r->arp_flags & ATF_COM)) {
1037		dev = dev_getbyhwaddr_rcu(net, r->arp_ha.sa_family,
1038				      r->arp_ha.sa_data);
1039		if (!dev)
1040			return -ENODEV;
1041	}
1042	if (mask) {
1043		if (pneigh_lookup(&arp_tbl, net, &ip, dev, 1) == NULL)
1044			return -ENOBUFS;
1045		return 0;
1046	}
1047
1048	return arp_req_set_proxy(net, dev, 1);
1049}
1050
1051static int arp_req_set(struct net *net, struct arpreq *r,
1052		       struct net_device *dev)
1053{
1054	__be32 ip;
1055	struct neighbour *neigh;
1056	int err;
1057
1058	if (r->arp_flags & ATF_PUBL)
1059		return arp_req_set_public(net, r, dev);
1060
1061	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1062	if (r->arp_flags & ATF_PERM)
1063		r->arp_flags |= ATF_COM;
1064	if (dev == NULL) {
1065		struct flowi fl = { .fl4_dst = ip,
1066				    .fl4_tos = RTO_ONLINK };
1067		struct rtable *rt = ip_route_output_key(net, &fl);
1068
1069		if (IS_ERR(rt))
1070			return PTR_ERR(rt);
1071		dev = rt->dst.dev;
1072		ip_rt_put(rt);
1073		if (!dev)
1074			return -EINVAL;
1075	}
1076	switch (dev->type) {
1077#if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
1078	case ARPHRD_FDDI:
1079		/*
1080		 * According to RFC 1390, FDDI devices should accept ARP
1081		 * hardware types of 1 (Ethernet).  However, to be more
1082		 * robust, we'll accept hardware types of either 1 (Ethernet)
1083		 * or 6 (IEEE 802.2).
1084		 */
1085		if (r->arp_ha.sa_family != ARPHRD_FDDI &&
1086		    r->arp_ha.sa_family != ARPHRD_ETHER &&
1087		    r->arp_ha.sa_family != ARPHRD_IEEE802)
1088			return -EINVAL;
1089		break;
1090#endif
1091	default:
1092		if (r->arp_ha.sa_family != dev->type)
1093			return -EINVAL;
1094		break;
1095	}
1096
1097	neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
1098	err = PTR_ERR(neigh);
1099	if (!IS_ERR(neigh)) {
1100		unsigned state = NUD_STALE;
1101		if (r->arp_flags & ATF_PERM)
1102			state = NUD_PERMANENT;
1103		err = neigh_update(neigh, (r->arp_flags & ATF_COM) ?
1104				   r->arp_ha.sa_data : NULL, state,
1105				   NEIGH_UPDATE_F_OVERRIDE |
1106				   NEIGH_UPDATE_F_ADMIN);
1107		neigh_release(neigh);
1108	}
1109	return err;
1110}
1111
1112static unsigned arp_state_to_flags(struct neighbour *neigh)
1113{
1114	if (neigh->nud_state&NUD_PERMANENT)
1115		return ATF_PERM | ATF_COM;
1116	else if (neigh->nud_state&NUD_VALID)
1117		return ATF_COM;
1118	else
1119		return 0;
1120}
1121
1122/*
1123 *	Get an ARP cache entry.
1124 */
1125
1126static int arp_req_get(struct arpreq *r, struct net_device *dev)
1127{
1128	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1129	struct neighbour *neigh;
1130	int err = -ENXIO;
1131
1132	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1133	if (neigh) {
1134		read_lock_bh(&neigh->lock);
1135		memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len);
1136		r->arp_flags = arp_state_to_flags(neigh);
1137		read_unlock_bh(&neigh->lock);
1138		r->arp_ha.sa_family = dev->type;
1139		strlcpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
1140		neigh_release(neigh);
1141		err = 0;
1142	}
1143	return err;
1144}
1145
1146int arp_invalidate(struct net_device *dev, __be32 ip)
1147{
1148	struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);
1149	int err = -ENXIO;
1150
1151	if (neigh) {
1152		if (neigh->nud_state & ~NUD_NOARP)
1153			err = neigh_update(neigh, NULL, NUD_FAILED,
1154					   NEIGH_UPDATE_F_OVERRIDE|
1155					   NEIGH_UPDATE_F_ADMIN);
1156		neigh_release(neigh);
1157	}
1158
1159	return err;
1160}
1161EXPORT_SYMBOL(arp_invalidate);
1162
1163static int arp_req_delete_public(struct net *net, struct arpreq *r,
1164		struct net_device *dev)
1165{
1166	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1167	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1168
1169	if (mask == htonl(0xFFFFFFFF))
1170		return pneigh_delete(&arp_tbl, net, &ip, dev);
1171
1172	if (mask)
1173		return -EINVAL;
1174
1175	return arp_req_set_proxy(net, dev, 0);
1176}
1177
1178static int arp_req_delete(struct net *net, struct arpreq *r,
1179			  struct net_device *dev)
1180{
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 = ip_route_output_key(net, &fl);
1191		if (IS_ERR(rt))
1192			return PTR_ERR(rt);
1193		dev = rt->dst.dev;
1194		ip_rt_put(rt);
1195		if (!dev)
1196			return -EINVAL;
1197	}
1198	return arp_invalidate(dev, ip);
1199}
1200
1201/*
1202 *	Handle an ARP layer I/O control request.
1203 */
1204
1205int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
1206{
1207	int err;
1208	struct arpreq r;
1209	struct net_device *dev = NULL;
1210
1211	switch (cmd) {
1212	case SIOCDARP:
1213	case SIOCSARP:
1214		if (!capable(CAP_NET_ADMIN))
1215			return -EPERM;
1216	case SIOCGARP:
1217		err = copy_from_user(&r, arg, sizeof(struct arpreq));
1218		if (err)
1219			return -EFAULT;
1220		break;
1221	default:
1222		return -EINVAL;
1223	}
1224
1225	if (r.arp_pa.sa_family != AF_INET)
1226		return -EPFNOSUPPORT;
1227
1228	if (!(r.arp_flags & ATF_PUBL) &&
1229	    (r.arp_flags & (ATF_NETMASK | ATF_DONTPUB)))
1230		return -EINVAL;
1231	if (!(r.arp_flags & ATF_NETMASK))
1232		((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
1233							   htonl(0xFFFFFFFFUL);
1234	rtnl_lock();
1235	if (r.arp_dev[0]) {
1236		err = -ENODEV;
1237		dev = __dev_get_by_name(net, r.arp_dev);
1238		if (dev == NULL)
1239			goto out;
1240
1241		/* Mmmm... It is wrong... ARPHRD_NETROM==0 */
1242		if (!r.arp_ha.sa_family)
1243			r.arp_ha.sa_family = dev->type;
1244		err = -EINVAL;
1245		if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
1246			goto out;
1247	} else if (cmd == SIOCGARP) {
1248		err = -ENODEV;
1249		goto out;
1250	}
1251
1252	switch (cmd) {
1253	case SIOCDARP:
1254		err = arp_req_delete(net, &r, dev);
1255		break;
1256	case SIOCSARP:
1257		err = arp_req_set(net, &r, dev);
1258		break;
1259	case SIOCGARP:
1260		err = arp_req_get(&r, dev);
1261		break;
1262	}
1263out:
1264	rtnl_unlock();
1265	if (cmd == SIOCGARP && !err && copy_to_user(arg, &r, sizeof(r)))
1266		err = -EFAULT;
1267	return err;
1268}
1269
1270static int arp_netdev_event(struct notifier_block *this, unsigned long event,
1271			    void *ptr)
1272{
1273	struct net_device *dev = ptr;
1274
1275	switch (event) {
1276	case NETDEV_CHANGEADDR:
1277		neigh_changeaddr(&arp_tbl, dev);
1278		rt_cache_flush(dev_net(dev), 0);
1279		break;
1280	default:
1281		break;
1282	}
1283
1284	return NOTIFY_DONE;
1285}
1286
1287static struct notifier_block arp_netdev_notifier = {
1288	.notifier_call = arp_netdev_event,
1289};
1290
1291/* Note, that it is not on notifier chain.
1292   It is necessary, that this routine was called after route cache will be
1293   flushed.
1294 */
1295void arp_ifdown(struct net_device *dev)
1296{
1297	neigh_ifdown(&arp_tbl, dev);
1298}
1299
1300
1301/*
1302 *	Called once on startup.
1303 */
1304
1305static struct packet_type arp_packet_type __read_mostly = {
1306	.type =	cpu_to_be16(ETH_P_ARP),
1307	.func =	arp_rcv,
1308};
1309
1310static int arp_proc_init(void);
1311
1312void __init arp_init(void)
1313{
1314	neigh_table_init(&arp_tbl);
1315
1316	dev_add_pack(&arp_packet_type);
1317	arp_proc_init();
1318#ifdef CONFIG_SYSCTL
1319	neigh_sysctl_register(NULL, &arp_tbl.parms, "ipv4", NULL);
1320#endif
1321	register_netdevice_notifier(&arp_netdev_notifier);
1322}
1323
1324#ifdef CONFIG_PROC_FS
1325#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1326
1327/* ------------------------------------------------------------------------ */
1328/*
1329 *	ax25 -> ASCII conversion
1330 */
1331static char *ax2asc2(ax25_address *a, char *buf)
1332{
1333	char c, *s;
1334	int n;
1335
1336	for (n = 0, s = buf; n < 6; n++) {
1337		c = (a->ax25_call[n] >> 1) & 0x7F;
1338
1339		if (c != ' ')
1340			*s++ = c;
1341	}
1342
1343	*s++ = '-';
1344	n = (a->ax25_call[6] >> 1) & 0x0F;
1345	if (n > 9) {
1346		*s++ = '1';
1347		n -= 10;
1348	}
1349
1350	*s++ = n + '0';
1351	*s++ = '\0';
1352
1353	if (*buf == '\0' || *buf == '-')
1354		return "*";
1355
1356	return buf;
1357}
1358#endif /* CONFIG_AX25 */
1359
1360#define HBUFFERLEN 30
1361
1362static void arp_format_neigh_entry(struct seq_file *seq,
1363				   struct neighbour *n)
1364{
1365	char hbuffer[HBUFFERLEN];
1366	int k, j;
1367	char tbuf[16];
1368	struct net_device *dev = n->dev;
1369	int hatype = dev->type;
1370
1371	read_lock(&n->lock);
1372	/* Convert hardware address to XX:XX:XX:XX ... form. */
1373#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1374	if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
1375		ax2asc2((ax25_address *)n->ha, hbuffer);
1376	else {
1377#endif
1378	for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) {
1379		hbuffer[k++] = hex_asc_hi(n->ha[j]);
1380		hbuffer[k++] = hex_asc_lo(n->ha[j]);
1381		hbuffer[k++] = ':';
1382	}
1383	if (k != 0)
1384		--k;
1385	hbuffer[k] = 0;
1386#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
1387	}
1388#endif
1389	sprintf(tbuf, "%pI4", n->primary_key);
1390	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1391		   tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
1392	read_unlock(&n->lock);
1393}
1394
1395static void arp_format_pneigh_entry(struct seq_file *seq,
1396				    struct pneigh_entry *n)
1397{
1398	struct net_device *dev = n->dev;
1399	int hatype = dev ? dev->type : 0;
1400	char tbuf[16];
1401
1402	sprintf(tbuf, "%pI4", n->key);
1403	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1404		   tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
1405		   dev ? dev->name : "*");
1406}
1407
1408static int arp_seq_show(struct seq_file *seq, void *v)
1409{
1410	if (v == SEQ_START_TOKEN) {
1411		seq_puts(seq, "IP address       HW type     Flags       "
1412			      "HW address            Mask     Device\n");
1413	} else {
1414		struct neigh_seq_state *state = seq->private;
1415
1416		if (state->flags & NEIGH_SEQ_IS_PNEIGH)
1417			arp_format_pneigh_entry(seq, v);
1418		else
1419			arp_format_neigh_entry(seq, v);
1420	}
1421
1422	return 0;
1423}
1424
1425static void *arp_seq_start(struct seq_file *seq, loff_t *pos)
1426{
1427	/* Don't want to confuse "arp -a" w/ magic entries,
1428	 * so we tell the generic iterator to skip NUD_NOARP.
1429	 */
1430	return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP);
1431}
1432
1433/* ------------------------------------------------------------------------ */
1434
1435static const struct seq_operations arp_seq_ops = {
1436	.start	= arp_seq_start,
1437	.next	= neigh_seq_next,
1438	.stop	= neigh_seq_stop,
1439	.show	= arp_seq_show,
1440};
1441
1442static int arp_seq_open(struct inode *inode, struct file *file)
1443{
1444	return seq_open_net(inode, file, &arp_seq_ops,
1445			    sizeof(struct neigh_seq_state));
1446}
1447
1448static const struct file_operations arp_seq_fops = {
1449	.owner		= THIS_MODULE,
1450	.open           = arp_seq_open,
1451	.read           = seq_read,
1452	.llseek         = seq_lseek,
1453	.release	= seq_release_net,
1454};
1455
1456
1457static int __net_init arp_net_init(struct net *net)
1458{
1459	if (!proc_net_fops_create(net, "arp", S_IRUGO, &arp_seq_fops))
1460		return -ENOMEM;
1461	return 0;
1462}
1463
1464static void __net_exit arp_net_exit(struct net *net)
1465{
1466	proc_net_remove(net, "arp");
1467}
1468
1469static struct pernet_operations arp_net_ops = {
1470	.init = arp_net_init,
1471	.exit = arp_net_exit,
1472};
1473
1474static int __init arp_proc_init(void)
1475{
1476	return register_pernet_subsys(&arp_net_ops);
1477}
1478
1479#else /* CONFIG_PROC_FS */
1480
1481static int __init arp_proc_init(void)
1482{
1483	return 0;
1484}
1485
1486#endif /* CONFIG_PROC_FS */
1487