From: Ben Warren <b...@skyportsystems.com> Signed-off-by: Ben Warren <b...@skyportsystems.com> --- include/openvswitch/automake.mk | 1 + include/openvswitch/match.h | 214 ++++++++++++++++++++++++++++++++++++++++ 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 | 214 ---------------------------------------- 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, 232 insertions(+), 231 deletions(-) create mode 100644 include/openvswitch/match.h delete mode 100644 lib/match.h
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..0a6ac29 --- /dev/null +++ b/include/openvswitch/match.h @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 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_any_mpls_ttl(struct match *, int idx); +void match_set_mpls_ttl(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 7b829d0..b9e26e4 100644 --- a/lib/automake.mk +++ b/lib/automake.mk @@ -115,7 +115,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 119dc2d..a3c9b08 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 b9ce331..560a90f 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -32,7 +32,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 effb827..1a9dc2d 100644 --- a/lib/learn.c +++ b/lib/learn.c @@ -21,7 +21,7 @@ #include "byte-order.h" #include "colors.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 fd571d9..42955b8 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 "colors.h" #include "openvswitch/dynamic-string.h" diff --git a/lib/match.h b/lib/match.h deleted file mode 100644 index 0a6ac29..0000000 --- a/lib/match.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 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_any_mpls_ttl(struct match *, int idx); -void match_set_mpls_ttl(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 1e6ef46..7768870 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 836f00f..83d6f4c 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 55ca98d..b0f0932 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 aae5df6..c4a600f 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 fa7ccbe..3725771 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 9290692..52e0ac3 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" -- 2.5.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev