From patchwork Thu Mar 3 18:20:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ben@skyportsystems.com X-Patchwork-Id: 591552 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id E272A140C65 for ; Fri, 4 Mar 2016 05:23:34 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=skyportsystems.com header.i=@skyportsystems.com header.b=dRb749+i; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id CFAB322C3EE; Thu, 3 Mar 2016 10:21:31 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e4.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id 26E0522C3CF for ; Thu, 3 Mar 2016 10:21:30 -0800 (PST) Received: from bar5.cudamail.com (unknown [192.168.21.12]) by mx1e4.cudamail.com (Postfix) with ESMTPS id AA0FA1E0418 for ; Thu, 3 Mar 2016 11:21:29 -0700 (MST) X-ASG-Debug-ID: 1457029288-09eadd2b1047a5c0001-byXFYA Received: from mx3-pf1.cudamail.com ([192.168.14.2]) by bar5.cudamail.com with ESMTP id T9e7AcLCX199PFR0 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 03 Mar 2016 11:21:28 -0700 (MST) X-Barracuda-Envelope-From: ben@skyportsystems.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.2 Received: from unknown (HELO mail-pf0-f170.google.com) (209.85.192.170) by mx3-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 3 Mar 2016 18:21:27 -0000 Received-SPF: pass (mx3-pf1.cudamail.com: SPF record at _netblocks.google.com designates 209.85.192.170 as permitted sender) X-Barracuda-RBL-Trusted-Forwarder: 209.85.192.170 Received: by mail-pf0-f170.google.com with SMTP id 124so19263608pfg.0 for ; Thu, 03 Mar 2016 10:21:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skyportsystems.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=1MAqdYijJpWqyZXl0zmSlDib9phRYx8Flllolvecz7Q=; b=dRb749+iAE96u1VIu2w+RKyUV/+WPeNJhVMcA4mK0RstJCwHFN6U2ZwJXYnSRpr/xS DbRa9p+Fw0kEEmLy5/C9+NcvyvxcHxbbE3xWcuT0VDywkC4Nzy2yH6zTe6w2xipuawPd Ox+gDhd2d+V4a3UWgbY69qaIvzGDOVQdZJNsk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=1MAqdYijJpWqyZXl0zmSlDib9phRYx8Flllolvecz7Q=; b=YmnKcTD2ABy9bJwoCADgiPtJwT9KYlqUyOEsly+kKdDtiMM4iJO2IkQCoRM8V1gpLH Qz86AIOyHUtV5dTgNuMZOlg93mfTmRMUS8Ml0p4DRKHiNB/xmCVwandiTnQRkANAe/3O UJjHHP4V6vqKZiURrOKoqplsMjWvOPyIBXeAxR4ektrk4v0KPUTOk4YofiYRT91YTKkP U4dpoqCv4MiaHTQB+aRIo7UTd4G7o4JPDjlMHetHSKbtu7HNYnopnvfjEhBbr2CgJHwf vFAA3hVgT942zjCLUuTm1BbIbyf2Zh+Xrww6u/N2AxBvweEdmw8WCQDpjoE7t7hKq7Pr ckxw== X-Gm-Message-State: AD7BkJLiwMXE9BPImBQEedPBkagq8tOAw2/VDenWai2c0hVCav39zjb+qENnQYYQvbqzODSy X-Received: by 10.98.31.21 with SMTP id f21mr5564749pff.134.1457029287083; Thu, 03 Mar 2016 10:21:27 -0800 (PST) Received: from Arrow.corp.skyportsystems.com (67-207-112-138.static.wiline.com. [67.207.112.138]) by smtp.gmail.com with ESMTPSA id g25sm62149841pfg.35.2016.03.03.10.21.26 (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 03 Mar 2016 10:21:26 -0800 (PST) X-CudaMail-Envelope-Sender: ben@skyportsystems.com X-Barracuda-Apparent-Source-IP: 67.207.112.138 From: ben@skyportsystems.com To: dev@openvswitch.org X-CudaMail-MID: CM-V1-302037781 X-CudaMail-DTE: 030316 X-CudaMail-Originating-IP: 209.85.192.170 Date: Thu, 3 Mar 2016 10:20:53 -0800 X-ASG-Orig-Subj: [##CM-V1-302037781##][PATCH v2 13/23] Move lib/match.h to include/openvswitch directory Message-Id: X-Mailer: git-send-email 2.5.4 (Apple Git-61) In-Reply-To: References: In-Reply-To: References: X-GBUdb-Analysis: 0, 209.85.192.170, Ugly c=0.450273 p=-0.341772 Source Normal X-MessageSniffer-Rules: 0-0-0-32767-c X-Barracuda-Connect: UNKNOWN[192.168.14.2] X-Barracuda-Start-Time: 1457029288 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=4.0 tests=BSF_RULE7568M, BSF_SC5_MJ1963, DKIM_SIGNED, NO_REAL_NAME, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.27542 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.50 BSF_RULE7568M Custom Rule 7568M 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Cc: Ben Warren Subject: [ovs-dev] [PATCH v2 13/23] Move lib/match.h to include/openvswitch directory X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" From: Ben Warren Signed-off-by: Ben Warren --- 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 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 -#include "match.h" +#include "openvswitch/match.h" #include +#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 #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 #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 #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"