aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-12-09 20:56:27 -0500
committerDavid S. Miller <davem@davemloft.net>2013-12-09 20:56:27 -0500
commit4e5887934627884ae8445f524a48125f974a78c3 (patch)
tree03fc9ec1ff30dcc822c1a7ff421b69b1e9228502 /net
parent65be6291c856bee0308c535287f813418402d8b3 (diff)
parentbba24896f022d4d239494bebf18e713cd8aec7a5 (diff)
Merge branch 'neigh'
Jiri Pirko says: ==================== neigh: respect default parms values This is a long standing regression. But since the patchset is bigger and the regression happened in 2007, I'm proposing this to net-next instead. Basically the problem is that if user wants to use /etc/sysctl.conf to specify default values of neigh related params, he is not able to do that. The reason is that the default values are copied to dev instance right after netdev is registered. And that is way to early. The original behaviour for ipv4 was that this happened after first address was assigned to device. For ipv6 this was apparently from the very beginning. So this patchset basically reverts the behaviour back to what it was in 2007 for ipv4 and changes the behaviour for ipv6 so they are both the same. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/802/hippi.c4
-rw-r--r--net/core/neighbour.c451
-rw-r--r--net/decnet/dn_neigh.c28
-rw-r--r--net/ipv4/arp.c35
-rw-r--r--net/ipv4/devinet.c4
-rw-r--r--net/ipv4/ipmr.c2
-rw-r--r--net/ipv6/addrconf.c16
-rw-r--r--net/ipv6/ndisc.c55
8 files changed, 337 insertions, 258 deletions
diff --git a/net/802/hippi.c b/net/802/hippi.c
index 51a1f530417d..a97a3bde77bb 100644
--- a/net/802/hippi.c
+++ b/net/802/hippi.c
@@ -172,14 +172,14 @@ EXPORT_SYMBOL(hippi_mac_addr);
172int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p) 172int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p)
173{ 173{
174 /* Never send broadcast/multicast ARP messages */ 174 /* Never send broadcast/multicast ARP messages */
175 p->mcast_probes = 0; 175 NEIGH_VAR_SET(p, MCAST_PROBES, 0);
176 176
177 /* In IPv6 unicast probes are valid even on NBMA, 177 /* In IPv6 unicast probes are valid even on NBMA,
178 * because they are encapsulated in normal IPv6 protocol. 178 * because they are encapsulated in normal IPv6 protocol.
179 * Should be a generic flag. 179 * Should be a generic flag.
180 */ 180 */
181 if (p->tbl->family != AF_INET6) 181 if (p->tbl->family != AF_INET6)
182 p->ucast_probes = 0; 182 NEIGH_VAR_SET(p, UCAST_PROBES, 0);
183 return 0; 183 return 0;
184} 184}
185EXPORT_SYMBOL(hippi_neigh_setup_dev); 185EXPORT_SYMBOL(hippi_neigh_setup_dev);
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index ca15f32821fb..ce2b77515a9e 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -38,6 +38,8 @@
38#include <linux/random.h> 38#include <linux/random.h>
39#include <linux/string.h> 39#include <linux/string.h>
40#include <linux/log2.h> 40#include <linux/log2.h>
41#include <linux/inetdevice.h>
42#include <net/addrconf.h>
41 43
42#define DEBUG 44#define DEBUG
43#define NEIGH_DEBUG 1 45#define NEIGH_DEBUG 1
@@ -497,7 +499,7 @@ struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
497 goto out_neigh_release; 499 goto out_neigh_release;
498 } 500 }
499 501
500 n->confirmed = jiffies - (n->parms->base_reachable_time << 1); 502 n->confirmed = jiffies - (NEIGH_VAR(n->parms, BASE_REACHABLE_TIME) << 1);
501 503
502 write_lock_bh(&tbl->lock); 504 write_lock_bh(&tbl->lock);
503 nht = rcu_dereference_protected(tbl->nht, 505 nht = rcu_dereference_protected(tbl->nht,
@@ -776,7 +778,7 @@ static void neigh_periodic_work(struct work_struct *work)
776 tbl->last_rand = jiffies; 778 tbl->last_rand = jiffies;
777 for (p = &tbl->parms; p; p = p->next) 779 for (p = &tbl->parms; p; p = p->next)
778 p->reachable_time = 780 p->reachable_time =
779 neigh_rand_reach_time(p->base_reachable_time); 781 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
780 } 782 }
781 783
782 for (i = 0 ; i < (1 << nht->hash_shift); i++) { 784 for (i = 0 ; i < (1 << nht->hash_shift); i++) {
@@ -799,7 +801,7 @@ static void neigh_periodic_work(struct work_struct *work)
799 801
800 if (atomic_read(&n->refcnt) == 1 && 802 if (atomic_read(&n->refcnt) == 1 &&
801 (state == NUD_FAILED || 803 (state == NUD_FAILED ||
802 time_after(jiffies, n->used + n->parms->gc_staletime))) { 804 time_after(jiffies, n->used + NEIGH_VAR(n->parms, GC_STALETIME)))) {
803 *np = n->next; 805 *np = n->next;
804 n->dead = 1; 806 n->dead = 1;
805 write_unlock(&n->lock); 807 write_unlock(&n->lock);
@@ -822,12 +824,12 @@ next_elt:
822 lockdep_is_held(&tbl->lock)); 824 lockdep_is_held(&tbl->lock));
823 } 825 }
824out: 826out:
825 /* Cycle through all hash buckets every base_reachable_time/2 ticks. 827 /* Cycle through all hash buckets every BASE_REACHABLE_TIME/2 ticks.
826 * ARP entry timeouts range from 1/2 base_reachable_time to 3/2 828 * ARP entry timeouts range from 1/2 BASE_REACHABLE_TIME to 3/2
827 * base_reachable_time. 829 * BASE_REACHABLE_TIME.
828 */ 830 */
829 schedule_delayed_work(&tbl->gc_work, 831 schedule_delayed_work(&tbl->gc_work,
830 tbl->parms.base_reachable_time >> 1); 832 NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME) >> 1);
831 write_unlock_bh(&tbl->lock); 833 write_unlock_bh(&tbl->lock);
832} 834}
833 835
@@ -835,8 +837,9 @@ static __inline__ int neigh_max_probes(struct neighbour *n)
835{ 837{
836 struct neigh_parms *p = n->parms; 838 struct neigh_parms *p = n->parms;
837 return (n->nud_state & NUD_PROBE) ? 839 return (n->nud_state & NUD_PROBE) ?
838 p->ucast_probes : 840 NEIGH_VAR(p, UCAST_PROBES) :
839 p->ucast_probes + p->app_probes + p->mcast_probes; 841 NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
842 NEIGH_VAR(p, MCAST_PROBES);
840} 843}
841 844
842static void neigh_invalidate(struct neighbour *neigh) 845static void neigh_invalidate(struct neighbour *neigh)
@@ -901,12 +904,13 @@ static void neigh_timer_handler(unsigned long arg)
901 neigh_dbg(2, "neigh %p is still alive\n", neigh); 904 neigh_dbg(2, "neigh %p is still alive\n", neigh);
902 next = neigh->confirmed + neigh->parms->reachable_time; 905 next = neigh->confirmed + neigh->parms->reachable_time;
903 } else if (time_before_eq(now, 906 } else if (time_before_eq(now,
904 neigh->used + neigh->parms->delay_probe_time)) { 907 neigh->used +
908 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
905 neigh_dbg(2, "neigh %p is delayed\n", neigh); 909 neigh_dbg(2, "neigh %p is delayed\n", neigh);
906 neigh->nud_state = NUD_DELAY; 910 neigh->nud_state = NUD_DELAY;
907 neigh->updated = jiffies; 911 neigh->updated = jiffies;
908 neigh_suspect(neigh); 912 neigh_suspect(neigh);
909 next = now + neigh->parms->delay_probe_time; 913 next = now + NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME);
910 } else { 914 } else {
911 neigh_dbg(2, "neigh %p is suspected\n", neigh); 915 neigh_dbg(2, "neigh %p is suspected\n", neigh);
912 neigh->nud_state = NUD_STALE; 916 neigh->nud_state = NUD_STALE;
@@ -916,7 +920,8 @@ static void neigh_timer_handler(unsigned long arg)
916 } 920 }
917 } else if (state & NUD_DELAY) { 921 } else if (state & NUD_DELAY) {
918 if (time_before_eq(now, 922 if (time_before_eq(now,
919 neigh->confirmed + neigh->parms->delay_probe_time)) { 923 neigh->confirmed +
924 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
920 neigh_dbg(2, "neigh %p is now reachable\n", neigh); 925 neigh_dbg(2, "neigh %p is now reachable\n", neigh);
921 neigh->nud_state = NUD_REACHABLE; 926 neigh->nud_state = NUD_REACHABLE;
922 neigh->updated = jiffies; 927 neigh->updated = jiffies;
@@ -928,11 +933,11 @@ static void neigh_timer_handler(unsigned long arg)
928 neigh->nud_state = NUD_PROBE; 933 neigh->nud_state = NUD_PROBE;
929 neigh->updated = jiffies; 934 neigh->updated = jiffies;
930 atomic_set(&neigh->probes, 0); 935 atomic_set(&neigh->probes, 0);
931 next = now + neigh->parms->retrans_time; 936 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
932 } 937 }
933 } else { 938 } else {
934 /* NUD_PROBE|NUD_INCOMPLETE */ 939 /* NUD_PROBE|NUD_INCOMPLETE */
935 next = now + neigh->parms->retrans_time; 940 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
936 } 941 }
937 942
938 if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) && 943 if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) &&
@@ -973,13 +978,16 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
973 goto out_unlock_bh; 978 goto out_unlock_bh;
974 979
975 if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) { 980 if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
976 if (neigh->parms->mcast_probes + neigh->parms->app_probes) { 981 if (NEIGH_VAR(neigh->parms, MCAST_PROBES) +
982 NEIGH_VAR(neigh->parms, APP_PROBES)) {
977 unsigned long next, now = jiffies; 983 unsigned long next, now = jiffies;
978 984
979 atomic_set(&neigh->probes, neigh->parms->ucast_probes); 985 atomic_set(&neigh->probes,
986 NEIGH_VAR(neigh->parms, UCAST_PROBES));
980 neigh->nud_state = NUD_INCOMPLETE; 987 neigh->nud_state = NUD_INCOMPLETE;
981 neigh->updated = now; 988 neigh->updated = now;
982 next = now + max(neigh->parms->retrans_time, HZ/2); 989 next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
990 HZ/2);
983 neigh_add_timer(neigh, next); 991 neigh_add_timer(neigh, next);
984 immediate_probe = true; 992 immediate_probe = true;
985 } else { 993 } else {
@@ -994,14 +1002,14 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
994 neigh_dbg(2, "neigh %p is delayed\n", neigh); 1002 neigh_dbg(2, "neigh %p is delayed\n", neigh);
995 neigh->nud_state = NUD_DELAY; 1003 neigh->nud_state = NUD_DELAY;
996 neigh->updated = jiffies; 1004 neigh->updated = jiffies;
997 neigh_add_timer(neigh, 1005 neigh_add_timer(neigh, jiffies +
998 jiffies + neigh->parms->delay_probe_time); 1006 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME));
999 } 1007 }
1000 1008
1001 if (neigh->nud_state == NUD_INCOMPLETE) { 1009 if (neigh->nud_state == NUD_INCOMPLETE) {
1002 if (skb) { 1010 if (skb) {
1003 while (neigh->arp_queue_len_bytes + skb->truesize > 1011 while (neigh->arp_queue_len_bytes + skb->truesize >
1004 neigh->parms->queue_len_bytes) { 1012 NEIGH_VAR(neigh->parms, QUEUE_LEN_BYTES)) {
1005 struct sk_buff *buff; 1013 struct sk_buff *buff;
1006 1014
1007 buff = __skb_dequeue(&neigh->arp_queue); 1015 buff = __skb_dequeue(&neigh->arp_queue);
@@ -1170,7 +1178,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
1170 neigh_update_hhs(neigh); 1178 neigh_update_hhs(neigh);
1171 if (!(new & NUD_CONNECTED)) 1179 if (!(new & NUD_CONNECTED))
1172 neigh->confirmed = jiffies - 1180 neigh->confirmed = jiffies -
1173 (neigh->parms->base_reachable_time << 1); 1181 (NEIGH_VAR(neigh->parms, BASE_REACHABLE_TIME) << 1);
1174 notify = 1; 1182 notify = 1;
1175 } 1183 }
1176 if (new == old) 1184 if (new == old)
@@ -1391,9 +1399,10 @@ void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
1391 struct sk_buff *skb) 1399 struct sk_buff *skb)
1392{ 1400{
1393 unsigned long now = jiffies; 1401 unsigned long now = jiffies;
1394 unsigned long sched_next = now + (net_random() % p->proxy_delay); 1402 unsigned long sched_next = now + (net_random() %
1403 NEIGH_VAR(p, PROXY_DELAY));
1395 1404
1396 if (tbl->proxy_queue.qlen > p->proxy_qlen) { 1405 if (tbl->proxy_queue.qlen > NEIGH_VAR(p, PROXY_QLEN)) {
1397 kfree_skb(skb); 1406 kfree_skb(skb);
1398 return; 1407 return;
1399 } 1408 }
@@ -1440,7 +1449,7 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
1440 p->tbl = tbl; 1449 p->tbl = tbl;
1441 atomic_set(&p->refcnt, 1); 1450 atomic_set(&p->refcnt, 1);
1442 p->reachable_time = 1451 p->reachable_time =
1443 neigh_rand_reach_time(p->base_reachable_time); 1452 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
1444 dev_hold(dev); 1453 dev_hold(dev);
1445 p->dev = dev; 1454 p->dev = dev;
1446 write_pnet(&p->net, hold_net(net)); 1455 write_pnet(&p->net, hold_net(net));
@@ -1457,6 +1466,8 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
1457 p->next = tbl->parms.next; 1466 p->next = tbl->parms.next;
1458 tbl->parms.next = p; 1467 tbl->parms.next = p;
1459 write_unlock_bh(&tbl->lock); 1468 write_unlock_bh(&tbl->lock);
1469
1470 neigh_parms_data_state_cleanall(p);
1460 } 1471 }
1461 return p; 1472 return p;
1462} 1473}
@@ -1509,7 +1520,7 @@ static void neigh_table_init_no_netlink(struct neigh_table *tbl)
1509 write_pnet(&tbl->parms.net, &init_net); 1520 write_pnet(&tbl->parms.net, &init_net);
1510 atomic_set(&tbl->parms.refcnt, 1); 1521 atomic_set(&tbl->parms.refcnt, 1);
1511 tbl->parms.reachable_time = 1522 tbl->parms.reachable_time =
1512 neigh_rand_reach_time(tbl->parms.base_reachable_time); 1523 neigh_rand_reach_time(NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME));
1513 1524
1514 tbl->stats = alloc_percpu(struct neigh_statistics); 1525 tbl->stats = alloc_percpu(struct neigh_statistics);
1515 if (!tbl->stats) 1526 if (!tbl->stats)
@@ -1777,24 +1788,32 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
1777 if ((parms->dev && 1788 if ((parms->dev &&
1778 nla_put_u32(skb, NDTPA_IFINDEX, parms->dev->ifindex)) || 1789 nla_put_u32(skb, NDTPA_IFINDEX, parms->dev->ifindex)) ||
1779 nla_put_u32(skb, NDTPA_REFCNT, atomic_read(&parms->refcnt)) || 1790 nla_put_u32(skb, NDTPA_REFCNT, atomic_read(&parms->refcnt)) ||
1780 nla_put_u32(skb, NDTPA_QUEUE_LENBYTES, parms->queue_len_bytes) || 1791 nla_put_u32(skb, NDTPA_QUEUE_LENBYTES,
1792 NEIGH_VAR(parms, QUEUE_LEN_BYTES)) ||
1781 /* approximative value for deprecated QUEUE_LEN (in packets) */ 1793 /* approximative value for deprecated QUEUE_LEN (in packets) */
1782 nla_put_u32(skb, NDTPA_QUEUE_LEN, 1794 nla_put_u32(skb, NDTPA_QUEUE_LEN,
1783 parms->queue_len_bytes / SKB_TRUESIZE(ETH_FRAME_LEN)) || 1795 NEIGH_VAR(parms, QUEUE_LEN_BYTES) / SKB_TRUESIZE(ETH_FRAME_LEN)) ||
1784 nla_put_u32(skb, NDTPA_PROXY_QLEN, parms->proxy_qlen) || 1796 nla_put_u32(skb, NDTPA_PROXY_QLEN, NEIGH_VAR(parms, PROXY_QLEN)) ||
1785 nla_put_u32(skb, NDTPA_APP_PROBES, parms->app_probes) || 1797 nla_put_u32(skb, NDTPA_APP_PROBES, NEIGH_VAR(parms, APP_PROBES)) ||
1786 nla_put_u32(skb, NDTPA_UCAST_PROBES, parms->ucast_probes) || 1798 nla_put_u32(skb, NDTPA_UCAST_PROBES,
1787 nla_put_u32(skb, NDTPA_MCAST_PROBES, parms->mcast_probes) || 1799 NEIGH_VAR(parms, UCAST_PROBES)) ||
1800 nla_put_u32(skb, NDTPA_MCAST_PROBES,
1801 NEIGH_VAR(parms, MCAST_PROBES)) ||
1788 nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time) || 1802 nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time) ||
1789 nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME, 1803 nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
1790 parms->base_reachable_time) || 1804 NEIGH_VAR(parms, BASE_REACHABLE_TIME)) ||
1791 nla_put_msecs(skb, NDTPA_GC_STALETIME, parms->gc_staletime) || 1805 nla_put_msecs(skb, NDTPA_GC_STALETIME,
1806 NEIGH_VAR(parms, GC_STALETIME)) ||
1792 nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME, 1807 nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME,
1793 parms->delay_probe_time) || 1808 NEIGH_VAR(parms, DELAY_PROBE_TIME)) ||
1794 nla_put_msecs(skb, NDTPA_RETRANS_TIME, parms->retrans_time) || 1809 nla_put_msecs(skb, NDTPA_RETRANS_TIME,
1795 nla_put_msecs(skb, NDTPA_ANYCAST_DELAY, parms->anycast_delay) || 1810 NEIGH_VAR(parms, RETRANS_TIME)) ||
1796 nla_put_msecs(skb, NDTPA_PROXY_DELAY, parms->proxy_delay) || 1811 nla_put_msecs(skb, NDTPA_ANYCAST_DELAY,
1797 nla_put_msecs(skb, NDTPA_LOCKTIME, parms->locktime)) 1812 NEIGH_VAR(parms, ANYCAST_DELAY)) ||
1813 nla_put_msecs(skb, NDTPA_PROXY_DELAY,
1814 NEIGH_VAR(parms, PROXY_DELAY)) ||
1815 nla_put_msecs(skb, NDTPA_LOCKTIME,
1816 NEIGH_VAR(parms, LOCKTIME)))
1798 goto nla_put_failure; 1817 goto nla_put_failure;
1799 return nla_nest_end(skb, nest); 1818 return nla_nest_end(skb, nest);
1800 1819
@@ -2010,44 +2029,54 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
2010 2029
2011 switch (i) { 2030 switch (i) {
2012 case NDTPA_QUEUE_LEN: 2031 case NDTPA_QUEUE_LEN:
2013 p->queue_len_bytes = nla_get_u32(tbp[i]) * 2032 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2014 SKB_TRUESIZE(ETH_FRAME_LEN); 2033 nla_get_u32(tbp[i]) *
2034 SKB_TRUESIZE(ETH_FRAME_LEN));
2015 break; 2035 break;
2016 case NDTPA_QUEUE_LENBYTES: 2036 case NDTPA_QUEUE_LENBYTES:
2017 p->queue_len_bytes = nla_get_u32(tbp[i]); 2037 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2038 nla_get_u32(tbp[i]));
2018 break; 2039 break;
2019 case NDTPA_PROXY_QLEN: 2040 case NDTPA_PROXY_QLEN:
2020 p->proxy_qlen = nla_get_u32(tbp[i]); 2041 NEIGH_VAR_SET(p, PROXY_QLEN,
2042 nla_get_u32(tbp[i]));
2021 break; 2043 break;
2022 case NDTPA_APP_PROBES: 2044 case NDTPA_APP_PROBES:
2023 p->app_probes = nla_get_u32(tbp[i]); 2045 NEIGH_VAR_SET(p, APP_PROBES,
2046 nla_get_u32(tbp[i]));
2024 break; 2047 break;
2025 case NDTPA_UCAST_PROBES: 2048 case NDTPA_UCAST_PROBES:
2026 p->ucast_probes = nla_get_u32(tbp[i]); 2049 NEIGH_VAR_SET(p, UCAST_PROBES,
2050 nla_get_u32(tbp[i]));
2027 break; 2051 break;
2028 case NDTPA_MCAST_PROBES: 2052 case NDTPA_MCAST_PROBES:
2029 p->mcast_probes = nla_get_u32(tbp[i]); 2053 NEIGH_VAR_SET(p, MCAST_PROBES,
2054 nla_get_u32(tbp[i]));
2030 break; 2055 break;
2031 case NDTPA_BASE_REACHABLE_TIME: 2056 case NDTPA_BASE_REACHABLE_TIME:
2032 p->base_reachable_time = nla_get_msecs(tbp[i]); 2057 NEIGH_VAR_SET(p, BASE_REACHABLE_TIME,
2058 nla_get_msecs(tbp[i]));
2033 break; 2059 break;
2034 case NDTPA_GC_STALETIME: 2060 case NDTPA_GC_STALETIME:
2035 p->gc_staletime = nla_get_msecs(tbp[i]); 2061 NEIGH_VAR_SET(p, GC_STALETIME,
2062 nla_get_msecs(tbp[i]));
2036 break; 2063 break;
2037 case NDTPA_DELAY_PROBE_TIME: 2064 case NDTPA_DELAY_PROBE_TIME:
2038 p->delay_probe_time = nla_get_msecs(tbp[i]); 2065 NEIGH_VAR_SET(p, DELAY_PROBE_TIME,
2066 nla_get_msecs(tbp[i]));
2039 break; 2067 break;
2040 case NDTPA_RETRANS_TIME: 2068 case NDTPA_RETRANS_TIME:
2041 p->retrans_time = nla_get_msecs(tbp[i]); 2069 NEIGH_VAR_SET(p, RETRANS_TIME,
2070 nla_get_msecs(tbp[i]));
2042 break; 2071 break;
2043 case NDTPA_ANYCAST_DELAY: 2072 case NDTPA_ANYCAST_DELAY:
2044 p->anycast_delay = nla_get_msecs(tbp[i]); 2073 NEIGH_VAR_SET(p, ANYCAST_DELAY, nla_get_msecs(tbp[i]));
2045 break; 2074 break;
2046 case NDTPA_PROXY_DELAY: 2075 case NDTPA_PROXY_DELAY:
2047 p->proxy_delay = nla_get_msecs(tbp[i]); 2076 NEIGH_VAR_SET(p, PROXY_DELAY, nla_get_msecs(tbp[i]));
2048 break; 2077 break;
2049 case NDTPA_LOCKTIME: 2078 case NDTPA_LOCKTIME:
2050 p->locktime = nla_get_msecs(tbp[i]); 2079 NEIGH_VAR_SET(p, LOCKTIME, nla_get_msecs(tbp[i]));
2051 break; 2080 break;
2052 } 2081 }
2053 } 2082 }
@@ -2788,133 +2817,167 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
2788 return ret; 2817 return ret;
2789} 2818}
2790 2819
2791enum { 2820static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
2792 NEIGH_VAR_MCAST_PROBE, 2821 int family)
2793 NEIGH_VAR_UCAST_PROBE, 2822{
2794 NEIGH_VAR_APP_PROBE, 2823 switch (family) {
2795 NEIGH_VAR_RETRANS_TIME, 2824 case AF_INET:
2796 NEIGH_VAR_BASE_REACHABLE_TIME, 2825 return __in_dev_arp_parms_get_rcu(dev);
2797 NEIGH_VAR_DELAY_PROBE_TIME, 2826 case AF_INET6:
2798 NEIGH_VAR_GC_STALETIME, 2827 return __in6_dev_nd_parms_get_rcu(dev);
2799 NEIGH_VAR_QUEUE_LEN, 2828 }
2800 NEIGH_VAR_QUEUE_LEN_BYTES, 2829 return NULL;
2801 NEIGH_VAR_PROXY_QLEN, 2830}
2802 NEIGH_VAR_ANYCAST_DELAY, 2831
2803 NEIGH_VAR_PROXY_DELAY, 2832static void neigh_copy_dflt_parms(struct net *net, struct neigh_parms *p,
2804 NEIGH_VAR_LOCKTIME, 2833 int index)
2805 NEIGH_VAR_RETRANS_TIME_MS, 2834{
2806 NEIGH_VAR_BASE_REACHABLE_TIME_MS, 2835 struct net_device *dev;
2807 NEIGH_VAR_GC_INTERVAL, 2836 int family = neigh_parms_family(p);
2808 NEIGH_VAR_GC_THRESH1, 2837
2809 NEIGH_VAR_GC_THRESH2, 2838 rcu_read_lock();
2810 NEIGH_VAR_GC_THRESH3, 2839 for_each_netdev_rcu(net, dev) {
2811 NEIGH_VAR_MAX 2840 struct neigh_parms *dst_p =
2812}; 2841 neigh_get_dev_parms_rcu(dev, family);
2842
2843 if (dst_p && !test_bit(index, dst_p->data_state))
2844 dst_p->data[index] = p->data[index];
2845 }
2846 rcu_read_unlock();
2847}
2848
2849static void neigh_proc_update(struct ctl_table *ctl, int write)
2850{
2851 struct net_device *dev = ctl->extra1;
2852 struct neigh_parms *p = ctl->extra2;
2853 struct net *net = p->net;
2854 int index = (int *) ctl->data - p->data;
2855
2856 if (!write)
2857 return;
2858
2859 set_bit(index, p->data_state);
2860 if (!dev) /* NULL dev means this is default value */
2861 neigh_copy_dflt_parms(net, p, index);
2862}
2863
2864static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
2865 void __user *buffer,
2866 size_t *lenp, loff_t *ppos)
2867{
2868 struct ctl_table tmp = *ctl;
2869 int ret;
2870
2871 tmp.extra1 = &zero;
2872 tmp.extra2 = &int_max;
2873
2874 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
2875 neigh_proc_update(ctl, write);
2876 return ret;
2877}
2878
2879int neigh_proc_dointvec(struct ctl_table *ctl, int write,
2880 void __user *buffer, size_t *lenp, loff_t *ppos)
2881{
2882 int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
2883
2884 neigh_proc_update(ctl, write);
2885 return ret;
2886}
2887EXPORT_SYMBOL(neigh_proc_dointvec);
2888
2889int neigh_proc_dointvec_jiffies(struct ctl_table *ctl, int write,
2890 void __user *buffer,
2891 size_t *lenp, loff_t *ppos)
2892{
2893 int ret = proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
2894
2895 neigh_proc_update(ctl, write);
2896 return ret;
2897}
2898EXPORT_SYMBOL(neigh_proc_dointvec_jiffies);
2899
2900static int neigh_proc_dointvec_userhz_jiffies(struct ctl_table *ctl, int write,
2901 void __user *buffer,
2902 size_t *lenp, loff_t *ppos)
2903{
2904 int ret = proc_dointvec_userhz_jiffies(ctl, write, buffer, lenp, ppos);
2905
2906 neigh_proc_update(ctl, write);
2907 return ret;
2908}
2909
2910int neigh_proc_dointvec_ms_jiffies(struct ctl_table *ctl, int write,
2911 void __user *buffer,
2912 size_t *lenp, loff_t *ppos)
2913{
2914 int ret = proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
2915
2916 neigh_proc_update(ctl, write);
2917 return ret;
2918}
2919EXPORT_SYMBOL(neigh_proc_dointvec_ms_jiffies);
2920
2921static int neigh_proc_dointvec_unres_qlen(struct ctl_table *ctl, int write,
2922 void __user *buffer,
2923 size_t *lenp, loff_t *ppos)
2924{
2925 int ret = proc_unres_qlen(ctl, write, buffer, lenp, ppos);
2926
2927 neigh_proc_update(ctl, write);
2928 return ret;
2929}
2930
2931#define NEIGH_PARMS_DATA_OFFSET(index) \
2932 (&((struct neigh_parms *) 0)->data[index])
2933
2934#define NEIGH_SYSCTL_ENTRY(attr, data_attr, name, mval, proc) \
2935 [NEIGH_VAR_ ## attr] = { \
2936 .procname = name, \
2937 .data = NEIGH_PARMS_DATA_OFFSET(NEIGH_VAR_ ## data_attr), \
2938 .maxlen = sizeof(int), \
2939 .mode = mval, \
2940 .proc_handler = proc, \
2941 }
2942
2943#define NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(attr, name) \
2944 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_zero_intmax)
2945
2946#define NEIGH_SYSCTL_JIFFIES_ENTRY(attr, name) \
2947 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_jiffies)
2948
2949#define NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(attr, name) \
2950 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_userhz_jiffies)
2951
2952#define NEIGH_SYSCTL_MS_JIFFIES_ENTRY(attr, name) \
2953 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
2954
2955#define NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(attr, data_attr, name) \
2956 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
2957
2958#define NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(attr, data_attr, name) \
2959 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_unres_qlen)
2813 2960
2814static struct neigh_sysctl_table { 2961static struct neigh_sysctl_table {
2815 struct ctl_table_header *sysctl_header; 2962 struct ctl_table_header *sysctl_header;
2816 struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1]; 2963 struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1];
2817} neigh_sysctl_template __read_mostly = { 2964} neigh_sysctl_template __read_mostly = {
2818 .neigh_vars = { 2965 .neigh_vars = {
2819 [NEIGH_VAR_MCAST_PROBE] = { 2966 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_PROBES, "mcast_solicit"),
2820 .procname = "mcast_solicit", 2967 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(UCAST_PROBES, "ucast_solicit"),
2821 .maxlen = sizeof(int), 2968 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(APP_PROBES, "app_solicit"),
2822 .mode = 0644, 2969 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(RETRANS_TIME, "retrans_time"),
2823 .extra1 = &zero, 2970 NEIGH_SYSCTL_JIFFIES_ENTRY(BASE_REACHABLE_TIME, "base_reachable_time"),
2824 .extra2 = &int_max, 2971 NEIGH_SYSCTL_JIFFIES_ENTRY(DELAY_PROBE_TIME, "delay_first_probe_time"),
2825 .proc_handler = proc_dointvec_minmax, 2972 NEIGH_SYSCTL_JIFFIES_ENTRY(GC_STALETIME, "gc_stale_time"),
2826 }, 2973 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(QUEUE_LEN_BYTES, "unres_qlen_bytes"),
2827 [NEIGH_VAR_UCAST_PROBE] = { 2974 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(PROXY_QLEN, "proxy_qlen"),
2828 .procname = "ucast_solicit", 2975 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(ANYCAST_DELAY, "anycast_delay"),
2829 .maxlen = sizeof(int), 2976 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(PROXY_DELAY, "proxy_delay"),
2830 .mode = 0644, 2977 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(LOCKTIME, "locktime"),
2831 .extra1 = &zero, 2978 NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(QUEUE_LEN, QUEUE_LEN_BYTES, "unres_qlen"),
2832 .extra2 = &int_max, 2979 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(RETRANS_TIME_MS, RETRANS_TIME, "retrans_time_ms"),
2833 .proc_handler = proc_dointvec_minmax, 2980 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(BASE_REACHABLE_TIME_MS, BASE_REACHABLE_TIME, "base_reachable_time_ms"),
2834 },
2835 [NEIGH_VAR_APP_PROBE] = {
2836 .procname = "app_solicit",
2837 .maxlen = sizeof(int),
2838 .mode = 0644,
2839 .extra1 = &zero,
2840 .extra2 = &int_max,
2841 .proc_handler = proc_dointvec_minmax,
2842 },
2843 [NEIGH_VAR_RETRANS_TIME] = {
2844 .procname = "retrans_time",
2845 .maxlen = sizeof(int),
2846 .mode = 0644,
2847 .proc_handler = proc_dointvec_userhz_jiffies,
2848 },
2849 [NEIGH_VAR_BASE_REACHABLE_TIME] = {
2850 .procname = "base_reachable_time",
2851 .maxlen = sizeof(int),
2852 .mode = 0644,
2853 .proc_handler = proc_dointvec_jiffies,
2854 },
2855 [NEIGH_VAR_DELAY_PROBE_TIME] = {
2856 .procname = "delay_first_probe_time",
2857 .maxlen = sizeof(int),
2858 .mode = 0644,
2859 .proc_handler = proc_dointvec_jiffies,
2860 },
2861 [NEIGH_VAR_GC_STALETIME] = {
2862 .procname = "gc_stale_time",
2863 .maxlen = sizeof(int),
2864 .mode = 0644,
2865 .proc_handler = proc_dointvec_jiffies,
2866 },
2867 [NEIGH_VAR_QUEUE_LEN] = {
2868 .procname = "unres_qlen",
2869 .maxlen = sizeof(int),
2870 .mode = 0644,
2871 .proc_handler = proc_unres_qlen,
2872 },
2873 [NEIGH_VAR_QUEUE_LEN_BYTES] = {
2874 .procname = "unres_qlen_bytes",
2875 .maxlen = sizeof(int),
2876 .mode = 0644,
2877 .extra1 = &zero,
2878 .proc_handler = proc_dointvec_minmax,
2879 },
2880 [NEIGH_VAR_PROXY_QLEN] = {
2881 .procname = "proxy_qlen",
2882 .maxlen = sizeof(int),
2883 .mode = 0644,
2884 .extra1 = &zero,
2885 .extra2 = &int_max,
2886 .proc_handler = proc_dointvec_minmax,
2887 },
2888 [NEIGH_VAR_ANYCAST_DELAY] = {
2889 .procname = "anycast_delay",
2890 .maxlen = sizeof(int),
2891 .mode = 0644,
2892 .proc_handler = proc_dointvec_userhz_jiffies,
2893 },
2894 [NEIGH_VAR_PROXY_DELAY] = {
2895 .procname = "proxy_delay",
2896 .maxlen = sizeof(int),
2897 .mode = 0644,
2898 .proc_handler = proc_dointvec_userhz_jiffies,
2899 },
2900 [NEIGH_VAR_LOCKTIME] = {
2901 .procname = "locktime",
2902 .maxlen = sizeof(int),
2903 .mode = 0644,
2904 .proc_handler = proc_dointvec_userhz_jiffies,
2905 },
2906 [NEIGH_VAR_RETRANS_TIME_MS] = {
2907 .procname = "retrans_time_ms",
2908 .maxlen = sizeof(int),
2909 .mode = 0644,
2910 .proc_handler = proc_dointvec_ms_jiffies,
2911 },
2912 [NEIGH_VAR_BASE_REACHABLE_TIME_MS] = {
2913 .procname = "base_reachable_time_ms",
2914 .maxlen = sizeof(int),
2915 .mode = 0644,
2916 .proc_handler = proc_dointvec_ms_jiffies,
2917 },
2918 [NEIGH_VAR_GC_INTERVAL] = { 2981 [NEIGH_VAR_GC_INTERVAL] = {
2919 .procname = "gc_interval", 2982 .procname = "gc_interval",
2920 .maxlen = sizeof(int), 2983 .maxlen = sizeof(int),
@@ -2950,31 +3013,23 @@ static struct neigh_sysctl_table {
2950}; 3013};
2951 3014
2952int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, 3015int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
2953 char *p_name, proc_handler *handler) 3016 proc_handler *handler)
2954{ 3017{
3018 int i;
2955 struct neigh_sysctl_table *t; 3019 struct neigh_sysctl_table *t;
2956 const char *dev_name_source = NULL; 3020 const char *dev_name_source;
2957 char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ]; 3021 char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ];
3022 char *p_name;
2958 3023
2959 t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL); 3024 t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL);
2960 if (!t) 3025 if (!t)
2961 goto err; 3026 goto err;
2962 3027
2963 t->neigh_vars[NEIGH_VAR_MCAST_PROBE].data = &p->mcast_probes; 3028 for (i = 0; i < ARRAY_SIZE(t->neigh_vars); i++) {
2964 t->neigh_vars[NEIGH_VAR_UCAST_PROBE].data = &p->ucast_probes; 3029 t->neigh_vars[i].data += (long) p;
2965 t->neigh_vars[NEIGH_VAR_APP_PROBE].data = &p->app_probes; 3030 t->neigh_vars[i].extra1 = dev;
2966 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].data = &p->retrans_time; 3031 t->neigh_vars[i].extra2 = p;
2967 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].data = &p->base_reachable_time; 3032 }
2968 t->neigh_vars[NEIGH_VAR_DELAY_PROBE_TIME].data = &p->delay_probe_time;
2969 t->neigh_vars[NEIGH_VAR_GC_STALETIME].data = &p->gc_staletime;
2970 t->neigh_vars[NEIGH_VAR_QUEUE_LEN].data = &p->queue_len_bytes;
2971 t->neigh_vars[NEIGH_VAR_QUEUE_LEN_BYTES].data = &p->queue_len_bytes;
2972 t->neigh_vars[NEIGH_VAR_PROXY_QLEN].data = &p->proxy_qlen;
2973 t->neigh_vars[NEIGH_VAR_ANYCAST_DELAY].data = &p->anycast_delay;
2974 t->neigh_vars[NEIGH_VAR_PROXY_DELAY].data = &p->proxy_delay;
2975 t->neigh_vars[NEIGH_VAR_LOCKTIME].data = &p->locktime;
2976 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].data = &p->retrans_time;
2977 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].data = &p->base_reachable_time;
2978 3033
2979 if (dev) { 3034 if (dev) {
2980 dev_name_source = dev->name; 3035 dev_name_source = dev->name;
@@ -2989,26 +3044,32 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
2989 t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3; 3044 t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3;
2990 } 3045 }
2991 3046
2992
2993 if (handler) { 3047 if (handler) {
2994 /* RetransTime */ 3048 /* RetransTime */
2995 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler; 3049 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler;
2996 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].extra1 = dev;
2997 /* ReachableTime */ 3050 /* ReachableTime */
2998 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler; 3051 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler;
2999 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].extra1 = dev;
3000 /* RetransTime (in milliseconds)*/ 3052 /* RetransTime (in milliseconds)*/
3001 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler; 3053 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler;
3002 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].extra1 = dev;
3003 /* ReachableTime (in milliseconds) */ 3054 /* ReachableTime (in milliseconds) */
3004 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler; 3055 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler;
3005 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].extra1 = dev;
3006 } 3056 }
3007 3057
3008 /* Don't export sysctls to unprivileged users */ 3058 /* Don't export sysctls to unprivileged users */
3009 if (neigh_parms_net(p)->user_ns != &init_user_ns) 3059 if (neigh_parms_net(p)->user_ns != &init_user_ns)
3010 t->neigh_vars[0].procname = NULL; 3060 t->neigh_vars[0].procname = NULL;
3011 3061
3062 switch (neigh_parms_family(p)) {
3063 case AF_INET:
3064 p_name = "ipv4";
3065 break;
3066 case AF_INET6:
3067 p_name = "ipv6";
3068 break;
3069 default:
3070 BUG();
3071 }
3072
3012 snprintf(neigh_path, sizeof(neigh_path), "net/%s/neigh/%s", 3073 snprintf(neigh_path, sizeof(neigh_path), "net/%s/neigh/%s",
3013 p_name, dev_name_source); 3074 p_name, dev_name_source);
3014 t->sysctl_header = 3075 t->sysctl_header =
diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c
index f8637f93d318..c8121ceddb9e 100644
--- a/net/decnet/dn_neigh.c
+++ b/net/decnet/dn_neigh.c
@@ -102,19 +102,21 @@ struct neigh_table dn_neigh_table = {
102 .id = "dn_neigh_cache", 102 .id = "dn_neigh_cache",
103 .parms ={ 103 .parms ={
104 .tbl = &dn_neigh_table, 104 .tbl = &dn_neigh_table,
105 .base_reachable_time = 30 * HZ, 105 .reachable_time = 30 * HZ,
106 .retrans_time = 1 * HZ, 106 .data = {
107 .gc_staletime = 60 * HZ, 107 [NEIGH_VAR_MCAST_PROBES] = 0,
108 .reachable_time = 30 * HZ, 108 [NEIGH_VAR_UCAST_PROBES] = 0,
109 .delay_probe_time = 5 * HZ, 109 [NEIGH_VAR_APP_PROBES] = 0,
110 .queue_len_bytes = 64*1024, 110 [NEIGH_VAR_RETRANS_TIME] = 1 * HZ,
111 .ucast_probes = 0, 111 [NEIGH_VAR_BASE_REACHABLE_TIME] = 30 * HZ,
112 .app_probes = 0, 112 [NEIGH_VAR_DELAY_PROBE_TIME] = 5 * HZ,
113 .mcast_probes = 0, 113 [NEIGH_VAR_GC_STALETIME] = 60 * HZ,
114 .anycast_delay = 0, 114 [NEIGH_VAR_QUEUE_LEN_BYTES] = 64*1024,
115 .proxy_delay = 0, 115 [NEIGH_VAR_PROXY_QLEN] = 0,
116 .proxy_qlen = 0, 116 [NEIGH_VAR_ANYCAST_DELAY] = 0,
117 .locktime = 1 * HZ, 117 [NEIGH_VAR_PROXY_DELAY] = 0,
118 [NEIGH_VAR_LOCKTIME] = 1 * HZ,
119 },
118 }, 120 },
119 .gc_interval = 30 * HZ, 121 .gc_interval = 30 * HZ,
120 .gc_thresh1 = 128, 122 .gc_thresh1 = 128,
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index 7808093cede6..f04185863940 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -166,18 +166,20 @@ struct neigh_table arp_tbl = {
166 .id = "arp_cache", 166 .id = "arp_cache",
167 .parms = { 167 .parms = {
168 .tbl = &arp_tbl, 168 .tbl = &arp_tbl,
169 .base_reachable_time = 30 * HZ,
170 .retrans_time = 1 * HZ,
171 .gc_staletime = 60 * HZ,
172 .reachable_time = 30 * HZ, 169 .reachable_time = 30 * HZ,
173 .delay_probe_time = 5 * HZ, 170 .data = {
174 .queue_len_bytes = 64*1024, 171 [NEIGH_VAR_MCAST_PROBES] = 3,
175 .ucast_probes = 3, 172 [NEIGH_VAR_UCAST_PROBES] = 3,
176 .mcast_probes = 3, 173 [NEIGH_VAR_RETRANS_TIME] = 1 * HZ,
177 .anycast_delay = 1 * HZ, 174 [NEIGH_VAR_BASE_REACHABLE_TIME] = 30 * HZ,
178 .proxy_delay = (8 * HZ) / 10, 175 [NEIGH_VAR_DELAY_PROBE_TIME] = 5 * HZ,
179 .proxy_qlen = 64, 176 [NEIGH_VAR_GC_STALETIME] = 60 * HZ,
180 .locktime = 1 * HZ, 177 [NEIGH_VAR_QUEUE_LEN_BYTES] = 64 * 1024,
178 [NEIGH_VAR_PROXY_QLEN] = 64,
179 [NEIGH_VAR_ANYCAST_DELAY] = 1 * HZ,
180 [NEIGH_VAR_PROXY_DELAY] = (8 * HZ) / 10,
181 [NEIGH_VAR_LOCKTIME] = 1 * HZ,
182 },
181 }, 183 },
182 .gc_interval = 30 * HZ, 184 .gc_interval = 30 * HZ,
183 .gc_thresh1 = 128, 185 .gc_thresh1 = 128,
@@ -359,14 +361,14 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
359 if (!saddr) 361 if (!saddr)
360 saddr = inet_select_addr(dev, target, RT_SCOPE_LINK); 362 saddr = inet_select_addr(dev, target, RT_SCOPE_LINK);
361 363
362 probes -= neigh->parms->ucast_probes; 364 probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES);
363 if (probes < 0) { 365 if (probes < 0) {
364 if (!(neigh->nud_state & NUD_VALID)) 366 if (!(neigh->nud_state & NUD_VALID))
365 pr_debug("trying to ucast probe in NUD_INVALID\n"); 367 pr_debug("trying to ucast probe in NUD_INVALID\n");
366 neigh_ha_snapshot(dst_ha, neigh, dev); 368 neigh_ha_snapshot(dst_ha, neigh, dev);
367 dst_hw = dst_ha; 369 dst_hw = dst_ha;
368 } else { 370 } else {
369 probes -= neigh->parms->app_probes; 371 probes -= NEIGH_VAR(neigh->parms, APP_PROBES);
370 if (probes < 0) { 372 if (probes < 0) {
371 neigh_app_ns(neigh); 373 neigh_app_ns(neigh);
372 return; 374 return;
@@ -871,7 +873,7 @@ static int arp_process(struct sk_buff *skb)
871 873
872 if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED || 874 if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
873 skb->pkt_type == PACKET_HOST || 875 skb->pkt_type == PACKET_HOST ||
874 in_dev->arp_parms->proxy_delay == 0) { 876 NEIGH_VAR(in_dev->arp_parms, PROXY_DELAY) == 0) {
875 arp_send(ARPOP_REPLY, ETH_P_ARP, sip, 877 arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
876 dev, tip, sha, dev->dev_addr, 878 dev, tip, sha, dev->dev_addr,
877 sha); 879 sha);
@@ -910,7 +912,8 @@ static int arp_process(struct sk_buff *skb)
910 agents are active. Taking the first reply prevents 912 agents are active. Taking the first reply prevents
911 arp trashing and chooses the fastest router. 913 arp trashing and chooses the fastest router.
912 */ 914 */
913 override = time_after(jiffies, n->updated + n->parms->locktime); 915 override = time_after(jiffies, n->updated +
916 NEIGH_VAR(n->parms, LOCKTIME));
914 917
915 /* Broadcast replies and request packets 918 /* Broadcast replies and request packets
916 do not assert neighbour reachability. 919 do not assert neighbour reachability.
@@ -1284,7 +1287,7 @@ void __init arp_init(void)
1284 dev_add_pack(&arp_packet_type); 1287 dev_add_pack(&arp_packet_type);
1285 arp_proc_init(); 1288 arp_proc_init();
1286#ifdef CONFIG_SYSCTL 1289#ifdef CONFIG_SYSCTL
1287 neigh_sysctl_register(NULL, &arp_tbl.parms, "ipv4", NULL); 1290 neigh_sysctl_register(NULL, &arp_tbl.parms, NULL);
1288#endif 1291#endif
1289 register_netdevice_notifier(&arp_netdev_notifier); 1292 register_netdevice_notifier(&arp_netdev_notifier);
1290} 1293}
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index a1b5bcbd04ae..43065be36301 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -500,6 +500,7 @@ static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
500 return -ENOBUFS; 500 return -ENOBUFS;
501 } 501 }
502 ipv4_devconf_setall(in_dev); 502 ipv4_devconf_setall(in_dev);
503 neigh_parms_data_state_setall(in_dev->arp_parms);
503 if (ifa->ifa_dev != in_dev) { 504 if (ifa->ifa_dev != in_dev) {
504 WARN_ON(ifa->ifa_dev); 505 WARN_ON(ifa->ifa_dev);
505 in_dev_hold(in_dev); 506 in_dev_hold(in_dev);
@@ -747,6 +748,7 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh,
747 goto errout; 748 goto errout;
748 749
749 ipv4_devconf_setall(in_dev); 750 ipv4_devconf_setall(in_dev);
751 neigh_parms_data_state_setall(in_dev->arp_parms);
750 in_dev_hold(in_dev); 752 in_dev_hold(in_dev);
751 753
752 if (tb[IFA_ADDRESS] == NULL) 754 if (tb[IFA_ADDRESS] == NULL)
@@ -2160,7 +2162,7 @@ static void __devinet_sysctl_unregister(struct ipv4_devconf *cnf)
2160 2162
2161static void devinet_sysctl_register(struct in_device *idev) 2163static void devinet_sysctl_register(struct in_device *idev)
2162{ 2164{
2163 neigh_sysctl_register(idev->dev, idev->arp_parms, "ipv4", NULL); 2165 neigh_sysctl_register(idev->dev, idev->arp_parms, NULL);
2164 __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name, 2166 __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name,
2165 &idev->cnf); 2167 &idev->cnf);
2166} 2168}
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 62212c772a4b..421a24934ffd 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -425,6 +425,7 @@ struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v)
425 goto failure; 425 goto failure;
426 426
427 ipv4_devconf_setall(in_dev); 427 ipv4_devconf_setall(in_dev);
428 neigh_parms_data_state_setall(in_dev->arp_parms);
428 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0; 429 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0;
429 430
430 if (dev_open(dev)) 431 if (dev_open(dev))
@@ -517,6 +518,7 @@ static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt)
517 } 518 }
518 519
519 ipv4_devconf_setall(in_dev); 520 ipv4_devconf_setall(in_dev);
521 neigh_parms_data_state_setall(in_dev->arp_parms);
520 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0; 522 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0;
521 rcu_read_unlock(); 523 rcu_read_unlock();
522 524
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 5087cc5cb810..be4dbbd17d3b 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -834,6 +834,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
834 goto out; 834 goto out;
835 } 835 }
836 836
837 neigh_parms_data_state_setall(idev->nd_parms);
838
837 ifa->addr = *addr; 839 ifa->addr = *addr;
838 if (peer_addr) 840 if (peer_addr)
839 ifa->peer_addr = *peer_addr; 841 ifa->peer_addr = *peer_addr;
@@ -1071,7 +1073,7 @@ retry:
1071 1073
1072 regen_advance = idev->cnf.regen_max_retry * 1074 regen_advance = idev->cnf.regen_max_retry *
1073 idev->cnf.dad_transmits * 1075 idev->cnf.dad_transmits *
1074 idev->nd_parms->retrans_time / HZ; 1076 NEIGH_VAR(idev->nd_parms, RETRANS_TIME) / HZ;
1075 write_unlock_bh(&idev->lock); 1077 write_unlock_bh(&idev->lock);
1076 1078
1077 /* A temporary address is created only if this calculated Preferred 1079 /* A temporary address is created only if this calculated Preferred
@@ -1888,7 +1890,8 @@ static void ipv6_regen_rndid(unsigned long data)
1888 1890
1889 expires = jiffies + 1891 expires = jiffies +
1890 idev->cnf.temp_prefered_lft * HZ - 1892 idev->cnf.temp_prefered_lft * HZ -
1891 idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - 1893 idev->cnf.regen_max_retry * idev->cnf.dad_transmits *
1894 NEIGH_VAR(idev->nd_parms, RETRANS_TIME) -
1892 idev->cnf.max_desync_factor * HZ; 1895 idev->cnf.max_desync_factor * HZ;
1893 if (time_before(expires, jiffies)) { 1896 if (time_before(expires, jiffies)) {
1894 pr_warn("%s: too short regeneration interval; timer disabled for %s\n", 1897 pr_warn("%s: too short regeneration interval; timer disabled for %s\n",
@@ -3188,7 +3191,8 @@ static void addrconf_dad_timer(unsigned long data)
3188 } 3191 }
3189 3192
3190 ifp->dad_probes--; 3193 ifp->dad_probes--;
3191 addrconf_mod_dad_timer(ifp, ifp->idev->nd_parms->retrans_time); 3194 addrconf_mod_dad_timer(ifp,
3195 NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME));
3192 spin_unlock(&ifp->lock); 3196 spin_unlock(&ifp->lock);
3193 write_unlock(&idev->lock); 3197 write_unlock(&idev->lock);
3194 3198
@@ -3509,7 +3513,7 @@ restart:
3509 !(ifp->flags&IFA_F_TENTATIVE)) { 3513 !(ifp->flags&IFA_F_TENTATIVE)) {
3510 unsigned long regen_advance = ifp->idev->cnf.regen_max_retry * 3514 unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
3511 ifp->idev->cnf.dad_transmits * 3515 ifp->idev->cnf.dad_transmits *
3512 ifp->idev->nd_parms->retrans_time / HZ; 3516 NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME) / HZ;
3513 3517
3514 if (age >= ifp->prefered_lft - regen_advance) { 3518 if (age >= ifp->prefered_lft - regen_advance) {
3515 struct inet6_ifaddr *ifpub = ifp->ifpub; 3519 struct inet6_ifaddr *ifpub = ifp->ifpub;
@@ -4231,7 +4235,7 @@ static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev)
4231 ci.max_reasm_len = IPV6_MAXPLEN; 4235 ci.max_reasm_len = IPV6_MAXPLEN;
4232 ci.tstamp = cstamp_delta(idev->tstamp); 4236 ci.tstamp = cstamp_delta(idev->tstamp);
4233 ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time); 4237 ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time);
4234 ci.retrans_time = jiffies_to_msecs(idev->nd_parms->retrans_time); 4238 ci.retrans_time = jiffies_to_msecs(NEIGH_VAR(idev->nd_parms, RETRANS_TIME));
4235 if (nla_put(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci)) 4239 if (nla_put(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci))
4236 goto nla_put_failure; 4240 goto nla_put_failure;
4237 nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32)); 4241 nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32));
@@ -5026,7 +5030,7 @@ static void __addrconf_sysctl_unregister(struct ipv6_devconf *p)
5026 5030
5027static void addrconf_sysctl_register(struct inet6_dev *idev) 5031static void addrconf_sysctl_register(struct inet6_dev *idev)
5028{ 5032{
5029 neigh_sysctl_register(idev->dev, idev->nd_parms, "ipv6", 5033 neigh_sysctl_register(idev->dev, idev->nd_parms,
5030 &ndisc_ifinfo_sysctl_change); 5034 &ndisc_ifinfo_sysctl_change);
5031 __addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name, 5035 __addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name,
5032 idev, &idev->cnf); 5036 idev, &idev->cnf);
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 300865171394..09a22f4f36c9 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -125,17 +125,19 @@ struct neigh_table nd_tbl = {
125 .id = "ndisc_cache", 125 .id = "ndisc_cache",
126 .parms = { 126 .parms = {
127 .tbl = &nd_tbl, 127 .tbl = &nd_tbl,
128 .base_reachable_time = ND_REACHABLE_TIME,
129 .retrans_time = ND_RETRANS_TIMER,
130 .gc_staletime = 60 * HZ,
131 .reachable_time = ND_REACHABLE_TIME, 128 .reachable_time = ND_REACHABLE_TIME,
132 .delay_probe_time = 5 * HZ, 129 .data = {
133 .queue_len_bytes = 64*1024, 130 [NEIGH_VAR_MCAST_PROBES] = 3,
134 .ucast_probes = 3, 131 [NEIGH_VAR_UCAST_PROBES] = 3,
135 .mcast_probes = 3, 132 [NEIGH_VAR_RETRANS_TIME] = ND_RETRANS_TIMER,
136 .anycast_delay = 1 * HZ, 133 [NEIGH_VAR_BASE_REACHABLE_TIME] = ND_REACHABLE_TIME,
137 .proxy_delay = (8 * HZ) / 10, 134 [NEIGH_VAR_DELAY_PROBE_TIME] = 5 * HZ,
138 .proxy_qlen = 64, 135 [NEIGH_VAR_GC_STALETIME] = 60 * HZ,
136 [NEIGH_VAR_QUEUE_LEN_BYTES] = 64 * 1024,
137 [NEIGH_VAR_PROXY_QLEN] = 64,
138 [NEIGH_VAR_ANYCAST_DELAY] = 1 * HZ,
139 [NEIGH_VAR_PROXY_DELAY] = (8 * HZ) / 10,
140 },
139 }, 141 },
140 .gc_interval = 30 * HZ, 142 .gc_interval = 30 * HZ,
141 .gc_thresh1 = 128, 143 .gc_thresh1 = 128,
@@ -656,14 +658,14 @@ static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb)
656 if (skb && ipv6_chk_addr(dev_net(dev), &ipv6_hdr(skb)->saddr, dev, 1)) 658 if (skb && ipv6_chk_addr(dev_net(dev), &ipv6_hdr(skb)->saddr, dev, 1))
657 saddr = &ipv6_hdr(skb)->saddr; 659 saddr = &ipv6_hdr(skb)->saddr;
658 660
659 if ((probes -= neigh->parms->ucast_probes) < 0) { 661 if ((probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES)) < 0) {
660 if (!(neigh->nud_state & NUD_VALID)) { 662 if (!(neigh->nud_state & NUD_VALID)) {
661 ND_PRINTK(1, dbg, 663 ND_PRINTK(1, dbg,
662 "%s: trying to ucast probe in NUD_INVALID: %pI6\n", 664 "%s: trying to ucast probe in NUD_INVALID: %pI6\n",
663 __func__, target); 665 __func__, target);
664 } 666 }
665 ndisc_send_ns(dev, neigh, target, target, saddr); 667 ndisc_send_ns(dev, neigh, target, target, saddr);
666 } else if ((probes -= neigh->parms->app_probes) < 0) { 668 } else if ((probes -= NEIGH_VAR(neigh->parms, APP_PROBES)) < 0) {
667 neigh_app_ns(neigh); 669 neigh_app_ns(neigh);
668 } else { 670 } else {
669 addrconf_addr_solict_mult(target, &mcaddr); 671 addrconf_addr_solict_mult(target, &mcaddr);
@@ -790,7 +792,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
790 if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) && 792 if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
791 skb->pkt_type != PACKET_HOST && 793 skb->pkt_type != PACKET_HOST &&
792 inc && 794 inc &&
793 idev->nd_parms->proxy_delay != 0) { 795 NEIGH_VAR(idev->nd_parms, PROXY_DELAY) != 0) {
794 /* 796 /*
795 * for anycast or proxy, 797 * for anycast or proxy,
796 * sender should delay its response 798 * sender should delay its response
@@ -1210,7 +1212,7 @@ skip_defrtr:
1210 rtime = (rtime*HZ)/1000; 1212 rtime = (rtime*HZ)/1000;
1211 if (rtime < HZ/10) 1213 if (rtime < HZ/10)
1212 rtime = HZ/10; 1214 rtime = HZ/10;
1213 in6_dev->nd_parms->retrans_time = rtime; 1215 NEIGH_VAR_SET(in6_dev->nd_parms, RETRANS_TIME, rtime);
1214 in6_dev->tstamp = jiffies; 1216 in6_dev->tstamp = jiffies;
1215 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev); 1217 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev);
1216 } 1218 }
@@ -1222,9 +1224,11 @@ skip_defrtr:
1222 if (rtime < HZ/10) 1224 if (rtime < HZ/10)
1223 rtime = HZ/10; 1225 rtime = HZ/10;
1224 1226
1225 if (rtime != in6_dev->nd_parms->base_reachable_time) { 1227 if (rtime != NEIGH_VAR(in6_dev->nd_parms, BASE_REACHABLE_TIME)) {
1226 in6_dev->nd_parms->base_reachable_time = rtime; 1228 NEIGH_VAR_SET(in6_dev->nd_parms,
1227 in6_dev->nd_parms->gc_staletime = 3 * rtime; 1229 BASE_REACHABLE_TIME, rtime);
1230 NEIGH_VAR_SET(in6_dev->nd_parms,
1231 GC_STALETIME, 3 * rtime);
1228 in6_dev->nd_parms->reachable_time = neigh_rand_reach_time(rtime); 1232 in6_dev->nd_parms->reachable_time = neigh_rand_reach_time(rtime);
1229 in6_dev->tstamp = jiffies; 1233 in6_dev->tstamp = jiffies;
1230 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev); 1234 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev);
@@ -1651,22 +1655,23 @@ int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *bu
1651 ndisc_warn_deprecated_sysctl(ctl, "syscall", dev ? dev->name : "default"); 1655 ndisc_warn_deprecated_sysctl(ctl, "syscall", dev ? dev->name : "default");
1652 1656
1653 if (strcmp(ctl->procname, "retrans_time") == 0) 1657 if (strcmp(ctl->procname, "retrans_time") == 0)
1654 ret = proc_dointvec(ctl, write, buffer, lenp, ppos); 1658 ret = neigh_proc_dointvec(ctl, write, buffer, lenp, ppos);
1655 1659
1656 else if (strcmp(ctl->procname, "base_reachable_time") == 0) 1660 else if (strcmp(ctl->procname, "base_reachable_time") == 0)
1657 ret = proc_dointvec_jiffies(ctl, write, 1661 ret = neigh_proc_dointvec_jiffies(ctl, write,
1658 buffer, lenp, ppos); 1662 buffer, lenp, ppos);
1659 1663
1660 else if ((strcmp(ctl->procname, "retrans_time_ms") == 0) || 1664 else if ((strcmp(ctl->procname, "retrans_time_ms") == 0) ||
1661 (strcmp(ctl->procname, "base_reachable_time_ms") == 0)) 1665 (strcmp(ctl->procname, "base_reachable_time_ms") == 0))
1662 ret = proc_dointvec_ms_jiffies(ctl, write, 1666 ret = neigh_proc_dointvec_ms_jiffies(ctl, write,
1663 buffer, lenp, ppos); 1667 buffer, lenp, ppos);
1664 else 1668 else
1665 ret = -1; 1669 ret = -1;
1666 1670
1667 if (write && ret == 0 && dev && (idev = in6_dev_get(dev)) != NULL) { 1671 if (write && ret == 0 && dev && (idev = in6_dev_get(dev)) != NULL) {
1668 if (ctl->data == &idev->nd_parms->base_reachable_time) 1672 if (ctl->data == &NEIGH_VAR(idev->nd_parms, BASE_REACHABLE_TIME))
1669 idev->nd_parms->reachable_time = neigh_rand_reach_time(idev->nd_parms->base_reachable_time); 1673 idev->nd_parms->reachable_time =
1674 neigh_rand_reach_time(NEIGH_VAR(idev->nd_parms, BASE_REACHABLE_TIME));
1670 idev->tstamp = jiffies; 1675 idev->tstamp = jiffies;
1671 inet6_ifinfo_notify(RTM_NEWLINK, idev); 1676 inet6_ifinfo_notify(RTM_NEWLINK, idev);
1672 in6_dev_put(idev); 1677 in6_dev_put(idev);
@@ -1725,7 +1730,7 @@ int __init ndisc_init(void)
1725 neigh_table_init(&nd_tbl); 1730 neigh_table_init(&nd_tbl);
1726 1731
1727#ifdef CONFIG_SYSCTL 1732#ifdef CONFIG_SYSCTL
1728 err = neigh_sysctl_register(NULL, &nd_tbl.parms, "ipv6", 1733 err = neigh_sysctl_register(NULL, &nd_tbl.parms,
1729 &ndisc_ifinfo_sysctl_change); 1734 &ndisc_ifinfo_sysctl_change);
1730 if (err) 1735 if (err)
1731 goto out_unregister_pernet; 1736 goto out_unregister_pernet;