arp.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:30k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* linux/net/inet/arp.c
  2.  *
  3.  * Version: $Id: arp.c,v 1.99 2001/08/30 22:55:42 davem Exp $
  4.  *
  5.  * Copyright (C) 1994 by Florian  La Roche
  6.  *
  7.  * This module implements the Address Resolution Protocol ARP (RFC 826),
  8.  * which is used to convert IP addresses (or in the future maybe other
  9.  * high-level addresses) into a low-level hardware address (like an Ethernet
  10.  * address).
  11.  *
  12.  * This program is free software; you can redistribute it and/or
  13.  * modify it under the terms of the GNU General Public License
  14.  * as published by the Free Software Foundation; either version
  15.  * 2 of the License, or (at your option) any later version.
  16.  *
  17.  * Fixes:
  18.  * Alan Cox : Removed the Ethernet assumptions in 
  19.  * Florian's code
  20.  * Alan Cox : Fixed some small errors in the ARP 
  21.  * logic
  22.  * Alan Cox : Allow >4K in /proc
  23.  * Alan Cox : Make ARP add its own protocol entry
  24.  * Ross Martin     :       Rewrote arp_rcv() and arp_get_info()
  25.  * Stephen Henson : Add AX25 support to arp_get_info()
  26.  * Alan Cox : Drop data when a device is downed.
  27.  * Alan Cox : Use init_timer().
  28.  * Alan Cox : Double lock fixes.
  29.  * Martin Seine : Move the arphdr structure
  30.  * to if_arp.h for compatibility.
  31.  * with BSD based programs.
  32.  * Andrew Tridgell :       Added ARP netmask code and
  33.  * re-arranged proxy handling.
  34.  * Alan Cox : Changed to use notifiers.
  35.  * Niibe Yutaka : Reply for this device or proxies only.
  36.  * Alan Cox : Don't proxy across hardware types!
  37.  * Jonathan Naylor : Added support for NET/ROM.
  38.  * Mike Shaver     :       RFC1122 checks.
  39.  * Jonathan Naylor : Only lookup the hardware address for
  40.  * the correct hardware type.
  41.  * Germano Caronni : Assorted subtle races.
  42.  * Craig Schlenter : Don't modify permanent entry 
  43.  * during arp_rcv.
  44.  * Russ Nelson : Tidied up a few bits.
  45.  * Alexey Kuznetsov: Major changes to caching and behaviour,
  46.  * eg intelligent arp probing and 
  47.  * generation
  48.  * of host down events.
  49.  * Alan Cox : Missing unlock in device events.
  50.  * Eckes : ARP ioctl control errors.
  51.  * Alexey Kuznetsov: Arp free fix.
  52.  * Manuel Rodriguez: Gratuitous ARP.
  53.  *              Jonathan Layes  :       Added arpd support through kerneld 
  54.  *                                      message queue (960314)
  55.  * Mike Shaver : /proc/sys/net/ipv4/arp_* support
  56.  * Mike McLagan    : Routing by source
  57.  * Stuart Cheshire : Metricom and grat arp fixes
  58.  * *** FOR 2.1 clean this up ***
  59.  * Lawrence V. Stefani: (08/12/96) Added FDDI support.
  60.  * Alan Cox  : Took the AP1000 nasty FDDI hack and
  61.  * folded into the mainstream FDDI code.
  62.  * Ack spit, Linus how did you allow that
  63.  * one in...
  64.  * Jes Sorensen : Make FDDI work again in 2.1.x and
  65.  * clean up the APFDDI & gen. FDDI bits.
  66.  * Alexey Kuznetsov: new arp state machine;
  67.  * now it is in net/core/neighbour.c.
  68.  * Krzysztof Halasa: Added Frame Relay ARP support.
  69.  */
  70. #include <linux/types.h>
  71. #include <linux/string.h>
  72. #include <linux/kernel.h>
  73. #include <linux/sched.h>
  74. #include <linux/config.h>
  75. #include <linux/socket.h>
  76. #include <linux/sockios.h>
  77. #include <linux/errno.h>
  78. #include <linux/in.h>
  79. #include <linux/mm.h>
  80. #include <linux/inet.h>
  81. #include <linux/netdevice.h>
  82. #include <linux/etherdevice.h>
  83. #include <linux/fddidevice.h>
  84. #include <linux/if_arp.h>
  85. #include <linux/trdevice.h>
  86. #include <linux/skbuff.h>
  87. #include <linux/proc_fs.h>
  88. #include <linux/stat.h>
  89. #include <linux/init.h>
  90. #ifdef CONFIG_SYSCTL
  91. #include <linux/sysctl.h>
  92. #endif
  93. #include <net/ip.h>
  94. #include <net/icmp.h>
  95. #include <net/route.h>
  96. #include <net/protocol.h>
  97. #include <net/tcp.h>
  98. #include <net/sock.h>
  99. #include <net/arp.h>
  100. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  101. #include <net/ax25.h>
  102. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  103. #include <net/netrom.h>
  104. #endif
  105. #endif
  106. #ifdef CONFIG_ATM_CLIP
  107. #include <net/atmclip.h>
  108. #endif
  109. #include <asm/system.h>
  110. #include <asm/uaccess.h>
  111. /*
  112.  * Interface to generic neighbour cache.
  113.  */
  114. static u32 arp_hash(const void *pkey, const struct net_device *dev);
  115. static int arp_constructor(struct neighbour *neigh);
  116. static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
  117. static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
  118. static void parp_redo(struct sk_buff *skb);
  119. static struct neigh_ops arp_generic_ops = {
  120. family: AF_INET,
  121. solicit: arp_solicit,
  122. error_report: arp_error_report,
  123. output: neigh_resolve_output,
  124. connected_output: neigh_connected_output,
  125. hh_output: dev_queue_xmit,
  126. queue_xmit: dev_queue_xmit,
  127. };
  128. static struct neigh_ops arp_hh_ops = {
  129. family: AF_INET,
  130. solicit: arp_solicit,
  131. error_report: arp_error_report,
  132. output: neigh_resolve_output,
  133. connected_output: neigh_resolve_output,
  134. hh_output: dev_queue_xmit,
  135. queue_xmit: dev_queue_xmit,
  136. };
  137. static struct neigh_ops arp_direct_ops = {
  138. family: AF_INET,
  139. output: dev_queue_xmit,
  140. connected_output: dev_queue_xmit,
  141. hh_output: dev_queue_xmit,
  142. queue_xmit: dev_queue_xmit,
  143. };
  144. struct neigh_ops arp_broken_ops = {
  145. family: AF_INET,
  146. solicit: arp_solicit,
  147. error_report: arp_error_report,
  148. output: neigh_compat_output,
  149. connected_output: neigh_compat_output,
  150. hh_output: dev_queue_xmit,
  151. queue_xmit: dev_queue_xmit,
  152. };
  153. struct neigh_table arp_tbl = {
  154. family: AF_INET,
  155. entry_size: sizeof(struct neighbour) + 4,
  156. key_len: 4,
  157. hash: arp_hash,
  158. constructor: arp_constructor,
  159. proxy_redo: parp_redo,
  160. id: "arp_cache",
  161. parms: {
  162. tbl: &arp_tbl,
  163. base_reachable_time: 30 * HZ,
  164. retrans_time: 1 * HZ,
  165. gc_staletime: 60 * HZ,
  166. reachable_time: 30 * HZ,
  167. delay_probe_time: 5 * HZ,
  168. queue_len: 3,
  169. ucast_probes: 3,
  170. mcast_probes: 3,
  171. anycast_delay: 1 * HZ,
  172. proxy_delay: (8 * HZ) / 10,
  173. proxy_qlen: 64,
  174. locktime: 1 * HZ,
  175. },
  176. gc_interval: 30 * HZ,
  177. gc_thresh1: 128,
  178. gc_thresh2: 512,
  179. gc_thresh3: 1024,
  180. };
  181. int arp_mc_map(u32 addr, u8 *haddr, struct net_device *dev, int dir)
  182. {
  183. switch (dev->type) {
  184. case ARPHRD_ETHER:
  185. case ARPHRD_FDDI:
  186. case ARPHRD_IEEE802:
  187. ip_eth_mc_map(addr, haddr);
  188. return 0; 
  189. case ARPHRD_IEEE802_TR:
  190. ip_tr_mc_map(addr, haddr);
  191. return 0;
  192. default:
  193. if (dir) {
  194. memcpy(haddr, dev->broadcast, dev->addr_len);
  195. return 0;
  196. }
  197. }
  198. return -EINVAL;
  199. }
  200. static u32 arp_hash(const void *pkey, const struct net_device *dev)
  201. {
  202. u32 hash_val;
  203. hash_val = *(u32*)pkey;
  204. hash_val ^= (hash_val>>16);
  205. hash_val ^= hash_val>>8;
  206. hash_val ^= hash_val>>3;
  207. hash_val = (hash_val^dev->ifindex)&NEIGH_HASHMASK;
  208. return hash_val;
  209. }
  210. static int arp_constructor(struct neighbour *neigh)
  211. {
  212. u32 addr = *(u32*)neigh->primary_key;
  213. struct net_device *dev = neigh->dev;
  214. struct in_device *in_dev = in_dev_get(dev);
  215. if (in_dev == NULL)
  216. return -EINVAL;
  217. neigh->type = inet_addr_type(addr);
  218. if (in_dev->arp_parms)
  219. neigh->parms = in_dev->arp_parms;
  220. in_dev_put(in_dev);
  221. if (dev->hard_header == NULL) {
  222. neigh->nud_state = NUD_NOARP;
  223. neigh->ops = &arp_direct_ops;
  224. neigh->output = neigh->ops->queue_xmit;
  225. } else {
  226. /* Good devices (checked by reading texts, but only Ethernet is
  227.    tested)
  228.    ARPHRD_ETHER: (ethernet, apfddi)
  229.    ARPHRD_FDDI: (fddi)
  230.    ARPHRD_IEEE802: (tr)
  231.    ARPHRD_METRICOM: (strip)
  232.    ARPHRD_ARCNET:
  233.    etc. etc. etc.
  234.    ARPHRD_IPDDP will also work, if author repairs it.
  235.    I did not it, because this driver does not work even
  236.    in old paradigm.
  237.  */
  238. #if 1
  239. /* So... these "amateur" devices are hopeless.
  240.    The only thing, that I can say now:
  241.    It is very sad that we need to keep ugly obsolete
  242.    code to make them happy.
  243.    They should be moved to more reasonable state, now
  244.    they use rebuild_header INSTEAD OF hard_start_xmit!!!
  245.    Besides that, they are sort of out of date
  246.    (a lot of redundant clones/copies, useless in 2.1),
  247.    I wonder why people believe that they work.
  248.  */
  249. switch (dev->type) {
  250. default:
  251. break;
  252. case ARPHRD_ROSE:
  253. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  254. case ARPHRD_AX25:
  255. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  256. case ARPHRD_NETROM:
  257. #endif
  258. neigh->ops = &arp_broken_ops;
  259. neigh->output = neigh->ops->output;
  260. return 0;
  261. #endif
  262. ;}
  263. #endif
  264. if (neigh->type == RTN_MULTICAST) {
  265. neigh->nud_state = NUD_NOARP;
  266. arp_mc_map(addr, neigh->ha, dev, 1);
  267. } else if (dev->flags&(IFF_NOARP|IFF_LOOPBACK)) {
  268. neigh->nud_state = NUD_NOARP;
  269. memcpy(neigh->ha, dev->dev_addr, dev->addr_len);
  270. } else if (neigh->type == RTN_BROADCAST || dev->flags&IFF_POINTOPOINT) {
  271. neigh->nud_state = NUD_NOARP;
  272. memcpy(neigh->ha, dev->broadcast, dev->addr_len);
  273. }
  274. if (dev->hard_header_cache)
  275. neigh->ops = &arp_hh_ops;
  276. else
  277. neigh->ops = &arp_generic_ops;
  278. if (neigh->nud_state&NUD_VALID)
  279. neigh->output = neigh->ops->connected_output;
  280. else
  281. neigh->output = neigh->ops->output;
  282. }
  283. return 0;
  284. }
  285. static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
  286. {
  287. dst_link_failure(skb);
  288. kfree_skb(skb);
  289. }
  290. static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
  291. {
  292. u32 saddr;
  293. u8  *dst_ha = NULL;
  294. struct net_device *dev = neigh->dev;
  295. u32 target = *(u32*)neigh->primary_key;
  296. int probes = atomic_read(&neigh->probes);
  297. if (skb && inet_addr_type(skb->nh.iph->saddr) == RTN_LOCAL)
  298. saddr = skb->nh.iph->saddr;
  299. else
  300. saddr = inet_select_addr(dev, target, RT_SCOPE_LINK);
  301. if ((probes -= neigh->parms->ucast_probes) < 0) {
  302. if (!(neigh->nud_state&NUD_VALID))
  303. printk(KERN_DEBUG "trying to ucast probe in NUD_INVALIDn");
  304. dst_ha = neigh->ha;
  305. read_lock_bh(&neigh->lock);
  306. } else if ((probes -= neigh->parms->app_probes) < 0) {
  307. #ifdef CONFIG_ARPD
  308. neigh_app_ns(neigh);
  309. #endif
  310. return;
  311. }
  312. arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr,
  313.  dst_ha, dev->dev_addr, NULL);
  314. if (dst_ha)
  315. read_unlock_bh(&neigh->lock);
  316. }
  317. static int arp_filter(__u32 sip, __u32 tip, struct net_device *dev)
  318. {
  319. struct rtable *rt;
  320. int flag = 0; 
  321. /*unsigned long now; */
  322. if (ip_route_output(&rt, sip, tip, 0, 0) < 0) 
  323. return 1;
  324. if (rt->u.dst.dev != dev) { 
  325. NET_INC_STATS_BH(ArpFilter);
  326. flag = 1;
  327. ip_rt_put(rt); 
  328. return flag; 
  329. /* OBSOLETE FUNCTIONS */
  330. /*
  331.  * Find an arp mapping in the cache. If not found, post a request.
  332.  *
  333.  * It is very UGLY routine: it DOES NOT use skb->dst->neighbour,
  334.  * even if it exists. It is supposed that skb->dev was mangled
  335.  * by a virtual device (eql, shaper). Nobody but broken devices
  336.  * is allowed to use this function, it is scheduled to be removed. --ANK
  337.  */
  338. static int arp_set_predefined(int addr_hint, unsigned char * haddr, u32 paddr, struct net_device * dev)
  339. {
  340. switch (addr_hint) {
  341. case RTN_LOCAL:
  342. printk(KERN_DEBUG "ARP: arp called for own IP addressn");
  343. memcpy(haddr, dev->dev_addr, dev->addr_len);
  344. return 1;
  345. case RTN_MULTICAST:
  346. arp_mc_map(paddr, haddr, dev, 1);
  347. return 1;
  348. case RTN_BROADCAST:
  349. memcpy(haddr, dev->broadcast, dev->addr_len);
  350. return 1;
  351. }
  352. return 0;
  353. }
  354. int arp_find(unsigned char *haddr, struct sk_buff *skb)
  355. {
  356. struct net_device *dev = skb->dev;
  357. u32 paddr;
  358. struct neighbour *n;
  359. if (!skb->dst) {
  360. printk(KERN_DEBUG "arp_find is called with dst==NULLn");
  361. kfree_skb(skb);
  362. return 1;
  363. }
  364. paddr = ((struct rtable*)skb->dst)->rt_gateway;
  365. if (arp_set_predefined(inet_addr_type(paddr), haddr, paddr, dev))
  366. return 0;
  367. n = __neigh_lookup(&arp_tbl, &paddr, dev, 1);
  368. if (n) {
  369. n->used = jiffies;
  370. if (n->nud_state&NUD_VALID || neigh_event_send(n, skb) == 0) {
  371. read_lock_bh(&n->lock);
  372.   memcpy(haddr, n->ha, dev->addr_len);
  373. read_unlock_bh(&n->lock);
  374. neigh_release(n);
  375. return 0;
  376. }
  377. neigh_release(n);
  378. } else
  379. kfree_skb(skb);
  380. return 1;
  381. }
  382. /* END OF OBSOLETE FUNCTIONS */
  383. int arp_bind_neighbour(struct dst_entry *dst)
  384. {
  385. struct net_device *dev = dst->dev;
  386. struct neighbour *n = dst->neighbour;
  387. if (dev == NULL)
  388. return -EINVAL;
  389. if (n == NULL) {
  390. u32 nexthop = ((struct rtable*)dst)->rt_gateway;
  391. if (dev->flags&(IFF_LOOPBACK|IFF_POINTOPOINT))
  392. nexthop = 0;
  393. n = __neigh_lookup_errno(
  394. #ifdef CONFIG_ATM_CLIP
  395.     dev->type == ARPHRD_ATM ? &clip_tbl :
  396. #endif
  397.     &arp_tbl, &nexthop, dev);
  398. if (IS_ERR(n))
  399. return PTR_ERR(n);
  400. dst->neighbour = n;
  401. }
  402. return 0;
  403. }
  404. /*
  405.  * Interface to link layer: send routine and receive handler.
  406.  */
  407. /*
  408.  * Create and send an arp packet. If (dest_hw == NULL), we create a broadcast
  409.  * message.
  410.  */
  411. void arp_send(int type, int ptype, u32 dest_ip, 
  412.       struct net_device *dev, u32 src_ip, 
  413.       unsigned char *dest_hw, unsigned char *src_hw,
  414.       unsigned char *target_hw)
  415. {
  416. struct sk_buff *skb;
  417. struct arphdr *arp;
  418. unsigned char *arp_ptr;
  419. /*
  420.  * No arp on this interface.
  421.  */
  422. if (dev->flags&IFF_NOARP)
  423. return;
  424. /*
  425.  * Allocate a buffer
  426.  */
  427. skb = alloc_skb(sizeof(struct arphdr)+ 2*(dev->addr_len+4)
  428. + dev->hard_header_len + 15, GFP_ATOMIC);
  429. if (skb == NULL)
  430. return;
  431. skb_reserve(skb, (dev->hard_header_len+15)&~15);
  432. skb->nh.raw = skb->data;
  433. arp = (struct arphdr *) skb_put(skb,sizeof(struct arphdr) + 2*(dev->addr_len+4));
  434. skb->dev = dev;
  435. skb->protocol = __constant_htons (ETH_P_ARP);
  436. if (src_hw == NULL)
  437. src_hw = dev->dev_addr;
  438. if (dest_hw == NULL)
  439. dest_hw = dev->broadcast;
  440. /*
  441.  * Fill the device header for the ARP frame
  442.  */
  443. if (dev->hard_header &&
  444.     dev->hard_header(skb,dev,ptype,dest_hw,src_hw,skb->len) < 0)
  445. goto out;
  446. /*
  447.  * Fill out the arp protocol part.
  448.  *
  449.  * The arp hardware type should match the device type, except for FDDI,
  450.  * which (according to RFC 1390) should always equal 1 (Ethernet).
  451.  */
  452. /*
  453.  * Exceptions everywhere. AX.25 uses the AX.25 PID value not the
  454.  * DIX code for the protocol. Make these device structure fields.
  455.  */
  456. switch (dev->type) {
  457. default:
  458. arp->ar_hrd = htons(dev->type);
  459. arp->ar_pro = __constant_htons(ETH_P_IP);
  460. break;
  461. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  462. case ARPHRD_AX25:
  463. arp->ar_hrd = __constant_htons(ARPHRD_AX25);
  464. arp->ar_pro = __constant_htons(AX25_P_IP);
  465. break;
  466. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  467. case ARPHRD_NETROM:
  468. arp->ar_hrd = __constant_htons(ARPHRD_NETROM);
  469. arp->ar_pro = __constant_htons(AX25_P_IP);
  470. break;
  471. #endif
  472. #endif
  473. #ifdef CONFIG_FDDI
  474. case ARPHRD_FDDI:
  475. arp->ar_hrd = __constant_htons(ARPHRD_ETHER);
  476. arp->ar_pro = __constant_htons(ETH_P_IP);
  477. break;
  478. #endif
  479. #ifdef CONFIG_TR
  480. case ARPHRD_IEEE802_TR:
  481. arp->ar_hrd = __constant_htons(ARPHRD_IEEE802);
  482. arp->ar_pro = __constant_htons(ETH_P_IP);
  483. break;
  484. #endif
  485. }
  486. arp->ar_hln = dev->addr_len;
  487. arp->ar_pln = 4;
  488. arp->ar_op = htons(type);
  489. arp_ptr=(unsigned char *)(arp+1);
  490. memcpy(arp_ptr, src_hw, dev->addr_len);
  491. arp_ptr+=dev->addr_len;
  492. memcpy(arp_ptr, &src_ip,4);
  493. arp_ptr+=4;
  494. if (target_hw != NULL)
  495. memcpy(arp_ptr, target_hw, dev->addr_len);
  496. else
  497. memset(arp_ptr, 0, dev->addr_len);
  498. arp_ptr+=dev->addr_len;
  499. memcpy(arp_ptr, &dest_ip, 4);
  500. dev_queue_xmit(skb);
  501. return;
  502. out:
  503. kfree_skb(skb);
  504. }
  505. static void parp_redo(struct sk_buff *skb)
  506. {
  507. arp_rcv(skb, skb->dev, NULL);
  508. }
  509. /*
  510.  * Receive an arp request by the device layer.
  511.  */
  512. int arp_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
  513. {
  514. struct arphdr *arp = skb->nh.arph;
  515. unsigned char *arp_ptr= (unsigned char *)(arp+1);
  516. struct rtable *rt;
  517. unsigned char *sha, *tha;
  518. u32 sip, tip;
  519. u16 dev_type = dev->type;
  520. int addr_type;
  521. struct in_device *in_dev = in_dev_get(dev);
  522. struct neighbour *n;
  523. /*
  524.  * The hardware length of the packet should match the hardware length
  525.  * of the device.  Similarly, the hardware types should match.  The
  526.  * device should be ARP-able.  Also, if pln is not 4, then the lookup
  527.  * is not from an IP number.  We can't currently handle this, so toss
  528.  * it. 
  529.  */  
  530. if (in_dev == NULL ||
  531.     arp->ar_hln != dev->addr_len    || 
  532.     dev->flags & IFF_NOARP ||
  533.     skb->pkt_type == PACKET_OTHERHOST ||
  534.     skb->pkt_type == PACKET_LOOPBACK ||
  535.     arp->ar_pln != 4)
  536. goto out;
  537. if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
  538. goto out_of_mem;
  539. if (skb_is_nonlinear(skb)) {
  540. if (skb_linearize(skb, GFP_ATOMIC) != 0)
  541. goto freeskb;
  542. arp = skb->nh.arph;
  543. arp_ptr= (unsigned char *)(arp+1);
  544. }
  545. switch (dev_type) {
  546. default:
  547. if (arp->ar_pro != __constant_htons(ETH_P_IP))
  548. goto out;
  549. if (htons(dev_type) != arp->ar_hrd)
  550. goto out;
  551. break;
  552. #ifdef CONFIG_NET_ETHERNET
  553. case ARPHRD_ETHER:
  554. /*
  555.  * ETHERNET devices will accept ARP hardware types of either
  556.  * 1 (Ethernet) or 6 (IEEE 802.2).
  557.  */
  558. if (arp->ar_hrd != __constant_htons(ARPHRD_ETHER) &&
  559.     arp->ar_hrd != __constant_htons(ARPHRD_IEEE802))
  560. goto out;
  561. if (arp->ar_pro != __constant_htons(ETH_P_IP))
  562. goto out;
  563. break;
  564. #endif
  565. #ifdef CONFIG_TR
  566. case ARPHRD_IEEE802_TR:
  567. /*
  568.  * Token ring devices will accept ARP hardware types of either
  569.  * 1 (Ethernet) or 6 (IEEE 802.2).
  570.  */
  571. if (arp->ar_hrd != __constant_htons(ARPHRD_ETHER) &&
  572.     arp->ar_hrd != __constant_htons(ARPHRD_IEEE802))
  573. goto out;
  574. if (arp->ar_pro != __constant_htons(ETH_P_IP))
  575. goto out;
  576. break;
  577. #endif
  578. #ifdef CONFIG_FDDI
  579. case ARPHRD_FDDI:
  580. /*
  581.  * According to RFC 1390, FDDI devices should accept ARP hardware types
  582.  * of 1 (Ethernet).  However, to be more robust, we'll accept hardware
  583.  * types of either 1 (Ethernet) or 6 (IEEE 802.2).
  584.  */
  585. if (arp->ar_hrd != __constant_htons(ARPHRD_ETHER) &&
  586.     arp->ar_hrd != __constant_htons(ARPHRD_IEEE802))
  587. goto out;
  588. if (arp->ar_pro != __constant_htons(ETH_P_IP))
  589. goto out;
  590. break;
  591. #endif
  592. #ifdef CONFIG_NET_FC
  593. case ARPHRD_IEEE802:
  594. /*
  595.  * According to RFC 2625, Fibre Channel devices (which are IEEE
  596.  * 802 devices) should accept ARP hardware types of 6 (IEEE 802)
  597.  * and 1 (Ethernet).
  598.  */
  599. if (arp->ar_hrd != __constant_htons(ARPHRD_ETHER) &&
  600.     arp->ar_hrd != __constant_htons(ARPHRD_IEEE802))
  601. goto out;
  602. if (arp->ar_pro != __constant_htons(ETH_P_IP))
  603. goto out;
  604. break;
  605. #endif
  606. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  607. case ARPHRD_AX25:
  608. if (arp->ar_pro != __constant_htons(AX25_P_IP))
  609. goto out;
  610. if (arp->ar_hrd != __constant_htons(ARPHRD_AX25))
  611. goto out;
  612. break;
  613. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  614. case ARPHRD_NETROM:
  615. if (arp->ar_pro != __constant_htons(AX25_P_IP))
  616. goto out;
  617. if (arp->ar_hrd != __constant_htons(ARPHRD_NETROM))
  618. goto out;
  619. break;
  620. #endif
  621. #endif
  622. }
  623. /* Understand only these message types */
  624. if (arp->ar_op != __constant_htons(ARPOP_REPLY) &&
  625.     arp->ar_op != __constant_htons(ARPOP_REQUEST))
  626. goto out;
  627. /*
  628.  * Extract fields
  629.  */
  630. sha=arp_ptr;
  631. arp_ptr += dev->addr_len;
  632. memcpy(&sip, arp_ptr, 4);
  633. arp_ptr += 4;
  634. tha=arp_ptr;
  635. arp_ptr += dev->addr_len;
  636. memcpy(&tip, arp_ptr, 4);
  637. /* 
  638.  * Check for bad requests for 127.x.x.x and requests for multicast
  639.  * addresses.  If this is one such, delete it.
  640.  */
  641. if (LOOPBACK(tip) || MULTICAST(tip))
  642. goto out;
  643. /*
  644.  *     Special case: We must set Frame Relay source Q.922 address
  645.  */
  646. if (dev_type == ARPHRD_DLCI)
  647. sha = dev->broadcast;
  648. /*
  649.  *  Process entry.  The idea here is we want to send a reply if it is a
  650.  *  request for us or if it is a request for someone else that we hold
  651.  *  a proxy for.  We want to add an entry to our cache if it is a reply
  652.  *  to us or if it is a request for our address.  
  653.  *  (The assumption for this last is that if someone is requesting our 
  654.  *  address, they are probably intending to talk to us, so it saves time 
  655.  *  if we cache their address.  Their address is also probably not in 
  656.  *  our cache, since ours is not in their cache.)
  657.  * 
  658.  *  Putting this another way, we only care about replies if they are to
  659.  *  us, in which case we add them to the cache.  For requests, we care
  660.  *  about those for us and those for our proxies.  We reply to both,
  661.  *  and in the case of requests for us we add the requester to the arp 
  662.  *  cache.
  663.  */
  664. /* Special case: IPv4 duplicate address detection packet (RFC2131) */
  665. if (sip == 0) {
  666. if (arp->ar_op == __constant_htons(ARPOP_REQUEST) &&
  667.     inet_addr_type(tip) == RTN_LOCAL)
  668. arp_send(ARPOP_REPLY,ETH_P_ARP,tip,dev,tip,sha,dev->dev_addr,dev->dev_addr);
  669. goto out;
  670. }
  671. if (arp->ar_op == __constant_htons(ARPOP_REQUEST) &&
  672.     ip_route_input(skb, tip, sip, 0, dev) == 0) {
  673. rt = (struct rtable*)skb->dst;
  674. addr_type = rt->rt_type;
  675. if (addr_type == RTN_LOCAL) {
  676. n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
  677. if (n) {
  678. int dont_send = 0;
  679. if (IN_DEV_ARPFILTER(in_dev))
  680. dont_send |= arp_filter(sip,tip,dev); 
  681. if (!dont_send)
  682. arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
  683. neigh_release(n);
  684. }
  685. goto out;
  686. } else if (IN_DEV_FORWARD(in_dev)) {
  687. if ((rt->rt_flags&RTCF_DNAT) ||
  688.     (addr_type == RTN_UNICAST  && rt->u.dst.dev != dev &&
  689.      (IN_DEV_PROXY_ARP(in_dev) || pneigh_lookup(&arp_tbl, &tip, dev, 0)))) {
  690. n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
  691. if (n)
  692. neigh_release(n);
  693. if (skb->stamp.tv_sec == 0 ||
  694.     skb->pkt_type == PACKET_HOST ||
  695.     in_dev->arp_parms->proxy_delay == 0) {
  696. arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
  697. } else {
  698. pneigh_enqueue(&arp_tbl, in_dev->arp_parms, skb);
  699. in_dev_put(in_dev);
  700. return 0;
  701. }
  702. goto out;
  703. }
  704. }
  705. }
  706. /* Update our ARP tables */
  707. n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
  708. #ifdef CONFIG_IP_ACCEPT_UNSOLICITED_ARP
  709. /* Unsolicited ARP is not accepted by default.
  710.    It is possible, that this option should be enabled for some
  711.    devices (strip is candidate)
  712.  */
  713. if (n == NULL &&
  714.     arp->ar_op == __constant_htons(ARPOP_REPLY) &&
  715.     inet_addr_type(sip) == RTN_UNICAST)
  716. n = __neigh_lookup(&arp_tbl, &sip, dev, -1);
  717. #endif
  718. if (n) {
  719. int state = NUD_REACHABLE;
  720. int override = 0;
  721. /* If several different ARP replies follows back-to-back,
  722.    use the FIRST one. It is possible, if several proxy
  723.    agents are active. Taking the first reply prevents
  724.    arp trashing and chooses the fastest router.
  725.  */
  726. if (jiffies - n->updated >= n->parms->locktime)
  727. override = 1;
  728. /* Broadcast replies and request packets
  729.    do not assert neighbour reachability.
  730.  */
  731. if (arp->ar_op != __constant_htons(ARPOP_REPLY) ||
  732.     skb->pkt_type != PACKET_HOST)
  733. state = NUD_STALE;
  734. neigh_update(n, sha, state, override, 1);
  735. neigh_release(n);
  736. }
  737. out:
  738. if (in_dev)
  739. in_dev_put(in_dev);
  740. freeskb:
  741. kfree_skb(skb);
  742. out_of_mem:
  743. return 0;
  744. }
  745. /*
  746.  * User level interface (ioctl, /proc)
  747.  */
  748. /*
  749.  * Set (create) an ARP cache entry.
  750.  */
  751. int arp_req_set(struct arpreq *r, struct net_device * dev)
  752. {
  753. u32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
  754. struct neighbour *neigh;
  755. int err;
  756. if (r->arp_flags&ATF_PUBL) {
  757. u32 mask = ((struct sockaddr_in *) &r->arp_netmask)->sin_addr.s_addr;
  758. if (mask && mask != 0xFFFFFFFF)
  759. return -EINVAL;
  760. if (!dev && (r->arp_flags & ATF_COM)) {
  761. dev = dev_getbyhwaddr(r->arp_ha.sa_family, r->arp_ha.sa_data);
  762. if (!dev)
  763. return -ENODEV;
  764. }
  765. if (mask) {
  766. if (pneigh_lookup(&arp_tbl, &ip, dev, 1) == NULL)
  767. return -ENOBUFS;
  768. return 0;
  769. }
  770. if (dev == NULL) {
  771. ipv4_devconf.proxy_arp = 1;
  772. return 0;
  773. }
  774. if (__in_dev_get(dev)) {
  775. __in_dev_get(dev)->cnf.proxy_arp = 1;
  776. return 0;
  777. }
  778. return -ENXIO;
  779. }
  780. if (r->arp_flags & ATF_PERM)
  781. r->arp_flags |= ATF_COM;
  782. if (dev == NULL) {
  783. struct rtable * rt;
  784. if ((err = ip_route_output(&rt, ip, 0, RTO_ONLINK, 0)) != 0)
  785. return err;
  786. dev = rt->u.dst.dev;
  787. ip_rt_put(rt);
  788. if (!dev)
  789. return -EINVAL;
  790. }
  791. if (r->arp_ha.sa_family != dev->type)
  792. return -EINVAL;
  793. neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
  794. err = PTR_ERR(neigh);
  795. if (!IS_ERR(neigh)) {
  796. unsigned state = NUD_STALE;
  797. if (r->arp_flags & ATF_PERM)
  798. state = NUD_PERMANENT;
  799. err = neigh_update(neigh, (r->arp_flags&ATF_COM) ?
  800.    r->arp_ha.sa_data : NULL, state, 1, 0);
  801. neigh_release(neigh);
  802. }
  803. return err;
  804. }
  805. static unsigned arp_state_to_flags(struct neighbour *neigh)
  806. {
  807. unsigned flags = 0;
  808. if (neigh->nud_state&NUD_PERMANENT)
  809. flags = ATF_PERM|ATF_COM;
  810. else if (neigh->nud_state&NUD_VALID)
  811. flags = ATF_COM;
  812. return flags;
  813. }
  814. /*
  815.  * Get an ARP cache entry.
  816.  */
  817. static int arp_req_get(struct arpreq *r, struct net_device *dev)
  818. {
  819. u32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr;
  820. struct neighbour *neigh;
  821. int err = -ENXIO;
  822. neigh = neigh_lookup(&arp_tbl, &ip, dev);
  823. if (neigh) {
  824. read_lock_bh(&neigh->lock);
  825. memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len);
  826. r->arp_flags = arp_state_to_flags(neigh);
  827. read_unlock_bh(&neigh->lock);
  828. r->arp_ha.sa_family = dev->type;
  829. strncpy(r->arp_dev, dev->name, sizeof(r->arp_dev));
  830. neigh_release(neigh);
  831. err = 0;
  832. }
  833. return err;
  834. }
  835. int arp_req_delete(struct arpreq *r, struct net_device * dev)
  836. {
  837. int err;
  838. u32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr;
  839. struct neighbour *neigh;
  840. if (r->arp_flags & ATF_PUBL) {
  841. u32 mask = ((struct sockaddr_in *) &r->arp_netmask)->sin_addr.s_addr;
  842. if (mask == 0xFFFFFFFF)
  843. return pneigh_delete(&arp_tbl, &ip, dev);
  844. if (mask == 0) {
  845. if (dev == NULL) {
  846. ipv4_devconf.proxy_arp = 0;
  847. return 0;
  848. }
  849. if (__in_dev_get(dev)) {
  850. __in_dev_get(dev)->cnf.proxy_arp = 0;
  851. return 0;
  852. }
  853. return -ENXIO;
  854. }
  855. return -EINVAL;
  856. }
  857. if (dev == NULL) {
  858. struct rtable * rt;
  859. if ((err = ip_route_output(&rt, ip, 0, RTO_ONLINK, 0)) != 0)
  860. return err;
  861. dev = rt->u.dst.dev;
  862. ip_rt_put(rt);
  863. if (!dev)
  864. return -EINVAL;
  865. }
  866. err = -ENXIO;
  867. neigh = neigh_lookup(&arp_tbl, &ip, dev);
  868. if (neigh) {
  869. if (neigh->nud_state&~NUD_NOARP)
  870. err = neigh_update(neigh, NULL, NUD_FAILED, 1, 0);
  871. neigh_release(neigh);
  872. }
  873. return err;
  874. }
  875. /*
  876.  * Handle an ARP layer I/O control request.
  877.  */
  878. int arp_ioctl(unsigned int cmd, void *arg)
  879. {
  880. int err;
  881. struct arpreq r;
  882. struct net_device * dev = NULL;
  883. switch(cmd) {
  884. case SIOCDARP:
  885. case SIOCSARP:
  886. if (!capable(CAP_NET_ADMIN))
  887. return -EPERM;
  888. case SIOCGARP:
  889. err = copy_from_user(&r, arg, sizeof(struct arpreq));
  890. if (err)
  891. return -EFAULT;
  892. break;
  893. default:
  894. return -EINVAL;
  895. }
  896. if (r.arp_pa.sa_family != AF_INET)
  897. return -EPFNOSUPPORT;
  898. if (!(r.arp_flags & ATF_PUBL) &&
  899.     (r.arp_flags & (ATF_NETMASK|ATF_DONTPUB)))
  900. return -EINVAL;
  901. if (!(r.arp_flags & ATF_NETMASK))
  902. ((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr=__constant_htonl(0xFFFFFFFFUL);
  903. rtnl_lock();
  904. if (r.arp_dev[0]) {
  905. err = -ENODEV;
  906. if ((dev = __dev_get_by_name(r.arp_dev)) == NULL)
  907. goto out;
  908. /* Mmmm... It is wrong... ARPHRD_NETROM==0 */
  909. if (!r.arp_ha.sa_family)
  910. r.arp_ha.sa_family = dev->type;
  911. err = -EINVAL;
  912. if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type)
  913. goto out;
  914. } else if (cmd == SIOCGARP) {
  915. err = -ENODEV;
  916. goto out;
  917. }
  918. switch(cmd) {
  919. case SIOCDARP:
  920.         err = arp_req_delete(&r, dev);
  921. break;
  922. case SIOCSARP:
  923. err = arp_req_set(&r, dev);
  924. break;
  925. case SIOCGARP:
  926. err = arp_req_get(&r, dev);
  927. if (!err && copy_to_user(arg, &r, sizeof(r)))
  928. err = -EFAULT;
  929. break;
  930. }
  931. out:
  932. rtnl_unlock();
  933. return err;
  934. }
  935. /*
  936.  * Write the contents of the ARP cache to a PROCfs file.
  937.  */
  938. #ifndef CONFIG_PROC_FS
  939. static int arp_get_info(char *buffer, char **start, off_t offset, int length) { return 0; }
  940. #else
  941. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  942. static char *ax2asc2(ax25_address *a, char *buf);
  943. #endif
  944. #define HBUFFERLEN 30
  945. static int arp_get_info(char *buffer, char **start, off_t offset, int length)
  946. {
  947. int len=0;
  948. off_t pos=0;
  949. int size;
  950. char hbuffer[HBUFFERLEN];
  951. int i,j,k;
  952. const char hexbuf[] =  "0123456789ABCDEF";
  953. size = sprintf(buffer,"IP address       HW type     Flags       HW address            Mask     Devicen");
  954. pos+=size;
  955. len+=size;
  956. for(i=0; i<=NEIGH_HASHMASK; i++) {
  957. struct neighbour *n;
  958. read_lock_bh(&arp_tbl.lock);
  959. for (n=arp_tbl.hash_buckets[i]; n; n=n->next) {
  960. struct net_device *dev = n->dev;
  961. int hatype = dev->type;
  962. /* Do not confuse users "arp -a" with magic entries */
  963. if (!(n->nud_state&~NUD_NOARP))
  964. continue;
  965. read_lock(&n->lock);
  966. /*
  967.  * Convert hardware address to XX:XX:XX:XX ... form.
  968.  */
  969. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  970. if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM)
  971. ax2asc2((ax25_address *)n->ha, hbuffer);
  972. else {
  973. #endif
  974. for (k=0,j=0;k<HBUFFERLEN-3 && j<dev->addr_len;j++) {
  975. hbuffer[k++]=hexbuf[(n->ha[j]>>4)&15 ];
  976. hbuffer[k++]=hexbuf[n->ha[j]&15     ];
  977. hbuffer[k++]=':';
  978. }
  979. hbuffer[--k]=0;
  980. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  981. }
  982. #endif
  983. {
  984. char tbuf[16];
  985. sprintf(tbuf, "%u.%u.%u.%u", NIPQUAD(*(u32*)n->primary_key));
  986. size = sprintf(buffer+len, "%-16s 0x%-10x0x%-10x%s"
  987. "     *        %sn",
  988. tbuf,
  989. hatype,
  990. arp_state_to_flags(n), 
  991. hbuffer,
  992. dev->name);
  993. }
  994. read_unlock(&n->lock);
  995. len += size;
  996. pos += size;
  997.   
  998. if (pos <= offset)
  999. len=0;
  1000. if (pos >= offset+length) {
  1001. read_unlock_bh(&arp_tbl.lock);
  1002.   goto done;
  1003. }
  1004. }
  1005. read_unlock_bh(&arp_tbl.lock);
  1006. }
  1007. for (i=0; i<=PNEIGH_HASHMASK; i++) {
  1008. struct pneigh_entry *n;
  1009. for (n=arp_tbl.phash_buckets[i]; n; n=n->next) {
  1010. struct net_device *dev = n->dev;
  1011. int hatype = dev ? dev->type : 0;
  1012. {
  1013. char tbuf[16];
  1014. sprintf(tbuf, "%u.%u.%u.%u", NIPQUAD(*(u32*)n->key));
  1015. size = sprintf(buffer+len, "%-16s 0x%-10x0x%-10x%s"
  1016. "     *        %sn",
  1017. tbuf,
  1018. hatype,
  1019.   ATF_PUBL|ATF_PERM,
  1020. "00:00:00:00:00:00",
  1021. dev ? dev->name : "*");
  1022. }
  1023. len += size;
  1024. pos += size;
  1025.   
  1026. if (pos <= offset)
  1027. len=0;
  1028. if (pos >= offset+length)
  1029. goto done;
  1030. }
  1031. }
  1032. done:
  1033.   
  1034. *start = buffer+len-(pos-offset); /* Start of wanted data */
  1035. len = pos-offset; /* Start slop */
  1036. if (len>length)
  1037. len = length; /* Ending slop */
  1038. if (len<0)
  1039. len = 0;
  1040. return len;
  1041. }
  1042. #endif
  1043. /* Note, that it is not on notifier chain.
  1044.    It is necessary, that this routine was called after route cache will be
  1045.    flushed.
  1046.  */
  1047. void arp_ifdown(struct net_device *dev)
  1048. {
  1049. neigh_ifdown(&arp_tbl, dev);
  1050. }
  1051. /*
  1052.  * Called once on startup.
  1053.  */
  1054. static struct packet_type arp_packet_type = {
  1055. type: __constant_htons(ETH_P_ARP),
  1056. func: arp_rcv,
  1057. data: (void*) 1, /* understand shared skbs */
  1058. };
  1059. void __init arp_init (void)
  1060. {
  1061. neigh_table_init(&arp_tbl);
  1062. dev_add_pack(&arp_packet_type);
  1063. proc_net_create ("arp", 0, arp_get_info);
  1064. #ifdef CONFIG_SYSCTL
  1065. neigh_sysctl_register(NULL, &arp_tbl.parms, NET_IPV4, NET_IPV4_NEIGH, "ipv4");
  1066. #endif
  1067. }
  1068. #ifdef CONFIG_PROC_FS
  1069. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  1070. /*
  1071.  * ax25 -> ASCII conversion
  1072.  */
  1073. char *ax2asc2(ax25_address *a, char *buf)
  1074. {
  1075. char c, *s;
  1076. int n;
  1077. for (n = 0, s = buf; n < 6; n++) {
  1078. c = (a->ax25_call[n] >> 1) & 0x7F;
  1079. if (c != ' ') *s++ = c;
  1080. }
  1081. *s++ = '-';
  1082. if ((n = ((a->ax25_call[6] >> 1) & 0x0F)) > 9) {
  1083. *s++ = '1';
  1084. n -= 10;
  1085. }
  1086. *s++ = n + '0';
  1087. *s++ = '';
  1088. if (*buf == '' || *buf == '-')
  1089.    return "*";
  1090. return buf;
  1091. }
  1092. #endif
  1093. #endif