From patchwork Wed May 13 20:11:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi-Hung Wei X-Patchwork-Id: 1289710 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jgFvv3vF; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49MmS82jlhz9sRY for ; Thu, 14 May 2020 06:27:20 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 09F03883A2; Wed, 13 May 2020 20:27:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CqwnXgu8EMqB; Wed, 13 May 2020 20:27:16 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 48A5888123; Wed, 13 May 2020 20:27:16 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0EB80C088B; Wed, 13 May 2020 20:27:16 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 40F63C016F for ; Wed, 13 May 2020 20:27:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 1489520445 for ; Wed, 13 May 2020 20:27:14 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3jtUCBnoxNd0 for ; Wed, 13 May 2020 20:27:12 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by silver.osuosl.org (Postfix) with ESMTPS id E67AC203F2 for ; Wed, 13 May 2020 20:27:12 +0000 (UTC) Received: by mail-pl1-f196.google.com with SMTP id m7so274058plt.5 for ; Wed, 13 May 2020 13:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=Z3+pMZbANq7thw7BLF42uwDIYRVEXAUvZoiOCLQGvbA=; b=jgFvv3vFypHi7iE+YIZ+bozImyRPId6HV3q+b7TTFaScuROkrHoeO63QOm7lzzHPbY m0p10L3RdlHb6ojkN4PBLUyQO/iE50iW46V/NBiV8MFaDF8GLJ2iE0q3cDXdviKPGBcn yCXg0lh60HsJrZOx0ande8Z4QLzQ76ldyMaInVCvMYyxkqvPuBJxu7T55rk3Fy6unON0 sWoldfk57M+pRvNT5da1dWLa53xO1DoplsqyHoyOj6n+ITUEU1JvLzEUJNAwgYolXn6/ LtpJfUZ4wA5yJCiW3a7ztxy0yieAS5sDgzZbx0vJbdZeqEbdcq2Up6vRUGqy0EWfKLwF Lz5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Z3+pMZbANq7thw7BLF42uwDIYRVEXAUvZoiOCLQGvbA=; b=e6om/rf5yoxi7GwqQG0N3sNBKV49eXfYXCl7NHotzCEro0HaQ6rt43vY5iR0vTwWSz zmLquiUl6CsOXIFSCU6d/lnG18yrzje5hXYdxVk0m8y+rZoAZuSigXV/7/T8Q4WMixXS HjtsSgX34RaVjd8P9MXypC41LUQeh90r70RcXChEoV606cmPWpC6SGv9trE/ltCfNgxD 80Qn8zH5EOUdzHglDJ3ArhBpijJXjkQCbYO5xzVATbCjjYw9Q99BlVn44hSdFuI4hJAV 205/zpMCGIq3XzFB7H0QK0LIbjJwf2ENbyHe6ksdT5aLUOsxA2OnHHAj37LSbdpfdcz/ Nj8A== X-Gm-Message-State: AGi0PuZEEVJJ0Bh+oZfg6Njd2ZQ8qf1MKGZc80foKslICSfxyPcphBoY 2znfD1VgEQtEwxuoQppJS4VIfHW7 X-Google-Smtp-Source: APiQypJnkDbI3FDOeFxvNMK2ftzZjWMFwYehjMtWV5TxG7M5H3QlYvOmUb2xqQYI7r4xNl+MCxQN8w== X-Received: by 2002:a17:90a:9b82:: with SMTP id g2mr37871224pjp.72.1589401631776; Wed, 13 May 2020 13:27:11 -0700 (PDT) Received: from Husky.eng.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id d4sm470153pgk.2.2020.05.13.13.27.09 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 May 2020 13:27:10 -0700 (PDT) From: Yi-Hung Wei To: dev@openvswitch.org, u9012063@gmail.com Date: Wed, 13 May 2020 13:11:17 -0700 Message-Id: <1589400677-27415-1-git-send-email-yihung.wei@gmail.com> X-Mailer: git-send-email 2.7.4 Subject: [ovs-dev] [PATCH] metaflow: Fix maskable conntrack orig tuple fields X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From man ovs-fields(7), the conntrack origin tuple fields ct_nw_src/dst, ct_ipv6_src/dst, and ct_tp_src/dst are supposed to be bitwise maskable, but they are not. This patch enables those fields to be maskable, and adds a regression test. Fixes: daf4d3c18da4 ("odp: Support conntrack orig tuple key.") Reported-by: Wenying Dong Signed-off-by: Yi-Hung Wei --- Travis CI: https://travis-ci.org/github/YiHungWei/ovs/builds/686707703 --- lib/meta-flow.c | 30 +++++++++++++++++++++------ tests/ofproto-dpif.at | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/lib/meta-flow.c b/lib/meta-flow.c index 9ab82460bfc4..c808d205d5b4 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -2328,12 +2328,6 @@ mf_set(const struct mf_field *mf, switch (mf->id) { case MFF_CT_ZONE: case MFF_CT_NW_PROTO: - case MFF_CT_NW_SRC: - case MFF_CT_NW_DST: - case MFF_CT_IPV6_SRC: - case MFF_CT_IPV6_DST: - case MFF_CT_TP_SRC: - case MFF_CT_TP_DST: case MFF_RECIRC_ID: case MFF_PACKET_TYPE: case MFF_CONJ_ID: @@ -2457,6 +2451,30 @@ mf_set(const struct mf_field *mf, ntoh128(mask->be128)); break; + case MFF_CT_NW_SRC: + match_set_ct_nw_src_masked(match, value->be32, mask->be32); + break; + + case MFF_CT_NW_DST: + match_set_ct_nw_dst_masked(match, value->be32, mask->be32); + break; + + case MFF_CT_IPV6_SRC: + match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6); + break; + + case MFF_CT_IPV6_DST: + match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6); + break; + + case MFF_CT_TP_SRC: + match_set_ct_tp_src_masked(match, value->be16, mask->be16); + break; + + case MFF_CT_TP_DST: + match_set_ct_tp_dst_masked(match, value->be16, mask->be16); + break; + case MFF_ETH_DST: match_set_dl_dst_masked(match, value->mac, mask->mac); break; diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index d444cf0844a9..41164d735d8a 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -10570,6 +10570,62 @@ udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10. OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([ofproto-dpif - conntrack - match masked ct fields]) +OVS_VSWITCHD_START + +add_of_ports br0 1 2 + +AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info]) + +dnl Allow new connections on p1->p2. Allow only established connections p2->p1 +AT_DATA([flows.txt], [dnl +table=0,arp,action=normal +table=0,ip,in_port=1,udp,nw_src=10.1.2.1/24,action=ct(commit) +table=0,ip,in_port=1,udp6,ipv6_dst=2001:db8::1/64,action=ct(commit) +table=0,ip,in_port=1,udp,tp_src=3/0x1,action=ct(commit) +table=0,ip,in_port=2,actions=ct(table=1) +table=0,ip6,in_port=2,actions=ct(table=1) +table=1,priority=10,udp,ct_state=+trk+rpl,ct_nw_src=10.1.2.1/24,actions=controller +table=1,priority=10,udp6,ct_state=+trk+rpl,ct_ipv6_dst=2001:db8::1/64,actions=controller +table=1,priority=10,udp,ct_state=+trk+rpl,ct_tp_src=3/0x1,actions=controller +table=1,priority=1,action=drop +]) + +AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) + +AT_CAPTURE_FILE([ofctl_monitor.log]) +AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log]) + +dnl Match ct_nw_src=10.1.2.1/24 +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.1.2.100,dst=10.1.2.200,proto=17,tos=0,ttl=64,frag=no),udp(src=6,dst=6)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.2.200,dst=10.1.2.100,proto=17,tos=0,ttl=64,frag=no),udp(src=6,dst=6)']) + +dnl Match ct_ipv6_dst=2001:db8::1/64 +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8::1,dst=2001:db8::2,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=1,dst=2)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x86dd),ipv6(src=2001:db8::2,dst=2001:db8::1,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=2,dst=1)']) + +dnl Match ct_tp_src=3/0x1 +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)']) + +OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6]) +OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) + +dnl Check this output. +AT_CHECK([cat ofctl_monitor.log], [0], [dnl +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.2.100,ct_nw_dst=10.1.2.200,ct_nw_proto=17,ct_tp_src=6,ct_tp_dst=6,ip,in_port=2 (via action) data_len=106 (unbuffered) +udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.2.200,nw_dst=10.1.2.100,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=6,tp_dst=6 udp_csum:221 +dnl +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=126 ct_state=est|rpl|trk,ct_ipv6_src=2001:db8::1,ct_ipv6_dst=2001:db8::2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ipv6,in_port=2 (via action) data_len=126 (unbuffered) +udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,ipv6_src=2001:db8::2,ipv6_dst=2001:db8::1,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=2,tp_dst=1 udp_csum:bfe2 +dnl +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered) +udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:553 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([ofproto-dpif - conntrack - ofproto/trace]) OVS_VSWITCHD_START