[ovs-dev,v2,13/23] Move lib/match.h to include/openvswitch directory
diff mbox

Message ID b4cc783acdfae78be9fdeda528467ca0a1a9cd71.1457026916.git.ben@skyportsystems.com
State Not Applicable
Headers show

Commit Message

ben@skyportsystems.com March 3, 2016, 6:20 p.m. UTC
From: Ben Warren <ben@skyportsystems.com>

Signed-off-by: Ben Warren <ben@skyportsystems.com>
---
 include/openvswitch/automake.mk |   1 +
 include/openvswitch/match.h     | 210 +++++++++++++++++++++++++++++++++++++++
 lib/automake.mk                 |   1 -
 lib/classifier.h                |   2 +-
 lib/dpctl.c                     |   2 +-
 lib/dpif-netdev.c               |   2 +-
 lib/flow.c                      |   2 +-
 lib/learn.c                     |   2 +-
 lib/match.c                     |   3 +-
 lib/match.h                     | 212 ----------------------------------------
 lib/ofp-util.h                  |   2 +-
 lib/tun-metadata.c              |   2 +-
 ofproto/bond.c                  |   2 +-
 ofproto/connmgr.h               |   2 +-
 ovn/controller/ofctrl.c         |   2 +-
 ovn/controller/physical.c       |   2 +-
 ovn/lib/expr.c                  |   2 +-
 ovn/lib/expr.h                  |   2 +-
 tests/test-odp.c                |   2 +-
 tests/test-ovn.c                |   2 +-
 20 files changed, 228 insertions(+), 229 deletions(-)
 create mode 100644 include/openvswitch/match.h
 delete mode 100644 lib/match.h

Patch
diff mbox

diff --git a/include/openvswitch/automake.mk b/include/openvswitch/automake.mk
index 184dd89..0d79bb4 100644
--- a/include/openvswitch/automake.mk
+++ b/include/openvswitch/automake.mk
@@ -5,6 +5,7 @@  openvswitchinclude_HEADERS = \
 	include/openvswitch/flow.h \
 	include/openvswitch/geneve.h \
 	include/openvswitch/list.h \
+	include/openvswitch/match.h \
 	include/openvswitch/ofpbuf.h \
 	include/openvswitch/ofp-errors.h \
 	include/openvswitch/ofp-parse.h \
