From patchwork Thu Mar 28 12:28:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Priyankar Jain X-Patchwork-Id: 1917318 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.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=rvB+PtpL; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=selector1 header.b=WR0KjCSI; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V536F1LW3z1yYM for ; Thu, 28 Mar 2024 23:40:20 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id E61C460E09; Thu, 28 Mar 2024 12:40:18 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id MTI_HmHWQMwq; Thu, 28 Mar 2024 12:40:17 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8543160DED Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=proofpoint20171006 header.b=rvB+PtpL; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=selector1 header.b=WR0KjCSI Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 8543160DED; Thu, 28 Mar 2024 12:40:17 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 630DCC0072; Thu, 28 Mar 2024 12:40:17 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id C7E96C0037 for ; Thu, 28 Mar 2024 12:40:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id BDBC060DF0 for ; Thu, 28 Mar 2024 12:40:15 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id o_cO648ufMCO for ; Thu, 28 Mar 2024 12:40:14 +0000 (UTC) X-Greylist: delayed 661 seconds by postgrey-1.37 at util1.osuosl.org; Thu, 28 Mar 2024 12:40:14 UTC DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 789F160DED Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=none dis=none) header.from=nutanix.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 789F160DED Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=148.163.155.12; helo=mx0b-002c1b01.pphosted.com; envelope-from=priyankar.jain@nutanix.com; receiver= Received: from mx0b-002c1b01.pphosted.com (mx0b-002c1b01.pphosted.com [148.163.155.12]) by smtp3.osuosl.org (Postfix) with ESMTPS id 789F160DED for ; Thu, 28 Mar 2024 12:40:14 +0000 (UTC) Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 42S0ETrX011164 for ; Thu, 28 Mar 2024 05:29:12 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= from:to:cc:subject:date:message-id:content-transfer-encoding :content-type:mime-version; s=proofpoint20171006; bh=3BHpMGy/0A5 2dzqX0RCB6QDuvMe/W86FcwBP9qXsGjA=; b=rvB+PtpLHu1LAoYS/AJzPyGwyBE imzdNBqfl1ocX/o5c1aAimxVOi7dNGSKRckJwYNPIIiRIcLcx6nMcg0o936B3PtJ 9YQ59hbbFTVaZIul29V+QrnTAjjbFxHLk3wJ9K97quu4U3jiZaeq2LhQZop3fVtk ODcJXxDTCP5WMXNBIvdM80/s14mv0bnt3ozARIKOF1fn4gPKXpnS7BbJ1F6vaIgD haSv4yhLLQiOBlGH8X8ypF+Z/QoceDehRVu27YRCX6GGC5vinV8zsFrbOepOtfjt EplwP4XDh2dFm8nCcZnjzFl8DUBkNDBJbpJeF4l3ELhSG3/eo4KaFZxKyjA== Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2169.outbound.protection.outlook.com [104.47.58.169]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 3x1w6gue9k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 28 Mar 2024 05:29:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fv1GrkvAy4mRaoU2BFxvRZqSGvcHmwTkXAf+bjI6qsyKYz22QgMav/hKafxmeu4mH/RmPk4z5PR7rulQc8sIxstiuAnAa1QAmJS8xqG3vlkVOaAQw6L5RTpbJaYkzqa+MvbYBcCBO7sV5fcxnMF4jZ9Q/YyN4bR/d2h8Dst5W+fB59sjcbVj7947FLn3v+3ydahpuHtzobH68nPlz3Oxv5BCxbtYJ25zuC5SOJOnb3xTEQZcPygVqHQHxR7jsvSe5FBEAyDadnclLUVlYhEjfkxpWHYxzAhcIk9aOXBo0UPLAFOs6lIhKoistrRcDgE6JKSspfMyzSPGr7TcuexkFw== 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=3BHpMGy/0A52dzqX0RCB6QDuvMe/W86FcwBP9qXsGjA=; b=R82tZIDxMo1+teV2zVLxK69RavStSFNv3ZVTlEdhvsYJje8+wxxtYSS1KfrMZjUb6toenAv1nRXhIuPYNI3Oef7uuhfHklTckLgxSI1k+gKSFzy6KWNrIFMeQD10zDViPoHF1nCH86JleSh5t5c5mQVquHP0JRXQsVMjXjyKL+AC6/ThWJ4R2lz/z5d4RrBArMVFvMW878Uyi87deFggSbEJJF5ixhtt0/6Kf5PVBHGK3wYfXJ780+uDn275Woi4GLm6ehaYapiyNOgucRA5s2EQ/KbDoMmcz5pHtBtGJUQI40RykPo283adf02RFj1oHy7BgBuoP2rtkk1rfNe4vA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3BHpMGy/0A52dzqX0RCB6QDuvMe/W86FcwBP9qXsGjA=; b=WR0KjCSIGLsK9TqpPThbrcqsuZihZS5Jg7GsK4oAzgqBXpDys/gA9Yc9wYGQ7wCN0Lm94DpJJqGFIbGZjCI0lx1eTmc+c+2PZqHNkWKUHlFmGZYQN5a9GHPiMsegPP2MRC4JgQGz2Wp7PGybKX9PpRWy9v59VtuCCqOHYCMz//ee5CGQC4qHyf36q3D4OGX6W7lc0Sz03Zp2x0Ap3sj9MitlEuv+9nPnQbVDjcGGO/sZEOnFVpfLCQX7b7Ze8gGfMYR+AbHFIOKlyDt75U7b/6iA/A6rh3giTwxgDIIZcZ3ziX5gw/93YxJwZdrkwl011JtZaXVR9B4t2vCj6JkVEQ== Received: from PH0PR02MB7496.namprd02.prod.outlook.com (2603:10b6:510:16::12) by SN4PR0201MB8774.namprd02.prod.outlook.com (2603:10b6:806:201::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.33; Thu, 28 Mar 2024 12:29:09 +0000 Received: from PH0PR02MB7496.namprd02.prod.outlook.com ([fe80::ecdc:b24d:68ca:81d9]) by PH0PR02MB7496.namprd02.prod.outlook.com ([fe80::ecdc:b24d:68ca:81d9%7]) with mapi id 15.20.7409.038; Thu, 28 Mar 2024 12:29:08 +0000 From: Priyankar Jain To: dev@openvswitch.org Date: Thu, 28 Mar 2024 17:58:42 +0530 Message-Id: <20240328122842.36708-1-priyankar.jain@nutanix.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) X-ClientProxiedBy: MA1P287CA0020.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:35::32) To PH0PR02MB7496.namprd02.prod.outlook.com (2603:10b6:510:16::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR02MB7496:EE_|SN4PR0201MB8774:EE_ X-MS-Office365-Filtering-Correlation-Id: 63068f19-5eb4-40a3-cec0-08dc4f22a9e9 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GkczBZt+5cMwHLILlpf72eE5kmtPpL4lp4/MlORZ+od+jW1yb1EALP3EacxwywqMDWUfRwPusIlPoPtJl/laT4/dIy7sNfcFkdVZkEEGAXRFVqmtz4hWiXIdyEi49w1DnQgHUOVoGNv6CsFaQrSxJ2Dwb6N2dtO+UYdBjRSkD6LQalcrb7o8Y+PxygQB5SCrcoHN5P10Wfe4fWhrvG+qFBJswQUXPcBw3+Ss8fSwQRK3i2zkmMCXWe3Lfx8Ecp8kFfjjUaNlcqAOCoalx0IPnhwWZfyXSC+LehjkFQXcjRD0oR03GbLZxUBaGaTCyxXrZyqeaIaPTR37l+2IqZ72mKK77VtR8hipc+mC6GANQnD8OP9hIQAfw8zGQAGJp9DljaaUJrcjzup1jLzlJTYvHXEDrWJ1KFCDttMCOFX4WfbNbD2I2g+aKN2Z7PTrMsTt4TItYVXn9h9ka+SN0q3MEWVTN7GIPn1Q2LKS0v4oYhYuUWyUv+4aa0dw7/m/vIiey178NBUBbaNvIGxLTfipWT9vflPRF77bcc/AkcvEHSMMvYyZNzBOoSb8M8fMMnXAOqoPffPtOcZS8t14MwJzGdLEzJhRqowGnTDyxXZVIm6ZHnQZwtgVIrrCo+idNslQUgPz0BZXScQgIrMneovrI+6R2Mjxv9W/ZvBbMdmVHxU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR02MB7496.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(52116005)(1800799015)(376005)(366007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BN3A3aLZYBpEAYWApH3yVUFIUNehmncQ92lsY1kL4koasptGCWYQzVcwQfD7ldNK9qsjoDV6tJWOb8fyoDgLYpF/vXPIQFvJE4iTdLCbbM+8TRRfyqeQ5uRgfrEztuXt/k3C3WQJb04FpA7HVuuKQjOBDhBfpaMrTWgSnEt1Dqtq0Cr/w4OznzVeHxNs/AfyXPYNiMVuPIBG+B18ZH0uM/0ZNd5fweTwVA13jVN1dIV1fs1crW1mmG+Hs5aBrIHyO7MGuOpLfWgL2jU1oe884Glwh/DYebz0gTuIm93+mP1tsikwqyHkKCIai/JahpQ+W3C62dngvXfD1Jcfq+dIWSQzBpGyNXEZcjyFoOhwvwiyDNgUcnBdSW3nyIaNAooFacJBlnDuoxu/ZHLPy0thYeEJT9RhuSl1BIcTWwyPJqWuGyC/4scdOoXWzlvkbXPwMw/r02pK14PJAOlYMSIGu/Cp3qnZZOTT6efQNAg5ZNGNaWXvVOn0zv8qRPhs0c46z1W+/OTE00m5qTD1QT0ofYjfjDd0Pj7orIu96NMskudoJSGi6f1h6YPsnT5FqBBrQx2cp7eJ4MuOKIlp9YitlfOpm0yfve5+EcuYpWqBo+3vSnq4VIiXxC0h0qZxdlxmuunB7d3OLUWURyYo3739DUqWHH1MKdfFvSZEbQbWXW93YS5lz0rLWCmHDOktXJAb8FakmGzu+Rp79X5n9QgJYwhXiZU5wIYDZOzac5J9W9fb4FRjWOyiXxq2guEU0D9aeGu3weSsQhQnYgVoImwUWNlJjkXvb8Yi75v8Nd/lZK6gN3qWoc4e1nTvxKUTMlXLxh4GvXH+YVKgRCqo/65e011C64xKjl2lpfjxI3afTt9ev1MpCBR3JU7VzdKhlz3VFhGHht1Uk+1aQZstvCmXzAsdFUJn1Qi3su4rb9jPJu7WW/KcCz3YuJq0NqmR79v45KfI2Bg6lKo6aa97WeEq7I+RdHB1uhliHblHDdLa5wemadCJnHTCxiXOVCOGGs8di5quY8rqGMUGn9p7q4U0CH5CsvDOlp18DaKM+zJmughhL/ZKaq5LcPaxepAkzlNEhpM6HEwH65ysiLuJq9y200M8cZBYUoWT5iEbXOij7RZfJu+KzC0speUwJ0W+VRanPYXIaR4U5AzRj7ITW5hEsgislX205wHwLasIUfyI/WFiX3M3BmDe9yCN7MW+NyYPUCMGl88Hwx1W9KwmUdIx0v+osqonF6aPA2uKkiwG4FM7erGRXOb1i1kI6ud8pnFqnW2Wt5wuB30bZWEkv+6Uaa63byxGvz18gMn2H7w0yubjLIoriVnF+yZFhjc4sUuIerpoyalaiveF9P4vh34I1P3QXqpgfVBc686J4JzSBtouE1nZBgU+CLo2jquVndEzP5DHES5JXRgLXSsn/Oh+shIlQSm48kAE6q/2gFpBPCvWuUM49mYXPmCnJEuvSI7PaOubw3WmXjuQUl9eAnFteyFdwahEDioZFgqt6wjScu0vqlrPHMK1/iozVoPEkNiM2spOSjdcTozTCP9kpdLsLHMBGNaELzuBq6nLek0WxAPRCaJWSU8mtNGfZuhnnOGuNTehieFmkmVEiTZAQaxgF+EbIORIPpcsgpctQhxbDczSFYLcu0+oOkI+BkOic3ogMSG2ADYY09gJzzrcUR/gJQ== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63068f19-5eb4-40a3-cec0-08dc4f22a9e9 X-MS-Exchange-CrossTenant-AuthSource: PH0PR02MB7496.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 12:29:08.1441 (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: 3ReppzFlcOgp1/fK1DLQU6Rzra4U3Vkzr7R3T7RD7I03tTafYwl0IFy4TtNNPvGrxzF9diZTLz4BHH7R38+OCwDV8GbUPtKXxGY+oUB3NtU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR0201MB8774 X-Proofpoint-ORIG-GUID: bpRl9qzs1HOiuiDfGK18dScZeMBUq-Lz X-Proofpoint-GUID: bpRl9qzs1HOiuiDfGK18dScZeMBUq-Lz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-03-28_12,2024-03-27_01,2023-05-22_02 X-Proofpoint-Spam-Reason: safe Subject: [ovs-dev] [PATCH ovn] controller: Fix an issue wrt cleanup of stale patch port. 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" Issue: Upon updating the network_name option of localnet port from one physical bridge to another, ovn-controller fails to cleanup the peer localnet patch port from the old bridge and ends up creating a duplicate peer localnet patch port which fails in the following ovsdb transaction: ``` "Transaction causes multiple rows in \"Interface\" table to have identical values (patch-localnet_a7d47490-8a90-4c4d-8266-2915ad07c185-to-br-int) ``` Current workflow: 1. Keep a set of all existing localnet ports on br-int. Let us call this set: existing_ports. 2. For each localnet port in SB: 2.1 Create a patch port on br-int. (if it already exists on br-int, do not create but remove the entry from exisitng_ports set). 2.2 Create a peer patch port on br-phys-x. (if it already exists on the bridge, do not create but remove the entry from exisitng_ports set). 3. Finally, cleanup all the ports and its peers from exisiting_ports. With the above workflow, upon network_name change of localnet LSP, since ports on br-int does not change, only peer port needs to be move from br-phys-x to br-phys-y, the localnet port is removed from exisiting_ports in #2.1 and its peer never becomes eligible for cleanup. Fix: Include both patch port on br-int and its peer port in the exisiting_ports set as part of #1. This make sures that the peer port is only removed from existing_ports only if it is already present on the correct bridge. (#2.1/#2.2) Otherwise, during the cleanup in #3 it will be considered. Fixes: b600316 ("Don't delete patch ports that don't belong to br-int") Signed-off-by: Priyankar Jain --- controller/patch.c | 32 +++++++------ tests/ovn.at | 109 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 17 deletions(-) diff --git a/controller/patch.c b/controller/patch.c index c1cd5060d..4fed6e375 100644 --- a/controller/patch.c +++ b/controller/patch.c @@ -314,6 +314,21 @@ patch_run(struct ovsdb_idl_txn *ovs_idl_txn, || smap_get(&port->external_ids, "ovn-l3gateway-port") || smap_get(&port->external_ids, "ovn-logical-patch-port")) { shash_add(&existing_ports, port->name, port); + /* Also add peer ports to the list. */ + for (size_t j = 0; j < port->n_interfaces; j++) { + struct ovsrec_interface *p_iface = port->interfaces[j]; + if (strcmp(p_iface->type, "patch")) { + continue; + } + const char *peer_name = smap_get(&p_iface->options, "peer"); + if (peer_name) { + const struct ovsrec_port *peer_port = + get_port(ovsrec_port_by_name, peer_name); + if (peer_port) { + shash_add(&existing_ports, peer_port->name, peer_port); + } + } + } } } @@ -336,23 +351,6 @@ patch_run(struct ovsdb_idl_txn *ovs_idl_txn, * ovn-controller. Otherwise it may cause unncessary dataplane * interruption during restart/upgrade. */ if (!daemon_started_recently()) { - /* delete peer patch port first */ - for (size_t i = 0; i < port->n_interfaces; i++) { - struct ovsrec_interface *iface = port->interfaces[i]; - if (strcmp(iface->type, "patch")) { - continue; - } - const char *iface_peer = smap_get(&iface->options, "peer"); - if (iface_peer) { - const struct ovsrec_port *peer_port = - get_port(ovsrec_port_by_name, iface_peer); - if (peer_port) { - remove_port(bridge_table, peer_port); - } - } - } - - /* now delete integration bridge patch port */ remove_port(bridge_table, port); } } diff --git a/tests/ovn.at b/tests/ovn.at index 4d0c7ad53..487e727c0 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -36454,6 +36454,115 @@ OVN_CLEANUP([hv1]) AT_CLEANUP ]) +OVN_FOR_EACH_NORTHD([ +AT_SETUP([ovn-controller update network_name option for localnet port]) +ovn_start +net_add n1 + +sim_add hv1 +as hv1 + +# Bridge Topology +# Initial: br-int and br-phys-1 connected through ovn-localnet patch port. +# +# br-phys-1 -- br-int +# +# Final: br-int and br-phys-3 connected through ovn-localnet patch port. +# Similarly br-int-2 and br-hys-2 connected through localnet patch port +# but not owned by this controller. +# +# br-phys-1 br-int -- br-phys-3 +# br-int-2 -- br-phys-2 + +# Create bridges +ovs-vsctl add-br br-int +ovs-vsctl add-br br-int-2 +ovs-vsctl add-br br-phys-1 +ovs-vsctl add-br br-phys-2 +ovs-vsctl add-br br-phys-3 +ovs-vsctl set open . external-ids:ovn-bridge-mappings-hv1=phys-1:br-phys-1,phy-2:br-phys-2,phys-3:br-phys-3 + +ovn_attach n1 br-phys-1 192.168.1.1 24 + +ovs-vsctl -- add-port br-int vif1 -- \ + set interface vif1 external-ids:iface-id=lp1 + +ovn-nbctl ls-add ls + +ovn-nbctl lsp-add ls lp1 +ovn-nbctl lsp-set-addresses lp1 "00:00:00:00:00:01 10.0.0.1" + +ovn-nbctl lsp-add ls ln_port +ovn-nbctl lsp-set-addresses ln_port unknown +ovn-nbctl lsp-set-type ln_port localnet +ovn-nbctl lsp-set-options ln_port network_name=phys-1 +wait_for_ports_up +ovn-nbctl --wait=hv sync + +# Allow controller to immediately clean patch ports up if any. +check ovn-appctl -t ovn-controller debug/ignore-startup-delay + +# check that patch port created on br-int and br-phys-1. +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=patch-br-int-to-ln_port | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl list-ports br-int | grep patch-br-int-to-ln_port | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=patch-ln_port-to-br-int | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl list-ports br-phys-1 | grep patch-ln_port-to-br-int | wc -l) +]) + +ovn-appctl debug/pause + +# Now move the localnet port from phys-1 to phys-3. +ovn-nbctl lsp-set-options ln_port network_name=phys-3 + +# Also create fake localnet ports on br-int-2 +ovs-vsctl -- add-port br-int-2 fake-int-2-to-phys-2 -- \ + set port fake-int-2-to-phys-2 external-ids:ovn-localnet-port=fake-port -- \ + set interface fake-int-2-to-phys-2 options:peer=fake-phys-2-to-int-2 type=patch +ovs-vsctl -- add-port br-phys-2 fake-phys-2-to-int-2 -- \ + set port fake-phys-2-to-int-2 external-ids:ovn-localnet-port=fake-port -- \ + set interface fake-phys-2-to-int-2 options:peer=fake-int-2-to-phys-2 type=patch + +ovn-appctl debug/resume +ovn-nbctl --wait=hv sync + +# patch for port on br-phys-1 is cleanedup. +OVS_WAIT_UNTIL([ + test 0 = $(ovs-vsctl list-ports br-phys-1 | grep patch-ln_port-to-br-int | wc -l) +]) + +# Patch port created on br-int and br-phy-3 +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=patch-br-int-to-ln_port | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl list-ports br-int | grep patch-br-int-to-ln_port | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=patch-ln_port-to-br-int | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl list-ports br-phys-3 | grep patch-ln_port-to-br-int | wc -l) +]) + +# check that patch port on a different bridge is not touched +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=fake-int-2-to-phys-2 | wc -l) +]) +OVS_WAIT_UNTIL([ + test 1 = $(ovs-vsctl --columns _uuid --bare find Port name=fake-phys-2-to-int-2 | wc -l) +]) + +OVN_CLEANUP([hv1]) +AT_CLEANUP +]) + # NOTE: This test case runs two ovn-controllers inside the same sandbox (hv1). # Each controller uses a unique chassis name - hv1 and hv2 - and manage # different bridges with different ports. This is why all 'as' commands below