[ovs-dev] [patch net-next RFC v2 2/6] skbuff: add "missed_flow" flag

Alexei Starovoitov alexei.starovoitov at gmail.com
Wed Mar 26 16:59:12 UTC 2014


On Wed, Mar 26, 2014 at 9:31 AM, Jiri Pirko <jiri at 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 <jiri at 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?

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 at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list