diff --git a/include/openvswitch/match.h b/include/openvswitch/match.h
new file mode 100644
index 0000000..22b4ed7
--- /dev/null
+++ b/include/openvswitch/match.h
@@ -0,0 +1,210 @@ 
+/*
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef OPENVSWITCH_MATCH_H
+#define OPENVSWITCH_MATCH_H 1
+
+#include "openvswitch/flow.h"
+
+struct ds;
+
+/* A flow classification match.
+ *
+ * Use one of the match_*() functions to initialize a "struct match".
+ *
+ * The match_*() functions below maintain the following important invariant.
+ * If a bit or a field is wildcarded in 'wc', then the corresponding bit or
+ * field in 'flow' is set to all-0-bits.  (The match_zero_wildcarded_fields()
+ * function can be used to restore this invariant after adding wildcards.) */
+struct match {
+    struct flow flow;
+    struct flow_wildcards wc;
+    struct tun_metadata_allocation tun_md;
+};
+
+/* Initializer for a "struct match" that matches every packet. */
+#define MATCH_CATCHALL_INITIALIZER { .flow = { .dl_type = 0 } }
+
+void match_init(struct match *,
+                const struct flow *, const struct flow_wildcards *);
+void match_wc_init(struct match *match, const struct flow *flow);
+void match_init_catchall(struct match *);
+
+void match_zero_wildcarded_fields(struct match *);
+
+void match_set_dp_hash(struct match *, uint32_t value);
+void match_set_dp_hash_masked(struct match *, uint32_t value, uint32_t mask);
+
+void match_set_recirc_id(struct match *, uint32_t value);
+
+void match_set_conj_id(struct match *, uint32_t value);
+
+void match_set_reg(struct match *, unsigned int reg_idx, uint32_t value);
+void match_set_reg_masked(struct match *, unsigned int reg_idx,
+                          uint32_t value, uint32_t mask);
+void match_set_xreg(struct match *, unsigned int xreg_idx, uint64_t value);
+void match_set_xreg_masked(struct match *, unsigned int xreg_idx,
+                           uint64_t value, uint64_t mask);
+void match_set_actset_output(struct match *, ofp_port_t actset_output);
+void match_set_metadata(struct match *, ovs_be64 metadata);
+void match_set_metadata_masked(struct match *,
+                               ovs_be64 metadata, ovs_be64 mask);
+void match_set_tun_id(struct match *, ovs_be64 tun_id);
+void match_set_tun_id_masked(struct match *, ovs_be64 tun_id, ovs_be64 mask);
+void match_set_tun_src(struct match *match, ovs_be32 src);
+void match_set_tun_src_masked(struct match *match, ovs_be32 src, ovs_be32 mask);
+void match_set_tun_dst(struct match *match, ovs_be32 dst);
+void match_set_tun_dst_masked(struct match *match, ovs_be32 dst, ovs_be32 mask);
+void match_set_tun_ipv6_src(struct match *, const struct in6_addr *);
+void match_set_tun_ipv6_src_masked(struct match *, const struct in6_addr *,
+                                   const struct in6_addr *);
+void match_set_tun_ipv6_dst(struct match *, const struct in6_addr *);
+void match_set_tun_ipv6_dst_masked(struct match *, const struct in6_addr *,
+                                   const struct in6_addr *);
+void match_set_tun_ttl(struct match *match, uint8_t ttl);
+void match_set_tun_ttl_masked(struct match *match, uint8_t ttl, uint8_t mask);
+void match_set_tun_tos(struct match *match, uint8_t tos);
+void match_set_tun_tos_masked(struct match *match, uint8_t tos, uint8_t mask);
+void match_set_tun_flags(struct match *match, uint16_t flags);
+void match_set_tun_flags_masked(struct match *match, uint16_t flags, uint16_t mask);
+void match_set_tun_gbp_id_masked(struct match *match, ovs_be16 gbp_id, ovs_be16 mask);
+void match_set_tun_gbp_id(struct match *match, ovs_be16 gbp_id);
+void match_set_tun_gbp_flags_masked(struct match *match, uint8_t flags, uint8_t mask);
+void match_set_tun_gbp_flags(struct match *match, uint8_t flags);
+void match_set_in_port(struct match *, ofp_port_t ofp_port);
+void match_set_pkt_mark(struct match *, uint32_t pkt_mark);
+void match_set_pkt_mark_masked(struct match *, uint32_t pkt_mark, uint32_t mask);
+void match_set_ct_state(struct match *, uint32_t ct_state);
+void match_set_ct_state_masked(struct match *, uint32_t ct_state, uint32_t mask);
+void match_set_ct_zone(struct match *, uint16_t ct_zone);
+void match_set_ct_mark(struct match *, uint32_t ct_mark);
+void match_set_ct_mark_masked(struct match *, uint32_t ct_mark, uint32_t mask);
+void match_set_ct_label(struct match *, ovs_u128 ct_label);
+void match_set_ct_label_masked(struct match *, ovs_u128 ct_label, ovs_u128 mask);
+void match_set_skb_priority(struct match *, uint32_t skb_priority);
+void match_set_dl_type(struct match *, ovs_be16);
+void match_set_dl_src(struct match *, const struct eth_addr );
+void match_set_dl_src_masked(struct match *, const struct eth_addr dl_src,
+                             const struct eth_addr mask);
+void match_set_dl_dst(struct match *, const struct eth_addr);
+void match_set_dl_dst_masked(struct match *, const struct eth_addr dl_dst,
+                             const struct eth_addr mask);
+void match_set_dl_tci(struct match *, ovs_be16 tci);
+void match_set_dl_tci_masked(struct match *, ovs_be16 tci, ovs_be16 mask);
+void match_set_any_vid(struct match *);
+void match_set_dl_vlan(struct match *, ovs_be16);
+void match_set_vlan_vid(struct match *, ovs_be16);
+void match_set_vlan_vid_masked(struct match *, ovs_be16 vid, ovs_be16 mask);
+void match_set_any_pcp(struct match *);
+void match_set_dl_vlan_pcp(struct match *, uint8_t);
+void match_set_any_mpls_lse(struct match *, int idx);
+void match_set_mpls_lse(struct match *, int idx, ovs_be32);
+void match_set_any_mpls_label(struct match *, int idx);
+void match_set_mpls_label(struct match *, int idx, ovs_be32);
+void match_set_any_mpls_tc(struct match *, int idx);
+void match_set_mpls_tc(struct match *, int idx, uint8_t);
+void match_set_any_mpls_bos(struct match *, int idx);
+void match_set_mpls_bos(struct match *, int idx, uint8_t);
+void match_set_tp_src(struct match *, ovs_be16);
+void match_set_mpls_lse(struct match *, int idx, ovs_be32 lse);
+void match_set_tp_src_masked(struct match *, ovs_be16 port, ovs_be16 mask);
+void match_set_tp_dst(struct match *, ovs_be16);
+void match_set_tp_dst_masked(struct match *, ovs_be16 port, ovs_be16 mask);
+void match_set_tcp_flags(struct match *, ovs_be16);
+void match_set_tcp_flags_masked(struct match *, ovs_be16 flags, ovs_be16 mask);
+void match_set_nw_proto(struct match *, uint8_t);
+void match_set_nw_src(struct match *, ovs_be32);
+void match_set_nw_src_masked(struct match *, ovs_be32 ip, ovs_be32 mask);
+void match_set_nw_dst(struct match *, ovs_be32);
+void match_set_nw_dst_masked(struct match *, ovs_be32 ip, ovs_be32 mask);
+void match_set_nw_dscp(struct match *, uint8_t);
+void match_set_nw_ecn(struct match *, uint8_t);
+void match_set_nw_ttl(struct match *, uint8_t);
+void match_set_nw_frag(struct match *, uint8_t nw_frag);
+void match_set_nw_frag_masked(struct match *, uint8_t nw_frag, uint8_t mask);
+void match_set_icmp_type(struct match *, uint8_t);
+void match_set_icmp_code(struct match *, uint8_t);
+void match_set_arp_sha(struct match *, const struct eth_addr);
+void match_set_arp_sha_masked(struct match *,
+                              const struct eth_addr arp_sha,
+                              const struct eth_addr mask);
+void match_set_arp_tha(struct match *, const struct eth_addr);
+void match_set_arp_tha_masked(struct match *,
+                              const struct eth_addr arp_tha,
+                              const struct eth_addr mask);
+void match_set_ipv6_src(struct match *, const struct in6_addr *);
+void match_set_ipv6_src_masked(struct match *, const struct in6_addr *,
+                               const struct in6_addr *);
+void match_set_ipv6_dst(struct match *, const struct in6_addr *);
+void match_set_ipv6_dst_masked(struct match *, const struct in6_addr *,
+                               const struct in6_addr *);
+void match_set_ipv6_label(struct match *, ovs_be32);
+void match_set_ipv6_label_masked(struct match *, ovs_be32, ovs_be32);
+void match_set_nd_target(struct match *, const struct in6_addr *);
+void match_set_nd_target_masked(struct match *, const struct in6_addr *,
+                                const struct in6_addr *);
+
+bool match_equal(const struct match *, const struct match *);
+uint32_t match_hash(const struct match *, uint32_t basis);
+
+void match_init_hidden_fields(struct match *);
+bool match_has_default_hidden_fields(const struct match *);
+
+void match_format(const struct match *, struct ds *, int priority);
+char *match_to_string(const struct match *, int priority);
+void match_print(const struct match *);
+
+/* Compressed match. */
+
+/* A sparse representation of a "struct match".
+ *
+ * 'flows' is used for allocating both 'flow' and 'mask' with one
+ * miniflow_alloc() call.
+ *
+ * There are two invariants:
+ *
+ *   - The same invariant as "struct match", that is, a 1-bit in the 'flow'
+ *     must correspond to a 1-bit in 'mask'.
+ *
+ *   - 'flow' and 'mask' have the same 'map'.  This implies that 'flow' and
+ *     'mask' have the same part of "struct flow" at the same offset into
+ *     'values', which makes minimatch_matches_flow() faster.
+ */
+struct minimatch {
+    union {
+        struct {
+            struct miniflow *flow;
+            struct minimask *mask;
+        };
+        struct miniflow *flows[2];
+    };
+};
+
+void minimatch_init(struct minimatch *, const struct match *);
+void minimatch_clone(struct minimatch *, const struct minimatch *);
+void minimatch_move(struct minimatch *dst, struct minimatch *src);
+void minimatch_destroy(struct minimatch *);
+
+void minimatch_expand(const struct minimatch *, struct match *);
+
+bool minimatch_equal(const struct minimatch *a, const struct minimatch *b);
+
+bool minimatch_matches_flow(const struct minimatch *, const struct flow *);
+
+void minimatch_format(const struct minimatch *, struct ds *, int priority);
+char *minimatch_to_string(const struct minimatch *, int priority);
+
+#endif /* match.h */
diff --git a/lib/automake.mk b/lib/automake.mk
index 057315f..058233b 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -113,7 +113,6 @@  lib_libopenvswitch_la_SOURCES = \
 	lib/mac-learning.c \
 	lib/mac-learning.h \
 	lib/match.c \
