diff options
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 43 |
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); |