From patchwork Mon Sep 30 06:47:37 2024
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Mansi Sharma
X-Patchwork-Id: 1990741
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=O0bkdq25;
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=PN95uSdC;
dkim-atps=neutral
Authentication-Results: legolas.ozlabs.org;
spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org
(client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org;
envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)
Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])
(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 4XHBTs53Vyz1xtM
for ; Mon, 30 Sep 2024 16:47:59 +1000 (AEST)
Received: from localhost (localhost [127.0.0.1])
by smtp1.osuosl.org (Postfix) with ESMTP id 8C83380F84;
Mon, 30 Sep 2024 06:47:57 +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 WFBDTpqAXf9E; Mon, 30 Sep 2024 06:47:55 +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 smtp1.osuosl.org 706AE80EF7
Authentication-Results: smtp1.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=O0bkdq25;
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=PN95uSdC
Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])
by smtp1.osuosl.org (Postfix) with ESMTPS id 706AE80EF7;
Mon, 30 Sep 2024 06:47:55 +0000 (UTC)
Received: from lf-lists.osuosl.org (localhost [127.0.0.1])
by lists.linuxfoundation.org (Postfix) with ESMTP id 1A215C002B;
Mon, 30 Sep 2024 06:47:55 +0000 (UTC)
X-Original-To: dev@openvswitch.org
Delivered-To: ovs-dev@lists.linuxfoundation.org
Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])
by lists.linuxfoundation.org (Postfix) with ESMTP id E73BDC002A
for ; Mon, 30 Sep 2024 06:47:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
by smtp2.osuosl.org (Postfix) with ESMTP id BC62D40193
for ; Mon, 30 Sep 2024 06:47:53 +0000 (UTC)
X-Virus-Scanned: amavis at osuosl.org
Received: from smtp2.osuosl.org ([127.0.0.1])
by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP
id f2AFkdJTk3DR for ;
Mon, 30 Sep 2024 06:47:52 +0000 (UTC)
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=148.163.155.12;
helo=mx0b-002c1b01.pphosted.com; envelope-from=mansi.sharma@nutanix.com;
receiver=
DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org DE38F4038E
Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=quarantine dis=none)
header.from=nutanix.com
DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org DE38F4038E
Authentication-Results: smtp2.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=O0bkdq25; dkim=pass (2048-bit key,
unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256
header.s=selector1 header.b=PN95uSdC
Received: from mx0b-002c1b01.pphosted.com (mx0b-002c1b01.pphosted.com
[148.163.155.12])
by smtp2.osuosl.org (Postfix) with ESMTPS id DE38F4038E
for ; Mon, 30 Sep 2024 06:47:51 +0000 (UTC)
Received: from pps.filterd (m0127841.ppops.net [127.0.0.1])
by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
48TE97Ek022700;
Sun, 29 Sep 2024 23:47:50 -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=z+B0FOpF+JyqU
DweZcGNV3MgfIPSyZvRIwSLl7xHIx8=; b=O0bkdq25XZNkqis50VOqtZ+xlYrBP
a+DEKZPJgBnnnZU5SoXAOR8gMjFX19JOKttfn40LvjJtQNoJRg9R3m4EyAzVaTY0
x+PeeKw96EYjHmbKADifHhOKxleBiLebE9B7U28LiA+7xtvI13gOOa+1IkerLUEE
xQY13TzCtJrBKyYAG4Ts8OOcLK02BZ4LR4azXHng1NUoOGhGdhvS9g6yVGjwpEL6
cG2DweDkUQlu0ert3Pcr0lJ91yb/mfttN21mKZY6DOBCXk8DJyo8ZeFRAH3caSJg
FPRGnrrrH3+Y6yZuKdCJIX6Fx6eXl1Qp2LEc3JBVhDatByaVAfFTKzHOg==
Received: from cy4pr05cu001.outbound.protection.outlook.com
(mail-westcentralusazlp17010000.outbound.protection.outlook.com [40.93.6.0])
by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 41xfb8u7ym-1
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
Sun, 29 Sep 2024 23:47:50 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=StWVFMeIufCD+L4WiP9Eo2m/XoQi/0LXUVR//+2/mTpxKryDqSQAtzoiCuRv3Y+LQnhfkb4I/BwIP3GXMkROfZxXrNg/i2I9HF7Dz/b8wSG467JInzmz9VGFJRlD5UEA15/2103xztpo99UkZ5iEqvQpvy3uZH+Zj28DhPOP7YnH9O/uXGDEZ52yYXQFNvReVX6/6ZQqQM7D7iakqqnbqb/ni36HGinvhxjT5h12V7npYJGA/641ow5XtS5g9ke2ZQm4vozihojnUqnM3eguP29IQEQkb59EQcEtIzPF7DI3Lk6mlxGtqYBddIHVY2R/U9E4IZU7EvfO3ZNv1nr4+Q==
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=z+B0FOpF+JyqUDweZcGNV3MgfIPSyZvRIwSLl7xHIx8=;
b=reBc+Sfc9OlNYZdFfwwlfgR4vC85nLCtqdFeSx6WVP4LiJDch6HZo5VjitYvxWYkPkMrfQFGmWjvkbMEDUnxTxbmM48Fo5sPEUextjLbYDvKAxz9jBDab56zapUE1vYM5PwX6EQB3uEzgOP/7fLDoQO9CwLS2p8NoKxEJ2IbRHcBOZ2i5gINJ8dhqOYXJngFNpP6P7yIBNxNfnE4s+HUKy5BJN7kAI0EWr/h1HT94bpmYWmPZKjOIjnaoO6wv0BDn2kN4kIVJc49ZQmqSiNjAs9CWbVoAOOhjNAglv9HM+ikqUTRH9sbvN1sFEqugp9bPErIQqUCKZ87RudliiYLyQ==
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=z+B0FOpF+JyqUDweZcGNV3MgfIPSyZvRIwSLl7xHIx8=;
b=PN95uSdCTjFYVIVMkCbd1P7mmb0H0LYFZWhTfTEjl9YRitE7uDVor9kORWB0V8KgkdYEUUwRNHCissg9e06ptLSuSoXbv1qADm+Fe3s6w2GaG7ni9qTlZ+NWCLXccYimdTflAzh2XXftL1InYycvkidkLLQWwHGnG48zI4Z39px4a2uDjMDuAZO7yZAEFxZiscj99NXtbCBt5cUzqtdhUyy9wFU3Qdz6mUluehW96YMvZ9xDPWSLmhZ2KSU198MveKvGfBclgleZrtU9uX4vqu6FDJaA8aTpgqK95EcnXPdbmPEwXtWQSpXhGRnCOhr2JE9//UF8DcvBYcjZGDziXQ==
Received: from IA1PR02MB8924.namprd02.prod.outlook.com (2603:10b6:208:3ac::18)
by BL3PR02MB7940.namprd02.prod.outlook.com (2603:10b6:208:357::10)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8005.27; Mon, 30 Sep
2024 06:47:48 +0000
Received: from IA1PR02MB8924.namprd02.prod.outlook.com
([fe80::ebb6:325f:1d33:c1b8]) by IA1PR02MB8924.namprd02.prod.outlook.com
([fe80::ebb6:325f:1d33:c1b8%4]) with mapi id 15.20.8005.024; Mon, 30 Sep 2024
06:47:47 +0000
To: dev@openvswitch.org, numans@ovn.org, amusil@redhat.com
Date: Mon, 30 Sep 2024 06:47:37 +0000
Message-Id: <20240930064737.31313-1-mansi.sharma@nutanix.com>
X-Mailer: git-send-email 2.22.3
X-ClientProxiedBy: BY1P220CA0004.NAMP220.PROD.OUTLOOK.COM
(2603:10b6:a03:59d::15) To IA1PR02MB8924.namprd02.prod.outlook.com
(2603:10b6:208:3ac::18)
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: IA1PR02MB8924:EE_|BL3PR02MB7940:EE_
X-MS-Office365-Filtering-Correlation-Id: 2c5a4be2-f02a-40c8-c5c2-08dce11bcb9b
x-proofpoint-crosstenant: true
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
ARA:13230040|376014|52116014|1800799024|366016|38350700014;
X-Microsoft-Antispam-Message-Info:
0/eiYxxDm5HxGSWN065ijMVavVZMecgC4TN4xyAIk98dRISvvIyD9Ld288o/FdExk9JHOXlzZWLaohxboL32ThVszLQ84WyNaz7nHD3IdTIZPqB+u5Am5k8beoYkDmh3HjYreI58Jq1D28m7KCpmMbnRfRyqDl+iDnxyle5lo4oWdxulhj9yXbXrCUsAGjqVK0EycK2UPyRJo7kdlO2lEk/dvC8ejz72+UMvlpCv/kBvFqnOK0ZQDWAaKPfFaynVNhE3us35iJG4ppDDyf/FX1l2nHmpG//ckTo+TrM2gogC1eyCQgU/1lNvdjXf+bApcBaEw1uQWZf5USZpElJo3HNlil6EGHpGbX6eOvx5jFrCAQdd6DciEC9HlHJmhAIyebguLpvaT6IY3te/g4aJvYM8U36qMxzViGmovSQkV1pQnj2PoBM/Qr5XF5UKI/y37ne54ADtdcgGOQsNBpzDNC4M7ZFegp3x97qhNM04Woedfm4RM/Wz1pd+jK+m3lzIsZmv5R7/lqiiqU4xUuZwpVTUEbMu3c+4X30uoUSEaHhTNI0yaCfcx6YIQA29h2j0YR5wJfGn828G4JfzycKraLNWs8Hy2EpY7Tkz62Wuacf3OMUnZy9DkQa+o2NRCj8XMCflxBQRi5Dkksunwooq8HHSxL+bVcFnOi0RuPpsU3Lr4a1R3Q+h1V3Rao2wPH+urtQs6njVdnWdHbfiWBNQuPViG3rQSGhw0FUg6BECWtBgV0NMLgGhVfmGEkXOvxKNB1AtuFEL3aBi8tnfAW7U4ArWenRwZiQ5fAniljh20LbI1Y5V0bxRnjo73s+P4u1h4iLQYQyR1DbG2++dVS6CI+MD8/8I430rZtCCyrwylEYkm5n3dFxg1p6B3LW9KgS63Uue8m/6Wg6f8xQZtZ+JDRrQsPqhMxLN8nKxgqKD5J98HJ5Kpqv4PciLlo9Mp8jbyDakBCaOAQEuK/vD6JLK0FeVakVGlXZxhMBma+v/0K6u73RkCIcj2K67/Cgt0Bo0Vl4haNM1voHhLpPocEGdGGHCoMQhPe21ymeLAN+Rn2zdAstNul/w+MCjyNypRIvlRWDNp8214Y/dzNKZyjfg+mlvN9E8UTjvGPp7zgttiHL8RVQHp0eXUGGzZJkwa0E03XOeFByNNCGJWXGxtiatiBVIjN9uWAqegx4vc10fGzR0MiDfIZI+PPwJZXlgbMKU8FoxeYW4hhJeeHAzDnTprSxv8hnYggjxKWeAgO0PZ1pU9devxHH6xGiicNH41XfIdOZn5DY4yFM9+SOFuuBMm+2q7hIet4N66TX7DUXvfk/tomfzPg0E10L/G9LSp9KbGZzKgpSU5pEO3EDaiwoRlZRZQAhiB85AZQrGiWI0A+Bc1XVLkvsYsVFyyEH40iPv7GHEjBVXNclTCJPdJ1gjDQ==
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)(376014)(52116014)(1800799024)(366016)(38350700014); DIR:OUT;
SFP:1102;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
2mveVGGCWjeiDL4GZe9arPtZW2i7kTsD8oTVq9f6mw9mjcbVfSviwyjlYxTQ4T9o38U5JBieBluiZgFaV5pBS6ffeKeyh6kV+8MwjILdtyxBs49hQVlHhUpXFtYh+FuHtgi+jPvRu/hPurah9gN/6u4eMNnolV0YDwS6AoZ/ZEx+5WFy7dym1KJjayi/7QmsMZWEt/0sjbOJwiTNS47ZUaHeFroK2l2wDRTCyh110mLw74qnV5sqm5rs0HdXnIUD11C6Rw0xDoONhqQKbsnb1GjUuODwKfe5iqBby9Hj0suNal0rSV4rLxGwYdJLN7uctmlPrTxQJpZa6q1Cljhd+SJfgYHzcMn3N2mO6IXeoboYcUmOnUGY1nZlR5QdllMv2axcvJMkhFUuTAwhVJV/ISd5VuIVREYcKpkxw/bF9nob4Gl2Uf+HnW7/sq1LCiBOwYfZMSFAJ2qnqB2xHPEgahb0dkrGNihi2VY+IloNQVHe5oBP8UqPjxYmiUPmbjPAvanSyKzKOpWt99x8OMQx0ba0FsNcAdJaNKYiVvUYxJwqU0/XeEWQelGRx29T8Pseq16mX0iE7USF3WpKwKB0eYXaSMgpH6YuvJPjHUIOA7Mue/LwfKDmTQCzkIgAvmZjqSvMoDS0t2F88jMrV6Uo1UayjJ3TBX2EI2YDD9xtv1NLo/ipAoXuQeAmYn+IgYBZfAao9bYfU7CBwc4QncXosxzEzryuGt6wjgjZiMyzxpBIFYb/aVBn/syBUxjTBSkgYa/lvjsQAPSB6YurC4ZUVSzhXFQbLKAEIMY5Oh5o/EX97QOcdQ5UZs6HwPswFGwpezCzgQxGQHBYvHBN646ImjLcwuJExLJ0I+3fwxn1FpboOGZ9zvOcQk0gkxlsSUFxwzVzCSCw7V8Ng2cnEyT7TNfxwZkiVXw126xlA/pxmXEZQ1T9Kr0PX3/XD3BEVAUXw3iKV8MedI+arQALzi9upf44oKI4DoaLB7mt8ya5shRN7QymuFQ4cCkMzCQgvqZvP/dpQgdkN2gnYhJaZzxU3577p5tcP9/b1pGcMtR/pzYmcFHvxW5JueC8CZYMApezvrNRgKWNQOSlFpD564S2Y4hyIluwuJ467mBlrcGI3VlSoV9ZK5txRFy8+k3i/pVBEiqDyv0si6xo1AE+vwFWJDEm1ayLamQo4ZmknknnDSTf8GEJakzZKBkGUcMEPyFbIR8/eX6KqAa7CnoJ51wdRpqHq1eaL3eaJGHwJQdxvVCOvVI7TxsDAqGXak/LmKAgfoZWs5cealPkgBBigAtsiOBybkqREA67//LILZg5qJG1F5DF9/Vno15krE175kx0WnRK2wDjykpja9SI/6S10tWAPVv/4Mn6M8/tyOQqbXtabtqPQd46JWLlJDbNGeLvOOI8f/wcA3kaDb57vJDuD+Nx9zWhjwyEpzdcQzbIvsP9D0smU+5Qtw6HPTG8c5SLKr5ijWVaxTwo3xHR2lCXV9FOcUq6fJT+X99jvlIoGVUQe964itbsXwbzEZMEBMAAxxa3fPpKFJ1til/05e5F5hu/dW6016R1NOWSjHGphc7CdCGOPyQOqeDVIa0ElFteyp6ej1ERToqMaJV61c9CEg==
X-OriginatorOrg: nutanix.com
X-MS-Exchange-CrossTenant-Network-Message-Id:
2c5a4be2-f02a-40c8-c5c2-08dce11bcb9b
X-MS-Exchange-CrossTenant-AuthSource: IA1PR02MB8924.namprd02.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2024 06:47:47.8014 (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:
Hgv1kFH4eITV7T7+QdMKmam1raezVvGog0nqs3CV454/Qbc7OPLJ9sPOi5YxEmJdYcSGsx2O0QB3SRRt+R87DF/nHVqVwvOSC9tqKIVOPek=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR02MB7940
X-Proofpoint-GUID: nPSGS5uwsygl-54ASXqFHZoPgnShO6ER
X-Proofpoint-ORIG-GUID: nPSGS5uwsygl-54ASXqFHZoPgnShO6ER
X-Authority-Analysis: v=2.4 cv=L7pPQPT8 c=1 sm=1 tr=0 ts=66fa4996 cx=c_pps
a=GHJUnOcs406mhZkDzxAeiQ==:117 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19
a=xqWC_Br6kY4A:10 a=EaEq8P2WXUwA:10 a=0034W8JfsZAA:10 a=0kUYKlekyDsA:10
a=64Cc0HZtAAAA:8 a=cFM8VOMDA1ylreAxYj0A:9
a=14NRyaPF5x3gF6G45PvQ:22
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.60.29
definitions=2024-09-30_06,2024-09-27_01,2024-09-02_01
X-Proofpoint-Spam-Reason: safe
Subject: [ovs-dev] [PATCH ovn v7] ovn-controller: 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: ,
X-Patchwork-Original-From: Mansi Sharma via dev
From: Mansi Sharma
Reply-To: Mansi Sharma
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
---
v6->v7
1. Added logic in ct zones runtime handler.
---
controller/ct-zone.c | 53 ++++++++++++++-
controller/ct-zone.h | 4 +-
controller/ovn-controller.8.xml | 15 +++-
controller/ovn-controller.c | 3 +-
tests/ovn-controller.at | 117 +++++++++++++++++++++++++++++---
5 files changed, 180 insertions(+), 12 deletions(-)
diff --git a/controller/ct-zone.c b/controller/ct-zone.c
index 77eb16ac9..a47a1e829 100644
--- a/controller/ct-zone.c
+++ b/controller/ct-zone.c
@@ -183,6 +183,31 @@ ct_zones_update(const struct sset *local_lports,
sset_add(&all_users, local_lport);
}
+ /* Add local_lport 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) {
+ const char *reserve_ct_zone_request_list = smap_get(
+ &cfg->external_ids, "reserve_ct_zones");
+
+ if (reserve_ct_zone_request_list) {
+ char *dup_reserve = xstrdup(reserve_ct_zone_request_list);
+ char *reserve_port;
+ char *save_ptr = NULL;
+
+ for (reserve_port = strtok_r(dup_reserve, ",", &save_ptr);
+ reserve_port != NULL;
+ reserve_port = strtok_r(NULL, ",", &save_ptr)) {
+ sset_add(&all_users, reserve_port);
+ }
+
+ free(dup_reserve);
+ }
+ }
+
/* Local patched datapath (gateway routers) need zones assigned. */
const struct local_datapath *ld;
HMAP_FOR_EACH (ld, hmap_node, local_datapaths) {
@@ -396,9 +421,33 @@ bool
ct_zone_handle_port_update(struct ct_zone_ctx *ctx,
const struct sbrec_port_binding *pb,
bool updated, int *scan_start,
- int min_ct_zone, int max_ct_zone)
+ int min_ct_zone, int max_ct_zone,
+ const struct ovsrec_open_vswitch_table *ovs_table)
{
struct shash_node *node = shash_find(&ctx->current, pb->logical_port);
+ bool is_reserved = false;
+ const struct ovsrec_open_vswitch *cfg;
+ cfg = ovsrec_open_vswitch_table_first(ovs_table);
+
+ if (cfg) {
+ const char *reserve_ct_zone_request_list = smap_get(
+ &cfg->external_ids, "reserve_ct_zones");
+
+ if (reserve_ct_zone_request_list) {
+ char *dup_reserve = xstrdup(reserve_ct_zone_request_list);
+ char *reserve_port;
+ char *save_ptr = NULL;
+
+ for (reserve_port = strtok_r(dup_reserve, ",", &save_ptr);
+ reserve_port != NULL;
+ reserve_port = strtok_r(NULL, ",", &save_ptr)) {
+ is_reserved = true;
+ break;
+ }
+
+ free(dup_reserve);
+ }
+ }
if (node) {
struct ct_zone *ct_zone = node->data;
@@ -415,6 +464,8 @@ ct_zone_handle_port_update(struct ct_zone_ctx *ctx,
}
ct_zone_limit_update(ctx, pb->logical_port, ct_zone_get_pb_limit(pb));
return true;
+ } else if (node && is_reserved) {
+ return true;
} else if (node && ct_zone_remove(ctx, node->name)) {
return true;
}
diff --git a/controller/ct-zone.h b/controller/ct-zone.h
index 6df03975c..0ae456a61 100644
--- a/controller/ct-zone.h
+++ b/controller/ct-zone.h
@@ -85,7 +85,9 @@ bool ct_zone_handle_dp_update(struct ct_zone_ctx *ctx,
bool ct_zone_handle_port_update(struct ct_zone_ctx *ctx,
const struct sbrec_port_binding *pb,
bool updated, int *scan_start,
- int min_ct_zone, int max_ct_zone);
+ int min_ct_zone, int max_ct_zone,
+ const struct ovsrec_open_vswitch_table
+ *ovs_table);
uint16_t ct_zone_find_zone(const struct shash *ct_zones, const char *name);
void ct_zones_limits_sync(struct ct_zone_ctx *ctx,
const struct hmap *local_datapaths,
diff --git a/controller/ovn-controller.8.xml b/controller/ovn-controller.8.xml
index faefa77b9..b070b724c 100644
--- a/controller/ovn-controller.8.xml
+++ b/controller/ovn-controller.8.xml
@@ -626,7 +626,20 @@
external_ids:ovn-installed-ts
.
-
+
+
+ external-ids:reserve_ct_zones
in the Bridge
+ table
+
+
+
+
+ This key represents list of ports which are supposed to come up on
+ the chassis, and hence need advance reservation of ct-zones.
+ It is comma seprated list of port names.
+
+
+
OVN Southbound Database Usage
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index 6a7cca673..694f2983d 100644
--- a/controller/ovn-controller.c
+++ b/controller/ovn-controller.c
@@ -2321,7 +2321,8 @@ ct_zones_runtime_data_handler(struct engine_node *node, void *data)
updated |= ct_zone_handle_port_update(&ct_zones_data->ctx,
t_lport->pb,
port_updated, &scan_start,
- min_ct_zone, max_ct_zone);
+ min_ct_zone, max_ct_zone,
+ ovs_table);
}
}
diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
index 74bff9035..c2fd35a9c 100644
--- a/tests/ovn-controller.at
+++ b/tests/ovn-controller.at
@@ -2533,8 +2533,14 @@ check_ovsdb_zone() {
test $ct_zone -eq $db_zone
}
+check_duplicates() {
+ output=$1
+ AT_CHECK([printf "$output" | tr ' ' '\n' | sort | uniq -d | grep .], [1])
+}
+
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
@@ -2560,17 +2566,18 @@ 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"
-
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])
+
+check_duplicates "$ct_zones"
# Now purposely request an SNAT zone for lr0 that conflicts with a zone
# currently assigned to a logical port
@@ -2585,15 +2592,109 @@ 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"
+
+check_duplicates "$ct_zones"
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"
+check_duplicates "$ct_zones"
+
+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])
+
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv3
+check test $? -eq 0
+
+# 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"
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv3
+check test $? -eq 0
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv4
+check test $? -eq 1
+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)
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv5
+check test $? -eq 0
+
+check ovs-vsctl remove interface hv5-vif5 external_ids iface-id
+ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list)
+echo "$ct_zones"
+req_port5_zone_new=$(get_zone_num "$ct_zones" ls0-req-hv5)
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv5
+check test $? -eq 0
+check test "$req_port5_zone" -eq "$req_port5_zone_new"
+check_duplicates "$ct_zones"
+
+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])
+
+check ovs-vsctl set Open_vSwitch . external_ids:reserve_ct_zones=ls0-req-hv6
+check ovn-nbctl lsp-add ls0 ls0-req-hv6
+check ovs-vsctl -- add-port br-int hv6-vif6 -- \
+ set interface hv6-vif6 external-ids:iface-id=ls0-req-hv6
+ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list)
+echo "$ct_zones"
+req_port6_zone=$(get_zone_num "$ct_zones" ls0-req-hv6)
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv6
+check test $? -eq 0
+
+ovn-nbctl --wait=hv lsp-del ls0-req-hv6
+ct_zones=$(ovn-appctl -t ovn-controller ct-zone-list)
+echo "$ct_zones"
+ovs-vsctl get bridge br-int external_ids:ct-zone-ls0-req-hv6
+check test $? -eq 0
+req_port6_zone_new=$(get_zone_num "$ct_zones" ls0-req-hv6)
+check_duplicates "$ct_zones"
+check test "$req_port6_zone" -eq "$req_port6_zone_new"
+check_duplicates "$ct_zones"
# Now create a conflict in the OVSDB and restart ovn-controller.