On Thu, Aug 15, 2013 at 2:16 PM, Andy Zhou <az...@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?
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to