summaryrefslogtreecommitdiff
path: root/net/openvswitch/flow_table.c
diff options
context:
space:
mode:
authorKukjin Kim <kgene.kim@samsung.com>2014-07-29 06:09:42 +0900
committerKukjin Kim <kgene.kim@samsung.com>2014-07-29 06:09:42 +0900
commit6da287ad0266cca1fa8f88fb8b1c466e8164671f (patch)
treecfdf86c200bf9f1199c45acf51644fc185c705ec /net/openvswitch/flow_table.c
parentccaba4527156da1619a23bafcb944e8e029d0573 (diff)
parent6887d9e5682886b5d9fe81217ff2f1410724cdb9 (diff)
Merge branch 'v3.17-next/power-exynos' into v3.17-next/dt-samsung-2
Diffstat (limited to 'net/openvswitch/flow_table.c')
-rw-r--r--net/openvswitch/flow_table.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index 574c3abc9b30..cf2d853646f0 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -456,6 +456,22 @@ struct sw_flow *ovs_flow_tbl_lookup(struct flow_table *tbl,
return ovs_flow_tbl_lookup_stats(tbl, key, &n_mask_hit);
}
+struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl,
+ struct sw_flow_match *match)
+{
+ struct table_instance *ti = rcu_dereference_ovsl(tbl->ti);
+ struct sw_flow_mask *mask;
+ struct sw_flow *flow;
+
+ /* Always called under ovs-mutex. */
+ list_for_each_entry(mask, &tbl->mask_list, list) {
+ flow = masked_flow_lookup(ti, match->key, mask);
+ if (flow && ovs_flow_cmp_unmasked_key(flow, match)) /* Found */
+ return flow;
+ }
+ return NULL;
+}
+
int ovs_flow_tbl_num_masks(const struct flow_table *table)
{
struct sw_flow_mask *mask;