• Ido Schimmel's avatar
    ipv6: Honor specified parameters in fibmatch lookup · 58acfd71
    Ido Schimmel authored
    Currently, parameters such as oif and source address are not taken into
    account during fibmatch lookup. Example (IPv4 for reference) before
    patch:
    
    $ ip -4 route show
    192.0.2.0/24 dev dummy0 proto kernel scope link src 192.0.2.1
    198.51.100.0/24 dev dummy1 proto kernel scope link src 198.51.100.1
    
    $ ip -6 route show
    2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium
    2001:db8:2::/64 dev dummy1 proto kernel metric 256 pref medium
    fe80::/64 dev dummy0 proto kernel metric 256 pref medium
    fe80::/64 dev dummy1 proto kernel metric 256 pref medium
    
    $ ip -4 route get fibmatch 192.0.2.2 oif dummy0
    192.0.2.0/24 dev dummy0 proto kernel scope link src 192.0.2.1
    $ ip -4 route get fibmatch 192.0.2.2 oif dummy1
    RTNETLINK answers: No route to host
    
    $ ip -6 route get fibmatch 2001:db8:1::2 oif dummy0
    2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium
    $ ip -6 route get fibmatch 2001:db8:1::2 oif dummy1
    2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium
    
    After:
    
    $ ip -6 route get fibmatch 2001:db8:1::2 oif dummy0
    2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium
    $ ip -6 route get fibmatch 2001:db8:1::2 oif dummy1
    RTNETLINK answers: Network is unreachable
    
    The problem stems from the fact that the necessary route lookup flags
    are not set based on these parameters.
    
    Instead of duplicating the same logic for fibmatch, we can simply
    resolve the original route from its copy and dump it instead.
    
    Fixes: 18c3a61c ("net: ipv6: RTM_GETROUTE: return matched fib result when requested")
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Acked-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    58acfd71
route.c 118 KB