From patchwork Fri Jun 30 15:29:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zoltan Balogh X-Patchwork-Id: 782898 X-Patchwork-Delegate: blp@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 3wzgW21d2Jz9sNS for ; Sat, 1 Jul 2017 01:31:58 +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="Dy7FILhc"; dkim-atps=neutral Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id A9071AC8; Fri, 30 Jun 2017 15:29:42 +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 885ADA7F for ; Fri, 30 Jun 2017 15:29:41 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sesbmg22.ericsson.net (sesbmg22.ericsson.net [193.180.251.48]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 7A8A6237 for ; Fri, 30 Jun 2017 15:29:39 +0000 (UTC) X-AuditID: c1b4fb30-703ff70000001664-83-59566e610ac7 Received: from ESESSHC013.ericsson.se (Unknown_Domain [153.88.183.57]) by sesbmg22.ericsson.net (Symantec Mail Security) with SMTP id 3B.72.05732.16E66595; Fri, 30 Jun 2017 17:29:37 +0200 (CEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.57) with Microsoft SMTP Server (TLS) id 14.3.352.0; Fri, 30 Jun 2017 17:29:36 +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=FAVURgFa51r5MwBcdMDB/NsrnsyP6k46ABDN0GFf2xQ=; b=Dy7FILhcg0TfnZWDAUMChm7E932And2HkhQ2IkSVY21SWfoOdbVfrzXiyGIfwG3CgD+bMCc9uceLmJTtyrOetfjvRze2UrtUxdLHKSHCMLzdyL8wTLv2uMNKxWZRmWiGvmxxQlo6VGU+J7XxfRqyJPzzIo4sMoQRp7Z2oyriA78= Received: from AM2PR07MB1042.eurprd07.prod.outlook.com (10.162.37.27) by AM2PR07MB0866.eurprd07.prod.outlook.com (10.161.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.6; Fri, 30 Jun 2017 15:29:36 +0000 Received: from AM2PR07MB1042.eurprd07.prod.outlook.com ([fe80::24fe:c1d2:514c:dcb7]) by AM2PR07MB1042.eurprd07.prod.outlook.com ([fe80::24fe:c1d2:514c:dcb7%14]) with mapi id 15.01.1220.014; Fri, 30 Jun 2017 15:29:36 +0000 From: =?iso-8859-1?Q?Zolt=E1n_Balogh?= To: "'dev@openvswitch.org'" Thread-Topic: [PATCH 3/4] ofproto-dpif-xlate: drop L3 packets on L2 legacy port Thread-Index: AdLxtQ1SYI7v1J5XS5+BjBlC4GEOoQ== Date: Fri, 30 Jun 2017 15:29:35 +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-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM2PR07MB0866; 7:lkQwa/8DhpF8b1cboIjFoowBWrVu4cajTSwN4U+zTTgPFdsiW1D3LXSHKrDNfjG/nsR2Z3sTVcMkfZDE1Ig4Dgnrm0f4hfuc7fPo47nLlGPL6bFXxCMEhMx+/MsG6Geicjfie3aEYb3ucE5QXI2s6k1J8eqmYO5px2FcxHHbpXW+o3CmuTYQtZ5s7zn0kXeMoKpEDD0/QgDROqT0qcr2wITKlZ27N3OoP9aOs+lw77LM8o0F4RWY5uGNMf3K3qA6/ieE9FMFcfdOysf4fCSU5KIwRoMb70uBncn9OZIAK0YGbDz/HIaDxoRFo/CvB0ePdfRNTcfWWd3dOCvSIAoUtnrN9NNtWz8lpqNPbcNzJvGa0hD6exAhbcO/fqNpLSRnVDJuTf2cYebLSYuAV11pWUUtiGj5H6Dhvy+05ES/lsIPstS/7JkS0+i42t+etiuoiYaAuX7qSvhLjaiOfFnckPisGPEhIN28Ti3t9yZIhxdWnYXLRkIgMPsVY79DhGEYSxV5toykVi67JlIEaZz+pYW0S+ONn04IXT4ZTea8+nWP01dyOh8JSHiyIFe2zUXBU0pm7CPNzb0A7Bwa4DSo8KYdaZS/aoF1qplokgkWh4s1aPFAiCQlj3+ykWvA0AJhz7vzotoC9iwtOR0Re3kHvYRclwb3MJx1EYcbjxmycOy/UTR/lI+GkzEr0AU8q8TwT1fdKSWRhL/iUQhZPoo88UMq0715ZsGt0mcXmRfe7HeHs35goPh9llh960xHq1Hz8KY/Om7XHxAz6UsbDuAtHydl5ZHALc3efFXsni/Pkis= x-ld-processed: 92e84ceb-fbfd-47ab-be52-080c6b87953f,ExtAddr x-ms-office365-filtering-correlation-id: 34170b66-1ab0-4bcf-61fc-08d4bfccd0a6 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:AM2PR07MB0866; x-ms-traffictypediagnostic: AM2PR07MB0866: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(37575265505322)(236129657087228)(36556875275162); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(2017060910020)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM2PR07MB0866; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM2PR07MB0866; x-forefront-prvs: 0354B4BED2 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(39450400003)(39860400002)(39840400002)(39400400002)(39850400002)(39410400002)(54906002)(55016002)(4326008)(99286003)(2906002)(575784001)(9686003)(53946003)(86362001)(305945005)(66066001)(189998001)(6116002)(102836003)(53936002)(3846002)(74316002)(25786009)(38730400002)(3280700002)(110136004)(3660700001)(8676002)(50986999)(6916009)(81166006)(14454004)(6436002)(7696004)(33656002)(5250100002)(54356999)(8936002)(7736002)(230783001)(2900100001)(5660300001)(6506006)(478600001)(491001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM2PR07MB0866; 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: 30 Jun 2017 15:29:35.9631 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR07MB0866 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsUyM2K7pW5iXlikQeNOPYtXkxsYLY6e3sNs sWLTaWaL31+3MTmweCze85LJ49nN/4wez6/1sHi833eVLYAlissmJTUnsyy1SN8ugSvjYvt9 9oItvYwVV27yNjDeKeti5OSQEDCRePr3I2MXIxeHkMARRonD6zeyQTgnGCVmvVnFBFLFItDL LLF6uj+ILSQwlUli0890iKLHjBLHV21nBUmwCThLXN/9kg3EFhEwlLg06SQrSBGzwAtGifYJ f9m7GDk4hAW8JB63BYKYIgKBEtt28kOU60ls2LycHWKXqsTT5j3MIDavQIzEpe2LGEFsRgEx ie+n1oDdwywgLnHryXwmiA8EJJbsOc8MYYtKvHz8D2wto8BsRom/O1ugihQkNi14zw5hy0pc mt8N9rKEwAM2iRvHFrBCJGwkZnRPZwY5TkLAV+LrHl2ImkdMEquuH4Fq1pJo2zmNBaImW+LO FiOIcLTEnsbnzBD1F1klPv7bxwaRkJE41nCbFSIxhVXiw+pWsEHCAlISd690Mk5g1JqF5CMI W0/ixtQpbBC2tsSyha+ZZ4FDQ1Di5MwnLAsYWVYxihanFiflphsZ6aUWZSYXF+fn6eWllmxi BKaXg1t+G+xgfPnc8RCjAAejEg/vsaiwSCHWxLLiytxDjBIczEoivLpZQCHelMTKqtSi/Pii 0pzU4kOM0hwsSuK8jvsuRAgJpCeWpGanphakFsFkmTg4pRoYS4t0FnvffVjuo6dh4nvs0Y6N 2ce+VNQYf/qSan8gU/zPp2zO953/tydwiFR8cf/+3NBplqbYW56++A0d/n92vlqkNtPpvccV H4mq6ac1NVlCV6htqzlymvnez+gN3WoX02Tifp4TfvuBPe3FfifbMJE1YuaeTjMWVz6x+bBg qdVuGWFH763hSizFGYmGWsxFxYkAmAy1YCsDAAA= X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,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 Cc: "Jiri Benc \(jbenc@redhat.com\)" Subject: [ovs-dev] [PATCH 3/4] ofproto-dpif-xlate: drop L3 packets on L2 legacy port 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 This commit drops packet during xlate if it is a L3 packet and output port packet_type is legacy_l2. It completes PTAP unit tests with: - Send L3 packet over patch port. - Output L2/L3 packet to ports with different packet_type properties. Signed-off-by: Zoltán Balogh --- ofproto/ofproto-dpif-xlate.c | 23 +++- tests/packet-type-aware.at | 304 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 320 insertions(+), 7 deletions(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 575c59e..a157fc9 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -3314,6 +3314,14 @@ check_output_prerequisites(struct xlate_ctx *ctx, return false; } } + + if (xport->pt_mode == NETDEV_PT_LEGACY_L2 && + flow->packet_type != htonl(PT_ETH)) { + xlate_report(ctx, OFT_WARN, "Trying to send non-Ethernet packet " + "through legacy L2 port. Dropping packet."); + return false; + } + return true; } @@ -3347,6 +3355,10 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port, odp_port_t out_port, odp_port, odp_tnl_port; bool is_native_tunnel = false; uint8_t dscp; + struct eth_addr flow_dl_dst = flow->dl_dst; + struct eth_addr flow_dl_src = flow->dl_src; + ovs_be32 flow_packet_type = flow->packet_type; + ovs_be16 flow_dl_type = flow->dl_type; /* If 'struct flow' gets additional metadata, we'll need to zero it out * before traversing a patch port. */ @@ -3363,13 +3375,6 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port, flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE, ntohs(flow->dl_type)); } - } else { - /* Add dummy Ethernet header for legacy L2 port. */ - if (xport->pt_mode == NETDEV_PT_LEGACY_L2) { - flow->packet_type = htonl(PT_ETH); - flow->dl_dst = eth_addr_zero; - flow->dl_src = eth_addr_zero; - } } if (xport->peer) { @@ -3629,6 +3634,10 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port, /* Restore flow */ memcpy(flow->vlans, flow_vlans, sizeof flow->vlans); flow->nw_tos = flow_nw_tos; + flow->dl_dst = flow_dl_dst; + flow->dl_src = flow_dl_src; + flow->packet_type = flow_packet_type; + flow->dl_type = flow_dl_type; } static void diff --git a/tests/packet-type-aware.at b/tests/packet-type-aware.at index 1104078..a1be7ca 100644 --- a/tests/packet-type-aware.at +++ b/tests/packet-type-aware.at @@ -461,3 +461,307 @@ aa55aa550003461e7d1a95a1080045000054f89540004001ac90c0a80a14c0a80a1e0800736f0c1e OVS_VSWITCHD_STOP(["/The Open vSwitch kernel module is probably not loaded/d"]) AT_CLEANUP + + +AT_SETUP([ptap - L3 over patch port]) + +######################## +# L3 over patch port +# +# (192.168.10.10) (192.168.10.30) +# n0 n1 +# | | +# +--o------+ +--o------+ +# | br0 | | br1 | +# +------o--+ +--o---o--+ +# p0 | p1 | gre1 (ptap) +# +---------------+ 10.0.0.1 +# +# LOCAL +# +------o--+ +# | br2 | +# +------o--+ +# | +# n2 +# 10.0.0.2 + +HWADDR_BRP2=aa:55:00:00:00:02 + +OVS_VSWITCHD_START([dnl + -- add-br br1 \ + -- set bridge br1 datapath_type=dummy fail-mode=secure \ + -- add-br br2 \ + -- set bridge br2 datapath_type=dummy fail-mode=secure \ + other_config:hwaddr=\"$HWADDR_BRP2\" \ + -- add-port br0 p0 \ + -- set interface p0 type=patch options:peer=p1 ofport_request=10 \ + -- add-port br1 p1 \ + -- set interface p1 type=patch options:peer=p0 ofport_request=20 \ + -- add-port br0 n0 \ + -- set interface n0 type=dummy ofport_request=30 \ + -- add-port br1 n1 \ + -- set interface n1 type=dummy options:tx_pcap=n1.pcap ofport_request=40 \ + -- add-port br2 n2 \ + -- set interface n2 type=dummy options:tx_pcap=n2.pcap ofport_request=50 \ + -- add-port br1 gre1 \ + -- set interface gre1 type=gre options:remote_ip=10.0.0.2 \ + options:packet_type=ptap ofport_request=100 +]) + +### Verify datapath configuration +AT_CHECK([ + ovs-appctl dpif/show | grep -v hit | sed 's/\t/ /g' | sed 's./[[0-9]]\{1,\}..' +], [0], [dnl + br0: + br0 65534: (dummy-internal) + n0 30: (dummy) + p0 10/none: (patch: peer=p1) + br1: + br1 65534: (dummy-internal) + gre1 100: (gre: packet_type=ptap, remote_ip=10.0.0.2) + n1 40: (dummy) + p1 20/none: (patch: peer=p0) + br2: + br2 65534: (dummy-internal) + n2 50: (dummy) +]) + +AT_CHECK([ + ovs-appctl netdev-dummy/ip4addr br2 10.0.0.1/24 && + ovs-appctl ovs/route/add 10.0.0.0/24 br2 && + ovs-appctl tnl/arp/set br2 10.0.0.2 de:af:be:ef:ba:be +], [0], [ignore]) + +AT_CHECK([ + ovs-appctl ovs/route/show | grep User: +], [0], [dnl +User: 10.0.0.0/24 dev br2 SRC 10.0.0.1 +]) + + +AT_CHECK([ + ovs-ofctl del-flows br0 && + ovs-ofctl del-flows br1 && + ovs-ofctl del-flows br2 && + ovs-ofctl add-flow br0 in_port=n0,actions=decap,output=p0 -OOpenFlow13 && + ovs-ofctl add-flow br1 in_port=p1,actions=output=gre1 && + ovs-ofctl add-flow br2 in_port=LOCAL,actions=output=n2 +], [0]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | grep actions], +[0], [dnl + in_port=30 actions=decap(),output:10 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br1 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=20 actions=output:100 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br2 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=LOCAL actions=output:50 +]) + +AT_CHECK([ + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep -v ipv6 | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(br2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:1, bytes:122, used:0.0s, actions:n2 +recirc_id(0),in_port(n0),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:pop_eth,tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=de:af:be:ef:ba:be,src=aa:55:00:00:00:02,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=0x800))),out_port(br2)) +]) + +AT_CHECK([ + ovs-pcap n2.pcap +], [0], [dnl +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + + +dnl output L3 to ports with different packet_type properties +ovs-appctl time/warp 11000 + +## L3 packet over L2 legacy port + +AT_CHECK([ + ovs-ofctl del-flows br0 && + ovs-ofctl del-flows br1 && + ovs-ofctl del-flows br2 && + ovs-ofctl add-flow br0 in_port=n0,actions=decap,output=p0 -OOpenFlow13 && + ovs-ofctl add-flow br1 in_port=p1,actions=output=n1 +], [0]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | grep actions], +[0], [dnl + in_port=30 actions=decap(),output:10 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br1 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=20 actions=output:40 +]) + +AT_CHECK([ + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep -v ipv6 | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(n0),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:1, bytes:98, used:0.0s, actions:drop +]) + +AT_CHECK([ + ovs-pcap n1.pcap +], [0], [dnl +]) + +## L3 packet over ptap and L2 legacy port + +AT_CHECK([ + ovs-ofctl del-flows br0 && + ovs-ofctl del-flows br1 && + ovs-ofctl del-flows br2 && + ovs-ofctl add-flow br0 in_port=n0,actions=decap,output=p0 -OOpenFlow13 && + ovs-ofctl add-flow br1 in_port=p1,actions=output=n1,gre1 && + ovs-ofctl add-flow br2 in_port=LOCAL,actions=output=n2 +], [0]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | grep actions], +[0], [dnl + in_port=30 actions=decap(),output:10 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br1 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=20 actions=output:40,output:100 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br2 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=LOCAL actions=output:50 +]) + +AT_CHECK([ + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep -v ipv6 | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(br2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:1, bytes:122, used:0.0s, actions:n2 +recirc_id(0),in_port(n0),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:pop_eth,tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=de:af:be:ef:ba:be,src=aa:55:00:00:00:02,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=0x800))),out_port(br2)) +]) + +AT_CHECK([ + ovs-pcap n1.pcap +], [0], [dnl +]) + +AT_CHECK([ + ovs-pcap n2.pcap +], [0], [dnl +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + + +## L2 packet over L3 legacy port and L2 legacy port +ovs-appctl time/warp 11000 + +AT_CHECK([ + ovs-vsctl set interface gre1 type=gre options:remote_ip=10.0.0.2 \ + options:packet_type=legacy_l3 ofport_request=100 +], [0]) + +### Verify datapath configuration +AT_CHECK([ + ovs-appctl dpif/show | grep -v hit | sed 's/\t/ /g' | sed 's./[[0-9]]\{1,\}..' +], [0], [dnl + br0: + br0 65534: (dummy-internal) + n0 30: (dummy) + p0 10/none: (patch: peer=p1) + br1: + br1 65534: (dummy-internal) + gre1 100: (gre: packet_type=legacy_l3, remote_ip=10.0.0.2) + n1 40: (dummy) + p1 20/none: (patch: peer=p0) + br2: + br2 65534: (dummy-internal) + n2 50: (dummy) +]) + +AT_CHECK([ + ovs-ofctl del-flows br0 && + ovs-ofctl del-flows br1 && + ovs-ofctl del-flows br2 && + ovs-ofctl add-flow br0 in_port=n0,actions=output=p0 && + ovs-ofctl add-flow br1 in_port=p1,actions=output=n1,gre1 && + ovs-ofctl add-flow br2 in_port=LOCAL,actions=output=n2 +], [0]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=30 actions=output:10 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br1 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=20 actions=output:40,output:100 +]) + +AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br2 | ofctl_strip | grep actions], +[0], [dnl + reset_counts in_port=LOCAL actions=output:50 +]) + +AT_CHECK([ + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 + ovs-appctl netdev-dummy/receive n0 1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +], [0], [ignore]) + +ovs-appctl time/warp 1000 + +AT_CHECK([ + ovs-appctl dpctl/dump-flows --names dummy@ovs-dummy | strip_used | grep -v ipv6 | sort +], [0], [flow-dump from non-dpdk interfaces: +recirc_id(0),in_port(br2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:1, bytes:122, used:0.0s, actions:n2 +recirc_id(0),in_port(n0),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0/0x3,frag=no), packets:1, bytes:98, used:0.0s, actions:n1,pop_eth,tnl_push(tnl_port(gre_sys),header(size=38,type=3,eth(dst=de:af:be:ef:ba:be,src=aa:55:00:00:00:02,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=0x800))),out_port(br2)) +]) + +AT_CHECK([ + ovs-pcap n1.pcap +], [0], [dnl +1e2ce92a669e3a6dd2099cab0800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +1e2ce92a669e3a6dd2099cab0800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + +AT_CHECK([ + ovs-pcap n2.pcap +], [0], [dnl +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a53400040011addc0a80a0ac0a80a1e08006f200a4d0001fc509a58000000002715020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +deafbeefbabeaa550000000208004500006c00004000402f26610a0000010a00000200000800450000548a83400040011aadc0a80a0ac0a80a1e0800b7170a4d0002fd509a5800000000de1c020000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP