Commit 9eefeabe authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller

devlink: Add 'mirror' trap action

The action is used by control traps such as IGMP query. The packet is
flooded by the device, but also trapped to the CPU in order for the
software bridge to mark the receiving port as a multicast router port.
Such packets are marked with 'skb->offload_fwd_mark = 1' in order to
prevent the software bridge from flooding them again.
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 85176f19
...@@ -108,6 +108,8 @@ The ``devlink-trap`` mechanism supports the following packet trap actions: ...@@ -108,6 +108,8 @@ The ``devlink-trap`` mechanism supports the following packet trap actions:
* ``trap``: The sole copy of the packet is sent to the CPU. * ``trap``: The sole copy of the packet is sent to the CPU.
* ``drop``: The packet is dropped by the underlying device and a copy is not * ``drop``: The packet is dropped by the underlying device and a copy is not
sent to the CPU. sent to the CPU.
* ``mirror``: The packet is forwarded by the underlying device and a copy is
sent to the CPU.
Generic Packet Traps Generic Packet Traps
==================== ====================
......
...@@ -233,10 +233,13 @@ enum { ...@@ -233,10 +233,13 @@ enum {
* @DEVLINK_TRAP_ACTION_DROP: Packet is dropped by the device and a copy is not * @DEVLINK_TRAP_ACTION_DROP: Packet is dropped by the device and a copy is not
* sent to the CPU. * sent to the CPU.
* @DEVLINK_TRAP_ACTION_TRAP: The sole copy of the packet is sent to the CPU. * @DEVLINK_TRAP_ACTION_TRAP: The sole copy of the packet is sent to the CPU.
* @DEVLINK_TRAP_ACTION_MIRROR: Packet is forwarded by the device and a copy is
* sent to the CPU.
*/ */
enum devlink_trap_action { enum devlink_trap_action {
DEVLINK_TRAP_ACTION_DROP, DEVLINK_TRAP_ACTION_DROP,
DEVLINK_TRAP_ACTION_TRAP, DEVLINK_TRAP_ACTION_TRAP,
DEVLINK_TRAP_ACTION_MIRROR,
}; };
/** /**
......
...@@ -5869,7 +5869,8 @@ devlink_trap_action_get_from_info(struct genl_info *info, ...@@ -5869,7 +5869,8 @@ devlink_trap_action_get_from_info(struct genl_info *info,
val = nla_get_u8(info->attrs[DEVLINK_ATTR_TRAP_ACTION]); val = nla_get_u8(info->attrs[DEVLINK_ATTR_TRAP_ACTION]);
switch (val) { switch (val) {
case DEVLINK_TRAP_ACTION_DROP: /* fall-through */ case DEVLINK_TRAP_ACTION_DROP: /* fall-through */
case DEVLINK_TRAP_ACTION_TRAP: case DEVLINK_TRAP_ACTION_TRAP: /* fall-through */
case DEVLINK_TRAP_ACTION_MIRROR:
*p_trap_action = val; *p_trap_action = val;
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment