• Antoine Tenart's avatar
    net: vrf: determine the dst using the original ifindex for multicast · f2575c8f
    Antoine Tenart authored
    Multicast packets received on an interface bound to a VRF are marked as
    belonging to the VRF and the skb device is updated to point to the VRF
    device itself. This was fine even when a route was associated to a
    device as when performing a fib table lookup 'oif' in fib6_table_lookup
    (coming from 'skb->dev->ifindex' in ip6_route_input) was set to 0 when
    FLOWI_FLAG_SKIP_NH_OIF was set.
    
    With commit 40867d74 ("net: Add l3mdev index to flow struct and
    avoid oif reset for port devices") this is not longer true and multicast
    traffic is not received on the original interface.
    
    Instead of adding back a similar check in fib6_table_lookup determine
    the dst using the original ifindex for multicast VRF traffic. To make
    things consistent across the function do the above for all strict
    packets, which was the logic before commit 6f12fa77 ("vrf: mark skb
    for multicast or link-local as enslaved to VRF"). Note that reverting to
    this behavior should be fine as the change was about marking packets
    belonging to the VRF, not about their dst.
    
    Fixes: 40867d74 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices")
    Reported-by: default avatarJianlin Shi <jishi@redhat.com>
    Signed-off-by: default avatarAntoine Tenart <atenart@kernel.org>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20221220171825.1172237-1-atenart@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    f2575c8f
vrf.c 46.9 KB