Skip to content
  • David Ahern's avatar
    net: ipv6: Use passed in table for nexthop lookups · 8c14586f
    David Ahern authored
    Similar to 3bfd8472 ("net: Use passed in table for nexthop lookups")
    for IPv4, if the route spec contains a table id use that to lookup the
    next hop first and fall back to a full lookup if it fails (per the fix
    4c9bcd11
    
     ("net: Fix nexthop lookups")).
    
    Example:
    
        root@kenny:~# ip -6 ro ls table red
        local 2100:1::1 dev lo  proto none  metric 0  pref medium
        2100:1::/120 dev eth1  proto kernel  metric 256  pref medium
        local 2100:2::1 dev lo  proto none  metric 0  pref medium
        2100:2::/120 dev eth2  proto kernel  metric 256  pref medium
        local fe80::e0:f9ff:fe09:3cac dev lo  proto none  metric 0  pref medium
        local fe80::e0:f9ff:fe1c:b974 dev lo  proto none  metric 0  pref medium
        fe80::/64 dev eth1  proto kernel  metric 256  pref medium
        fe80::/64 dev eth2  proto kernel  metric 256  pref medium
        ff00::/8 dev red  metric 256  pref medium
        ff00::/8 dev eth1  metric 256  pref medium
        ff00::/8 dev eth2  metric 256  pref medium
        unreachable default dev lo  metric 240  error -113 pref medium
    
        root@kenny:~# ip -6 ro add table red 2100:3::/64 via 2100:1::64
        RTNETLINK answers: No route to host
    
    Route add fails even though 2100:1::64 is a reachable next hop:
        root@kenny:~# ping6 -I red  2100:1::64
        ping6: Warning: source address might be selected on device other than red.
        PING 2100:1::64(2100:1::64) from 2100:1::1 red: 56 data bytes
        64 bytes from 2100:1::64: icmp_seq=1 ttl=64 time=1.33 ms
    
    With this patch:
        root@kenny:~# ip -6 ro add table red 2100:3::/64 via 2100:1::64
        root@kenny:~# ip -6 ro ls table red
        local 2100:1::1 dev lo  proto none  metric 0  pref medium
        2100:1::/120 dev eth1  proto kernel  metric 256  pref medium
        local 2100:2::1 dev lo  proto none  metric 0  pref medium
        2100:2::/120 dev eth2  proto kernel  metric 256  pref medium
        2100:3::/64 via 2100:1::64 dev eth1  metric 1024  pref medium
        local fe80::e0:f9ff:fe09:3cac dev lo  proto none  metric 0  pref medium
        local fe80::e0:f9ff:fe1c:b974 dev lo  proto none  metric 0  pref medium
        fe80::/64 dev eth1  proto kernel  metric 256  pref medium
        fe80::/64 dev eth2  proto kernel  metric 256  pref medium
        ff00::/8 dev red  metric 256  pref medium
        ff00::/8 dev eth1  metric 256  pref medium
        ff00::/8 dev eth2  metric 256  pref medium
        unreachable default dev lo  metric 240  error -113 pref medium
    
    Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8c14586f