[ovs-dev] [PATCH] datapath: More strict vlan encap netlink check

Jesse Gross jesse at nicira.com
Thu Aug 22 18:37:32 UTC 2013


On Thu, Aug 15, 2013 at 2:16 PM, Andy Zhou <azhou at nicira.com> wrote:
> diff --git a/datapath/flow.c b/datapath/flow.c
> index 4075350..a36a1ea 100644
> --- a/datapath/flow.c
> +++ b/datapath/flow.c
> @@ -1585,26 +1585,37 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match,
>         if (err)
>                 return err;
>
> -       if (key_attrs & 1ULL << OVS_KEY_ATTR_ENCAP) {
> -               encap = a[OVS_KEY_ATTR_ENCAP];
> -               key_attrs &= ~(1ULL << OVS_KEY_ATTR_ENCAP);
> -               if (nla_len(encap)) {
> -                       __be16 eth_type = 0; /* ETH_P_8021Q */
> +       if ((key_attrs & (1ULL << OVS_KEY_ATTR_ETHERNET)) &&
> +           (key_attrs & (1ULL << OVS_KEY_ATTR_ETHERTYPE)) &&
> +           (nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]) == htons(ETH_P_8021Q))) {
> +               __be16 tci;
>
> -                       if (a[OVS_KEY_ATTR_ETHERTYPE])
> -                               eth_type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
> +               if (!((key_attrs & (1ULL << OVS_KEY_ATTR_VLAN)) &&
> +                     (key_attrs & (1ULL << OVS_KEY_ATTR_ETHERTYPE)) &&
> +                     (key_attrs & (1ULL << OVS_KEY_ATTR_ENCAP)))) {

Thanks, I think this is a big improvement. One question: it seems like
we check EtherType twice in the above two blocks. Is this just
redundant or is there something the second check is supposed to catch?



More information about the dev mailing list