/* The unmasked key has to be the same for flow updates. */
error = -EINVAL;
if (!ovs_flow_cmp_unmasked_key(flow, &key, match.range.end)) {
- OVS_NLERR("Flow modification message rejected, unmasked key does not match.\n");
- goto err_unlock_ovs;
+ /* Look for any overlapping flow. */
+ flow = ovs_flow_lookup_exact(table, &match);
+ if (!flow) {
+ OVS_NLERR("Flow modification message rejected, unmasked key does not match.\n");
+ goto err_unlock_ovs;
+ }
}
/* Update actions. */
}
table = ovsl_dereference(dp->table);
- flow = ovs_flow_lookup_unmasked_key(table, &match);
+ flow = ovs_flow_lookup_exact(table, &match);
if (!flow) {
err = -ENOENT;
goto unlock;
goto unlock;
table = ovsl_dereference(dp->table);
- flow = ovs_flow_lookup_unmasked_key(table, &match);
+ flow = ovs_flow_lookup_exact(table, &match);
if (!flow) {
err = -ENOENT;
goto unlock;