diff options
-rw-r--r-- | net/ipv4/devinet.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index a2d48173828a..4c01c55c381d 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -83,7 +83,8 @@ static struct ipv4_devconf ipv4_devconf_dflt = { | |||
83 | }, | 83 | }, |
84 | }; | 84 | }; |
85 | 85 | ||
86 | #define IPV4_DEVCONF_DFLT(attr) IPV4_DEVCONF(ipv4_devconf_dflt, attr) | 86 | #define IPV4_DEVCONF_DFLT(net, attr) \ |
87 | IPV4_DEVCONF((*net->ipv4.devconf_dflt), attr) | ||
87 | 88 | ||
88 | static const struct nla_policy ifa_ipv4_policy[IFA_MAX+1] = { | 89 | static const struct nla_policy ifa_ipv4_policy[IFA_MAX+1] = { |
89 | [IFA_LOCAL] = { .type = NLA_U32 }, | 90 | [IFA_LOCAL] = { .type = NLA_U32 }, |
@@ -164,7 +165,8 @@ static struct in_device *inetdev_init(struct net_device *dev) | |||
164 | if (!in_dev) | 165 | if (!in_dev) |
165 | goto out; | 166 | goto out; |
166 | INIT_RCU_HEAD(&in_dev->rcu_head); | 167 | INIT_RCU_HEAD(&in_dev->rcu_head); |
167 | memcpy(&in_dev->cnf, &ipv4_devconf_dflt, sizeof(in_dev->cnf)); | 168 | memcpy(&in_dev->cnf, dev->nd_net->ipv4.devconf_dflt, |
169 | sizeof(in_dev->cnf)); | ||
168 | in_dev->cnf.sysctl = NULL; | 170 | in_dev->cnf.sysctl = NULL; |
169 | in_dev->dev = dev; | 171 | in_dev->dev = dev; |
170 | if ((in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl)) == NULL) | 172 | if ((in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl)) == NULL) |
@@ -1247,7 +1249,7 @@ static void devinet_copy_dflt_conf(struct net *net, int i) | |||
1247 | rcu_read_lock(); | 1249 | rcu_read_lock(); |
1248 | in_dev = __in_dev_get_rcu(dev); | 1250 | in_dev = __in_dev_get_rcu(dev); |
1249 | if (in_dev && !test_bit(i, in_dev->cnf.state)) | 1251 | if (in_dev && !test_bit(i, in_dev->cnf.state)) |
1250 | in_dev->cnf.data[i] = ipv4_devconf_dflt.data[i]; | 1252 | in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i]; |
1251 | rcu_read_unlock(); | 1253 | rcu_read_unlock(); |
1252 | } | 1254 | } |
1253 | read_unlock(&dev_base_lock); | 1255 | read_unlock(&dev_base_lock); |
@@ -1259,7 +1261,7 @@ static void inet_forward_change(struct net *net) | |||
1259 | int on = IPV4_DEVCONF_ALL(FORWARDING); | 1261 | int on = IPV4_DEVCONF_ALL(FORWARDING); |
1260 | 1262 | ||
1261 | IPV4_DEVCONF_ALL(ACCEPT_REDIRECTS) = !on; | 1263 | IPV4_DEVCONF_ALL(ACCEPT_REDIRECTS) = !on; |
1262 | IPV4_DEVCONF_DFLT(FORWARDING) = on; | 1264 | IPV4_DEVCONF_DFLT(net, FORWARDING) = on; |
1263 | 1265 | ||
1264 | read_lock(&dev_base_lock); | 1266 | read_lock(&dev_base_lock); |
1265 | for_each_netdev(net, dev) { | 1267 | for_each_netdev(net, dev) { |
@@ -1288,7 +1290,7 @@ static int devinet_conf_proc(ctl_table *ctl, int write, | |||
1288 | 1290 | ||
1289 | set_bit(i, cnf->state); | 1291 | set_bit(i, cnf->state); |
1290 | 1292 | ||
1291 | if (cnf == &ipv4_devconf_dflt) | 1293 | if (cnf == net->ipv4.devconf_dflt) |
1292 | devinet_copy_dflt_conf(net, i); | 1294 | devinet_copy_dflt_conf(net, i); |
1293 | } | 1295 | } |
1294 | 1296 | ||
@@ -1341,7 +1343,7 @@ static int devinet_conf_sysctl(ctl_table *table, int __user *name, int nlen, | |||
1341 | 1343 | ||
1342 | set_bit(i, cnf->state); | 1344 | set_bit(i, cnf->state); |
1343 | 1345 | ||
1344 | if (cnf == &ipv4_devconf_dflt) | 1346 | if (cnf == net->ipv4.devconf_dflt) |
1345 | devinet_copy_dflt_conf(net, i); | 1347 | devinet_copy_dflt_conf(net, i); |
1346 | 1348 | ||
1347 | return 1; | 1349 | return 1; |
@@ -1360,7 +1362,7 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write, | |||
1360 | 1362 | ||
1361 | if (valp == &IPV4_DEVCONF_ALL(FORWARDING)) | 1363 | if (valp == &IPV4_DEVCONF_ALL(FORWARDING)) |
1362 | inet_forward_change(net); | 1364 | inet_forward_change(net); |
1363 | else if (valp != &IPV4_DEVCONF_DFLT(FORWARDING)) | 1365 | else if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) |
1364 | rt_cache_flush(0); | 1366 | rt_cache_flush(0); |
1365 | } | 1367 | } |
1366 | 1368 | ||