On 4/1/18 8:40 AM, Xin Long wrote: > Prior to this patch, when one packet is hashed into path [1] > (hash <= nh_upper_bound) and it's neigh is dead, it will try > path [2]. However, if path [2]'s neigh is alive but it's > hash > nh_upper_bound, it will not return this alive path. > This packet will never be sent even if path [2] is alive. > > 3.3.3.1/24: > nexthop via 1.1.1.254 dev eth1 weight 1 <--[1] (dead neigh) > nexthop via 2.2.2.254 dev eth2 weight 1 <--[2] > > With sysctl_fib_multipath_use_neigh set is supposed to find an > available path respecting to the l3/l4 hash. But if there is > no available route with this hash, it should at least return > an alive route even with other hash. > > This patch is to fix it by processing fib_multipath_use_neigh > earlier than the hash check, so that it will at least return > an alive route if there is when fib_multipath_use_neigh is > enabled. It's also compatible with before when there are alive > routes with the l3/l4 hash. > > Fixes: a6db4494d218 ("net: ipv4: Consider failed nexthops in multipath > routes") > Reported-by: Jianlin Shi <ji...@redhat.com> > Signed-off-by: Xin Long <lucien....@gmail.com> > --- > net/ipv4/fib_semantics.c | 20 +++++++++++--------- > 1 file changed, 11 insertions(+), 9 deletions(-) >
Acked-by: David Ahern <d...@cumulusnetworks.com>