• David Ahern's avatar
    net/ipv6: Fix linklocal to global address with VRF · 24b711ed
    David Ahern authored
    Example setup:
        host: ip -6 addr add dev eth1 2001:db8:104::4
               where eth1 is enslaved to a VRF
    
        switch: ip -6 ro add 2001:db8:104::4/128 dev br1
                where br1 only has an LLA
    
               ping6 2001:db8:104::4
               ssh   2001:db8:104::4
    
    (NOTE: UDP works fine if the PKTINFO has the address set to the global
    address and ifindex is set to the index of eth1 with a destination an
    LLA).
    
    For ICMP, icmp6_iif needs to be updated to check if skb->dev is an
    L3 master. If it is then return the ifindex from rt6i_idev similar
    to what is done for loopback.
    
    For TCP, restore the original tcp_v6_iif definition which is needed in
    most places and add a new tcp_v6_iif_l3_slave that considers the
    l3_slave variability. This latter check is only needed for socket
    lookups.
    
    Fixes: 9ff74384 ("net: vrf: Handle ipv6 multicast and link-local addresses")
    Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    24b711ed
icmp.c 26.1 KB