From patchwork Fri Nov 4 09:00:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 1699405 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=21tXYpKs; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4N3ZMq31RWz1yqS for ; Fri, 4 Nov 2022 20:00:23 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 94302610AB; Fri, 4 Nov 2022 09:00:21 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 94302610AB Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=21tXYpKs X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PpftmKTMB4LS; Fri, 4 Nov 2022 09:00:20 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 12CED6104E; Fri, 4 Nov 2022 09:00:19 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 12CED6104E Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E1A9BC0033; Fri, 4 Nov 2022 09:00:18 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2A534C0070 for ; Fri, 4 Nov 2022 09:00:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id B02D841821 for ; Fri, 4 Nov 2022 09:00:08 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org B02D841821 Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=mail.schwarz header.i=@mail.schwarz header.a=rsa-sha256 header.s=selector1 header.b=21tXYpKs X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wWAwnMCIlFkx for ; Fri, 4 Nov 2022 09:00:07 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org A0BE4409A3 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2122.outbound.protection.outlook.com [40.107.105.122]) by smtp4.osuosl.org (Postfix) with ESMTPS id A0BE4409A3 for ; Fri, 4 Nov 2022 09:00:06 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H/6hM1wE9uJOiXdEfa+t4gpzcIW1AwVK7F1mlj0AqrDCeCo49FIgUfe3qWy9lg0QmAaYi3PK4PEVUpMVDqdbAMJFbg0W3lr/fUk2awaYfk7xwKcHYuRA7/Bty1ymrXTaP2rSEmEFxoDlmKsuZ4zT6xM+OFTXQMBMyMEdUHj5oN+k3uOUjFlPrXlsUPyUtBu9Bmsj4UdMF1JrQbd0JopXquROTtBehDs9/fBJ4TeGIKwvGePGEFyFLk+2t2V+quxqWaLDOjyXptCCYy3I8w4mqp3AjBLAF1T0gneUwYMKA6pIHK0KEAp/kNhUOezHd/PFXLfaKhLldknW2/6axNR4rw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cCIkaFQ43awnJtS9vDlqr+s0mL1nOfnEvyZac1YVeC8=; b=lfmDBtRxWXAkxxXgo5oN76u0iKgSlPQE7kPqYequQU6zvHSmOtknCcCLYLvbh5QndIjdmF2RV8NEfH/5fb/j0h8gtx8qct/d/hkV9Iz5FV9VKa6S9xvmoCO+AWS0jv7XhCI6EvNKC2A3VBFa/9JiB209YNNK+2zv9NAasMscAElrqqdBThlLgq951zC9ok7sjBnnYe/zyNBHeAO/3iFUMImmYdCTbBHGSu+2LEmyHbTIretwFnCeUYVqius0TdPQvhbDcOaGW+rNHxGGPfn4WX4efq668tB9Gt+y1z26UBxm5eaeXx7So256X+KGVLJiNTZLYQIdvhlscBjmgZM6hQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mail.schwarz; dmarc=pass action=none header.from=mail.schwarz; dkim=pass header.d=mail.schwarz; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.schwarz; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cCIkaFQ43awnJtS9vDlqr+s0mL1nOfnEvyZac1YVeC8=; b=21tXYpKsOP3KodZK7yx97UjtcfPgIkG+AiYDNwThEVlmY9UmWtm6qvjmigwCTHFVKgGkhXnnVygCVhfWhQWIqAFfkfF6GAy/UOs4wMCP107P8wssCpet+DhPfMtgulzINjcxAsC84efZmdTRR1QkZzrnXUDRpy0u3ukv2xGsVvdEIQs5uGJNC8pZR8p9DRD650EulrTApIdbLFs5TAyRtAwLmHkdayPo0obkQSrlL6+Eeaia8qnr93Da0xnUV1rS8G4JOPMsr5MW61GTsZ1yItCPagz/B/T9xf8gaGeJTTI070YbGXpeA3/J/duPWFExvIrN4Axc2YNs1/zV1mgi4w== Received: from DU0PR10MB5244.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:34c::22) by PAVPR10MB7057.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:302::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.16; Fri, 4 Nov 2022 09:00:03 +0000 Received: from DU0PR10MB5244.EURPRD10.PROD.OUTLOOK.COM ([fe80::3e48:25c6:651f:2a9b]) by DU0PR10MB5244.EURPRD10.PROD.OUTLOOK.COM ([fe80::3e48:25c6:651f:2a9b%6]) with mapi id 15.20.5791.022; Fri, 4 Nov 2022 09:00:03 +0000 To: "dev@openvswitch.org" Thread-Topic: [PATCH ovn v3 2/4] northd: handle own rarps like garps Thread-Index: AdjwKvsMIfQxN9d2RPGo9d95oXTtyQ== Date: Fri, 4 Nov 2022 09:00:03 +0000 Message-ID: Accept-Language: de-DE, en-US Content-Language: de-DE X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mail.schwarz; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU0PR10MB5244:EE_|PAVPR10MB7057:EE_ x-ms-office365-filtering-correlation-id: 5717b668-64a2-4a21-f17e-08dabe42f61f x-mp-schwarz-dsgvo2: 1 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: sOWO+34CgQAKgDyGCT470+jmMojI+DCR83HNB00XRJrbOYYYKuMFeRpGYNiy3wwjzN6c1fNKtSNWZgA5ZtjTRRrfPunjMdSDv9rn59Y/gybBWk1J1CXH9ArYy1gMRC1jLPBrOZew6/zucIl++iFJ3ibz/wi4dKeuygTWOcS4R8ys5qz00St2njFX7enFbD+to+kVozd9iCOW2CIV4CsNhxWQG+4Cy+Uc79n+PbzfTYYUGyNEmlWPeUG9lH7rWUyPt0LevbZi0HS6lRhW+cpgVXgOo0xfICO15jI4v0NjHI/sa+Pc75PhYRT0ejomBNFVKE0YlwxPiBbkd+ipYx626cvPRnqvCKCyUjdL/2pPXzS5iltJYvC1T9w+vFaYqmR8hmpOZ5Y0RISCmhXfmgNSNBNuJhXzZ8r669Zzb8h0us2+UrItn+2YXjmtTb2o4lscJchwP6VBeNE/p0zaP1qg9lsTVzmtdZDwArXQAmqcelt43mo0SaXFd+jkt7iATHul8D4GwxmQHkWIlyw2Pu1KC4fAl2b0wh+rHFabonz6tl+Vv3FcxIiqD0Rqz2txLreM5KcR4mcOPOYiMTm7WiqQX3mPEUGzFvEDzGYonjWPCOV+i1k0kML5MQzIkYRWJm1g4uxWOgZfCZFbiQ5xfV8f3L/SQOOi+PWFLoa2pJ6xrw4hxdzOpAgUmGzQDG3IGfUCpNdw0qZ3BeOIRaMKcUAUkrkC6G9oyleG5WnYy2RII8BcmPOwke6dNarMWmxXYELuGzQCh9Ps4xD5ZP2ZRR+SgmJogKRq0MmyUZC6nJ20Txw= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR10MB5244.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(346002)(396003)(366004)(136003)(39860400002)(451199015)(66946007)(66556008)(76116006)(71200400001)(66446008)(8936002)(30864003)(41300700001)(52536014)(66476007)(5660300002)(8676002)(64756008)(38070700005)(6506007)(7696005)(33656002)(316002)(9686003)(66574015)(478600001)(6916009)(186003)(38100700002)(83380400001)(122000001)(55016003)(82960400001)(2906002)(86362001)(46492015); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?uz1LjzGt3Or7cxcAdzKNPBP?= =?iso-8859-1?q?fxh/qkkCZ0OJHqDjdkpbk4A8oPa0Vn+8/WNC9fWMp3iQIdWO0LW70fogXmxy?= =?iso-8859-1?q?/NyVPAFAs7TtJFyfrRTHVmUY6P7Xbra9Ir62hMxQRXZqMqLH+OYrmrD8ul7c?= =?iso-8859-1?q?BCBWlwLCKHrrep+BSK9I60K/p9Oib0SA7g6JesKOheIkDPCUdGoNRJ7rSXsk?= =?iso-8859-1?q?JQ2sH2OZ+ncI2/Dk8PLLuIbilVgqQ8zAqAophLflMTzhTPJt/muu0u3nGEqU?= =?iso-8859-1?q?qcMFRUhzNgo6sEi/RMtoRxuWdlNeHqLbKKtHsi3Es79Uk6MkA+ES2++apPpx?= =?iso-8859-1?q?wqQtELcDhqWT3nys9hcIZhXs7FbOy7r0q/S74hFPOOCjotGF1MBski8rs0gb?= =?iso-8859-1?q?bs31tIounxCdDE/A2f/GGwsTt4gz6wCZ8ppneuX76f9LYaDtwARgK6Lpuwzq?= =?iso-8859-1?q?x+1S7X4Uk0UQm9M6yM70mQbKfozUFllJD5Zgkzzw2pl6D5zt/6s+8SyteTpN?= =?iso-8859-1?q?Nqljjrudz51XXaUyRGqcun4hljRN8PeO1opmrFOA25odZ0OFXxyjlzlRr2OO?= =?iso-8859-1?q?n5SAdhnrYs4p+haWaiPq3/6iek9NSF+oG0JAUHRG9SASeuA2nfjpTZZR+LLP?= =?iso-8859-1?q?7CmZHw2T8zo+LziQ+JbsLlxHY4n5dDaLkJXu1XM+4jEA+f3hobPISKOOfDre?= =?iso-8859-1?q?Y2t7GS1fw7u95ISbaKArV+5N+GOY6fptSafHCYAvCCFVLcQijeIHbNbVgYMg?= =?iso-8859-1?q?EftYHgc72XnH7ubSmi0PpKANTJ488MecqwHxV6oM07FjL/bNakGzJSyMWO8W?= =?iso-8859-1?q?vgzJZcxQQpJEcV1Yx0+XYQTioRaDMlsIRcarMpmtoarmIUo9abP94Sfsz9Tq?= =?iso-8859-1?q?XJ6lD5/lDByEuCAtiIwDu6pLoHMmrHHmdjft+2D4bnVFsqa8tVJTfT+9lBxQ?= =?iso-8859-1?q?w4k7x940e/NnCBMIGkkXPgj4avo1OV14gkKa8tzc2QXO2E2JpQ4JD59etkQF?= =?iso-8859-1?q?CkWLjLcuw9YOLvRbw4tPv+Lt9NkXJ9tJOh88iK8N7O/2KuYUXDNnHzskjfss?= =?iso-8859-1?q?K9J8l7mG9hzHZqhUapJ8SeoiaBHuWCv+mIRZy7msbZwY//qcyiu3EUnhsH6K?= =?iso-8859-1?q?RQlp46VKwS5qCfmU0ESkp1d4A+/3ARBAesxzFJaED5uWugeL+54/M2xs5NPA?= =?iso-8859-1?q?a910yJpc88Db4yxUE0WK9PyXsb2hzunrGQpD3/IAScIn+jTvEm4szzMkapog?= =?iso-8859-1?q?VnrWRSJoO2osGt0Byd6P9mJQ5rLdpqm/+F3w7+c1CG3NKa4hVmvfF2gIxyp8?= =?iso-8859-1?q?I+zXgFJRbw3laJ8zk2I/1U73tl6Y6Un6DJNovdtAzPJ0/WiORh5Ty5oXsAIz?= =?iso-8859-1?q?yaoeBka5Spr8s/9ZBOqwiuBODPP75ocp4mp296TwJ0oD5xM8B0jMzb4Ye2NV?= =?iso-8859-1?q?iz0nV6vBL+RCcCJYDUCKombH/InDKuIm9tdB9Vs+WH6yJb/gXG+5d6mYr4Uc?= =?iso-8859-1?q?9EHdxStSIf8omC2N5otvCT14s2q73mB9ZCizOoZMaG0GYwOAPNiGGT8tXRB1?= =?iso-8859-1?q?QefddXJi/RYWVJjXJ4Iobeh1Fb4HrzUpvb8Qq1udHbEOUytwt/ZiZzF0V+uH?= =?iso-8859-1?q?6GpHLuqyuT5590BH6K3Lcf29C2c2WjL5RfwX/nqW9C+hmFaN05+IP67w/oPB?= =?iso-8859-1?q?XHT7j5hInipzhK7USp9kYBxa9twylZn+SGpITZXnSSw=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: mail.schwarz X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU0PR10MB5244.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 5717b668-64a2-4a21-f17e-08dabe42f61f X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Nov 2022 09:00:03.2441 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VsuC2E6yQUdbUh4kd5OitX3OuwYFjXSmVmpVk04wLICktGznKSb4xstub4cvr84+VJfoPSQV+rUBM2GRohaIvinFbdw3EahdBftz6cHKrN4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB7057 Subject: [ovs-dev] [PATCH ovn v3 2/4] northd: handle own rarps like garps 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: , X-Patchwork-Original-From: =?iso-8859-1?q?Felix_H=FCttner?= via dev From: Felix Huettner Reply-To: =?iso-8859-1?q?Felix_H=FCttner?= Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Previously graceful rarps sent from ovn-controller were handled as normal packets and flooded to other routers. As the other routers should already have that information, we can skip flooding (just like it is done for GARPs already) and thereby mitigate ovs refusing to send the packet because of too many resubmits. This change has been tested in combination with the previous one in the series and works well in environments which contain an external ipv6 network with 600 ovn logical routers. Acked-by: Numan Siddique Signed-off-by: Felix Huettner --- northd/northd.c | 11 ++++++----- northd/ovn-northd.8.xml | 4 ++-- tests/ovn-northd.at | 18 +++++++++--------- tests/ovn.at | 8 +++++++- 4 files changed, 24 insertions(+), 17 deletions(-) -- 2.38.1 Diese E Mail enthält möglicherweise vertrauliche Inhalte und ist nur für die Verwertung durch den vorgesehenen Empfänger bestimmt. Sollten Sie nicht der vorgesehene Empfänger sein, setzen Sie den Absender bitte unverzüglich in Kenntnis und löschen diese E Mail. Hinweise zum Datenschutz finden Sie hier. diff --git a/northd/northd.c b/northd/northd.c index b7388afc5..e1f3bace8 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -7336,8 +7336,8 @@ build_lrouter_groups(struct hmap *ports, struct ovs_list *lr_list) } /* - * Ingress table 24: Flows that flood self originated ARP/ND packets in the - * switching domain. + * Ingress table 24: Flows that flood self originated ARP/RARP/ND packets in + * the switching domain. */ static void build_lswitch_rport_arp_req_self_orig_flow(struct ovn_port *op, @@ -7369,7 +7369,7 @@ build_lswitch_rport_arp_req_self_orig_flow(struct ovn_port *op, sset_add(&all_eth_addrs, nat->external_mac); } - /* Self originated ARP requests/ND need to be flooded to the L2 domain + /* Self originated ARP requests/RARP/ND need to be flooded to the L2 domain * (except on router ports). Determine that packets are self originated * by also matching on source MAC. Matching on ingress port is not * reliable in case this is a VLAN-backed network. @@ -7385,7 +7385,8 @@ build_lswitch_rport_arp_req_self_orig_flow(struct ovn_port *op, ds_chomp(ð_src, ','); ds_put_cstr(ð_src, "}"); - ds_put_format(&match, "eth.src == %s && (arp.op == 1 || nd_ns)", + ds_put_format(&match, + "eth.src == %s && (arp.op == 1 || rarp.op == 3 || nd_ns)", ds_cstr(ð_src)); ovn_lflow_add(lflows, od, S_SWITCH_IN_L2_LKUP, priority, ds_cstr(&match), "outport = \""MC_FLOOD_L2"\"; output;"); @@ -7581,7 +7582,7 @@ build_lswitch_rport_arp_req_flows(struct ovn_port *op, lflows, stage_hint); } - /* Self originated ARP requests/ND need to be flooded as usual. + /* Self originated ARP requests/RARP/ND need to be flooded as usual. * * However, if the switch doesn't have any non-router ports we shouldn't * even try to flood. diff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml index a70f2e678..051f3dc6e 100644 --- a/northd/ovn-northd.8.xml +++ b/northd/ovn-northd.8.xml @@ -1723,8 +1723,8 @@ output;
  • Priority-75 flows for each port connected to a logical router - matching self originated ARP request/ND packets. These packets - are flooded to the MC_FLOOD_L2 which contains all + matching self originated ARP request/RARP request/ND packets. These + packets are flooded to the MC_FLOOD_L2 which contains all non-router logical ports.
  • diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index 4f399eccb..e849afd85 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -4759,7 +4759,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && nd_ns && nd.target == fe80::200:ff:fe00:101), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) ]) @@ -4771,7 +4771,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls2_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:01), action=(outport = "ls2-ro2"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:02), action=(outport = "vm2"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.2.1), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && nd_ns && nd.target == fe80::200:ff:fe00:201), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) ]) @@ -4791,7 +4791,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 10.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && nd_ns && nd.target == fe80::200:ff:fe00:101), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) @@ -4804,7 +4804,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls2_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:01), action=(outport = "ls2-ro2"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:02), action=(outport = "vm2"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.2.1), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 20.0.0.100), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && nd_ns && nd.target == fe80::200:ff:fe00:201), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) @@ -4825,7 +4825,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 10.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 30.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) @@ -4839,7 +4839,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls2_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:01), action=(outport = "ls2-ro2"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:02:02), action=(outport = "vm2"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:02:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.2.1), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 20.0.0.100), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 40.0.0.100), action=(clone {outport = "ls2-ro2"; output; }; outport = "_MC_flood_l2"; output;) @@ -4858,7 +4858,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 10.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) @@ -4876,7 +4876,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 10.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) @@ -4900,7 +4900,7 @@ AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:01), action=(outport = "ls1-ro1"; output;) table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 00:00:00:00:01:02), action=(outport = "vm1"; output;) table=??(ls_in_l2_lkup ), priority=70 , match=(eth.mcast), action=(outport = "_MC_flood"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) + table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:01:01} && (arp.op == 1 || rarp.op == 3 || nd_ns)), action=(outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 10.0.0.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.1), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 192.168.1.100), action=(clone {outport = "ls1-ro1"; output; }; outport = "_MC_flood_l2"; output;) diff --git a/tests/ovn.at b/tests/ovn.at index f8b8db4df..184fc0fdd 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -24176,7 +24176,13 @@ nd_target=fe80::200:1ff:fe00:0 # - 00:00:00:01:00:00 - dnat_and_snat external MAC. # - 00:00:00:02:00:00 - dnat_and_snat external MAC. as hv1 -AT_CHECK([ovs-ofctl dump-flows br-int | grep -E "priority=75,.*${match_sw_metadata}.*arp_op=1" | grep -oE "dl_src=[[0-9a-f:]]+" | sort], [0], [dnl +AT_CHECK([ovs-ofctl dump-flows br-int | grep -E "priority=75,arp.*${match_sw_metadata}.*arp_op=1" | grep -oE "dl_src=[[0-9a-f:]]+" | sort], [0], [dnl +dl_src=00:00:00:00:01:00 +dl_src=00:00:00:00:02:00 +dl_src=00:00:00:01:00:00 +dl_src=00:00:00:02:00:00 +]) +AT_CHECK([ovs-ofctl dump-flows br-int | grep -E "priority=75,rarp.*${match_sw_metadata}.*arp_op=3" | grep -oE "dl_src=[[0-9a-f:]]+" | sort], [0], [dnl dl_src=00:00:00:00:01:00 dl_src=00:00:00:00:02:00 dl_src=00:00:00:01:00:00