[ovs-dev] [PATCH 2/2] datapath: Fix missing VLAN netlink attribute handling

Jesse Gross jesse at nicira.com
Mon Jul 29 17:32:33 UTC 2013


On Sat, Jul 27, 2013 at 10:27 PM, Andy Zhou <azhou at nicira.com> wrote:
> diff --git a/datapath/flow.c b/datapath/flow.c
> index ba775f4..5ec1b69 100644
> --- a/datapath/flow.c
> +++ b/datapath/flow.c
> @@ -224,6 +224,15 @@ static bool ovs_match_validate(const struct sw_flow_match *match,
>                 return false;
>         }
>
> +       if (match->mask &&
> +               !(match->mask->key.eth.tci & htons(VLAN_TAG_PRESENT))) {
> +                       OVS_NLERR("VLAN present bit can not be wildcarded.\n");
> +                       /* Simply log error until user the space program is
> +                        * fixed. Then we can switch to return false from
> +                        * here.
> +                        */
> +       }

Can we just fix this? We already force the bit on for the value in
userspace, it seems like we could do it for the mask at the same time.

I think we could also simplify it by just removing the !is_mask test
in the check in ovs_key_from_nlattrs().

> @@ -1317,6 +1326,7 @@ static int metadata_from_nlattrs(struct sw_flow_match *match,  u64 *attrs,
>                 *attrs &= ~(1ULL << OVS_KEY_ATTR_IN_PORT);
>         } else if (!is_mask) {
>                 SW_FLOW_KEY_PUT(match, phy.in_port, DP_MAX_PORTS, is_mask);
> +               SW_FLOW_KEY_PUT(match, phy.in_port, 0xffff, !is_mask);

Can you put this in a separate patch? All of these
attribute-not-present corner cases are getting really nasty and I
think that the vlan issues are actually somewhat separate.



More information about the dev mailing list