• Ido Schimmel's avatar
    nexthop: Do not flush blackhole nexthops when loopback goes down · 76c03bf8
    Ido Schimmel authored
    As far as user space is concerned, blackhole nexthops do not have a
    nexthop device and therefore should not be affected by the
    administrative or carrier state of any netdev.
    
    However, when the loopback netdev goes down all the blackhole nexthops
    are flushed. This happens because internally the kernel associates
    blackhole nexthops with the loopback netdev.
    
    This behavior is both confusing to those not familiar with kernel
    internals and also diverges from the legacy API where blackhole IPv4
    routes are not flushed when the loopback netdev goes down:
    
     # ip route add blackhole 198.51.100.0/24
     # ip link set dev lo down
     # ip route show 198.51.100.0/24
     blackhole 198.51.100.0/24
    
    Blackhole IPv6 routes are flushed, but at least user space knows that
    they are associated with the loopback netdev:
    
     # ip -6 route show 2001:db8:1::/64
     blackhole 2001:db8:1::/64 dev lo metric 1024 pref medium
    
    Fix this by only flushing blackhole nexthops when the loopback netdev is
    unregistered.
    
    Fixes: ab84be7e ("net: Initial nexthop code")
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reported-by: default avatarDonald Sharp <sharpd@nvidia.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    76c03bf8
nexthop.c 52.2 KB