From patchwork Sat Jan 11 00:40:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manoj Sharma X-Patchwork-Id: 1221508 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.137; helo=fraxinus.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nutanix.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=proofpoint20171006 header.b=xulbLtgo; dkim-atps=neutral Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47vgyF4hn6z9sP6 for ; Sat, 11 Jan 2020 11:41:09 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id E424086D2C; Sat, 11 Jan 2020 00:41:07 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id t4L3d3BrPnvb; Sat, 11 Jan 2020 00:41:04 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id 5AD3786CD7; Sat, 11 Jan 2020 00:40:57 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3D804C1D8B; Sat, 11 Jan 2020 00:40:57 +0000 (UTC) X-Original-To: ovs-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 D13ECC1D85 for ; Sat, 11 Jan 2020 00:40:55 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id CB451228DB for ; Sat, 11 Jan 2020 00:40:55 +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 vD+6-XETqPvu for ; Sat, 11 Jan 2020 00:40:52 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) by silver.osuosl.org (Postfix) with ESMTPS id DEA8E20335 for ; Sat, 11 Jan 2020 00:40:51 +0000 (UTC) Received: from pps.filterd (m0127840.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00B0Qg7a002859 for ; Fri, 10 Jan 2020 16:40:51 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=proofpoint20171006; bh=OB+Lnyv0PEDtL+i1xbt2oQaODzIpfRBbDHKk08n/RPg=; b=xulbLtgohIVS6qvMU0lTd3+lizmTgm/Kw/g7hTuj66g9dy/0p++JWweoWfRjFN7QASoz 2Uaav6hGGjENcBg280ArSG37Ee6ENFroXV/3CVLH1JQHZ5bvqDAaZKYEBTq8nv5kufYd KeHD21pX+tojIyWTN3rJN8rKOEbG00wownwClmlakE2ZYrBGSsKIw69V9zko2ryuE77u OB08+2bI1S0WQTcV0nqjgX4AxViFM7d4Ovkj3tkdi/2ul5hm+of1aHhKfa2FTzEFy5ce 0dXXKzI0EyqQyuddzpgUM50rLKt3ae3j3dBNQ+0A3Kq+A/ngt6+W1A2jn+tLRrOgDMFC tg== Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2100.outbound.protection.outlook.com [104.47.58.100]) by mx0a-002c1b01.pphosted.com with ESMTP id 2xex13rptg-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 10 Jan 2020 16:40:50 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AuVWeIJl8QRCftUy1I2a78OCLFBTw3Vd8UdveU62lll6mGwOcLEukN0goF5IDz5KvRh6lDVkpbAlvxoXPgM3sOj1l0laSP9dru6iQi6pMFaSjfmgBZerJ9+nBE9lZDvVo0hZ5HZA+yR+YUrzFd0lQEdOkb9uwBnie+HjAMDJ27j4iMbUF7IMX1s2SZUbGrNKA6PyaV9EizWi75C5uDj4Ma87ZbRNxUIpsq4zaLZJ1VbmS+M5XisHTlv+1YPQ8h9a6keG3uuVew+ZnJj7deSCIXX9i+tu3EzGvU9equ/Bj18ITYbAuRrnumTdc46rblTeTwyKtqtKjh77eeKO+kBSUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OB+Lnyv0PEDtL+i1xbt2oQaODzIpfRBbDHKk08n/RPg=; b=EXhkeEg6r/9Ms0v6elmKI1dfeVHgIChLQxexiTOTebS3nKWcrCJ7ctgH6ylBr0MzeR308mWyMOFwAHjU10OnYQnAVbTwkAik3XcDDjWdVQXdWdrBAkvGdByEd1DjJqZZBryLJUQBaesIqKaAg5Ud5fOFVDMd6q1yp/qNCrKpn+lvdMjZtqBYplldxuQo0cgW/ZxaAwqYrJwaWHtBXhP9LlP6daNtB4UMEYnWf6BSVO3wHSHahi6fYWDMy3Ue0R3mqIxaLDnDAtiI+rcPrsR968vm5zhpQONU4/omAeoJUcEX5xGe6uup9/g5Wd+25M1ypgu3ysJLz4vxxDGznpwUzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none Received: from BYAPR02MB4614.namprd02.prod.outlook.com (52.135.238.212) by BYAPR02MB5608.namprd02.prod.outlook.com (20.177.229.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.11; Sat, 11 Jan 2020 00:40:50 +0000 Received: from BYAPR02MB4614.namprd02.prod.outlook.com ([fe80::c08e:617f:5b69:a4d3]) by BYAPR02MB4614.namprd02.prod.outlook.com ([fe80::c08e:617f:5b69:a4d3%6]) with mapi id 15.20.2602.019; Sat, 11 Jan 2020 00:40:49 +0000 Received: from localhost.localdomain (192.146.154.3) by BY5PR04CA0016.namprd04.prod.outlook.com (2603:10b6:a03:1d0::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.2623.9 via Frontend Transport; Sat, 11 Jan 2020 00:40:49 +0000 From: Manoj Sharma To: "ovs-dev@openvswitch.org" Thread-Topic: [PATCH v2 ovn 3/3] Forwarding group to load balance l2 traffic with liveness detection Thread-Index: AQHVyBfFxQCV/q/Qbkq+EtyJ1u8w+A== Date: Sat, 11 Jan 2020 00:40:49 +0000 Message-ID: <20200111004027.21707-4-manoj.sharma@nutanix.com> References: <20200111004027.21707-1-manoj.sharma@nutanix.com> In-Reply-To: <20200111004027.21707-1-manoj.sharma@nutanix.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR04CA0016.namprd04.prod.outlook.com (2603:10b6:a03:1d0::26) To BYAPR02MB4614.namprd02.prod.outlook.com (2603:10b6:a03:5b::20) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.2 (Apple Git-113) x-originating-ip: [192.146.154.3] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0fde1f6e-1782-432d-e152-08d7962ee79d x-ms-traffictypediagnostic: BYAPR02MB5608: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-proofpoint-crosstenant: true x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0279B3DD0D x-forefront-antispam-report: SFV:SPM; SFS:(10019020)(346002)(136003)(366004)(39860400002)(396003)(376002)(199004)(189003)(66574012)(6506007)(5660300002)(52116002)(71200400001)(6916009)(2616005)(8676002)(86362001)(1076003)(8936002)(186003)(26005)(316002)(16526019)(81156014)(81166006)(44832011)(478600001)(4326008)(66446008)(66946007)(64756008)(956004)(66476007)(6512007)(6486002)(69590400006)(36756003)(2906002)(66556008)(107886003)(64030200002); DIR:OUT; SFP:1501; SCL:5; SRVR:BYAPR02MB5608; H:BYAPR02MB4614.namprd02.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nutanix.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: n5Nuo6kmejW0YHJAF4cKNu8zf2BuY0yGLaERNHpfBr2lYqISpTurlXBFjwxoewoMh0BlKYXAk8/M7R7ckyktFnqWrvhoiub6qyv63KyDEeXkJxj6ns0IWywu4GprAW402QH6HjWUKk+9i9fPSu1aVrhYHeWhXPIQDorPmUM3FD5btuc8XRnhtk/BUK3c+mFUSvmsEkmnPgb32DYdfeXZ2nxibt15pMJEY5DZxEZWv8KwuHwirZw7nIA6UXErdqxQstxjEz2hjDpd3D659MR+AxP/OGrFgijcEatBT1RPcouTT1eVpBdBNgA8njU1VsgqbXE2w0os/qrPWk5IRe69F00aNn5COHGt78XjOtyr5bQxjhqbuMQ0dVafSvaknoLUoCoRJHVRnyf82G/qFKbj3HfLAMlw/L9kNROeBQpLKnCROr1vcTbLMsjlpx5M/KAESSlGSCXzAxfzeejnaqPpLP3kVTI3mHJC2hF+8+I5fPk5mZ97mFAtYmoqV9cfVDrcmNNxkJE86YD8dT7zp+PQ4VyEhzZmxDZM8O4GS6UmNPns9J1G3ajaAbgDmt0GqJ4C3Qf4ikmEmfjsOytmGN+N0JwuJLv87O1kjk/J6LnPQxJyGJhg5uAO17f6/5yV39BJNgNmUJ9mk02K4/311VJc89X825Y6blZtZI3O6eXE9wZD7EfdvrsncQLsJ930xaYScRgAaVk0BytQYn/CWhPtaWXx//PzMXZhAkh7Fd8wHPAyROsT1VlRFtu1MKhxO8kVkUQ4wfC4igBH1wV6lLiSz5h4EDhH5H2Y+i5tfYDi3kPSwgep6kf0TXWXSn4Luu/f MIME-Version: 1.0 X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fde1f6e-1782-432d-e152-08d7962ee79d X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jan 2020 00:40:49.8568 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: H2Quohqz6/hkcSLeuRA1fKKX9TN3lRSCqnNAVlA9vwSZraEyBJIW5F2lHBgQJpkk+0lq+HhK3TIh69bGKYFh1hjW7w6BhmC5YEczbWJBB7Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR02MB5608 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-01-10_04:2020-01-10, 2020-01-10 signatures=0 X-Proofpoint-Spam-Reason: safe Subject: [ovs-dev] [PATCH v2 ovn 3/3] Forwarding group to load balance l2 traffic with liveness detection 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: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Unit tests for forwarding group Signed-off-by: Manoj Sharma --- tests/ovn-nbctl.at | 37 ++++++++++++++++ tests/ovn.at | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at index 2679f1f..077c41e 100644 --- a/tests/ovn-nbctl.at +++ b/tests/ovn-nbctl.at @@ -1735,6 +1735,43 @@ $SW1P2 AT_CHECK([ovn-nbctl pg-del pg1], [0], [ignore]) AT_CHECK([ovn-nbctl list port_group], [0], []) ]) +dnl --------------------------------------------------------------------- + +OVN_NBCTL_TEST([ovn_nbctl_fwd_groups], [fwd groups], [ + +dnl Add fwd-group to a non-existent logical switch +AT_CHECK([ovn-nbctl fwd-group-add fwd_grp1 ls0 10.1.1.11 00:11:22:33:44:55 lsp1 lsp2], [1], [], + [ovn-nbctl: ls0: switch name not found +]) + +AT_CHECK([ovn-nbctl ls-add ls0]) + +dnl Add fwd-group with non-existent logical switch ports +AT_CHECK([ovn-nbctl fwd-group-add fwd_grp1 ls0 10.1.1.11 00:11:22:33:44:55 lsp1 lsp2], [1], [], + [ovn-nbctl: lsp1: logical switch port does not exist +]) + +AT_CHECK([ovn-nbctl lsp-add ls0 lsp1]) +AT_CHECK([ovn-nbctl lsp-add ls0 lsp2]) +AT_CHECK([ovn-nbctl fwd-group-add fwd_grp1 ls0 10.1.1.11 00:11:22:33:44:55 lsp1 lsp2]) +AT_CHECK([ovn-nbctl fwd-group-list ls0], [0], [dnl +FWD_GROUP LS VIP VMAC CHILD_PORTS +fwd_grp1 ls0 10.1.1.11 00:11:22:33:44:55 lsp1 lsp2 +]) +AT_CHECK([ovn-nbctl --bare --columns=name list forwarding_group], [0], +[fwd_grp1 +]) + +dnl Add duplicate fwd-group +AT_CHECK([ovn-nbctl fwd-group-add fwd_grp1 ls0 10.1.1.11 00:11:22:33:44:55 lsp1 lsp2], [1], [], + [ovn-nbctl: fwd_grp1: a forwarding group by this name already exists +]) + +dnl Delete fwd-group +AT_CHECK([ovn-nbctl fwd-group-del fwd_grp1], [0], [ignore]) +AT_CHECK([ovn-nbctl list forwarding_group], [0], []) + +]) AT_SETUP([ovn-nbctl - daemon retry connection]) OVN_NBCTL_TEST_START daemon diff --git a/tests/ovn.at b/tests/ovn.at index 411b768..b8e8eba 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -17338,3 +17338,127 @@ OVS_WAIT_UNTIL([ OVN_CLEANUP([hv1]) AT_CLEANUP + +AT_SETUP([ovn -- forwarding group: 3 HVs, 1 LR, 2 LS]) +AT_KEYWORDS([forwarding-group]) +ovn_start + +# Logical network: +# One LR - R1 has a logical switch ls1 and ls2 connected to it. +# Logical switch ls1 has one port while ls2 has two logical switch ports as +# child ports. +ovn-nbctl lr-add R1 +ovn-nbctl ls-add ls1 +ovn-nbctl ls-add ls2 + +# Logical switch ls1 to R1 connectivity +ovn-nbctl lrp-add R1 R1-ls1 00:00:00:01:02:f1 192.168.1.1/24 +ovn-nbctl lsp-add ls1 ls1-R1 -- set Logical_Switch_Port ls1-R1 \ + type=router options:router-port=R1-ls1 -- lsp-set-addresses ls1-R1 router +ovn-nbctl lsp-add ls1 lsp11 \ + -- lsp-set-addresses lsp11 "00:00:00:01:02:01 192.168.1.2" + +# Logical switch ls2 to R1 connectivity +ovn-nbctl lrp-add R1 R1-ls2 00:00:00:01:02:f2 172.16.1.1/24 +ovn-nbctl lsp-add ls2 ls2-R1 -- set Logical_Switch_Port ls2-R1 \ + type=router options:router-port=R1-ls2 -- lsp-set-addresses ls2-R1 router +ovn-nbctl lsp-add ls2 lsp21 \ + -- lsp-set-addresses lsp21 "00:00:00:01:02:01 172.16.1.2" +ovn-nbctl lsp-add ls2 lsp22 \ + -- lsp-set-addresses lsp22 "00:00:00:01:02:02 172.16.1.3" + +# Create a network +net_add n1 + +# Create hypervisor hv1 connected to n1 +sim_add hv1 +as hv1 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.1 +ovs-vsctl add-port br-int vif1 -- set Interface vif1 external-ids:iface-id=lsp11 options:tx_pcap=hv1/vif1-tx.pcap options:rxq_pcap=hv1/vif1-rx.pcap ofport-request=1 + +# Create hypervisor hv2 connected to n1 +sim_add hv2 +as hv2 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.2 +ovs-vsctl add-port br-int vif2 -- set Interface vif2 external-ids:iface-id=lsp21 options:tx_pcap=hv2/vif2-tx.pcap options:rxq_pcap=hv2/vif2-rx.pcap ofport-request=1 + +# Create hypervisor hv3 connected to n1 +sim_add hv3 +as hv3 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.3 +ovs-vsctl add-port br-int vif3 -- set Interface vif3 external-ids:iface-id=lsp22 options:tx_pcap=hv3/vif3-tx.pcap options:rxq_pcap=hv3/vif3-rx.pcap ofport-request=1 + +# Add a forwarding group on ls2 with lsp21 and lsp22 as child ports +# virtual IP - 172.16.1.11, virtual MAC - 00:11:de:ad:be:ef +ovn-nbctl fwd-group-add fwd_grp1 ls2 172.16.1.11 00:11:de:ad:be:ef lsp21 lsp22 + +# Allow some time for ovn-northd and ovn-controller to catch up. +sleep 1 + +# Check logical flow +AT_CHECK([ovn-sbctl dump-flows | grep ls_in_l2_lkup | grep fwd_group | wc -l], [0], [dnl +1 +]) + +# Check openflow rule with "group" on hypervisor +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | \ + grep "dl_dst=00:11:de:ad:be:ef actions=group" | wc -l], [0], [dnl +1 +]) + +# Verify openflow group members +for child_port in lsp21 lsp22; do + tunnel_key=`ovn-sbctl --bare --column tunnel_key find port_binding logical_port=$child_port` + AT_CHECK([as hv1 ovs-ofctl -O OpenFlow13 dump-groups br-int | \ + grep "bucket=actions=load:0x"$tunnel_key | wc -l], [0], [dnl +1 +]) +done + +# Send a packet to virtual IP +src_mac=00:00:00:01:02:01 +dst_mac=00:00:00:01:02:f1 +src_ip=192.168.1.2 +dst_ip=172.16.1.11 +packet="inport==\"lsp11\" && eth.src==$src_mac && eth.dst==$dst_mac && + ip4 && ip.ttl==64 && ip4.src==$src_ip && ip4.dst==$dst_ip && + udp && udp.src==53 && udp.dst==4369" +as hv1 ovs-appctl -t ovn-controller inject-pkt "$packet" + +# Check if the packet hit the forwarding group policy +AT_CHECK([as hv1 ovs-ofctl dump-flows br-int | \ + grep "dl_dst=00:11:de:ad:be:ef actions=group" | \ + grep "n_packets=1" | wc -l], [0], [dnl +1 +]) + +# Delete the forwarding group +ovn-nbctl fwd-group-del fwd_grp1 + +# Add a forwarding group with liveness on ls2 with lsp21 and lsp22 as child +# ports virtual IP - 172.16.1.11, virtual MAC - 00:11:de:ad:be:ef +ovn-nbctl --liveness fwd-group-add fwd_grp1 ls2 172.16.1.11 00:11:de:ad:be:ef lsp21 lsp22 + +# Allow some time for ovn-northd and ovn-controller to catch up. +sleep 1 + +# Verify openflow group members +ofport_lsp21=$(as hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-hv2-0) +tunnel_key=`ovn-sbctl --bare --column tunnel_key find port_binding logical_port=lsp21` +AT_CHECK([as hv1 ovs-ofctl -O OpenFlow13 dump-groups br-int | \ + grep "bucket=watch_port:$ofport_lsp21,actions=load:0x"$tunnel_key | wc -l], [0], [dnl +1 +]) + +ofport_lsp22=$(as hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-hv3-0) +tunnel_key=`ovn-sbctl --bare --column tunnel_key find port_binding logical_port=lsp22` +AT_CHECK([as hv1 ovs-ofctl -O OpenFlow13 dump-groups br-int | \ + grep "bucket=watch_port:$ofport_lsp22,actions=load:0x"$tunnel_key | wc -l], [0], [dnl +1 +]) + +OVN_CLEANUP([hv1], [hv2], [hv3]) +AT_CLEANUP