Commit 30a4e9a2 authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller

devlink: Add 'control' trap type

This type is used for traps that trap control packets such as ARP
request and IGMP query to the CPU.

Do not report such packets to the kernel's drop monitor as they were not
dropped by the device no encountered an exception during forwarding.
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 9eefeabe
...@@ -55,7 +55,7 @@ The following diagram provides a general overview of ``devlink-trap``:: ...@@ -55,7 +55,7 @@ The following diagram provides a general overview of ``devlink-trap``::
| | | |
+-------^--------+ +-------^--------+
| |
| | Non-control traps
| |
+----+----+ +----+----+
| | Kernel's Rx path | | Kernel's Rx path
...@@ -97,6 +97,12 @@ The ``devlink-trap`` mechanism supports the following packet trap types: ...@@ -97,6 +97,12 @@ The ``devlink-trap`` mechanism supports the following packet trap types:
processed by ``devlink`` and injected to the kernel's Rx path. Changing the processed by ``devlink`` and injected to the kernel's Rx path. Changing the
action of such traps is not allowed, as it can easily break the control action of such traps is not allowed, as it can easily break the control
plane. plane.
* ``control``: Trapped packets were trapped by the device because these are
control packets required for the correct functioning of the control plane.
For example, ARP request and IGMP query packets. Packets are injected to
the kernel's Rx path, but not reported to the kernel's drop monitor.
Changing the action of such traps is not allowed, as it can easily break
the control plane.
.. _Trap-Actions: .. _Trap-Actions:
......
...@@ -253,10 +253,16 @@ enum devlink_trap_action { ...@@ -253,10 +253,16 @@ enum devlink_trap_action {
* control plane for resolution. Trapped packets * control plane for resolution. Trapped packets
* are processed by devlink and injected to * are processed by devlink and injected to
* the kernel's Rx path. * the kernel's Rx path.
* @DEVLINK_TRAP_TYPE_CONTROL: Packet was trapped because it is required for
* the correct functioning of the control plane.
* For example, an ARP request packet. Trapped
* packets are injected to the kernel's Rx path,
* but not reported to drop monitor.
*/ */
enum devlink_trap_type { enum devlink_trap_type {
DEVLINK_TRAP_TYPE_DROP, DEVLINK_TRAP_TYPE_DROP,
DEVLINK_TRAP_TYPE_EXCEPTION, DEVLINK_TRAP_TYPE_EXCEPTION,
DEVLINK_TRAP_TYPE_CONTROL,
}; };
enum { enum {
......
...@@ -8847,6 +8847,13 @@ void devlink_trap_report(struct devlink *devlink, struct sk_buff *skb, ...@@ -8847,6 +8847,13 @@ void devlink_trap_report(struct devlink *devlink, struct sk_buff *skb,
devlink_trap_stats_update(trap_item->stats, skb->len); devlink_trap_stats_update(trap_item->stats, skb->len);
devlink_trap_stats_update(trap_item->group_item->stats, skb->len); devlink_trap_stats_update(trap_item->group_item->stats, skb->len);
/* Control packets were not dropped by the device or encountered an
* exception during forwarding and therefore should not be reported to
* the kernel's drop monitor.
*/
if (trap_item->trap->type == DEVLINK_TRAP_TYPE_CONTROL)
return;
devlink_trap_report_metadata_fill(&hw_metadata, trap_item, devlink_trap_report_metadata_fill(&hw_metadata, trap_item,
in_devlink_port, fa_cookie); in_devlink_port, fa_cookie);
net_dm_hw_report(skb, &hw_metadata); net_dm_hw_report(skb, &hw_metadata);
......
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