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