• Tim Stallard's avatar
    net: ipv6: do not consider routes via gateways for anycast address check · 03e2a984
    Tim Stallard authored
    The behaviour for what is considered an anycast address changed in
    commit 45e4fd26 ("ipv6: Only create RTF_CACHE routes after
    encountering pmtu exception"). This now considers the first
    address in a subnet where there is a route via a gateway
    to be an anycast address.
    
    This breaks path MTU discovery and traceroutes when a host in a
    remote network uses the address at the start of a prefix
    (eg 2600:: advertised as 2600::/48 in the DFZ) as ICMP errors
    will not be sent to anycast addresses.
    
    This patch excludes any routes with a gateway, or via point to
    point links, like the behaviour previously from
    rt6_is_gw_or_nonexthop in net/ipv6/route.c.
    
    This can be tested with:
    ip link add v1 type veth peer name v2
    ip netns add test
    ip netns exec test ip link set lo up
    ip link set v2 netns test
    ip link set v1 up
    ip netns exec test ip link set v2 up
    ip addr add 2001:db8::1/64 dev v1 nodad
    ip addr add 2001:db8:100:: dev lo nodad
    ip netns exec test ip addr add 2001:db8::2/64 dev v2 nodad
    ip netns exec test ip route add unreachable 2001:db8:1::1
    ip netns exec test ip route add 2001:db8:100::/64 via 2001:db8::1
    ip netns exec test sysctl net.ipv6.conf.all.forwarding=1
    ip route add 2001:db8:1::1 via 2001:db8::2
    ping -I 2001:db8::1 2001:db8:1::1 -c1
    ping -I 2001:db8:100:: 2001:db8:1::1 -c1
    ip addr delete 2001:db8:100:: dev lo
    ip netns delete test
    
    Currently the first ping will get back a destination unreachable ICMP
    error, but the second will never get a response, with "icmp6_send:
    acast source" logged. After this patch, both get destination
    unreachable ICMP replies.
    
    Fixes: 45e4fd26 ("ipv6: Only create RTF_CACHE routes after encountering pmtu exception")
    Signed-off-by: default avatarTim Stallard <code@timstallard.me.uk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    03e2a984
ip6_route.h 9.72 KB