[patch net-next RFC v2 2/6] skbuff: add "missed_flow" flag
From: Jiri Pirko <jiri@resnulli.us>
Date: 2014-03-26 16:31:25
Subsystem:
bpf [core], bpf [general] (safe dynamic programs and tools), bpf [networking] (tcx & tc bpf, sock_addr), networking [general], the rest · Maintainers:
Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi, Martin KaFai Lau, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
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 <jiri@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