diff options
author | Adrian Moreno <amorenoz@redhat.com> | 2023-08-11 16:12:48 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-08-14 09:01:06 +0200 |
commit | 9d802da40b7c820deb9c60fc394457ea565cafc8 (patch) | |
tree | ff60cda621b7504ac5ce43fde491c630584173c0 /net/openvswitch/drop.h | |
parent | Merge branch 'mptcp-remove-msk-subflow' (diff) | |
download | linux-9d802da40b7c820deb9c60fc394457ea565cafc8.tar.xz linux-9d802da40b7c820deb9c60fc394457ea565cafc8.zip |
net: openvswitch: add last-action drop reason
Create a new drop reason subsystem for openvswitch and add the first
drop reason to represent last-action drops.
Last-action drops happen when a flow has an empty action list or there
is no action that consumes the packet (output, userspace, recirc, etc).
It is the most common way in which OVS drops packets.
Implementation-wise, most of these skb-consuming actions already call
"consume_skb" internally and return directly from within the
do_execute_actions() loop so with minimal changes we can assume that
any skb that exits the loop normally is a packet drop.
Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch/drop.h')
-rw-r--r-- | net/openvswitch/drop.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/net/openvswitch/drop.h b/net/openvswitch/drop.h new file mode 100644 index 000000000000..a5b2b901249b --- /dev/null +++ b/net/openvswitch/drop.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * OpenvSwitch drop reason list. + */ + +#ifndef OPENVSWITCH_DROP_H +#define OPENVSWITCH_DROP_H +#include <linux/skbuff.h> +#include <net/dropreason.h> + +#define OVS_DROP_REASONS(R) \ + R(OVS_DROP_LAST_ACTION) \ + /* deliberate comment for trailing \ */ + +enum ovs_drop_reason { + __OVS_DROP_REASON = SKB_DROP_REASON_SUBSYS_OPENVSWITCH << + SKB_DROP_REASON_SUBSYS_SHIFT, +#define ENUM(x) x, + OVS_DROP_REASONS(ENUM) +#undef ENUM + + OVS_DROP_MAX, +}; + +static inline void +ovs_kfree_skb_reason(struct sk_buff *skb, enum ovs_drop_reason reason) +{ + kfree_skb_reason(skb, (u32)reason); +} + +#endif /* OPENVSWITCH_DROP_H */ |