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