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