|
@@ -817,10 +817,9 @@ out:
|
|
|
static __inline__ int neigh_max_probes(struct neighbour *n)
|
|
|
{
|
|
|
struct neigh_parms *p = n->parms;
|
|
|
- int max_probes = NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES);
|
|
|
- if (!(n->nud_state & NUD_PROBE))
|
|
|
- max_probes += NEIGH_VAR(p, MCAST_PROBES);
|
|
|
- return max_probes;
|
|
|
+ return NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
|
|
|
+ (n->nud_state & NUD_PROBE ? NEIGH_VAR(p, MCAST_REPROBES) :
|
|
|
+ NEIGH_VAR(p, MCAST_PROBES));
|
|
|
}
|
|
|
|
|
|
static void neigh_invalidate(struct neighbour *neigh)
|
|
@@ -1742,6 +1741,8 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
|
|
|
NEIGH_VAR(parms, UCAST_PROBES)) ||
|
|
|
nla_put_u32(skb, NDTPA_MCAST_PROBES,
|
|
|
NEIGH_VAR(parms, MCAST_PROBES)) ||
|
|
|
+ nla_put_u32(skb, NDTPA_MCAST_REPROBES,
|
|
|
+ NEIGH_VAR(parms, MCAST_REPROBES)) ||
|
|
|
nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time) ||
|
|
|
nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
|
|
|
NEIGH_VAR(parms, BASE_REACHABLE_TIME)) ||
|
|
@@ -1901,6 +1902,7 @@ static const struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] = {
|
|
|
[NDTPA_APP_PROBES] = { .type = NLA_U32 },
|
|
|
[NDTPA_UCAST_PROBES] = { .type = NLA_U32 },
|
|
|
[NDTPA_MCAST_PROBES] = { .type = NLA_U32 },
|
|
|
+ [NDTPA_MCAST_REPROBES] = { .type = NLA_U32 },
|
|
|
[NDTPA_BASE_REACHABLE_TIME] = { .type = NLA_U64 },
|
|
|
[NDTPA_GC_STALETIME] = { .type = NLA_U64 },
|
|
|
[NDTPA_DELAY_PROBE_TIME] = { .type = NLA_U64 },
|
|
@@ -2001,6 +2003,10 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|
|
NEIGH_VAR_SET(p, MCAST_PROBES,
|
|
|
nla_get_u32(tbp[i]));
|
|
|
break;
|
|
|
+ case NDTPA_MCAST_REPROBES:
|
|
|
+ NEIGH_VAR_SET(p, MCAST_REPROBES,
|
|
|
+ nla_get_u32(tbp[i]));
|
|
|
+ break;
|
|
|
case NDTPA_BASE_REACHABLE_TIME:
|
|
|
NEIGH_VAR_SET(p, BASE_REACHABLE_TIME,
|
|
|
nla_get_msecs(tbp[i]));
|
|
@@ -2987,6 +2993,7 @@ static struct neigh_sysctl_table {
|
|
|
NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_PROBES, "mcast_solicit"),
|
|
|
NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(UCAST_PROBES, "ucast_solicit"),
|
|
|
NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(APP_PROBES, "app_solicit"),
|
|
|
+ NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_REPROBES, "mcast_resolicit"),
|
|
|
NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(RETRANS_TIME, "retrans_time"),
|
|
|
NEIGH_SYSCTL_JIFFIES_ENTRY(BASE_REACHABLE_TIME, "base_reachable_time"),
|
|
|
NEIGH_SYSCTL_JIFFIES_ENTRY(DELAY_PROBE_TIME, "delay_first_probe_time"),
|