diff options
Diffstat (limited to 'net/ipv4/devinet.c')
| -rw-r--r-- | net/ipv4/devinet.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 040c4f05b653..51ca946e3392 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
| @@ -64,20 +64,20 @@ | |||
| 64 | 64 | ||
| 65 | static struct ipv4_devconf ipv4_devconf = { | 65 | static struct ipv4_devconf ipv4_devconf = { |
| 66 | .data = { | 66 | .data = { |
| 67 | [NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1, | 67 | [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1, |
| 68 | [NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1, | 68 | [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, |
| 69 | [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, | 69 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, |
| 70 | [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, | 70 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, |
| 71 | }, | 71 | }, |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | static struct ipv4_devconf ipv4_devconf_dflt = { | 74 | static struct ipv4_devconf ipv4_devconf_dflt = { |
| 75 | .data = { | 75 | .data = { |
| 76 | [NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1, | 76 | [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1, |
| 77 | [NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1, | 77 | [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, |
| 78 | [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, | 78 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, |
| 79 | [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, | 79 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, |
| 80 | [NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE - 1] = 1, | 80 | [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1, |
| 81 | }, | 81 | }, |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| @@ -1317,14 +1317,19 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write, | |||
| 1317 | { | 1317 | { |
| 1318 | int *valp = ctl->data; | 1318 | int *valp = ctl->data; |
| 1319 | int val = *valp; | 1319 | int val = *valp; |
| 1320 | loff_t pos = *ppos; | ||
| 1320 | int ret = proc_dointvec(ctl, write, buffer, lenp, ppos); | 1321 | int ret = proc_dointvec(ctl, write, buffer, lenp, ppos); |
| 1321 | 1322 | ||
| 1322 | if (write && *valp != val) { | 1323 | if (write && *valp != val) { |
| 1323 | struct net *net = ctl->extra2; | 1324 | struct net *net = ctl->extra2; |
| 1324 | 1325 | ||
| 1325 | if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) { | 1326 | if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) { |
| 1326 | if (!rtnl_trylock()) | 1327 | if (!rtnl_trylock()) { |
| 1328 | /* Restore the original values before restarting */ | ||
| 1329 | *valp = val; | ||
| 1330 | *ppos = pos; | ||
| 1327 | return restart_syscall(); | 1331 | return restart_syscall(); |
| 1332 | } | ||
| 1328 | if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) { | 1333 | if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) { |
| 1329 | inet_forward_change(net); | 1334 | inet_forward_change(net); |
| 1330 | } else if (*valp) { | 1335 | } else if (*valp) { |
| @@ -1360,7 +1365,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write, | |||
| 1360 | { \ | 1365 | { \ |
| 1361 | .procname = name, \ | 1366 | .procname = name, \ |
| 1362 | .data = ipv4_devconf.data + \ | 1367 | .data = ipv4_devconf.data + \ |
| 1363 | NET_IPV4_CONF_ ## attr - 1, \ | 1368 | IPV4_DEVCONF_ ## attr - 1, \ |
| 1364 | .maxlen = sizeof(int), \ | 1369 | .maxlen = sizeof(int), \ |
| 1365 | .mode = mval, \ | 1370 | .mode = mval, \ |
| 1366 | .proc_handler = proc, \ | 1371 | .proc_handler = proc, \ |
| @@ -1381,7 +1386,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write, | |||
| 1381 | 1386 | ||
| 1382 | static struct devinet_sysctl_table { | 1387 | static struct devinet_sysctl_table { |
| 1383 | struct ctl_table_header *sysctl_header; | 1388 | struct ctl_table_header *sysctl_header; |
| 1384 | struct ctl_table devinet_vars[__NET_IPV4_CONF_MAX]; | 1389 | struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX]; |
| 1385 | char *dev_name; | 1390 | char *dev_name; |
| 1386 | } devinet_sysctl = { | 1391 | } devinet_sysctl = { |
| 1387 | .devinet_vars = { | 1392 | .devinet_vars = { |
| @@ -1408,6 +1413,7 @@ static struct devinet_sysctl_table { | |||
| 1408 | DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"), | 1413 | DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"), |
| 1409 | DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"), | 1414 | DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"), |
| 1410 | DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"), | 1415 | DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"), |
| 1416 | DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"), | ||
| 1411 | 1417 | ||
| 1412 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"), | 1418 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"), |
| 1413 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"), | 1419 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"), |
| @@ -1486,8 +1492,7 @@ static void __devinet_sysctl_unregister(struct ipv4_devconf *cnf) | |||
| 1486 | 1492 | ||
| 1487 | static void devinet_sysctl_register(struct in_device *idev) | 1493 | static void devinet_sysctl_register(struct in_device *idev) |
| 1488 | { | 1494 | { |
| 1489 | neigh_sysctl_register(idev->dev, idev->arp_parms, NET_IPV4, | 1495 | neigh_sysctl_register(idev->dev, idev->arp_parms, "ipv4", NULL); |
| 1490 | NET_IPV4_NEIGH, "ipv4", NULL); | ||
| 1491 | __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name, | 1496 | __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name, |
| 1492 | &idev->cnf); | 1497 | &idev->cnf); |
| 1493 | } | 1498 | } |
| @@ -1502,7 +1507,7 @@ static struct ctl_table ctl_forward_entry[] = { | |||
| 1502 | { | 1507 | { |
| 1503 | .procname = "ip_forward", | 1508 | .procname = "ip_forward", |
| 1504 | .data = &ipv4_devconf.data[ | 1509 | .data = &ipv4_devconf.data[ |
| 1505 | NET_IPV4_CONF_FORWARDING - 1], | 1510 | IPV4_DEVCONF_FORWARDING - 1], |
| 1506 | .maxlen = sizeof(int), | 1511 | .maxlen = sizeof(int), |
| 1507 | .mode = 0644, | 1512 | .mode = 0644, |
| 1508 | .proc_handler = devinet_sysctl_forward, | 1513 | .proc_handler = devinet_sysctl_forward, |
| @@ -1546,7 +1551,7 @@ static __net_init int devinet_init_net(struct net *net) | |||
| 1546 | if (tbl == NULL) | 1551 | if (tbl == NULL) |
| 1547 | goto err_alloc_ctl; | 1552 | goto err_alloc_ctl; |
| 1548 | 1553 | ||
| 1549 | tbl[0].data = &all->data[NET_IPV4_CONF_FORWARDING - 1]; | 1554 | tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1]; |
| 1550 | tbl[0].extra1 = all; | 1555 | tbl[0].extra1 = all; |
| 1551 | tbl[0].extra2 = net; | 1556 | tbl[0].extra2 = net; |
| 1552 | #endif | 1557 | #endif |
