| From e7a431b5fbe02b2592b8310e63d27679858cc276 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 14 Aug 2025 15:06:40 +0200 |
| Subject: mlxsw: spectrum: Forward packets with an IPv4 link-local source IP |
| |
| From: Ido Schimmel <idosch@nvidia.com> |
| |
| [ Upstream commit f604d3aaf64ff0d90cc875295474d3abf4155629 ] |
| |
| By default, the device does not forward IPv4 packets with a link-local |
| source IP (i.e., 169.254.0.0/16). This behavior does not align with the |
| kernel which does forward them. |
| |
| Fix by instructing the device to forward such packets instead of |
| dropping them. |
| |
| Fixes: ca360db4b825 ("mlxsw: spectrum: Disable DIP_LINK_LOCAL check in hardware pipeline") |
| Reported-by: Zoey Mertes <zoey@cloudflare.com> |
| Signed-off-by: Ido Schimmel <idosch@nvidia.com> |
| Reviewed-by: Petr Machata <petrm@nvidia.com> |
| Signed-off-by: Petr Machata <petrm@nvidia.com> |
| Link: https://patch.msgid.link/6721e6b2c96feb80269e72ce8d0b426e2f32d99c.1755174341.git.petrm@nvidia.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 2 ++ |
| drivers/net/ethernet/mellanox/mlxsw/trap.h | 1 + |
| 2 files changed, 3 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| index 67ecdb9e708f..2aec55dd07c6 100644 |
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| @@ -2522,6 +2522,8 @@ static const struct mlxsw_listener mlxsw_sp_listener[] = { |
| ROUTER_EXP, false), |
| MLXSW_SP_RXL_NO_MARK(DISCARD_ING_ROUTER_DIP_LINK_LOCAL, FORWARD, |
| ROUTER_EXP, false), |
| + MLXSW_SP_RXL_NO_MARK(DISCARD_ING_ROUTER_SIP_LINK_LOCAL, FORWARD, |
| + ROUTER_EXP, false), |
| /* Multicast Router Traps */ |
| MLXSW_SP_RXL_MARK(ACL1, TRAP_TO_CPU, MULTICAST, false), |
| MLXSW_SP_RXL_L3_MARK(ACL2, TRAP_TO_CPU, MULTICAST, false), |
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/trap.h b/drivers/net/ethernet/mellanox/mlxsw/trap.h |
| index 8da169663bda..f44c8548c7e3 100644 |
| --- a/drivers/net/ethernet/mellanox/mlxsw/trap.h |
| +++ b/drivers/net/ethernet/mellanox/mlxsw/trap.h |
| @@ -93,6 +93,7 @@ enum { |
| MLXSW_TRAP_ID_DISCARD_ING_ROUTER_IPV4_SIP_BC = 0x16A, |
| MLXSW_TRAP_ID_DISCARD_ING_ROUTER_IPV4_DIP_LOCAL_NET = 0x16B, |
| MLXSW_TRAP_ID_DISCARD_ING_ROUTER_DIP_LINK_LOCAL = 0x16C, |
| + MLXSW_TRAP_ID_DISCARD_ING_ROUTER_SIP_LINK_LOCAL = 0x16D, |
| MLXSW_TRAP_ID_DISCARD_ROUTER_IRIF_EN = 0x178, |
| MLXSW_TRAP_ID_DISCARD_ROUTER_ERIF_EN = 0x179, |
| MLXSW_TRAP_ID_DISCARD_ROUTER_LPM4 = 0x17B, |
| -- |
| 2.50.1 |
| |