From patchwork Tue Apr 18 11:20:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zoltan Balogh X-Patchwork-Id: 751809 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 3w6jT02Kwfz9ryT for ; Tue, 18 Apr 2017 21:24:20 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.onmicrosoft.com header.i=@ericsson.onmicrosoft.com header.b="PXyKwzXz"; dkim-atps=neutral Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 8C2C0BED; Tue, 18 Apr 2017 11:20:23 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 21459BDE for ; Tue, 18 Apr 2017 11:20:22 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sesbmg23.ericsson.net (sesbmg23.ericsson.net [193.180.251.37]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 25E5019E for ; Tue, 18 Apr 2017 11:20:18 +0000 (UTC) X-AuditID: c1b4fb25-837ff70000006af2-95-58f5f672dea0 Received: from ESESSHC011.ericsson.se (Unknown_Domain [153.88.183.51]) by (Symantec Mail Security) with SMTP id 27.15.27378.276F5F85; Tue, 18 Apr 2017 13:20:18 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.51) with Microsoft SMTP Server (TLS) id 14.3.339.0; Tue, 18 Apr 2017 13:20:18 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.onmicrosoft.com; s=selector1-ericsson-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=OKstb74MEoZ60vaPLYX/dWrFDEkjJI5Ec8Q4zTOwfQ4=; b=PXyKwzXzFmbHS2lukt1v8AN5ObqnYigSxqFDHQU3Y0i1oONgIy0hzchanLuIiUq2uiH9joaCqJyQJ0gtmdCecMrKds2UcZN0JwDqJUGlczbYc58YxUidqcudVbVxIXohR61WPMKWapR7n5d9qzCMkUG8A3okr0CBOaCWW62LnLc= Received: from AM2PR07MB1042.eurprd07.prod.outlook.com (10.162.37.27) by AM2PR07MB1044.eurprd07.prod.outlook.com (10.162.38.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1047.6; Tue, 18 Apr 2017 11:20:16 +0000 Received: from AM2PR07MB1042.eurprd07.prod.outlook.com ([fe80::90cd:8ba4:2442:e4d]) by AM2PR07MB1042.eurprd07.prod.outlook.com ([fe80::90cd:8ba4:2442:e4d%15]) with mapi id 15.01.1047.006; Tue, 18 Apr 2017 11:20:16 +0000 From: =?iso-8859-1?Q?Zolt=E1n_Balogh?= To: "'dev@openvswitch.org'" Thread-Topic: [PATCH 08/10] tests: Added unit tests in packet-type-aware.at Thread-Index: AdK4NFnB9wR/i8liSD+oD1oJgw9gFQ== Date: Tue, 18 Apr 2017 11:20:16 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: openvswitch.org; dkim=none (message not signed) header.d=none;openvswitch.org; dmarc=none action=none header.from=ericsson.com; x-originating-ip: [91.82.100.59] x-microsoft-exchange-diagnostics: 1; AM2PR07MB1044; 7:OnD3/UFnyDjqxNtej0QXDXXJWwyecpZdaJnqzWObGuwmroaUK1dNYM4dbDXf5rDKGmt8ig4Ej4JG3oCGcC5RR5DEw3MZHnJepz+OknVe95jK6yhjl/fdASBi0jILSizr+qFBQDmGNbla2Z4+bUbZwL57N8llL5oG4SXoo6BEWXcBTb4ltCoKVKthQJDOCjpEcVkPpGZLhQLGXZR2f+teLOmD0lCPPZ5SZtQZJQmv7md8pVeU94Y/yxLHWfgxoosK4tjoK8yahKgR1DOiRtk10g1PeZExgtgfAIpM70PYBfVlaJw7Zn68eu23uwuf6F5zBsbWn/1lOa5slZ6XNbswjQ== x-ld-processed: 92e84ceb-fbfd-47ab-be52-080c6b87953f,ExtAddr x-ms-office365-filtering-correlation-id: 44196032-930b-40b0-6f4e-08d4864ce40c x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081); SRVR:AM2PR07MB1044; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(37575265505322)(36556875275162); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(20161123560025)(20161123564025)(6072148); SRVR:AM2PR07MB1044; BCL:0; PCL:0; RULEID:; SRVR:AM2PR07MB1044; x-forefront-prvs: 028166BF91 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(39450400003)(39410400002)(39400400002)(39860400002)(39840400002)(39850400002)(38730400002)(230783001)(110136004)(86362001)(575784001)(7736002)(6916009)(66066001)(5660300001)(107886003)(81166006)(3846002)(2900100001)(6116002)(102836003)(33656002)(7696004)(3660700001)(2906002)(25786009)(99286003)(189998001)(6436002)(4326008)(55016002)(6506006)(53936002)(53946003)(74316002)(9686003)(8676002)(3280700002)(305945005)(8936002)(54356999)(50986999)(491001)(579004)(559001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM2PR07MB1044; H:AM2PR07MB1042.eurprd07.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Apr 2017 11:20:16.5637 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR07MB1044 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHIsWRmVeSWpSXmKPExsUyM2K7sW7Rt68RBjv+GVgcPb2H2YHR49nN /4wBjFFcNimpOZllqUX6dglcGcc75zIWdE9jqjix9xNTA+OR54xdjJwcEgImEqsO72PuYuTi EBJYzyhxfOZsNpCEkMAJIGeVCUiCRaCXWaLtxH2oqilMEtvur2OEcB4ySrw4fJkZpIVNwFni +u6XYO0iAoYSlyadZAWxmQVSJO5N3ssEYgsLuEkcPrKTFaLGW+LH4QnsELaeRP/1xWBzWARU JT48Xg92H69AjMSE28fA4owCYhLfT61hgpgpLnHryXwmiB8EJJbsOc8MYYtKvHz8jxXkOEaB 2YwSf3e2QBUpSGxa8J4dJCEh0MMs8aYRpsNGYkb3dCjbV+LK3UPQkKmTWN42EcrOllh79yPU IC+JY5snQ9VfZJJ4Pc8WwpaR2PxyCSPEghZWiR1TzkO9LCVx90onI4QtI/Hizl5osOhJ3Jg6 hW0Co8YsJB/NQpKCsLUlli18zTwLHBqCEidnPmFZwMiyilG0OLU4KTfdyFgvtSgzubg4P08v L7VkEyMwVRzc8lt1B+PlN46HGAU4GJV4eBNOfYkQYk0sK67MPcQowcGsJML7awNQiDclsbIq tSg/vqg0J7X4EKM0B4uSOK/jvgsRQgLpiSWp2ampBalFMFkmDk6pBsbImHebRfZJaixq9qnn VdZQuivzZ2pPIMOZVKtVy9cuNl7L8lE06vgx7/Nvn51S7DDUWPfIcee8xVu3+HN38t3gj/lh uX6W7MX6ZzsU3nySXbhm8UOrZf9fq+VIHMxsL5Xa23PlsBEjY+JJC+n85NispY3hjNXGm+xE ihKS2L7/rF6Tu+fb1CAlluKMREMt5qLiRADxSzI7EQMAAA== X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, LOTS_OF_MONEY, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH 08/10] tests: Added unit tests in packet-type-aware.at 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: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Jan Scheurich ptap - create packet-type-aware bridge ptap - legal flow entries in ptap bridge ptap - triangle bridge setup with L2 and L3 GRE tunnels First and second unit tests perform basic verification. The third one is a triangular bridge setup test case. It tests dataplane in non-PTAP and ptap bridges in conjunction with L2 and L3 GRE tunnels. GRE tunneling test setup for PTAP bridge 192.168.10.10 192.168.10.20 192.168.10.30 n1 n2 n3 | | | +------o------+ +------o------+ +------o------+ | br-in1 | | br-in2 | | br-in3 | | | | (PTAP) | | | +------o------+ +------o------+ +------o------+ gre gre gre 10.0.0.1 (10.0.0.2) (10.0.0.3) (20.0.0.1) 20.0.0.2 (20.0.0.3) (30.0.0.1) LOCAL (30.0.0.2) LOCAL 30.0.0.3 LOCAL +-----------o-+ +-----------o-+ +-----------o-+ | br-p1 | | br-p2 | | br-p3 | +------o------+ +------o------+ +------o------+ p1-0 | | p2-0 | p3-0 p0-1 | | p0-2 | p0-3 +--o------------------------o-------------------------o--+ | br0 | +--------------------------------------------------------+ GRE tunnel ports: No Bridge Name Type Remote bridge & ports ----------------------------------------------------------------------- 1020 br-in1 gre-12 l2 br-in2 2010 (versatile) 1021 br-in1 gre-12_l3 l3 same 1030 br-in1 gre-13 l2 br-in3 3010 (l2) 2010 br-in2 gre-21 versatile br-in1 1020 (l2), 1021 (l3) 2030 br-in2 gre-13 versatile br-in3 3020 (l2), 3021 (l3) 3010 br-in1 gre-31 l2 br-in1 1030 (l2) 3020 br-in1 gre-32 l2 br-in2 2010 (versatile) 3021 br-in1 gre-32_l3 l3 same Signed-off-by: Jan Scheurich --- tests/automake.mk | 3 +- tests/packet-type-aware.at | 500 +++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 1 + 3 files changed, 503 insertions(+), 1 deletion(-) create mode 100644 tests/packet-type-aware.at diff --git a/tests/automake.mk b/tests/automake.mk index c6bd120..b215c11 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -95,7 +95,8 @@ TESTSUITE_AT = \ tests/ovn-sbctl.at \ tests/ovn-controller.at \ tests/ovn-controller-vtep.at \ - tests/mcast-snooping.at + tests/mcast-snooping.at \ + tests/packet-type-aware.at SYSTEM_KMOD_TESTSUITE_AT = \ tests/system-common-macros.at \ diff --git a/tests/packet-type-aware.at b/tests/packet-type-aware.at new file mode 100644 index 0000000..56b0365 --- /dev/null +++ b/tests/packet-type-aware.at @@ -0,0 +1,500 @@ +AT_BANNER([packet-type-aware pipeline]) + +AT_SETUP([ptap - create packet-type-aware bridge]) + +OVS_VSWITCHD_START([]) + +AT_CHECK([ + ovs-vsctl set bridge br0 \ + datapath_type=dummy \ + other-config:packet-type-aware=true +], [0]) + +AT_CHECK([ovs-vsctl list bridge br0 | grep other_config], [0], [dnl +other_config : {datapath-id="fedcba9876543210", hwaddr="aa:55:aa:55:00:00", packet-type-aware="true"} +]) + +AT_CHECK([ovs-ofctl -Oopenflow13 dump-table-features br0 | grep packet_type], [0], [dnl + packet_type: exact match or wildcard +]) +AT_CHECK([ovs-ofctl -Oopenflow14 dump-table-features br0 | grep packet_type], [0], [dnl + packet_type: exact match or wildcard +]) +AT_CHECK([ovs-ofctl -Oopenflow15 dump-table-features br0 | grep packet_type], [0], [dnl + packet_type: exact match or wildcard +]) + +AT_CHECK([ + ovs-vsctl set bridge br0 other-config:packet-type-aware=false +], [0]) + +AT_CHECK([ovs-vsctl list bridge br0 | grep other_config], [0], [dnl +other_config : {datapath-id="fedcba9876543210", hwaddr="aa:55:aa:55:00:00", packet-type-aware="false"} +]) + +AT_CHECK([ovs-ofctl -Oopenflow13 dump-table-features br0 | grep packet_type], [1]) +AT_CHECK([ovs-ofctl -Oopenflow14 dump-table-features br0 | grep packet_type], [1]) +AT_CHECK([ovs-ofctl -Oopenflow15 dump-table-features br0 | grep packet_type], [1]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + + +AT_SETUP([ptap - legal flow entries in ptap bridge]) + +OVS_VSWITCHD_START([]) + +AT_CHECK([ + ovs-vsctl set bridge br0 \ + datapath_type=dummy \ + protocols=OpenFlow10,OpenFlow13,OpenFlow14,OpenFlow15 \ + other-config:packet-type-aware=true +], [0]) + +AT_CHECK([ + ovs-ofctl del-flows br0 + ovs-ofctl -Oopenflow13 add-flow br0 priority=1,dl_src=11:22:33:44:55:66,eth_type=0x1234,actions=drop + ovs-ofctl -Oopenflow14 add-flow br0 priority=1,ip,nw_dst=10.11.12.13,actions=drop + ovs-ofctl -Oopenflow15 add-flow br0 priority=1,ipv6,nw_proto=6,actions=drop + ovs-ofctl -Oopenflow14 add-flow br0 priority=2,packet_type=0x00000000,dl_src=11:22:33:44:55:66,dl_type=0x4567,actions=drop + ovs-ofctl -Oopenflow15 add-flow br0 priority=2,packet_type=0x00000000,arp,arp_tpa=10.11.12.13,actions=drop + ovs-ofctl -Oopenflow15 add-flow br0 priority=3,packet_type=0x00010806,arp_tpa=10.11.12.13,actions=drop + ovs-ofctl -Oopenflow13 add-flow br0 priority=3,packet_type=0x00010800,nw_dst=10.11.12.13,actions=drop + ovs-ofctl -Oopenflow14 add-flow br0 priority=3,packet_type=0x000186dd,ipv6_dst=1234:5678::/32,actions=drop +], [0]) + +AT_CHECK([ovs-ofctl -Oopenflow15 dump-flows br0 | ofctl_strip | sort | grep actions], [0], [dnl + priority=1,packet_type=(0,0x0),dl_src=11:22:33:44:55:66,dl_type=0x1234 actions=drop + priority=1,packet_type=(0,0x0),ip,nw_dst=10.11.12.13 actions=drop + priority=1,packet_type=(0,0x0),tcp6 actions=drop + priority=2,packet_type=(0,0x0),arp,arp_tpa=10.11.12.13 actions=drop + priority=2,packet_type=(0,0x0),dl_src=11:22:33:44:55:66,dl_type=0x4567 actions=drop + priority=3,packet_type=(1,0x800),nw_dst=10.11.12.13 actions=drop + priority=3,packet_type=(1,0x806),arp_tpa=10.11.12.13 actions=drop + priority=3,packet_type=(1,0x86dd),ipv6_dst=1234:5678::/32 actions=drop +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + + +AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE tunnels]) + +######################## +# GRE tunneling test setup for PTAP bridge +# +# 192.168.10.10 192.168.10.20 192.168.10.30 +# n1 n2 n3 +# | | | +# +------o------+ +------o------+ +------o------+ +# | br-in1 | | br-in2 | | br-in3 | +# | | | (PTAP) | | | +# +------o------+ +------o------+ +------o------+ +# gre gre gre +# 10.0.0.1 (10.0.0.2) (10.0.0.3) +# (20.0.0.1) 20.0.0.2 (20.0.0.3) +# (30.0.0.1) LOCAL (30.0.0.2) LOCAL 30.0.0.3 LOCAL +# +-----------o-+ +-----------o-+ +-----------o-+ +# | br-p1 | | br-p2 | | br-p3 | +# +------o------+ +------o------+ +------o------+ +# p1-0 | | p2-0 | p3-0 +# p0-1 | | p0-2 | p0-3 +# +--o------------------------o-------------------------o--+ +# | br0 | +# +--------------------------------------------------------+ +#" +# GRE tunnel ports: +# No Bridge Name Type Remote bridge & ports +# ----------------------------------------------------------------------- +# 1020 br-in1 gre-12 l2 br-in2 2010 (versatile) +# 1021 br-in1 gre-12_l3 l3 same +# 1030 br-in1 gre-13 l2 br-in3 3010 (l2) +# 2010 br-in2 gre-21 versatile br-in1 1020 (l2), 1021 (l3) +# 2030 br-in2 gre-13 versatile br-in3 3020 (l2), 3021 (l3) +# 3010 br-in1 gre-31 l2 br-in1 1030 (l2) +# 3020 br-in1 gre-32 l2 br-in2 2010 (versatile) +# 3021 br-in1 gre-32_l3 l3 same + + +OVS_VSWITCHD_START([]) + +HWADDR_BRP1=aa:55:00:00:00:01 +HWADDR_BRP2=aa:55:00:00:00:02 +HWADDR_BRP3=aa:55:00:00:00:03 + +# Setup bridge infrastructure +AT_CHECK([ + ovs-vsctl add-br br-in1 -- \ + set bridge br-in1 datapath_type=dummy fail-mode=standalone + ovs-vsctl add-br br-in2 -- \ + set bridge br-in2 datapath_type=dummy fail-mode=standalone other-config:packet-type-aware=true + ovs-vsctl add-br br-in3 -- \ + set bridge br-in3 datapath_type=dummy fail-mode=standalone + ovs-vsctl add-br br-p1 -- \ + set bridge br-p1 datapath_type=dummy fail-mode=standalone other-config:hwaddr=$HWADDR_BRP1 + ovs-vsctl add-br br-p2 -- \ + set bridge br-p2 datapath_type=dummy fail-mode=standalone other-config:hwaddr=$HWADDR_BRP2 + ovs-vsctl add-br br-p3 -- \ + set bridge br-p3 datapath_type=dummy fail-mode=standalone other-config:hwaddr=$HWADDR_BRP3 + + ovs-vsctl add-port br-p1 p1-0 -- set interface p1-0 type=patch options:peer=p0-1 ofport_request=2 + ovs-vsctl add-port br-p2 p2-0 -- set interface p2-0 type=patch options:peer=p0-2 ofport_request=2 + ovs-vsctl add-port br-p3 p3-0 -- set interface p3-0 type=patch options:peer=p0-3 ofport_request=2 + ovs-vsctl add-port br0 p0-1 -- set interface p0-1 type=patch options:peer=p1-0 ofport_request=10 + ovs-vsctl add-port br0 p0-2 -- set interface p0-2 type=patch options:peer=p2-0 ofport_request=20 + ovs-vsctl add-port br0 p0-3 -- set interface p0-3 type=patch options:peer=p3-0 ofport_request=30 + + # Populate the MAC table of br0 + ovs-ofctl del-flows br0 + ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP1,actions=10 + ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP2,actions=20 + ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP3,actions=30 + + ovs-ofctl del-flows br-in1 + ovs-ofctl del-flows br-in2 + ovs-ofctl del-flows br-in3 + ovs-ofctl del-flows br-p1 + ovs-ofctl del-flows br-p2 + ovs-ofctl del-flows br-p3 +], [0]) + +# Get the MAC addresses of the tunnel end-point ports +#HWADDR_BRP1=$(ovs-ofctl show br-p1 | grep LOCAL | sed 's/.*addr://') +#HWADDR_BRP2=$(ovs-ofctl show br-p2 | grep LOCAL | sed 's/.*addr://') +#HWADDR_BRP3=$(ovs-ofctl show br-p3 | grep LOCAL | sed 's/.*addr://') + +### Setup GRE tunnels +AT_CHECK([ + ovs-vsctl add-port br-in1 gre12 -- \ + set interface gre12 type=gre options:remote_ip=10.0.0.2 ofport_request=1020 + ovs-vsctl add-port br-in1 gre12_l3 -- \ + set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 ofport_request=1021 options:layer3=true + ovs-vsctl add-port br-in1 gre13 -- \ + set interface gre13 type=gre options:remote_ip=10.0.0.3 ofport_request=1030 + + ovs-vsctl add-port br-in2 gre21 -- \ + set interface gre21 type=gre options:remote_ip=20.0.0.1 ofport_request=2010 + ovs-vsctl add-port br-in2 gre23 -- \ + set interface gre23 type=gre options:remote_ip=20.0.0.3 ofport_request=2030 + + ovs-vsctl add-port br-in3 gre31 -- \ + set interface gre31 type=gre options:remote_ip=30.0.0.1 ofport_request=3010 + ovs-vsctl add-port br-in3 gre32 -- \ + set interface gre32 type=gre options:remote_ip=30.0.0.2 ofport_request=3020 + ovs-vsctl add-port br-in3 gre32_l3 -- \ + set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 ofport_request=3021 options:layer3=true + + ovs-appctl netdev-dummy/ip4addr br-p1 10.0.0.1/24 + ovs-appctl ovs/route/add 10.0.0.0/24 br-p1 + ovs-appctl tnl/arp/set br-p1 10.0.0.1 $HWADDR_BRP1 + ovs-appctl tnl/arp/set br-p1 10.0.0.2 $HWADDR_BRP2 + ovs-appctl tnl/arp/set br-p1 10.0.0.3 $HWADDR_BRP3 + + ovs-appctl netdev-dummy/ip4addr br-p2 20.0.0.2/24 + ovs-appctl ovs/route/add 20.0.0.0/24 br-p2 + ovs-appctl tnl/arp/set br-p2 20.0.0.1 $HWADDR_BRP1 + ovs-appctl tnl/arp/set br-p2 20.0.0.2 $HWADDR_BRP2 + ovs-appctl tnl/arp/set br-p2 20.0.0.3 $HWADDR_BRP3 + + ovs-appctl netdev-dummy/ip4addr br-p3 30.0.0.3/24 + ovs-appctl ovs/route/add 30.0.0.0/24 br-p3 + ovs-appctl tnl/arp/set br-p3 30.0.0.1 $HWADDR_BRP1 + ovs-appctl tnl/arp/set br-p3 30.0.0.2 $HWADDR_BRP2 + ovs-appctl tnl/arp/set br-p3 30.0.0.3 $HWADDR_BRP3 +], [0], [stdout]) + +AT_CHECK([ + ovs-appctl ovs/route/show | grep User: +], [0], [dnl +User: 10.0.0.0/24 dev br-p1 SRC 10.0.0.1 +User: 20.0.0.0/24 dev br-p2 SRC 20.0.0.2 +User: 30.0.0.0/24 dev br-p3 SRC 30.0.0.3 +]) + +AT_CHECK([ + ovs-appctl tnl/neigh/show | grep br-p | sort +], [0], [stdout]) + +### Flows in br-pto twist TEP IP addresses in tunnel IP headers +AT_CHECK([ + ovs-ofctl add-flow br-p1 in_port:LOCAL,actions=2 + ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:20.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL + ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:30.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL + + ovs-ofctl add-flow br-p2 in_port:LOCAL,actions=2 + ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:10.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL + ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:30.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL + + ovs-ofctl add-flow br-p3 in_port:LOCAL,actions=2 + ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:10.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL + ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:20.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL +], [0]) + +AT_CHECK([ + ovs-ofctl dump-flows br-p1 | ofctl_strip | sort | grep actions + ovs-ofctl dump-flows br-p2 | ofctl_strip | sort | grep actions + ovs-ofctl dump-flows br-p3 | ofctl_strip | sort | grep actions +], [0], [dnl + in_port=LOCAL actions=output:2 + ip,in_port=2,nw_dst=20.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL + ip,in_port=2,nw_dst=30.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL + in_port=LOCAL actions=output:2 + ip,in_port=2,nw_dst=10.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL + ip,in_port=2,nw_dst=30.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL + in_port=LOCAL actions=output:2 + ip,in_port=2,nw_dst=10.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL + ip,in_port=2,nw_dst=20.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL +]) + +### Setup test ports for traffic injection +N1_IP=192.168.10.10 +N2_IP=192.168.10.20 +N3_IP=192.168.10.30 +N1_MAC=aa:55:aa:55:00:01 +N2_MAC=aa:55:aa:55:00:02 +N3_MAC=aa:55:aa:55:00:03 +N1_OFPORT=10 +N2_OFPORT=20 +N3_OFPORT=30 + +AT_CHECK([ + ovs-vsctl add-port br-in1 n1 -- \ + set interface n1 type=dummy ofport_request=$N1_OFPORT options:tx_pcap=n1.pcap + ovs-vsctl add-port br-in2 n2 -- \ + set interface n2 type=dummy ofport_request=$N2_OFPORT options:tx_pcap=n2.pcap + ovs-vsctl add-port br-in3 n3 -- \ + set interface n3 type=dummy ofport_request=$N3_OFPORT options:tx_pcap=n3.pcap +], [0]) + +#N1_DPPORT=$(ovs-appctl dpif/show | grep "n1 10" | sed 's|.*/\([[0-9]]*\):.*|\1|') +#N2_DPPORT=$(ovs-appctl dpif/show | grep "n2 20" | sed 's|.*/\([[0-9]]*\):.*|\1|') +#N3_DPPORT=$(ovs-appctl dpif/show | grep "n3 30" | sed 's|.*/\([[0-9]]*\):.*|\1|') + +### Verify datapath configuration +AT_CHECK([ + ovs-appctl dpif/show | grep -v hit | sed 's/\t/ /g' +], [0], [dnl + br-in1: + br-in1 65534/101: (dummy-internal) + gre12 1020/4: (gre: remote_ip=10.0.0.2) + gre12_l3 1021/4: (gre: layer3=true, remote_ip=10.0.0.2) + gre13 1030/4: (gre: remote_ip=10.0.0.3) + n1 10/5: (dummy) + br-in2: + br-in2 65534/102: (dummy-internal) + gre21 2010/4: (gre: remote_ip=20.0.0.1) + gre23 2030/4: (gre: remote_ip=20.0.0.3) + n2 20/6: (dummy) + br-in3: + br-in3 65534/103: (dummy-internal) + gre31 3010/4: (gre: remote_ip=30.0.0.1) + gre32 3020/4: (gre: remote_ip=30.0.0.2) + gre32_l3 3021/4: (gre: layer3=true, remote_ip=30.0.0.2) + n3 30/7: (dummy) + br-p1: + br-p1 65534/1: (dummy-internal) + p1-0 2/none: (patch: peer=p0-1) + br-p2: + br-p2 65534/2: (dummy-internal) + p2-0 2/none: (patch: peer=p0-2) + br-p3: + br-p3 65534/3: (dummy-internal) + p3-0 2/none: (patch: peer=p0-3) + br0: + br0 65534/100: (dummy-internal) + p0-1 10/none: (patch: peer=p1-0) + p0-2 20/none: (patch: peer=p2-0) + p0-3 30/none: (patch: peer=p3-0) +]) + +### Test L3 forwarding flows +AT_CHECK([ + ovs-ofctl add-flow br-in1 ip,nw_dst=$N1_IP,actions=mod_dl_dst:$N1_MAC,$N1_OFPORT # Local route to N1 + ovs-ofctl add-flow br-in1 ip,nw_dst=$N2_IP,actions=1020 # Route to N2 via the L2 tunnel to br-in2 + ovs-ofctl add-flow br-in1 ip,nw_dst=$N3_IP,actions=1030 # Route to N3 direct through L2 tunnel + + ovs-ofctl add-flow br-in2 ip,nw_dst=$N2_IP,actions=mod_dl_dst:$N2_MAC,$N2_OFPORT # Local route to N2 for ethernet packets + ovs-ofctl add-flow br-in2 ip,nw_dst=$N1_IP,actions=2010 # Route to N1 for ethernet packet + ovs-ofctl add-flow br-in2 packet_type=0x10800,nw_dst=$N1_IP,actions=2010 # Route to N1 for IP packets + ovs-ofctl add-flow br-in2 ip,nw_dst=$N3_IP,actions=2010 # Indirect route to N3 via br-in1 for ethernet packet + ovs-ofctl add-flow br-in2 packet_type=0x10800,nw_dst=$N3_IP,actions=2030 # Direct route to N3 for IP packets + + ovs-ofctl add-flow br-in3 ip,nw_dst=$N3_IP,actions=mod_dl_dst:$N3_MAC,$N3_OFPORT # Local route to N1 + ovs-ofctl add-flow br-in3 ip,nw_dst=$N2_IP,actions=3020 # Route to N2 via the L2 tunnel + ovs-ofctl add-flow br-in3 ip,nw_dst=$N1_IP,actions=3021 # Route to N1 via br-in2 through L3 tunnel +], [0]) + +AT_CHECK([ + ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep actions +], [0], [dnl + ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10 + ip,nw_dst=192.168.10.20 actions=output:1020 + ip,nw_dst=192.168.10.30 actions=output:1030 +]) + +AT_CHECK([ + ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep actions +], [0], [dnl + packet_type=(0,0x0),ip,nw_dst=192.168.10.10 actions=output:2010 + packet_type=(0,0x0),ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20 + packet_type=(0,0x0),ip,nw_dst=192.168.10.30 actions=output:2010 + packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010 + packet_type=(1,0x800),nw_dst=192.168.10.30 actions=output:2030 +]) + +AT_CHECK([ + ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep actions +], [0], [dnl + ip,nw_dst=192.168.10.10 actions=output:3021 + ip,nw_dst=192.168.10.20 actions=output:3020 + ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30 +]) + +### Inject ICMP Echo request test packets + +# N1 to N3, via the L2 GRE tunnel between br-in1 and br-in3 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n1 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n1 1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(1),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(4) +recirc_id(0),in_port(5),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1)) +tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192.168.10.30,frag=no), packets:1, bytes:98, used:0.0s, actions:set(eth(dst=aa:55:aa:55:00:03)),7 +]) + +# Clear up megaflow cache +ovs-appctl time/warp 11000 + +# N1 to N2 via the L2 GRE tunnel between br-in1 and br-in2 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n1 461e7d1a95a13a6dd2099cab080045000054500b40004001552fc0a80a0ac0a80a140800531f09a90001e9509a580000000055ba030000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n1 461e7d1a95a13a6dd2099cab08004500005450934000400154a7c0a80a0ac0a80a140800f41d09a90002ea509a5800000000b3ba030000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(1),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=20.0.0.1,dst=20.0.0.2)),tnl_pop(4) +recirc_id(0),in_port(5),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1)) +tunnel(src=20.0.0.1,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192.168.10.20,frag=no), packets:1, bytes:98, used:0.0s, actions:set(eth(dst=aa:55:aa:55:00:02)),6 +]) + +# Clear up megaflow cache +ovs-appctl time/warp 11000 + +# N2 to N1 via the L2 GRE tunnel between br-in2 and br-in1 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n2 3a6dd2099cab461e7d1a95a10800450000542c1f40004001791bc0a80a14c0a80a0a0800154b0b6800011b519a580000000054cf0e0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n2 3a6dd2099cab461e7d1a95a10800450000542c744000400178c6c0a80a14c0a80a0a08003f420b6800021c519a580000000029d70e0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(2),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(4) +recirc_id(0),in_port(6),packet_type(ns=0,id=0x0),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(2)) +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth(dst=3a:6d:d2:09:9c:ab),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no), packets:1, bytes:98, used:0.0s, actions:set(eth(dst=aa:55:aa:55:00:01)),5 +]) + +# Clear up megaflow cache +ovs-appctl time/warp 11000 + +# N2 to N3 via br-in1 using the L2 GRE tunnel between br-in2 and br-in1 and the L2 GRE tunnel between br-in1 and br-in3 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n2 1e2ce92a669e461e7d1a95a1080045000054f7d440004001ad51c0a80a14c0a80a1e08000e760c1e000131519a580000000047ee0b0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n2 1e2ce92a669e461e7d1a95a1080045000054f89540004001ac90c0a80a14c0a80a1e0800736f0c1e000232519a5800000000e1f30b0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(1),eth(dst=aa:55:00:00:00:03),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=30.0.0.1,dst=30.0.0.3)),tnl_pop(4) +recirc_id(0),in_port(2),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(4) +recirc_id(0),in_port(6),packet_type(ns=0,id=0x0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(2)) +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth_type(0x0800),ipv4(dst=192.168.10.30,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:03,src=aa:55:00:00:00:01,dl_type=0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(1)) +tunnel(src=30.0.0.1,dst=30.0.0.3,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth(dst=1e:2c:e9:2a:66:9e),eth_type(0x0800),ipv4(dst=192.168.10.30,frag=no), packets:1, bytes:98, used:0.0s, actions:set(eth(dst=aa:55:aa:55:00:03)),7 +]) + +# Clear up megaflow cache +ovs-appctl time/warp 11000 + +# N3 to N1 via br-in2 using the L3 GRE tunnel between br-in3 and br-in2 and the L3 GRE tunnel between br-in2 and br-in1 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n3 3a6dd2099cab1e2ce92a669e080045000054b80440004001ed2bc0a80a1ec0a80a0a0800e17a77d5015e64509a5800000000d3d50c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n3 3a6dd2099cab1e2ce92a669e080045000054b8a240004001ec8dc0a80a1ec0a80a0a0800627177d5015f65509a580000000051de0c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(2),eth(dst=aa:55:00:00:00:01),eth_type(0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,frag=no), packets:1, bytes:122, used:0.0s, actions:set(ipv4(src=10.0.0.2,dst=10.0.0.1)),tnl_pop(4) +recirc_id(0),in_port(3),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no), packets:1, bytes:122, used:0.0s, actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(4) +recirc_id(0),in_port(7),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:pop_eth,tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(3)) +tunnel(src=10.0.0.2,dst=10.0.0.1,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,frag=no), packets:1, bytes:84, used:0.0s, actions:push_eth(src=00:00:00:00:00:00,dst=aa:55:aa:55:00:01,type=0x0800),5 +tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=1,id=0x800),eth_type(0x0800),ipv4(dst=192.168.10.10,tos=0/0x3,frag=no), packets:1, bytes:84, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:01,src=aa:55:00:00:00:02,dl_type=0x0800),ipv4(src=20.0.0.2,dst=20.0.0.1,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x800))),out_port(2)) +]) + +# Clear up megaflow cache +ovs-appctl time/warp 11000 + +# N3 to N2 via L3 GRE tunnel between br-in3 and br-in2 +AT_CHECK([ + ovs-appctl netdev-dummy/receive n3 461e7d1a95a11e2ce92a669e080045000054e5b540004001bf70c0a80a1ec0a80a140800b3f1065b000188509a580000000050360c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n3 461e7d1a95a11e2ce92a669e080045000054e5cf40004001bf56c0a80a1ec0a80a140800a2ed065b000289509a580000000060390c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows dummy@ovs-dummy | strip_used | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(3),eth(dst=aa:55:00:00:00:02),eth_type(0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,frag=no), packets:1, bytes:136, used:0.0s, actions:set(ipv4(src=20.0.0.3,dst=20.0.0.2)),tnl_pop(4) +recirc_id(0),in_port(7),eth_type(0x0800),ipv4(dst=192.168.10.20,tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=aa:55:00:00:00:02,src=aa:55:00:00:00:03,dl_type=0x0800),ipv4(src=30.0.0.3,dst=30.0.0.2,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(3)) +tunnel(src=20.0.0.3,dst=20.0.0.2,flags(-df-csum)),recirc_id(0),in_port(4),packet_type(ns=0,id=0x0),eth(dst=46:1e:7d:1a:95:a1),eth_type(0x0800),ipv4(dst=192.168.10.20,frag=no), packets:1, bytes:98, used:0.0s, actions:set(eth(dst=aa:55:aa:55:00:02)),6 +]) + +### Check the received packets + +AT_CHECK([ + ovs-pcap n1.pcap +], [0], [dnl +aa55aa550001461e7d1a95a10800450000542c1f40004001791bc0a80a14c0a80a0a0800154b0b6800011b519a580000000054cf0e0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa550001461e7d1a95a10800450000542c744000400178c6c0a80a14c0a80a0a08003f420b6800021c519a580000000029d70e0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa550001000000000000080045000054b80440004001ed2bc0a80a1ec0a80a0a0800e17a77d5015e64509a5800000000d3d50c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa550001000000000000080045000054b8a240004001ec8dc0a80a1ec0a80a0a0800627177d5015f65509a580000000051de0c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + +AT_CHECK([ + ovs-pcap n2.pcap +], [0], [dnl +aa55aa5500023a6dd2099cab080045000054500b40004001552fc0a80a0ac0a80a140800531f09a90001e9509a580000000055ba030000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa5500023a6dd2099cab08004500005450934000400154a7c0a80a0ac0a80a140800f41d09a90002ea509a5800000000b3ba030000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa5500021e2ce92a669e080045000054e5b540004001bf70c0a80a1ec0a80a140800b3f1065b000188509a580000000050360c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa5500021e2ce92a669e080045000054e5cf40004001bf56c0a80a1ec0a80a140800a2ed065b000289509a580000000060390c0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + +AT_CHECK([ + ovs-pcap n3.pcap +], [0], [dnl +aa55aa5500033a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa5500033a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa550003461e7d1a95a1080045000054f7d440004001ad51c0a80a14c0a80a1e08000e760c1e000131519a580000000047ee0b0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +aa55aa550003461e7d1a95a1080045000054f89540004001ac90c0a80a14c0a80a1e0800736f0c1e000232519a5800000000e1f30b0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 26f7357..c7febc6 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -77,3 +77,4 @@ m4_include([tests/ovn-sbctl.at]) m4_include([tests/ovn-controller.at]) m4_include([tests/ovn-controller-vtep.at]) m4_include([tests/mcast-snooping.at]) +m4_include([tests/packet-type-aware.at])