summaryrefslogtreecommitdiffstats
path: root/net/openvswitch/flow_table.h
diff options
context:
space:
mode:
authorAlex Wang <alexw@nicira.com>2014-06-30 20:30:29 -0700
committerPravin B Shelar <pshelar@nicira.com>2014-06-30 20:47:15 -0700
commit4a46b24e147dfa9b858026da02cad0bdd4e149d2 (patch)
tree0a36962df76d37c1f44bfb683991848b7e23ed07 /net/openvswitch/flow_table.h
parentad55200734c65a3ec5d0c39d6ea904008baea536 (diff)
downloadlinux-4a46b24e147dfa9b858026da02cad0bdd4e149d2.tar.bz2
openvswitch: Use exact lookup for flow_get and flow_del.
Due to the race condition in userspace, there is chance that two overlapping megaflows could be installed in datapath. And this causes userspace unable to delete the less inclusive megaflow flow even after it timeout, since the flow_del logic will stop at the first match of masked flow. This commit fixes the bug by making the kernel flow_del and flow_get logic check all masks in that case. Introduced by 03f0d916a (openvswitch: Mega flow implementation). Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Andy Zhou <azhou@nicira.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Diffstat (limited to 'net/openvswitch/flow_table.h')
-rw-r--r--net/openvswitch/flow_table.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/openvswitch/flow_table.h b/net/openvswitch/flow_table.h
index ca8a5820f615..5918bff7f3f6 100644
--- a/net/openvswitch/flow_table.h
+++ b/net/openvswitch/flow_table.h
@@ -76,7 +76,8 @@ struct sw_flow *ovs_flow_tbl_lookup_stats(struct flow_table *,
u32 *n_mask_hit);
struct sw_flow *ovs_flow_tbl_lookup(struct flow_table *,
const struct sw_flow_key *);
-
+struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl,
+ struct sw_flow_match *match);
bool ovs_flow_cmp_unmasked_key(const struct sw_flow *flow,
struct sw_flow_match *match);