Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mlxsw: Add irif and erif disabled traps

IRIF_DISABLED and ERIF_DISABLED are driver specific traps. Packets are
dropped for these reasons when they need to be routed through/from
existing router interfaces (RIF) which are disabled.

Add devlink driver-specific traps and mlxsw trap IDs used to report
these traps.

Signed-off-by: Amit Cohen <amitc@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Amit Cohen and committed by
David S. Miller
5b051621 95ae2d1d

+51
+22
Documentation/networking/devlink/mlxsw.rst
··· 57 57 * - ``fw.version`` 58 58 - running 59 59 - Three digit firmware version 60 + 61 + Driver-specific Traps 62 + ===================== 63 + 64 + .. list-table:: List of Driver-specific Traps Registered by ``mlxsw`` 65 + :widths: 5 5 90 66 + 67 + * - Name 68 + - Type 69 + - Description 70 + * - ``irif_disabled`` 71 + - ``drop`` 72 + - Traps packets that the device decided to drop because they need to be 73 + routed from a disabled router interface (RIF). This can happen during 74 + RIF dismantle, when the RIF is first disabled before being removed 75 + completely 76 + * - ``erif_disabled`` 77 + - ``drop`` 78 + - Traps packets that the device decided to drop because they need to be 79 + routed through a disabled router interface (RIF). This can happen during 80 + RIF dismantle, when the RIF is first disabled before being removed 81 + completely
+26
drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c
··· 9 9 #include "reg.h" 10 10 #include "spectrum.h" 11 11 12 + /* All driver-specific traps must be documented in 13 + * Documentation/networking/devlink/mlxsw.rst 14 + */ 15 + enum { 16 + DEVLINK_MLXSW_TRAP_ID_BASE = DEVLINK_TRAP_GENERIC_ID_MAX, 17 + DEVLINK_MLXSW_TRAP_ID_IRIF_DISABLED, 18 + DEVLINK_MLXSW_TRAP_ID_ERIF_DISABLED, 19 + }; 20 + 21 + #define DEVLINK_MLXSW_TRAP_NAME_IRIF_DISABLED \ 22 + "irif_disabled" 23 + #define DEVLINK_MLXSW_TRAP_NAME_ERIF_DISABLED \ 24 + "erif_disabled" 25 + 12 26 #define MLXSW_SP_TRAP_METADATA DEVLINK_TRAP_METADATA_TYPE_F_IN_PORT 13 27 14 28 static void mlxsw_sp_rx_drop_listener(struct sk_buff *skb, u8 local_port, ··· 34 20 DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \ 35 21 DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ 36 22 MLXSW_SP_TRAP_METADATA) 23 + 24 + #define MLXSW_SP_TRAP_DRIVER_DROP(_id, _group_id) \ 25 + DEVLINK_TRAP_DRIVER(DROP, DROP, DEVLINK_MLXSW_TRAP_ID_##_id, \ 26 + DEVLINK_MLXSW_TRAP_NAME_##_id, \ 27 + DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ 28 + MLXSW_SP_TRAP_METADATA) 37 29 38 30 #define MLXSW_SP_TRAP_EXCEPTION(_id, _group_id) \ 39 31 DEVLINK_TRAP_GENERIC(EXCEPTION, TRAP, _id, \ ··· 78 58 MLXSW_SP_TRAP_EXCEPTION(UNRESOLVED_NEIGH, L3_DROPS), 79 59 MLXSW_SP_TRAP_EXCEPTION(IPV4_LPM_UNICAST_MISS, L3_DROPS), 80 60 MLXSW_SP_TRAP_EXCEPTION(IPV6_LPM_UNICAST_MISS, L3_DROPS), 61 + MLXSW_SP_TRAP_DRIVER_DROP(IRIF_DISABLED, L3_DROPS), 62 + MLXSW_SP_TRAP_DRIVER_DROP(ERIF_DISABLED, L3_DROPS), 81 63 }; 82 64 83 65 static struct mlxsw_listener mlxsw_sp_listeners_arr[] = { ··· 112 90 TRAP_EXCEPTION_TO_CPU), 113 91 MLXSW_SP_RXL_EXCEPTION(DISCARD_ROUTER_LPM6, ROUTER_EXP, 114 92 TRAP_EXCEPTION_TO_CPU), 93 + MLXSW_SP_RXL_DISCARD(ROUTER_IRIF_EN, L3_DISCARDS), 94 + MLXSW_SP_RXL_DISCARD(ROUTER_ERIF_EN, L3_DISCARDS), 115 95 }; 116 96 117 97 /* Mapping between hardware trap and devlink trap. Multiple hardware traps can ··· 147 123 DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH, 148 124 DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS, 149 125 DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS, 126 + DEVLINK_MLXSW_TRAP_ID_IRIF_DISABLED, 127 + DEVLINK_MLXSW_TRAP_ID_ERIF_DISABLED, 150 128 }; 151 129 152 130 static int mlxsw_sp_rx_listener(struct mlxsw_sp *mlxsw_sp, struct sk_buff *skb,
+2
drivers/net/ethernet/mellanox/mlxsw/trap.h
··· 88 88 MLXSW_TRAP_ID_DISCARD_ING_ROUTER_IPV4_SIP_BC = 0x16A, 89 89 MLXSW_TRAP_ID_DISCARD_ING_ROUTER_IPV4_DIP_LOCAL_NET = 0x16B, 90 90 MLXSW_TRAP_ID_DISCARD_ING_ROUTER_DIP_LINK_LOCAL = 0x16C, 91 + MLXSW_TRAP_ID_DISCARD_ROUTER_IRIF_EN = 0x178, 92 + MLXSW_TRAP_ID_DISCARD_ROUTER_ERIF_EN = 0x179, 91 93 MLXSW_TRAP_ID_DISCARD_ROUTER_LPM4 = 0x17B, 92 94 MLXSW_TRAP_ID_DISCARD_ROUTER_LPM6 = 0x17C, 93 95 MLXSW_TRAP_ID_DISCARD_IPV6_MC_DIP_RESERVED_SCOPE = 0x1B0,