mlxsw: spectrum_router: Trap packets hitting anycast routes
authorIdo Schimmel <idosch@mellanox.com>
Fri, 1 Sep 2017 08:58:55 +0000 (10:58 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 Sep 2017 17:01:36 +0000 (10:01 -0700)
I relied on the fact that anycast routes use the loopback device as
their nexthop device to trap packets hitting them to the CPU.

After commit 4832c30d5458 ("net: ipv6: put host and anycast routes on
device with address") this is no longer the case and such routes are
programmed with a forward action (note the 'offload' flag):

anycast cafe:: dev enp3s0np7 proto kernel metric 0 offload pref medium

This will prevent the router from locally receiving packets destined to
the Subnet-Router anycast address.

Fix this by specifically programming anycast routes with action trap,
which results in the following output:

anycast cafe:: dev enp3s0np7 proto kernel metric 0 pref medium

Fixes: 4832c30d5458 ("net: ipv6: put host and anycast routes on device with address")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 0cf68102d113b7afdd9ccb4168b9d049b85a0681..00e3aec2d0861e86e787babf2a1cb3fc456beb46 100644 (file)
@@ -3659,7 +3659,7 @@ static void mlxsw_sp_fib6_entry_type_set(struct mlxsw_sp_fib_entry *fib_entry,
         * local, which will cause them to be trapped with a lower
         * priority than packets that need to be locally received.
         */
-       if (rt->rt6i_flags & RTF_LOCAL)
+       if (rt->rt6i_flags & (RTF_LOCAL | RTF_ANYCAST))
                fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_TRAP;
        else if (rt->rt6i_flags & RTF_REJECT)
                fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;