bool is_event;
 };
 
-#define MLXSW_RXL(_func, _trap_id, _action, _is_ctrl, _unreg_action)   \
+#define MLXSW_RXL(_func, _trap_id, _action, _is_ctrl, _trap_group,     \
+                 _unreg_action)                                        \
        {                                                               \
                .trap_id = MLXSW_TRAP_ID_##_trap_id,                    \
                .u.rx_listener =                                        \
                },                                                      \
                .action = MLXSW_REG_HPKT_ACTION_##_action,              \
                .unreg_action = MLXSW_REG_HPKT_ACTION_##_unreg_action,  \
-               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_RX,             \
+               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_##_trap_group,  \
                .is_ctrl = _is_ctrl,                                    \
                .is_event = false,                                      \
        }
 
-#define MLXSW_EVENTL(_func, _trap_id)                          \
-       {                                                       \
-               .trap_id = MLXSW_TRAP_ID_##_trap_id,            \
-               .u.event_listener =                             \
-               {                                               \
-                       .func = _func,                          \
-                       .trap_id = MLXSW_TRAP_ID_##_trap_id,    \
-               },                                              \
-               .action = MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,    \
-               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_EMAD,   \
-               .is_ctrl = false,                               \
-               .is_event = true,                               \
+#define MLXSW_EVENTL(_func, _trap_id, _trap_group)                     \
+       {                                                               \
+               .trap_id = MLXSW_TRAP_ID_##_trap_id,                    \
+               .u.event_listener =                                     \
+               {                                                       \
+                       .func = _func,                                  \
+                       .trap_id = MLXSW_TRAP_ID_##_trap_id,            \
+               },                                                      \
+               .action = MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,            \
+               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_##_trap_group,  \
+               .is_ctrl = false,                                       \
+               .is_event = true,                                       \
        }
 
 int mlxsw_core_rx_listener_register(struct mlxsw_core *mlxsw_core,
 
 }
 
 #define MLXSW_SP_RXL_NO_MARK(_trap_id, _action, _is_ctrl)              \
-       MLXSW_RXL(mlxsw_sp_rx_listener_no_mark_func, _trap_id, _action, \
-                 _is_ctrl, DISCARD)
+       MLXSW_RXL(mlxsw_sp_rx_listener_no_mark_func, _trap_id, _action, \
+                 _is_ctrl, RX, DISCARD)
 
 #define MLXSW_SP_RXL_MARK(_trap_id, _action, _is_ctrl)                 \
        MLXSW_RXL(mlxsw_sp_rx_listener_mark_func, _trap_id, _action,    \
-                 _is_ctrl, DISCARD)
+                 _is_ctrl, RX, DISCARD)
 
 static const struct mlxsw_listener mlxsw_sp_listener[] = {
        /* Events */
-       MLXSW_EVENTL(mlxsw_sp_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sp_pude_event_func, PUDE, EMAD),
        /* L2 traps */
        MLXSW_SP_RXL_NO_MARK(STP, TRAP_TO_CPU, true),
        MLXSW_SP_RXL_NO_MARK(LACP, TRAP_TO_CPU, true),
 
 }
 
 static const struct mlxsw_listener mlxsw_sib_listener[] = {
-       MLXSW_EVENTL(mlxsw_sib_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sib_pude_event_func, PUDE, EMAD),
 };
 
 static int mlxsw_sib_taps_init(struct mlxsw_sib *mlxsw_sib)
 
 
 #define MLXSW_SX_RXL(_trap_id)                                         \
        MLXSW_RXL(mlxsw_sx_rx_listener_func, _trap_id, TRAP_TO_CPU,     \
-                 false, FORWARD)
+                 false, RX, FORWARD)
 
 static const struct mlxsw_listener mlxsw_sx_listener[] = {
-       MLXSW_EVENTL(mlxsw_sx_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sx_pude_event_func, PUDE, EMAD),
        MLXSW_SX_RXL(FDB_MC),
        MLXSW_SX_RXL(STP),
        MLXSW_SX_RXL(LACP),