-	lib/match.h \
 	lib/mcast-snooping.c \
 	lib/mcast-snooping.h \
 	lib/memory.c \
diff --git a/lib/classifier.h b/lib/classifier.h
index 889dc1e..975a4f0 100644
--- a/lib/classifier.h
+++ b/lib/classifier.h
@@ -299,7 +299,7 @@ 
  * parallel to the rule's removal. */
 
 #include "cmap.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "meta-flow.h"
 #include "pvector.h"
 #include "rculist.h"
diff --git a/lib/dpctl.c b/lib/dpctl.c
index 5f70031..11b6ed0 100644
--- a/lib/dpctl.c
+++ b/lib/dpctl.c
@@ -34,7 +34,7 @@ 
 #include "dpif.h"
 #include "openvswitch/dynamic-string.h"
 #include "flow.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "netdev.h"
 #include "netdev-dpdk.h"
 #include "netlink.h"
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index e789b0f..bffd90a 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -45,7 +45,7 @@ 
 #include "hmapx.h"
 #include "latch.h"
 #include "openvswitch/list.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "netdev.h"
 #include "netdev-dpdk.h"
 #include "netdev-vport.h"
diff --git a/lib/flow.c b/lib/flow.c
index b6594a1..63449dc 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -31,7 +31,7 @@ 
 #include "openvswitch/dynamic-string.h"
 #include "hash.h"
 #include "jhash.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "dp-packet.h"
 #include "openflow/openflow.h"
 #include "packets.h"
