mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 22:35:15 +00:00
ofproto-dpif: Always un-wildcard fields that are being set.
The ODP library has an optimization to not set a header if the field was not changed, regardless of whether an action to set the field was present. That library is also responsible for un-wildcarding fields that are bieng modified. This leads to a problem where a packet matches a flow that updates a field, but that particular packet's field already has that value. As such, an overly loose megaflow will be generated that doesn't match on that field and the actions won't update it. A second packet that should have the field set will match that flow and will not be modified. This commit changes the behavior to always un-wildcard fields that are being modified. Since the ODP library updates the entire header if a field in it is modified, and all those fields will be un-wildcarded, the generated flows may be different. However, they should be correct. Bug #18946. Reported-by: Jesse Gross <jesse@nicira.com> Signed-off-by: Justin Pettit <jpettit@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -114,7 +114,7 @@ multipath_execute(const struct ofpact_multipath *mp, struct flow *flow,
|
||||
mp->max_link + 1, mp->arg);
|
||||
|
||||
flow_mask_hash_fields(flow, wc, mp->fields);
|
||||
nxm_reg_load(&mp->dst, link, flow);
|
||||
nxm_reg_load(&mp->dst, link, flow, wc);
|
||||
}
|
||||
|
||||
static uint16_t
|
||||
|
Reference in New Issue
Block a user