[ovs-dev] [PATCH V3 05/40] compat/gre: add collect_md mode

William Tu u9012063 at gmail.com
Mon May 21 21:21:00 UTC 2018


On Fri, May 18, 2018 at 5:49 PM, Greg Rose <gvrose8192 at gmail.com> wrote:
> From: William Tu <u9012063 at gmail.com>
>
>     commit 1a66a836da630cd70f3639208da549b549ce576b
>     Author: William Tu <u9012063 at gmail.com>
>     Date:   Fri Aug 25 09:21:28 2017 -0700
>
>     gre: add collect_md mode to ERSPAN tunnel
>
>     Similar to gre, vxlan, geneve, ipip tunnels, allow ERSPAN tunnels to
>     operate in 'collect metadata' mode.  bpf_skb_[gs]et_tunnel_key() helpers
>     can make use of it right away.  OVS can use it as well in the future.
>
>     Signed-off-by: William Tu <u9012063 at gmail.com>
>     Signed-off-by: David S. Miller <davem at davemloft.net>
>
> With some adjustments for compatibility layer.
>
> Cc: William Tu <u9012063 at gmail.com>
> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>
> ---

Looks good to me
Acked-by: William Tu <u9012063 at gmail.com>

>  datapath/linux/compat/include/net/ip_tunnels.h | 68 +++++++++++++++-----------
>  datapath/linux/compat/ip_gre.c                 | 23 ++++++---
>  2 files changed, 54 insertions(+), 37 deletions(-)
>
> diff --git a/datapath/linux/compat/include/net/ip_tunnels.h b/datapath/linux/compat/include/net/ip_tunnels.h
> index 2685de7..ea3fb8d 100644
> --- a/datapath/linux/compat/include/net/ip_tunnels.h
> +++ b/datapath/linux/compat/include/net/ip_tunnels.h
> @@ -74,14 +74,25 @@ void rpl_ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
>

<snip>

> diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c
> index e30e428..a5ec59c 100644
> --- a/datapath/linux/compat/ip_gre.c
> +++ b/datapath/linux/compat/ip_gre.c
> @@ -93,6 +93,9 @@ static __be32 tunnel_id_to_key(__be64 x)
>  #endif
>  }
>
> +static void erspan_build_header(struct sk_buff *skb,
> +                               __be32 id, u32 index, bool truncate);
> +
>  /* Called with rcu_read_lock and BH disabled. */
>  static int gre_err(struct sk_buff *skb, u32 info,
>                    const struct tnl_ptk_info *tpi)
> @@ -187,7 +190,7 @@ static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi,
>                       int gre_hdr_len)
>  {
>         struct net *net = dev_net(skb->dev);
> -       struct metadata_dst *tun_dst = NULL;
> +       struct metadata_dst tun_dst;
>         struct ip_tunnel_net *itn;
>         struct ip_tunnel *tunnel;
>         struct erspanhdr *ershdr;
> @@ -823,18 +826,17 @@ static int erspan_validate(struct nlattr *tb[], struct nlattr *data[])
>                 return ret;
>
>         /* ERSPAN should only have GRE sequence and key flag */
> -       flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
> -       flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
> -       if (flags != (GRE_SEQ | GRE_KEY))
> +       if (data[IFLA_GRE_OFLAGS])
> +               flags |= nla_get_be16(data[IFLA_GRE_OFLAGS]);
> +       if (data[IFLA_GRE_IFLAGS])
> +               flags |= nla_get_be16(data[IFLA_GRE_IFLAGS]);
> +       if (!data[IFLA_GRE_COLLECT_METADATA] &&
> +           flags != (GRE_SEQ | GRE_KEY))
>                 return -EINVAL;
>
>         /* ERSPAN Session ID only has 10-bit. Since we reuse
>          * 32-bit key field as ID, check it's range.
>          */
> -       if (data[IFLA_GRE_IKEY] &&
> -           (ntohl(nla_get_be32(data[IFLA_GRE_IKEY])) & ~ID_MASK))
> -               return -EINVAL;
> -

nit: I think this gets removed and later patch adds back.


>         if (data[IFLA_GRE_OKEY] &&
>             (ntohl(nla_get_be32(data[IFLA_GRE_OKEY])) & ~ID_MASK))
>                 return -EINVAL;
> @@ -983,6 +985,11 @@ static netdev_tx_t erspan_xmit(struct sk_buff *skb,
>         struct ip_tunnel *tunnel = netdev_priv(dev);
>         bool truncate = false;
>
> +       if (tunnel->collect_md) {
> +               erspan_fb_xmit(skb, dev, skb->protocol);
> +               return NETDEV_TX_OK;
> +       }
> +
>         if (gre_handle_offloads(skb, false))
>                 goto free_skb;
>
> --
> 1.8.3.1
>


More information about the dev mailing list