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