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 */
124static u32 arp_hash(const void *pkey, const struct net_device *dev, __u32 *hash_rnd);
125static int arp_constructor(struct neighbour *neigh);
126static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
127static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
128static void parp_redo(struct sk_buff *skb);
129
130static 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
138static 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
146static const struct neigh_ops arp_direct_ops = {
147	.family =		AF_INET,
148	.output =		neigh_direct_output,
149	.connected_output =	neigh_direct_output,
150};
151
152static 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
160struct 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};
189EXPORT_SYMBOL(arp_tbl);
190
191int 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
215static 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
222static 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
317static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
318{
319	dst_link_failure(skb);
320	kfree_skb(skb);
321}
322
323static 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
382static 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
418static 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
447static 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
466int 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}
497EXPORT_SYMBOL(arp_find);
498
499/* END OF OBSOLETE FUNCTIONS */
500
501/*
502 * Check if we can use proxy ARP for this path
503 */
504static 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 */
549static 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 */
575struct 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
676out:
677	kfree_skb(skb);
678	return NULL;
679}
680EXPORT_SYMBOL(arp_create);
681
682/*
683 *	Send an arp packet.
684 */
685void 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}
690EXPORT_SYMBOL(arp_xmit);
691
692/*
693 *	Create and send an arp packet.
694 */
695void 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}
716EXPORT_SYMBOL(arp_send);
717
718/*
719 *	Process an arp request.
720 */
721
722static 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
936out:
937	consume_skb(skb);
938	return 0;
939}
940
941static 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
951static 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
978consumeskb:
979	consume_skb(skb);
980	return 0;
981freeskb:
982	kfree_skb(skb);
983out_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
995static 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
1008static 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
1031static 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
1090static 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
1104static 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
1124static 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
1140static 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
1155static 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
1180int 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	}
1238out:
1239	rtnl_unlock();
1240	if (cmd == SIOCGARP && !err && copy_to_user(arg, &r, sizeof(r)))
1241		err = -EFAULT;
1242	return err;
1243}
1244
1245static 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
1268static 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 */
1276void arp_ifdown(struct net_device *dev)
1277{
1278	neigh_ifdown(&arp_tbl, dev);
1279}
1280
1281
1282/*
1283 *	Called once on startup.
1284 */
1285
1286static struct packet_type arp_packet_type __read_mostly = {
1287	.type =	cpu_to_be16(ETH_P_ARP),
1288	.func =	arp_rcv,
1289};
1290
1291static int arp_proc_init(void);
1292
1293void __init arp_init(void)
1294{
1295	neigh_table_init(&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 */
1312static 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
1343static 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
1376static 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
1389static 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
1406static 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
1416static 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
1423static 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
1429static 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
1438static 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
1445static void __net_exit arp_net_exit(struct net *net)
1446{
1447	remove_proc_entry("arp", net->proc_net);
1448}
1449
1450static struct pernet_operations arp_net_ops = {
1451	.init = arp_net_init,
1452	.exit = arp_net_exit,
1453};
1454
1455static int __init arp_proc_init(void)
1456{
1457	return register_pernet_subsys(&arp_net_ops);
1458}
1459
1460#else /* CONFIG_PROC_FS */
1461
1462static int __init arp_proc_init(void)
1463{
1464	return 0;
1465}
1466
1467#endif /* CONFIG_PROC_FS */
1468