[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <29e635b1-a619-5abc-cbe9-836319410869@stressinduktion.org>
Date: Tue, 26 Jul 2016 11:00:51 +0200
From: Hannes Frederic Sowa <hannes@...essinduktion.org>
To: Chunhui He <hchunhui@...l.ustc.edu.cn>,
"David S. Miller" <davem@...emloft.net>
Cc: David Ahern <dsa@...ulusnetworks.com>,
Nicolas Dichtel <nicolas.dichtel@...nd.com>,
Roopa Prabhu <roopa@...ulusnetworks.com>,
Robert Shearman <rshearma@...cade.com>,
David Barroso <dbarroso@...tly.com>,
Martin Zhang <martinbj2008@...il.com>,
Rick Jones <rick.jones2@...com>,
Konstantin Khlebnikov <koct9i@...il.com>,
Eric Dumazet <edumazet@...gle.com>,
Thomas Graf <tgraf@...g.ch>,
"Eric W. Biederman" <ebiederm@...ssion.com>,
YOSHIFUJI Hideaki <yoshfuji@...ux-ipv6.org>,
Julian Anastasov <ja@....bg>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] net: neigh: disallow transition to NUD_STALE if lladdr
is unchanged in neigh_update()
On 26.07.2016 08:16, Chunhui He wrote:
> NUD_STALE is used when the caller(e.g. arp_process()) can't guarantee
> neighbour reachability. If the entry was NUD_VALID and lladdr is unchanged,
> the entry state should not be changed.
>
> Currently the code puts an extra "NUD_CONNECTED" condition. So if old state
> was NUD_DELAY or NUD_PROBE (they are NUD_VALID but not NUD_CONNECTED), the
> state can be changed to NUD_STALE.
>
> This may cause problem. Because NUD_STALE lladdr doesn't guarantee
> reachability, when we send traffic, the state will be changed to
> NUD_DELAY. In normal case, if we get no confirmation (by dst_confirm()),
> we will change the state to NUD_PROBE and send probe traffic. But now the
> state may be reset to NUD_STALE again(e.g. by broadcast ARP packets),
> so the probe traffic will not be sent. This situation may happen again and
> again, and packets will be sent to an non-reachable lladdr forever.
>
> The fix is to remove the "NUD_CONNECTED" condition. After that the
> "NEIGH_UPDATE_F_WEAK_OVERRIDE" condition (used by IPv6) in that branch will
> be redundant, so remove it.
>
> This change may increase probe traffic, but it's essential since NUD_STALE
> lladdr is unreliable. To ensure correctness, we prefer to resolve lladdr,
> when we can't get confirmation, even while remote packets try to set
> NUD_STALE state.
>
> Signed-off-by: Chunhui He <hchunhui@...l.ustc.edu.cn>
> ---
> v2:
> - change title from "net: neigh: disallow state transition DELAY->STALE in
> neigh_update()"
> - remove "NUD_CONNECTED" condition instead of "NUD_CONNECTED | NUD_DELAY"
> - remove "NEIGH_UPDATE_F_WEAK_OVERRIDE" condition
Reviewed-by: Hannes Frederic Sowa <hannes@...essinduktion.org>
Thanks!
Powered by blists - more mailing lists