diff --git a/lib/learn.c b/lib/learn.c
index e2e8309..4cca136 100644
--- a/lib/learn.c
+++ b/lib/learn.c
@@ -20,7 +20,7 @@ 
 
 #include "byte-order.h"
 #include "openvswitch/dynamic-string.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "meta-flow.h"
 #include "nx-match.h"
 #include "ofp-actions.h"
diff --git a/lib/match.c b/lib/match.c
index 66d5a3c..65f5d3a 100644
--- a/lib/match.c
+++ b/lib/match.c
@@ -15,8 +15,9 @@ 
  */
 
 #include <config.h>
-#include "match.h"
+#include "openvswitch/match.h"
 #include <stdlib.h>
+#include "flow.h"
 #include "byte-order.h"
 #include "openvswitch/dynamic-string.h"
 #include "ofp-util.h"
diff --git a/lib/match.h b/lib/match.h
deleted file mode 100644
index 650a203..0000000
--- a/lib/match.h
+++ /dev/null
@@ -1,212 +0,0 @@ 
-/*
- * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MATCH_H
-#define MATCH_H 1
-
-#include "flow.h"
-#include "packets.h"
-#include "tun-metadata.h"
-
-struct ds;
-
-/* A flow classification match.
- *
- * Use one of the match_*() functions to initialize a "struct match".
- *
- * The match_*() functions below maintain the following important invariant.
- * If a bit or a field is wildcarded in 'wc', then the corresponding bit or
- * field in 'flow' is set to all-0-bits.  (The match_zero_wildcarded_fields()
- * function can be used to restore this invariant after adding wildcards.) */
-struct match {
-    struct flow flow;
-    struct flow_wildcards wc;
-    struct tun_metadata_allocation tun_md;
-};
-
-/* Initializer for a "struct match" that matches every packet. */
-#define MATCH_CATCHALL_INITIALIZER { .flow = { .dl_type = 0 } }
-
-void match_init(struct match *,
-                const struct flow *, const struct flow_wildcards *);
-void match_wc_init(struct match *match, const struct flow *flow);
-void match_init_catchall(struct match *);
-
-void match_zero_wildcarded_fields(struct match *);
-
-void match_set_dp_hash(struct match *, uint32_t value);
-void match_set_dp_hash_masked(struct match *, uint32_t value, uint32_t mask);
-
-void match_set_recirc_id(struct match *, uint32_t value);
-
-void match_set_conj_id(struct match *, uint32_t value);
-
-void match_set_reg(struct match *, unsigned int reg_idx, uint32_t value);
-void match_set_reg_masked(struct match *, unsigned int reg_idx,
-                          uint32_t value, uint32_t mask);
-void match_set_xreg(struct match *, unsigned int xreg_idx, uint64_t value);
-void match_set_xreg_masked(struct match *, unsigned int xreg_idx,
-                           uint64_t value, uint64_t mask);
-void match_set_actset_output(struct match *, ofp_port_t actset_output);
-void match_set_metadata(struct match *, ovs_be64 metadata);
-void match_set_metadata_masked(struct match *,
-                               ovs_be64 metadata, ovs_be64 mask);
-void match_set_tun_id(struct match *, ovs_be64 tun_id);
-void match_set_tun_id_masked(struct match *, ovs_be64 tun_id, ovs_be64 mask);
-void match_set_tun_src(struct match *match, ovs_be32 src);
-void match_set_tun_src_masked(struct match *match, ovs_be32 src, ovs_be32 mask);
-void match_set_tun_dst(struct match *match, ovs_be32 dst);
-void match_set_tun_dst_masked(struct match *match, ovs_be32 dst, ovs_be32 mask);
-void match_set_tun_ipv6_src(struct match *, const struct in6_addr *);
-void match_set_tun_ipv6_src_masked(struct match *, const struct in6_addr *,
-                                   const struct in6_addr *);
-void match_set_tun_ipv6_dst(struct match *, const struct in6_addr *);
-void match_set_tun_ipv6_dst_masked(struct match *, const struct in6_addr *,
-                                   const struct in6_addr *);
-void match_set_tun_ttl(struct match *match, uint8_t ttl);
-void match_set_tun_ttl_masked(struct match *match, uint8_t ttl, uint8_t mask);
-void match_set_tun_tos(struct match *match, uint8_t tos);
-void match_set_tun_tos_masked(struct match *match, uint8_t tos, uint8_t mask);
-void match_set_tun_flags(struct match *match, uint16_t flags);
-void match_set_tun_flags_masked(struct match *match, uint16_t flags, uint16_t mask);
-void match_set_tun_gbp_id_masked(struct match *match, ovs_be16 gbp_id, ovs_be16 mask);
-void match_set_tun_gbp_id(struct match *match, ovs_be16 gbp_id);
-void match_set_tun_gbp_flags_masked(struct match *match, uint8_t flags, uint8_t mask);
-void match_set_tun_gbp_flags(struct match *match, uint8_t flags);
-void match_set_in_port(struct match *, ofp_port_t ofp_port);
-void match_set_pkt_mark(struct match *, uint32_t pkt_mark);
-void match_set_pkt_mark_masked(struct match *, uint32_t pkt_mark, uint32_t mask);
-void match_set_ct_state(struct match *, uint32_t ct_state);
-void match_set_ct_state_masked(struct match *, uint32_t ct_state, uint32_t mask);
-void match_set_ct_zone(struct match *, uint16_t ct_zone);
-void match_set_ct_mark(struct match *, uint32_t ct_mark);
-void match_set_ct_mark_masked(struct match *, uint32_t ct_mark, uint32_t mask);
-void match_set_ct_label(struct match *, ovs_u128 ct_label);
-void match_set_ct_label_masked(struct match *, ovs_u128 ct_label, ovs_u128 mask);
-void match_set_skb_priority(struct match *, uint32_t skb_priority);
-void match_set_dl_type(struct match *, ovs_be16);
-void match_set_dl_src(struct match *, const struct eth_addr );
-void match_set_dl_src_masked(struct match *, const struct eth_addr dl_src,
-                             const struct eth_addr mask);
-void match_set_dl_dst(struct match *, const struct eth_addr);
-void match_set_dl_dst_masked(struct match *, const struct eth_addr dl_dst,
-                             const struct eth_addr mask);
-void match_set_dl_tci(struct match *, ovs_be16 tci);
-void match_set_dl_tci_masked(struct match *, ovs_be16 tci, ovs_be16 mask);
-void match_set_any_vid(struct match *);
-void match_set_dl_vlan(struct match *, ovs_be16);
-void match_set_vlan_vid(struct match *, ovs_be16);
-void match_set_vlan_vid_masked(struct match *, ovs_be16 vid, ovs_be16 mask);
-void match_set_any_pcp(struct match *);
-void match_set_dl_vlan_pcp(struct match *, uint8_t);
-void match_set_any_mpls_lse(struct match *, int idx);
-void match_set_mpls_lse(struct match *, int idx, ovs_be32);
-void match_set_any_mpls_label(struct match *, int idx);
-void match_set_mpls_label(struct match *, int idx, ovs_be32);
-void match_set_any_mpls_tc(struct match *, int idx);
-void match_set_mpls_tc(struct match *, int idx, uint8_t);
-void match_set_any_mpls_bos(struct match *, int idx);
-void match_set_mpls_bos(struct match *, int idx, uint8_t);
-void match_set_tp_src(struct match *, ovs_be16);
-void match_set_mpls_lse(struct match *, int idx, ovs_be32 lse);
-void match_set_tp_src_masked(struct match *, ovs_be16 port, ovs_be16 mask);
-void match_set_tp_dst(struct match *, ovs_be16);
-void match_set_tp_dst_masked(struct match *, ovs_be16 port, ovs_be16 mask);
-void match_set_tcp_flags(struct match *, ovs_be16);
-void match_set_tcp_flags_masked(struct match *, ovs_be16 flags, ovs_be16 mask);
-void match_set_nw_proto(struct match *, uint8_t);
-void match_set_nw_src(struct match *, ovs_be32);
-void match_set_nw_src_masked(struct match *, ovs_be32 ip, ovs_be32 mask);
-void match_set_nw_dst(struct match *, ovs_be32);
-void match_set_nw_dst_masked(struct match *, ovs_be32 ip, ovs_be32 mask);
-void match_set_nw_dscp(struct match *, uint8_t);
-void match_set_nw_ecn(struct match *, uint8_t);
-void match_set_nw_ttl(struct match *, uint8_t);
-void match_set_nw_frag(struct match *, uint8_t nw_frag);
-void match_set_nw_frag_masked(struct match *, uint8_t nw_frag, uint8_t mask);
-void match_set_icmp_type(struct match *, uint8_t);
-void match_set_icmp_code(struct match *, uint8_t);
-void match_set_arp_sha(struct match *, const struct eth_addr);
-void match_set_arp_sha_masked(struct match *,
-                              const struct eth_addr arp_sha,
-                              const struct eth_addr mask);
-void match_set_arp_tha(struct match *, const struct eth_addr);
-void match_set_arp_tha_masked(struct match *,
-                              const struct eth_addr arp_tha,
-                              const struct eth_addr mask);
-void match_set_ipv6_src(struct match *, const struct in6_addr *);
-void match_set_ipv6_src_masked(struct match *, const struct in6_addr *,
-                               const struct in6_addr *);
-void match_set_ipv6_dst(struct match *, const struct in6_addr *);
-void match_set_ipv6_dst_masked(struct match *, const struct in6_addr *,
-                               const struct in6_addr *);
-void match_set_ipv6_label(struct match *, ovs_be32);
-void match_set_ipv6_label_masked(struct match *, ovs_be32, ovs_be32);
-void match_set_nd_target(struct match *, const struct in6_addr *);
-void match_set_nd_target_masked(struct match *, const struct in6_addr *,
-                                const struct in6_addr *);
-
-bool match_equal(const struct match *, const struct match *);
-uint32_t match_hash(const struct match *, uint32_t basis);
-
-void match_init_hidden_fields(struct match *);
-bool match_has_default_hidden_fields(const struct match *);
-
-void match_format(const struct match *, struct ds *, int priority);
-char *match_to_string(const struct match *, int priority);
-void match_print(const struct match *);
-
-/* Compressed match. */
-
-/* A sparse representation of a "struct match".
- *
- * 'flows' is used for allocating both 'flow' and 'mask' with one
- * miniflow_alloc() call.
- *
- * There are two invariants:
- *
- *   - The same invariant as "struct match", that is, a 1-bit in the 'flow'
- *     must correspond to a 1-bit in 'mask'.
- *
- *   - 'flow' and 'mask' have the same 'map'.  This implies that 'flow' and
- *     'mask' have the same part of "struct flow" at the same offset into
- *     'values', which makes minimatch_matches_flow() faster.
- */
-struct minimatch {
-    union {
-        struct {
-            struct miniflow *flow;
-            struct minimask *mask;
-        };
-        struct miniflow *flows[2];
-    };
-};
-
-void minimatch_init(struct minimatch *, const struct match *);
-void minimatch_clone(struct minimatch *, const struct minimatch *);
-void minimatch_move(struct minimatch *dst, struct minimatch *src);
-void minimatch_destroy(struct minimatch *);
-
-void minimatch_expand(const struct minimatch *, struct match *);
-
-bool minimatch_equal(const struct minimatch *a, const struct minimatch *b);
-
-bool minimatch_matches_flow(const struct minimatch *, const struct flow *);
-
-void minimatch_format(const struct minimatch *, struct ds *, int priority);
-char *minimatch_to_string(const struct minimatch *, int priority);
-
-#endif /* match.h */
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index 379257c..0e5b440 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -24,7 +24,7 @@ 
 #include "compiler.h"
 #include "flow.h"
 #include "openvswitch/list.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "meta-flow.h"
 #include "netdev.h"
 #include "openflow/netronome-ext.h"
