Wed, Mar 26, 2014 at 05:59:12PM CET, alexei.starovoi...@gmail.com wrote: >On Wed, Mar 26, 2014 at 9:31 AM, Jiri Pirko <j...@resnulli.us> wrote: >> 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, > >Interesting use case for bpf... >looks like it's not connected to userspace. >Are you trying to extend ovs with switchdev api and bpf at once? >How do you plan to use this bpf extension?
The motive fot this is to provides a user (userspace app) possibility to get all skbs which were "flow-missed". He can adjust the filter so that only these can get through. > >Thanks >Alexei > >> }; >> >> #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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev