From patchwork Tue Jul 23 06:57:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mansi Sharma X-Patchwork-Id: 1963597 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=rtfEqfrX; 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=Cnkr+cXj; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WSnyv63fwz1yXp for ; Tue, 23 Jul 2024 16:57:43 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D9E056077E; Tue, 23 Jul 2024 06:57:41 +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 IHtb_WRGxrzp; Tue, 23 Jul 2024 06:57:40 +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 74340605A9 Authentication-Results: smtp3.osuosl.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=rtfEqfrX; 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=Cnkr+cXj Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 74340605A9; Tue, 23 Jul 2024 06:57:40 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 600C3C0A97; Tue, 23 Jul 2024 06:57:40 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id B44A1C0A96 for ; Tue, 23 Jul 2024 06:57:38 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id A27D481122 for ; Tue, 23 Jul 2024 06:57:38 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id pf0OBGazBF-H for ; Tue, 23 Jul 2024 06:57:37 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=148.163.151.68; helo=mx0a-002c1b01.pphosted.com; envelope-from=mansi.sharma@nutanix.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org AAFB280B88 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=none dis=none) header.from=nutanix.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org AAFB280B88 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=proofpoint20171006 header.b=rtfEqfrX; dkim=pass (2048-bit key, unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=selector1 header.b=Cnkr+cXj Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) by smtp1.osuosl.org (Postfix) with ESMTPS id AAFB280B88 for ; Tue, 23 Jul 2024 06:57:37 +0000 (UTC) Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 46N19l05031195 for ; Mon, 22 Jul 2024 23:57:36 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=proofpoint20171006; bh=CRN78kMTZ1SUH xYbO8yts3k108HNg2TeN5NAQ+o+fjo=; b=rtfEqfrXSQXyaFL9vCCVbA7CRhNvW 6ZCf0fRdee/rHtcWnEDiV1vvLN25NRn7rGge2xub8rxyPcgwe9JcTvswxFFbf43e Dw1cnuczpBdN00cRXFWyIk/7TF3UDyiyMCeiVPzCP2MTAOp45mThM8I1/+7uhc4C 8RhlYPL/tQTu40sbZdkTpds155JuGDEyqqtML3xsHEufP/qiZIUQmgK2akKEs18G Pw6vftUqKlf3HiT9I/b8H3GLm7Ta/iZHoVW7sWzNSuVfom+fdjb7GjcshuFIhTMr +ngt9+3BPpQtViX/FP1SSDtXq2MBVq7TQsuM1aQe5bKQ3G4U36rCwzW8g== Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2046.outbound.protection.outlook.com [104.47.55.46]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 40gcsv4x5r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 22 Jul 2024 23:57:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WnCd5H8PDRp8gTWXcZiEkPrCK5H10+XrRE7o76jGRJd46b7R81hQ74aL0Qr5GPAKjp2YrwslxDXEkzthxpx3C5GuqJpGVD6fxugwmSSjq7ydmBn4egPXx801J8mvS4TxFZbSkFZijGG5zzZgdBXSo3WO8L1LvIRuZtXNQgZEXQHmWG8eGgUOEl+QiiSzDcAiK43WA+4fvvnPb/rQuoY9e/CZc/D+V4HlbyyK4mIWtnN0JrpL6g9G06UB4GVpu0gFKhZW/xrH/0EYUk9Zmqvf1IttluPRZAjHI6nC+24sQWgY7uYaSud1LCFT3ypIVcYRJG8iqwY1v6tmHRdLWXrTuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=CRN78kMTZ1SUHxYbO8yts3k108HNg2TeN5NAQ+o+fjo=; b=AeFfRtu+9+NmOVG/15ekivK2Btm1YAGmCOngoV4jV8sZjeS6xuVAWZpvOcsYXf1FHTovWzWaRabQefQvUjYhnpkmIO4eYBEQWc7EfVRMuujdsP/kyxW+NZ43z540mt11GvjRbHUqF/5LPGe2BUTrgAUV9/0eET2Uk9W1v6SBNXcXBaMGTHJVb6GhxxhwsCiXtZGLs3K+uEg/dbNGosWAXhL+/F3vUTN9Tec41P/6S1MJUdwFE91OYVdfbbLC3DGS/hhlwf1qm8HVX80GdT5y2TPB+KnNZNKqkuT7ecmlBfPYFcv/LgtubYOU6mFhcWSUUwSiEGwdACE+DDx2lFUkeA== 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=CRN78kMTZ1SUHxYbO8yts3k108HNg2TeN5NAQ+o+fjo=; b=Cnkr+cXjEDr/uZ2do95OM9j+xizwxWFijO6jFYxfEcn/RfQbpMdmuNKnv8nOA6fs3Rmhh42FHi8GigfxTrqsJl+CQ1U6p2msyJSZQT4n0gmhifSDonUK27eIF0+vOFcHhUVuZT9o5przRV0RzB17wwRtb77gIJCT+qwAFL1lYY2xsnisC4YU8fTGBUx3kysxAJBTrOuEcjkl1MtomKbYm1urTOFVmX7umK78e1lS080J/mQ8chVov/ApdMCXuqaa9Kl8IUCOe6tlOA5NtmzvgaEBkHkPPaEqI2SKadWQy+KZJbZd5KIkK2VO6rutC4XGiw8//xiH5ywmHsVPBAM/BQ== Received: from IA1PR02MB8924.namprd02.prod.outlook.com (2603:10b6:208:3ac::18) by CO6PR02MB7553.namprd02.prod.outlook.com (2603:10b6:303:a6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7784.19; Tue, 23 Jul 2024 06:57:33 +0000 Received: from IA1PR02MB8924.namprd02.prod.outlook.com ([fe80::ebb6:325f:1d33:c1b8]) by IA1PR02MB8924.namprd02.prod.outlook.com ([fe80::ebb6:325f:1d33:c1b8%3]) with mapi id 15.20.7784.016; Tue, 23 Jul 2024 06:57:32 +0000 From: Mansi Sharma To: dev@openvswitch.org Date: Tue, 23 Jul 2024 06:57:16 +0000 Message-Id: <20240723065716.165340-1-mansi.sharma@nutanix.com> X-Mailer: git-send-email 2.22.3 X-ClientProxiedBy: BYAPR03CA0013.namprd03.prod.outlook.com (2603:10b6:a02:a8::26) To IA1PR02MB8924.namprd02.prod.outlook.com (2603:10b6:208:3ac::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA1PR02MB8924:EE_|CO6PR02MB7553:EE_ X-MS-Office365-Filtering-Correlation-Id: 0256144f-2e5a-49ab-4553-08dcaae4b9e1 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|366016|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: ogDbltVuTC1Lb/N1JXfjBtrvZ4L0ivY9jMU2HPgWAbAZ4TZLEN391jw8Z4OgjDX/eyFLEb/OdE7pk32yuQN1fy9xHdyJvrOyQyETA2xVjeJr/5ryBz2Iy/6hKtT3dkam+Temf18LHju1sgfiWKbpaSPuPsz9rbSkZvYAx/Vs9LrUjpA8rOZQRXI3T1XCn8V2JJa6s50b7d1FS5FnIgQTSIV029QHJImRYb5hmt8oLbdy/0vncA93ZbrPBzAX7u4QmSw3k/j4z3BRnD05fiuubkILWQY2t/HCkjaXVeXkAfuKMDOjRQOy7R1reJ+tMrFHSLtdU0nPzHRQgLT0cTIh1adPBrfmEU0wPejiKwHcHWtRsDdQcpnf3Ro+lSOsjzf1xvn3I8M0CBnMj2YS2JZKwqEn4Q7SUFGGB7Iu0omYcf17Jc3H1k8KNuIpkYrtIRu55OVRP899PRn+TFxEQjmLqU/QzwcEDF8r7ku1yPZ+EjE7+1HQZUK3EslHZNLck1u86bUvo3sIHVPhHF7kLNXG40wSJsO2MUlB9YGA/e4p9eEuazs7QCSax8N3l0lFF8MnR/98RY+dgdb8dC0xKGdnJs2Ml9TOniKkZ6+sbvGjhs0VwRLwer/xIl9j8aGEWqLJQR6ym1T5SmEc4AW0r3Kts9Qe+UxcxpYb6l5QOIq6KWn5c3iKFaLaTr9exOMeszDUn7mRnNW+HYCKmHRYiDQ7Uj10zpjtQxbZnfwglucSHFXEBPKKErMi/1AXH/SK8zPaBzlQdMpXx4zGcjZbdyC+cgPWZoadt9L9YfPRog2s6vn6qsq3kSpojiL8jWxrnF3M7Unzn7TME/k1sdhZkcFn/1vkfLeuCqq9A/kri3JAHPkt3OGi+cBOvBE7CWySStswymc7bfBwA7XjRkaLs4AGrv47HiUaqWX5QVnLg1Bz+Gtq39xbfj4L3tTv1y6Qj/NWY9+voavZ3yAEjldPz2Q+LVILjfGMVraRzDuIqJGr7avEAhn85ELknuXMEMywZc5MHwj1CEYGGlOS91txZD7JKpU0mDVj0yDAXRRMjlWDPm7ywGmC2BSrYsmlVQ35Ti4X7+zwydsGsHeBw+70N5SI3Ox4/MZpklkVuQLFGRZc7pu/jJ/hLQTQ/CaIlRub7LEj0XRUNYa+oUdEtk2W3XHwPOfR6EdbRYCZ6YPGhcz3PNyEkGFSd3gCykFsQ8TYJBHAA9S59py0AFXotqJvH6IGGInoe8+GW7YSHrmBExRV5zfFFXkdNxGP83+SYXNnBZc2w3mwNdSwEEPf8HLbn8UI6EmUeOQFhc0unefprg/Ln1P3pfyYd9ipQSciTivNktq0Btut698e7E/XASIuAYrt5HPDYOLAG6ubeMPRyTQs4J/Pewy9tYV3v4l61RnhUIMUcdz8Vuf92bxNXqiDHGp88g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA1PR02MB8924.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(52116014)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8ctQq6l3O9t2bVvJOvrIqOXtxWhXunNp0OstA8h24+MSqdqzcwNChtdj0wGUyY7nutVUXoyt10RH/tsougG6JRWg+63/Hc4ln4Q7mIbd+WJbOj60Gi0SWvH8ZYXIAehJnnjdNSy8z+d6lTkKMJOxuqhjw3VcQo6qfCnIivSm94G92m4i54Ki+t0q4QKgRCrvC2pMDdRG4Oe9H6ooS/BZlsyF/0KMzdvxxDEmVZ9QyNbwoM1SjtH9OMACF+RvQI7nmGNgUUtarjawDmN4gIlHlJMvRftNXE4Ndx3SyydF9DnLq+VDAjWFmZDqG6YuqmvUGVY+vRU/ZtNnuK8L0RKQUGJtHWGcNdaol73Agd+3/LjI4dmG+bZc7mx7t/KUfJd/f3vpXekk2DboUpZs2U1vCOBhZ7QFIWQRHK5iTSwjl846e3lzNw1dqnJjRbXz10DWAPAGoK0tch4B9lmacEyrfSSxpip84+aenQC3wD9CUEZGUKoa4Vyw0xMzfM3/kyQ11obQvNQBduoBN86jwYoiLQzCE8lPbHaEFYdw8q8pb76D1errfg0lFw5qyRBQF2w85LnbBalxI/ueglAABuGuWRu17KvxMCffJgZxcdP8PB1rBVIcYfc//Gt2GuA2ZZfUl7NwzJRBrMU/LCuafBaEfJKzMjAv7yErBfdbEEke2XgmQhpgdLIGKQwrtS2KE9BiC6MBoa22hc8yU1lWv5Bke9NYNjLOLNXdaOG0RcV/Jz/r7uUy+sftrBmXGjMX5pq04oV+0iRBqdS+UkqeUi9LcMfgCTV61V2ulecKUaC4PujtjwsnpEe1Q9UPT8VsXj9CkzFRqF3LNDwU8h0XlDzbXJZqdmkT/pAGeqJUk94f0U/dRF5c5Tx7BS/hzjoIUBJJ945hMy6kLmfyxBGH/lYWtegIvjpZ9uSpEcKXmxKfc9PIfpwqihuVtfK7ixaajE6S9gIfSfJzsZek3LsnVmAOSKUw3IBzl8fRf82H3HTDNU5E/mX9uXzOfBD493igYqh0qZICQqu78Kf2iVkUf1gdECCCKd1mxU0rbgrrzk7Sz5Xeg9URSP6RVCGF79FoL9Uk5qb9poe8DMEnd7HffgFuJIOEqxzX/Jk0364xYYGYK8BKTxsC1wDsFgrkG2hqySTUcejrwnUeE/QSUJWM0BHYyajJD0/KMyuZzAUpsiKQyxlKdByRfJMdDwDrAnAScBZw2H1KMiMgtpzSzf185AQNTClW7tVfxKCVO5dTysWeZtK/s2K22lCaVgl0mYjSALU8ESCHtpBQIfmvjxY5qYTekJQlz+8zsnqYdwMYbrOYbXTouxrB4xQfxf7P2YA5Bo6voc5WrUKTy5DQtYKpzwyc/yUGohL8W+pYiPOBfK8yGwwW59/RZewYaoIrfEmEe33RUFOkQpTCH9Qh3Io6a7wlFtVQC7Wm/aL/GVovYFy2gE2Sm9yuwOURC6D1xPdppDW0465seDXy3ZJ3rzbJB/z8At+pU9RjLSq8fC/SweG3zPsfZXqA3ENKNJalHAoFvLz/L6MJj9U/4QhX8IvS46vvstlSg2dijaZ8SoGRpMJ/JfUMT4qLVVayEiSgWrbS6820RE0tNoxKOocddHuvUg7OMA== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0256144f-2e5a-49ab-4553-08dcaae4b9e1 X-MS-Exchange-CrossTenant-AuthSource: IA1PR02MB8924.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2024 06:57:32.8455 (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: NHtpS/iRWSNTpG6lsLY7ka7gWRODmQ/gToMf/Nh/xVKLfuqVWPHxQY47GNB2X05X1HBcNxM0rDUu1TRkxlm2IpJ2qd/mOa2sfDmxA+0KQjA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR02MB7553 X-Proofpoint-ORIG-GUID: fXP0sCCtAHSpokvIitUVUfJv--jdTqCs X-Proofpoint-GUID: fXP0sCCtAHSpokvIitUVUfJv--jdTqCs X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-07-22_18,2024-07-23_01,2024-05-17_01 X-Proofpoint-Spam-Reason: safe Subject: [ovs-dev] [PATCH ovn] ct-zones: reserve zones for upcoming ports X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" This change will be useful for migration cases, where it can be used to sync ct-entries before port is up on new chassis, resulting in reduced network package drops. It also fulfills the need of any other service which might need advance ct-zone reservation in future. Signed-off-by: Mansi Sharma Signed-off-by: Mansi Sharma --- controller/ct-zone.c | 24 +++++++++- controller/ct-zone.h | 3 +- controller/ovn-controller.c | 2 +- tests/ovn-controller.at | 92 ++++++++++++++++++++++++++++++++++--- 4 files changed, 111 insertions(+), 10 deletions(-) diff --git a/controller/ct-zone.c b/controller/ct-zone.c index e4f66a52a..a3c5b90ff 100644 --- a/controller/ct-zone.c +++ b/controller/ct-zone.c @@ -89,7 +89,8 @@ ct_zones_restore(struct ct_zone_ctx *ctx, void ct_zones_update(const struct sset *local_lports, - const struct hmap *local_datapaths, struct ct_zone_ctx *ctx) + const struct hmap *local_datapaths, struct ct_zone_ctx *ctx, + struct ovsrec_open_vswitch_table *ovs_table) { struct simap_node *ct_zone; int scan_start = 1; @@ -104,6 +105,27 @@ ct_zones_update(const struct sset *local_lports, sset_add(&all_users, local_lport); } + /* Add local_loprt name which are supposed to come up on the + * chassis and might need ct-zone reservation in advance. + * The data is picked up from ovs_vswitch table. */ + const struct ovsrec_open_vswitch *cfg; + cfg = ovsrec_open_vswitch_table_first(ovs_table); + if (cfg) { + char *reserve_ct_zone_request_list = smap_get(&cfg->external_ids, + "reserve_ct_zones"); + if (reserve_ct_zone_request_list) { + char *duplicate_reserve_list = xstrdup(reserve_ct_zone_request_list); + char *reserve_port; + char *save_ptr = NULL; + for (reserve_port = strtok_r(duplicate_reserve_list, ",", + &save_ptr); reserve_port != NULL; + reserve_port = strtok_r(NULL, ",", &save_ptr)) { + sset_add(&all_users, reserve_port); + } + free(duplicate_reserve_list); + } + } + /* Local patched datapath (gateway routers) need zones assigned. */ const struct local_datapath *ld; HMAP_FOR_EACH (ld, hmap_node, local_datapaths) { diff --git a/controller/ct-zone.h b/controller/ct-zone.h index 889bdf2fc..f5a6b793e 100644 --- a/controller/ct-zone.h +++ b/controller/ct-zone.h @@ -62,7 +62,8 @@ void ct_zones_restore(struct ct_zone_ctx *ctx, const struct ovsrec_bridge *br_int); void ct_zones_update(const struct sset *local_lports, const struct hmap *local_datapaths, - struct ct_zone_ctx *ctx); + struct ct_zone_ctx *ctx, + struct ovsrec_open_vswitch_table *ovs_table); void ct_zones_commit(const struct ovsrec_bridge *br_int, struct shash *pending_ct_zones); void ct_zones_pending_clear_commited(struct shash *pending); diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index d6d001b1a..8764dfefa 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -2231,7 +2231,7 @@ en_ct_zones_run(struct engine_node *node, void *data) ct_zones_restore(&ct_zones_data->ctx, ovs_table, dp_table, br_int); ct_zones_update(&rt_data->local_lports, &rt_data->local_datapaths, - &ct_zones_data->ctx); + &ct_zones_data->ctx, ovs_table); ct_zones_data->recomputed = true; engine_set_node_state(node, EN_UPDATED); diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at index 2cb86dc98..6872dc587 100644 --- a/tests/ovn-controller.at +++ b/tests/ovn-controller.at @@ -2529,6 +2529,7 @@ check_ovsdb_zone() { check ovs-vsctl add-port br-int ls0-hv1 -- set Interface ls0-hv1 external-ids:iface-id=ls0-hv1 check ovs-vsctl add-port br-int ls0-hv2 -- set Interface ls0-hv2 external-ids:iface-id=ls0-hv2 +check ovs-vsctl set Open_vSwitch . external_ids:reserve_ct_zones=ls0-req-hv3,ls0-req-hv4 check ovn-nbctl lr-add lr0 @@ -2554,17 +2555,25 @@ echo "$ct_zones" port1_zone=$(get_zone_num "$ct_zones" ls0-hv1) port2_zone=$(get_zone_num "$ct_zones" ls0-hv2) - +req_port3_zone=$(get_zone_num "$ct_zones" ls0-req-hv3) +req_port4_zone=$(get_zone_num "$ct_zones" ls0-req-hv4) snat_zone=$(get_zone_num "$ct_zones" lr0_snat) echo "snat_zone is $snat_zone" -check test "$port1_zone" -ne "$port2_zone" -check test "$port2_zone" -ne "$snat_zone" -check test "$port1_zone" -ne "$snat_zone" +zone_list=$(seq(port1_zone, port2_zone, req_port2_zone, req_port4_zone, snat_zone)) +for i in $zone_list; do + for j in $zone_list; do + if ["$i" != "$j"]; then + check tests "$i" -ne "$j" + fi + done +done OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv1 $port1_zone]) OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv2 $port2_zone]) OVS_WAIT_UNTIL([check_ovsdb_zone lr0_snat $snat_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv3 $req_port3_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv4 $req_port4_zone]) # Now purposely request an SNAT zone for lr0 that conflicts with a zone # currently assigned to a logical port @@ -2579,15 +2588,84 @@ echo "$ct_zones" port1_zone=$(get_zone_num "$ct_zones" ls0-hv1) port2_zone=$(get_zone_num "$ct_zones" ls0-hv2) snat_zone=$(get_zone_num "$ct_zones" lr0_snat) +req_port3_zone=$(get_zone_num "$ct_zones" ls0-req-hv3) +req_port4_zone=$(get_zone_num "$ct_zones" ls0-req-hv4) check test "$snat_zone" -eq "$snat_req_zone" -check test "$port1_zone" -ne "$port2_zone" -check test "$port2_zone" -ne "$snat_zone" -check test "$port1_zone" -ne "$snat_zone" + +zone_list=$(seq(port1_zone, port2_zone, req_port2_zone, req_port4_zone, snat_zone)) +for i in $zone_list; do + for j in $zone_list; do + if ["$i" != "$j"]; then + check tests "$i" -ne "$j" + fi + done +done + +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv1 $port1_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv2 $port2_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone lr0_snat $snat_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv3 $req_port3_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv4 $req_port4_zone]) + +# Add port named ls0-req-hv3 and check if same zone assigned +# previously get assigned to it this time as well. + +check ovn-nbctl lsp-add ls0 ls0-req-hv3 +check ovs-vsctl -- add-port br-int hv3-vif3 -- \ + set interface hv3-vif3 external-ids:iface-id=ls0-req-hv3 +ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list) +echo "$ct_zones" + +check ovn-nbctl --wait=hv sync + +req_port3_zone_new=$(get_zone_num "$ct_zones" ls0-req-hv3) + +check test "$req_port3_zone -eq $req_port3_zone_new" + +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv1 $port1_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv2 $port2_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone lr0_snat $snat_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv3 $req_port3_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv4 $req_port4_zone]) + +# Checks for two cases after removing entry from ovs_vswitch table - +# 1. If port is already up, ct-zone should be reserved. +# 2. If port is not up yet, ct-zone should not be reserved. + +check ovs-vsctl remove Open_vSwitch . external_ids reserve_ct_zones + +ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list) +echo "$ct_zones" + +req_port3_zone_after_delete=$(get_zone_num "$ct_zones" ls0-req-hv3) +req_port4_zone_after_delete=$(get_zone_num "$ct_zones" ls0-req-hv4) + +check test "$req_port3_zone_new" -eq "$req_port3_zone_after_delete" +check test "$req_port4_zone_after_delete" == "" + +# Checks for case when a ct-zone is reserved it comes up on that chassis, and +# gets deleted, but its persisted in ovs_vswitch table, it should persist the +# same zone throughout. + +check ovs-vsctl set Open_vSwitch . external_ids:reserve_ct_zones=ls0-req-hv5 +check ovn-nbctl lsp-add ls0 ls0-req-hv5 +check ovs-vsctl -- add-port br-int hv5-vif5 -- \ + set interface hv5-vif5 external-ids:iface-id=ls0-req-hv5 +ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list) +echo "$ct_zones" +req_port5_zone=$(get_zone_num "$ct_zones" ls0-req-hv5) + +check ovs-vsctl remove interface hv5-vif5 external_ids iface-id +echo "$ct_zones" +req_port5_zone_new=$(get_zone_num "$ct_zones" ls0-req-hv5) + +check test "req_port5_zone" -eq "req_port5_zone_new" OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv1 $port1_zone]) OVS_WAIT_UNTIL([check_ovsdb_zone ls0-hv2 $port2_zone]) OVS_WAIT_UNTIL([check_ovsdb_zone lr0_snat $snat_zone]) +OVS_WAIT_UNTIL([check_ovsdb_zone ls0-req-hv3 $req_port3_zone]) # Now create a conflict in the OVSDB and restart ovn-controller.