diff --git a/lib/tun-metadata.c b/lib/tun-metadata.c
index ececee5..504071c 100644
--- a/lib/tun-metadata.c
+++ b/lib/tun-metadata.c
@@ -21,7 +21,7 @@ 
 #include "bitmap.h"
 #include "compiler.h"
 #include "hmap.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "nx-match.h"
 #include "odp-netlink.h"
 #include "ofp-util.h"
diff --git a/ofproto/bond.c b/ofproto/bond.c
index 8a8ee40..5017732 100644
--- a/ofproto/bond.c
+++ b/ofproto/bond.c
@@ -43,7 +43,7 @@ 
 #include "dp-packet.h"
 #include "poll-loop.h"
 #include "seq.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "shash.h"
 #include "timeval.h"
 #include "unixctl.h"
diff --git a/ofproto/connmgr.h b/ofproto/connmgr.h
index 637ad17..5b42499 100644
--- a/ofproto/connmgr.h
+++ b/ofproto/connmgr.h
@@ -20,7 +20,7 @@ 
 #include "classifier.h"
 #include "hmap.h"
 #include "openvswitch/list.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "ofp-util.h"
 #include "ofproto.h"
 #include "ofproto-provider.h"
diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
index dd2beaf..7f662d8 100644
--- a/ovn/controller/ofctrl.c
+++ b/ovn/controller/ofctrl.c
@@ -18,7 +18,7 @@ 
 #include "dirs.h"
 #include "openvswitch/dynamic-string.h"
 #include "hmap.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "ofp-actions.h"
 #include "ofp-msgs.h"
 #include "ofp-print.h"
diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
index b699664..4eb253f 100644
--- a/ovn/controller/physical.c
+++ b/ovn/controller/physical.c
@@ -16,7 +16,7 @@ 
 #include <config.h>
 #include "physical.h"
 #include "lflow.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "ofctrl.h"
 #include "ofp-actions.h"
 #include "openvswitch/ofpbuf.h"
diff --git a/ovn/lib/expr.c b/ovn/lib/expr.c
index 8a2e920..2e959f5 100644
--- a/ovn/lib/expr.c
+++ b/ovn/lib/expr.c
@@ -20,7 +20,7 @@ 
 #include "json.h"
 #include "lex.h"
 #include "logical-fields.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "ofp-actions.h"
 #include "shash.h"
 #include "simap.h"
diff --git a/ovn/lib/expr.h b/ovn/lib/expr.h
index 6f6f1db..77ca070 100644
--- a/ovn/lib/expr.h
+++ b/ovn/lib/expr.h
@@ -56,7 +56,7 @@ 
 #include "lex.h"
 #include "hmap.h"
 #include "openvswitch/list.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "meta-flow.h"
 
 struct ds;
diff --git a/tests/test-odp.c b/tests/test-odp.c
index b1e20c3..602a6b6 100644
--- a/tests/test-odp.c
+++ b/tests/test-odp.c
@@ -20,7 +20,7 @@ 
 #include <stdio.h>
 #include "openvswitch/dynamic-string.h"
 #include "flow.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "openvswitch/ofpbuf.h"
 #include "ovstest.h"
 #include "util.h"
diff --git a/tests/test-ovn.c b/tests/test-ovn.c
index a05f8a1..ba63d0c 100644
--- a/tests/test-ovn.c
+++ b/tests/test-ovn.c
@@ -21,7 +21,7 @@ 
 #include <sys/wait.h>
 #include "openvswitch/dynamic-string.h"
 #include "fatal-signal.h"
-#include "match.h"
+#include "openvswitch/match.h"
 #include "ofp-actions.h"
 #include "openvswitch/ofpbuf.h"
 #include "ovn/lib/actions.h"