aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ndisc.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r--net/ipv6/ndisc.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 300865171394..0da0986a9292 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);
@@ -1665,8 +1669,9 @@ int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *bu
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);