From 557fd15258a2adb709a93a4890c9aa1386da59ae Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Sun, 16 Dec 2007 13:30:39 -0800 Subject: [PATCH] --- yaml --- r: 78471 b: refs/heads/master c: 32e569b7277f13c4b27bb29c761189963e49ce7a h: refs/heads/master i: 78469: be351a1a26a3cc7842d1155b0e3cd29a75785a4c 78467: 8f54a344270ee3d809eb808e262f6e8cb067864f 78463: 41cb137f1030ec0d67a3172fa3b24193ce1feacd v: v3 --- [refs] | 2 +- trunk/include/net/arp.h | 2 +- trunk/net/ipv4/af_inet.c | 2 +- trunk/net/ipv4/arp.c | 28 ++++++++++++++++------------ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 482de59ca234..444df27db5dd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ea40b324d791d86a42b858d073007de4d133227e +refs/heads/master: 32e569b7277f13c4b27bb29c761189963e49ce7a diff --git a/trunk/include/net/arp.h b/trunk/include/net/arp.h index f02664568600..36482bf9ad36 100644 --- a/trunk/include/net/arp.h +++ b/trunk/include/net/arp.h @@ -11,7 +11,7 @@ extern struct neigh_table arp_tbl; extern void arp_init(void); extern int arp_find(unsigned char *haddr, struct sk_buff *skb); -extern int arp_ioctl(unsigned int cmd, void __user *arg); +extern int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg); extern void arp_send(int type, int ptype, __be32 dest_ip, struct net_device *dev, __be32 src_ip, unsigned char *dest_hw, unsigned char *src_hw, unsigned char *th); diff --git a/trunk/net/ipv4/af_inet.c b/trunk/net/ipv4/af_inet.c index 5089a369e99c..03633b7b9b4a 100644 --- a/trunk/net/ipv4/af_inet.c +++ b/trunk/net/ipv4/af_inet.c @@ -798,7 +798,7 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) case SIOCDARP: case SIOCGARP: case SIOCSARP: - err = arp_ioctl(cmd, (void __user *)arg); + err = arp_ioctl(sk->sk_net, cmd, (void __user *)arg); break; case SIOCGIFADDR: case SIOCSIFADDR: diff --git a/trunk/net/ipv4/arp.c b/trunk/net/ipv4/arp.c index 477f3e5fe8d1..5daf504ba3b3 100644 --- a/trunk/net/ipv4/arp.c +++ b/trunk/net/ipv4/arp.c @@ -952,7 +952,7 @@ static int arp_rcv(struct sk_buff *skb, struct net_device *dev, * Set (create) an ARP cache entry. */ -static int arp_req_set_proxy(struct net_device *dev, int on) +static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on) { if (dev == NULL) { IPV4_DEVCONF_ALL(PROXY_ARP) = on; @@ -965,7 +965,8 @@ static int arp_req_set_proxy(struct net_device *dev, int on) return -ENXIO; } -static int arp_req_set_public(struct arpreq *r, struct net_device *dev) +static int arp_req_set_public(struct net *net, struct arpreq *r, + struct net_device *dev) { __be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; __be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr; @@ -984,17 +985,18 @@ static int arp_req_set_public(struct arpreq *r, struct net_device *dev) return 0; } - return arp_req_set_proxy(dev, 1); + return arp_req_set_proxy(net, dev, 1); } -static int arp_req_set(struct arpreq *r, struct net_device * dev) +static int arp_req_set(struct net *net, struct arpreq *r, + struct net_device * dev) { __be32 ip; struct neighbour *neigh; int err; if (r->arp_flags & ATF_PUBL) - return arp_req_set_public(r, dev); + return arp_req_set_public(net, r, dev); ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; if (r->arp_flags & ATF_PERM) @@ -1080,7 +1082,8 @@ static int arp_req_get(struct arpreq *r, struct net_device *dev) return err; } -static int arp_req_delete_public(struct arpreq *r, struct net_device *dev) +static int arp_req_delete_public(struct net *net, struct arpreq *r, + struct net_device *dev) { __be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr; __be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr; @@ -1091,17 +1094,18 @@ static int arp_req_delete_public(struct arpreq *r, struct net_device *dev) if (mask) return -EINVAL; - return arp_req_set_proxy(dev, 0); + return arp_req_set_proxy(net, dev, 0); } -static int arp_req_delete(struct arpreq *r, struct net_device * dev) +static int arp_req_delete(struct net *net, struct arpreq *r, + struct net_device * dev) { int err; __be32 ip; struct neighbour *neigh; if (r->arp_flags & ATF_PUBL) - return arp_req_delete_public(r, dev); + return arp_req_delete_public(net, r, dev); ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; if (dev == NULL) { @@ -1131,7 +1135,7 @@ static int arp_req_delete(struct arpreq *r, struct net_device * dev) * Handle an ARP layer I/O control request. */ -int arp_ioctl(unsigned int cmd, void __user *arg) +int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg) { int err; struct arpreq r; @@ -1179,10 +1183,10 @@ int arp_ioctl(unsigned int cmd, void __user *arg) switch (cmd) { case SIOCDARP: - err = arp_req_delete(&r, dev); + err = arp_req_delete(net, &r, dev); break; case SIOCSARP: - err = arp_req_set(&r, dev); + err = arp_req_set(net, &r, dev); break; case SIOCGARP: err = arp_req_get(&r, dev);