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