From: Andy Zhou Date: Fri, 19 Jul 2013 18:11:24 +0000 (-0700) Subject: datapath: Add mask check during flow lookup X-Git-Tag: sliver-openvswitch-2.0.90-1~35^2~18 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=a99c219c5d08a93f1158fcd1df0f4a429bc9062f;hp=bca0b3b4e2ec98193258e67720bc29c81be6cd6f;p=sliver-openvswitch.git datapath: Add mask check during flow lookup A mega flow matches when the masked key matches and the mask applied is the same as the mask used to create the mega flow. This patch adds the implementation of the second match condition mentioned above. Without this fix, mega flow lookup may result false match. Bug #18584 Signed-off-by: Andy Zhou Signed-off-by: Pravin B Shelar --- diff --git a/datapath/flow.c b/datapath/flow.c index 752c8d6b3..95fea7f22 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1048,7 +1048,8 @@ static struct sw_flow *ovs_masked_flow_lookup(struct flow_table *table, hash = ovs_flow_hash(&masked_key, key_start, key_len); head = find_bucket(table, hash); hlist_for_each_entry_rcu(flow, head, hash_node[table->node_ver]) { - if (__flow_cmp_key(flow, &masked_key, key_start, key_len)) + if (flow->mask == mask && + __flow_cmp_key(flow, &masked_key, key_start, key_len)) return flow; } return NULL;