diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h index 34102270b0862af9fffd3f4a8b92b3179681931c..bb81e3b576e709272a40efd0948de44915f7bce3 100644 --- a/include/net/flow_dissector.h +++ b/include/net/flow_dissector.h @@ -125,6 +125,7 @@ enum flow_dissector_key_id { }; #define FLOW_DISSECTOR_F_PARSE_1ST_FRAG BIT(0) +#define FLOW_DISSECTOR_F_STOP_AT_L3 BIT(1) struct flow_dissector_key { enum flow_dissector_key_id key_id; diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 907de2f68b1fca7dc4b298f8f55f7b7570548d0c..94fd841f341f16fd0d4476ee52f28bfde29909dc 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -200,6 +200,9 @@ bool __skb_flow_dissect(const struct sk_buff *skb, } } + if (flags & FLOW_DISSECTOR_F_STOP_AT_L3) + goto out_good; + break; } case htons(ETH_P_IPV6): { @@ -238,6 +241,9 @@ bool __skb_flow_dissect(const struct sk_buff *skb, } } + if (flags & FLOW_DISSECTOR_F_STOP_AT_L3) + goto out_good; + break; } case htons(ETH_P_8021AD):