• D
    net/ipv6: Do not allow device only routes via the multipath API · b5d2d75e
    David Ahern 提交于
    Eric reported that reverting the patch that fixed and simplified IPv6
    multipath routes means reverting back to invalid userspace notifications.
    eg.,
    $ ip -6 route add 2001:db8:1::/64 nexthop dev eth0 nexthop dev eth1
    
    only generates a single notification:
    2001:db8:1::/64 dev eth0 metric 1024 pref medium
    
    While working on a fix for this problem I found another case that is just
    broken completely - a multipath route with a gateway followed by device
    followed by gateway:
        $ ip -6 ro add 2001:db8:103::/64
              nexthop via 2001:db8:1::64
              nexthop dev dummy2
              nexthop via 2001:db8:3::64
    
    In this case the device only route is dropped completely - no notification
    to userpsace but no addition to the FIB either:
    
    $ ip -6 ro ls
    2001:db8:1::/64 dev dummy1 proto kernel metric 256 pref medium
    2001:db8:2::/64 dev dummy2 proto kernel metric 256 pref medium
    2001:db8:3::/64 dev dummy3 proto kernel metric 256 pref medium
    2001:db8:103::/64 metric 1024
    	nexthop via 2001:db8:1::64 dev dummy1 weight 1
    	nexthop via 2001:db8:3::64 dev dummy3 weight 1 pref medium
    fe80::/64 dev dummy1 proto kernel metric 256 pref medium
    fe80::/64 dev dummy2 proto kernel metric 256 pref medium
    fe80::/64 dev dummy3 proto kernel metric 256 pref medium
    
    Really, IPv6 multipath is just FUBAR'ed beyond repair when it comes to
    device only routes, so do not allow it all.
    
    This change will break any scripts relying on the mpath api for insert,
    but I don't see any other way to handle the permutations. Besides, since
    the routes are added to the FIB as standalone (non-multipath) routes the
    kernel is not doing what the user requested, so it might as well tell the
    user that.
    Reported-by: NEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: NDavid Ahern <dsahern@gmail.com>
    Reviewed-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b5d2d75e
route.c 131.8 KB