diff options
author | David S. Miller <davem@davemloft.net> | 2020-08-03 18:06:47 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-08-03 18:06:47 -0700 |
commit | f8deaea06fb5002a9ebb7a366ef4066e2d7e0944 (patch) | |
tree | e9cf6d6e724faf4042b24e4587d3fe637a174d42 /net | |
parent | 80fbbb1672e7815a15d7329638537961d65c453d (diff) | |
parent | 8fb6ac457d5be8516eeed2b92342f7f95c448275 (diff) | |
download | linux-f8deaea06fb5002a9ebb7a366ef4066e2d7e0944.tar.bz2 |
Merge branch 'mlxsw-Add-support-for-buffer-drop-traps'
Ido Schimmel says:
====================
mlxsw: Add support for buffer drop traps
Petr says:
A recent patch set added the ability to mirror buffer related drops
(e.g., early drops) through a netdev. This patch set adds the ability to
trap such packets to the local CPU for analysis.
The trapping towards the CPU is configured by using tc-trap action
instead of tc-mirred as was done when the packets were mirrored through
a netdev. A future patch set will also add the ability to sample the
dropped packets using tc-sample action.
The buffer related drop traps are added to devlink, which means that the
dropped packets can be reported to user space via the kernel's
drop_monitor module.
Patch set overview:
Patch #1 adds the early_drop trap to devlink
Patch #2 adds extack to a few devlink operations to facilitate better
error reporting to user space. This is necessary - among other things -
because the action of buffer drop traps cannot be changed in mlxsw
Patch #3 performs a small refactoring in mlxsw, patch #4 fixes a bug that
this patchset would trigger.
Patches #5-#6 add the infrastructure required to support different traps
/ trap groups in mlxsw per-ASIC. This is required because buffer drop
traps are not supported by Spectrum-1
Patch #7 extends mlxsw to register the early_drop trap
Patch #8 adds the offload logic for the "trap" action at a qevent block.
Patch #9 adds a mlxsw-specific selftest.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/devlink.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c index 5fdebb7289e9..e674f0f46dc2 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -6423,7 +6423,7 @@ static int __devlink_trap_action_set(struct devlink *devlink, } err = devlink->ops->trap_action_set(devlink, trap_item->trap, - trap_action); + trap_action, extack); if (err) return err; @@ -6713,7 +6713,8 @@ static int devlink_trap_group_set(struct devlink *devlink, } policer = policer_item ? policer_item->policer : NULL; - err = devlink->ops->trap_group_set(devlink, group_item->group, policer); + err = devlink->ops->trap_group_set(devlink, group_item->group, policer, + extack); if (err) return err; @@ -8801,6 +8802,7 @@ static const struct devlink_trap devlink_trap_generic[] = { DEVLINK_TRAP(PTP_GENERAL, CONTROL), DEVLINK_TRAP(FLOW_ACTION_SAMPLE, CONTROL), DEVLINK_TRAP(FLOW_ACTION_TRAP, CONTROL), + DEVLINK_TRAP(EARLY_DROP, DROP), }; #define DEVLINK_TRAP_GROUP(_id) \ @@ -9050,7 +9052,8 @@ static void devlink_trap_disable(struct devlink *devlink, if (WARN_ON_ONCE(!trap_item)) return; - devlink->ops->trap_action_set(devlink, trap, DEVLINK_TRAP_ACTION_DROP); + devlink->ops->trap_action_set(devlink, trap, DEVLINK_TRAP_ACTION_DROP, + NULL); trap_item->action = DEVLINK_TRAP_ACTION_DROP; } |