ipv6: router reachability probing
RFC 4191 states in 3.5: When a host avoids using any non-reachable router X and instead sends a data packet to another router Y, and the host would have used router X if router X were reachable, then the host SHOULD probe each such router X's reachability by sending a single Neighbor Solicitation to that router's address. A host MUST NOT probe a router's reachability in the absence of useful traffic that the host would have sent to the router if it were reachable. In any case, these probes MUST be rate-limited to no more than one per minute per router. Currently, when the neighbour corresponding to a router falls into NUD_FAILED, it's never considered again. Introduce a new rt6_nud_state value, RT6_NUD_FAIL_PROBE, which suggests the route should not be used but should be probed with a single NS. The probe is ratelimited by the existing code. To better distinguish meanings of the failure values, rename RT6_NUD_FAIL_SOFT to RT6_NUD_FAIL_DO_RR. Signed-off-by: Jiri Benc <jbenc@redhat.com> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
このコミットが含まれているのは:
@@ -1238,6 +1238,21 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(neigh_update);
|
||||
|
||||
/* Update the neigh to listen temporarily for probe responses, even if it is
|
||||
* in a NUD_FAILED state. The caller has to hold neigh->lock for writing.
|
||||
*/
|
||||
void __neigh_set_probe_once(struct neighbour *neigh)
|
||||
{
|
||||
neigh->updated = jiffies;
|
||||
if (!(neigh->nud_state & NUD_FAILED))
|
||||
return;
|
||||
neigh->nud_state = NUD_PROBE;
|
||||
atomic_set(&neigh->probes, NEIGH_VAR(neigh->parms, UCAST_PROBES));
|
||||
neigh_add_timer(neigh,
|
||||
jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
|
||||
}
|
||||
EXPORT_SYMBOL(__neigh_set_probe_once);
|
||||
|
||||
struct neighbour *neigh_event_ns(struct neigh_table *tbl,
|
||||
u8 *lladdr, void *saddr,
|
||||
struct net_device *dev)
|
||||
|
新しいイシューから参照
ユーザーをブロックする