datapath: Do not clear key in ovs_match_init()
authorJesse Gross <jesse@nicira.com>
Mon, 24 Jun 2013 19:21:29 +0000 (12:21 -0700)
committerJesse Gross <jesse@nicira.com>
Mon, 24 Jun 2013 19:30:35 +0000 (12:30 -0700)
When executing packets sent from userspace, the majority of the
flow information is extracted from the packet itself and a small
amount of metadata supplied by userspace is added. However, when
adding this metadata, the extracted flow information is currently
being cleared.

This manifests in a problem when executing actions as elements of key are
used when verifying some actions. For example a dec_ttl action verifies the
proto of the flow. An example of a flow that fails as a result of this
problem is:

        ovs-ofctl add-flow br0 "ip actions=dec_ttl,normal"

This is a regression added by "datapath: Mega flow implementation",
a1c564be1e2ffc31f8da09ab654c8ed987907fe5.

CC: Andy Zhou <azhou@nicira.com>
Reported-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Jesse Gross <jesse@nicira.com>
datapath/flow.c

index 499e3e2..39de931 100644 (file)
@@ -1601,7 +1601,8 @@ int ovs_flow_metadata_from_nlattrs(struct sw_flow *flow,
        if (err)
                return -EINVAL;
 
-       ovs_match_init(&match, &flow->key, NULL);
+       memset(&match, 0, sizeof(match));
+       match.key = &flow->key;
 
        err = metadata_from_nlattrs(&match, &attrs, a, false);
        if (err)