From patchwork Tue Mar 7 00:22:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarno Rajahalme X-Patchwork-Id: 736008 X-Patchwork-Delegate: joestringer@nicira.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vccwG1HHtz9sNd for ; Tue, 7 Mar 2017 11:29:02 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 15A25C3B; Tue, 7 Mar 2017 00:23:24 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp2.linuxfoundation.org (smtp2.linux-foundation.org [172.17.192.36]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 7AB9FBF1 for ; Tue, 7 Mar 2017 00:23:22 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by smtp2.linuxfoundation.org (Postfix) with ESMTPS id B4AA81DABD for ; Tue, 7 Mar 2017 00:23:21 +0000 (UTC) Received: from mfilter19-d.gandi.net (mfilter19-d.gandi.net [217.70.178.147]) by relay2-d.mail.gandi.net (Postfix) with ESMTP id 4DBC4C5A60; Tue, 7 Mar 2017 01:23:20 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mfilter19-d.gandi.net Received: from relay2-d.mail.gandi.net ([IPv6:::ffff:217.70.183.194]) by mfilter19-d.gandi.net (mfilter19-d.gandi.net [::ffff:10.0.15.180]) (amavisd-new, port 10024) with ESMTP id IL8zYHjafxhv; Tue, 7 Mar 2017 01:23:18 +0100 (CET) X-Originating-IP: 208.91.1.34 Received: from sc9-mailhost3.vmware.com (unknown [208.91.1.34]) (Authenticated sender: jarno@ovn.org) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id BCE54C5A55; Tue, 7 Mar 2017 01:23:17 +0100 (CET) From: Jarno Rajahalme To: dev@openvswitch.org Date: Mon, 6 Mar 2017 16:22:42 -0800 Message-Id: <1488846170-23012-15-git-send-email-jarno@ovn.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1488846170-23012-1-git-send-email-jarno@ovn.org> References: <1488846170-23012-1-git-send-email-jarno@ovn.org> X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp2.linux-foundation.org Subject: [ovs-dev] [PATCH v3 14/22] flow: Make room after ct_state. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org 'ct_state' currently only needs 8 bits, so we can make room for a new CT field introduced in the next patch. Signed-off-by: Jarno Rajahalme --- include/openvswitch/flow.h | 3 ++- lib/flow.c | 3 ++- lib/match.c | 8 ++++---- lib/packets.h | 2 +- ofproto/ofproto-dpif.c | 2 +- tests/ovs-ofctl.at | 4 ++-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/openvswitch/flow.h b/include/openvswitch/flow.h index df80dfe..9169272 100644 --- a/include/openvswitch/flow.h +++ b/include/openvswitch/flow.h @@ -91,7 +91,8 @@ struct flow { * computation is opaque to the user space. */ union flow_in_port in_port; /* Input port.*/ uint32_t recirc_id; /* Must be exact match. */ - uint16_t ct_state; /* Connection tracking state. */ + uint8_t ct_state; /* Connection tracking state. */ + uint8_t pad0; uint16_t ct_zone; /* Connection tracking zone. */ uint32_t ct_mark; /* Connection mark.*/ uint8_t pad1[4]; /* Pad to 64 bits. */ diff --git a/lib/flow.c b/lib/flow.c index fb7bfeb..0c95b75 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -593,7 +593,8 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port)); if (md->recirc_id || md->ct_state) { miniflow_push_uint32(mf, recirc_id, md->recirc_id); - miniflow_push_uint16(mf, ct_state, md->ct_state); + miniflow_push_uint8(mf, ct_state, md->ct_state); + miniflow_push_uint8(mf, pad0, 0); miniflow_push_uint16(mf, ct_zone, md->ct_zone); } diff --git a/lib/match.c b/lib/match.c index 3fcaec5..882bf0c 100644 --- a/lib/match.c +++ b/lib/match.c @@ -340,8 +340,8 @@ match_set_ct_state(struct match *match, uint32_t ct_state) void match_set_ct_state_masked(struct match *match, uint32_t ct_state, uint32_t mask) { - match->flow.ct_state = ct_state & mask & UINT16_MAX; - match->wc.masks.ct_state = mask & UINT16_MAX; + match->flow.ct_state = ct_state & mask & UINT8_MAX; + match->wc.masks.ct_state = mask & UINT8_MAX; } void @@ -1111,7 +1111,7 @@ match_format(const struct match *match, struct ds *s, int priority) } if (wc->masks.ct_state) { - if (wc->masks.ct_state == UINT16_MAX) { + if (wc->masks.ct_state == UINT8_MAX) { ds_put_format(s, "%sct_state=%s", colors.param, colors.end); if (f->ct_state) { format_flags(s, ct_state_to_string, f->ct_state, '|'); @@ -1120,7 +1120,7 @@ match_format(const struct match *match, struct ds *s, int priority) } } else { format_flags_masked(s, "ct_state", ct_state_to_string, - f->ct_state, wc->masks.ct_state, UINT16_MAX); + f->ct_state, wc->masks.ct_state, UINT8_MAX); } ds_put_char(s, ','); } diff --git a/lib/packets.h b/lib/packets.h index c4d3799..f7e1d82 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -99,7 +99,7 @@ struct pkt_metadata { action. */ uint32_t skb_priority; /* Packet priority for QoS. */ uint32_t pkt_mark; /* Packet mark. */ - uint16_t ct_state; /* Connection state. */ + uint8_t ct_state; /* Connection state. */ uint16_t ct_zone; /* Connection zone. */ uint32_t ct_mark; /* Connection mark. */ ovs_u128 ct_label; /* Connection label. */ diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 1e1b107..0bf3786 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -3996,7 +3996,7 @@ check_mask(struct ofproto_dpif *ofproto, const struct miniflow *flow) uint32_t ct_mark; support = &ofproto->backer->support.odp; - ct_state = MINIFLOW_GET_U16(flow, ct_state); + ct_state = MINIFLOW_GET_U8(flow, ct_state); if (support->ct_state && support->ct_zone && support->ct_mark && support->ct_label && support->ct_state_nat) { return ct_state & CS_UNSUPPORTED_MASK ? OFPERR_OFPBMC_BAD_MASK : 0; diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at index 7e26735..bea3cf4 100644 --- a/tests/ovs-ofctl.at +++ b/tests/ovs-ofctl.at @@ -1213,9 +1213,9 @@ NXM_NX_REG0(a0e0d050) # Connection tracking fields, dnl -dnl When re-serialising, bits 16-31 are wildcarded, because current OVS userspace +dnl When re-serialising, bits 8-31 are wildcarded, because current OVS userspace dnl doesn't understand (or store) those bits. -NXM_OF_ETH_TYPE(0800), NXM_NX_CT_STATE_W(00000020/0000ffff) +NXM_OF_ETH_TYPE(0800), NXM_NX_CT_STATE_W(00000020/000000ff) nx_pull_match() returned error OFPBMC_BAD_VALUE NXM_OF_ETH_TYPE(0800), NXM_NX_CT_STATE_W(00000020/00000020) NXM_OF_ETH_TYPE(0800), NXM_NX_CT_STATE_W(00000020/000000f0)