xref: /openbmc/linux/net/ipv4/arp.c (revision 93d90ad7)
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 	bool is_garp = false;
736 
737 	/* arp_rcv below verifies the ARP header and verifies the device
738 	 * is ARP'able.
739 	 */
740 
741 	if (in_dev == NULL)
742 		goto out;
743 
744 	arp = arp_hdr(skb);
745 
746 	switch (dev_type) {
747 	default:
748 		if (arp->ar_pro != htons(ETH_P_IP) ||
749 		    htons(dev_type) != arp->ar_hrd)
750 			goto out;
751 		break;
752 	case ARPHRD_ETHER:
753 	case ARPHRD_FDDI:
754 	case ARPHRD_IEEE802:
755 		/*
756 		 * ETHERNET, and Fibre Channel (which are IEEE 802
757 		 * devices, according to RFC 2625) devices will accept ARP
758 		 * hardware types of either 1 (Ethernet) or 6 (IEEE 802.2).
759 		 * This is the case also of FDDI, where the RFC 1390 says that
760 		 * FDDI devices should accept ARP hardware of (1) Ethernet,
761 		 * however, to be more robust, we'll accept both 1 (Ethernet)
762 		 * or 6 (IEEE 802.2)
763 		 */
764 		if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
765 		     arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
766 		    arp->ar_pro != htons(ETH_P_IP))
767 			goto out;
768 		break;
769 	case ARPHRD_AX25:
770 		if (arp->ar_pro != htons(AX25_P_IP) ||
771 		    arp->ar_hrd != htons(ARPHRD_AX25))
772 			goto out;
773 		break;
774 	case ARPHRD_NETROM:
775 		if (arp->ar_pro != htons(AX25_P_IP) ||
776 		    arp->ar_hrd != htons(ARPHRD_NETROM))
777 			goto out;
778 		break;
779 	}
780 
781 	/* Understand only these message types */
782 
783 	if (arp->ar_op != htons(ARPOP_REPLY) &&
784 	    arp->ar_op != htons(ARPOP_REQUEST))
785 		goto out;
786 
787 /*
788  *	Extract fields
789  */
790 	arp_ptr = (unsigned char *)(arp + 1);
791 	sha	= arp_ptr;
792 	arp_ptr += dev->addr_len;
793 	memcpy(&sip, arp_ptr, 4);
794 	arp_ptr += 4;
795 	switch (dev_type) {
796 #if IS_ENABLED(CONFIG_FIREWIRE_NET)
797 	case ARPHRD_IEEE1394:
798 		break;
799 #endif
800 	default:
801 		arp_ptr += dev->addr_len;
802 	}
803 	memcpy(&tip, arp_ptr, 4);
804 /*
805  *	Check for bad requests for 127.x.x.x and requests for multicast
806  *	addresses.  If this is one such, delete it.
807  */
808 	if (ipv4_is_multicast(tip) ||
809 	    (!IN_DEV_ROUTE_LOCALNET(in_dev) && ipv4_is_loopback(tip)))
810 		goto out;
811 
812 /*
813  *     Special case: We must set Frame Relay source Q.922 address
814  */
815 	if (dev_type == ARPHRD_DLCI)
816 		sha = dev->broadcast;
817 
818 /*
819  *  Process entry.  The idea here is we want to send a reply if it is a
820  *  request for us or if it is a request for someone else that we hold
821  *  a proxy for.  We want to add an entry to our cache if it is a reply
822  *  to us or if it is a request for our address.
823  *  (The assumption for this last is that if someone is requesting our
824  *  address, they are probably intending to talk to us, so it saves time
825  *  if we cache their address.  Their address is also probably not in
826  *  our cache, since ours is not in their cache.)
827  *
828  *  Putting this another way, we only care about replies if they are to
829  *  us, in which case we add them to the cache.  For requests, we care
830  *  about those for us and those for our proxies.  We reply to both,
831  *  and in the case of requests for us we add the requester to the arp
832  *  cache.
833  */
834 
835 	/* Special case: IPv4 duplicate address detection packet (RFC2131) */
836 	if (sip == 0) {
837 		if (arp->ar_op == htons(ARPOP_REQUEST) &&
838 		    inet_addr_type(net, tip) == RTN_LOCAL &&
839 		    !arp_ignore(in_dev, sip, tip))
840 			arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
841 				 dev->dev_addr, sha);
842 		goto out;
843 	}
844 
845 	if (arp->ar_op == htons(ARPOP_REQUEST) &&
846 	    ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {
847 
848 		rt = skb_rtable(skb);
849 		addr_type = rt->rt_type;
850 
851 		if (addr_type == RTN_LOCAL) {
852 			int dont_send;
853 
854 			dont_send = arp_ignore(in_dev, sip, tip);
855 			if (!dont_send && IN_DEV_ARPFILTER(in_dev))
856 				dont_send = arp_filter(sip, tip, dev);
857 			if (!dont_send) {
858 				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
859 				if (n) {
860 					arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
861 						 dev, tip, sha, dev->dev_addr,
862 						 sha);
863 					neigh_release(n);
864 				}
865 			}
866 			goto out;
867 		} else if (IN_DEV_FORWARD(in_dev)) {
868 			if (addr_type == RTN_UNICAST  &&
869 			    (arp_fwd_proxy(in_dev, dev, rt) ||
870 			     arp_fwd_pvlan(in_dev, dev, rt, sip, tip) ||
871 			     (rt->dst.dev != dev &&
872 			      pneigh_lookup(&arp_tbl, net, &tip, dev, 0)))) {
873 				n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
874 				if (n)
875 					neigh_release(n);
876 
877 				if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
878 				    skb->pkt_type == PACKET_HOST ||
879 				    NEIGH_VAR(in_dev->arp_parms, PROXY_DELAY) == 0) {
880 					arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
881 						 dev, tip, sha, dev->dev_addr,
882 						 sha);
883 				} else {
884 					pneigh_enqueue(&arp_tbl,
885 						       in_dev->arp_parms, skb);
886 					return 0;
887 				}
888 				goto out;
889 			}
890 		}
891 	}
892 
893 	/* Update our ARP tables */
894 
895 	n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
896 
897 	if (IN_DEV_ARP_ACCEPT(in_dev)) {
898 		/* Unsolicited ARP is not accepted by default.
899 		   It is possible, that this option should be enabled for some
900 		   devices (strip is candidate)
901 		 */
902 		is_garp = arp->ar_op == htons(ARPOP_REQUEST) && tip == sip &&
903 			  inet_addr_type(net, sip) == RTN_UNICAST;
904 
905 		if (n == NULL &&
906 		    ((arp->ar_op == htons(ARPOP_REPLY)  &&
907 		      inet_addr_type(net, sip) == RTN_UNICAST) || is_garp))
908 			n = __neigh_lookup(&arp_tbl, &sip, dev, 1);
909 	}
910 
911 	if (n) {
912 		int state = NUD_REACHABLE;
913 		int override;
914 
915 		/* If several different ARP replies follows back-to-back,
916 		   use the FIRST one. It is possible, if several proxy
917 		   agents are active. Taking the first reply prevents
918 		   arp trashing and chooses the fastest router.
919 		 */
920 		override = time_after(jiffies,
921 				      n->updated +
922 				      NEIGH_VAR(n->parms, LOCKTIME)) ||
923 			   is_garp;
924 
925 		/* Broadcast replies and request packets
926 		   do not assert neighbour reachability.
927 		 */
928 		if (arp->ar_op != htons(ARPOP_REPLY) ||
929 		    skb->pkt_type != PACKET_HOST)
930 			state = NUD_STALE;
931 		neigh_update(n, sha, state,
932 			     override ? NEIGH_UPDATE_F_OVERRIDE : 0);
933 		neigh_release(n);
934 	}
935 
936 out:
937 	consume_skb(skb);
938 	return 0;
939 }
940 
941 static void parp_redo(struct sk_buff *skb)
942 {
943 	arp_process(skb);
944 }
945 
946 
947 /*
948  *	Receive an arp request from the device layer.
949  */
950 
951 static int arp_rcv(struct sk_buff *skb, struct net_device *dev,
952 		   struct packet_type *pt, struct net_device *orig_dev)
953 {
954 	const struct arphdr *arp;
955 
956 	/* do not tweak dropwatch on an ARP we will ignore */
957 	if (dev->flags & IFF_NOARP ||
958 	    skb->pkt_type == PACKET_OTHERHOST ||
959 	    skb->pkt_type == PACKET_LOOPBACK)
960 		goto consumeskb;
961 
962 	skb = skb_share_check(skb, GFP_ATOMIC);
963 	if (!skb)
964 		goto out_of_mem;
965 
966 	/* ARP header, plus 2 device addresses, plus 2 IP addresses.  */
967 	if (!pskb_may_pull(skb, arp_hdr_len(dev)))
968 		goto freeskb;
969 
970 	arp = arp_hdr(skb);
971 	if (arp->ar_hln != dev->addr_len || arp->ar_pln != 4)
972 		goto freeskb;
973 
974 	memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
975 
976 	return NF_HOOK(NFPROTO_ARP, NF_ARP_IN, skb, dev, NULL, arp_process);
977 
978 consumeskb:
979 	consume_skb(skb);
980 	return 0;
981 freeskb:
982 	kfree_skb(skb);
983 out_of_mem:
984 	return 0;
985 }
986 
987 /*
988  *	User level interface (ioctl)
989  */
990 
991 /*
992  *	Set (create) an ARP cache entry.
993  */
994 
995 static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on)
996 {
997 	if (dev == NULL) {
998 		IPV4_DEVCONF_ALL(net, PROXY_ARP) = on;
999 		return 0;
1000 	}
1001 	if (__in_dev_get_rtnl(dev)) {
1002 		IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on);
1003 		return 0;
1004 	}
1005 	return -ENXIO;
1006 }
1007 
1008 static int arp_req_set_public(struct net *net, struct arpreq *r,
1009 		struct net_device *dev)
1010 {
1011 	__be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1012 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1013 
1014 	if (mask && mask != htonl(0xFFFFFFFF))
1015 		return -EINVAL;
1016 	if (!dev && (r->arp_flags & ATF_COM)) {
1017 		dev = dev_getbyhwaddr_rcu(net, r->arp_ha.sa_family,
1018 				      r->arp_ha.sa_data);
1019 		if (!dev)
1020 			return -ENODEV;
1021 	}
1022 	if (mask) {
1023 		if (pneigh_lookup(&arp_tbl, net, &ip, dev, 1) == NULL)
1024 			return -ENOBUFS;
1025 		return 0;
1026 	}
1027 
1028 	return arp_req_set_proxy(net, dev, 1);
1029 }
1030 
1031 static int arp_req_set(struct net *net, struct arpreq *r,
1032 		       struct net_device *dev)
1033 {
1034 	__be32 ip;
1035 	struct neighbour *neigh;
1036 	int err;
1037 
1038 	if (r->arp_flags & ATF_PUBL)
1039 		return arp_req_set_public(net, r, dev);
1040 
1041 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1042 	if (r->arp_flags & ATF_PERM)
1043 		r->arp_flags |= ATF_COM;
1044 	if (dev == NULL) {
1045 		struct rtable *rt = ip_route_output(net, ip, 0, RTO_ONLINK, 0);
1046 
1047 		if (IS_ERR(rt))
1048 			return PTR_ERR(rt);
1049 		dev = rt->dst.dev;
1050 		ip_rt_put(rt);
1051 		if (!dev)
1052 			return -EINVAL;
1053 	}
1054 	switch (dev->type) {
1055 #if IS_ENABLED(CONFIG_FDDI)
1056 	case ARPHRD_FDDI:
1057 		/*
1058 		 * According to RFC 1390, FDDI devices should accept ARP
1059 		 * hardware types of 1 (Ethernet).  However, to be more
1060 		 * robust, we'll accept hardware types of either 1 (Ethernet)
1061 		 * or 6 (IEEE 802.2).
1062 		 */
1063 		if (r->arp_ha.sa_family != ARPHRD_FDDI &&
1064 		    r->arp_ha.sa_family != ARPHRD_ETHER &&
1065 		    r->arp_ha.sa_family != ARPHRD_IEEE802)
1066 			return -EINVAL;
1067 		break;
1068 #endif
1069 	default:
1070 		if (r->arp_ha.sa_family != dev->type)
1071 			return -EINVAL;
1072 		break;
1073 	}
1074 
1075 	neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
1076 	err = PTR_ERR(neigh);
1077 	if (!IS_ERR(neigh)) {
1078 		unsigned int state = NUD_STALE;
1079 		if (r->arp_flags & ATF_PERM)
1080 			state = NUD_PERMANENT;
1081 		err = neigh_update(neigh, (r->arp_flags & ATF_COM) ?
1082 				   r->arp_ha.sa_data : NULL, state,
1083 				   NEIGH_UPDATE_F_OVERRIDE |
1084 				   NEIGH_UPDATE_F_ADMIN);
1085 		neigh_release(neigh);
1086 	}
1087 	return err;
1088 }
1089 
1090 static unsigned int arp_state_to_flags(struct neighbour *neigh)
1091 {
1092 	if (neigh->nud_state&NUD_PERMANENT)
1093 		return ATF_PERM | ATF_COM;
1094 	else if (neigh->nud_state&NUD_VALID)
1095 		return ATF_COM;
1096 	else
1097 		return 0;
1098 }
1099 
1100 /*
1101  *	Get an ARP cache entry.
1102  */
1103 
1104 static int arp_req_get(struct arpreq *r, struct net_device *dev)
1105 {
1106 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1107 	struct neighbour *neigh;
1108 	int err = -ENXIO;
1109 
1110 	neigh = neigh_lookup(&arp_tbl, &ip, dev);
1111 	if (neigh) {
1112 		read_lock_bh(&neigh->lock);
1113 		memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len);
1114 		r->arp_flags = arp_state_to_flags(neigh);
1115 		read_unlock_bh(&neigh->lock);
1116 		r->arp_ha.sa_family = dev->type;
1117 		strlcpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
1118 		neigh_release(neigh);
1119 		err = 0;
1120 	}
1121 	return err;
1122 }
1123 
1124 static int arp_invalidate(struct net_device *dev, __be32 ip)
1125 {
1126 	struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);
1127 	int err = -ENXIO;
1128 
1129 	if (neigh) {
1130 		if (neigh->nud_state & ~NUD_NOARP)
1131 			err = neigh_update(neigh, NULL, NUD_FAILED,
1132 					   NEIGH_UPDATE_F_OVERRIDE|
1133 					   NEIGH_UPDATE_F_ADMIN);
1134 		neigh_release(neigh);
1135 	}
1136 
1137 	return err;
1138 }
1139 
1140 static int arp_req_delete_public(struct net *net, struct arpreq *r,
1141 		struct net_device *dev)
1142 {
1143 	__be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
1144 	__be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1145 
1146 	if (mask == htonl(0xFFFFFFFF))
1147 		return pneigh_delete(&arp_tbl, net, &ip, dev);
1148 
1149 	if (mask)
1150 		return -EINVAL;
1151 
1152 	return arp_req_set_proxy(net, dev, 0);
1153 }
1154 
1155 static int arp_req_delete(struct net *net, struct arpreq *r,
1156 			  struct net_device *dev)
1157 {
1158 	__be32 ip;
1159 
1160 	if (r->arp_flags & ATF_PUBL)
1161 		return arp_req_delete_public(net, r, dev);
1162 
1163 	ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
1164 	if (dev == NULL) {
1165 		struct rtable *rt = ip_route_output(net, ip, 0, RTO_ONLINK, 0);
1166 		if (IS_ERR(rt))
1167 			return PTR_ERR(rt);
1168 		dev = rt->dst.dev;
1169 		ip_rt_put(rt);
1170 		if (!dev)
1171 			return -EINVAL;
1172 	}
1173 	return arp_invalidate(dev, ip);
1174 }
1175 
1176 /*
1177  *	Handle an ARP layer I/O control request.
1178  */
1179 
1180 int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
1181 {
1182 	int err;
1183 	struct arpreq r;
1184 	struct net_device *dev = NULL;
1185 
1186 	switch (cmd) {
1187 	case SIOCDARP:
1188 	case SIOCSARP:
1189 		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1190 			return -EPERM;
1191 	case SIOCGARP:
1192 		err = copy_from_user(&r, arg, sizeof(struct arpreq));
1193 		if (err)
1194 			return -EFAULT;
1195 		break;
1196 	default:
1197 		return -EINVAL;
1198 	}
1199 
1200 	if (r.arp_pa.sa_family != AF_INET)
1201 		return -EPFNOSUPPORT;
1202 
1203 	if (!(r.arp_flags & ATF_PUBL) &&
1204 	    (r.arp_flags & (ATF_NETMASK | ATF_DONTPUB)))
1205 		return -EINVAL;
1206 	if (!(r.arp_flags & ATF_NETMASK))
1207 		((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr =
1208 							   htonl(0xFFFFFFFFUL);
1209 	rtnl_lock();
1210 	if (r.arp_dev[0]) {
1211 		err = -ENODEV;
1212 		dev = __dev_get_by_name(net, r.arp_dev);
1213 		if (dev == NULL)
1214 			goto out;
1215 
1216 		/* Mmmm... It is wrong... ARPHRD_NETROM==0 */
1217 		if (!r.arp_ha.sa_family)
1218 			r.arp_ha.sa_family = dev->type;
1219 		err = -EINVAL;
1220 		if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
1221 			goto out;
1222 	} else if (cmd == SIOCGARP) {
1223 		err = -ENODEV;
1224 		goto out;
1225 	}
1226 
1227 	switch (cmd) {
1228 	case SIOCDARP:
1229 		err = arp_req_delete(net, &r, dev);
1230 		break;
1231 	case SIOCSARP:
1232 		err = arp_req_set(net, &r, dev);
1233 		break;
1234 	case SIOCGARP:
1235 		err = arp_req_get(&r, dev);
1236 		break;
1237 	}
1238 out:
1239 	rtnl_unlock();
1240 	if (cmd == SIOCGARP && !err && copy_to_user(arg, &r, sizeof(r)))
1241 		err = -EFAULT;
1242 	return err;
1243 }
1244 
1245 static int arp_netdev_event(struct notifier_block *this, unsigned long event,
1246 			    void *ptr)
1247 {
1248 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1249 	struct netdev_notifier_change_info *change_info;
1250 
1251 	switch (event) {
1252 	case NETDEV_CHANGEADDR:
1253 		neigh_changeaddr(&arp_tbl, dev);
1254 		rt_cache_flush(dev_net(dev));
1255 		break;
1256 	case NETDEV_CHANGE:
1257 		change_info = ptr;
1258 		if (change_info->flags_changed & IFF_NOARP)
1259 			neigh_changeaddr(&arp_tbl, dev);
1260 		break;
1261 	default:
1262 		break;
1263 	}
1264 
1265 	return NOTIFY_DONE;
1266 }
1267 
1268 static struct notifier_block arp_netdev_notifier = {
1269 	.notifier_call = arp_netdev_event,
1270 };
1271 
1272 /* Note, that it is not on notifier chain.
1273    It is necessary, that this routine was called after route cache will be
1274    flushed.
1275  */
1276 void arp_ifdown(struct net_device *dev)
1277 {
1278 	neigh_ifdown(&arp_tbl, dev);
1279 }
1280 
1281 
1282 /*
1283  *	Called once on startup.
1284  */
1285 
1286 static struct packet_type arp_packet_type __read_mostly = {
1287 	.type =	cpu_to_be16(ETH_P_ARP),
1288 	.func =	arp_rcv,
1289 };
1290 
1291 static int arp_proc_init(void);
1292 
1293 void __init arp_init(void)
1294 {
1295 	neigh_table_init(NEIGH_ARP_TABLE, &arp_tbl);
1296 
1297 	dev_add_pack(&arp_packet_type);
1298 	arp_proc_init();
1299 #ifdef CONFIG_SYSCTL
1300 	neigh_sysctl_register(NULL, &arp_tbl.parms, NULL);
1301 #endif
1302 	register_netdevice_notifier(&arp_netdev_notifier);
1303 }
1304 
1305 #ifdef CONFIG_PROC_FS
1306 #if IS_ENABLED(CONFIG_AX25)
1307 
1308 /* ------------------------------------------------------------------------ */
1309 /*
1310  *	ax25 -> ASCII conversion
1311  */
1312 static char *ax2asc2(ax25_address *a, char *buf)
1313 {
1314 	char c, *s;
1315 	int n;
1316 
1317 	for (n = 0, s = buf; n < 6; n++) {
1318 		c = (a->ax25_call[n] >> 1) & 0x7F;
1319 
1320 		if (c != ' ')
1321 			*s++ = c;
1322 	}
1323 
1324 	*s++ = '-';
1325 	n = (a->ax25_call[6] >> 1) & 0x0F;
1326 	if (n > 9) {
1327 		*s++ = '1';
1328 		n -= 10;
1329 	}
1330 
1331 	*s++ = n + '0';
1332 	*s++ = '\0';
1333 
1334 	if (*buf == '\0' || *buf == '-')
1335 		return "*";
1336 
1337 	return buf;
1338 }
1339 #endif /* CONFIG_AX25 */
1340 
1341 #define HBUFFERLEN 30
1342 
1343 static void arp_format_neigh_entry(struct seq_file *seq,
1344 				   struct neighbour *n)
1345 {
1346 	char hbuffer[HBUFFERLEN];
1347 	int k, j;
1348 	char tbuf[16];
1349 	struct net_device *dev = n->dev;
1350 	int hatype = dev->type;
1351 
1352 	read_lock(&n->lock);
1353 	/* Convert hardware address to XX:XX:XX:XX ... form. */
1354 #if IS_ENABLED(CONFIG_AX25)
1355 	if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
1356 		ax2asc2((ax25_address *)n->ha, hbuffer);
1357 	else {
1358 #endif
1359 	for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) {
1360 		hbuffer[k++] = hex_asc_hi(n->ha[j]);
1361 		hbuffer[k++] = hex_asc_lo(n->ha[j]);
1362 		hbuffer[k++] = ':';
1363 	}
1364 	if (k != 0)
1365 		--k;
1366 	hbuffer[k] = 0;
1367 #if IS_ENABLED(CONFIG_AX25)
1368 	}
1369 #endif
1370 	sprintf(tbuf, "%pI4", n->primary_key);
1371 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1372 		   tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
1373 	read_unlock(&n->lock);
1374 }
1375 
1376 static void arp_format_pneigh_entry(struct seq_file *seq,
1377 				    struct pneigh_entry *n)
1378 {
1379 	struct net_device *dev = n->dev;
1380 	int hatype = dev ? dev->type : 0;
1381 	char tbuf[16];
1382 
1383 	sprintf(tbuf, "%pI4", n->key);
1384 	seq_printf(seq, "%-16s 0x%-10x0x%-10x%s     *        %s\n",
1385 		   tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
1386 		   dev ? dev->name : "*");
1387 }
1388 
1389 static int arp_seq_show(struct seq_file *seq, void *v)
1390 {
1391 	if (v == SEQ_START_TOKEN) {
1392 		seq_puts(seq, "IP address       HW type     Flags       "
1393 			      "HW address            Mask     Device\n");
1394 	} else {
1395 		struct neigh_seq_state *state = seq->private;
1396 
1397 		if (state->flags & NEIGH_SEQ_IS_PNEIGH)
1398 			arp_format_pneigh_entry(seq, v);
1399 		else
1400 			arp_format_neigh_entry(seq, v);
1401 	}
1402 
1403 	return 0;
1404 }
1405 
1406 static void *arp_seq_start(struct seq_file *seq, loff_t *pos)
1407 {
1408 	/* Don't want to confuse "arp -a" w/ magic entries,
1409 	 * so we tell the generic iterator to skip NUD_NOARP.
1410 	 */
1411 	return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP);
1412 }
1413 
1414 /* ------------------------------------------------------------------------ */
1415 
1416 static const struct seq_operations arp_seq_ops = {
1417 	.start	= arp_seq_start,
1418 	.next	= neigh_seq_next,
1419 	.stop	= neigh_seq_stop,
1420 	.show	= arp_seq_show,
1421 };
1422 
1423 static int arp_seq_open(struct inode *inode, struct file *file)
1424 {
1425 	return seq_open_net(inode, file, &arp_seq_ops,
1426 			    sizeof(struct neigh_seq_state));
1427 }
1428 
1429 static const struct file_operations arp_seq_fops = {
1430 	.owner		= THIS_MODULE,
1431 	.open           = arp_seq_open,
1432 	.read           = seq_read,
1433 	.llseek         = seq_lseek,
1434 	.release	= seq_release_net,
1435 };
1436 
1437 
1438 static int __net_init arp_net_init(struct net *net)
1439 {
1440 	if (!proc_create("arp", S_IRUGO, net->proc_net, &arp_seq_fops))
1441 		return -ENOMEM;
1442 	return 0;
1443 }
1444 
1445 static void __net_exit arp_net_exit(struct net *net)
1446 {
1447 	remove_proc_entry("arp", net->proc_net);
1448 }
1449 
1450 static struct pernet_operations arp_net_ops = {
1451 	.init = arp_net_init,
1452 	.exit = arp_net_exit,
1453 };
1454 
1455 static int __init arp_proc_init(void)
1456 {
1457 	return register_pernet_subsys(&arp_net_ops);
1458 }
1459 
1460 #else /* CONFIG_PROC_FS */
1461 
1462 static int __init arp_proc_init(void)
1463 {
1464 	return 0;
1465 }
1466 
1467 #endif /* CONFIG_PROC_FS */
1468