This flag sets incoming switch device in order to let know that the flow which the skb is part of is missed. Listener may react to it appropriately,
Signed-off-by: Jiri Pirko <j...@resnulli.us> --- include/linux/filter.h | 1 + include/linux/skbuff.h | 13 +++++++++++++ net/core/filter.c | 3 +++ 3 files changed, 17 insertions(+) diff --git a/include/linux/filter.h b/include/linux/filter.h index e568c8e..38c7c04 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -154,6 +154,7 @@ enum { BPF_S_ANC_VLAN_TAG, BPF_S_ANC_VLAN_TAG_PRESENT, BPF_S_ANC_PAY_OFFSET, + BPF_S_ANC_MISSED_FLOW, }; #endif /* __LINUX_FILTER_H__ */ diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 03db95a..0100c2f 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -567,6 +567,7 @@ struct sk_buff { * headers if needed */ __u8 encapsulation:1; + __u8 missed_flow:1; /* 6/8 bit hole (depending on ndisc_nodetype presence) */ kmemcheck_bitfield_end(flags2); @@ -2993,5 +2994,17 @@ static inline unsigned int skb_gso_network_seglen(const struct sk_buff *skb) skb_network_header(skb); return hdr_len + skb_gso_transport_seglen(skb); } + +/** + * skb_mark_missed_flow - marks skb as a part of missed flow + * @skb: buffer + * + * Marks skb as a part of missed flow. + */ +static inline void skb_mark_missed_flow(struct sk_buff *skb) +{ + skb->missed_flow = 1; +} + #endif /* __KERNEL__ */ #endif /* _LINUX_SKBUFF_H */ diff --git a/net/core/filter.c b/net/core/filter.c index ad30d62..048f11a 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -350,6 +350,9 @@ load_b: case BPF_S_ANC_PAY_OFFSET: A = __skb_get_poff(skb); continue; + case BPF_S_ANC_MISSED_FLOW: + A = !!skb->missed_flow; + continue; case BPF_S_ANC_NLATTR: { struct nlattr *nla; -- 1.8.5.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev