arp.c (444fc8fc3a1f926fa224655b8950bd853368c1a3) arp.c (e5ed639913eea3e4783a550291775ab78dd84966)
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

--- 227 unchanged lines hidden (view full) ---

236 u32 addr = *(u32*)neigh->primary_key;
237 struct net_device *dev = neigh->dev;
238 struct in_device *in_dev;
239 struct neigh_parms *parms;
240
241 neigh->type = inet_addr_type(addr);
242
243 rcu_read_lock();
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

--- 227 unchanged lines hidden (view full) ---

236 u32 addr = *(u32*)neigh->primary_key;
237 struct net_device *dev = neigh->dev;
238 struct in_device *in_dev;
239 struct neigh_parms *parms;
240
241 neigh->type = inet_addr_type(addr);
242
243 rcu_read_lock();
244 in_dev = rcu_dereference(__in_dev_get(dev));
244 in_dev = __in_dev_get_rcu(dev);
245 if (in_dev == NULL) {
246 rcu_read_unlock();
247 return -EINVAL;
248 }
249
250 parms = in_dev->arp_parms;
251 __neigh_parms_put(neigh->parms);
252 neigh->parms = neigh_parms_clone(parms);

--- 731 unchanged lines hidden (view full) ---

984 if (pneigh_lookup(&arp_tbl, &ip, dev, 1) == NULL)
985 return -ENOBUFS;
986 return 0;
987 }
988 if (dev == NULL) {
989 ipv4_devconf.proxy_arp = 1;
990 return 0;
991 }
245 if (in_dev == NULL) {
246 rcu_read_unlock();
247 return -EINVAL;
248 }
249
250 parms = in_dev->arp_parms;
251 __neigh_parms_put(neigh->parms);
252 neigh->parms = neigh_parms_clone(parms);

--- 731 unchanged lines hidden (view full) ---

984 if (pneigh_lookup(&arp_tbl, &ip, dev, 1) == NULL)
985 return -ENOBUFS;
986 return 0;
987 }
988 if (dev == NULL) {
989 ipv4_devconf.proxy_arp = 1;
990 return 0;
991 }
992 if (__in_dev_get(dev)) {
993 __in_dev_get(dev)->cnf.proxy_arp = 1;
992 if (__in_dev_get_rtnl(dev)) {
993 __in_dev_get_rtnl(dev)->cnf.proxy_arp = 1;
994 return 0;
995 }
996 return -ENXIO;
997 }
998
999 if (r->arp_flags & ATF_PERM)
1000 r->arp_flags |= ATF_COM;
1001 if (dev == NULL) {

--- 88 unchanged lines hidden (view full) ---

1090 ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1091 if (mask == 0xFFFFFFFF)
1092 return pneigh_delete(&arp_tbl, &ip, dev);
1093 if (mask == 0) {
1094 if (dev == NULL) {
1095 ipv4_devconf.proxy_arp = 0;
1096 return 0;
1097 }
994 return 0;
995 }
996 return -ENXIO;
997 }
998
999 if (r->arp_flags & ATF_PERM)
1000 r->arp_flags |= ATF_COM;
1001 if (dev == NULL) {

--- 88 unchanged lines hidden (view full) ---

1090 ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr;
1091 if (mask == 0xFFFFFFFF)
1092 return pneigh_delete(&arp_tbl, &ip, dev);
1093 if (mask == 0) {
1094 if (dev == NULL) {
1095 ipv4_devconf.proxy_arp = 0;
1096 return 0;
1097 }
1098 if (__in_dev_get(dev)) {
1099 __in_dev_get(dev)->cnf.proxy_arp = 0;
1098 if (__in_dev_get_rtnl(dev)) {
1099 __in_dev_get_rtnl(dev)->cnf.proxy_arp = 0;
1100 return 0;
1101 }
1102 return -ENXIO;
1103 }
1104 return -EINVAL;
1105 }
1106
1107 if (dev == NULL) {

--- 319 unchanged lines hidden ---
1100 return 0;
1101 }
1102 return -ENXIO;
1103 }
1104 return -EINVAL;
1105 }
1106
1107 if (dev == NULL) {

--- 319 unchanged lines hidden ---