From patchwork Mon Nov 4 11:03:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006160 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A; 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 4XhpW55CVkz1xxN for ; Mon, 4 Nov 2024 22:04:01 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 1CDA480F9E; Mon, 4 Nov 2024 11:03:59 +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 dfTamaNmyR4k; Mon, 4 Nov 2024 11:03:58 +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 E7A7580F89 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id E7A7580F89; Mon, 4 Nov 2024 11:03:57 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id BCAE4C08A6; Mon, 4 Nov 2024 11:03:57 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 72C79C08A3 for ; Mon, 4 Nov 2024 11:03:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 538DD40533 for ; Mon, 4 Nov 2024 11:03:56 +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 U_JP3nYO-eUO for ; Mon, 4 Nov 2024 11:03:55 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2607::603; helo=eur02-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 190CF40529 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 190CF40529 Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=deIorA+A Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on20603.outbound.protection.outlook.com [IPv6:2a01:111:f403:2607::603]) by smtp2.osuosl.org (Postfix) with ESMTPS id 190CF40529 for ; Mon, 4 Nov 2024 11:03:54 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=A5EH2nzaseq2f4fqlrc0Bd9prlvnhNjmCjzz9VVUQk3FTcMT924UZIrzflLEDlM/6xa0M8kb7sEVN5FaL4SEPrU75xxA3IadnT+FTiKcF4TJ2LmmNBSp6GEf4D2ECgws70LFSu9+v5lHCCRgakUmQPwvW8LOqCgHhREOHNMQ37Iw9asnZf85bEVh6U0EP/6OVRb+XYUCN8FTZc9fwFPhgCNvr9NKnQEJ3+vl9eaC3nzp0TE5BDdpgqqGog/Fy7Us8/VQ+i6qcL/6YypbuZwVc5MoQ4k1MelgLQlHCJnlQcA9ong10mF0Bd8fbsj6Wn6YuYFIVsBGl9qdVzyUeirZLQ== ARC-Message-Signature: i=2; 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=Eq0CJgd0Aeg2O0eBzhR3FNYS5M9g6DR3w/kB/mhcuJk=; b=ne89uAbHjsny0+aVDhKEuv/CrA7o7fnyEkqTmNLiaYtlYhalrSMCSFBvkf4l65ynLajmx6UCzoS145iQm1dKhMVQJp8fC9sZzLgaNyTNDoYfQyHav7kctpFMfKxbgudj04xozig/JN81EXu58TMVdQBCsLZbZlipgu8agtqiGlmNdfzIPK546WZ672JSNwABPzyOEBMDPNZX+6DFhY3DnLRIQG0JJ6xOCpv7iuDGwaO4pBbmeBqtgdAiL6cjev7TbqO7wn9FuwBsc28XtNtzvivmaBtjRKFXHN6ATxk+6hwwdPoSqsjrA1QjkPNhENqlsKRl1WUqoy0/ZaiI7VQaRQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Eq0CJgd0Aeg2O0eBzhR3FNYS5M9g6DR3w/kB/mhcuJk=; b=deIorA+Ajw5dCkKTMNTooqettfqr/BwCalrpcJuTHmwfuZTLVfhxlvRhKXB9CJFcb4xVyEn6lVHbE2OwiVWiReggySd8jBcvOKs9Vv4t0VxUjheitEDY+WE7fIkIKfhcq8VYxtS5nUXey6U3CKFP6ROR1YsKzV92+GElzsJ5StLzFHmj0v04zIGn1B6cku/xqpoVv8YBr5CvzTOnzsi8brHw+ehcpLnsXJpL2fixzhGvWEnhbM14idBDyYy0+XkwgQ/SICPHK3QHpf1xAcsIwlspw/nj2Yw/GhlpAiEAj/fU5fPRQBm7t3n9S55OWbw1aGjndZXsQPaRzLcp5saEdg== Received: from AS9PR05CA0091.eurprd05.prod.outlook.com (2603:10a6:20b:498::6) by DU4PR10MB9144.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:55c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:50 +0000 Received: from AM2PEPF0001C70E.eurprd05.prod.outlook.com (2603:10a6:20b:498:cafe::70) by AS9PR05CA0091.outlook.office365.com (2603:10a6:20b:498::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:03:50 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM2PEPF0001C70E.mail.protection.outlook.com (10.167.16.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:03:49 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (104.47.17.177) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:03:49 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4234336 X-ExclaimerImprintLatency: 1913457 X-ExclaimerImprintAction: 11aa23d0e9dc49caa18220d0f80170c8 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VMyYMvL9CPpj60WIDvDQ1IayEYLRL77JDFDDS/BNCQ84Cxd3De/+voCRwSAjmw+s/gKO9kc7ZmaUlE4tYZd/nBnFfqPDQhm0xdjvE3bHYHnW8xj44OOYriM822/EYkVG/f8V6ThPDIWNwIQnmlcC+zy6kSWGgQVIQMGkJvy+f2nKdXdFJa4wrHy1lf/r/AA/+iuHWOD+npcIGRvVOYcGCf2Pel61XeZBrI+3xOlK/J6TrhsKQaWsomP0rggERo7FgF97Zwe9JvmwLpmaBVdPYUQAaCOfuY8leEFRaHIhNv/A6u7/TCLtBbvq40TDp9sS/sm8thyi5pp9iMmRWciO7w== 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=Eq0CJgd0Aeg2O0eBzhR3FNYS5M9g6DR3w/kB/mhcuJk=; b=jomxn40YEW2HwaNLxSKMkdlcDdi5kb2BPM4XmX40a9nVHcFEO3Elhh+BCvxDPEc0mZ91mEXNlyuzYQkzmg8NSYHMezCnR0FWIPYmbLBiyuNEbEZiNB3E3yu9PQt4k4adTPYVJKITrgp8qFoTs6H7fJgx61VLzNo93gU7QsqTFR5GMlspAWC4j/olGGByHYRzkh7XtSPfMhz5DThfEETzHmbYetUvu7X8mfhygZxb5KKk1WlAq5fAkjK1BodCgUtkVl8frnazEG1SKep92q6n/IHPH2ciTC7DLby5987cxg+SNNzj1/KkxKfsu++SkW/PK+juXuus7EWUuO/3syQZgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Eq0CJgd0Aeg2O0eBzhR3FNYS5M9g6DR3w/kB/mhcuJk=; b=deIorA+Ajw5dCkKTMNTooqettfqr/BwCalrpcJuTHmwfuZTLVfhxlvRhKXB9CJFcb4xVyEn6lVHbE2OwiVWiReggySd8jBcvOKs9Vv4t0VxUjheitEDY+WE7fIkIKfhcq8VYxtS5nUXey6U3CKFP6ROR1YsKzV92+GElzsJ5StLzFHmj0v04zIGn1B6cku/xqpoVv8YBr5CvzTOnzsi8brHw+ehcpLnsXJpL2fixzhGvWEnhbM14idBDyYy0+XkwgQ/SICPHK3QHpf1xAcsIwlspw/nj2Yw/GhlpAiEAj/fU5fPRQBm7t3n9S55OWbw1aGjndZXsQPaRzLcp5saEdg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PAVPR10MB6861.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:321::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:47 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:03:47 +0000 Date: Mon, 4 Nov 2024 12:03:45 +0100 To: dev@openvswitch.org Message-ID: <4f9f431b1ab525f733d8ea4a4c8055c098a5b0a1.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0119.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::19) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PAVPR10MB6861:EE_|AM2PEPF0001C70E:EE_|DU4PR10MB9144:EE_ X-MS-Office365-Filtering-Correlation-Id: e5f17e69-f76e-47d5-0d95-08dcfcc05c5d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: /R4ZYH7aEzyv4XlzXS2WYKCoYsp7iqdFkHk0y9frO3OwUKuUWgfFVRmiXdYDwXwlpecIKFMoYtWw7/YOh4yIqSLi9bDXxBdh0MyLLJsWqbr1+jaLfwoweReTRJPrdJcuZl2xpgy2zshi/XN9RH0rXP/zD4p4ZdZ3Ms3vPiXssMA16LGiOUlDfb+rygZy5uCZWEHMwYs78YyCklqsIMDf0dijUmYjHS+G5cuKSYxS8egaGAnIwFpIi2EeYL4hfoHNk6qs1CuTjx6O54IaoGmScTAEWx8rrZt7WJp+dtS+45OBjxZblkMUo9F23ia4YguVqQUvT0TqgHjQsXQLN9VsdaMISaoJCq382LneiDhOyKpM56xAid2TgpWcCZNkcQsAOHMyBGegOshD7mifnbq+5XYTylYA1GbsDxOAOURYTUwoK5l6kQ3iolEtf+EdLB/xAsAvS2XjROmW/rUgNwoxDh5PazfE0HYO5uV1OOLuGnQO2IMJA5Q1cFY/HOnEpSDUXaxIpKC+nXCrVbR0JYQuW5t9te/bDphfX1K2JJkGngM2BVhIUZt9Eq+WGNxxH3m2LVMwVZXmOzTX7nD8zmmllbRV3bg4z0A4cJqsUenmrDso7ouzA/YvX77zWICSA6PLWkWu6iyS2QYpC7jdDbY3F+duub1N5hQdW9+DfLicUOkiqMB78PiXPuKtVjqF4uzJIgdQcpSl+AxlD+CFX2lk654sIA6jeJFRXEhwF0gPHvEARNRaei1lbRwG9v4Jb2I+7H+6BV5ReE9rKhS/NoaCtfn0kF81+7iTve7mBqrDGROMWie7zIX1ANeOlm1jyr0J87Xp0aX/YdX/9wJw85oNMW2r1p0Fd8hdD0/1Iy+KgY53KZZ9/GZlmK3sqlmiGHBL+xeAyprW8ho9+a81a7qw5PUcMdPEYrAt8nYT+i0fK/aqKJrnZzdRnOW4/2dxFq2oOHFcV8reTIS0rMI6CsJF48KhAL1WrJCU5bYfs08KYpagX8MDhUbdg2ZUyd0kaoHm4W4CJzMhnJPWAcI25lhdN2rBQHc5dNPBvGBGMyRUDOQA9023AaqTnfb7NESe0xuyHVM3zmATGrQ3B4ne2Tc0faMtO37bZH7IgjtrLyo4FtEX+APg1K0dztyeBGy8pJORHgAY5m7HpkHE35/i1YqDe33ZBKm5OozEv60yxK+zLF+biVYwnc+TIN8ZqYaYQ59BUkpviNAVjrgV11qXXPj52a3mJf59E0F1DG+RfXi1+8F/EvhXqNkDnZjfH7wQ9i+WmJpZo5ATz/HlGdG/Ry5W1gh9tosXgDvuP/tELEbGU56i+P+opN76gH6yigqm4QkC X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB6861 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C70E.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 5db2642b-9313-4fbe-ddfb-08dcfcc05b37 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: C1Z6Du39JmkWkHcEe9pnRV4tr5bMJt0SQN+ixXrrCdYNggHbRSke9MgMqE/QcgzntWezkv2sZe6BDZEhPj6TskcTgCLgZjc8T4ndSyBh2ONgq1ngIT7tEibMFquIhZvuGOpw4SFHUEKrpkfTY1wweSoMUn0z4p9dJToU5yMSdbhAgMePh/3x+dJMvPpVrm5pdfOGfUAWRbIMH8c25pZMUpQfG1zO8jwngolqJkL/ScmZpQBsR36uNHLyJ9SUV3q/veq6OE4yRTxjQTtUOjouY6atslEb/gVepDO6V+xg1Juc2TmhYUsEA1UtLoR6smgyRISgmYL4SlSTBB3zURb/2VHj0lFxck8qQHGmtL9cLw2F997U20iQDMaUO5nuoJdmlgHZNfdq8aRbS0+K+5wZffSLaPAU8rZxHisl6NSGGQ3ngX7R5gubKBUAm9XwAKt/ikj01/65n8TELwJWj1xrzi5e06eHy6e5XuO6ZTzf8mAvRi3Qwf5w5LUPKK8DeC6SBqoongA96cKTGPn+ztrPeQ5Qv0/cEiBiUJ4FTHshunyK5qhnjfG5xgRZ+fVDO51bITEIx9Bu3YrW4j14d3hswMHzgDxWXgn0x5pPpJRybylc9OjPWa/UzTYcRVipXCIY57wHt7rV/SOvGYwKq+tX3AXNuGyekE8gsV8EnSltyTHQv01qsegRw6ekJwpcszsa9l4jvILyWA/ugHjyy8ge+4sZtYq50uLHK6lFrWihmOIrd01lwUKkqSQ5ONnFFvgm9WIjDFcQ5R58bb1X8SVaheBTg6cnvinJA+L7PWpiVIFOnZ1FSgTqxKKMwyPLNWsv3MUQXKvvyJhcN1G6dDuX9xx7UtEGKlNJdBJxg/fyHSVpe6VuKj6GwTJX/wf6RMGY1vjQNDXTHhszhZoccR3pNDDbDLWLCKGQ1GbYd2EXSE0uKbKqD82D2hU7Mka5RqQDHNPmpwQ77p/b0kX2/g9StWFNsVNhGiCDYa3Ty1IyOA8PtjjScxUJHNoesW2tPQltgN1FIqpar/IA0NLWBv7RnBRh/MrDj/ZCU9s1ZlxIRv4F5CNy8HqP1GSUaa4IiYepWC4tPbKtGM44JkWTh2aItkB8Wrg8GRFfrP2TE8ItUsGPdsS9vF9gmVsPvXASB9yBNZcok2mwVvuIAUsquRXYXPIhDju4SRyKTrad8qccuEWumbTfA8fNfYfSyosOiw63qpfjsA7ZhRxA+d5B5IEXAwR6fCEsgN05fL9nyNzHflJD3w8s1ALVkwzmQF/+Xs8cmQN8QiXMjrG3XTm40Q0F2UzR/QJ93jOORWjx5jah9C+9tAY4LGt1M8+jdIJuHZr/wDDjWR0rQdvR/rjDwHcgNgpccIbkKc/rdatLj+P6ecZlQvW5QBKDV3FUqMnG06XpAy3K+bMK8vYwMfLDBbd7DQ== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:03:49.0946 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e5f17e69-f76e-47d5-0d95-08dcfcc05c5d X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C70E.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR10MB9144 Subject: [ovs-dev] [PATCH ovn v2 01/32] northd: Set southbound mac from lrp_networks. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" We already parse the networks of a port to the ovn_port struct, so there is no need to reference northbound. This is a prerequisite for later patches that use derived router ports. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/northd.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 0fe15ac59..32a7c8509 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -3139,10 +3139,25 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn *ovnsb_txn, sbrec_port_binding_set_parent_port(op->sb, NULL); sbrec_port_binding_set_tag(op->sb, NULL, 0); + const struct lport_addresses *networks; + if (op->primary_port) { + networks = &op->primary_port->lrp_networks; + } else { + networks = &op->lrp_networks; + } struct ds s = DS_EMPTY_INITIALIZER; - ds_put_cstr(&s, op->nbrp->mac); - for (int i = 0; i < op->nbrp->n_networks; ++i) { - ds_put_format(&s, " %s", op->nbrp->networks[i]); + ds_put_cstr(&s, networks->ea_s); + for (int i = 0; i < networks->n_ipv4_addrs; ++i) { + struct ipv4_netaddr addr = networks->ipv4_addrs[i]; + ds_put_format(&s, " %s/%d", addr.addr_s, addr.plen); + } + /* We do not need the ipv6 LLA. Since it is last in the list we just + * skip it. */ + if (networks->n_ipv6_addrs > 1) { + for (int i = 0; i < networks->n_ipv6_addrs - 1; ++i) { + struct ipv6_netaddr addr = networks->ipv6_addrs[i]; + ds_put_format(&s, " %s/%d", addr.addr_s, addr.plen); + } } const char *addresses = ds_cstr(&s); sbrec_port_binding_set_mac(op->sb, &addresses, 1); From patchwork Mon Nov 4 11:03:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006161 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 4XhpWB5tNTz1xxN for ; Mon, 4 Nov 2024 22:04:06 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 08FFD405A0; Mon, 4 Nov 2024 11:04:05 +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 MJl9-pDSvAzJ; Mon, 4 Nov 2024 11:04:03 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 1F9E340590 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 1F9E340590; Mon, 4 Nov 2024 11:04:03 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id DD982C08A9; Mon, 4 Nov 2024 11:04:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 870A9C08A3 for ; Mon, 4 Nov 2024 11:04:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 699BB80F94 for ; Mon, 4 Nov 2024 11:04:00 +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 sCRTIceK3Fyz for ; Mon, 4 Nov 2024 11:03:59 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::611; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 5241B80F9F Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 5241B80F9F Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tC1klqHy Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20611.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::611]) by smtp1.osuosl.org (Postfix) with ESMTPS id 5241B80F9F for ; Mon, 4 Nov 2024 11:03:59 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=wFxRSBUeo1rzZhkAMR/KZGZ7PU/4FljX2pB0HNlq3a4myJvoGBqXShLT9Zm64xawEp65ycFRbirbvYP2wsETXbgvQJhxRCwp6ovV7H2Kon2U1G8N1C8W9hvYASMorEx0p/2EPJ0e+LK6rYXP2S3UgEvthu7wFdzM+V6Yf12F658HyCk/pvqTB0EVwqQENoICGHA0gfaAUHTaY0kTVyPn2eBl4m6X3Bvdk4EiuCmNFBbEgNvmr/YfJ+NOyIPNh14a31fAQ+o024vY9GPwvf9C9nMa04+zMTFTEUtXN98ic5XdhHBSjZOnk9D9p2ez5bXKxu5MxPQH+6IkE9OHmG2sAA== ARC-Message-Signature: i=2; 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=Pi3XWVWnLt5V9ns6LoRA4NXtOEsnxZ3+z8TkO4OwPIQ=; b=r/zsW2awZ88TRSCUJaZVApFLjlWv+w5MWoG6lsIT/XMw9+Pw0ra4CKpNxJE3TnwU/MF0/7spo+UCULnU3meTy9AJSgL8yfO8jseU23FkFL7DVbQTM26dY/P21a7Cd/MJaZJ+ObwmO9Y8kePATl/H0/5orYDsDTSrW5hmVMDU0m+gvovh9t0y/IrgahUaSlqIlNhdgemnDG0gvsHDbvgUa2TmhU7SwcNGLODkeZlA9hwoIgQQq1qGlYQgGYz0FJdK5kOCwM0rtsHSWHWHzq0TH9D0249k+fBLI11JRPq1kYx/RBbRtnBSv8v3Nrj07b4/ldu6Y38YW5aI9kr2Qa987A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Pi3XWVWnLt5V9ns6LoRA4NXtOEsnxZ3+z8TkO4OwPIQ=; b=tC1klqHySPdq+nIHY8wU0/akGCN+IauJDQdwFghv1EG1SYoW+k2psbSm9vu2/IaQUUB7ojgGpSyveyqtfNXPdKsYnvRslo8FLbLiTPxXKC3U7+zum36nEa3hmhL5we4iCpvkNnTYfh4IkH6yWlHjayGK14lsmMkUOIPSrzflCZ7nsXVxMQSMH8z/GZ9D/aUYAB5hNhp+l8uD7yA1OT3UPAgs8HU9F/f2Rv4TNSdgzbNj9RdCh/M4mX2mIKDTbSNJuN8VOtGolPuFGhcMKPsyf9OTsuh3JpLqpcYRN6oGvsXkcPxJZM1RlX2n24Mh1gzvcWyVx+5oPpYqOtdyZh3IsQ== Received: from DU2PR04CA0209.eurprd04.prod.outlook.com (2603:10a6:10:28d::34) by VI1PR10MB8231.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:800:1d1::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:53 +0000 Received: from DB5PEPF00014B93.eurprd02.prod.outlook.com (2603:10a6:10:28d:cafe::cb) by DU2PR04CA0209.outlook.office365.com (2603:10a6:10:28d::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:03:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DB5PEPF00014B93.mail.protection.outlook.com (10.167.8.231) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:03:51 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (104.47.17.177) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:03:51 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 7511893 X-ExclaimerImprintLatency: 3030043 X-ExclaimerImprintAction: bf7ad8c023524a53a0ca5d507c5753f1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P0IoSmD1tv1m3RAnj5VgKySHRtzrF3JCa3lzc54K5ZFdou9+eH+1ky+N7jygquAa212xHHJKNDbjY/2NpRVlGS/NhdqrZ/GrDIFA229WI6YeZk4+ShbINVEUysGvESd7VJOmrjWVk4sbocY4pEx8CGEPFbO/tWVpNnS1FA1on+3dvpmuMAetT8cn2yr1blDvClgz0yjvbcBKWQs5BzJRq0Ht/TGJC+pBzYS3P9FKM+p26Gc/H0w2QEjX+JfEr2CZFj3HdOlh5Jh9UFYq71c+IGCJYWjPPF5l/qIcII/bXiqEVmRH1M6Bv94y5sBY+TCTkE2N6ntb7LqMV96P4zlrMw== 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=Pi3XWVWnLt5V9ns6LoRA4NXtOEsnxZ3+z8TkO4OwPIQ=; b=uYJ/+/SRjTzZxUmh7N5gtlCLPCmz+Qw9DQmgSSWnsfdz9z4yZkuKzXRcSABBURXANiXPZCEKpWQaizg/WmqhcDvx9vWR7rsfe8XsZePNdpgwy1hJvZjzLn4n2GZIKKGxIHkOSaesfT0b47HO5VDO0lBqxt6oh2YUfDEh6ykXrwKiyro4rOnSImayHl+zUypLGp0DlGpdJNcKhGwlfOcGcdbsoGYbE+sRuYYGxPe41E2okM0mc1o8ND0k2patW+mpkfAHBFmhfiYxGESyjYSLiFj98aNiZRjCdOIrxfxJQlNOaoFrHCacba8WHmfD6YkHf8Fmly+soj6zABoQQ2n37Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Pi3XWVWnLt5V9ns6LoRA4NXtOEsnxZ3+z8TkO4OwPIQ=; b=tC1klqHySPdq+nIHY8wU0/akGCN+IauJDQdwFghv1EG1SYoW+k2psbSm9vu2/IaQUUB7ojgGpSyveyqtfNXPdKsYnvRslo8FLbLiTPxXKC3U7+zum36nEa3hmhL5we4iCpvkNnTYfh4IkH6yWlHjayGK14lsmMkUOIPSrzflCZ7nsXVxMQSMH8z/GZ9D/aUYAB5hNhp+l8uD7yA1OT3UPAgs8HU9F/f2Rv4TNSdgzbNj9RdCh/M4mX2mIKDTbSNJuN8VOtGolPuFGhcMKPsyf9OTsuh3JpLqpcYRN6oGvsXkcPxJZM1RlX2n24Mh1gzvcWyVx+5oPpYqOtdyZh3IsQ== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PAVPR10MB6861.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:321::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:49 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:03:49 +0000 Date: Mon, 4 Nov 2024 12:03:47 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0110.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::7) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PAVPR10MB6861:EE_|DB5PEPF00014B93:EE_|VI1PR10MB8231:EE_ X-MS-Office365-Filtering-Correlation-Id: ea018b64-ef65-4cdc-e3f7-08dcfcc05de0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: crWSYH8zsxrGzvSudx23tW4Uj7MNoFrRjhrsk2jirTW7XpdT+2GfNkmlIXw/L6aGFG+P0izrKd6k9TiSaCUBn7nd8Sb9VrV8IWzuohKFTqffO2RPKYpsUgU2sugN6xEwKt6T0kBoRM539FhK4Bc9AqdgcUYh+Ya9yBOnZWqVb9piw6k6mEp0YcR1dLotnim5fzLOXnJLAx0afiorF5Glv0lOXjb3ASIlTepPv4gmkhcM/m10do07mYa7MOkXljUoNdvQL/tcscMtfzuoN31+QaoeY8iqB5ZBoo24HqEWtmdzGKJ4bXyyLRKspF1WPRYhgrE3mHc5XWVItxVQrplZGa/q3Tlc3VQ8QW1mF+m9IL4jQEX4DBy2M+nvNwQLhNauXt+1UHbMNB8JjStaPHYjsKZ87GwV2z65eSW1mxYdeAcaRGpoaT+EFpE83YSvt1Vh/Pxob1CifgmnRhxMFdJ4UoVNIppc9zlLLqOKTPbtq3kTjU0K294xTeQ7SgKkWQcjZmvwaANT0idQYvamggyzCrOcehtYIZc88I6QvooG0InhsWr1A5Jp1YCFJhWuLQxvZKFrC4tfVyBWu7Xw0IGwE6OR4o01M+iYpbqc13PjYMGUezgiQfM+ozJNSw21PUItek/RHNnSR6pt+pCeHLogoZqRWzk5p4FhaBKPyU3NprxUpWN38XAtB9JyxtKd+Pm9XYsr8B+2etYMmcJbWMRMcBLVbQObjg4BYiaccYM6HW84+9oUtOXxhlE+yGH1Ll9NBo04nBURGcCPEThuUZY7iLmXp+nd7oTUFFRkyF0XYWw9k2EC8gOEwOPkEVWCBN+IWoNfwtRWFMKaDR02r2M/nD0paRDh6g7ZrlK7+0L2dBIfmKO3P/a+FQecfJyrWrK3abxGI30ezfdB7w/Vfh6oOZrrcoUe8sp3eb26n0rWfx59azVabjdUjVO0zLWEkVIh+dbShHEcP7R1cNWnsLxhJe51qEIF5bkQMRt/1Iva8b1piOSnbTZalUF1vY6hlXEmW15kxbNsOLO08fNpAiJehdfJ3qlJPjGiOf617JOFoTrIGAmvJ65swmFcpcmbG1xRfzH7KXiOs4dWLuk4Ea8yrhQphC8ImWpE6F7Ewt4yIwYQ2tf6tPqv/+PKtRuGodw69zBphuJHxJJuH1+2QTngC6m2nWLAWR2iakKgOghM5EFpWIPxcvzna9+i1gwnW+Y5jfcQZGChY0xofPJC1MWYHXkEYYvXQt1sbcXtZgJqpd6jHT61KIZ6t1A2EpblSRNDpJs0IDeobQcsibFKXTVBHl21cvG9x0U7Ab5ZZQ+Jd1faGMT0sWiT0Sg6xnLVhZNb X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB6861 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B93.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 86000883-dbe6-4afe-40d7-08dcfcc05c64 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: KoZyZdSnTbUhz+b4d568K5es5w6j0vCtWWzemZzswJhPbR+qoVJDo9EeSx/fm/KJgptJZ/hMiMfnwjBbInBkzgnLti82vVyT7+en9kkJrWsQMPy78ts16g6FxIoqr99u4MDQgwmzdXkGKUgBCxyckdxJ0lbKJJSv7pYvSKsPBDCBT6RD827P0M0GvHsRZ71NCacj0kH18pnIvxPHM4fKbNQR3ycSleynt02ilXkXh9Ob98f1lV53v4+xOS18WaxyDlsG9QcnwaHuUj9sbTfa0W3kTxuplfs4zLQkds8WhSs3JZv1OeF+s2gfYFDg++Rz9Bqhy2boVtPXlVFhBytILcL5fxTzeQdmcLK2tolAWkfgK35nIYOSMJleMaXEX+KfL9LlqGCz968RKXVlclHsvZJLnsznA+XBKg4E242xqsEtQvPCE5s1+re8+JDgh7SQ0mKHlIKCwxJcxMd1M7MM4QP+XCvEguxIVnGIOaKIEEFWG8UL0GCxnzi92i8IqpF/kNY7IOm5UCx/67UNAyzqTnnoQ6ye3hH+/AgRq6JMS+wWp0pPKso9hIWlyT6x1JGCsujW/cwIzknPwA2XjF3lWUdz8QRDeM2+NDYf8EA8GKFYnMtfO3sowXaqwX0WzGQdRrkXESCK5P4LLNE18T/Wb8Hwve7m+M0HoyDGuV9u3TgcuHctJ4dmDhaXmsGopwRBiOXi+gV8Tn9kldaAWyUYHdBPSP8pYu4Zb9eEb+qoAKhcwYsUhHYBrSO8NMfKNomSzLV9zluHuiHHSQC0SGKxnI45rQc+XPJ+DqicGnMINnDGgr2dZ+1pjODS1v+litYcFqBbLVuP+4pegwi7Y6CPvYM4WercYiQMQA+r/PfYIi1BbrGnyYIAUw4tQ1DcyMsN4d1JS4rkEXGBR+u2CsdKQpkyEkYKiF6rAOZ/b4n7qViZhrN20bX14TvzUaWoQYf3ON7NZKuX5tsbdY9r0rAY8UVKglDglDqxw6/AvyyanJq8REZfaMVECygDX3tEzlM83a8S11ejE0okD8QjtFOV68ZlRRBWqsU5sdcEVL1WYoOS3ILeVz0wziv3QUKKaRuBDQV3b52VVWRQwXRB3k8h7NrMp/KkHApWoaKYNjQ7RfzMW4veczwjK/3SONLPHg3Lhaj6GtybcrPQ1ebg9f2bv0q3hR/jzXgY36IBI9ECmbHmZCVKy9UJooJQAxGMTSu/ZNcGVrHLlPbPPBOeHERqdm6WapWIGp6zPdNJY2SIVquARiBToTNK2BtvU5Pkp8vwzYLmdvaNZKq4BEstfJiDy75cL6djScMxtC+/PbBI19c2V6TzTeuXFIkLLi29fbEoUVSuinr+LR2diwpmbuMcZp8L/NHbJRfdQ9gmSWyxAQxBA2qBigWlqscpuLtrRj5YS7+pcAmVOlk3LRofS9/vfA== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:03:51.4020 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ea018b64-ef65-4cdc-e3f7-08dcfcc05de0 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B93.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR10MB8231 Subject: [ovs-dev] [PATCH ovn v2 02/32] northd: Fix relying on naming coincidences. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" We previous relied on the fact the the southbound Port_Binding gets the same name as the Northbound port. However in all of the cases we use this we already know the name the southbound port will have. Therefor we just use this name, instead of getting it from northbound. This is a prerequisite for later patches that use derived router ports. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/northd.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 32a7c8509..fa3a8a882 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -3305,11 +3305,18 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn *ovnsb_txn, if (router_port || chassis || is_cr_port(op)) { struct smap new; smap_init(&new); - if (is_cr_port(op)) { smap_add(&new, "distributed-port", op->nbsp->name); } else if (router_port) { - smap_add(&new, "peer", router_port); + /* op->peer can be null if the peer is disabed. In this + * case we fall back to the router_port string which + * might be wrong, but since the port does not exist that + * does not matter. */ + if (op->peer) { + smap_add(&new, "peer", op->peer->key); + } else { + smap_add(&new, "peer", router_port); + } } if (chassis) { smap_add(&new, "l3gateway-chassis", chassis); @@ -4025,7 +4032,7 @@ sync_pb_for_lrp(struct ovn_port *op, lr_stateful_table_find_by_index(lr_stateful_table, op->od->index); ovs_assert(lr_stateful_rec); - smap_add(&new, "distributed-port", op->nbrp->name); + smap_add(&new, "distributed-port", op->primary_port->key); bool always_redirect = !lr_stateful_rec->lrnat_rec->has_distributed_nat && @@ -4050,10 +4057,7 @@ sync_pb_for_lrp(struct ovn_port *op, smap_add(&new, "peer", op->peer->key); if (op->nbrp->ha_chassis_group || op->nbrp->n_gateway_chassis) { - char *redirect_name = - ovn_chassis_redirect_name(op->nbrp->name); - smap_add(&new, "chassis-redirect-port", redirect_name); - free(redirect_name); + smap_add(&new, "chassis-redirect-port", op->cr_port->key); } } if (chassis_name) { From patchwork Mon Nov 4 11:03:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006162 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpWF3pqVz1xxW for ; Mon, 4 Nov 2024 22:04:09 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id DC553405CF; Mon, 4 Nov 2024 11:04:07 +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 9tY-CsskD_qU; Mon, 4 Nov 2024 11:04:06 +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 smtp2.osuosl.org F01D6405B1 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id F01D6405B1; Mon, 4 Nov 2024 11:04:05 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id B3D7AC08B9; Mon, 4 Nov 2024 11:04:05 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 171F7C08A6 for ; Mon, 4 Nov 2024 11:04:04 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2E25380FB1 for ; Mon, 4 Nov 2024 11:04:03 +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 9wHaaeYiCvKo for ; Mon, 4 Nov 2024 11:04:02 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::613; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org EE63C80FAF Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org EE63C80FAF Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ugz7vIRH Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20613.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::613]) by smtp1.osuosl.org (Postfix) with ESMTPS id EE63C80FAF for ; Mon, 4 Nov 2024 11:04:01 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=wnacFqCSDtT/o0Zo48wf9bYHCa9cv0VB+Jgw5H2bEsKFyCONsTC7FQctfIVZakBbaVffXmT/UJM9j6vzEwGYMxr0LAegWEW4I+62QLEr52jXDrKdM46GB5FYKloiBoXMY7Q9i0iCN8PgKVjKSqv9OlsgRrLsYX4aj+x9SkPVsbaS3npsAAggibvkxkbAxCDV+a7/S/Fl37TjSRBRz2VzIEQZi8aB4FzshvJjnjhVtJ3I2ej8RsCRvIDlGc3l0Z2bDYRv0b4PMqoOFHtlP0UFWww8trN2yJ+amzE5o3XBQ2+g6BAl4P39tiTCyApkKcMyYevyJHq6VYbAGLdr/zkZxg== ARC-Message-Signature: i=2; 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=tfFraQXx52J+ka8JEALva7i56uUfbfLiC/B9QFBQXeM=; b=Rjh/GnAT7tdbPT75O2Y04qy4TAdygmJMqhjjj6Ru+h4YWaY9pf6Nx65SPtHL2P1dT4GSkDWLPWkZ4g2SrrMnsUx2cvvTnXQilBJpYl69U9A7tp93aZ2HVKfrtlGm7+3jJkoduUDkzyQX+Ofd1E6feKlX8rBmAtKOYSLJtGLPjD/rYaBdMXeAs3uPcLYFZUmxAU43ToJHaFVJu4pjHip4YVgnK42s0MevFcBfWV4QA17ABgvN/eF7a8evJPgsPIhKCPqtrFOIp03qSuDFW3EDHPUfulz1YJnaCW0+CMtRi0EgusSt3d8azCZdG/ZIuiWiNQNWPMyPXzAOk5ocVesE4Q== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tfFraQXx52J+ka8JEALva7i56uUfbfLiC/B9QFBQXeM=; b=Ugz7vIRH8/i/AUQVM+6bXC74fmWeIsDFSKV59F7D+j7/Ai0wchWHtsqWbRfGz6VNPU33NNH7O78BQYvagRsZVLtxOm/a5+2fnWpMhckFoA/On3Hr6dIMprcelHKwyFu3Mq7yhoxu260Ej+Mz3e2FaqK0fkOg2Yj8MgwF3egfof0t/wiRXAMSVnKuyNXweh8n0O0khAjfzdhzhnGW3/uGBOj7db9kjv25f5vnHAu9D4B1R+VHF/L3jgkreMhX/k35+W1Ii/fpQ3PQx70ZOzfnOJiurVz6zMdtABhEOtIxQQZHeU6zI0hV9I2aD2LiLIKXJr/2bu1CbLNDgvNOMWNIiw== Received: from MW4PR04CA0126.namprd04.prod.outlook.com (2603:10b6:303:84::11) by PAWPR10MB7198.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2f1::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.13; Mon, 4 Nov 2024 11:03:57 +0000 Received: from DU2PEPF00028CFF.eurprd03.prod.outlook.com (2603:10b6:303:84:cafe::f7) by MW4PR04CA0126.outlook.office365.com (2603:10b6:303:84::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:03:56 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DU2PEPF00028CFF.mail.protection.outlook.com (10.167.242.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:03:54 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (104.47.17.177) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:03:54 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 7564968 X-ExclaimerImprintLatency: 2509283 X-ExclaimerImprintAction: 27ae37f060e74e21b694b840face4d1b ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DbMC+3JwoGYnwYkguVK78zLNbldRkUeriSEjyJjYu6UG5EF2KloS/2+neSls7l66SBRtxYrVeE6c6sKHxlGHrueYfvfOVPztDkfb3KyiuZISkfvkkeG44A0ImkRjLeYoYPbSmcLsUAwrTvVwBzScQpvhwWcGebT2lA79y+JKZxMQmYuA2VSzWEYEXPQ8cyRhAoGqAab7+siqBf+pXKdV8yZkBuVVeG2p+6y2T6HE9Hf2V+Rcg8wkFnKFGp2gmbNWCTtNlNTYNjyQdeVvgfBZAZXLU+c1oRBXDqC+HKFN6AEGfZ0xbZkRZHEEZLKF9/1pjPGTgg9ZQAEyWtYZSGz+dQ== 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=tfFraQXx52J+ka8JEALva7i56uUfbfLiC/B9QFBQXeM=; b=wfXG4HO5Zb7TvjwKnUchjuG6vwh4RNABFgGqzc+hT2g1bleCz+6fslHbUr5+lquUIrjHyh9kShhRbCXzWk3auS4HYETgmlCjpWjGv9L3qF+dA7Qr6lELShGaJAIso9Yiasy3J356fPOAN8v/C77PRTk9zY63KsXqHsxqfQk+Dhk+MOOxhkgSjohm27tb6e6+T6kdX9TXtTr28RHMgVy5wJFPIBhY8Vhswc3eDrLSxkj/Uo1BQXRprJ88CB62c7stnEVZzoAVkyKyrwxEt5pXYIzIa5v/TxnsMl4nOoolfmu55rDJbXd2m6WtTYI95ImbVD5KDRKMBGhNDNMbFM4Myw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tfFraQXx52J+ka8JEALva7i56uUfbfLiC/B9QFBQXeM=; b=Ugz7vIRH8/i/AUQVM+6bXC74fmWeIsDFSKV59F7D+j7/Ai0wchWHtsqWbRfGz6VNPU33NNH7O78BQYvagRsZVLtxOm/a5+2fnWpMhckFoA/On3Hr6dIMprcelHKwyFu3Mq7yhoxu260Ej+Mz3e2FaqK0fkOg2Yj8MgwF3egfof0t/wiRXAMSVnKuyNXweh8n0O0khAjfzdhzhnGW3/uGBOj7db9kjv25f5vnHAu9D4B1R+VHF/L3jgkreMhX/k35+W1Ii/fpQ3PQx70ZOzfnOJiurVz6zMdtABhEOtIxQQZHeU6zI0hV9I2aD2LiLIKXJr/2bu1CbLNDgvNOMWNIiw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PAVPR10MB6861.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:321::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:51 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:03:51 +0000 Date: Mon, 4 Nov 2024 12:03:49 +0100 To: dev@openvswitch.org Message-ID: <72f55c973a020f43e601f6591d0fc98d2972765a.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0108.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::11) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PAVPR10MB6861:EE_|DU2PEPF00028CFF:EE_|PAWPR10MB7198:EE_ X-MS-Office365-Filtering-Correlation-Id: f95c6b62-e14f-4218-349e-08dcfcc05f9e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: SybwxQfFfjdP4gXpjc/+CULUafZp/rKHXFkCgqCKutDtjkO7Hs5kZnWonA5fW9ji+UMih4N0VQNMUFVoY31pTyexV21hup9hpPWWuoo/U6EmzP+gH7ZrQZkqDBUIusqmuueD/V7q3F2cZRkLWAU3h6Yq0LNUTv0uWmx4er/fSMZ8v12RY8r1BsU3nvMoKmxdJxZKUV21mwuXsqg6AchZAlz5VRYRrKKuH57+UCt4rttoX0t97egx9wo9x1QuV2VHDwF0MmTavGqw6bxqUZOm1BP2R3wFZmYiPzB/ga9C9+kJJIaDOgslGZFcurlbSXP4VwhXxsAdlFkROGSpCev9YR0AMF4Q/l0D/inC7osI4tK+FOoQ9fDwcJgWMKBQThJMDgisXr4/zliOmC5rIfu22mPaxsaXsmGTSQeJUrPZlAGIDibZuE/BoYITWx8mJg6d59N++oORkNQ1bFXhhwxoTFU9w0pqePIYh2HcumiLk/upKmTORxQ9v+AX+EasvKG3OOzcqmNCPkpvE5YJ5zLphLqs8AWS9jbeQekWmBohzzYWOiGz40mvx59ZDt/GauxurU/qs4Opk+TVvPIP4x/t0eHRpXUcwnhLwECemvL/FUf0WZc++7v/j+tPlNe/gcJFLhnwj4D713VBTTn81XOEl8gAexFGr7k8AQJJT5vpXL2whGuTL5l7ibAW6OYq/jwStuuyNID75JmiOlmx8ed/4hvjOstvehf0cdKLA+KkXAWq0BzRsXWxhIRtOevm3Saato2L9iilZLbiNVOC+UQ2fv/MV9RjuH86DP6gF+U0q9EDqClqfZRGrS4RnfY7RMdtdNpTIPnGofNSIZLU8JQ1aT0ljiS52CVvFE4sFivEj48+b7Axncns0fWY8jH0Oa3fLhuvLFT7MwLwuqfngC9eOHNKAe0BTkbuhw7VexOWOY+FK8MSKT9t0Nzys/J7gMxf8+5PsEULJlOFvBbHlJIGYc6xKb9b9NRjuSAwmuXuqfM6O02mJlk4m87nWjRz1Jx2vFFjjBhI+omsx13nqIbCT5+17lqAs+AxmZOhKkP3j4kqWUD3TpGLAVSmPXuNakFlKj46dDX7GKmKSM0twr66Ssbd7nRa4l7evl1qxe8OvDrf0kneT16V1NLzV70jkf0ru7onkdTvanKb3pKWELYc+e1ArUgc5D/00BpVCROvw9cbozzziUXNf+zoFMOP15waSGRFf7k90UvU4/K1H4fX87n3wrd63GzoG8zbdYdyTut0yZT9lMOhFSgZEK6RB5xkuI0td4K8LHn/ny4UH7gjYBVGDwtN6B3GegB95gQmLXBab0re+eUJkESGN8bD1rWk X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB6861 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028CFF.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b4888dd0-f8c2-4b08-f96b-08dcfcc05d9e X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|36860700013|14060799003|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: dO1dZ6f6UwlCQKJL6MpYgaH+WQzpT62iPaG2KYamZCnICQ00F3xbQFiiakGXUPt+eTsMLlckonrlEXbNB34ECm9scMiFTbp05wti8FtxHUdK2m+p6eq+HUY9+8Yf4RKqW14pJApmozbp1Ov1FiyU440dsuUpRVxUSFaYPr67trxmBTVc37odyLPzCDjk/wF9BwloVKP9xmT0Cc1MdD+FRizCV/qXfxQCTva0kR7JbeN4eQ3Q6C6f03Lx4X47DWY+77QFVtmVOCtu0ASJ3J5Z//Sj32ooroYrXdFhq50+jjc4fEDowxq6i+Q0f0r1dkV3SYbEfK0mFrPocrSDDaNM6CJkET8l7iRd9BTjYNmWp63UoQvIePC5HwYhKvFrHK1eQdcOivExteFMklTlMYQ9Semn6YNIE7E0PT6Sdym0s0k4Bq3mcSmhTaM8BOB+LjbORnKOw3CrjB3BDeNi+J0EGw0778joG4+UXbky2NvkDF9OOvi8J3J+jwLw3+xIqE8cid1xHRT5dMLMWaCfabGpDLwNgGupTpu/kQ3ouEnIXhmr3CFygf/MWHtxToWTBOob67i4nkLx1MCSLHEzhz7BFI5KkALS/MaQJjQOHi5M/mgpu1Kvkk8kND4GkxOa8fuy3IVYfQ347VXr+FC4YVK9bTTUzdZnb7SuAqUuKB3LIFktsy2+29lvOioJZKyjHMrQ2EHbYosHIVNaU4MR6pxG8QZHLuSEv0uG+key3FMhPfdIrbHKa+wZUAGqh66GaytpfcVGxkUsPvIZ8lqkxulxz4hKc3ivbNBJR3LWEEGwLQP7e/siUuzWq2QGzhsSkTCxYFmN4S+csYD0KpCuae4KpOnglHtPhp+ObNsofHOZh3jrKE9BUzDLmWwayvbM0jGtjTx/6zh9RmtIkmXUmQ/YJIBF6zkwwa+aBqQ969pZ0Y1WLeQEzCICjZy1hDkotLX+VAkvWBfpagJzW7uUL7JZjWkPHEUaDYx6S4Ko+oROOij32ydibsrPlTZ1+9xEZDroMGWZdbfwBsdQxdZ1QI7/+vxAxZntfaiBD7fQGcsAJWbZoCLNgYdyGlgIRLDjgIkwgYUrCKGEusNv9X9XZUHm+Ok0VCcT/V79p1Vck+gHtP8t160widkYa4r+TTzC1Bh0svQGWcoS/BGfH7i0w6w8SYcLIxwzIc218huOFRXLfm24qQtu09pWpALE5TQb6e97irfgwAQ1fguzTtkhUgxB4ORzJn4JYZtK9USu93JLQPp0Xm4Xtn1gVyqBH2WPkkKWZPZTvEyPx+jQm+x9inAp1E/u+Xfh+jXbGZlBQEA5yvaiBe2xLJVWhdQavDy4siyagI8KpZ3GVBb/ohG150+3pg/ZsC2ABM+szTORgM6lKGfTx51VfCiFi+JteM82ebPr1T4UUBSKu5rJllj9w2XeiA== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(35042699022)(36860700013)(14060799003)(1800799024)(376014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:03:54.4610 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f95c6b62-e14f-4218-349e-08dcfcc05f9e X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028CFF.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR10MB7198 Subject: [ovs-dev] [PATCH ovn v2 03/32] northd: Find outports based on ovn_port. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Previously we searched for the outport of a route by going through all LRPs of the LR in the northbound, finding the matching ovn_port and checking if it matches. However we can also just iterate over all ovn_port of the LR datapath. This is simpler and a prerequisite for later patches that use derived router ports. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/northd.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index fa3a8a882..8ba7b8c33 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -11433,15 +11433,7 @@ find_static_route_outport(struct ovn_datapath *od, const struct hmap *lr_ports, } else { /* output_port is not specified, find the * router port matching the next hop. */ - int i; - for (i = 0; i < od->nbr->n_ports; i++) { - struct nbrec_logical_router_port *lrp = od->nbr->ports[i]; - out_port = ovn_port_find(lr_ports, lrp->name); - if (!out_port) { - /* This should not happen. */ - continue; - } - + HMAP_FOR_EACH (out_port, dp_node, &od->ports) { if (route->nexthop[0]) { lrp_addr_s = find_lrp_member_ip(out_port, route->nexthop); } From patchwork Mon Nov 4 11:03:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006163 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 4XhpWj72wmz1xxN for ; Mon, 4 Nov 2024 22:04:33 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id E661F4059D; Mon, 4 Nov 2024 11:04:30 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id ZQiWkM__EYk9; Mon, 4 Nov 2024 11:04:29 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 1ADA7405B8 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 1ADA7405B8; Mon, 4 Nov 2024 11:04:29 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EFE45C08A6; Mon, 4 Nov 2024 11:04:28 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1E26CC08A6 for ; Mon, 4 Nov 2024 11:04:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 9EB718103B for ; Mon, 4 Nov 2024 11:04:13 +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 TvUEjJiWAwfK for ; Mon, 4 Nov 2024 11:04:12 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::609; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 471B981026 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 471B981026 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=ltevSNpr Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20609.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::609]) by smtp1.osuosl.org (Postfix) with ESMTPS id 471B981026 for ; Mon, 4 Nov 2024 11:04:12 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=F4gFfYVhLiT//okHsSDDZM1YyThnfaFYEsksMeZZ3t+qtOAGfBhVYZxFh04A+cry8O1HeDwo3ajAD5ltV1gsij9q6aYFGCZjLWRvvuhmtLORYJlD/hWFLzogWdd55T7EeoFjj0CsZp/O+HDNznmERhfQGLuRhphK8lBk0UlL0JOro6Hvym3XKqMBcpZ8NLt982ISrZS2oUnHss/WmL+JXpZtPMbbEzEY0l4sPpYCFrJyJnNNf5KghFYjyi1F9vGgcYGD9GkhKTjq6kkE8ZuAVisrHV1l9cW40a9rB7dRbqQ473PkaVx6xESEyXpY0Vkq1/LJ9PS1BG2qJbZR5F1PJQ== ARC-Message-Signature: i=2; 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=HAkfVrD6b+mr/QfAKXhHzALbl3j96iVKj8yUcfweE3E=; b=o+5V+3Y4FITOiMT/t4XR0qHda8+30lctT16rimCM+NfmpFgJqtPL85FKCOjz6vbDzk6ZrgdREYQUE2xTy/RVhDaW2s9J/z6DMtdpLyzeyw0/3+P/7yBYKSrKJvdzkFvN/2FyXZYLNmeCiN3VVK5tNv9RRocRhgGVN4IEsvZQBL6/pAJ8e8HrIrfpWYbiRWSVJ2eMJpXkjm4n128/tSkzUCg90JfNI15XUqlc3bUkZeXoZrwDQ3a6OzY2ZFJAf2ZPR+fXXu2mt+dbOn4PXyw01ksz65cXSOlnB/Vvw4kBcOdbkVPsmZVKmD5kwR99bXh/qz5Q4GVRgbpjbot5kEtycw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HAkfVrD6b+mr/QfAKXhHzALbl3j96iVKj8yUcfweE3E=; b=ltevSNprCX0/3dQFOBPLxO8Za5s0Zh5IhfBMSzX0JTy5laZUko+MF4/CLQ5TQN0ct8D//Y7WgoGAEv6DVUyLS+sK7Iw+2twrtjnoH8oONIwnIDHFDBgzCxhVY0KArKEMKSlLCwZcY3PFlEQxT+bGYOdvrWtUyJBw6PCCW8NWwjNqctbH0RMzYmWHfuT0sCe9NbTSCgnXWcstjHx+uCAgbQDTvyr9yncdFqpQMjgUvmwIK1K7cAD6jnwvUeVQPA5mJazfv9hSFtwchLuZLtrENXp6CQr+tTrpu1yar1ueXFdfTR+UbWNRzADZvJWXeuF7O1/l14B5leNyabL1FqxMkQ== Received: from AS9PR05CA0337.eurprd05.prod.outlook.com (2603:10a6:20b:490::9) by GVXPR10MB8664.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:1de::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:06 +0000 Received: from AMS0EPF00000195.eurprd05.prod.outlook.com (2603:10a6:20b:490:cafe::c6) by AS9PR05CA0337.outlook.office365.com (2603:10a6:20b:490::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:06 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by AMS0EPF00000195.mail.protection.outlook.com (10.167.16.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:01 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.108) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:06 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 57316839 X-ExclaimerImprintLatency: 42783443 X-ExclaimerImprintAction: bdf01cf027fe42468a356e75ce1fc997 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T7lEnJv4GTm6UAXjVxuDEkt1jCC3XhgGWTZQFG7rss8fwGGopDFwZEhSME1jrOJmcMRrlZej0h0NMgGYUVFDGcVBQPZ/tAVJ7hnH82wEQUzAXJI+L2pD18ZVAAxrGcbz+qP5FBEVAeTQytMtmDD//NmWRL9/sfoB+OF/r89Oi0N3SQzAHeXGVHbeNoQnTV/6Oi1IxA2vOa+90jckTEkUZuUDTn9U7HbefOcnP6o01BKY5ufmNvfVInAR9qULLObmgFXlfHtVNRK9PqzHqoMK7ql/fiE6bDz674EY0LumI2iMyWG/CPb2ICPInNr2edn88Ovo2jgYalvm7OszqxFDDg== 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=HAkfVrD6b+mr/QfAKXhHzALbl3j96iVKj8yUcfweE3E=; b=Gwt4XR6XeAO7rIafqnkL4ZdsZoZJ+WD2TM9VzXiEF1wlu/TZvzcgMFL3cfecDsSUSuCwaDaeMEGlXZNp22dcNOBSdj5hXDSAWVlphNx53+w3VWpHQB2Viidu3zspvBlYdNYEatiLyRcKnXAjZCTJgANthpp2QI2RosZjZLnj6Zx0idSX1Qmiqnxrs8bBKfNjWUclRX608e22Z8Z9NNRvccC68oA7i9C2LPm9Q2zFTBBmcpzFgjncIXi72wuY4t5O2KnKAIDJhZsWhD+vz+ItSDspboe7eFW2RpgdwbsOSNmYleYxEUjCbzdD79tw7SCCzZcsKXKgl9gnuMwpuYpwqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HAkfVrD6b+mr/QfAKXhHzALbl3j96iVKj8yUcfweE3E=; b=ltevSNprCX0/3dQFOBPLxO8Za5s0Zh5IhfBMSzX0JTy5laZUko+MF4/CLQ5TQN0ct8D//Y7WgoGAEv6DVUyLS+sK7Iw+2twrtjnoH8oONIwnIDHFDBgzCxhVY0KArKEMKSlLCwZcY3PFlEQxT+bGYOdvrWtUyJBw6PCCW8NWwjNqctbH0RMzYmWHfuT0sCe9NbTSCgnXWcstjHx+uCAgbQDTvyr9yncdFqpQMjgUvmwIK1K7cAD6jnwvUeVQPA5mJazfv9hSFtwchLuZLtrENXp6CQr+tTrpu1yar1ueXFdfTR+UbWNRzADZvJWXeuF7O1/l14B5leNyabL1FqxMkQ== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PAVPR10MB6861.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:321::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:03:59 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:03:59 +0000 Date: Mon, 4 Nov 2024 12:03:51 +0100 To: dev@openvswitch.org Message-ID: <7cefd4f392baa4fdbfaf3130ef2c08c8e71c9c58.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0112.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::15) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PAVPR10MB6861:EE_|AMS0EPF00000195:EE_|GVXPR10MB8664:EE_ X-MS-Office365-Filtering-Correlation-Id: 4867279b-4e01-4944-fe0d-08dcfcc066cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: vWuwYplpKIKU36JMkxBBnX2ExFeipYmsnCqiSQMkA04jwPm6bvQu56NAosXpd6Kgd/k3dRnZ6/hz8bdcq+z3T48RrJClElTs2Jcdcgpo88WBXU0k7pLEocESuECT0lSzcsfLzqM72MNl7pLjMousKAZZLsT55KV24/8n1+9GSEGE++WdLJaIurv0cqU3ymnYu0ZY8Y4+Ck27rPe4XQMoVUSNV6PNoS2G8jHJS5sqTNz9hbofJA0Ds3zMrmju7vgM3DGcpKYD1UnygfQkl3Vbi91mekBpxbtEIWgsdY1vDDW/lchIqOeNj/JbQxWdC+eyIQqmqyrkf6duOQVbXV8VzRzGXpWo6jIbcCopnGoGSU5CvrdVQRi4D8uHSu6GMM8NCsollBMphS7aTrU1h3fM2yHnq6cihvLDdyAMo3EVyWurD6GaIUI24erJohFccCN2vLbppIQjz/X5qd4fiF91yOIQQ3ck+y9ZV+p8iO6GTLD0FSiSII9k3RAlLRO5M5zZ7WQNLBiYfQKdCa8wQGwYiSr4z0RjIUkrlBrqS+RTGJrhGxe5sz0pNSkp5+DqYdR3wu3v7Szd2ibKVeAR75QcueikcLr7U36nchTFfGtcdY0uu//ScoHQBO+JpXBGdD2KK9VdeJSR/LA7JK7kVsg1uelMS4VZIVVY0/Pzi9cLs3zxA5M4tzRUxRFIl1hoc215UA8pjfMCzclb725Hd2bNjRzl8XU4DqTrdMN4IK+OnEZdSrGNcwUTKUgzDhs+jGEMBoXrueNign9hFuv5v/KkcCmaj7Ev7O/KzZCvABiuHqCNSxV/uJnLKBOiSt96fRyp7IV+PpKFH0hHncR3ATvJXd6LF4e7q4RSd1/PhnSfuYTreG0anHdSwAy4z7I5ZN8JCwPcOZ5dWS8t9WVM0jcKd+wnmiN3JS2IcGpNeQXlFe/5Iq2Tuf2JrqvhuXT38ZSWP6DDSxgSpWIoqarP8q5d0n4OaWzSi24Zjygk3tSS/3KmkF4wR0NdaVVp114rMJ+tdpwKKhkqhSr/8cp1Ct/NW7d7sI0gVJEzSseKTsKnwupzO5+Wnt427sm6FMkEHft+UNiM5Q9y4BQoLbWgf8v8gTwRPZcbZ+2gVBkeSdt6Igk0SYYsl4DzFiGK1OhTR1ACjyAbHkXun95oaRMj/ssk4+ZZRgvRCu+cNl/+Cy7j3RKgXnM3J5zq9DsebswLvdBkMXmrDgTjTxtukUasm+h57hQTB1GIBGxjMyw+/KXd4uAF07k0zxg95xqV8SO7TBdiD9RNhuKrKpTkNSywenvi9hhnGjjuUkPEgrSK3JmisPQ/hpREWbwhMjtM3Qq6bhAE X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB6861 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS0EPF00000195.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 23a11fc3-6837-42f5-9213-08dcfcc06265 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: Ef9wQQPvxzTWczZIirObO+mNTXEX7sREVk0tQsh3/dFS5DyGHzUKMlpYMEruahMLIqmtdkwK/TCGHYQz7EmlIEAJz11lg074G0LggPAz/89gjSzvLa157zKou1BqTeYCNcuVRS5+eVyo0WnTMR1PFB80+ZOsOg4Qe4BBZVLjOjAw1LSmW1mQEKU1ZJ80tIKJPmsz0BhUS5BqJ7f9NxEbwHrfv9sM0K2TlzC9E/qG1Zvrt4Bdp2Vkw54Sv6tnjYTdb4Q08d5YukvKWmmV1q0S7OYtYhi/kKXVw+ovn5OLdQ/qS0DDOmuu7O+lfl5sVo9w5vsU50Bjb1z/IiBu6Etk4uTl/KAyuZvq+MU1pqHBIevMMB8hpTlwkdl1Fohnx6CY5EDgXzv2blMG7eM7NkhPC0tInNDA2AnZRXQbd+wwSUF5vu7l10i3d7pnqIT3CTB51ELMF7LHY67YjTP/y03MdAI79f6Y52yvtKIt+CgNbM4aSKBOZU5gAboe70o6hQ7nhzTNdTRm2dYVhvAAit7ypRldvNsWOT+IaLjSa8z+KkOC83gX55Xu911yeMoN9oUBW1vvhePPd617eNL+RogTW2dKCiWqGkDQ1j7j+F5QFuqvajeDbf+imMhT6Z6/DvYLavgGzm0jbvc/Tft3MnOJDfbjjoffvpio7tnt/PaBd7scQqj4IeyyE3ep4sCYLMthqWgwTEizM4qR0dZQrjhLtSUvhFIi4pPOZ6s1ibveJVjTOlL++z6kCGY4B0TVB5ffmgtg3WA7ZFS5vzrLQCn6JvQhg+C4GcIRh2wsJc0zDfOglEMyLeBSztccFsZ28BgT5vYJQVTqXg36X/6YX7D0Rqn6mIWvDn+0eAVMVIDM6W62w2MxfCGP8KfDu3ewoKtNUOm4Gse/6vkAWHl2XkwpfzDW2CRnh0TnjektvK3dxJ4wgJuBlEKNbOC0pzLk5aCourbEaSkIVox5iKgNCGkajqnb/VPbsdZBT6xnGp581XAqMr48esMrsbCvoJZqzUEFfN6HfFjyQ0NgKzNB3GUpgVoANcbvBFt5krdZUeLAi9fLSUWItP93IDuT8FJRGRMiLtCSvc3EJ0NMZDDCauo6a5CSEHQNKCAYljs05wXbLlI6bt9OsFttY4/ivtA9LimPKmpMZ2VYqv1bOry6FK78D6Eq5IS2SCX9l4jSwKqWU1iPULx7X/f9GXMEtHplGkl0I6Oy91VwkmrB5IMms52TQbON9NhiLLMjlL88xj9ckBTWV7nnamZNJbMVnCXup5lDPqO4AX7n0B03oCo9a3JhZn07sJf45ZqUO85jcnLrID3LXyMN2ajDflNlMBY74fVwhs+GCtj27Vj3kjV0U5r52XBSnVLa4j6W9KNpRRfE9TkEOK1b8zohFlWhFCK6PV7YNfbkibU7y99mp22lUVYCZw== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:01.6992 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4867279b-4e01-4944-fe0d-08dcfcc066cc X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF00000195.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR10MB8664 Subject: [ovs-dev] [PATCH ovn v2 04/32] northd: Store outport of parsed_route. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" We already determine the outport of a parsed_route in parsed_routes_add. However we previously ignored it and recalculated it later on. Now we just store it for later usage. Signed-off-by: Felix Huettner --- v1->v2: * fix memory leak * fix incorrect comparison of struct parsed_route lib/ovn-util.h | 15 +++++++++ northd/northd.c | 85 +++++++++++++++++++++++++------------------------ northd/northd.h | 2 ++ 3 files changed, 61 insertions(+), 41 deletions(-) diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 7b98b9b9a..2e2f31a36 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -484,4 +484,19 @@ void ovn_exit_args_finish(struct ovn_exit_args *exit_args); bool ovn_update_swconn_at(struct rconn *swconn, const char *target, int probe_interval, const char *where); +/* Return true if both strings are either NULL or equal to each other */ +static inline bool +streq(const char *s1, const char *s2) +{ + if (s1) { + if (s2 && !strcmp(s1, s2)) { + return true; + } + } else if (!s2) { + return true; + } + return false; +} + + #endif /* OVN_UTIL_H */ diff --git a/northd/northd.c b/northd/northd.c index 8ba7b8c33..b208a3617 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -11066,12 +11066,29 @@ parsed_route_lookup(struct hmap *routes, size_t hash, continue; } + if (pr->out_port != new_pr->out_port) { + continue; + } + + if (!streq(pr->lrp_addr_s, new_pr->lrp_addr_s)) { + continue; + } + return pr; } return NULL; } +static void +parsed_route_free(struct parsed_route *pr) { + if (pr->lrp_addr_s) { + free(pr->lrp_addr_s); + } + + free(pr); +} + static void parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, const struct nbrec_logical_router_static_route *route, @@ -11125,10 +11142,12 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, } /* Verify that ip_prefix and nexthop are on the same network. */ + const char *lrp_addr_s = NULL; + struct ovn_port *out_port = NULL; if (!is_discard_route && !find_static_route_outport(od, lr_ports, route, IN6_IS_ADDR_V4MAPPED(&prefix), - NULL, NULL)) { + &lrp_addr_s, &out_port)) { return; } @@ -11175,6 +11194,10 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, "ecmp_symmetric_reply", false); new_pr->is_discard_route = is_discard_route; + if (!is_discard_route) { + new_pr->lrp_addr_s = xstrdup(lrp_addr_s); + } + new_pr->out_port = out_port; size_t hash = uuid_hash(&od->key); struct parsed_route *pr = parsed_route_lookup(routes, hash, new_pr); @@ -11182,7 +11205,7 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, hmap_insert(routes, &new_pr->key_node, hash); } else { pr->stale = false; - free(new_pr); + parsed_route_free(new_pr); } } @@ -11211,7 +11234,7 @@ build_parsed_routes(struct ovn_datapath *od, const struct hmap *lr_ports, } hmap_remove(routes, &pr->key_node); - free(pr); + parsed_route_free(pr); } } @@ -11559,8 +11582,7 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, static void build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, - const struct hmap *lr_ports, struct ecmp_groups_node *eg, - struct lflow_ref *lflow_ref) + struct ecmp_groups_node *eg, struct lflow_ref *lflow_ref) { bool is_ipv4 = IN6_IS_ADDR_V4MAPPED(&eg->prefix); @@ -11608,20 +11630,14 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, LIST_FOR_EACH (er, list_node, &eg->route_list) { const struct parsed_route *route_ = er->route; const struct nbrec_logical_router_static_route *route = route_->route; - /* Find the outgoing port. */ - const char *lrp_addr_s = NULL; - struct ovn_port *out_port = NULL; - if (!find_static_route_outport(od, lr_ports, route, is_ipv4, - &lrp_addr_s, &out_port)) { - continue; - } /* Symmetric ECMP reply is only usable on gateway routers. * It is NOT usable on distributed routers with a gateway port. */ if (smap_get(&od->nbr->options, "chassis") && route_->ecmp_symmetric_reply && sset_add(&visited_ports, - out_port->key)) { - add_ecmp_symmetric_reply_flows(lflows, od, lrp_addr_s, out_port, + route_->out_port->key)) { + add_ecmp_symmetric_reply_flows(lflows, od, route_->lrp_addr_s, + route_->out_port, route_, &route_match, lflow_ref); } @@ -11638,9 +11654,9 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, is_ipv4 ? REG_NEXT_HOP_IPV4 : REG_NEXT_HOP_IPV6, route->nexthop, is_ipv4 ? REG_SRC_IPV4 : REG_SRC_IPV6, - lrp_addr_s, - out_port->lrp_networks.ea_s, - out_port->json_key); + route_->lrp_addr_s, + route_->out_port->lrp_networks.ea_s, + route_->out_port->json_key); ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING_ECMP, 100, ds_cstr(&match), ds_cstr(&actions), &route->header_, lflow_ref); @@ -11720,35 +11736,22 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, static void build_static_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, - const struct hmap *lr_ports, const struct parsed_route *route_, const struct sset *bfd_ports, struct lflow_ref *lflow_ref) { - const char *lrp_addr_s = NULL; - struct ovn_port *out_port = NULL; - const struct nbrec_logical_router_static_route *route = route_->route; - /* Find the outgoing port. */ - if (!route_->is_discard_route) { - if (!find_static_route_outport(od, lr_ports, route, - IN6_IS_ADDR_V4MAPPED(&route_->prefix), - &lrp_addr_s, &out_port)) { - return; - } - } - int ofs = !strcmp(smap_get_def(&route->options, "origin", ""), ROUTE_ORIGIN_CONNECTED) ? ROUTE_PRIO_OFFSET_CONNECTED : ROUTE_PRIO_OFFSET_STATIC; char *prefix_s = build_route_prefix_s(&route_->prefix, route_->plen); - add_route(lflows, route_->is_discard_route ? od : out_port->od, out_port, - lrp_addr_s, prefix_s, route_->plen, route->nexthop, - route_->is_src_route, route_->route_table_id, - bfd_ports, &route->header_, route_->is_discard_route, - ofs, lflow_ref); + add_route(lflows, route_->is_discard_route ? od : route_->out_port->od, + route_->out_port, route_->lrp_addr_s, prefix_s, + route_->plen, route->nexthop, route_->is_src_route, + route_->route_table_id, bfd_ports, &route->header_, + route_->is_discard_route, ofs, lflow_ref); free(prefix_s); } @@ -13523,7 +13526,7 @@ build_ip_routing_flows_for_lrp(struct ovn_port *op, static void build_static_route_flows_for_lrouter( struct ovn_datapath *od, struct lflow_table *lflows, - const struct hmap *lr_ports, struct hmap *parsed_routes, + struct hmap *parsed_routes, struct simap *route_tables, const struct sset *bfd_ports, struct lflow_ref *lflow_ref) { @@ -13572,11 +13575,11 @@ build_static_route_flows_for_lrouter( HMAP_FOR_EACH (group, hmap_node, &ecmp_groups) { /* add a flow in IP_ROUTING, and one flow for each member in * IP_ROUTING_ECMP. */ - build_ecmp_route_flow(lflows, od, lr_ports, group, lflow_ref); + build_ecmp_route_flow(lflows, od, group, lflow_ref); } const struct unique_routes_node *ur; HMAP_FOR_EACH (ur, hmap_node, &unique_routes) { - build_static_route_flow(lflows, od, lr_ports, ur->route, + build_static_route_flow(lflows, od, ur->route, bfd_ports, lflow_ref); } ecmp_groups_destroy(&ecmp_groups); @@ -17062,7 +17065,7 @@ build_lswitch_and_lrouter_iterate_by_lr(struct ovn_datapath *od, lsi->meter_groups, NULL); build_ND_RA_flows_for_lrouter(od, lsi->lflows, NULL); build_ip_routing_pre_flows_for_lrouter(od, lsi->lflows, NULL); - build_static_route_flows_for_lrouter(od, lsi->lflows, lsi->lr_ports, + build_static_route_flows_for_lrouter(od, lsi->lflows, lsi->parsed_routes, lsi->route_tables, lsi->bfd_ports, NULL); build_mcast_lookup_flows_for_lrouter(od, lsi->lflows, &lsi->match, @@ -17653,7 +17656,7 @@ void build_lflows(struct ovsdb_idl_txn *ovnsb_txn, /* Parallel build may result in a suboptimal hash. Resize the * lflow map to a correct size before doing lookups */ lflow_table_expand(lflows); - + stopwatch_start(LFLOWS_TO_SB_STOPWATCH_NAME, time_msec()); lflow_table_sync_to_sb(lflows, ovnsb_txn, input_data->ls_datapaths, input_data->lr_datapaths, @@ -18833,7 +18836,7 @@ static_routes_destroy(struct static_routes_data *data) { struct parsed_route *r; HMAP_FOR_EACH_POP (r, key_node, &data->parsed_routes) { - free(r); + parsed_route_free(r); } hmap_destroy(&data->parsed_routes); diff --git a/northd/northd.h b/northd/northd.h index 8f76d642d..728fa6740 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -707,6 +707,8 @@ struct parsed_route { bool is_discard_route; const struct nbrec_logical_router *nbr; bool stale; + char *lrp_addr_s; + struct ovn_port *out_port; }; void ovnnb_db_run(struct northd_input *input_data, From patchwork Mon Nov 4 11:03:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006171 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpXD54MMz1xyJ for ; Mon, 4 Nov 2024 22:05:00 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 63493409EA; Mon, 4 Nov 2024 11:04:57 +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 fnbHsjhQlhAQ; Mon, 4 Nov 2024 11:04:55 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 857E640533 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 857E640533; Mon, 4 Nov 2024 11:04:47 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E8114C08A8; Mon, 4 Nov 2024 11:04:46 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4016EC08B9 for ; Mon, 4 Nov 2024 11:04:46 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id ADA3B607B1 for ; Mon, 4 Nov 2024 11:04: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 B05Apxk_J6lf for ; Mon, 4 Nov 2024 11:04:14 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::60e; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 0EA54607A1 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 0EA54607A1 Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=rGHyJ4yK Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2060e.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::60e]) by smtp3.osuosl.org (Postfix) with ESMTPS id 0EA54607A1 for ; Mon, 4 Nov 2024 11:04:13 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=uaSX3lhgg8AByhkhrY7SwdT0I2CDCx3Q1YhdhQ+vamC1aWO13OF85okuWEJdRzzz7LLD+Is/BOc3oAgGa0mKqepCRkyT1/L7GF0YGohRB/8iVoGMj5WEpc7trJ+/yrXWWhg128FrOidNxRrvA7O50/g7pF2u2QGRci15LFtwOjcT8Kecs25xL3ZNwk3RmiXgS1Wi7Lh+8YK3uRhQ6EhPOcboZb/jojzBtpY6EcptMwW+jDGTDKPh0JcaVZjorXXXBwFR7wBRvLdwc61XAIJhEPNSnBWBBBR08W4fdpLNBnCvb6qU1Fy9R7n+cwUtAAQNAJ84dW+leN8s1t3N4X50OQ== ARC-Message-Signature: i=2; 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=Vh75TnFwpkAEO7naTOr4Oi2J0/ram4jg5kcYEjF+13k=; b=DKnveyw3dV+0+oqfj56+geolrU4J/AIfO4Gz/SQl2UxOHR5rVb1N8QI/t49F3VhyfGtpdcJtMFe/b/NLVaaeuYjZoBo4VM3Bs0Bk/hqEkmSINaNkrrGyLai2/F2ZYLgwTA+czM1MunEv7u+e9rD9HibKrJpw0HNx3gwrMgkuuuihf0cjOcaDrlgnytrjoNnQHYOqZ1VqxOFYZpOIPGAPjgwfCO31opMjdYNNeYSl53AB2n4CTbf+I++8XLnydptc2TeQG78fnRigBqPI/QNiM3xVZuSzyxYGatsKYCvh7ZsxSm8MKitnWVpXBxoOXY66wa5zj5xAMAvjFXeeTzLwlg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vh75TnFwpkAEO7naTOr4Oi2J0/ram4jg5kcYEjF+13k=; b=rGHyJ4yK3JyEEdt8f4FH3noi3QhSZRvL+beW5nnTLUfG1X//tu24jILrqXadilJuljtM85UpY9J4uaxzAHXeWFgIVLs8xfUdI8VTc3jiRVF3iCeXXwSVl5KbBbRGo6s2gaOAupOUPgmvLTRRFkG9FcVknuewZisipr32TyJ4vc0LS3UiQwcaLTz+3/izjHdpa3iv16fzUCDekpzIRj4nlozLIu5n/oc7RDZ+08Axwg4PTphCW8o/Vib0mB1auGTsQeoL4R0m7N5mx+qUT/Ax4/ltF98loh44SDrRO7qPVqvRpnkO+C2sNknwszfspS0yRyM75y44sqdAOap0qd8GfQ== Received: from AM6P192CA0060.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::37) by PA4PR10MB5779.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:268::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.14; Mon, 4 Nov 2024 11:04:09 +0000 Received: from AM2PEPF0001C715.eurprd05.prod.outlook.com (2603:10a6:209:82:cafe::2f) by AM6P192CA0060.outlook.office365.com (2603:10a6:209:82::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:09 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM2PEPF0001C715.mail.protection.outlook.com (10.167.16.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:06 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:07 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 6264254 X-ExclaimerImprintLatency: 3001743 X-ExclaimerImprintAction: 0647d2a07e0b40c9a530dbe76ae4a4be ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jMOLrfHxDbo/7IXjKCjVzCU5GYU0m0lWiI24qRkiCR9f+Sbw+iWWic2hiydygxKAakZg+OhKECExcGoDR0e08+wL9CCp6u4wTL/ZR5ZkOxdcTmVG0cAZPFNtqe1mAzWncMo/PaOU6BAYWqVwu8l8yuxl7M9oUyXcMZAmjFV9J0h5DZ8gAWLhtFq9MTpr430f03U4fpPRDqIZcWg0fzkSqzAz4WeJtuBb3QiqtLbF6Lmyim8AWL6FUQkf4kEcdc2WMnHdqyhD5r9Z8SRgbiCp7mQnWJxMd9N736pfahYGVbX3GoyfkMbDAZvOYOfSbijL20lqqwmUhU/YgyA+0EDVeA== 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=Vh75TnFwpkAEO7naTOr4Oi2J0/ram4jg5kcYEjF+13k=; b=aFIWhkbwKAOpxdv4wd6ey+QWpxzvPEWDy3GDHRW+CcspqrXrOaEHXRheUEsAUKTO2HkeB5oIk0fc65wU384Gp0+/JdEHJ/u6LHrrtZwAd0nrTIZvkJwh/mstGAKQMq6abBs1nPd2XcOhPqtG3NQY70DvxprjhvLDwtAWTwGTtJhs5rfHcepYyJ89ahTLL/Mp3uoAOgcUccWLKmw9j7bbEnGSQScDYfv/RBfiDWjJj7iSsdJtb83GP7fFg/BHg5LQD3iz58JnX+vm9UeruSNpvnuuLfzJelEnJKGKtOrO4BXw/syoMVsM/PbLbxzp5RMLip1Ak+13d3wQ6wKG09VKNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vh75TnFwpkAEO7naTOr4Oi2J0/ram4jg5kcYEjF+13k=; b=rGHyJ4yK3JyEEdt8f4FH3noi3QhSZRvL+beW5nnTLUfG1X//tu24jILrqXadilJuljtM85UpY9J4uaxzAHXeWFgIVLs8xfUdI8VTc3jiRVF3iCeXXwSVl5KbBbRGo6s2gaOAupOUPgmvLTRRFkG9FcVknuewZisipr32TyJ4vc0LS3UiQwcaLTz+3/izjHdpa3iv16fzUCDekpzIRj4nlozLIu5n/oc7RDZ+08Axwg4PTphCW8o/Vib0mB1auGTsQeoL4R0m7N5mx+qUT/Ax4/ltF98loh44SDrRO7qPVqvRpnkO+C2sNknwszfspS0yRyM75y44sqdAOap0qd8GfQ== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:03 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:01 +0000 Date: Mon, 4 Nov 2024 12:03:59 +0100 To: dev@openvswitch.org Message-ID: <871e7db81ee3b86fff2d00fe3b00cf6994bbda8b.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0109.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::9) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AM2PEPF0001C715:EE_|PA4PR10MB5779:EE_ X-MS-Office365-Filtering-Correlation-Id: 72e54319-029a-4e37-4843-08dcfcc066ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: mokoWz0QtC96P+v3TcPA5tdOURTEo6UUs3tYjRMEYYSJ2KakbBu1FOuNQNUViR+S2tTw0wX/Va3dIu444wy4iCAi4ETgV/aIpTQNwXfgVJdl9naxctmtq1rZn65hR/8UVuz4voHTdrZeSb0YLODrhYVcnuxQ6sTThAZZjwHpxCNhyjHPt8QP4QmDpTtWY0xMXB6czH7KC1NfnJlkOGpWsIMwqw4aGEUACIlF4tktLzoFJh+UlD1AbHVIilECZbYvrBsAZB+Fvh3UTl8/1871VNNr7/+uN8hThdDxP32HM1loDHsRh5Ln89mSrez1iZNa2kbzJ7uS8QF/Ly3BnOrPXxMAqsz7OU8lWhDx2SliL3KhHOyk00YFvy240w9CjiV05SSNIUtOQ5j7HFRYrIv9AtJOMGDSvlUvJo9Q0qKf8D0tQvV7/uvDlaz2+ckgamjVrxBsu2TdSGmOamxjSQF6UOnp9T289wMdhCZh5YL6DdvJ88GBJvo3gD8MGB+7TELAJvMghZ4ITx881yLSB4+rUZrH7S0u8DUZbzOwMbDd81IDo55AM5x6Lp2Mfm20evGAM5ONKTWkfjSvv6CN4WhsQx8z7YgqB176YIL9Cq3c9sKVsZ005bTRfTub/317SHMoXIhVgA6v6NVmq/A590bI7w4C+YEWjh56eRSC1vuhZshWLxFW0HdoAtoS2hh5baGR7+AmzaFeGkNKnSrfWnj7cQCLYgZZU98hJpzEgTOVnzx/s6pz2Q71hrdVtrnBHPugdpl0bE4yDfZ7BCyNn8F9YehR0X1fUvdKXucILz8JjIVSyRY493MuWac/aJNwZsAdRrdmcaooX3nP/28mET26PXW5bWmHhGbrj4bTivdtOzZ84Pmo1PWtZVL7QvcPpscpy0FCByp2NFmgbHmgnOYUfC7MkRd6TZpvOpBSTlpCs7Jfo2dBS2eVT6p03UiTTSnO8BZ17priqLX1aKi/iSl/IpSTvUji+71NFUZG3inA1tpISB4oEdEzl2hWwxzKl+W8QGY0hGcCS8e68H8HT/PjbJWhEmWAuQk0sr1AbAcIfUQRLjEZF1C0Tcg3dNPdF+G2ETFQkDCT/0hZQu2ItXHVF+4I0mtYNUO2TxcfB11fNtVooognEtvzpGpjDEy3mbalmRSV6yva7CrshTc+gyLJagGjcWS0CRptBGPIqUw0cvG/acIn4dAM9hX+DHiGqeG/hsgOJXuBuM7yQI6Iyo898hrzigugwgsafTCn0ml2CVs+AdPj9br00u3HwRKC1GyylceKxOccFLU90pdumoaPzWys0/9EG0AX02waR/6PNuiAv8/QjuJEm9qKf15VW6S6 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C715.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 11a9e400-cfef-47d8-1c78-08dcfcc06399 X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|14060799003|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: W9nsZMkAEvWWQn7TfpVoJ/ZrdE59AGu70h8Sx53TaIWVMI+uXlwR/iRQe44jykTE2fYjQ4VFaT5Mx4C5VuAoz4JaE9iB5K77FompStC7Xnu/CAkvbdzOnTz5XCb9a3wd14E+HsIBdaidmZitr/0z+Tq0e7w3mzh0LV/IvT4ZPI2AbjrPkY29EkfosLexrVqLK/ATbHZJU8lbtYF1Qtxf/cnlFCjah7q801aj+oYR1DbfOYSGkNxf4psk6np2ochu2lUkV7NnxevHx7Qd7Jrj3P644OtEpEc4L8HQF2YqH4OK/wZ7rUEhVYZNda1X4MF5hxEyvMRQ1R+iSYVTBqYcwK2TJtWmAWo7+WIsn8PM5T6gl5j+4TLZh3SuqnKIls7yWwfMItgz/LPZWo6ypv8DH8Xk9UnLNb6wbog994LqQ+HkPH73S2LdrC9+1mL3FYBhR0ODIWBoqR6I4gJtx8sGIYbP8MtusrzbIoIKol69jQI/c7roHoqIAgbUxXaX3VJSmcV6QOtPJ8GrUR/7Lyp2rIXmVsLqhOlcr/hb4rwxo7XUzNMr0qlY78KGpPqdtGL2fjLQSUFG4Q6mbCnSH5gzih65dNVkTq80WCDGbN2ZrHEnmY91y+g0hHF/0mamAGGIrYayGV4Xg3QqWrhGWs894ff7vEDNdrYA4vFBX4NLzeD+3AaXh8OY4CGT4vEDs/kZGMuI2zH7ToIV1Mb3j79r3SdxC3HmQCrR3ZFeE+bzgTeVx7Q2EjGkq7eAvxaomlWLTje8zlb18HoNCFilM3p7aRanlH4bdhEl6BIIbF1h1EmAZumnKUBuVdF5r7sYiSn5i9+rr4iyGKj00qoER7LsBHWHyMr3Dhl2nL9Rlr1hdJwihsiJRjmmzMokC444roedOM0zU9NRboS9dv2vjwztlf+7dMvhErLwYsoFhqkQUn6hGyf3GXwfNWaCTRom4E922D+kVQXT8o6/J3/Jl9nB2JvWs1N+t05p+iG79yH3wSY5A4JkYTBfnJ81Rb7g5g1L3wsgLC2ud9iZgGrL/0k63SDvRVBQVjeP4bQSe84Qfw179CDsOeWyTj/UxFhGSFW8yEfAaGEi3742jqClz8h8FZHQMGb+T3Bgg35feiFXMNYZI/JwTbVU2ByzMGZmUf2G6WFkT8qd/lOYxO2Yew3+QrfBXmxI9vFoHi/WSJD5o9nDBTbrUGVPNuWTPcEFvZbR4HAB0rkIMJ45KCPV8CK/Moac3m4cgyufLRJ8q9crGy1NdOijQHugV0lyyMFiSGjwU0H+zJCUsQTTgCnOWgvcjEjYQT/FuQXEh/uyp9o3H3UUXTPfmi9DFN0Var4YE7WFXn8uGR/LABAocWx+2JVk5cKBBc1086fJ72MKxV1jaF1CRwMkeayGcvO5Qvmw2o49zj5X7lx1V2odNc8qqhHsnw== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(35042699022)(14060799003)(36860700013)(376014)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:06.6880 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 72e54319-029a-4e37-4843-08dcfcc066ea X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C715.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR10MB5779 Subject: [ovs-dev] [PATCH ovn v2 05/32] northd: Split out join_logical_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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" To make the code more readable and make future changes easier we split the main logic of join_logical_ports to separate functions for LSPs and LRPs. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/northd.c | 321 ++++++++++++++++++++++++++---------------------- northd/northd.h | 1 + 2 files changed, 176 insertions(+), 146 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index b208a3617..8d95650c2 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -2127,6 +2127,175 @@ parse_lsp_addrs(struct ovn_port *op) op->n_ps_addrs++; } } +static struct ovn_port * +join_logical_ports_lsp(struct hmap *ports, + struct ovs_list *nb_only, struct ovs_list *both, + struct ovn_datapath *od, + const struct nbrec_logical_switch_port *nbsp, + const char *name, + unsigned long *queue_id_bitmap, + struct hmap *tag_alloc_table) +{ + struct ovn_port *op = ovn_port_find_bound(ports, name); + if (op && (op->od || op->nbsp || op->nbrp)) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "duplicate logical port %s", name); + return NULL; + } else if (op && (!op->sb || op->sb->datapath == od->sb)) { + /* + * Handle cases where lport type was explicitly changed + * in the NBDB, in such cases: + * 1. remove the current sbrec of the affected lport from + * the port_binding table. + * + * 2. create a new sbrec with the same logical_port as the + * deleted lport and add it to the nb_only list which + * will make the northd handle this lport as a new + * created one and recompute everything that is needed + * for this lport. + * + * This change will affect container/virtual lport type + * changes only for now, this change is needed in + * contaier/virtual lport cases to avoid port type + * conflicts in the ovn-controller when the user clears + * the parent_port field in the container lport or updated + * the lport type. + * + */ + bool update_sbrec = false; + if (op->sb && lsp_is_type_changed(op->sb, nbsp, + &update_sbrec) + && update_sbrec) { + ovs_list_remove(&op->list); + sbrec_port_binding_delete(op->sb); + ovn_port_destroy(ports, op); + op = ovn_port_create(ports, name, nbsp, + NULL, NULL); + ovs_list_push_back(nb_only, &op->list); + } else { + ovn_port_set_nb(op, nbsp, NULL); + ovs_list_remove(&op->list); + + uint32_t queue_id = smap_get_int(&op->sb->options, + "qdisc_queue_id", 0); + if (queue_id) { + bitmap_set1(queue_id_bitmap, queue_id); + } + + ovs_list_push_back(both, &op->list); + + /* This port exists due to a SB binding, but should + * not have been initialized fully. */ + ovs_assert(!op->n_lsp_addrs && !op->n_ps_addrs); + } + } else { + op = ovn_port_create(ports, name, nbsp, NULL, NULL); + ovs_list_push_back(nb_only, &op->list); + } + + if (lsp_is_localnet(nbsp)) { + if (od->n_localnet_ports >= od->n_allocated_localnet_ports) { + od->localnet_ports = x2nrealloc( + od->localnet_ports, &od->n_allocated_localnet_ports, + sizeof *od->localnet_ports); + } + od->localnet_ports[od->n_localnet_ports++] = op; + } + + if (lsp_is_vtep(nbsp)) { + od->has_vtep_lports = true; + } + + parse_lsp_addrs(op); + + op->od = od; + if (op->has_unknown) { + od->has_unknown = true; + } + hmap_insert(&od->ports, &op->dp_node, + hmap_node_hash(&op->key_node)); + tag_alloc_add_existing_tags(tag_alloc_table, nbsp); + return op; +} + +static struct ovn_port* +join_logical_ports_lrp(struct hmap *ports, + struct ovs_list *nb_only, struct ovs_list *both, + struct hmapx *dgps, + struct ovn_datapath *od, + const struct nbrec_logical_router_port *nbrp, + const char *name, struct lport_addresses *lrp_networks) +{ + if (!lrp_networks->n_ipv4_addrs && !lrp_networks->n_ipv6_addrs) { + return NULL; + } + + struct ovn_port *op = ovn_port_find_bound(ports, name); + if (op && (op->od || op->nbsp || op->nbrp)) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "duplicate logical router port %s", + name); + destroy_lport_addresses(lrp_networks); + return NULL; + } else if (op && (!op->sb || op->sb->datapath == od->sb)) { + ovn_port_set_nb(op, NULL, nbrp); + ovs_list_remove(&op->list); + ovs_list_push_back(both, &op->list); + + /* This port exists but should not have been + * initialized fully. */ + ovs_assert(!op->lrp_networks.n_ipv4_addrs + && !op->lrp_networks.n_ipv6_addrs); + } else { + op = ovn_port_create(ports, name, NULL, nbrp, NULL); + ovs_list_push_back(nb_only, &op->list); + } + + op->lrp_networks = *lrp_networks; + op->od = od; + + for (size_t j = 0; j < op->lrp_networks.n_ipv4_addrs; j++) { + sset_add(&op->od->router_ips, + op->lrp_networks.ipv4_addrs[j].addr_s); + } + for (size_t j = 0; j < op->lrp_networks.n_ipv6_addrs; j++) { + /* Exclude the LLA. */ + if (!in6_is_lla(&op->lrp_networks.ipv6_addrs[j].addr)) { + sset_add(&op->od->router_ips, + op->lrp_networks.ipv6_addrs[j].addr_s); + } + } + + hmap_insert(&od->ports, &op->dp_node, + hmap_node_hash(&op->key_node)); + + if (!od->redirect_bridged) { + const char *redirect_type = + smap_get(&nbrp->options, "redirect-type"); + od->redirect_bridged = + redirect_type && !strcasecmp(redirect_type, "bridged"); + } + + if (op->nbrp->ha_chassis_group || op->nbrp->n_gateway_chassis) { + const char *gw_chassis = smap_get(&op->od->nbr->options, + "chassis"); + if (gw_chassis) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(1, 1); + VLOG_WARN_RL(&rl, "Bad configuration: distributed " + "gateway port configured on port %s " + "on L3 gateway router", name); + return NULL; + } else { + hmapx_add(dgps, op); + } + + } + return op; +} + static struct ovn_port * create_cr_port(struct ovn_port *op, struct hmap *ports, @@ -2198,90 +2367,12 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, struct ovn_datapath *od; HMAP_FOR_EACH (od, key_node, ls_datapaths) { ovs_assert(od->nbs); - size_t n_allocated_localnet_ports = 0; for (size_t i = 0; i < od->nbs->n_ports; i++) { const struct nbrec_logical_switch_port *nbsp = od->nbs->ports[i]; - struct ovn_port *op = ovn_port_find_bound(ports, nbsp->name); - if (op && (op->od || op->nbsp || op->nbrp)) { - static struct vlog_rate_limit rl - = VLOG_RATE_LIMIT_INIT(5, 1); - VLOG_WARN_RL(&rl, "duplicate logical port %s", nbsp->name); - continue; - } else if (op && (!op->sb || op->sb->datapath == od->sb)) { - /* - * Handle cases where lport type was explicitly changed - * in the NBDB, in such cases: - * 1. remove the current sbrec of the affected lport from - * the port_binding table. - * - * 2. create a new sbrec with the same logical_port as the - * deleted lport and add it to the nb_only list which - * will make the northd handle this lport as a new - * created one and recompute everything that is needed - * for this lport. - * - * This change will affect container/virtual lport type - * changes only for now, this change is needed in - * contaier/virtual lport cases to avoid port type - * conflicts in the ovn-controller when the user clears - * the parent_port field in the container lport or updated - * the lport type. - * - */ - bool update_sbrec = false; - if (op->sb && lsp_is_type_changed(op->sb, nbsp, - &update_sbrec) - && update_sbrec) { - ovs_list_remove(&op->list); - sbrec_port_binding_delete(op->sb); - ovn_port_destroy(ports, op); - op = ovn_port_create(ports, nbsp->name, nbsp, - NULL, NULL); - ovs_list_push_back(nb_only, &op->list); - } else { - ovn_port_set_nb(op, nbsp, NULL); - ovs_list_remove(&op->list); - - uint32_t queue_id = smap_get_int(&op->sb->options, - "qdisc_queue_id", 0); - if (queue_id) { - bitmap_set1(queue_id_bitmap, queue_id); - } - - ovs_list_push_back(both, &op->list); - - /* This port exists due to a SB binding, but should - * not have been initialized fully. */ - ovs_assert(!op->n_lsp_addrs && !op->n_ps_addrs); - } - } else { - op = ovn_port_create(ports, nbsp->name, nbsp, NULL, NULL); - ovs_list_push_back(nb_only, &op->list); - } - - if (lsp_is_localnet(nbsp)) { - if (od->n_localnet_ports >= n_allocated_localnet_ports) { - od->localnet_ports = x2nrealloc( - od->localnet_ports, &n_allocated_localnet_ports, - sizeof *od->localnet_ports); - } - od->localnet_ports[od->n_localnet_ports++] = op; - } - - if (lsp_is_vtep(nbsp)) { - od->has_vtep_lports = true; - } - - parse_lsp_addrs(op); - - op->od = od; - if (op->has_unknown) { - od->has_unknown = true; - } - hmap_insert(&od->ports, &op->dp_node, - hmap_node_hash(&op->key_node)); - tag_alloc_add_existing_tags(tag_alloc_table, nbsp); + join_logical_ports_lsp(ports, nb_only, both, od, nbsp, + nbsp->name, queue_id_bitmap, + tag_alloc_table); } } @@ -2299,71 +2390,9 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, VLOG_WARN_RL(&rl, "bad 'mac' %s", nbrp->mac); continue; } - - if (!lrp_networks.n_ipv4_addrs && !lrp_networks.n_ipv6_addrs) { - continue; - } - - struct ovn_port *op = ovn_port_find_bound(ports, nbrp->name); - if (op && (op->od || op->nbsp || op->nbrp)) { - static struct vlog_rate_limit rl - = VLOG_RATE_LIMIT_INIT(5, 1); - VLOG_WARN_RL(&rl, "duplicate logical router port %s", - nbrp->name); - destroy_lport_addresses(&lrp_networks); - continue; - } else if (op && (!op->sb || op->sb->datapath == od->sb)) { - ovn_port_set_nb(op, NULL, nbrp); - ovs_list_remove(&op->list); - ovs_list_push_back(both, &op->list); - - /* This port exists but should not have been - * initialized fully. */ - ovs_assert(!op->lrp_networks.n_ipv4_addrs - && !op->lrp_networks.n_ipv6_addrs); - } else { - op = ovn_port_create(ports, nbrp->name, NULL, nbrp, NULL); - ovs_list_push_back(nb_only, &op->list); - } - - op->lrp_networks = lrp_networks; - op->od = od; - - for (size_t j = 0; j < op->lrp_networks.n_ipv4_addrs; j++) { - sset_add(&op->od->router_ips, - op->lrp_networks.ipv4_addrs[j].addr_s); - } - for (size_t j = 0; j < op->lrp_networks.n_ipv6_addrs; j++) { - /* Exclude the LLA. */ - if (!in6_is_lla(&op->lrp_networks.ipv6_addrs[j].addr)) { - sset_add(&op->od->router_ips, - op->lrp_networks.ipv6_addrs[j].addr_s); - } - } - - hmap_insert(&od->ports, &op->dp_node, - hmap_node_hash(&op->key_node)); - - if (!od->redirect_bridged) { - const char *redirect_type = - smap_get(&nbrp->options, "redirect-type"); - od->redirect_bridged = - redirect_type && !strcasecmp(redirect_type, "bridged"); - } - - if (op->nbrp->ha_chassis_group || op->nbrp->n_gateway_chassis) { - const char *gw_chassis = smap_get(&op->od->nbr->options, - "chassis"); - if (gw_chassis) { - static struct vlog_rate_limit rl - = VLOG_RATE_LIMIT_INIT(1, 1); - VLOG_WARN_RL(&rl, "Bad configuration: distributed " - "gateway port configured on port %s " - "on L3 gateway router", nbrp->name); - } else { - hmapx_add(&dgps, op); - } - } + join_logical_ports_lrp(ports, nb_only, both, &dgps, + od, nbrp, + nbrp->name, &lrp_networks); } } diff --git a/northd/northd.h b/northd/northd.h index 728fa6740..665ff87bc 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -371,6 +371,7 @@ struct ovn_datapath { struct ovn_port **localnet_ports; size_t n_localnet_ports; + size_t n_allocated_localnet_ports; struct ovs_list lr_list; /* In list of logical router datapaths. */ /* The logical router group to which this datapath belongs. From patchwork Mon Nov 4 11:04:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006164 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=LsmI49OE; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=LsmI49OE; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (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 4XhpWm4cthz1xxW for ; Mon, 4 Nov 2024 22:04:36 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 097A2405C4; Mon, 4 Nov 2024 11:04:32 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id AIAN8Ln4shbV; Mon, 4 Nov 2024 11:04:31 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org AE73E405CD Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=LsmI49OE; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=LsmI49OE Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id AE73E405CD; Mon, 4 Nov 2024 11:04:30 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 562D8C08A8; Mon, 4 Nov 2024 11:04:30 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5E624C08A3 for ; Mon, 4 Nov 2024 11:04:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 92A094059A for ; Mon, 4 Nov 2024 11:04:14 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id CySfZbTWxgDD for ; Mon, 4 Nov 2024 11:04:14 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::618; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org BDC33405A0 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org BDC33405A0 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20618.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::618]) by smtp4.osuosl.org (Postfix) with ESMTPS id BDC33405A0 for ; Mon, 4 Nov 2024 11:04:13 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ohVsmlTBstYHzAGXWvRhu/HEJ2pIH4KmUxEqvbfnJ0Ur3J09VM+j9vK3PUpeHab99dKLdEWZZRnGB5i12sKD5XFFADczLzrsbCcCIOCy4MCBpBIoUpe7x+5xUnqcYwU6yBy8bIjLE6AnhPxHVHM3XwLCLyeB4IegRRPR7+TVyqcAmq6wez93Vjj+cWr+WXoMu6NMUxrpdRj3KOO1HfoESlrcWWq8cT4oHFp4ien/JFrTZykxnJq+FR3B5p0VXZmh8aFqHpvhHysuHOvAfW9up9jsH6bixfkEPYS912NMdXZ/snZF5/uwdEgNpCIwZwsJ/kHb3BaIwVn4I4Tq5E8/WQ== ARC-Message-Signature: i=2; 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=LlIHfgudNtnjnX7kpmeYTMhINBDnm/FsALwSoluI6mg=; b=jxVMwg1TgX958hrxZll9rEff7sshbHC6hUHxJBK5m/Envefd1GBfZYGhePeKuD40ubixwegud3uvpnqq0oAdsIzPJ9As5gFcBAJNCeaOhS4tuJ4wnGbwW09NR3eGaFbTq5aLCi4wEvOjd9/MFvUpGyLJ+YUehUdL++63CfDSNvBlZ8COkmIJKID24pidd1Wv8txqU0QclaAEzvOX4BNBJDCevRm4eQvlhBZUYQZ1QJ/HKtjS6KrXJki4JWQiWz76xH5AdPOGS0lw/kfT/xjxZfD54U364I1/Dsz9JTV4cc5q3zYDebUhwHlnQI7Y3tG8mjW/myLitWnU5D6ts6fF1g== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LlIHfgudNtnjnX7kpmeYTMhINBDnm/FsALwSoluI6mg=; b=LsmI49OERoIQuqbv3Ib/tuDjivNMR1kymPcGMvrK9nhqMYeLt8wGvAde+6F6hBTmfWfvcDB2Z5gyGZamb+PxBPjBFpBcoWK3iLGPLJlabeZV7DLm25nqPvmgCPZI2YarjjgMmhTnHDYrhqBhtZUfbnQkfPTGyUO+c1fbAIX4bLy5PByzPHDYie6fhw/NVP1zm0tAwmBIHObhGYW1GfQRMb2L09IgNmbTv6I3rlkGV8qmUgqz9PbxhRlBuURdO4p3T9n/MA9saghqWZ89EbD2SGkCBrpOVafABCEIRFDqiC5hQ5mHJELY7zJ+xA2B9jQwGXlqBRsXZWZCXnlSm4kF5g== Received: from AS4P189CA0024.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5db::14) by DB9PR10MB8215.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:4c6::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.14; Mon, 4 Nov 2024 11:04:10 +0000 Received: from AM4PEPF00025F97.EURPRD83.prod.outlook.com (2603:10a6:20b:5db:cafe::9c) by AS4P189CA0024.outlook.office365.com (2603:10a6:20b:5db::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:10 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM4PEPF00025F97.mail.protection.outlook.com (10.167.16.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.0 via Frontend Transport; Mon, 4 Nov 2024 11:04:09 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:10 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5476002 X-ExclaimerImprintLatency: 3803570 X-ExclaimerImprintAction: 123bce10d69b494fa4eb8ad51342f3d9 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oUeUWnjW+DgX7IIQeRPr5qBzTSsaFYsZZ0vc5EA7rjby3sFBBNzJ65HoBylPFhapLJ3jF7J6IRSlsiODiujm0ajTxtkHME3jMMQ93YDLNEoIjDCUmjqHAhRi13KsR0/BHRg3Q+Brw6ZxSoI129EbLqBB+dL1JXEjuVTZJ9TUfIL926fn61Wcg9Znpo5SJU/9yqKIJJb3jS1nzZeSRPZV0GxhNF7ckFZKKw4JGw+HFeRFeiHHo/8BYGwuYQfCf5rbV67JOyt+sV6mIr95OnrAe7Hw14FzxmkWz+V+EhUJ4UNnD9tAl4F864JNW+IeBFs3eo6mAfnMPbhmXLwc5WWYcQ== 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=LlIHfgudNtnjnX7kpmeYTMhINBDnm/FsALwSoluI6mg=; b=KunU9lfS3aY5upX1kPyP1cBtJ1jlH4DEVAmGI5AImgga4RgEExRWZbG4W4SbWqbXoKhsZDBf7NOP4kgpsjPLiBVOxzJkRL96c0kWdvDg4mCWtChNeKvJAHUm0HVUQoVY6Mcd2FxVh8kzrzbinFiury+hB0TWocanAJ1mtp7tVoO9gwU89F/aC/5bgYxlEGb1fLl0lRZvRzQR4iSqGvFLtbg4eecNbqlc1bQxAWXGmtt2Qsrk384x9yhqlKPiaBpoE/py7wzH+uDFZyuAx5Uf9zZtNTfPCvrNfuREw6FGZjG7b+1awsoN+UaYeT0gVcAvcL85i7SyS5O/O/sVFg7PdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LlIHfgudNtnjnX7kpmeYTMhINBDnm/FsALwSoluI6mg=; b=LsmI49OERoIQuqbv3Ib/tuDjivNMR1kymPcGMvrK9nhqMYeLt8wGvAde+6F6hBTmfWfvcDB2Z5gyGZamb+PxBPjBFpBcoWK3iLGPLJlabeZV7DLm25nqPvmgCPZI2YarjjgMmhTnHDYrhqBhtZUfbnQkfPTGyUO+c1fbAIX4bLy5PByzPHDYie6fhw/NVP1zm0tAwmBIHObhGYW1GfQRMb2L09IgNmbTv6I3rlkGV8qmUgqz9PbxhRlBuURdO4p3T9n/MA9saghqWZ89EbD2SGkCBrpOVafABCEIRFDqiC5hQ5mHJELY7zJ+xA2B9jQwGXlqBRsXZWZCXnlSm4kF5g== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:04 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:04 +0000 Date: Mon, 4 Nov 2024 12:04:02 +0100 To: dev@openvswitch.org Message-ID: <41a2a452d6bc79afe4e2ad012d0c1e60b6348657.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0118.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::13) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AM4PEPF00025F97:EE_|DB9PR10MB8215:EE_ X-MS-Office365-Filtering-Correlation-Id: 9111a8a3-4376-4955-a514-08dcfcc068d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: PRaSRcXTCL5PPLwTGd/S4udsMKIKt9iIDDng/NFr7Fmr7+PbsvjKMv7ZJkqR0I9QXmIpjAFU/oObjwS0PGD+woXwsQCW/T6KpUDBAzh5GYwTHpQ0OaDlyfbt4250dd+EqlakgZemAs9uKFHh9ycfV75YYR87jKo7hZ1g/1vdFzRN1K7SfWsLyGBgMPXQB2m1katb7QrZgBAh2FBAXEZBUIcQzFSM0ehVrQ3/25bBsvcXCKRYEJ9Mp8eY4ZbnNo1ZNEcNWzYwDTFqlNbhCR9TwxcjcjOU57FHjfikqxaTObadsC4up4iE+FJpiM/8eRPyMM3Pe+ct0qNsVwJ4NH5lJ45QjGdhTxXHiyZLrKaozSo3R6PUPKiSPJgz/rZPGd5XYfOFQk8rlaUBaG0oo4Y1z9b0rzkj1CGMVdyzbFjnC5rhC6AyrJMOq8GtAi8mrjhYjlRiiUTupK3sbLQa5ulo/g0cV8LBS2FOgbCBzbiKduiWeCMH1ooVhXnX/jkoO0BHPnsGh20tvZudnNaMUmw6YVIZSaA4LzwHLOdJUQhS0Z/K2EXlm8F8TH4d5jXFu33X6mSGZ1E2IFCPA83999SluyKuIbin8nPUMmk9dyVxEtcuV4L+1ZtYvDFA3oepXk5GenAfQgAcUZUEuQe+PvcnPovEOB8+Vz/2xOdwy///06EC6qF+XklPMiomDEVpy0BnUbr/H+aBlRx3PYgviiJxQOYYwDv2md7/dMSbZ+YWObliHHFHFLF1ETBBi9aduUD+LIz90jw+GQj1rKQOT9sY1eJRic7Dc17VX0ExJyhO7W0kWn7uUbGy3F6fIseN7C+1JP3LrFpyZqUP04hbYnW/Q4JySdHiwqwQIw1k3/KdUuwIHNU1CjRrBBMaoHtR+BXuPHwlwCdhFsBFyITFY64q5Ro7sz4pNINlabhGEKOg1I/mzZugg3vIkYhm+fi1/hqdERMz29gc4EdvTGDRVoeL0dGc2UGeG1E7vaKog/QHOFlYjyp7NW8iEoSk1cS50LDIPUgm1mUDB2q6EcoDaBf1Jnoq/CfmS5n85D7uMRWV4Dff57I90rtglYH3umJfV1riiOav9hFyJr4Nf9JUVd8h7pKymktGk14MrWbkXQV7Zphw9TjNATTFaFBvnv7hcPuWmHIlYqvHXY8cLqzSZTofyqCmBXT6vCqu3ua7TYdxOjsemPw0TJkbKKX+KqgmL3a1qPPhgFxcdsfULyZYBkmC79Tkcb2hS15nOL/tGKeV34OkQXrHYqfdX545a07DKucSuvOXKKnlkTlWqPr751OH4+U6+M1yhJhIxYg+ow2cgRbRCUoUNA+dnSNvXxyFyYB2 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00025F97.EURPRD83.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b955ea61-6efc-4ca4-6308-08dcfcc0651b X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|82310400026|35042699022|14060799003|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: lIyGuM/ESJInVL0QcG+lFzyGn8Z0EOY+Q+8QQ//q9NriejIUdXhtlKaL9wXRtOhSEugWulmRTtaJz25OTdnWM+OHsIMTwHjtIW/cCc8Xxa7JD6TmIZlVGqQ7F658Ufp1k/lRkVQ3rofwF9TtA2oHyRqdJWXj+cgfvZcYgd38vW7Rt5z9dnvoDKLgHQR//fw5Q2om7wzOx4e9fthJHsMmLKn5mjIMRFfS5xuy+cZs7u327BV4zsRUpiN1qgEOxxBrOgor/Z14aOsL07G/ipcGjP2D6XjJ0RrXcSreGbuOiN6e40Pd3qwdXNoLToeTDP4l5vlfgnCin2kBqWrv5hBy6pzVp2q+UMt/TaVTWowvyV7r+gyS1ercY1VyB1zMSk/jyZvbeLy1K4JxMX1fq57O+x/bO8atIs5FPztC1zc66EkWrox94NRL0LCdvB+8COhE/cNGlPLbee9o9rr9lN0w4IzwMv70PwHiz/cQuqQXW7eSd78r+qGzGhpT4QI4VayN4yIvtu/3HnE3dBJIz/1mpuVxvpudBH+Ml5BqP+/+L6RHvc4UgC8M6A5OAUiCXpyLG1VcktHI7XrvaJCyJ71U+A8x8WO5MagTJugnrGHkbMcSKIPjQI5wxCaoIiW06kxR8u7kEANqz4goe2XW/feGxU3zdkH7UMnDEX9h8KwhFDax9JTvi+PEOfYhx36ruS7jinUquRtiVKLcJOOdX54FzyrBuYsT14ZdrMNgfGfQlF7cEYLnzTWjJhTy1wva3wIbu0MclaW8+YYeXsQzDi6bhWmjLh6PZoKRBPYs5vAvHp/QWCgMo1K0ffvQK8riVguhyJti27VLShwxFVO+9SMIqjQyzH25+wmM8EN2zYtLrw58nf/UGvD/Va1ualCCU3Eckj4dqBrmDyLuaRaQh+RBOu7quHEbdHYjr8WYexFYqejWOOpmYmC0LqFj2UlOIoYs22lvdOfkgjRYmI3FWTDVjQ6pxiG4sFZQcuG2Z5ES7O/Hlay7L7fshk9sGVp1v6a7T98ophVEHHp3GK54oUFVAqRqhLwk0a/6osPifLYRSQ6jBy9M5dsc9F8apsWVTIIw1mzXRgwkexSUL+GNCqFyYBoMRcKsqzSXWE3yq5G+d+Oc7KDESDoyUpfQDPnf1oLILOjW+FFtUw7nUBmJWxtlEF+oQTIZd0iKytKTE5u88Z8fSCUTtAG3j/O2sRbYrhZQ2nJZF+btp+jLdt8szmdtNKzY+gGuzM3VJBPfnnBObczPAHqffEIDhRpj3KJvvZ+/YME7pEamZECrEMb/7fDIlORhTl/1c3/LMFhDgUYyG6tXLI4/sqPTvzFHn8B1YNm+EFcETYnUslbI5g/q+cbogGXqGy/xNLZOxjgowYTCbOUs/dbVFOEzNKUSLnveSPmfFKWRu8QblZ/CBdJaSjK8pQ== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(82310400026)(35042699022)(14060799003)(1800799024)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:09.6048 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9111a8a3-4376-4955-a514-08dcfcc068d4 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00025F97.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB8215 Subject: [ovs-dev] [PATCH ovn v2 06/32] northd: Reorder join_logical_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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this makes the later active_active patches clearer as they need this new order. For now this has no real effect as these two parts are completely independent. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/northd.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 8d95650c2..5c48503e3 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -2365,17 +2365,6 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, } struct ovn_datapath *od; - HMAP_FOR_EACH (od, key_node, ls_datapaths) { - ovs_assert(od->nbs); - for (size_t i = 0; i < od->nbs->n_ports; i++) { - const struct nbrec_logical_switch_port *nbsp - = od->nbs->ports[i]; - join_logical_ports_lsp(ports, nb_only, both, od, nbsp, - nbsp->name, queue_id_bitmap, - tag_alloc_table); - } - } - struct hmapx dgps = HMAPX_INITIALIZER(&dgps); HMAP_FOR_EACH (od, key_node, lr_datapaths) { ovs_assert(od->nbr); @@ -2396,6 +2385,17 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, } } + HMAP_FOR_EACH (od, key_node, ls_datapaths) { + ovs_assert(od->nbs); + for (size_t i = 0; i < od->nbs->n_ports; i++) { + const struct nbrec_logical_switch_port *nbsp + = od->nbs->ports[i]; + join_logical_ports_lsp(ports, nb_only, both, od, nbsp, + nbsp->name, queue_id_bitmap, + tag_alloc_table); + } + } + /* Connect logical router ports, and logical switch ports of type "router", * to their peers. */ struct ovn_port *op; From patchwork Mon Nov 4 11:04:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006165 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpWv53Pgz1xxN for ; Mon, 4 Nov 2024 22:04:43 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 03A4F408B0; Mon, 4 Nov 2024 11:04:41 +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 HZELIikO2NRE; Mon, 4 Nov 2024 11:04:38 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3FDA6408B6 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 3FDA6408B6; Mon, 4 Nov 2024 11:04:38 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 052DFC08B4; Mon, 4 Nov 2024 11:04:38 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 187C2C08A8 for ; Mon, 4 Nov 2024 11:04:36 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 03E0B405D4 for ; Mon, 4 Nov 2024 11:04:17 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id OpkqBdHCmUlk for ; Mon, 4 Nov 2024 11:04:15 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::62e; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 50669405CC Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 50669405CC Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=r0Vn70PC Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2062e.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::62e]) by smtp4.osuosl.org (Postfix) with ESMTPS id 50669405CC for ; Mon, 4 Nov 2024 11:04:15 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=MonV7d9CPcdiRG6BFTHJAkCK6Xd1b3JFXzcoNvvy1CX/RfzI71//vtGksjfdYcfR/ywX6isfj5qFit2AKXVvMp0xwhXGTKtxqrVwm4ox1k1wJzJ2lX19KYYsO4xsvhhtaWKkPW29gQsQcbRAT7TaSWSwcu+Rk8q3DtjA0oMEDK+ftbm6IOw83frqz7v0FSOXk0reujAFspHgUjeR95sOl51z4Bro+Qfk8ecRMo/AtqdxenMwZzPrnbNPSSNcatkLW3SiIxb/CiEHQdC8I1xLZ2yTCbPkkHotpkKOToVxQXHdtGG5eUCm1V9QkOCPa8byyb4NwIm+B42lJyJqFcxN/A== ARC-Message-Signature: i=2; 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=4zU7hNJ+aSLMf8wupMv65j1vgata6D3tboJllef64OY=; b=dxa1SanhmYppRXAPX+3Oahs45fyk8igkYXqmrfDq2NBoIRR4/jZiFnOFnl3lNkvmBR3AVmF6A0b2awXCFyKg6VRq5F1VrdhfJmZdHdh9WU9U8nkej6it7Mjtlx/K8M1Zzg7NKillbuXJ7IZ/cYjqVEB0Ou7bIvWAatwWrGTmhlTdCBZ5lXgNHqPiNPwhjHOeFnOR/CL3gLceCVyu8/xjD9pefhgoWdQy+n+Dg1CnTI31RSc72YZwe9MrBB4TUfD7oDucAOjDir5SiWrozrimun8J3o2IpvTsJHODCMKmPPUuboOuwt8P/u+eDVwNt8pRC1s8zGXnnVJI2q5Tj02iBg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4zU7hNJ+aSLMf8wupMv65j1vgata6D3tboJllef64OY=; b=r0Vn70PCGGdi0okNSg/4A5pRcDVM8Et6PRJahctC+t315A7eJ4MQ44MZQeU1Q8OEgKF1MD5ADyejTgUZB36FZj4pXqMjTeLHbwOIF0E4SVc/s6RhPlD5nnjNeqHggOBzzNVlX013ysUM71dc2KkY7BJb7aCpcsFYhozpkN+Gds/kQetwEWphszSBql/4Wwuuskn6NFLuIXSL5y4y9i/Dismu8KBXz7vx1L5RGMSkJpmowniT+nklINCtY0nyA6z03AF0JnhMhBlqiy2nnnUVa0VeuN+kOtiPBt7/QjWTyGlXJu3d2FectIWOGP7AeElfwX86TRZp4b8Y2u7KAgPAkQ== Received: from AS9P250CA0003.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::9) by PA4PR10MB5683.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:265::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:12 +0000 Received: from AMS1EPF0000004A.eurprd04.prod.outlook.com (2603:10a6:20b:532:cafe::f8) by AS9P250CA0003.outlook.office365.com (2603:10a6:20b:532::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:12 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AMS1EPF0000004A.mail.protection.outlook.com (10.167.16.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:10 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:11 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5050227 X-ExclaimerImprintLatency: 1916322 X-ExclaimerImprintAction: 06650b5086104c60bdde71c84c08aee3 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NRCcJO8nmQcZ8DuAga57gXJo4lzqjd42h4nngx/VKV6wvR34Qg1isxUhXleHxe6I0TvFSDcmKkfPmAFOYy2di5rEp4JfUBySpkuR83cad4cu/wd5d87o9ulbpobzrq/lwCW/y9iH7LA5Nfh1w5xIJb4xf/TmpfbmOQ3uo3otmk7lHidXlzuZn3SkF9k/J5f7twjq1jHjebYhTvkLpbL0B7nXVXY6zjZVsmX55mcGV0+kFhmuqo6P95HJb4zJ+ugOjxLcyVkjV96wFCWEYAseMq7hnryy7u8PPh/+4xE6wIGM2mQUp8ZaDFGMYKRBGCMtft8C0ix5TN2wgn2WBRJ26g== 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=4zU7hNJ+aSLMf8wupMv65j1vgata6D3tboJllef64OY=; b=W1YFFC5OtrmI6JL1zKIhim4mNAJ4s9xrgbS81Mf8rk4vr8TDzyblW3+nQFXOzw7h0gyNGfwcilmZa+iwILaBRAYMjRueN7p5x+ZBCT8Gm4B8iIE1hsZDtGXu0dr22ZHm/rM6zBGXK05nxCn33XEo8fwu9gYHadQSUNzspzWUSIy9jkn9MG6gCSCFA57AyvrJJ+4Uloy5rA0s6zX8yIVfmZcwumPKSUpNTegSYh0+d9A46qeo8W+4XGAG6KhGdP4CHNR0YEmTy3QptN4dCME+JUNmG0WvyThn3mkJVNlX4mC3gGZWBdOIoRA31+scrmL9ASIB/K7kdIYw7AWvcLFGMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4zU7hNJ+aSLMf8wupMv65j1vgata6D3tboJllef64OY=; b=r0Vn70PCGGdi0okNSg/4A5pRcDVM8Et6PRJahctC+t315A7eJ4MQ44MZQeU1Q8OEgKF1MD5ADyejTgUZB36FZj4pXqMjTeLHbwOIF0E4SVc/s6RhPlD5nnjNeqHggOBzzNVlX013ysUM71dc2KkY7BJb7aCpcsFYhozpkN+Gds/kQetwEWphszSBql/4Wwuuskn6NFLuIXSL5y4y9i/Dismu8KBXz7vx1L5RGMSkJpmowniT+nklINCtY0nyA6z03AF0JnhMhBlqiy2nnnUVa0VeuN+kOtiPBt7/QjWTyGlXJu3d2FectIWOGP7AeElfwX86TRZp4b8Y2u7KAgPAkQ== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:06 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:06 +0000 Date: Mon, 4 Nov 2024 12:04:04 +0100 To: dev@openvswitch.org Message-ID: <93f74d8ff144185aa7aae6195852dbce20cdd636.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0113.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::12) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AMS1EPF0000004A:EE_|PA4PR10MB5683:EE_ X-MS-Office365-Filtering-Correlation-Id: 37347b67-f832-4334-523d-08dcfcc06961 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: rPPrYiFdEzKfkWivxWJcQSGGHD4TyStHwtujR4Pe9kco8Os7v8qP/c3pAFd+6+ptmCtppD/Sw2w8gkUPUDncimCI5RvKFen6+uoV7ARP41JgHCHM6+zEju9L3VH3GLtwE9eOBFU/fE9/nP5neiCa+j/Tr6Ylm2PiBRgeRUShTZTss00nJDMmFCzdVNVT/GGdRQKJcJmC7psAqNl2Ie1pqRYU+kVxSBjjesSccCpNkaafsQnV/9UZrOGRxtPUw/oBqI5uZY3In9crMMYjlzy8F+IbAxte5DxJkLnEk36Iu3xgyb5BaLlJNIOJmWleMK8fRldm3siisVBFk4fx1t/AUnICXyOU55iUrT2tOpEv/BNhD2wG9ZY9cuw9sMmJstJmSh86alEUiaii/jcpwLKKVIix/pVyLoWIfEcl0vSJccXuYwnyKwUKEPO/8sEE7dKV4sTSSfELm1U5pPSQhiMIgrUIJdwO5zs7KIfmQOQ8EB92aeuWhas3VVyDEBQjJzrqMiIPNOTHPRZTQKNAlZ7nNqATNO+6k0x55Nlfs32vekn7QLDy+BQINrcvLMGomO6AhXFBDgIgFyXHEC+kf+Sb7gml0u5jaaVU8Za3I6YoP2MdV2RUQHwpdTfoo8d8aIp2wKcJb0wq0ugfj1U0BXlbvv4j9K7xy2wJIh8uAjmr8ZwKIQBNTL0rbMMqYS9UtkbjGttUKP0fn/nT6jWjZPCFXHgqbrwn719bAP9Gw1bhNnKtC4TL49o75YMHjhWQDUniUCjEfAqZxhW8pwLR6RU8D/cTZNt3KhiIXVJHhn4S9WzrqMNk3JWnu+++ENvB+wHQ4eVL0fvLSw7PnBYI+38zflv5DBOcw0sIi1YtAkBx/Tga9UyDApI5w4xxynkICu+PZQi2TUEwOas04r/+Rv6fDuSIJBpZ36iLekB8hR8RVxGuC6FCktx+/gkMvRJhVZmyLalJUoKsj0KwQiaDg/rzOxYHJZbNWF/pwUWRuR7hkiojkF3emaKFzvhf4xO8/cIqr8kgRhWd2JUexV71VQwG7WGOIhLFLAgixqKoLfK5bhdD2hYf7UjgH/RVgrOTWOEv6l6f1cOaDomjpsW7cZInlpwm8DlUFvb37UUbX2FQLd+f34xZoQA50l+oEp6LVP1abx9f7JnASN/rcbzwrG1D71IRrEf8I2qntFfSt7T4Pm01sMFQ1xlqgGR8hWqSHu9YLlcM4bS+2GnT8ztpx3J3ZcV5zI+TCmnR8Gf2zT1PW30atwAjqrxa14PuhTKfZPCnmmuDH1poZ1uY3rip0OoQGq44y+Ka/M0HnjoF2fiT64EyRrLsad24b5LPW4lCt4In X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS1EPF0000004A.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 02387c1f-be5e-406b-19e5-08dcfcc06646 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: 6b5kARzcbNkGeOPKcuJTCiSoId3JQyIstXL7ZCcfAmXi7Wsn7vqt4xDPSnQK7TuJTE7960c3Y2tXKIdgMpZYlb1s3CM5JFdf4Z6Ov2aDL6Sr2yVs/MOVSgR67c4JqkxaSBxZXpW0HyB+/ra2aXT5dH/8ze1jeHV27/f3Kg1zTL1YZYLC/y6QJon0l1R4+AnfwrNkMNpTM7bQwNXMSXRBDCVpE10QqBcXUgeTFQ0XkuxLcBLIFFklD/Q18QSkY8+FNb1skDI69bvflnUTjx1E5TiYHGlNgTt/MMBrFvX+fb0ijweOlZ8dmg13pG3t9nk/DzkbncaepwqQbWo73FNS6caUHBATNTCVN2GKlweczJ4hdaBRnWPKwt9r/d7u/nE4+oVQMkFWvDApQIURBPSk1wh+uFeqQGC4v8/OF2DlAssi0BCy8vAZPtvbxHZscf2wYLDGNZR99GJoWPZNHSYVdp4z5MIMNKZUkwG3Bs1cJzOJp7NF8c6ygbu6IbBNh4PQS8k7vIcWmROW+8V0rXeZo4ePSut+H02WLoXaVbpH6m1mkH1OoNHaEMSg6/gliIb/VnkeUpTRmcONL33NPrRVxX9TGKVOpC86dpIw93QHI3nshMgARufkRXcQx/bwfWFt3GQLetySFoUIwQWCTAQCC/A6Z0tTGbe7U/d0LfrIFhb9T8OEstdHhiu57HbuEz9+8qGItkexEOu1+Hryy0aoyWuk2ZXiophCAt5gRvF9KV2GRRLbp63JXFwcAmw0vzX2Rc78j/yN8hyWhLXS85NfhQs9V7PrwPnKRarH4cjQSCww5/GmsOIsEa4Y0M/5/7JVYAjjUqd6UfyST4DIOZPtXhHiYTkV2YgpZc9XJfGqJrhDHbKyrLXZsuHaYZPaY0ibhMe2MTSmqk+XMB3wvHPF/jxlNi4dLF+EhDeVisoWkjJwy9xwmQeNglpy1DR32ckjQjvvoPMnSj0RRg4qqoT8pL9Ehohvg+YSHCZec46meIfDIOSWvNiD3aqmwoe+10ZA8CvqYzQ8bTpgyIFpE7eJoAgtIQM1mqNXP8O1Dj4F+Hg/5p4pJcsK0YWk+xuBPydum5l38ZmcF5j1RxPdaNvw7HkwmuuEWBl7mChn2+T9Sb6g8EOWUmuf83QQNKg/SG8DXs0trLCe1wBcvtP9gq/5bCRWnuufjE0sSaBI799Gn82toILRATg2uYlUMzb/XoIZtIsb69JnTt7mC5Un2eUwWvj5YHC+nO9WFfxEou1+66sysHHTvcebQ/Qz8/TA/++z82iRwS79oXOKeLwkNtIAUrpu6cfj4F21kvOHNAxxk8BeLyNloFYSm3WRjRHjdMoXi6l8zWC9LK+4bcdtrpIYXkdHqPtHHNcDch8NiRTkrmMu2md9uNEPG1LgHkuSuo3VASCiBAm2RAsT3x8cseRPmg== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:10.9486 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 37347b67-f832-4334-523d-08dcfcc06961 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AMS1EPF0000004A.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR10MB5683 Subject: [ovs-dev] [PATCH ovn v2 07/32] northd: Rename en_static_routes to en_routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this engine node will in the future also handle routes created as part of the LRP network property. Therefor rename it to make it clear that it handles all routes. Signed-off-by: Felix Huettner Acked-by: Lorenzo Bianconi --- northd/en-lflow.c | 8 ++++---- northd/en-northd.c | 34 +++++++++++++++++----------------- northd/en-northd.h | 8 ++++---- northd/inc-proc-northd.c | 12 ++++++------ northd/northd.c | 4 ++-- northd/northd.h | 6 +++--- tests/ovn-northd.at | 6 +++--- 7 files changed, 39 insertions(+), 39 deletions(-) diff --git a/northd/en-lflow.c b/northd/en-lflow.c index 469d7c6b5..fa1f0236d 100644 --- a/northd/en-lflow.c +++ b/northd/en-lflow.c @@ -44,8 +44,8 @@ lflow_get_input_data(struct engine_node *node, struct northd_data *northd_data = engine_get_input_data("northd", node); struct bfd_sync_data *bfd_sync_data = engine_get_input_data("bfd_sync", node); - struct static_routes_data *static_routes_data = - engine_get_input_data("static_routes", node); + struct routes_data *routes_data = + engine_get_input_data("routes", node); struct route_policies_data *route_policies_data = engine_get_input_data("route_policies", node); struct port_group_data *pg_data = @@ -82,8 +82,8 @@ lflow_get_input_data(struct engine_node *node, lflow_input->lb_datapaths_map = &northd_data->lb_datapaths_map; lflow_input->svc_monitor_map = &northd_data->svc_monitor_map; lflow_input->bfd_ports = &bfd_sync_data->bfd_ports; - lflow_input->parsed_routes = &static_routes_data->parsed_routes; - lflow_input->route_tables = &static_routes_data->route_tables; + lflow_input->parsed_routes = &routes_data->parsed_routes; + lflow_input->route_tables = &routes_data->route_tables; lflow_input->route_policies = &route_policies_data->route_policies; struct ed_type_global_config *global_config = diff --git a/northd/en-northd.c b/northd/en-northd.c index 24ed31517..6e90336f6 100644 --- a/northd/en-northd.c +++ b/northd/en-northd.c @@ -287,7 +287,7 @@ en_route_policies_run(struct engine_node *node, void *data) } bool -static_routes_northd_change_handler(struct engine_node *node, +routes_northd_change_handler(struct engine_node *node, void *data OVS_UNUSED) { struct northd_data *northd_data = engine_get_input_data("northd", node); @@ -316,29 +316,29 @@ static_routes_northd_change_handler(struct engine_node *node, } void -en_static_routes_run(struct engine_node *node, void *data) +en_routes_run(struct engine_node *node, void *data) { struct northd_data *northd_data = engine_get_input_data("northd", node); struct bfd_data *bfd_data = engine_get_input_data("bfd", node); - struct static_routes_data *static_routes_data = data; + struct routes_data *routes_data = data; - static_routes_destroy(data); - static_routes_init(data); + routes_destroy(data); + routes_init(data); struct ovn_datapath *od; HMAP_FOR_EACH (od, key_node, &northd_data->lr_datapaths.datapaths) { for (int i = 0; i < od->nbr->n_ports; i++) { const char *route_table_name = smap_get(&od->nbr->ports[i]->options, "route_table"); - get_route_table_id(&static_routes_data->route_tables, + get_route_table_id(&routes_data->route_tables, route_table_name); } build_parsed_routes(od, &northd_data->lr_ports, &bfd_data->bfd_connections, - &static_routes_data->parsed_routes, - &static_routes_data->route_tables, - &static_routes_data->bfd_active_connections); + &routes_data->parsed_routes, + &routes_data->route_tables, + &routes_data->bfd_active_connections); } engine_set_node_state(node, EN_UPDATED); @@ -388,8 +388,8 @@ en_bfd_sync_run(struct engine_node *node, void *data) struct bfd_data *bfd_data = engine_get_input_data("bfd", node); struct route_policies_data *route_policies_data = engine_get_input_data("route_policies", node); - struct static_routes_data *static_routes_data - = engine_get_input_data("static_routes", node); + struct routes_data *routes_data + = engine_get_input_data("routes", node); const struct nbrec_bfd_table *nbrec_bfd_table = EN_OVSDB_GET(engine_get_input("NB_bfd", node)); struct bfd_sync_data *bfd_sync_data = data; @@ -399,7 +399,7 @@ en_bfd_sync_run(struct engine_node *node, void *data) bfd_table_sync(eng_ctx->ovnsb_idl_txn, nbrec_bfd_table, &northd_data->lr_ports, &bfd_data->bfd_connections, &route_policies_data->bfd_active_connections, - &static_routes_data->bfd_active_connections, + &routes_data->bfd_active_connections, &bfd_sync_data->bfd_ports); engine_set_node_state(node, EN_UPDATED); } @@ -426,12 +426,12 @@ void } void -*en_static_routes_init(struct engine_node *node OVS_UNUSED, +*en_routes_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED) { - struct static_routes_data *data = xzalloc(sizeof *data); + struct routes_data *data = xzalloc(sizeof *data); - static_routes_init(data); + routes_init(data); return data; } @@ -510,9 +510,9 @@ en_route_policies_cleanup(void *data) } void -en_static_routes_cleanup(void *data) +en_routes_cleanup(void *data) { - static_routes_destroy(data); + routes_destroy(data); } void diff --git a/northd/en-northd.h b/northd/en-northd.h index 631a7c17a..b676a0ad3 100644 --- a/northd/en-northd.h +++ b/northd/en-northd.h @@ -20,7 +20,7 @@ bool northd_nb_logical_router_handler(struct engine_node *, void *data); bool northd_sb_port_binding_handler(struct engine_node *, void *data); bool northd_lb_data_handler(struct engine_node *, void *data); bool northd_sb_fdb_change_handler(struct engine_node *node, void *data); -void *en_static_routes_init(struct engine_node *node OVS_UNUSED, +void *en_routes_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED); void en_route_policies_cleanup(void *data); bool route_policies_northd_change_handler(struct engine_node *node, @@ -28,10 +28,10 @@ bool route_policies_northd_change_handler(struct engine_node *node, void en_route_policies_run(struct engine_node *node, void *data); void *en_route_policies_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED); -void en_static_routes_cleanup(void *data); -bool static_routes_northd_change_handler(struct engine_node *node, +void en_routes_cleanup(void *data); +bool routes_northd_change_handler(struct engine_node *node, void *data OVS_UNUSED); -void en_static_routes_run(struct engine_node *node, void *data); +void en_routes_run(struct engine_node *node, void *data); void *en_bfd_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED); void en_bfd_cleanup(void *data); diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index 8c834facb..ddc16428a 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -159,7 +159,7 @@ static ENGINE_NODE_WITH_CLEAR_TRACK_DATA(lr_nat, "lr_nat"); static ENGINE_NODE_WITH_CLEAR_TRACK_DATA(lr_stateful, "lr_stateful"); static ENGINE_NODE_WITH_CLEAR_TRACK_DATA(ls_stateful, "ls_stateful"); static ENGINE_NODE(route_policies, "route_policies"); -static ENGINE_NODE(static_routes, "static_routes"); +static ENGINE_NODE(routes, "routes"); static ENGINE_NODE(bfd, "bfd"); static ENGINE_NODE(bfd_sync, "bfd_sync"); @@ -254,13 +254,13 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_route_policies, &en_northd, route_policies_northd_change_handler); - engine_add_input(&en_static_routes, &en_bfd, NULL); - engine_add_input(&en_static_routes, &en_northd, - static_routes_northd_change_handler); + engine_add_input(&en_routes, &en_bfd, NULL); + engine_add_input(&en_routes, &en_northd, + routes_northd_change_handler); engine_add_input(&en_bfd_sync, &en_bfd, NULL); engine_add_input(&en_bfd_sync, &en_nb_bfd, NULL); - engine_add_input(&en_bfd_sync, &en_static_routes, NULL); + engine_add_input(&en_bfd_sync, &en_routes, NULL); engine_add_input(&en_bfd_sync, &en_route_policies, NULL); engine_add_input(&en_bfd_sync, &en_northd, bfd_sync_northd_change_handler); @@ -276,7 +276,7 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_lflow, &en_sb_logical_dp_group, NULL); engine_add_input(&en_lflow, &en_bfd_sync, NULL); engine_add_input(&en_lflow, &en_route_policies, NULL); - engine_add_input(&en_lflow, &en_static_routes, NULL); + engine_add_input(&en_lflow, &en_routes, NULL); engine_add_input(&en_lflow, &en_global_config, node_global_config_handler); diff --git a/northd/northd.c b/northd/northd.c index 5c48503e3..1265e3c81 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -18767,7 +18767,7 @@ route_policies_init(struct route_policies_data *data) } void -static_routes_init(struct static_routes_data *data) +routes_init(struct routes_data *data) { hmap_init(&data->parsed_routes); simap_init(&data->route_tables); @@ -18861,7 +18861,7 @@ route_policies_destroy(struct route_policies_data *data) } void -static_routes_destroy(struct static_routes_data *data) +routes_destroy(struct routes_data *data) { struct parsed_route *r; HMAP_FOR_EACH_POP (r, key_node, &data->parsed_routes) { diff --git a/northd/northd.h b/northd/northd.h index 665ff87bc..f701abd45 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -180,7 +180,7 @@ struct route_policy { bool stale; }; -struct static_routes_data { +struct routes_data { struct hmap parsed_routes; struct simap route_tables; struct hmap bfd_active_connections; @@ -739,8 +739,8 @@ void build_parsed_routes(struct ovn_datapath *, const struct hmap *, const struct hmap *, struct hmap *, struct simap *, struct hmap *); uint32_t get_route_table_id(struct simap *, const char *); -void static_routes_init(struct static_routes_data *); -void static_routes_destroy(struct static_routes_data *); +void routes_init(struct routes_data *); +void routes_destroy(struct routes_data *); void bfd_init(struct bfd_data *); void bfd_destroy(struct bfd_data *); diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index d6a8c4640..63fcf3f71 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -3904,7 +3904,7 @@ AT_CHECK([ovn-nbctl lr-route-list r0 | grep 192.168.1.2 | grep -q bfd],[0]) check_engine_stats northd recompute nocompute check_engine_stats bfd recompute nocompute -check_engine_stats static_routes recompute nocompute +check_engine_stats routes recompute nocompute check_engine_stats lflow recompute nocompute check_engine_stats northd_output norecompute compute CHECK_NO_CHANGE_AFTER_RECOMPUTE @@ -3920,7 +3920,7 @@ AT_CHECK([ovn-nbctl lr-route-list r0 | grep 192.168.5.2 | grep -q bfd],[0]) check_engine_stats northd recompute nocompute check_engine_stats bfd recompute nocompute -check_engine_stats static_routes recompute nocompute +check_engine_stats routes recompute nocompute check_engine_stats lflow recompute nocompute check_engine_stats northd_output norecompute compute CHECK_NO_CHANGE_AFTER_RECOMPUTE @@ -3967,7 +3967,7 @@ AT_CHECK([ovn-nbctl list logical_router_policy | grep -q $bfd_route_policy_uuid] check_engine_stats northd recompute nocompute check_engine_stats bfd recompute nocompute -check_engine_stats static_routes recompute nocompute +check_engine_stats routes recompute nocompute check_engine_stats lflow recompute nocompute check_engine_stats northd_output norecompute compute CHECK_NO_CHANGE_AFTER_RECOMPUTE From patchwork Mon Nov 4 11:04:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006167 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=b9xBuHpl; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=wkVBooDF; 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 4XhpX33d4Pz1xxN for ; Mon, 4 Nov 2024 22:04:50 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 7849B81090; Mon, 4 Nov 2024 11:04:48 +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 2lPHHjbNcPxc; Mon, 4 Nov 2024 11:04:44 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 7B1A68055A Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=b9xBuHpl; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=wkVBooDF Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 7B1A68055A; Mon, 4 Nov 2024 11:04:41 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E3AE6C08A9; Mon, 4 Nov 2024 11:04:40 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 15A0DC08A8 for ; Mon, 4 Nov 2024 11:04:39 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 3748F405BA for ; Mon, 4 Nov 2024 11:04:18 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id nJmeJAEHiMx2 for ; Mon, 4 Nov 2024 11:04:17 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::60c; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org A242740562 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org A242740562 Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=b9xBuHpl; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=wkVBooDF Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2060c.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::60c]) by smtp4.osuosl.org (Postfix) with ESMTPS id A242740562 for ; Mon, 4 Nov 2024 11:04:16 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=fail; b=PioFkOGD3ps5dcxBWm99MEhB+nWySJ41joHdwSxJRqhmoskHzGrzai7I0sh7Y6sPYjUWIDNqOShKOWNupgRf6Sr9bFKA85BCa/X27GVdGqBy60TQF7Iaszm/xO0lw2idHTT1KoQCwGG4pvct7yabO2i/xfgb5ONqbx5kYayiZ8yzD9SojNrDb3zlOzlmS0Xeoq5oqGHAJEzcrhZAOxCrHHb5ZWJgbQLWOl2YNi9E2vRzQ8L+drlSHwWc5mthnSDaXHiWNm0TAs+lOnkIKCtDTHIYjDnXy5FLLnmycFYd2krbi3N9tbbf554kGtoAQg8p3xFsXn2uEvk8yx1e7DH6QQ== ARC-Message-Signature: i=2; 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=IL+DkiupKzxohoTA9oPfma0ULY/U4rTC1Zss3CWagfU=; b=L4dsV1UCAmdidIq5XvkJTKi/XmDKzbKF4alK5z9NMoXDmjJbCczrqbsAtqGB3wwtKusOJOYMEbZECX5XQQn/qd4RloAXcBi9Kizf1ih5v533I+j1wX5vXmLOCdK2hPql8620GiofQHM++7YzGY3lYeVfz7psC1YipzPbvMuk0RTbmx8WpTHi1mQ0CtHWyRrljX5f3dH49cpL2aiWHOqlDvePSV3g5Q8FoKkfy9qOBuwRAJler80QP9RPU/M+Mk97JGUyAvMinkpIfTk5aCo0zWZvLZ3NWY16qumD7RBLKR+Kqo2/bMLe3GcOH+1gaoGHR/CW/Wy3bm4X8/cmu9CYJA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=fail (p=reject sp=none pct=100) action=oreject header.from=stackit.cloud; dkim=fail (body hash did not verify) header.d=stackit.cloud; arc=fail (47) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IL+DkiupKzxohoTA9oPfma0ULY/U4rTC1Zss3CWagfU=; b=b9xBuHplyETgoUzJdNrjyZOm6NJx6VtgP5Jy779JTTv+jJggaCcAmCeuBc+GxrmjhKFYogIswvXtFE+bNxxlPcYulRtT+B++AmO02zsM3Lh+AwRXQS9219ZJe7BFiuBoGeRZvOFz7SOXzWH6QMeXRyQEWxmxgEXAz0kYD0RadMX5+4AjgsJPqzcIH8eLn98lRA+k6HQkmq2LCXyrUR56AMljIPOnaEwxM+lcOI1qM8nusGhtClL/lW6+0nZA4q554aeXavItc+SdFlOciLM/vWB61I9/JXNwrjv9RoNIY60Z5nAhRiuHRA4+1rbhmIHGImcetLfDGAGrKyJLO92AxA== Received: from AM6PR08CA0029.eurprd08.prod.outlook.com (2603:10a6:20b:c0::17) by AS4PR10MB5624.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:4f2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:13 +0000 Received: from AM2PEPF0001C708.eurprd05.prod.outlook.com (2603:10a6:20b:c0:cafe::b5) by AM6PR08CA0029.outlook.office365.com (2603:10a6:20b:c0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:12 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=fail (body hash did not verify) header.d=stackit.cloud;dmarc=fail action=oreject header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM2PEPF0001C708.mail.protection.outlook.com (10.167.16.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:12 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:12 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 3735893 X-ExclaimerImprintLatency: 2206114 X-ExclaimerImprintAction: 7a2d0a00107445069a4a3f3dc1c987bf ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HYxiBgLzCDSge2POriKIB1TQ6zWzELTdj6m+qITURj2NuUwrwSClNAPqtbIi/shA5vqEE5s3blOPJ/I70sWCHyt2NFUB16zXTEFYJHyOPUI7SuJB0cuS0Ryyfk4iZLIg/IK7wY0B2kryONlM4FksG7/rejaKsmh4SDm03bSo4EPCtdXtM082hKUqrv5NbwH4cFhOxjeKlK/tKLNjn9nJtrVyNGxzLHOXNqSFnnCieBJCo7BILmVgzBMshq5GuvB9D3L3lLcsAcM01KcV3+GhfuGj6hMeF1PZoFZDylGlYhz2qJ8mnoYf1xcNU2SRlCKRPlzhRFzn3FEtSnCjBXNN8w== 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=ZzCT5WMxX2LSkGlBMPp7EMIC5Q8sb8rrRf745Q7R4r4=; b=Wu3yVKWt5Hq4TcKscChLP1Cnq4oIHGOa+mKRp6AAO26CMMDWsPJQtuaM8/uxwwLWNfLSMOzmUNT2ciDXAFivNAuRhsWVN8F+BI8PPygGgL/BxARwM1qffh/D0olOeLYwv4IQ4m1XbU6W35kklfJhnLtG7fOPyXdIyfXD8GAp8t6qO3EAGBm0+8M7gNF1LYHMooYVeQ1NlEL34V4kKTI4L7kLZ+KbB3vRY0+BsWiKbihwGfVqdYm4KnhA+t2GPkKfJvLIt9DLv4Snht5+UEDyUb7R1I2EK95fzEZ3Jx1Pm5/qinuKIP9x0XYypzLpr1qO/qXTdDmRrmV1aCLJ7NuGPg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZzCT5WMxX2LSkGlBMPp7EMIC5Q8sb8rrRf745Q7R4r4=; b=wkVBooDF7QXLUaXUdcqiFFJGT9KADPTN60GZYueou0dpMpBdvYYYAMlSh58n8Sg9MO5+EWum8uuXlgI4/l1h93kUtRnXQKdc7tXNr5dLGwqSG137VPlken8nxFdm9rI8aQQ+u7TFkM5BPjkYbstn1xLcGie3Kn+GIB+PiZTOh2JjuPtd53o2Ykc27EeleyphybBTHK00ZVgqSdgml5j+t0uL4zt5GYaa8X9edreVrA53PSev919INk2XEiyM7+jFBB92Uo8KsxjQlm1ZXF0Rz4WGwp9UOTzy9sh9Gb61CmMylHXZ9SUfywC03Uz0aLrEO0BcJHMzlH99TRJ9aoL6wg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:08 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:08 +0000 Date: Mon, 4 Nov 2024 12:04:06 +0100 To: dev@openvswitch.org Message-ID: <17499824d45b4f6cd34ed80b3b17db6afa69fc1e.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0108.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::11) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AM2PEPF0001C708:EE_|AS4PR10MB5624:EE_ X-MS-Office365-Filtering-Correlation-Id: 69f8f4bc-10e6-43ba-7277-08dcfcc06a6d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: =?utf-8?q?dalSw2GIaScKx2rx4ixQT0?= =?utf-8?q?98erVdNPTtwQ1EOVP7IDlEBdis+lUbSMexIWdkUK+SjfXEqLtrrt95wUwTT2JGiZL?= =?utf-8?q?ifANj/ndRJpUWmklt4lXOSxONbCJnYTmBEwS70ykdd/DFd1+sW+qjfnewCb/vvWyA?= =?utf-8?q?nXjLeTzMdHJ6X62m4OgzMimZhfK74biVt7NXO84m0rYuq5RQydRvIeawpBhsMFp5M?= =?utf-8?q?s1ixtngRvSrmH6V1AizfqiHrT0HBGaliBzVO/ibgUxboAFsXf5mtuJlXqWYRZPQlV?= =?utf-8?q?26PkfPy0nMFMZEpwTHnqslxz6lZWjUpcjcrO+HWeNB6G4iZ+z1tIVAZwIGmuvNt1p?= =?utf-8?q?nW17L1k+e/FgluyrlEKkiNgfbC0O9UV3iM3GAHpQGR+3+sh7gX6DRwtYuX+fxlM9p?= =?utf-8?q?NZcXhyH+LtfYsQjrCCQ4GF4ZlYtBORJeT2z+J3iLoJoqoTBcT41enZC6j86ZDmfxY?= =?utf-8?q?8udsDF8TgLSCkLDsWWGNw8U1oXxRvP/Z5pWDTZws7XUvu6x+TQx7lPW486X7GP8iS?= =?utf-8?q?oGUViTqwMAJbmUO9dZ7sM9UMnybY+w+XW4d7QBpngwtqF/u3wpM6aGEvVu9LYbFjl?= =?utf-8?q?L5YNDyEgpMtZAH7ngVp1S2T3Ly4sOnx6CUdtPnNpNONCm3RtBMWnfqgkxCHE9lMeZ?= =?utf-8?q?8LyXKWJsuOMhTgeXSXioH0uaAzSv+AzOmZddjHKWl658hgBKX+d40f3OPE9XF5UKY?= =?utf-8?q?zxZDDw3gsrFPw2JjERHpzfffSxfEhI2b59LYEzAagv/GH1PzSv0qwUTK1GlL5SKAy?= =?utf-8?q?IlqFDM/2xHKhrGVXH1LN2K3TGzgb5ROWkfygY/6+Y/3AZKkxFutjTnm6nzogtGLye?= =?utf-8?q?HDwiJpcpFPtd8x0vriyyzhTCPYDnU4Mr4oXtFcPXrGoS/cgHnGxzeMguI+ypNl+9E?= =?utf-8?q?E9dGjVHfbSWU8nKJ2Ds5gbJ7yrGzq/6y6a+bdw7DyMPNlY60GoL4maJY6/bBI0ygF?= =?utf-8?q?7dUhLYTx0rFI8nKV5x+Eq481plHQbvucof5bPpczzwB7nhB9e3ixAyO31jyYQdSSR?= =?utf-8?q?ijH+Xu8Hg2hussC/6niLg8+Sto67YLq/XEaTbOa8Guz7cjmjy0i5IMQ836uSxYN6z?= =?utf-8?q?RDgMrVOyS7aqpK6a4PuLaZd1HY1oRGELE5jup8f2+ViN75dQQp108ZBuhdGyQMg9a?= =?utf-8?q?FvE26g7vFOAcjdOtB3s56QWGKFjqZYLtx+ivqVBVXq/BGS9w7Qj3qOHx1YmGbOxz4?= =?utf-8?q?z4i6BnwlncojLV2vcFz+1w/3iQ+AZtSvkJf4msENg+VWZT1M95GamBOBGAnDzOQIZ?= =?utf-8?q?5Tvk9e+bv1ttkQIdaHzeSV?= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C708.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: bbcb00aa-95ef-42aa-b949-08dcfcc0676f X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|1800799024|36860700013|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?hLYmP2L/XBZRdGC9+thDfTgOg4cEMFN?= =?utf-8?q?GLrSrUAcv/rPdNBDoZTUm2EMOmlYfOufWkYh1Jx8gMzbuDXgVICUyZE/tFoJBXGOA?= =?utf-8?q?HmqiHgryviZBC/QAumQQxw2bu1NVaX2kGyAnJbL5Var6HRXtmpor1XJlCRRX6lusM?= =?utf-8?q?EF3uSwIH0lziL8Q0QoDbYjzpBKK0TiDs37qkGX25hB9jZeJ2VOUSBNru9gRy9fmRv?= =?utf-8?q?Ly8DKVWK6jrjzq21FBh3LDk4lv6D+HEvLoumHCrwG5Zl27quKZxjkMO3XLgc2d6Ww?= =?utf-8?q?tdCkR8loEY3BhzxXrI0oaQhFXkf7hayB/CIa7hP5I3ziJZd6qt81PA/ZG3txotHmX?= =?utf-8?q?7ExnNpUB6CtAH9NH34yTJgj2tiY0+l/fTr55j0dH9K/1LTNRKvUBodcTAneLuAkuY?= =?utf-8?q?9jQKXUakxGM3Sl37W4fXQJR3V2TbVP6++oEYmWoTfUXji84kDL9RM6T5fI5TM1hZU?= =?utf-8?q?7vwzhpCh73Lcnry5ZgFJ/gVs+PwHtOJF6AX2SnCTQPP9WFz97OXkvRt+QkpWkTdCu?= =?utf-8?q?pHBBryk8wh5b4O6P0zKaCMKRyd6I8OUb3UfPXVJdHL54HIczVelGIGJUYNzVxgRN6?= =?utf-8?q?jyTHW0EZpUX1hHNGRvGXsLsXkxn9dcuF2+BYAW82rThmzu4zvcsuqnan8KxkMTon/?= =?utf-8?q?zZAJNdzMQHMnQps4xhwzi89rNkRqtD/N3CyWBfs/EmUQnjPl0ZuHltDlodcNmGpYf?= =?utf-8?q?7o68KUekMjjKjSxy5tSKDwS8kW98givm2g4xkOG3U3Y83BxKrih4uTdLnNE8rh0kv?= =?utf-8?q?JsxEaNFRn8KWI05ik1GBgovTLzGFuoX3fUr7w+Jf53rFytgb0fGzuPDAuUXvDzxoU?= =?utf-8?q?nsbEsfOLAHDTUnxFhx8uRameiBRj9j8/UqHSd3uenQQ403Xi+N92l562BDNO0C506?= =?utf-8?q?YJv8sfdi1+tiSpTgOS1TQO1ANJK9G/id4Ss79SJlcUT2NSzE0bEfFBewFSPPAGE8l?= =?utf-8?q?4GAXXzae2vPzJ4OpraETmizKYlRDGOf9cU3j++IThvbdHF7GHdrio0MyI4pt/5ZAQ?= =?utf-8?q?AicsD3A2WO4RDfNRZpr5GfW2GcDdFLJNIPlZpUbNwE7iSOZu7FtVL57WMO93BP+BJ?= =?utf-8?q?lUkjPGxX/EsiWNKDurWF8oUsYxVo+4pxtw8eM34m4uKacp0h/JHVxDW0vj2vtrALw?= =?utf-8?q?G65e+eDMoy81nqm+r2IKTktozl1go+UmL1VzCev5Ny3uxJamI/nDCo9vRhs7cQet9?= =?utf-8?q?ll00Jk3C7mNh4yUWch30BoyZ9+a+D8OX8WU4uKj33j26TAlWAxxtmZ3VSaUis9Crf?= =?utf-8?q?KUiuy8dzcuUQe2XvxJ4UxUn59QBSS0Nt/7Nl9MyVTno9Lyc+NYyJkq7BDuILK7Psd?= =?utf-8?q?BM7Ar20xiiPLGnJD9Z6s5ZlUENZfgA2oPg=3D=3D?= X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(1800799024)(36860700013)(82310400026)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:12.6433 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 69f8f4bc-10e6-43ba-7277-08dcfcc06a6d X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C708.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB5624 Subject: [ovs-dev] [PATCH ovn v2 08/32] northd: Move connected routes to route engine. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" previously connected routes (so routes based on the networks of the LRPs) where handled separately from static routes. In order to later announce routes from ovn to the fabric we need to have a central overview over all routes we want to announce. This includes routes based on Logical_Router_Static_Routes as well as the networks on Logical_Router_Port. With this change the "routes" engine node will output a complete list of all routes in the system. This also serves as a future integration point to integrate routes learned from outside of OVN. Signed-off-by: Felix Huettner --- northd/northd.c | 270 ++++++++++++++++++++++++++++++------------------ northd/northd.h | 11 +- 2 files changed, 178 insertions(+), 103 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 1265e3c81..90ddc2acb 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -11071,6 +11071,20 @@ parsed_route_lookup(struct hmap *routes, size_t hash, continue; } + if (pr->source != new_pr->source) { + continue; + } + + if (!pr->nexthop != !new_pr->nexthop) { + continue; + } + + if (pr->nexthop && + memcmp(pr->nexthop, new_pr->nexthop, + sizeof(struct in6_addr))) { + continue; + } + if (memcmp(&pr->prefix, &new_pr->prefix, sizeof(struct in6_addr))) { continue; } @@ -11111,6 +11125,9 @@ parsed_route_lookup(struct hmap *routes, size_t hash, static void parsed_route_free(struct parsed_route *pr) { + if (pr->nexthop) { + free(pr->nexthop); + } if (pr->lrp_addr_s) { free(pr->lrp_addr_s); } @@ -11119,31 +11136,77 @@ parsed_route_free(struct parsed_route *pr) { } static void -parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, +parsed_route_add(const struct ovn_datapath *od, + struct in6_addr *nexthop, + const struct in6_addr prefix, + unsigned int plen, + bool is_discard_route, + const char *lrp_addr_s, + const struct ovn_port *out_port, + const struct nbrec_logical_router_static_route *route, + uint32_t route_table_id, + bool is_src_route, + bool ecmp_symmetric_reply, + enum route_source source, + struct hmap *routes) +{ + + struct parsed_route *new_pr = xzalloc(sizeof *new_pr); + new_pr->prefix = prefix; + new_pr->plen = plen; + new_pr->nexthop = nexthop; + new_pr->route_table_id = route_table_id; + new_pr->is_src_route = is_src_route; + new_pr->hash = route_hash(new_pr); + new_pr->nbr = od->nbr; + new_pr->ecmp_symmetric_reply = ecmp_symmetric_reply; + new_pr->is_discard_route = is_discard_route; + if (!is_discard_route) { + new_pr->lrp_addr_s = xstrdup(lrp_addr_s); + } + new_pr->out_port = out_port; + new_pr->source = source; + new_pr->route = route; + + size_t hash = uuid_hash(&od->key); + struct parsed_route *pr = parsed_route_lookup(routes, hash, new_pr); + if (!pr) { + hmap_insert(routes, &new_pr->key_node, hash); + } else { + pr->stale = false; + parsed_route_free(new_pr); + } +} + +static void +parsed_routes_add_static(struct ovn_datapath *od, const struct hmap *lr_ports, const struct nbrec_logical_router_static_route *route, const struct hmap *bfd_connections, struct hmap *routes, struct simap *route_tables, struct hmap *bfd_active_connections) { /* Verify that the next hop is an IP address with an all-ones mask. */ - struct in6_addr nexthop; + struct in6_addr *nexthop = NULL; unsigned int plen; bool is_discard_route = !strcmp(route->nexthop, "discard"); bool valid_nexthop = route->nexthop[0] && !is_discard_route; if (valid_nexthop) { - if (!ip46_parse_cidr(route->nexthop, &nexthop, &plen)) { + nexthop = xmalloc(sizeof(*nexthop)); + if (!ip46_parse_cidr(route->nexthop, nexthop, &plen)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); VLOG_WARN_RL(&rl, "bad 'nexthop' %s in static route " UUID_FMT, route->nexthop, UUID_ARGS(&route->header_.uuid)); + free(nexthop); return; } - if ((IN6_IS_ADDR_V4MAPPED(&nexthop) && plen != 32) || - (!IN6_IS_ADDR_V4MAPPED(&nexthop) && plen != 128)) { + if ((IN6_IS_ADDR_V4MAPPED(nexthop) && plen != 32) || + (!IN6_IS_ADDR_V4MAPPED(nexthop) && plen != 128)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); VLOG_WARN_RL(&rl, "bad next hop mask %s in static route " UUID_FMT, route->nexthop, UUID_ARGS(&route->header_.uuid)); + free(nexthop); return; } } @@ -11155,17 +11218,19 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, VLOG_WARN_RL(&rl, "bad 'ip_prefix' %s in static route " UUID_FMT, route->ip_prefix, UUID_ARGS(&route->header_.uuid)); + free(nexthop); return; } /* Verify that ip_prefix and nexthop have same address familiy. */ if (valid_nexthop) { - if (IN6_IS_ADDR_V4MAPPED(&prefix) != IN6_IS_ADDR_V4MAPPED(&nexthop)) { + if (IN6_IS_ADDR_V4MAPPED(&prefix) != IN6_IS_ADDR_V4MAPPED(nexthop)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); VLOG_WARN_RL(&rl, "Address family doesn't match between 'ip_prefix'" " %s and 'nexthop' %s in static route "UUID_FMT, route->ip_prefix, route->nexthop, UUID_ARGS(&route->header_.uuid)); + free(nexthop); return; } } @@ -11177,6 +11242,7 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, !find_static_route_outport(od, lr_ports, route, IN6_IS_ADDR_V4MAPPED(&prefix), &lrp_addr_s, &out_port)) { + free(nexthop); return; } @@ -11186,6 +11252,7 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, nb_bt->logical_port, nb_bt->dst_ip); if (!bfd_e) { + free(nexthop); return; } @@ -11205,36 +11272,58 @@ parsed_routes_add(struct ovn_datapath *od, const struct hmap *lr_ports, if (!strcmp(bfd_sr->status, "down")) { + free(nexthop); return; } } - struct parsed_route *new_pr = xzalloc(sizeof *new_pr); - new_pr->prefix = prefix; - new_pr->plen = plen; - new_pr->route_table_id = get_route_table_id(route_tables, - route->route_table); - new_pr->is_src_route = (route->policy && - !strcmp(route->policy, "src-ip")); - new_pr->hash = route_hash(new_pr); - new_pr->route = route; - new_pr->nbr = od->nbr; - new_pr->ecmp_symmetric_reply = smap_get_bool(&route->options, - "ecmp_symmetric_reply", - false); - new_pr->is_discard_route = is_discard_route; - if (!is_discard_route) { - new_pr->lrp_addr_s = xstrdup(lrp_addr_s); - } - new_pr->out_port = out_port; + uint32_t route_table_id = get_route_table_id(route_tables, + route->route_table); + bool is_src_route = (route->policy && !strcmp(route->policy, "src-ip")); + bool ecmp_symmetric_reply = smap_get_bool(&route->options, + "ecmp_symmetric_reply", + false); - size_t hash = uuid_hash(&od->key); - struct parsed_route *pr = parsed_route_lookup(routes, hash, new_pr); - if (!pr) { - hmap_insert(routes, &new_pr->key_node, hash); + enum route_source source; + if (!strcmp(smap_get_def(&route->options, "origin", ""), + ROUTE_ORIGIN_CONNECTED)) { + source = ROUTE_SOURCE_CONNECTED; } else { - pr->stale = false; - parsed_route_free(new_pr); + source = ROUTE_SOURCE_STATIC; + } + + parsed_route_add(od, nexthop, prefix, plen, is_discard_route, lrp_addr_s, + out_port, route, route_table_id, is_src_route, + ecmp_symmetric_reply, source, + routes); +} + +static void +parsed_routes_add_connected(struct ovn_datapath *od, const struct ovn_port *op, + struct hmap *routes) +{ + for (int i = 0; i < op->lrp_networks.n_ipv4_addrs; i++) { + const struct ipv4_netaddr *addr = &op->lrp_networks.ipv4_addrs[i]; + struct in6_addr prefix; + ip46_parse(addr->network_s, &prefix); + + parsed_route_add(od, NULL, prefix, addr->plen, + false, addr->addr_s, op, + NULL, 0, false, + false, ROUTE_SOURCE_CONNECTED, + routes); + } + + for (int i = 0; i < op->lrp_networks.n_ipv6_addrs; i++) { + const struct ipv6_netaddr *addr = &op->lrp_networks.ipv6_addrs[i]; + struct in6_addr prefix; + ip46_parse(addr->network_s, &prefix); + + parsed_route_add(od, NULL, prefix, addr->plen, + false, addr->addr_s, op, + NULL, 0, false, + false, ROUTE_SOURCE_CONNECTED, + routes); } } @@ -11252,9 +11341,14 @@ build_parsed_routes(struct ovn_datapath *od, const struct hmap *lr_ports, } for (int i = 0; i < od->nbr->n_static_routes; i++) { - parsed_routes_add(od, lr_ports, od->nbr->static_routes[i], - bfd_connections, routes, route_tables, - bfd_active_connections); + parsed_routes_add_static(od, lr_ports, od->nbr->static_routes[i], + bfd_connections, routes, route_tables, + bfd_active_connections); + } + + const struct ovn_port *op; + HMAP_FOR_EACH (op, dp_node, &od->ports) { + parsed_routes_add_connected(od, op, routes); } HMAP_FOR_EACH_SAFE (pr, key_node, routes) { @@ -11279,7 +11373,7 @@ struct ecmp_groups_node { struct in6_addr prefix; unsigned int plen; bool is_src_route; - const char *origin; + enum route_source source; uint32_t route_table_id; uint16_t route_count; struct ovs_list route_list; /* Contains ecmp_route_list_node */ @@ -11318,7 +11412,7 @@ ecmp_groups_add(struct hmap *ecmp_groups, eg->prefix = route->prefix; eg->plen = route->plen; eg->is_src_route = route->is_src_route; - eg->origin = smap_get_def(&route->route->options, "origin", ""); + eg->source = route->source; eg->route_table_id = route->route_table_id; ovs_list_init(&eg->route_list); ecmp_groups_add_route(eg, route); @@ -11382,6 +11476,7 @@ unique_routes_remove(struct hmap *unique_routes, if (ipv6_addr_equals(&route->prefix, &ur->route->prefix) && route->plen == ur->route->plen && route->is_src_route == ur->route->is_src_route && + route->source == ur->route->source && route->route_table_id == ur->route->route_table_id) { hmap_remove(unique_routes, &ur->hmap_node); const struct parsed_route *existed_route = ur->route; @@ -11515,7 +11610,7 @@ static void add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, struct ovn_datapath *od, const char *port_ip, - struct ovn_port *out_port, + const struct ovn_port *out_port, const struct parsed_route *route, struct ds *route_match, struct lflow_ref *lflow_ref) @@ -11609,6 +11704,19 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, ds_destroy(&ecmp_reply); } +static int +route_source_to_offset(enum route_source source) +{ + switch (source) { + case ROUTE_SOURCE_CONNECTED: + return ROUTE_PRIO_OFFSET_CONNECTED; + case ROUTE_SOURCE_STATIC: + return ROUTE_PRIO_OFFSET_STATIC; + default: + OVS_NOT_REACHED(); + } +} + static void build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, struct ecmp_groups_node *eg, struct lflow_ref *lflow_ref) @@ -11620,8 +11728,7 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, struct ds route_match = DS_EMPTY_INITIALIZER; char *prefix_s = build_route_prefix_s(&eg->prefix, eg->plen); - int ofs = !strcmp(eg->origin, ROUTE_ORIGIN_CONNECTED) ? - ROUTE_PRIO_OFFSET_CONNECTED: ROUTE_PRIO_OFFSET_STATIC; + int ofs = route_source_to_offset(eg->source); build_route_match(NULL, eg->route_table_id, prefix_s, eg->plen, eg->is_src_route, is_ipv4, &route_match, &priority, ofs); free(prefix_s); @@ -11675,13 +11782,14 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, REG_ECMP_MEMBER_ID" == %"PRIu16, eg->id, er->id); ds_clear(&actions); - ds_put_format(&actions, "%s = %s; " + ds_put_format(&actions, "%s = ", + is_ipv4 ? REG_NEXT_HOP_IPV4 : REG_NEXT_HOP_IPV6); + ipv6_format_mapped(route_->nexthop, &actions); + ds_put_format(&actions, "; " "%s = %s; " "eth.src = %s; " "outport = %s; " "next;", - is_ipv4 ? REG_NEXT_HOP_IPV4 : REG_NEXT_HOP_IPV6, - route->nexthop, is_ipv4 ? REG_SRC_IPV4 : REG_SRC_IPV6, route_->lrp_addr_s, route_->out_port->lrp_networks.ea_s, @@ -11699,17 +11807,19 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, static void add_route(struct lflow_table *lflows, struct ovn_datapath *od, const struct ovn_port *op, const char *lrp_addr_s, - const char *network_s, int plen, const char *gateway, + const char *network_s, int plen, const struct in6_addr *gateway, bool is_src_route, const uint32_t rtb_id, const struct sset *bfd_ports, const struct ovsdb_idl_row *stage_hint, bool is_discard_route, - int ofs, struct lflow_ref *lflow_ref) + enum route_source source, struct lflow_ref *lflow_ref) { bool is_ipv4 = strchr(network_s, '.') ? true : false; struct ds match = DS_EMPTY_INITIALIZER; uint16_t priority; const struct ovn_port *op_inport = NULL; + int ofs = route_source_to_offset(source); + /* IPv6 link-local addresses must be scoped to the local router port. */ if (!is_ipv4) { struct in6_addr network; @@ -11728,8 +11838,8 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, } else { ds_put_format(&common_actions, REG_ECMP_GROUP_ID" = 0; %s = ", is_ipv4 ? REG_NEXT_HOP_IPV4 : REG_NEXT_HOP_IPV6); - if (gateway && gateway[0]) { - ds_put_cstr(&common_actions, gateway); + if (gateway) { + ipv6_format_mapped(gateway, &common_actions); } else { ds_put_format(&common_actions, "ip%s.dst", is_ipv4 ? "4" : "6"); } @@ -11764,23 +11874,20 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, } static void -build_static_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, +build_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, const struct parsed_route *route_, const struct sset *bfd_ports, struct lflow_ref *lflow_ref) { const struct nbrec_logical_router_static_route *route = route_->route; - int ofs = !strcmp(smap_get_def(&route->options, "origin", ""), - ROUTE_ORIGIN_CONNECTED) ? ROUTE_PRIO_OFFSET_CONNECTED - : ROUTE_PRIO_OFFSET_STATIC; - char *prefix_s = build_route_prefix_s(&route_->prefix, route_->plen); add_route(lflows, route_->is_discard_route ? od : route_->out_port->od, route_->out_port, route_->lrp_addr_s, prefix_s, - route_->plen, route->nexthop, route_->is_src_route, - route_->route_table_id, bfd_ports, &route->header_, - route_->is_discard_route, ofs, lflow_ref); + route_->plen, route_->nexthop, route_->is_src_route, + route_->route_table_id, bfd_ports, + route ? &route->header_ : &route_->out_port->nbrp->header_, + route_->is_discard_route, route_->source, lflow_ref); free(prefix_s); } @@ -13509,51 +13616,8 @@ build_ip_routing_pre_flows_for_lrouter(struct ovn_datapath *od, REG_ROUTE_TABLE_ID" = 0; next;", lflow_ref); } -/* Logical router ingress table IP_ROUTING : IP Routing. - * - * A packet that arrives at this table is an IP packet that should be - * routed to the address in 'ip[46].dst'. - * - * For regular routes without ECMP, table IP_ROUTING sets outport to the - * correct output port, eth.src to the output port's MAC address, and - * REG_NEXT_HOP_IPV4/REG_NEXT_HOP_IPV6 to the next-hop IP address - * (leaving 'ip[46].dst', the packet’s final destination, unchanged), and - * advances to the next table. - * - * For ECMP routes, i.e. multiple routes with same policy and prefix, table - * IP_ROUTING remembers ECMP group id and selects a member id, and advances - * to table IP_ROUTING_ECMP, which sets outport, eth.src and - * REG_NEXT_HOP_IPV4/REG_NEXT_HOP_IPV6 for the selected ECMP member. - * - * This function adds routes for directly connected subnets configured on the - * LRP 'op'. - */ static void -build_ip_routing_flows_for_lrp(struct ovn_port *op, - const struct sset *bfd_ports, - struct lflow_table *lflows, - struct lflow_ref *lflow_ref) -{ - ovs_assert(op->nbrp); - for (int i = 0; i < op->lrp_networks.n_ipv4_addrs; i++) { - add_route(lflows, op->od, op, op->lrp_networks.ipv4_addrs[i].addr_s, - op->lrp_networks.ipv4_addrs[i].network_s, - op->lrp_networks.ipv4_addrs[i].plen, NULL, false, 0, - bfd_ports, &op->nbrp->header_, false, - ROUTE_PRIO_OFFSET_CONNECTED, lflow_ref); - } - - for (int i = 0; i < op->lrp_networks.n_ipv6_addrs; i++) { - add_route(lflows, op->od, op, op->lrp_networks.ipv6_addrs[i].addr_s, - op->lrp_networks.ipv6_addrs[i].network_s, - op->lrp_networks.ipv6_addrs[i].plen, NULL, false, 0, - bfd_ports, &op->nbrp->header_, false, - ROUTE_PRIO_OFFSET_CONNECTED, lflow_ref); - } -} - -static void -build_static_route_flows_for_lrouter( +build_route_flows_for_lrouter( struct ovn_datapath *od, struct lflow_table *lflows, struct hmap *parsed_routes, struct simap *route_tables, const struct sset *bfd_ports, @@ -13580,6 +13644,10 @@ build_static_route_flows_for_lrouter( struct parsed_route *route; HMAP_FOR_EACH_WITH_HASH (route, key_node, uuid_hash(&od->key), parsed_routes) { + if (route->source == ROUTE_SOURCE_CONNECTED) { + unique_routes_add(&unique_routes, route); + continue; + } group = ecmp_groups_find(&ecmp_groups, route); if (group) { ecmp_groups_add_route(group, route); @@ -13608,7 +13676,7 @@ build_static_route_flows_for_lrouter( } const struct unique_routes_node *ur; HMAP_FOR_EACH (ur, hmap_node, &unique_routes) { - build_static_route_flow(lflows, od, ur->route, + build_route_flow(lflows, od, ur->route, bfd_ports, lflow_ref); } ecmp_groups_destroy(&ecmp_groups); @@ -16852,7 +16920,7 @@ build_routable_flows_for_router_port( laddrs->ipv4_addrs[k].network_s, laddrs->ipv4_addrs[k].plen, NULL, false, 0, bfd_ports, &router_port->nbrp->header_, - false, ROUTE_PRIO_OFFSET_CONNECTED, + false, ROUTE_SOURCE_CONNECTED, lrp->stateful_lflow_ref); } } @@ -17094,7 +17162,7 @@ build_lswitch_and_lrouter_iterate_by_lr(struct ovn_datapath *od, lsi->meter_groups, NULL); build_ND_RA_flows_for_lrouter(od, lsi->lflows, NULL); build_ip_routing_pre_flows_for_lrouter(od, lsi->lflows, NULL); - build_static_route_flows_for_lrouter(od, lsi->lflows, + build_route_flows_for_lrouter(od, lsi->lflows, lsi->parsed_routes, lsi->route_tables, lsi->bfd_ports, NULL); build_mcast_lookup_flows_for_lrouter(od, lsi->lflows, &lsi->match, @@ -17167,8 +17235,6 @@ build_lswitch_and_lrouter_iterate_by_lrp(struct ovn_port *op, &lsi->actions, op->lflow_ref); build_neigh_learning_flows_for_lrouter_port(op, lsi->lflows, &lsi->match, &lsi->actions, op->lflow_ref); - build_ip_routing_flows_for_lrp(op, lsi->bfd_ports, - lsi->lflows, op->lflow_ref); build_ND_RA_flows_for_lrouter_port(op, lsi->lflows, &lsi->match, &lsi->actions, lsi->meter_groups, op->lflow_ref); diff --git a/northd/northd.h b/northd/northd.h index f701abd45..eb669f734 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -696,10 +696,18 @@ struct ovn_port { struct lflow_ref *stateful_lflow_ref; }; +enum route_source { + /* the route is directly connected to the logical router */ + ROUTE_SOURCE_CONNECTED, + /* the route is derived from a northbound static route entry */ + ROUTE_SOURCE_STATIC, +}; + struct parsed_route { struct hmap_node key_node; struct in6_addr prefix; unsigned int plen; + struct in6_addr *nexthop; /* NULL for ROUTE_SOURCE_CONNECTED */ bool is_src_route; uint32_t route_table_id; uint32_t hash; @@ -708,8 +716,9 @@ struct parsed_route { bool is_discard_route; const struct nbrec_logical_router *nbr; bool stale; + enum route_source source; char *lrp_addr_s; - struct ovn_port *out_port; + const struct ovn_port *out_port; }; void ovnnb_db_run(struct northd_input *input_data, From patchwork Mon Nov 4 11:04:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006166 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr; 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 4XhpWy74HWz1xyH for ; Mon, 4 Nov 2024 22:04:44 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 1CF38607C8; Mon, 4 Nov 2024 11:04:42 +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 IXpAU7fBxgUF; Mon, 4 Nov 2024 11:04:34 +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 C72AC607D0 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id C72AC607D0; Mon, 4 Nov 2024 11:04:33 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8CB92C08A6; Mon, 4 Nov 2024 11:04:33 +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 2B443C08BD for ; Mon, 4 Nov 2024 11:04:32 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 04A8B405D1 for ; Mon, 4 Nov 2024 11:04:19 +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 bEzLkGs5sLWE for ; Mon, 4 Nov 2024 11:04:17 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2612::617; helo=eur05-am6-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org CD126405E8 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org CD126405E8 Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=k5U93CLr Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20617.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::617]) by smtp2.osuosl.org (Postfix) with ESMTPS id CD126405E8 for ; Mon, 4 Nov 2024 11:04:16 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=NNZ0eShS6yrhODZpALgaQF5+9t0eTlnC4H2ZQoACo6DDLaf+PgG+PxjZWzLsVLP1RYyNgrqddQPlCY6RNNHcHNm2LYUojAFQiMvepxdywsGxKoB1ImgM1aRGJJgWxeJYXrWoraz0R6fhX+CCU9S2twJvdToODY5a8gA7uUhdVbWdY/YkE8YEISwaqs6KLsSfDgQQBZreSs/VZTlXTWmwqojibN+mKNZf6ebtZnNm5IyRnl/+WRcNmJwvMLIPhq9RIDQMPuw+KNumNdl5i5VllhK7vP4t/pWupAH8fRRfv4jRPj5Kz+OoCXXG8Ie65I9GRTTE3sqkOnT3M1pXbVIw7A== ARC-Message-Signature: i=2; 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=4nCBWZvdJoyyOKYyc7eX5MKRoSp3MEaJvV9YIAjQXDY=; b=W1wj7rFH4+1fchAoKXJ6XFJUL2/LX7IVjlMX5ibRGln/AtqGf6f/yCrJio01cz9T9ercfgwcf0e1YUb7WGPCnJ7mGI0JkgrvSwFUYGZsPnfQBJTqozB7Xo3RVaToEZnq5g0YRHrWx6Eb2WN4I6uTuZb6yDcy/R9t6Vyr358ybRec8ggc+gYPcQjOtR2IjVZTVAO5kDEq3A9yHuOTDYpVSBLzIUlCZnXSyP111YidHShuc9Rc88bGMOdxtbwDiwQjfAZPqFPL+Xqr281lab/g8vCS4cwuAW0gZqGrXBa5/ZOoSM2+c3SDkelrJQFE8IKzsk3DUrf6D7o0EMLB9H8NMQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4nCBWZvdJoyyOKYyc7eX5MKRoSp3MEaJvV9YIAjQXDY=; b=k5U93CLryq/LZqEiSDyZbefl9V/37N2YjiSKLM/K69qz9zYijCv1MDOpQR2cLXiMp+nnEujtvbDAtshEP+GIMcoDsCxwHKOgIG7tCUFicrer9pDVNncW4XnCEOJzJcUiCqK7p73vHZXx0iS8vxTx9cgFjk8pgnymuVRCiD+kja5c/1SZjJQuHD/ECdSn77m0FI9BLsR/GTFVv/HD9wcaAQa5gT5szfcczpwQb9FlQuHJQJ7xOMr63G1WwRnPmFykce6rIQTkezIT8K5yROqAeMYnVUUpADK6dQqdAGYNN4qTEBH/OaWoIPm6UPEleBcFt+2eOl0kaQ2werTw56d+3A== Received: from AS4P189CA0017.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5db::7) by DU0PR10MB7026.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:41d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20; Mon, 4 Nov 2024 11:04:13 +0000 Received: from AM4PEPF00025F97.EURPRD83.prod.outlook.com (2603:10a6:20b:5db:cafe::6e) by AS4P189CA0017.outlook.office365.com (2603:10a6:20b:5db::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:13 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM4PEPF00025F97.mail.protection.outlook.com (10.167.16.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.0 via Frontend Transport; Mon, 4 Nov 2024 11:04:13 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:13 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4616583 X-ExclaimerImprintLatency: 2556787 X-ExclaimerImprintAction: a8eaf4c07e984931a0358a141357116c ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jeFmC8H3/imhX0BLclmz7SqcQSIAzwOXnjqOpF+9YbgZftkxF0FEhgAN/Y0J9pVeuiJWZDlSMN5xhNUOOmy2ZMIXgQXB5wgKJdjbw/EQMNrUIs/n0qr54yUkcVgvfEKyd8LYa04dv93M9o5SNiuiifM94/k2OB9DgL81nHg80yk36QCnw2U4vudgY10zUhSchdwSSpQg3QcEoIwsnGdk202YOR2WbDoiQPTNQ6vPr0M5Or6PahWNqJa12gW891aNhRL5kVpVdlgMewxAdz1PG9CaTz0KIpFw6iDbseYB38gFbbsDU7HJiRARU9k+v38fmgH7LUW7vFoo0Nv6j3lKbA== 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=4nCBWZvdJoyyOKYyc7eX5MKRoSp3MEaJvV9YIAjQXDY=; b=BWnRZFjCajTJCpWlFlcv1AUgwx6ZP8zx85l0tRjHRYqb5yoWfReoDVUL4mv9o7zWh8Fls3cC9k7phGES9R1T/C7aaYTDBflxmfkSsZ7WfglBVeHHBMCHfn3vpoTUEhOueJ+RbXtP007Y5RF1HtU33FTpvRLNeQpDSCYThSKRP+vQh1EOl/CGQUvOiFuZjmxlo/uN5jgjukPUweyUcGkerNUd8Is3MzVAFMvxbZgsCmGB+ayWnTe+t1bvoAiK43SK2PM0/OrdmX0uiHaISXvHOGp6TqG72Hmm49637JqWbIw7u8ioVvxAszpo0SaNDwdxQhGMj+FLJQ2/6caGyV4BMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4nCBWZvdJoyyOKYyc7eX5MKRoSp3MEaJvV9YIAjQXDY=; b=k5U93CLryq/LZqEiSDyZbefl9V/37N2YjiSKLM/K69qz9zYijCv1MDOpQR2cLXiMp+nnEujtvbDAtshEP+GIMcoDsCxwHKOgIG7tCUFicrer9pDVNncW4XnCEOJzJcUiCqK7p73vHZXx0iS8vxTx9cgFjk8pgnymuVRCiD+kja5c/1SZjJQuHD/ECdSn77m0FI9BLsR/GTFVv/HD9wcaAQa5gT5szfcczpwQb9FlQuHJQJ7xOMr63G1WwRnPmFykce6rIQTkezIT8K5yROqAeMYnVUUpADK6dQqdAGYNN4qTEBH/OaWoIPm6UPEleBcFt+2eOl0kaQ2werTw56d+3A== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:10 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:10 +0000 Date: Mon, 4 Nov 2024 12:04:08 +0100 To: dev@openvswitch.org Message-ID: <1d5c82763560092ea1b07ec64df00533e602bbd3.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0108.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::11) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AM4PEPF00025F97:EE_|DU0PR10MB7026:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ad5d242-d351-44e1-8e62-08dcfcc06ae3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: rYjuYnVvvMJVKIxJcL4JUsDRQQ6N0Qo+hFa98bLOQRLYNO2jfx/Lsp/sy7YzXtxmUooBWTu9wXCvkDQtVvUhNvoj43+RdurshZcWi4OAmUV3IgAcyVBtecViAwxqdSRyOJUJHFrwiLLkweerwicUGJUDSf7pR2zCRivSHjGsqC9tizttAes2Xs2EPrrxITEoy9e+b+dcKO4PtypAyJz8zghg+StD+RG6vH0EtP8M+MEYFaMYpnfxy15h4bQoq+1hrm1SlePBMRC420ST3V594KrbLJGSuNbmjL3xBwAdO5E69EpOgAA3D2e5bePyFLYo1IoVPtQ7xIKqFpgkyqyS3ngyNt0ggJSTnmD9Sf3TF9VCmtU5K8TbnzRwlJW9hBNUkDZDxREfWlLzTeSwXdW/nmWJiJi5c526WmBXZAoZV1bhbGX93y5XoSH2fyDgBOo/lIJivIQtBSLOD7oWe1G1irBnWlX70T3dL49qK6Qry+0OH1yKHAwXkm/PD0mFYPPAAYxopVxfhHY6j13qMDiyOjfboxkYu0EAUVCg1ev/+Thm8yCr2TDZJOhBials5+/VDTe0zylDrFUeaUbTK7xsXK/qgQ5pBOyWhTAi+5CQMxDihZkH4hNjL+7Frj6ov4rLLJ2FlS4r8GGgJdgkWSaLLUy+iLevJUp2q9EpLzMCQADclFB3lhi8x53/Hskbr7RNrcDl93c+bhirIu4SHyZR7Jc3RlAt5rB28CVtsNwf4i6b0EA5zUFZIV0+KvmvQs7nrzk2XXm+UN1bvnwYkpB7mkv37ntiUB2AzTUAF+ljUnjTfxzT0fK533yjlQ5xPhwxXYq42wyMmvR2WovzDZ4EhTG1Therk11MAIp8ho8Pw+XbQ2rEQAvnJZsz9cFch7S+fw909+UHToT1ZuY3bTRIcC6hYKtwPzOOPp7inn4SgnT+OE+kbkIxZDvSFa619IOy0Vagj84EXKu1cvJ5mbt6+U8xIx0EWCp8IKYiF2/Y4h2DrwOmA8L3rN7kO3MNhbfrwJxFn8S6C8eNwP+I4/YS0IPqkW+BeFdgan9woGSFCMBfzr7Uvu1EXgljZcsyI71jT48swKU7yVdRWj73KBsUoAc4IM+47MEokYH0AK6iW6tTHW7u7jhrC24Ntsj9OFdszpiXc60ScappxTUWapxgTH8ktHBw3UWI7eeXwhuloZXBerSo494js4MuBKzIkU+9/FYlgGJP8U9B0ic/6l8ko9kaDRLfDv1cfA37DZENNkGKpi8aidiVm2iE7UTOKdYQmCyCR8rTnObgmX86EOTppi/SQw1O8vsgllkt0mWVxqM= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00025F97.EURPRD83.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9e6aea22-f869-4922-835e-08dcfcc068a2 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|14060799003|35042699022|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: 0jOkiPG6zQZWJgzS9Thyc9a/vQEvQ2Ps9wIRsYB+y/l9NMjJ7hsEjPxp/eufSh5bl/b4vJI8ZvqL0XRPeZfRJT4aPleeSZzwx3pmfpqCqakxsM4Pw+nr+V2V4hFra//oQCmmM2xIW0AIEV0cuC+pW7KMoSVGJZtG0JEnv+ZOAtYQSDYwn7CKJlRg9dn4PLv59yWLjsN1FiQ9F60oU4/0ZdsasdxdsLOmtu5Yu5/eH9rCWOXB8olFE/+fS0o2+h2ODMrWnjZQ6Muh4r9aBEUwIiUjnkAOMv5O3f28i6X97V12VL1rGPUZp7LqGRLDN7lRKYCRV66FJ9W7TK9HD3Ai3KPsBG0v1o/jc7aerduqhRdUxs8d8zVtz796/hF/KMlMRjmco2DvkKWGZQAauA6f4HRO0vwIIhOigl/iwL5dOF42DpJg8KusifWIL/6oSdz/ETgkV4wzJfgxpHE2jcSkPCfYSnTXkmr0uEU1ZpHLb64ewA34v8/Dhc05yXkRL0fyRxwrV1P7XZKh8yC7/POt19D55VfxJEXthDnNzbFllyLH7yUJfFbkK8HZz1kHCjn5Sj3xyZNAJJLRJmE2hg+8Wh8QJQdOyzWYl+gxW8Fw61C2QsziEEHuEsgGrAaLoAnZ1jlIpFB/m3qKtbL/J6yAhous+QldilkX/jsKaSscOp5051nG5kmisQXPb3motdoz7gMC3dscPgljMciYZl/DRls518hngo2ZMmI90yvCErP5yMvbcl48o+28uDWXscKJUq2LDdUT2fuTaT0vX3XYjHkw5qUYUVhpcDYVSWHEmk53eXRp64LZ+xR1GI7joxaJ+PyXPE0V8zg2SeTXhOGha3WzU6tweKJfDQbnEvGf85+Z9oTsFaJT3o8QGMr7KWU7jTX3aVdvBL/Og6GjRe5rrlwo42h5TRKbeVuyv13rgnexS+ynf4s0cXldgZt9Angm46qviVic0BnQLRWWbwVXpNs1hUfne+F6Hfp1iNBd+qnivNStw6AspbpZe35WN3eMqrKCmeIj9Nsj5bVXYDS+nQXiFikTVEAHJjn7UrcamMlO20sYomO3u24F3ji/xCo/Z78EvBEZL7f/FrIuCGi7UK4P+g9lAZAhBxIhh1Kic3BD3d75F6FnX4psekrwGqO/0llej+Gsm9bbT6JS7ac34lbSfYukBFSMAtQyxNzQWzSMJypbq6/tJdFmBubmOQWW8zsLesU8HIyYliUs9PlROLU7pze4GctfurhAJ5JqYsPtmRXspujRgjTIosNM7uoUtXjA30nOZQwKS30Y2ejGdknmiqLGJhQPcYeLxed6qlxkBW6Tc55icQfPdsRKQIyI16niuJy4dtD9xsaPZBB6snhoVUCcBLTVzDTKqu2lFW9lBBprRZMdKGRernUZzDGy9NcaUb4ry1Fvy3otvq1VWA== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(14060799003)(35042699022)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:13.3548 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1ad5d242-d351-44e1-8e62-08dcfcc06ae3 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00025F97.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR10MB7026 Subject: [ovs-dev] [PATCH ovn v2 09/32] northd: Autodiscover centralize_routing. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" There is no need to set this manually. In all cases where a user would set option:centralize_routing they would not work without this setting. Therefor we enable it automatically. Signed-off-by: Felix Huettner --- northd/northd.c | 3 +-- tests/ovn-northd.at | 48 ++------------------------------------------- 2 files changed, 3 insertions(+), 48 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 90ddc2acb..7a8148b13 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -2329,7 +2329,6 @@ create_cr_port(struct ovn_port *op, struct hmap *ports, * Chassis resident port needs to be created if the following * conditionsd are met: * - op is a distributed gateway port - * - op has the option 'centralize_routing' set to true * - op is the only distributed gateway port attached to its * router * - op's peer logical switch has no localnet ports. @@ -2340,7 +2339,7 @@ peer_needs_cr_port_creation(struct ovn_port *op) if ((op->nbrp->n_gateway_chassis || op->nbrp->ha_chassis_group) && op->od->n_l3dgw_ports == 1 && op->peer && op->peer->nbsp && !op->peer->od->n_localnet_ports) { - return smap_get_bool(&op->nbrp->options, "centralize_routing", false); + return true; } return false; diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index 63fcf3f71..4588a65c6 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -13675,52 +13675,8 @@ check_flows_no_cr_port_for_public_lr0 # Remove the localnet port from public logical switch. check ovn-nbctl --wait=sb lsp-set-type ln-public "" -# Check that the lflows are as expected and there is no cr port -# created for "public-lr0" when public has no localnet port -# since public doesn't have the option "overlay_provider_network=true" -# set. -check_row_count Port_Binding 0 logical_port=cr-public-lr0 - -ovn-sbctl dump-flows lr0 > lr0flows -ovn-sbctl dump-flows public > publicflows - -AT_CHECK([grep -e "172.168.0.110" -e "172.168.0.120" -e "10.0.0.3" -e "20.0.0.3" -e "30:54:00:00:00:03" -e "sw0-port1" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_admission ), priority=50 , match=(eth.dst == 30:54:00:00:00:03 && inport == "lr0-public" && is_chassis_resident("sw0-port1")), action=(xreg0[[0..47]] = 00:00:00:00:ff:02; next;) - table=??(lr_in_arp_resolve ), priority=100 , match=(outport == "lr0-public" && reg0 == 172.168.0.110), action=(eth.dst = 30:54:00:00:00:03; next;) - table=??(lr_in_arp_resolve ), priority=100 , match=(outport == "lr0-public" && reg0 == 172.168.0.120), action=(eth.dst = 00:00:00:00:ff:02; next;) - table=??(lr_in_arp_resolve ), priority=150 , match=(inport == "lr0-public" && outport == "lr0-public" && ip4.dst == 172.168.0.110), action=(drop;) - table=??(lr_in_arp_resolve ), priority=150 , match=(inport == "lr0-public" && outport == "lr0-public" && ip4.dst == 172.168.0.120), action=(drop;) - table=??(lr_in_dnat ), priority=100 , match=(ip && ip4.dst == 172.168.0.110 && inport == "lr0-public"), action=(ct_dnat(10.0.0.3);) - table=??(lr_in_dnat ), priority=100 , match=(ip && ip4.dst == 172.168.0.120 && inport == "lr0-public" && is_chassis_resident("cr-lr0-public")), action=(ct_dnat(20.0.0.3);) - table=??(lr_in_gw_redirect ), priority=100 , match=(ip4.src == 10.0.0.3 && outport == "lr0-public" && is_chassis_resident("sw0-port1")), action=(eth.src = 30:54:00:00:00:03; reg1 = 172.168.0.110; next;) - table=??(lr_in_ip_input ), priority=90 , match=(arp.op == 1 && arp.tpa == 172.168.0.110), action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;) - table=??(lr_in_ip_input ), priority=90 , match=(arp.op == 1 && arp.tpa == 172.168.0.120), action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;) - table=??(lr_in_ip_input ), priority=91 , match=(inport == "lr0-public" && arp.op == 1 && arp.tpa == 172.168.0.110), action=(drop;) - table=??(lr_in_ip_input ), priority=91 , match=(inport == "lr0-public" && arp.op == 1 && arp.tpa == 172.168.0.120), action=(drop;) - table=??(lr_in_ip_input ), priority=92 , match=(inport == "lr0-public" && arp.op == 1 && arp.tpa == 172.168.0.110 && is_chassis_resident("sw0-port1")), action=(eth.dst = eth.src; eth.src = 30:54:00:00:00:03; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = 30:54:00:00:00:03; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;) - table=??(lr_in_ip_input ), priority=92 , match=(inport == "lr0-public" && arp.op == 1 && arp.tpa == 172.168.0.120 && is_chassis_resident("cr-lr0-public")), action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;) - table=??(lr_in_unsnat ), priority=100 , match=(ip && ip4.dst == 172.168.0.110 && inport == "lr0-public"), action=(ct_snat;) - table=??(lr_in_unsnat ), priority=100 , match=(ip && ip4.dst == 172.168.0.120 && inport == "lr0-public" && is_chassis_resident("cr-lr0-public")), action=(ct_snat;) - table=??(lr_out_egr_loop ), priority=100 , match=(ip4.dst == 172.168.0.110 && outport == "lr0-public" && is_chassis_resident("sw0-port1")), action=(clone { ct_clear; inport = outport; outport = ""; eth.dst <-> eth.src; flags = 0; flags.loopback = 1; reg0 = 0; reg1 = 0; reg2 = 0; reg3 = 0; reg4 = 0; reg5 = 0; reg6 = 0; reg7 = 0; reg8 = 0; reg9 = 0; reg9[[0]] = 1; next(pipeline=ingress, table=??); };) - table=??(lr_out_egr_loop ), priority=100 , match=(ip4.dst == 172.168.0.120 && outport == "lr0-public" && is_chassis_resident("cr-lr0-public")), action=(clone { ct_clear; inport = outport; outport = ""; eth.dst <-> eth.src; flags = 0; flags.loopback = 1; reg0 = 0; reg1 = 0; reg2 = 0; reg3 = 0; reg4 = 0; reg5 = 0; reg6 = 0; reg7 = 0; reg8 = 0; reg9 = 0; reg9[[0]] = 1; next(pipeline=ingress, table=??); };) - table=??(lr_out_snat ), priority=161 , match=(ip && ip4.src == 10.0.0.3 && outport == "lr0-public" && is_chassis_resident("sw0-port1") && (!ct.trk || !ct.rpl)), action=(eth.src = 30:54:00:00:00:03; ct_snat(172.168.0.110);) - table=??(lr_out_snat ), priority=161 , match=(ip && ip4.src == 20.0.0.3 && outport == "lr0-public" && is_chassis_resident("cr-lr0-public") && (!ct.trk || !ct.rpl)), action=(ct_snat(172.168.0.120);) - table=??(lr_out_undnat ), priority=100 , match=(ip && ip4.src == 10.0.0.3 && outport == "lr0-public"), action=(eth.src = 30:54:00:00:00:03; ct_dnat;) - table=??(lr_out_undnat ), priority=100 , match=(ip && ip4.src == 20.0.0.3 && outport == "lr0-public" && is_chassis_resident("cr-lr0-public")), action=(ct_dnat;) -]) - -AT_CHECK([grep -e "172.168.0.110" -e "172.168.0.120" -e "10.0.0.3" -e "20.0.0.3" -e "30:54:00:00:00:03" -e "sw0-port1" publicflows | ovn_strip_lflows], [0], [dnl - table=??(ls_in_l2_lkup ), priority=50 , match=(eth.dst == 30:54:00:00:00:03 && is_chassis_resident("sw0-port1")), action=(outport = "public-lr0"; output;) - table=??(ls_in_l2_lkup ), priority=75 , match=(eth.src == {00:00:00:00:ff:02, 30:54:00:00:00:03} && (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 == 172.168.0.110), action=(clone {outport = "public-lr0"; output; }; outport = "_MC_flood_l2"; output;) - table=??(ls_in_l2_lkup ), priority=80 , match=(flags[[1]] == 0 && arp.op == 1 && arp.tpa == 172.168.0.120), action=(clone {outport = "public-lr0"; output; }; outport = "_MC_flood_l2"; output;) -]) - - -# Set the option "centralize_routing=true" for lr0-public. -check ovn-nbctl --wait=sb set logical_router_port lr0-public options:centralize_routing=true - -# Check that the lflows are as expected and there is cr port created for public-lr0. +# we know we still need the cr port so we check that the lflows are as +# expected and there is cr port created for public-lr0. check_flows_cr_port_for_public_lr0 # Set the type of ln-public back to localnet From patchwork Mon Nov 4 11:04:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006169 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpX96Qn0z1xyH for ; Mon, 4 Nov 2024 22:04:57 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id ADB92409D9; Mon, 4 Nov 2024 11:04:55 +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 oP8_WKNXgd-Y; Mon, 4 Nov 2024 11:04:49 +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 smtp2.osuosl.org A39EC40648 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/ Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id A39EC40648; Mon, 4 Nov 2024 11:04:44 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 346A1C08BE; Mon, 4 Nov 2024 11:04:44 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1A497C08AA for ; Mon, 4 Nov 2024 11:04:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id ECF12405B4 for ; Mon, 4 Nov 2024 11:04:19 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id m6lW1BpMUn7J for ; Mon, 4 Nov 2024 11:04:19 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::629; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org EC4194059B Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org EC4194059B Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Sl9ls7m/ Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20629.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::629]) by smtp4.osuosl.org (Postfix) with ESMTPS id EC4194059B for ; Mon, 4 Nov 2024 11:04:18 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=tudWU+moGHpfok1fFwP1naCT4uYlrQCRHZoJhbNe71WH9Pf8jE9K1O2ZDjx7x1E/mZZ+QTnt/k0n/hoAeGBV2DTtRMNJ1sGwjsyM8v238X651q4iahv5yKXz/W2EVmk6WmccJ4O+BdeC/lYSuRrjexmGm8DZW2yvH4q85X5ZFjj/PjJ10QzFroxi92vaZKw4ruWfY0EkvVgjp0TuLNQ8gx2HvKyNz5OZUh4LQ978r1ywVDmsnTES+MC/KMd3knUk+/2fclWJNdaPU7cNdh67JyLREv8/Py1/pGL+eFfsSy9E0NRyffni78ONBvKQ7dcX7d0Y9XhUWE6wlHdUKi4ccQ== ARC-Message-Signature: i=2; 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=X0Y5AZWM+ScnOaWpCyERMfzuuE5ZAeTUlLpBVE2q1ck=; b=wVFK+OWlTEi5G/08kaWeBEwdzTpp3B3FOanRWE6C8K+mZx70kl4FqEE3mtlCmuqdo1IF30gQzhlVP/0bSR1UZfs5Mklmkb/zQhDJiBchFSLq5tclupDwK4CxyBlY0WNLqajUEkWBxCtHJG6tA8+dhuHOl1BA5xpYz7vOQl3I/vAKNevxQvVAcxYqt/8f4kNqWKNkSUEU832yPbXv5tPdHBnhZxwr2/MpMfDpUE39/tXKzPOgOsb18zvnT1WknekfKl8JTCRnp++bQDJkkXBH/Pgwtab4hOW1E8J2CF+DrIahqNkSMcEQCpO/uQPhmSWUb80gUD68z+ABN7byhl0Awg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X0Y5AZWM+ScnOaWpCyERMfzuuE5ZAeTUlLpBVE2q1ck=; b=Sl9ls7m/h0TOpTff2OiyMolAUCvdInnTVzi/MnVWEwJXkLxXH9eVBOpNwedNe3jIzh7RCia/7wLVx7wGRQapZEggik3v0cYEDYF8jaXMA+IWmgX7+qfcRnNBIZHe4hJckhJv9ZyXUGTaZlQ4G4qrzT2Fgjoq20fclvWs7NxHBXSaS1fJTYSYzDMTg7pp20YMgfp/UWXxzkVeLA8D4NFFFD+vxRhZ9VCwccS6HccstCUHxatgHWFc+Uerst81LKwEZ+JW9Yv0gPx0E/EizlF4K/yn4IySWAaOS3/r7Q55rKjyefzPdkdXFyYdRgROOwRPdKMhRQ4GjfDdvyX3z0a87A== Received: from AM0PR07CA0027.eurprd07.prod.outlook.com (2603:10a6:208:ac::40) by AS2PR10MB7252.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:607::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:14 +0000 Received: from AM1PEPF000252DB.eurprd07.prod.outlook.com (2603:10a6:208:ac:cafe::c2) by AM0PR07CA0027.outlook.office365.com (2603:10a6:208:ac::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16 via Frontend Transport; Mon, 4 Nov 2024 11:04:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM1PEPF000252DB.mail.protection.outlook.com (10.167.16.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:14 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.107) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:14 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 3047926 X-ExclaimerImprintLatency: 1592253 X-ExclaimerImprintAction: 404dff8097234de49d87f5e9a48bdca8 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eQQvUuH0n+STp13beOM2v33LT1A+diWs81zZ1Z12pBWlWo6Bhpuc2KJ5hg//xL+DSDrTR4BIqWj2EWlS+raWCowCymC+JVBu9O+Y60V9JUejkUqekkUh5Ebur43XVM9ByxT++rYjyS4q1IXZfaFrwCJWlBiv98psSUbBNu09XtS1Phu1sJpS9ZK2lMKCw+jjgtDvIYRK9zJ5TPdYg3cdKjH+6hMjrhQ8Y3PsrH3duad0N+Ti7Umv+/C0UwTW6TANvEpHkLIBlhiMohkPUERndI0KwaR7FjxGpQ5B2efw8GVChz3kaQXTqCFWcelDLjqWTwW3WXp1jQNIlHZaEHRhhg== 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=X0Y5AZWM+ScnOaWpCyERMfzuuE5ZAeTUlLpBVE2q1ck=; b=cfju907aPzUJmoWB6IIfpEN3FTJUqFwTQQ8+XF0uxqzSKyIydJnrN0h1RD5uBKfZVTWp1XhRGLnvZyGg+9fKdGEnNIYaYRsh50raNXbWvaMhFqlf9HefHvLLLNH6I27zSBoxR2hsZv+WEZ9p5IQHxjgkpSLPhI+dYtfYjJb/wMfHnFtFMySpci5pBKbvMcMyVQW0zHrhxj5XElM0mz/rtSVOWRTZZd3lrIUcVWd3hOmlpCW29pjFIQBSoTZvtKcboTOSCM3dFzur4D0E1eAYEb9lb52Z+P6dVXKod1/90o0pE4Yqo34hr7amn5/2tUd4GFtkCrg2K898x+CstnQwng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X0Y5AZWM+ScnOaWpCyERMfzuuE5ZAeTUlLpBVE2q1ck=; b=Sl9ls7m/h0TOpTff2OiyMolAUCvdInnTVzi/MnVWEwJXkLxXH9eVBOpNwedNe3jIzh7RCia/7wLVx7wGRQapZEggik3v0cYEDYF8jaXMA+IWmgX7+qfcRnNBIZHe4hJckhJv9ZyXUGTaZlQ4G4qrzT2Fgjoq20fclvWs7NxHBXSaS1fJTYSYzDMTg7pp20YMgfp/UWXxzkVeLA8D4NFFFD+vxRhZ9VCwccS6HccstCUHxatgHWFc+Uerst81LKwEZ+JW9Yv0gPx0E/EizlF4K/yn4IySWAaOS3/r7Q55rKjyefzPdkdXFyYdRgROOwRPdKMhRQ4GjfDdvyX3z0a87A== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:12 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:12 +0000 Date: Mon, 4 Nov 2024 12:04:10 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0120.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::18) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AM1PEPF000252DB:EE_|AS2PR10MB7252:EE_ X-MS-Office365-Filtering-Correlation-Id: 645eb49f-ad20-4945-690d-08dcfcc06b48 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: gT0VcfF57vgWpouruXlGzTUwsUFgD7sgumzeKSApzhGpqk/kSeFjjPIk01Qz65p8DqrDMxW7yJHCqUFyKNsKi5RGZ/4hjblFDGAu3pJyVcYouDMq2Krrbr1il3U2YzXG4MCIYz1LJ2nXQmBEu5zgjmflanF+VI0mPUcRad/Byw1d7hA28T4iKANXkX39g76NjhfiHth0kXK1cZwTPTjM6vHyelEgh0DR9CstSNQ+dqulO6hJvLZ1mqfMIIWWqA8imj+O3nyfQlhVAiijG+mrEVnPnaCsfwqJEx1NH2hjxu5xmUC3fRSO1dV0J4H0pFj/kI9+VwB/ztw0Dra/O1TJtuWx3EQAAOnZNqqTh/waleaqKMir++QMmcfzzz2mRGYSApWRCym4CpWgyKzlboYKoeSb/qtfPTqnWHnid4KGtIlmSovmGYWjWkp8obOE360HQAScXyHYOd1rAXTW8iXtYhtdjXerw0RbsJ+sx8BgOYU6geSHtsCXdwV9Dc1RY/xu/SdYvrCoYz554k1lvILEAFFIdA7lR7Wb7VFQPjdFUvUh3IBcvClykzHbQpXjVbUDamYlsz+f0C+1ZTpIjM19zk+wZjXNYt9G9zWiPBxPSTNyo9Zj2PU6GajapnM1U5/eTpJ+GypkqZ/1u81DFwY8DqU8mVUsS9HNbVVhvMBH2yBziR8mffnOLIdJgaHm6CGOa0qzFyoQaBth3vrXkliphbc3LeLBi+FYljsX3kwy8A+inX9NVtaTp74yky9ulTUkOhFJ/sKt4zKd/kd2NqfZBmj6H4vUX9mBkj+dNmNozYcNdT3VEcONxMbKVbQdAD9MMX4VNdm6+/68VYhvJDnOT7KioP5PE5Ip46eTHaS851IR7FEBKXHUsV1n6+ArmCQ5HI0jKKef402zvngyNzWq8zmj6JD3T6ZGh564T0o5Qd5Pe/1YoYehc4WgNQRgDPgwbDmAUWMnowz1nIWYlKxY0j2bLvrN8djrGjZBNXF3hgCzOkgxpBjROkxe0ZOhxQEIzBDISIiqzf9fZRc08dmFniUJzb9ikSVIV5P/kvfli4y2X6EMuEYXwRrGGlorqjJLyBZb0oAeBhom6Xh5EQKeqqT6YNAH85pqRZe9h77vmSlpkb7Vk1ryP05hfygeCd2FpuFyRB7wcgkoHQmlkp8EUD1C+8NKw930FBl5rxMtztCxPJmq7oeji1s2Qs2a0EqXPFKZafCdZ8Ya0I+30VC0/LUrehp97QBjX+K3HL2kGeKwtKfurR5Sj6htnT3e9RYAQUUgD3mhXkh43fFhhpzRd/XPShvJnbUK+MOT2PZ3L7/EWSGkliW+TrdZJYa30Fc/ X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM1PEPF000252DB.eurprd07.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 963ec41d-1245-405e-fc33-08dcfcc069db X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: 09ykVQz8tt1KKsG4fLznd2M1Ppd2yU4zIpPlsLZ5DMZp+YUqQYvHIjUY4a1924f6t3L44TGSdmJXbWMBzXR/sx6ZbM0yBZjy/n173s6HoKKAcd673jHLaE3iAY3sb7Tn6z8O2ffcYocqSxfWTq66GQL5fGUfKmolpLqgdr80F5y2cTy5AbCuTo1z8APfbPrAuRJylayoGXyrtbg/lwsHsaGaWOH94zFsI2OOX4rV1IEA0UuL53aww9dBxFJSaDJ0Ad5dgV6NcbO/EfwCiz4wY9/a5SiJLDqMhidNYbH6uZwFNLRjAmKITH0r2eAryM12NmSbOtZ7rbvp8BsuJy+oofoVIQ0nT4j18rA/SME5OwMAvVLiqu4HZD4rIj0skJcMEVMrjev1RgYVE9kuuN+4PQAKirdfqgz2EL5djyHxGTf4DBq+X7+EEVZ4PEfxOsXxTMGb3LJW11wHc7Sg5xcugqBJXl6o9ifpjWLmK6kRtFyHi5mxdahEpYKs9d9dDpZg8IRxwbkyAu5bvJo3/SYp8rkuSgSNSjNwnV+RaflNMQCIBJMxN8z1BQLicsLFfVGedPX4CTh5On2qtY1DWPysDKKmwfVGtZPvWwaPHj6A9kPCGQoNpSL9vv9fdgtHZeERZ4LI63BOvPa4s3jtoyv7B7LJfC2txK4ZyD5L/QSwp4uMPKcujchAgmyBhaS/24gViSjRv7OPvxvXhmk8p5ArFkF2fS2GkHZE1EW8XYjIYqY9jJUR6SBNoseqZanp7K3pQYV8uo5xvl+jj1diP8BkY0R8cCUMuxjFfAUtZaZviVRhQFLYeX23cxsHb+eqX5aOxXXndi1b0Rx+hNoMR3ELZSO3wx2RLc4JX+FsWbFQgc3pwq9lpb4iKNYtoisvx7rH3imi8OoD6JnLsu8Vh9su2XRhDeRwEn9Wi7YLidoSZI82nV4lveF+CUfVcqZnv9eiMtprs8icMl5ZGQ5KwBL9PfXqn49EsjQ17VfEFfPScmTWwO5ZXDG/F3L55yX3d7hFvI/vMBrr1kOdePQZJccoVhLgJqlPCRBF2k/bGSgQeddLMTC+hE4T9CqKdsFvHgtLFUEv42pMVcIH5a/PAk/PSxDBJcaMLzbMZzUVHv5kmuqZEX9Nj5C3FfTCFRQsmkj7m6KQ/rcZNdzUM3WMExlsFaqTFuNTDs9RABFTZBiS4jxz6bOsXKUNSyoVOaTUye3umXviyOXongfSdLrTA5o3dYpsZvR2r1tJ14V8XHhkm0N1kLrFMSCvrln9XadM5UtldWGcU37NZJDOXrYwGtW+2VHA2Tw3mN4511OUqvmZk9ly2K2IDDprY9DijiMBis0yO7k3//07zPedlPw3RNOYNwtjqMDOu4tLtHa9JO0UB09kPMjdf9rfs+WDJ/jel7NKygDWBdxt5fmeFwzEsGwczg== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:14.1564 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 645eb49f-ad20-4945-690d-08dcfcc06b48 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM1PEPF000252DB.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR10MB7252 Subject: [ovs-dev] [PATCH ovn v2 10/32] northd: Routing-protocol-redirect on crps. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" previously we prevented using the routing-protocol-redirect option on chassis-redirect ports. However the option works fine there, therefor we remove the limitation. Signed-off-by: Felix Huettner --- northd/northd.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 7a8148b13..c25c501d9 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -14196,14 +14196,6 @@ build_lrouter_routing_protocol_redirect( return; } - if (op->cr_port) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); - VLOG_WARN_RL(&rl, "Option 'routing-protocol-redirect' is not " - "supported on Distributed Gateway Port '%s'", - op->key); - return; - } - /* Ensure that LSP, to which the routing protocol traffic is redirected, * exists. */ struct ovn_port *lsp_in_peer = ovn_port_find(ls_ports, From patchwork Mon Nov 4 11:04:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006172 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IxKk+Udq; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IxKk+Udq; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 4XhpXH3zT5z1xxW for ; Mon, 4 Nov 2024 22:05:03 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 3858340586; Mon, 4 Nov 2024 11:05:01 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id c4j5hN3vYA4u; Mon, 4 Nov 2024 11:04:58 +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 smtp4.osuosl.org A2A1A4062D Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IxKk+Udq; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IxKk+Udq Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id A2A1A4062D; Mon, 4 Nov 2024 11:04:52 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 74A87C08A6; Mon, 4 Nov 2024 11:04:52 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2C952C08A9 for ; Mon, 4 Nov 2024 11:04:51 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 7A821405C7 for ; Mon, 4 Nov 2024 11:04:29 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id egj_AhJUwcLL for ; Mon, 4 Nov 2024 11:04:27 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2612::622; helo=eur05-am6-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 56D0C405C2 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 56D0C405C2 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20622.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::622]) by smtp4.osuosl.org (Postfix) with ESMTPS id 56D0C405C2 for ; Mon, 4 Nov 2024 11:04:27 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=J9zX2/e/Wl2IpxbPAfb5ctMGNgWwW0B9gsKQ7DHH35Cv5Fomvyh90QVle65Ez46B5Jh5NS/HzCu18jUcH1KxsxYXxBpm0hYCDbHHbhD43rX/0Rqrq8ivuJjaUyYh6xIY9AWSqSC1xQlPaN5e8SqMMipQuLdrd0u/BNmu8m6WPAazk2yKP6UqT3k2ZiQdgYq0xakVSHgPwHkZiGVbqhOfwRCHon+8aP/3yqtAwXshv74WokWjC0GRkjvFsZGTzY4zNXZOc1DcwGIPsR1jwdbhntaZRK5noYpJ5RQzHjJ0p03nohojfx2JaJfg5zibSVrHx8QK74U4T+XUmfWC4HQ+5w== ARC-Message-Signature: i=2; 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=FTk0EQPWnkFlrRw40EdbdIvPFdo98d7AJ2zpN4nbLNQ=; b=lVLdpQgUOVkEkFsQjhlABZCJEaX7oNbdTJ3TjWeocWZ+rt6KXV8sZlCWYRcETKDKFxtAZ1B4Z3xDSS8pJ7RVJlc5MiiF0P1HUobVC17FJufWinNTUdkR3oUpelH76KQ2pNM0Q+9KH9ISEGgchsdB67chVFpiJfsEGTG5YWL6VXZUoS7FXlcU1zY95EjRqGYsgnZvkdrlooABrQsVxXphs6TLIh51NeoEbT1sCdxd1FGGeKrcJ1uXUAtdzT+uuatd7/lMCl9i05bXfsj4l1vnfZ/Q86zDFZkZhCpWx4iyTLJvfmLky0R+kg7WGJXvTQlHrJdLF5qhzrtVoLBwuTvawQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FTk0EQPWnkFlrRw40EdbdIvPFdo98d7AJ2zpN4nbLNQ=; b=IxKk+UdqI4Wh7SHAJ9wqEkH+jIb7TO9nXNcX//Ss0Ag/hS9IpAkGdJ+8X/aCY4/JRvSm39vRQ0L/ZToxVZ16jsXbSkee57S2pXq44VuHFAgAKCX8CCX9dtDI4VhVzIWfZRp9kU8lJBnMX1rEko3Ji6VQ/JRJ0Vr2zPU5Vc5pjbQVqHsuaRsAzd8qBdgQSp33HcC5YqTRndMkb++Huwjs233CiSlUQf7fJ60DmT/8DMpy4U7rbze5uUMa9kIs1auyKkQ5Oq2i6VGQnswUNXGrVylpKHdSPQcKQ1WruHeJrlGCHTl//QI4MrTvj3DC4UqFjllNa5n6b2zP9hYETLTRdQ== Received: from DUZPR01CA0038.eurprd01.prod.exchangelabs.com (2603:10a6:10:468::12) by DB9PR10MB5716.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:2ef::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:22 +0000 Received: from DB1PEPF00050A00.eurprd03.prod.outlook.com (2603:10a6:10:468:cafe::66) by DUZPR01CA0038.outlook.office365.com (2603:10a6:10:468::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:22 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DB1PEPF00050A00.mail.protection.outlook.com (10.167.242.42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:21 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.105) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:22 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 6715929 X-ExclaimerImprintLatency: 2208332 X-ExclaimerImprintAction: 5bc29a80adac4d51af2f1820675fb270 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m6BmpSTr47/tcaGDbmp5nEihXWovqqL6nYYJHAdQ1aSHh8zeJozLiR78+h2qzRPG5LdheIm92mRNw8Gvd1VzLgfe6GiDKlPtKAsk9Fb1F4/rOzcUkWuGQTwFVUPyvTicSWzs4bpyaokWyizTDQyJ5xuwwU/JXfr4+xwckFNOZsgiF8caD0BJrnmc2DbqjH/W5io03crTvV0dDtH8Kuf4AUSWcOODWzMLZ4l3Ng1UobtCKXLHFdZUCu/i31QJ9wZ5byRyM1CGFQX1xgGbIxDpDYTzhxz1YQwRF2nsj0iqEwGdDIhKTEN8pJB2LoCDs0JKxp1TiK3JUqjhzCqnndvBiw== 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=FTk0EQPWnkFlrRw40EdbdIvPFdo98d7AJ2zpN4nbLNQ=; b=WJIzJ/OkpmrJFMEYRKRexzGUrYgGQTfBUdKnQZy+DQOI/c3hYkLMwWyX0jmFSLJOjw/clxNy/IQcFaHxd9/QkPKVtfN9FY4l2yKsET8wkE369astYQa9CbVCf9JqijQcXWAY5Iu2K7Beas4D8/7IRKbt3B4ISgzBkMUF+wqJ2eAmT93RLCUzJczxrhVpURkvqvHDAg96Ium3NDjgT/JlroEAw5XZxE7Rd5cS8vTErj1ybD0wFNI+t2bB4XCbZe1pemeRFsXJ4fkmW8kLQAnpnrn8oDdigyRBm8mCO0kAI15NuC5tKj8Y14P9ACFr8+YtXyya7sorAgNEuYe6kIkXcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FTk0EQPWnkFlrRw40EdbdIvPFdo98d7AJ2zpN4nbLNQ=; b=IxKk+UdqI4Wh7SHAJ9wqEkH+jIb7TO9nXNcX//Ss0Ag/hS9IpAkGdJ+8X/aCY4/JRvSm39vRQ0L/ZToxVZ16jsXbSkee57S2pXq44VuHFAgAKCX8CCX9dtDI4VhVzIWfZRp9kU8lJBnMX1rEko3Ji6VQ/JRJ0Vr2zPU5Vc5pjbQVqHsuaRsAzd8qBdgQSp33HcC5YqTRndMkb++Huwjs233CiSlUQf7fJ60DmT/8DMpy4U7rbze5uUMa9kIs1auyKkQ5Oq2i6VGQnswUNXGrVylpKHdSPQcKQ1WruHeJrlGCHTl//QI4MrTvj3DC4UqFjllNa5n6b2zP9hYETLTRdQ== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:19 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:19 +0000 Date: Mon, 4 Nov 2024 12:04:12 +0100 To: dev@openvswitch.org Message-ID: <2e55a018ef91e458cb18a627a4a74d8acfa6cc9d.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0115.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::10) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB1PEPF00050A00:EE_|DB9PR10MB5716:EE_ X-MS-Office365-Filtering-Correlation-Id: 068ddf42-03b6-4731-c2cc-08dcfcc06ffd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: Yd13PRvE1AAqBt5FMFYc99GaKYYj5WXWLwV/lOzwBUY9JSyQ/f5btNJ0rezzppCZ4AcPfMmH6v1/6jne8z+OC32rDMsdUcvdO5bFfR+kE6Fqc9lammCF80hV9gNJ9MVpWJf4CfUcvQNgBvhk+1o+WMu0xjONUn+VCMNbK3a4dgP8pysmEMvSjHL28fBmsBvfkKpsd4EGhBrgYb7iyaFCTf2lEb77FUHqkRNtl+Y0dZghzJly5xvny9aMd0s7E5QRlPLBYQuJKiodk15cFXmvqfmWcULQkSZSVwRa8Rn0LRgbEkA1WWbvM1P/ujbYWi06PvayaB2hQ++p6dBwl/wR3raH9WPNEKQhjMq/IeUBfPx2slCASVSTsMfcPS6YpA1qgBlDYQrxOByok3UZ6PcZtKeZybsrjjy214MMVkixochdTl7A3/wLmQFTOsClPGTe66H+QOx6aYKjc2/DtI6s4vd5DB+lUhiGuxJv7xOUOeqeW05nsQLmXCHc0kg0bSHnNfVUTEXfMZQxTAK5eIfadEBE93nkbfXE1rwChdKwfZtArIyxupXTlMZHlHA+d8EJi5Wk9r1Ri25F+Bbr+2tzmsg6VPfFE2CEglQ2YWLcpY4XVzjKLWZYhNghkt+JgRAWF7JjJ57bmQdct5tkW+JUZ9vdDg5eDS4vQsZPqWi7/X2hALoAzj4gf2/tsmUtqJEV4Cgh3CdrcC24lz4tpsH93xiwYKeT/4+tX9SmtOrA/KqawLZcWbWIcthkEh60+Zo7UkSRcoimNzKj0W7QA1AB5KRtvf1k1AgJS7wyBwMdT7PPFl1BwpIYTIjsYqM+R+g/Wu8ijAI/3cAOLfSUoNhpenv7aV/HR0tfgjc4MKnsVAlxUni+gboEy625smztgd9CQHcGvc8CBWP9w76VKgYwYOWLkJE++eyQDM0keds7ByAB+wKOhAvSZ3WLojXLeFF6s0iG9hpu0NN9qxIL3KAjzDolusedy+8FVjkxfGEYDD0vNGlxmhj3WZ2Q0enMclH44AAVebW3A5nPH1hyOSX1lTx40jeUKv5MnrKP+GjbnfkvKkP77WMc4YZufFbaipLVE6I37GFklhq7q8gGy3xISa2+Uov2s74+cviTgDVF3DmSI9PxkLbQblWfa4VCj3v64RmdwJrMcDIb/5U4AvnZxoBvX075ZOWu/bq2JR7h9RAXaGWvBxKE9sjQ1Leqg0ZTZ6Z62xa7PgV4drsGRsu+4YkLis8u5/uGlYWXFAMpLIvSgFnh4GiisyYX1oyY5+waSATWqpHoAlGwkgbt96BMzUBzkS7P4Ks6PIVo45issPqXZop6pIOaEVUJHC7uq6r3 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF00050A00.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: d995d093-1ac0-457a-d367-08dcfcc06e61 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: AgmI0i0sNlFupKXBlifhMrJEAdQjLbWEiYvDWcw+yVNk/VaTWkxVHlox7sPoU7exzVtdENjme5O+RyjQHWv4DESJBfA7UNDKKIvD5TAgJ4TPFo7Ehh9Yt6eszgEjvVc04gZ1AO5Ilce+1q9XIUBhGrFwWo+qHpEwJKQhDkyzpBU3zkg/XW8IrUXZmLoEeT4eWMvZ/ghMZlErp0fEKRprWxEK0ikQ3ywB5tWauPxOgMI6WaQK/QHtlJw+hnYeQjQI32KHZpzQPCAB3JaM8ef3SZLYQn/B4O3ARCfAG1UdVG3esqBPku6woXgEC+GxrOC0QkSpiYVkn3ExuDtKDNmioiRnt+zGk/3hlSXA/x6GjgwIg07PKssbBXCPDQQqgVr2YUgaoZj+w34L2KPYtkkTSZXwDcAiKmJenH9rx5cNgThI/Wisl5o8XVPyKcTSkQL3olz/D2ncJjNM6ISdiJQt6CeNbj7OIbDSVHTGYkmU13Nfw45QQAR3/ln7MaHz2mDWhT/TZqoIjJ9OsNhDIaspMQNXTh9r1YJXEv8gBzvWBwaHu3il+F4RCl0F2HOIsLovlSnXYdOceBtiNX+iKjB54RQInNCoHR2cip1abTufMM6iHPDrgY77WQbou+ic5cLprAKjG3TInI7NjuvZGJaqWTC/hXfbfv2xpaZE1Ioy55hd2nYyT8S+GMSsdHklHFE+7AdP/cSxwXsf2f3N9PAquQtCOttAeiHy3U5dqpXnh3BF6NNz4tieMFc5aVdl2g24aUdQWxr+dK6yksExcOrC5R6k/2CtmjWH2+sA9q+m62X4iba4eZcgRzFSvckRxHlaifrAi/LRs5RJY2tRtXtfcpY5HUbNWF33dqEB3kI4OXdl+6oHoKDtTmOOluw5Qs9snSmiESgP7ZXzkjeeYXaUozqgwv7qkNrBgmEVlMY+WTJZBBccEvqqkjKnIKT/0vWCZ0YA/Eze2qystnrPoxKwE/YWiGKBx8gj9wZyjctv4bs2Pw1wpkomoaUgv+cJwl69PUcL6voNyyK5VrJSuHYtMPfLTfhzxqs1dHAyj9cZ42Rzgk8MeYxFEz8rt6CAexL3cAMF+ozW23xpeow9rdHTT9cneG310jt7WRofi3fc+PhBFAhTIfyQde5AJCnaUJzPAzdYnwm7pjVCrW1aVNSneSEhBYlXk3be49f+MhIAhHM+lJM1+jpKHaPU8F8lnxB/xM6mFpD3oLiVXnglDoLSLz++WT87scyj/PjkUUjorHlMeMRMJ1RFh51Ax/65dhvVqrJQJmtClsqxYjC1S8QAhq6qwt0tBoLePB7h/BJOhbNWvIHjkqb6MYNzh4hseMOHYbneG/H/U0C1H/LWIoTdORDKKy95DFdm5J/6xaY7syoGIwuhPpghA79gdTOuAbASDuTPmPrRSwBaPSMRecVkRg== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:21.9308 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 068ddf42-03b6-4731-c2cc-08dcfcc06ffd X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF00050A00.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5716 Subject: [ovs-dev] [PATCH ovn v2 11/32] northd: Add route table to southbound and sync. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" in order to exchange routes between OVN and the network fabric we introduce a new southbound table. This is used by northd to write in the routes which should be announced from a given Logical Router. ovn-controller will later use this table to share these routes to the outside. Additionally this table will be used as a way for ovn-controller to share learned routes back to northd. Users must explicitly opt-in to advertise the routes using this table. Signed-off-by: Felix Huettner --- ic/ovn-ic.c | 21 ----- lib/ovn-util.c | 22 +++++ lib/ovn-util.h | 1 + lib/stopwatch-names.h | 1 + northd/automake.mk | 2 + northd/en-routes-sync.c | 196 +++++++++++++++++++++++++++++++++++++++ northd/en-routes-sync.h | 28 ++++++ northd/inc-proc-northd.c | 9 +- northd/northd.c | 24 +++-- northd/northd.h | 4 +- ovn-nb.xml | 5 + ovn-sb.ovsschema | 17 +++- ovn-sb.xml | 50 ++++++++++ 13 files changed, 344 insertions(+), 36 deletions(-) create mode 100644 northd/en-routes-sync.c create mode 100644 northd/en-routes-sync.h diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c index 54dd73f18..6c4d26ebb 100644 --- a/ic/ovn-ic.c +++ b/ic/ovn-ic.c @@ -1007,27 +1007,6 @@ get_nexthop_from_lport_addresses(bool is_v4, return true; } -static bool -prefix_is_link_local(struct in6_addr *prefix, unsigned int plen) -{ - if (IN6_IS_ADDR_V4MAPPED(prefix)) { - /* Link local range is "169.254.0.0/16". */ - if (plen < 16) { - return false; - } - ovs_be32 lla; - inet_pton(AF_INET, "169.254.0.0", &lla); - return ((in6_addr_get_mapped_ipv4(prefix) & htonl(0xffff0000)) == lla); - } - - /* ipv6, link local range is "fe80::/10". */ - if (plen < 10) { - return false; - } - return (((prefix->s6_addr[0] & 0xff) == 0xfe) && - ((prefix->s6_addr[1] & 0xc0) == 0x80)); -} - static bool prefix_is_deny_listed(const struct smap *nb_options, struct in6_addr *prefix, diff --git a/lib/ovn-util.c b/lib/ovn-util.c index 1ad347419..55a081ab1 100644 --- a/lib/ovn-util.c +++ b/lib/ovn-util.c @@ -1331,3 +1331,25 @@ ovn_update_swconn_at(struct rconn *swconn, const char *target, return notify; } + +bool +prefix_is_link_local(const struct in6_addr *prefix, unsigned int plen) +{ + if (IN6_IS_ADDR_V4MAPPED(prefix)) { + /* Link local range is "169.254.0.0/16". */ + if (plen < 16) { + return false; + } + ovs_be32 lla; + inet_pton(AF_INET, "169.254.0.0", &lla); + return ((in6_addr_get_mapped_ipv4(prefix) & htonl(0xffff0000)) == lla); + } + + /* ipv6, link local range is "fe80::/10". */ + if (plen < 10) { + return false; + } + return (((prefix->s6_addr[0] & 0xff) == 0xfe) && + ((prefix->s6_addr[1] & 0xc0) == 0x80)); +} + diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 2e2f31a36..98cb8e69d 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -498,5 +498,6 @@ streq(const char *s1, const char *s2) return false; } +bool prefix_is_link_local(const struct in6_addr *prefix, unsigned int plen); #endif /* OVN_UTIL_H */ diff --git a/lib/stopwatch-names.h b/lib/stopwatch-names.h index 660c653fb..87e5bff85 100644 --- a/lib/stopwatch-names.h +++ b/lib/stopwatch-names.h @@ -34,5 +34,6 @@ #define LR_NAT_RUN_STOPWATCH_NAME "lr_nat_run" #define LR_STATEFUL_RUN_STOPWATCH_NAME "lr_stateful" #define LS_STATEFUL_RUN_STOPWATCH_NAME "ls_stateful" +#define ROUTES_SYNC_RUN_STOPWATCH_NAME "routes_sync" #endif diff --git a/northd/automake.mk b/northd/automake.mk index 6566ad299..775422d43 100644 --- a/northd/automake.mk +++ b/northd/automake.mk @@ -34,6 +34,8 @@ northd_ovn_northd_SOURCES = \ northd/en-ls-stateful.h \ northd/en-sampling-app.c \ northd/en-sampling-app.h \ + northd/en-routes-sync.c \ + northd/en-routes-sync.h \ northd/inc-proc-northd.c \ northd/inc-proc-northd.h \ northd/ipam.c \ diff --git a/northd/en-routes-sync.c b/northd/en-routes-sync.c new file mode 100644 index 000000000..bb61e0d51 --- /dev/null +++ b/northd/en-routes-sync.c @@ -0,0 +1,196 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "openvswitch/vlog.h" +#include "stopwatch.h" +#include "northd.h" + +#include "en-routes-sync.h" +#include "lib/stopwatch-names.h" +#include "openvswitch/hmap.h" +#include "ovn-util.h" + +VLOG_DEFINE_THIS_MODULE(en_routes_sync); + +static void +routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, + const struct sbrec_route_table *sbrec_route_table, + const struct hmap *parsed_routes); + +void +*en_routes_sync_init(struct engine_node *node OVS_UNUSED, + struct engine_arg *arg OVS_UNUSED) +{ + return NULL; +} + +void +en_routes_sync_cleanup(void *data_ OVS_UNUSED) +{ +} + +void +en_routes_sync_run(struct engine_node *node, void *data_ OVS_UNUSED) +{ + struct routes_data *routes_data + = engine_get_input_data("routes", node); + const struct engine_context *eng_ctx = engine_get_context(); + const struct sbrec_route_table *sbrec_route_table = + EN_OVSDB_GET(engine_get_input("SB_route", node)); + + stopwatch_start(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); + + routes_table_sync(eng_ctx->ovnsb_idl_txn, sbrec_route_table, + &routes_data->parsed_routes); + + stopwatch_stop(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); + engine_set_node_state(node, EN_UPDATED); +} + +struct route_entry { + struct hmap_node hmap_node; + + const struct sbrec_route *sb_route; + const struct sbrec_datapath_binding *sb_db; + + char *logical_port; + char *ip_prefix; + char *type; + bool stale; +}; + +static struct route_entry * +route_alloc_entry(struct hmap *routes, + const struct sbrec_datapath_binding *sb_db, + char *logical_port, char *ip_prefix, char *route_type) +{ + struct route_entry *route_e = xzalloc(sizeof *route_e); + + route_e->sb_db = sb_db; + route_e->logical_port = xstrdup(logical_port); + route_e->ip_prefix = xstrdup(ip_prefix); + route_e->type = xstrdup(route_type); + route_e->stale = false; + uint32_t hash = uuid_hash(&sb_db->header_.uuid); + hash = hash_string(logical_port, hash); + hash = hash_string(ip_prefix, hash); + hmap_insert(routes, &route_e->hmap_node, hash); + + return route_e; +} + +static struct route_entry * +route_lookup_or_add(struct hmap *route_map, + const struct sbrec_datapath_binding *sb_db, + char *logical_port, const struct in6_addr *prefix, + unsigned int plen, char *route_type) +{ + struct route_entry *route_e; + uint32_t hash; + + char *ip_prefix = normalize_v46_prefix(prefix, plen); + + hash = uuid_hash(&sb_db->header_.uuid); + hash = hash_string(logical_port, hash); + hash = hash_string(ip_prefix, hash); + HMAP_FOR_EACH_WITH_HASH (route_e, hmap_node, hash, route_map) { + if (!strcmp(route_e->type, route_type)) { + free(ip_prefix); + return route_e; + } + } + + route_e = route_alloc_entry(route_map, sb_db, + logical_port, ip_prefix, route_type); + free(ip_prefix); + return route_e; +} + +static void +route_erase_entry(struct route_entry *route_e) +{ + free(route_e->logical_port); + free(route_e->ip_prefix); + free(route_e->type); + free(route_e); +} + +static void +routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, + const struct sbrec_route_table *sbrec_route_table, + const struct hmap *parsed_routes) +{ + if (!ovnsb_txn) { + return; + } + + struct hmap sync_routes = HMAP_INITIALIZER(&sync_routes); + + const struct parsed_route *route; + + struct route_entry *route_e; + const struct sbrec_route *sb_route; + SBREC_ROUTE_TABLE_FOR_EACH (sb_route, sbrec_route_table) { + route_e = route_alloc_entry(&sync_routes, + sb_route->datapath, + sb_route->logical_port, + sb_route->ip_prefix, + sb_route->type); + route_e->stale = true; + route_e->sb_route = sb_route; + } + + HMAP_FOR_EACH (route, key_node, parsed_routes) { + if (route->is_discard_route) { + continue; + } + if (prefix_is_link_local(&route->prefix, route->plen)) { + continue; + } + if (!smap_get_bool(&route->od->nbr->options, "dynamic-routing", + false)) { + continue; + } + route_e = route_lookup_or_add(&sync_routes, + route->od->sb, + route->out_port->key, + &route->prefix, + route->plen, + "advertise"); + route_e->stale = false; + + if (!route_e->sb_route) { + const struct sbrec_route *sr = sbrec_route_insert(ovnsb_txn); + sbrec_route_set_datapath(sr, route_e->sb_db); + sbrec_route_set_logical_port(sr, route_e->logical_port); + sbrec_route_set_ip_prefix(sr, route_e->ip_prefix); + sbrec_route_set_type(sr, route_e->type); + route_e->sb_route = sr; + } + } + + HMAP_FOR_EACH_POP (route_e, hmap_node, &sync_routes) { + /* `receive` routes are added by ovn-controller we should only read but + * not remove them */ + if (strcmp(route_e->sb_route->type, "receive") && + route_e->stale) { + sbrec_route_delete(route_e->sb_route); + } + route_erase_entry(route_e); + } + hmap_destroy(&sync_routes); +} + diff --git a/northd/en-routes-sync.h b/northd/en-routes-sync.h new file mode 100644 index 000000000..ecd41b0b9 --- /dev/null +++ b/northd/en-routes-sync.h @@ -0,0 +1,28 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef EN_ROUTES_SYNC_H +#define EN_ROUTES_SYNC_H 1 + +#include "lib/inc-proc-eng.h" + +/*struct routes_sync_data { + struct sset routes; +};*/ + +void *en_routes_sync_init(struct engine_node *, struct engine_arg *); +void en_routes_sync_cleanup(void *data); +void en_routes_sync_run(struct engine_node *, void *data); + + +#endif /* EN_ROUTES_SYNC_H */ diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index ddc16428a..bc361ce72 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -42,6 +42,7 @@ #include "en-sampling-app.h" #include "en-sync-sb.h" #include "en-sync-from-sb.h" +#include "en-routes-sync.h" #include "unixctl.h" #include "util.h" @@ -103,7 +104,8 @@ static unixctl_cb_func chassis_features_list; SB_NODE(fdb, "fdb") \ SB_NODE(static_mac_binding, "static_mac_binding") \ SB_NODE(chassis_template_var, "chassis_template_var") \ - SB_NODE(logical_dp_group, "logical_dp_group") + SB_NODE(logical_dp_group, "logical_dp_group") \ + SB_NODE(route, "route") enum sb_engine_node { #define SB_NODE(NAME, NAME_STR) SB_##NAME, @@ -162,6 +164,7 @@ static ENGINE_NODE(route_policies, "route_policies"); static ENGINE_NODE(routes, "routes"); static ENGINE_NODE(bfd, "bfd"); static ENGINE_NODE(bfd_sync, "bfd_sync"); +static ENGINE_NODE(routes_sync, "routes_sync"); void inc_proc_northd_init(struct ovsdb_idl_loop *nb, struct ovsdb_idl_loop *sb) @@ -264,6 +267,9 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_bfd_sync, &en_route_policies, NULL); engine_add_input(&en_bfd_sync, &en_northd, bfd_sync_northd_change_handler); + engine_add_input(&en_routes_sync, &en_routes, NULL); + engine_add_input(&en_routes_sync, &en_sb_route, NULL); + engine_add_input(&en_sync_meters, &en_nb_acl, NULL); engine_add_input(&en_sync_meters, &en_nb_meter, NULL); engine_add_input(&en_sync_meters, &en_sb_meter, NULL); @@ -277,6 +283,7 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_lflow, &en_bfd_sync, NULL); engine_add_input(&en_lflow, &en_route_policies, NULL); engine_add_input(&en_lflow, &en_routes, NULL); + engine_add_input(&en_lflow, &en_routes_sync, NULL); engine_add_input(&en_lflow, &en_global_config, node_global_config_handler); diff --git a/northd/northd.c b/northd/northd.c index c25c501d9..4ad760025 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -11053,7 +11053,8 @@ route_hash(struct parsed_route *route) } static bool -find_static_route_outport(struct ovn_datapath *od, const struct hmap *lr_ports, +find_static_route_outport(const struct ovn_datapath *od, + const struct hmap *lr_ports, const struct nbrec_logical_router_static_route *route, bool is_ipv4, const char **p_lrp_addr_s, struct ovn_port **p_out_port); @@ -11157,7 +11158,7 @@ parsed_route_add(const struct ovn_datapath *od, new_pr->route_table_id = route_table_id; new_pr->is_src_route = is_src_route; new_pr->hash = route_hash(new_pr); - new_pr->nbr = od->nbr; + new_pr->od = od; new_pr->ecmp_symmetric_reply = ecmp_symmetric_reply; new_pr->is_discard_route = is_discard_route; if (!is_discard_route) { @@ -11178,7 +11179,8 @@ parsed_route_add(const struct ovn_datapath *od, } static void -parsed_routes_add_static(struct ovn_datapath *od, const struct hmap *lr_ports, +parsed_routes_add_static(const struct ovn_datapath *od, + const struct hmap *lr_ports, const struct nbrec_logical_router_static_route *route, const struct hmap *bfd_connections, struct hmap *routes, struct simap *route_tables, @@ -11298,7 +11300,8 @@ parsed_routes_add_static(struct ovn_datapath *od, const struct hmap *lr_ports, } static void -parsed_routes_add_connected(struct ovn_datapath *od, const struct ovn_port *op, +parsed_routes_add_connected(const struct ovn_datapath *od, + const struct ovn_port *op, struct hmap *routes) { for (int i = 0; i < op->lrp_networks.n_ipv4_addrs; i++) { @@ -11327,14 +11330,14 @@ parsed_routes_add_connected(struct ovn_datapath *od, const struct ovn_port *op, } void -build_parsed_routes(struct ovn_datapath *od, const struct hmap *lr_ports, - const struct hmap *bfd_connections, struct hmap *routes, - struct simap *route_tables, - struct hmap *bfd_active_connections) +build_parsed_routes(const struct ovn_datapath *od, const struct hmap *lr_ports, + const struct hmap *bfd_connections, struct hmap *routes, + struct simap *route_tables, + struct hmap *bfd_active_connections) { struct parsed_route *pr; HMAP_FOR_EACH (pr, key_node, routes) { - if (pr->nbr == od->nbr) { + if (pr->od == od) { pr->stale = true; } } @@ -11542,7 +11545,8 @@ build_route_match(const struct ovn_port *op_inport, uint32_t rtb_id, /* Output: p_lrp_addr_s and p_out_port. */ static bool -find_static_route_outport(struct ovn_datapath *od, const struct hmap *lr_ports, +find_static_route_outport(const struct ovn_datapath *od, + const struct hmap *lr_ports, const struct nbrec_logical_router_static_route *route, bool is_ipv4, const char **p_lrp_addr_s, struct ovn_port **p_out_port) { diff --git a/northd/northd.h b/northd/northd.h index eb669f734..77faab65d 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -714,7 +714,7 @@ struct parsed_route { const struct nbrec_logical_router_static_route *route; bool ecmp_symmetric_reply; bool is_discard_route; - const struct nbrec_logical_router *nbr; + const struct ovn_datapath *od; bool stale; enum route_source source; char *lrp_addr_s; @@ -744,7 +744,7 @@ void northd_indices_create(struct northd_data *data, void route_policies_init(struct route_policies_data *); void route_policies_destroy(struct route_policies_data *); -void build_parsed_routes(struct ovn_datapath *, const struct hmap *, +void build_parsed_routes(const struct ovn_datapath *, const struct hmap *, const struct hmap *, struct hmap *, struct simap *, struct hmap *); uint32_t get_route_table_id(struct simap *, const char *); diff --git a/ovn-nb.xml b/ovn-nb.xml index 2836f58f5..1cdb2b770 100644 --- a/ovn-nb.xml +++ b/ovn-nb.xml @@ -2930,6 +2930,11 @@ or option is not present the limit is not set and the zone limit is derived from OvS default datapath limit. + + + If set to true then this + can participate in dynamic routing with components outside of OVN. + diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema index 73abf2c8d..22e43dc8a 100644 --- a/ovn-sb.ovsschema +++ b/ovn-sb.ovsschema @@ -1,7 +1,7 @@ { "name": "OVN_Southbound", - "version": "20.37.0", - "cksum": "1950136776 31493", + "version": "20.38.0", + "cksum": "956398967 32154", "tables": { "SB_Global": { "columns": { @@ -617,6 +617,19 @@ "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}}}, "indexes": [["chassis"]], + "isRoot": true}, + "Route": { + "columns": { + "datapath": + {"type": {"key": {"type": "uuid", + "refTable": "Datapath_Binding"}}}, + "logical_port": {"type": "string"}, + "ip_prefix": {"type": "string"}, + "type": {"type": {"key": {"type": "string", + "enum": ["set", ["advertise", + "receive"]]}, + "min": 1, "max": 1}}}, + "indexes": [["datapath", "logical_port", "ip_prefix"]], "isRoot": true} } } diff --git a/ovn-sb.xml b/ovn-sb.xml index 5285cae30..a65bd2cbb 100644 --- a/ovn-sb.xml +++ b/ovn-sb.xml @@ -5180,4 +5180,54 @@ tcp.flags = RST; The set of variable values for a given chassis. + + +

+ Each record represents a route thas is export from ovn or imported to ovn + using some dynamic routing logic outside of ovn. + It is populated by ovn-northd based on the addresses, routes + and NAT Entries of a OVN_Northbound.Logical_Router_Port. +

+ + + The datapath belonging to the + OVN_Northbound.Logical_Router that this route is valid + for. + + + +

+ If the type is advertise then this is the logical_port + the router will send packets out. +

+ +

+ If the type is receive then this is the logical_port + the route was learned on. +

+
+ + +

+ IP prefix of this route (e.g. 192.168.100.0/24). +

+
+ + +

+ If the route is to be exported from OVN to the outside network or if + it is imported from the outside network. +

+
    +
  • + advertise: This route should be advertised to the + outside network. +
  • +
  • + receive: This route has been learned from the outside + network. +
  • +
+
+
From patchwork Mon Nov 4 11:04:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006174 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=JI6YLpv2; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=JI6YLpv2; 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 4XhpXz2GFDz1xwF for ; Mon, 4 Nov 2024 22:05:39 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 809DF60B00; Mon, 4 Nov 2024 11:05:37 +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 OVygEqTSdOje; Mon, 4 Nov 2024 11:05:31 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 05C5B608BE Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=JI6YLpv2; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=JI6YLpv2 Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 05C5B608BE; Mon, 4 Nov 2024 11:05:14 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id AF1DFC08A6; Mon, 4 Nov 2024 11:05:14 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1D0DFC08A6 for ; Mon, 4 Nov 2024 11:05:13 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id C8190607B5 for ; Mon, 4 Nov 2024 11:04:29 +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 XjEg0rCuc165 for ; Mon, 4 Nov 2024 11:04:29 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::620; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org DA27960785 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org DA27960785 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20620.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::620]) by smtp3.osuosl.org (Postfix) with ESMTPS id DA27960785 for ; Mon, 4 Nov 2024 11:04:28 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=gnfEmYgy4f8DewB9FAkScZUNGHDSpcATCMqKwWmDGrvssK0NLYx5KqL05wtvsGAQq8OJ3m5EP4YjI06JeAGcQcreqYMKbXneOHoWyY5dCAVF+Ht0NKnzgpxrYeJBJqLm+3gDxdxDEeCSlyb3xBE5Cfe+Km3MocLrISJIZn+Va1yqVb7DOy79832fv3c6hFoDswE9PJACZkWVvglhivFGQ7pixJK1sQ+tYW2W7+aaDxQvgw8+FLP4Rk1Jx6pcKGi74Irtc/FTgcXBTURQsrml+aRTF+guOEaJ5H8fpDV8iCGoulWF9L/6HVcqKZ7brymlxGiORrU7UfZCipsoB4nEfQ== ARC-Message-Signature: i=2; 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=hVIvazu933QmFb9v1QyC9E22JbXHnsw5CoAAolF8NAU=; b=FzGjlbODqugPMBaLCe/PJZArxdFLHOr28A6HRodeywTOlA4IQZMaDJwEN/ciwJCy06NoJWdoGQoJjxqYyYMtXLdvzOGPeaUdPesFOVk0YGAq7vok7t/8rvsfzd7TGx7HtGeRtQwN7sO30wbvkIEO3CO9YecoUjGE+wv68WegY6et6Q+bbRkcHB4RzUs3aL49dlI8lhznNWu73ViNbCBzEL86ivEvCEN5VFIbgKJrqA5+0chw0ObZiZnYlkybiPZMNGGxc/7dIYE7uvkIvoW6gX2gqshyEu5xQsMTBQ28a6Grd/hNQBrddAI2b4xjgDCfpXIk8tR6xl3jH55TZSMHOA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hVIvazu933QmFb9v1QyC9E22JbXHnsw5CoAAolF8NAU=; b=JI6YLpv2O2JFC8qYtzxxFCvF/I/qmjevENcAHCPZT+h3gPEr4aOt4Y39hwkG09A4UGxIJ6O4SncTYMUu9GjnVot9xsVUR1qhy9nUGQ0qtDOScpzeH9jPKhr2i0sxKeMrFLeIGcsNA0kTPfIxIBU7uxRfH1ZfE2asBTAuwSyNh74HISHgs/Q+Pi5k6WUsyS2+84KaHaXUd3him/fRsXd9zENox34EkVn3UpCFR44wUjIUyX1Fm9yfoEhlCZ6NttwMaJ5K/sofpRe4rEKAHEkR14vokqRbrCZ1aN5A61yJNBEck3qUnctga37jvWD9fOWZaQv0icxqCP6iOwkyXKoGuA== Received: from DU2PR04CA0306.eurprd04.prod.outlook.com (2603:10a6:10:2b5::11) by AS8PR10MB6675.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:563::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:04:24 +0000 Received: from DU2PEPF00028D0F.eurprd03.prod.outlook.com (2603:10a6:10:2b5:cafe::c2) by DU2PR04CA0306.outlook.office365.com (2603:10a6:10:2b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:24 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DU2PEPF00028D0F.mail.protection.outlook.com (10.167.242.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:22 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.105) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:23 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4590802 X-ExclaimerImprintLatency: 1953866 X-ExclaimerImprintAction: 86075e304d8842978ae1ca518c47d66e ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oGV+x8R993HYLsgppqEF2WPIlgPVevpx5mMtbKIPiI6Wvgyqb6YtkwzKXUYBXcO5s0AovPPJkfXhF8XvpimdDqU6R5DOVLhv7AVBeK1oPPNn2vA3NOcdkqkIW+LTuj3RsOZJj42aflii9H70QjT35e7uSf5oLkqLYV1qLDUgGByYdATPnzfuRCaYr8GVIiVacKrOQE08S1Ln8P2I0SiXl+sJAHh2BlSu8y9IgqQCrMwZHtVXHnmC7tzUsUVL5TXbXF22wXyx+LTtW5mO6fC64x7DWgupkindPwO147cR2Y+OTVnmtEHONxO66iTbzn3gOU5qMfR6AE7sXeqfsNSRFQ== 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=hVIvazu933QmFb9v1QyC9E22JbXHnsw5CoAAolF8NAU=; b=rmW812Y2z1JmSIaGqI6/6fPNjGu8kY8AYW8QxAbW26ak6rV7Tje4xtdmeaMwW8bwAvK49Kzb9inz3lkgLfv871Jv3G1i080dbcgqSMGCCOnyTHdqGo6UAsKTLZw2vAuD2DAFD4sKgvnvp+ECIvRCyeyY/6a/DaE4LOLED6v0PRr/Renzyig/PCu4cOedpLjn100LTiTe8F3VjfF7nZivSR1SDSrnr3hbC7gyG+7DT5nycmjXDGrU54QUlynjak4v7C3C17MXC9ipBfJLjjw7LFbOcmehwK2BKmI0NkfiQctP5bBDKVwRW7hrs0WA0pJszhWgisdnk+D+CWGrpl+ztA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hVIvazu933QmFb9v1QyC9E22JbXHnsw5CoAAolF8NAU=; b=JI6YLpv2O2JFC8qYtzxxFCvF/I/qmjevENcAHCPZT+h3gPEr4aOt4Y39hwkG09A4UGxIJ6O4SncTYMUu9GjnVot9xsVUR1qhy9nUGQ0qtDOScpzeH9jPKhr2i0sxKeMrFLeIGcsNA0kTPfIxIBU7uxRfH1ZfE2asBTAuwSyNh74HISHgs/Q+Pi5k6WUsyS2+84KaHaXUd3him/fRsXd9zENox34EkVn3UpCFR44wUjIUyX1Fm9yfoEhlCZ6NttwMaJ5K/sofpRe4rEKAHEkR14vokqRbrCZ1aN5A61yJNBEck3qUnctga37jvWD9fOWZaQv0icxqCP6iOwkyXKoGuA== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:21 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:21 +0000 Date: Mon, 4 Nov 2024 12:04:19 +0100 To: dev@openvswitch.org Message-ID: <38bc91302837ed382ee20d1aef259d7d52f23db5.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0109.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::9) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DU2PEPF00028D0F:EE_|AS8PR10MB6675:EE_ X-MS-Office365-Filtering-Correlation-Id: 318bbe92-86f7-49ea-3a59-08dcfcc07082 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: WAW42sFmOdlukxGom7JUutHiL3Xg8NOjmBYe40iWTut7HdtTDoEAJ6Rw9vyrHxiq5+QRYRdROdstRdRvMSe/mg972AnK4ICYNbg/lF8/35a70EhtWndNlLJR78aiInULEZu6PRsjTczgP3XPdoZEdUbqFOciqepBOJYzfG71wc3B5wr1g92kGeuXi8+DwGDr8BfPGW6Lc7kbYh8HQZTyUhCIBK8XkmTcIHQe2pqAQ9KfZru6x3acTeb4g4Gt6D29+OG2XFysCx7TDkjpsAT2kFuhoRJwa7aZAzgbqkllmCQB/GRcESvSVzLXlNFHmqulTBIYbDCmF2bkJ8RHdgXTKWILuB76rstze494QiJ0jSV3Tt/o1OvQ43mUM8gBnmBTbZ2UIlYXctnvqEUDmgmxwUTrSWqlcg3rHscbXtf35JtKV5kDpsjtPmJpIDbR538ODmOwB+SJ8Jy1uP7doDHWW6Nvlb2MYKXSO4yLo3QdmsNRGdv1YYXVIb8e2b/RwLEQkw9y3HubKvdzzMMaUKO5+P9aHZ2MvOGzxZsWC6rSxTz/Tn9SdSO2s7SYQOWudYliP7uZIKByxthDypihi/MglhuIY+sX6N254mQmAjUYi89sN1RiiZ7xj2VOstxjJ/SJg4mXmbJksk7ugkMhVS1r4E+C7ucw9enMjrmWPPkJdLFi29dZmm6n2TdByFPx75pCxkZ3hGgOeIijpuwkmrFUXDyWKqJ9pFibvzBYKBEHR5ZM7Io6q/YKmgp/jcmdc+HMIfuM/mNpgE49UHiOBfcR0W0+rCCSf1aTHAe7k+yL4hffhwkT3QmvNsSh57ppW4u2PZhfW7QaDVPRj0oyc7Zcpi4Odcy3Z9aFoSOtH5/EvdEho+y9EXEpYt5C6nrq1s668fWh5tq+k/tli2oocA6uW7YNckE+aAOduAt3EAeYJn+AltStt6xC0Xg77zEOrticwX4IbtxL6fRXGT60g0iMc6tuUfFuPMf9hCa5Yb/rp3178M/Kk2Xo3Zb7dIIKkrKEPykf7jaWJW+USuQEIQxCeQAD5H6Z5tk0OUWhGIur7lJ62bh/IaaIsAnTbNmIE2Hq67AIQyofVwK99DJWZ3rrcI3aU3Y38fEpGXZSvQaWMGScT1UwThuWAgvmK/gWvk0MOKvbT8H1BFFj8v5waKDs3eXw5a60fA+cKdbeH99zp34G4b/3gF1l/Dzme59fEUA/ahSXnhIkSgt0CVfhpFwjVNDmGK801ABAyzSD+H5kz5vxC4YvtJ0GmQf9kpj09SuyV91fFDhzjjiq4bS/dxRxx4Dkwq7O8IhkKIh8RfLYfx30SM5L5NsADYI5iilCeYnV X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D0F.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2b69c110-6f4c-4ae9-9b47-08dcfcc06f90 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: YH0Po1tALRiemvn+ZXnOxK5dJzixHe7jEKld6e0+aFRj3Ck6y53bmSQ1E3FqOX8r4gQP7q8figVc8SUoXRLe0yOGW9ib3UJrVjn0r72jIId4TaLtNX/Fh7pregoe3xUbKDBuB5NtytCKcDRguXQswdTVsmjnZ3kL5Svkqv4RVDQWoC2Hpa0f8LRPZCg9P5qv2vfbFd6zPg+nfQdhCcROWRMuRm5KVbu/OvRaf5quZ6iIn2UVEenr5dTUUilAaFmBZ9LjGWJFbREPny/tNwu9sVK3uxIT6SlcWt7FgJislzKn600j3EaXUEsUYs5QvD7OPAcTh/JJMOT0xUJnwVHcCrRYJLXIsWIh4He3jfEpSC7RmzVfygQlGyFsmtAxmOflTkcdfqTQyAXx9Q7efhu3eAxn27GcH0jgyg2XOK+jgljoDQ/I2iirycWQrxoqV1uz1uqCpvTrjBJNTwgGTaYLq3dT9gSvp4qmwYea362hSkKu3GQ2vWQ3nWcIgUw65voGcGiandl51Uny3tUodF8p1XX8ONYMKdxvrug92aSPrrIHVY9dCiQDxzMucwI0OLazD6ZFa6TzqZAPdnGuh7c/bERWbNib7xnrXLfR0f2V6HKzuk9rea7dJZCeq2K7F+pleZWX77565oMe9fZsUAQbZUndK96f+rPW4oVwjqAZyDveua6LhjoEZBMlelL92aAXtJ974nB/Zc/aakETkBI3Rcv+YTTwvFoq8GEKVov8siEx4X0nNZ1yn1SaAECwtdk447yO50zEIjMb38O2wALK3QTjqrvMSL7uRZHr4LUQEwFty5wyy4iROU2Gy3l5BPa1XYS4cX93AlH1MBCS8MBuFVpj1GVJH35pRpY9mvtd0apuIMk0NLGr/oF8cI1AetYnX1XOm5h87ahmtpu1k+kTlMoH+p0MwBGaeA4Oj2BCYUvJGzP39XRw2yXfjdNlKg5emgQp8+BNI2Y2kK3Gzev9PN0i6rFuxcyzna/cb8LX9AI5VawBrKog0yWSRMfZnB7uE+tSlA/Z48joCzIKIWOPDh4vPBZQSW6H6g8MgcQCaELKVv5jfe8CMbnAkchlRunZfLbn+FlS4HQycZGTiKKLNjiATgwgTPwQXbQ/cfQXYU8oIky0NUh23iokso4CoTZeC1lmwquuWnToqXA4Oa619QCCN1bob+5KddzPjmLBGSS3D+//mWar/dKHcj7USnNSHzLohAR4OPdLlIi1Fhv1rnjPNyf5eYUXkpVJAGt7UcTi6d5POBjBiz0COA4MnIGQW1L/XUG5w1M58MMHCRcAk+54IrTj5qkW1FdW0x0NVOQw1Aaq09RGW8IEbVsYEZtySQf8HrFUVSWuLET2DxU9RgDd+d60ssuk5fDq6plhAMf1wo3GNDaZOVOxg4sf1dPQN4eB3m4aJJNqmg2jdh+k5A== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:22.8614 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 318bbe92-86f7-49ea-3a59-08dcfcc07082 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D0F.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR10MB6675 Subject: [ovs-dev] [PATCH ovn v2 12/32] northd: Add filtering which routes to advertise. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" previously all routes of a logical router where announced. However in some cases it makes more sense to only announce static or connected routes. Therefor we add options to LR and LRP to define which routes to advertise. Signed-off-by: Felix Huettner --- northd/en-routes-sync.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/northd/en-routes-sync.c b/northd/en-routes-sync.c index bb61e0d51..581f21b8e 100644 --- a/northd/en-routes-sync.c +++ b/northd/en-routes-sync.c @@ -15,6 +15,7 @@ #include #include "openvswitch/vlog.h" +#include "smap.h" #include "stopwatch.h" #include "northd.h" @@ -128,6 +129,13 @@ route_erase_entry(struct route_entry *route_e) free(route_e); } +static bool +get_nbrp_or_nbr_option(const struct ovn_port *op, const char *key) +{ + return smap_get_bool(&op->nbrp->options, key, + smap_get_bool(&op->od->nbr->options, key, false)); +} + static void routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_route_table *sbrec_route_table, @@ -164,6 +172,16 @@ routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, false)) { continue; } + if (route->source == ROUTE_SOURCE_CONNECTED && + !get_nbrp_or_nbr_option(route->out_port, + "dynamic-routing-connected")) { + continue; + } + if (route->source == ROUTE_SOURCE_STATIC && + !get_nbrp_or_nbr_option(route->out_port, + "dynamic-routing-static")) { + continue; + } route_e = route_lookup_or_add(&sync_routes, route->od->sb, route->out_port->key, From patchwork Mon Nov 4 11:04:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006177 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.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 4XhpYK2T82z1xwF for ; Mon, 4 Nov 2024 22:05:56 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 5E6388103B; Mon, 4 Nov 2024 11:05:54 +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 Yivayw9q3B3k; Mon, 4 Nov 2024 11:05:45 +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 A0EA38101D Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id A0EA38101D; Mon, 4 Nov 2024 11:05:34 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 73349C08A6; Mon, 4 Nov 2024 11:05:34 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4B255C08A6 for ; Mon, 4 Nov 2024 11:05:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 17927607A9 for ; Mon, 4 Nov 2024 11:04:40 +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 XwCBI_A2UbvG for ; Mon, 4 Nov 2024 11:04:32 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::62a; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org AFED4607C2 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org AFED4607C2 Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=V5/QyR4K Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2062a.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::62a]) by smtp3.osuosl.org (Postfix) with ESMTPS id AFED4607C2 for ; Mon, 4 Nov 2024 11:04:31 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=tCIPiQ4KfjfsEUKWw6hooMDNkF+lVpUgVi1CGZKV/Ke0JCvDdPUWqNYe8BbGvWmYzrPxiPuUgxrziH0PmpPBz/K5WGph/DxtFp2RPypBygT/LFylD9iiOuQ+NXUPMkDVNtYlhZ2QbY9Co1es6kijBeMRtxs0EWcdAwwN+MZ0r+ztXOja2qJNwgu4BQu3mDi/9UsPrelTgNmtX/FU45ArMWwMZ3AVCgdRCYu2YUM+rNwV2pTkKVJ8w/NPv0eXhRUauijdiHu3aWuHtGo9LM0OB4YT7xE0Q/cJsl4s2HCcVVjwmsjI/wN1euZypz4I73cajcTw5rEFVLrHxn5b/rZElw== ARC-Message-Signature: i=2; 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=O3gnOLOYwml09jV4W+8UszKu+6XiVpNKFwBjZvCuyAg=; b=IkQJajJAgKwpE108bjbz5aesWOzwl2DjnwUHaLwlVb+CfvfB6ZGk1LgI9NLgXtFFTJxbOAz8DO/nGBK+8uoazy08IL/JNnhP9DcCSmBHt/E2arnZEUFlPaLtU8X6T758LKh9mJbA8zBgitXcsCcN6CNfmy3Cxns+f6DzcBdmF3cUgYbm4qiZB87T9T2OOA8bTrjiS8o2CmRrw90Qlco+9AuNziglo6NuUCyX9kWwCEFqhmhnwJptjOguJUWRkx1P3zwwndQ9JtCqXcTLCNfkOPqijLKJ1JFhJ6cV+XHkc02NBexkHMZyH2qpJsv1iiDUpE1FSsLocRZJGrCRi9aSQA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O3gnOLOYwml09jV4W+8UszKu+6XiVpNKFwBjZvCuyAg=; b=V5/QyR4KjVerLY45doND1W25tlDENWuposDZf9+/659JwC6hsbJ2j1IAobdvhwHtx7cK8lEJvAxmyWo4+XnAfMilEexwn2KbFkdCnux9JaUxmdXBoTXepqdP9X4Zzg/KCXUOAmooJizsojYXqBYiSxu0dtL4d3ac/+z6wuTPhuc4OBPq0+CwCRH2L2h1H2pv4HvumyPX0RaHa3+2hO8nSfwY8gNrum1iafvdwOaydbfqLxjvWgZSt4p8SD2rPbj7eZ/uC3m2qneklVolu61Hntnd7+W1Olzhg0BO5DaxZEvffdu1VZeQeoKwxo1Bi0fzC3txoqlB6iaUdD/qL3eTZg== Received: from DB6PR0301CA0101.eurprd03.prod.outlook.com (2603:10a6:6:30::48) by VI1PR10MB3230.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:136::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:04:28 +0000 Received: from DB1PEPF00039232.eurprd03.prod.outlook.com (2603:10a6:6:30:cafe::69) by DB6PR0301CA0101.outlook.office365.com (2603:10a6:6:30::48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:28 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB1PEPF00039232.mail.protection.outlook.com (10.167.8.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:27 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:28 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 12579610 X-ExclaimerImprintLatency: 2941913 X-ExclaimerImprintAction: 01fdc06082414381a3a524e6dcd403d5 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NDrXKsEjgQRQVyGXd4SfpU+42I07Vn6gbpmBqj5ul6JZnICW/Nn7n24ALGmDbuTwk/E1ueg6YBTL6hWimEo5FYiGMMUUeMSqH0g5prGZxGMX9GQDZlnAIYFcw6AG/o3jTJ7Zi7M5ReI2fGZeArARqsQV19PT7+KBZ+U09Ru8Z14NGnFs9TUS3ODec0JL6DYL+yOA7O+aoONqLaTIsVTGHxSRJ55HeiBdvqHjTXB2OyvDVcrfal04f/UzqvahnDH4NhNguNY1N0A4jflgXAgTXmPFG1ClMX9Q8vZvy/KSseOQXsLWQdKyVbBUJUnrMTcrfqHss77qptLbIJJWowWkDQ== 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=O3gnOLOYwml09jV4W+8UszKu+6XiVpNKFwBjZvCuyAg=; b=fAPpH8aRprC8Xoq5wYouUthQKvjXjTgHO3nnGaN1mn8EtPpJHzs8iL7ElVZaWTrv36AQUch46dyAKOt4vg3tHhTIbw5OXC3shr5xtAbAWogRo/EkEryjL6ev0qzmjgj5stnTNeWm8Qrf/2Rug0dnhzVmZk+aUyUxrqcyem7alCEZZuFy0+hWG0P8I1nPPJiFatLCQV5znPlqE2LpoqGDQWRqJzxOUxM9uiFWO2Rceo2BgcpzzB595mrw3ermhubYwaq2R6ntJ3mkOKLxJZ1m572VlppfDSUKJP8GO7OA8jG2T3tMN+3vbwluk149RCNNuq8GDYru9fTwDSUY1nVMpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O3gnOLOYwml09jV4W+8UszKu+6XiVpNKFwBjZvCuyAg=; b=V5/QyR4KjVerLY45doND1W25tlDENWuposDZf9+/659JwC6hsbJ2j1IAobdvhwHtx7cK8lEJvAxmyWo4+XnAfMilEexwn2KbFkdCnux9JaUxmdXBoTXepqdP9X4Zzg/KCXUOAmooJizsojYXqBYiSxu0dtL4d3ac/+z6wuTPhuc4OBPq0+CwCRH2L2h1H2pv4HvumyPX0RaHa3+2hO8nSfwY8gNrum1iafvdwOaydbfqLxjvWgZSt4p8SD2rPbj7eZ/uC3m2qneklVolu61Hntnd7+W1Olzhg0BO5DaxZEvffdu1VZeQeoKwxo1Bi0fzC3txoqlB6iaUdD/qL3eTZg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:23 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:23 +0000 Date: Mon, 4 Nov 2024 12:04:21 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0120.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::18) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB1PEPF00039232:EE_|VI1PR10MB3230:EE_ X-MS-Office365-Filtering-Correlation-Id: d07ad33a-2606-4518-7be2-08dcfcc07378 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: chKEZUoiMw2SlSMH8ss65dQoOhYsgmRqwoT+yIFHrYa7QFlRJWlBD38b1kmXx53EG+pn6gkKXdMQKnsmupAgjoMiOZayPpRr8KLX/VJ8SJO+Ljs7FriVGBkpkSThfejRXjka2lDM4Ux/a2DeKGHfcAMTKHUYcP6BCb/pn+f5M1RHAt+A5xP3G8E8CRWM5g1/gXJfsqkb/+k7IYJ/kcQD1zOwcQUkNkyo+kSy3PHdyocW/YFXOC2+EyoASBiU07xRxexU5+VOqyigpqRf8TDvS8c78ZJieBnsuec9fqDzQ7Ke+hw0yLxCw89JrIzs+dEhuFDVP6wphNp01LU2P4DnvcVLaG3WYr+5egN2flh54FQn9SWT4KcFpwrND/AFNSZbtZtoyGV7xxesI5IUXDFMh6dD0vRiJwM4DY3MjgMwBC1lX3Lock37yyhELHdG4jXZGxrSYtubHIsI23PX7qJg1V00Zcnx0AaNO5KQts6MRByaRx6J+Cla/nZLKPYPuYHNeensMvnK/KjzMxYFBbWYNZ4HLlnzb13ChP1TsCcrKTgUHkd8Kmgl7d/KMSMn2aWvq6TYs/bx0ijAv7WW/Wd5oxGXYyWC+jECGCe4/D9OA/F6VwsJN0H59KYRPcLYfZRU8Dd7yml5aAu6TpxZRg0jCu2ZstwsQXqFML+C7067F2o/lcEN2rVqfsBa9pyBBm/gCC4jQWGllxMofRMeUl9/9PeymW3xwtFPR5KV5/fONrJfo/HCdWqSg5IAMHs+NZxixPF7dhOma4s1ofol3NesWpMjI+QxRMrC50M9GJapxnO7kvpH8xLH4caIgCCs4bp1vjOT8o3zn3dE52qx9p3tOfyhXa/7pyC198NfZ8DZcHAEBfBhAh1hZjT4q2ejZwlrHN9ej7IY3PNwdDYuIN4gWlK/z48u6Cu/JLCY4+DQu3mlgPMQSdiRSZOYYlmFRhM7rwqZUSQTh6aCaRaNZryCi14ZNbRWT34fxgsVyz35GE+n4hNGMf3zCxHe7jSTsGfIWqQbtqWnwAkdlhwI3CUauqzbq39BDLV18ZrvWpu9fWJI130zX1cUPOZMniD+FcK/WLANchhQUwcOJxMux/gu1h4EYJR85xVXKazdc+BU/8NSUXYfbPBnilEWmoMooAa0pgojpiM7EvyVopjAMc+YRds17CC4o5ILcDpil5PNRJYplpNR5jthg5hU7cbxS79BtrlIxgbPnoSmPUXeRQS9sQv+qA3OhgN0wb3Qe+r2D5jvNxaJvw4f3iXBBiVFNdLJ7GTja/TQ30tvHpGDMKZurvIoB1q3mqojEMD1j7WF5QpCPrys048qyVoGpDQ2Bi0V X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF00039232.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 68f10350-f6ed-4a9e-1520-08dcfcc070b2 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: USl/9KXToJRYz1zjTObdusWg4l8eWbeGlKCgim9d7tuhPhhNB4fR2QzFhqbsm8N7CP79jj0LZt9LhIUiP18FPsjXre11+Fg6qiGexRVnsqwifXagTQF7qxIzUClum0rDr3TXrwLHKiUXBZpcF3yxQQBZuNWrlDXXJpF6OkBxD9lVyAJQ5HHO7luYlHZbIo3lco/yGksKXM+7czI0BOcHk3RHpCzlcSrhchdoZWZ7Hc5DI03R2ysX1N/jDXeWF5VKlPd22N8l24I04TIiFdp3Fjg6ath0+EL36+XltHBHcJ7y+KqpK7i/f9ULVbp0yvCCFm7QJDNSg9MK02bjD5JUy5+gCyJ8xBfOodgu4CjSMICx5msUebTdONv/STwpYgtN+5E73rycZpe4fcnaCESHRoZwp9966HvGUfhkRTZozgvfs06GyN3dvpF0eZQtRmgzYEbd5RelHna2qWqoXGy8TAqESOvIyasMkid0kZAD0xlCDoOc7YZl4yILcrrOBwsa4ZeaIg5yXLW4qrS5lP4cfAKwaINKAf2M8qg+Avyon9a6jicutzFIVtADX1vVFI3RJlo7pazEMqCojeD+4LdWW9IkUsgnyZRcAXgcNF94+1rj0IwtqUAMR7jQ8Y/R68t06kMsTszi7aZd5W0ahwZC6TS2PN2IWpgP2tlqpCB5uXDGpJYcBvXdWBxM2TpoXaZaZxlGotboxh5gEdVGQ+XF/FX8VuJPc1FFRMEnnLctXL7pkrOGlxYPI5k7R8Dynn0RMYKFWIiqm3EFoFCWR+UF4SOEJwP72a/oXXXlER05sLVMXk9wj2C2bqEsH/h5WC5KDf2LMJNYQc6W62l3vlQmymcrxS2Rjm3s/vHLNqaKrFVn0AD4X6K1ScN3uNoKpkBxTkEE+Y66mgeh/4jhY9wq96DCWs/7cow9xI+F0ys8iNTF3TqwEdERJq5gdw9Ye67Zfpa8h77jhe41TPPewB0abG0bTZDgriIr2jjV2zsIXy4Fo6W+Tp0zCuTAx9scpUjK1Y3v3tlEdXg0VKi8Og1tL9c5UM2JJDoD72pfFq8H/9pPxueIh3JlKmXz3Ol9wkDjDSqevClT0N3R8UBdFYcVSy0OYRk0XZ1ONDrLVmxyPNwoztJSfwBWlJS93nGYfFZJgBwfE4TTFvgOAzQPvd3vUne/GS4VmFsdTTAOla+w4jAIFaNXNE2FWpswEZIyqHDVVkZAxV/47xa3Z0f1KhW6kRPKiZdSw2wcaCFb8ZM94/xP9+leO8D6QLrB7hLArK/W+8oSxNIUmpFlPVzqEhb0Ei/nxiVONuBsDxBq5vhnPP8dL9FizpOlv/tvWpcz5NJlehf5wFU4IHSYmfgxBxGHsMLfsaW4AlbG+zO+L8UXFpjz6jz1bz6eHdTnn8Q1KqRABuC38k6MckRR4hhjVJERqg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(36860700013)(376014)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:27.5963 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d07ad33a-2606-4518-7be2-08dcfcc07378 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF00039232.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR10MB3230 Subject: [ovs-dev] [PATCH ovn v2 13/32] northd: Handle learned routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" here we expand the previous routes-sync engine node to not only advertise routes to the southbound table, but also learn received routes from this table. These routes are then passed to the same logic that connected and static routes are using for flow generation. However we prioritize these routes lower than connected or static routes as information in cluster (for the same prefix length) should always be more correct then learned routes. This is also consistent with the behaviour of phyiscal routers. Signed-off-by: Felix Huettner --- northd/en-lflow.c | 4 +- northd/en-routes-sync.c | 156 ++++++++++++++++++++++++++++++-- northd/en-routes-sync.h | 6 +- northd/inc-proc-northd.c | 2 + northd/northd.c | 186 ++++++++++++++++++++++++--------------- northd/northd.h | 30 ++++++- ovn-sb.ovsschema | 5 +- ovn-sb.xml | 11 +++ tests/ovn-northd.at | 42 ++++----- 9 files changed, 335 insertions(+), 107 deletions(-) diff --git a/northd/en-lflow.c b/northd/en-lflow.c index fa1f0236d..8995f0300 100644 --- a/northd/en-lflow.c +++ b/northd/en-lflow.c @@ -46,6 +46,8 @@ lflow_get_input_data(struct engine_node *node, engine_get_input_data("bfd_sync", node); struct routes_data *routes_data = engine_get_input_data("routes", node); + struct routes_sync_data *routes_sync_data = + engine_get_input_data("routes_sync", node); struct route_policies_data *route_policies_data = engine_get_input_data("route_policies", node); struct port_group_data *pg_data = @@ -82,7 +84,7 @@ lflow_get_input_data(struct engine_node *node, lflow_input->lb_datapaths_map = &northd_data->lb_datapaths_map; lflow_input->svc_monitor_map = &northd_data->svc_monitor_map; lflow_input->bfd_ports = &bfd_sync_data->bfd_ports; - lflow_input->parsed_routes = &routes_data->parsed_routes; + lflow_input->parsed_routes = &routes_sync_data->parsed_routes; lflow_input->route_tables = &routes_data->route_tables; lflow_input->route_policies = &route_policies_data->route_policies; diff --git a/northd/en-routes-sync.c b/northd/en-routes-sync.c index 581f21b8e..c932cc34e 100644 --- a/northd/en-routes-sync.c +++ b/northd/en-routes-sync.c @@ -29,33 +29,86 @@ VLOG_DEFINE_THIS_MODULE(en_routes_sync); static void routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_route_table *sbrec_route_table, - const struct hmap *parsed_routes); + const struct hmap *parsed_routes, + const struct hmap *lr_ports, + const struct ovn_datapaths *lr_datapaths, + struct hmap *parsed_routes_out); + +static void +routes_sync_init(struct routes_sync_data *data) +{ + hmap_init(&data->parsed_routes); +} + +static void +routes_sync_destroy(struct routes_sync_data *data) +{ + struct parsed_route *r; + HMAP_FOR_EACH_POP (r, key_node, &data->parsed_routes) { + parsed_route_free(r); + } + hmap_destroy(&data->parsed_routes); +} + +bool +routes_sync_northd_change_handler(struct engine_node *node, + void *data OVS_UNUSED) +{ + struct northd_data *northd_data = engine_get_input_data("northd", node); + if (!northd_has_tracked_data(&northd_data->trk_data)) { + return false; + } + + /* This node uses the below data from the en_northd engine node. + * See (lr_stateful_get_input_data()) + * 1. northd_data->lr_datapaths + * 2. northd_data->lr_ports + * This data gets updated when a logical router or logical router port + * is created or deleted. + * Northd engine node presently falls back to full recompute when + * this happens and so does this node. + * Note: When we add I-P to the created/deleted logical routers or + * logical router ports, we need to revisit this handler. + */ + return true; +} void *en_routes_sync_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED) { - return NULL; + struct routes_sync_data *data = xzalloc(sizeof *data); + routes_sync_init(data); + return data; } void -en_routes_sync_cleanup(void *data_ OVS_UNUSED) +en_routes_sync_cleanup(void *data) { + routes_sync_destroy(data); } void -en_routes_sync_run(struct engine_node *node, void *data_ OVS_UNUSED) +en_routes_sync_run(struct engine_node *node, void *data) { + routes_sync_destroy(data); + routes_sync_init(data); + + struct routes_sync_data *routes_sync_data = data; struct routes_data *routes_data = engine_get_input_data("routes", node); const struct engine_context *eng_ctx = engine_get_context(); const struct sbrec_route_table *sbrec_route_table = EN_OVSDB_GET(engine_get_input("SB_route", node)); + struct northd_data *northd_data = engine_get_input_data("northd", node); stopwatch_start(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); routes_table_sync(eng_ctx->ovnsb_idl_txn, sbrec_route_table, - &routes_data->parsed_routes); + &routes_data->parsed_routes, + &northd_data->lr_ports, + &northd_data->lr_datapaths, + &routes_sync_data->parsed_routes); stopwatch_stop(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); engine_set_node_state(node, EN_UPDATED); @@ -136,10 +189,93 @@ get_nbrp_or_nbr_option(const struct ovn_port *op, const char *key) smap_get_bool(&op->od->nbr->options, key, false)); } +static void +parse_route_from_sbrec_route(struct hmap *parsed_routes_out, + const struct hmap *lr_ports, + const struct hmap *lr_datapaths, + const struct sbrec_route *route) +{ + const struct ovn_datapath *od = ovn_datapath_from_sbrec( + NULL, lr_datapaths, route->datapath); + + /* Verify that the next hop is an IP address with an all-ones mask. */ + struct in6_addr *nexthop = xmalloc(sizeof(*nexthop)); + unsigned int plen; + if (!ip46_parse_cidr(route->nexthop, nexthop, &plen)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "bad 'nexthop' %s in learned route " + UUID_FMT, route->nexthop, + UUID_ARGS(&route->header_.uuid)); + free(nexthop); + return; + } + if ((IN6_IS_ADDR_V4MAPPED(nexthop) && plen != 32) || + (!IN6_IS_ADDR_V4MAPPED(nexthop) && plen != 128)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "bad next hop mask %s in learned route " + UUID_FMT, route->nexthop, + UUID_ARGS(&route->header_.uuid)); + free(nexthop); + return; + } + + /* Parse ip_prefix */ + struct in6_addr prefix; + if (!ip46_parse_cidr(route->ip_prefix, &prefix, &plen)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "bad 'ip_prefix' %s in learned route " + UUID_FMT, route->ip_prefix, + UUID_ARGS(&route->header_.uuid)); + free(nexthop); + return; + } + + /* Verify that ip_prefix and nexthop have same address familiy. */ + if (IN6_IS_ADDR_V4MAPPED(&prefix) != IN6_IS_ADDR_V4MAPPED(nexthop)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "Address family doesn't match between 'ip_prefix'" + " %s and 'nexthop' %s in learned route "UUID_FMT, + route->ip_prefix, route->nexthop, + UUID_ARGS(&route->header_.uuid)); + free(nexthop); + return; + } + + /* Verify that ip_prefix and nexthop are on the same network. */ + const char *lrp_addr_s = NULL; + struct ovn_port *out_port = NULL; + if (!find_route_outport(lr_ports, route->logical_port, + route->ip_prefix, route->nexthop, + IN6_IS_ADDR_V4MAPPED(&prefix), + &out_port, &lrp_addr_s)) { + free(nexthop); + return; + } + + parsed_route_add( + od, + nexthop, + prefix, + plen, + false, + lrp_addr_s, + out_port, + 0, + false, + false, + ROUTE_SOURCE_LEARNED, + &route->header_, + parsed_routes_out + ); +} + static void routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_route_table *sbrec_route_table, - const struct hmap *parsed_routes) + const struct hmap *parsed_routes, + const struct hmap *lr_ports, + const struct ovn_datapaths *lr_datapaths, + struct hmap *parsed_routes_out) { if (!ovnsb_txn) { return; @@ -159,9 +295,17 @@ routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, sb_route->type); route_e->stale = true; route_e->sb_route = sb_route; + + if (!strcmp(route_e->type, "receive")) { + parse_route_from_sbrec_route(parsed_routes_out, lr_ports, + &lr_datapaths->datapaths, + sb_route); + } } HMAP_FOR_EACH (route, key_node, parsed_routes) { + hmap_insert(parsed_routes_out, &parsed_route_clone(route)->key_node, + parsed_route_hash(route)); if (route->is_discard_route) { continue; } diff --git a/northd/en-routes-sync.h b/northd/en-routes-sync.h index ecd41b0b9..391f17452 100644 --- a/northd/en-routes-sync.h +++ b/northd/en-routes-sync.h @@ -16,10 +16,8 @@ #include "lib/inc-proc-eng.h" -/*struct routes_sync_data { - struct sset routes; -};*/ - +bool routes_sync_northd_change_handler(struct engine_node *node, + void *data OVS_UNUSED); void *en_routes_sync_init(struct engine_node *, struct engine_arg *); void en_routes_sync_cleanup(void *data); void en_routes_sync_run(struct engine_node *, void *data); diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index bc361ce72..741295709 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -269,6 +269,8 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_routes_sync, &en_routes, NULL); engine_add_input(&en_routes_sync, &en_sb_route, NULL); + engine_add_input(&en_routes_sync, &en_northd, + routes_sync_northd_change_handler); engine_add_input(&en_sync_meters, &en_nb_acl, NULL); engine_add_input(&en_sync_meters, &en_nb_meter, NULL); diff --git a/northd/northd.c b/northd/northd.c index 4ad760025..b4412e70c 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -300,11 +300,14 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); /* * Route offsets implement logic to prioritize traffic for routes with * same ip_prefix values: - * - connected route overrides static one; - * - static route overrides src-ip route. */ -#define ROUTE_PRIO_OFFSET_MULTIPLIER 3 -#define ROUTE_PRIO_OFFSET_STATIC 1 -#define ROUTE_PRIO_OFFSET_CONNECTED 2 + * 1. (highest priority) connected routes + * 2. static routes + * 3. routes learned from the outside via ovn-controller (e.g. bgp) + * 4. (lowest priority) src-ip routes */ +#define ROUTE_PRIO_OFFSET_MULTIPLIER 4 +#define ROUTE_PRIO_OFFSET_LEARNED 1 +#define ROUTE_PRIO_OFFSET_STATIC 2 +#define ROUTE_PRIO_OFFSET_CONNECTED 3 /* Returns the type of the datapath to which a flow with the given 'stage' may * be added. */ @@ -11046,7 +11049,7 @@ build_route_table_lflow(struct ovn_datapath *od, struct lflow_table *lflows, } static uint32_t -route_hash(struct parsed_route *route) +route_hash(const struct parsed_route *route) { return hash_bytes(&route->prefix, sizeof route->prefix, (uint32_t)route->plen); @@ -11097,7 +11100,7 @@ parsed_route_lookup(struct hmap *routes, size_t hash, continue; } - if (pr->route != new_pr->route) { + if (pr->source_hint != new_pr->source_hint) { continue; } @@ -11123,7 +11126,36 @@ parsed_route_lookup(struct hmap *routes, size_t hash, return NULL; } -static void +struct parsed_route * parsed_route_clone(const struct parsed_route *pr) { + struct parsed_route *new_pr = xzalloc(sizeof *new_pr); + new_pr->prefix = pr->prefix; + new_pr->plen = pr->plen; + if (pr->nexthop) { + new_pr->nexthop = xmemdup(pr->nexthop, sizeof(*pr->nexthop)); + } + new_pr->route_table_id = pr->route_table_id; + new_pr->is_src_route = pr->is_src_route; + new_pr->hash = route_hash(pr); + new_pr->ecmp_symmetric_reply = pr->ecmp_symmetric_reply; + new_pr->is_discard_route = pr->is_discard_route; + new_pr->od = pr->od; + new_pr->stale = pr->stale; + new_pr->source = pr->source; + new_pr->source_hint = pr->source_hint; + if (pr->lrp_addr_s) { + new_pr->lrp_addr_s = xstrdup(pr->lrp_addr_s); + } + if (pr->out_port) { + new_pr->out_port = pr->out_port; + } + return new_pr; +} + +size_t parsed_route_hash(const struct parsed_route *pr) { + return uuid_hash(&pr->od->key); +} + +void parsed_route_free(struct parsed_route *pr) { if (pr->nexthop) { free(pr->nexthop); @@ -11135,7 +11167,7 @@ parsed_route_free(struct parsed_route *pr) { free(pr); } -static void +void parsed_route_add(const struct ovn_datapath *od, struct in6_addr *nexthop, const struct in6_addr prefix, @@ -11143,11 +11175,11 @@ parsed_route_add(const struct ovn_datapath *od, bool is_discard_route, const char *lrp_addr_s, const struct ovn_port *out_port, - const struct nbrec_logical_router_static_route *route, uint32_t route_table_id, bool is_src_route, bool ecmp_symmetric_reply, enum route_source source, + const struct ovsdb_idl_row *source_hint, struct hmap *routes) { @@ -11166,9 +11198,9 @@ parsed_route_add(const struct ovn_datapath *od, } new_pr->out_port = out_port; new_pr->source = source; - new_pr->route = route; + new_pr->source_hint = source_hint; - size_t hash = uuid_hash(&od->key); + size_t hash = parsed_route_hash(new_pr); struct parsed_route *pr = parsed_route_lookup(routes, hash, new_pr); if (!pr) { hmap_insert(routes, &new_pr->key_node, hash); @@ -11294,8 +11326,8 @@ parsed_routes_add_static(const struct ovn_datapath *od, } parsed_route_add(od, nexthop, prefix, plen, is_discard_route, lrp_addr_s, - out_port, route, route_table_id, is_src_route, - ecmp_symmetric_reply, source, + out_port, route_table_id, is_src_route, + ecmp_symmetric_reply, source, &route->header_, routes); } @@ -11311,9 +11343,9 @@ parsed_routes_add_connected(const struct ovn_datapath *od, parsed_route_add(od, NULL, prefix, addr->plen, false, addr->addr_s, op, - NULL, 0, false, + 0, false, false, ROUTE_SOURCE_CONNECTED, - routes); + &op->nbrp->header_, routes); } for (int i = 0; i < op->lrp_networks.n_ipv6_addrs; i++) { @@ -11323,9 +11355,9 @@ parsed_routes_add_connected(const struct ovn_datapath *od, parsed_route_add(od, NULL, prefix, addr->plen, false, addr->addr_s, op, - NULL, 0, false, + 0, false, false, ROUTE_SOURCE_CONNECTED, - routes); + &op->nbrp->header_, routes); } } @@ -11543,6 +11575,41 @@ build_route_match(const struct ovn_port *op_inport, uint32_t rtb_id, network_s, plen); } +bool +find_route_outport(const struct hmap *lr_ports, const char *output_port, + const char *ip_prefix, const char *nexthop, bool is_ipv4, + struct ovn_port **out_port, const char **lrp_addr_s) +{ + *out_port = ovn_port_find(lr_ports, output_port); + if (!*out_port) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "Bad out port %s for static route %s", + output_port, ip_prefix); + return false; + } + if (nexthop[0]) { + *lrp_addr_s = find_lrp_member_ip(*out_port, nexthop); + } + if (!*lrp_addr_s) { + /* There are no IP networks configured on the router's port via + * which 'route->nexthop' is theoretically reachable. But since + * 'out_port' has been specified, we honor it by trying to reach + * 'route->nexthop' via the first IP address of 'out_port'. + * (There are cases, e.g in GCE, where each VM gets a /32 IP + * address and the default gateway is still reachable from it.) */ + if (is_ipv4) { + if ((*out_port)->lrp_networks.n_ipv4_addrs) { + *lrp_addr_s = (*out_port)->lrp_networks.ipv4_addrs[0].addr_s; + } + } else { + if ((*out_port)->lrp_networks.n_ipv6_addrs) { + *lrp_addr_s = (*out_port)->lrp_networks.ipv6_addrs[0].addr_s; + } + } + } + return true; +} + /* Output: p_lrp_addr_s and p_out_port. */ static bool find_static_route_outport(const struct ovn_datapath *od, @@ -11553,33 +11620,10 @@ find_static_route_outport(const struct ovn_datapath *od, const char *lrp_addr_s = NULL; struct ovn_port *out_port = NULL; if (route->output_port) { - out_port = ovn_port_find(lr_ports, route->output_port); - if (!out_port) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); - VLOG_WARN_RL(&rl, "Bad out port %s for static route %s", - route->output_port, route->ip_prefix); + if (!find_route_outport(lr_ports, route->output_port, route->ip_prefix, + route->nexthop, is_ipv4, &out_port, &lrp_addr_s)) { return false; } - if (route->nexthop[0]) { - lrp_addr_s = find_lrp_member_ip(out_port, route->nexthop); - } - if (!lrp_addr_s) { - /* There are no IP networks configured on the router's port via - * which 'route->nexthop' is theoretically reachable. But since - * 'out_port' has been specified, we honor it by trying to reach - * 'route->nexthop' via the first IP address of 'out_port'. - * (There are cases, e.g in GCE, where each VM gets a /32 IP - * address and the default gateway is still reachable from it.) */ - if (is_ipv4) { - if (out_port->lrp_networks.n_ipv4_addrs) { - lrp_addr_s = out_port->lrp_networks.ipv4_addrs[0].addr_s; - } - } else { - if (out_port->lrp_networks.n_ipv6_addrs) { - lrp_addr_s = out_port->lrp_networks.ipv6_addrs[0].addr_s; - } - } - } } else { /* output_port is not specified, find the * router port matching the next hop. */ @@ -11618,7 +11662,6 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, struct ds *route_match, struct lflow_ref *lflow_ref) { - const struct nbrec_logical_router_static_route *st_route = route->route; struct ds match = DS_EMPTY_INITIALIZER; struct ds actions = DS_EMPTY_INITIALIZER; struct ds ecmp_reply = DS_EMPTY_INITIALIZER; @@ -11635,12 +11678,12 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, free(cidr); ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DEFRAG, 100, ds_cstr(&match), "ct_next;", - &st_route->header_, lflow_ref); + route->source_hint, lflow_ref); /* And packets that go out over an ECMP route need conntrack */ ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DEFRAG, 100, ds_cstr(route_match), "ct_next;", - &st_route->header_, lflow_ref); + route->source_hint, lflow_ref); /* Save src eth and inport in ct_label for packets that arrive over * an ECMP route. @@ -11656,7 +11699,7 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, out_port->sb->tunnel_key); ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_ECMP_STATEFUL, 100, ds_cstr(&match), ds_cstr(&actions), - &st_route->header_, + route->source_hint, lflow_ref); /* Bypass ECMP selection if we already have ct_label information @@ -11676,13 +11719,13 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, port_ip, out_port->json_key); ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING, 10300, ds_cstr(&match), ds_cstr(&actions), - &st_route->header_, + route->source_hint, lflow_ref); /* Egress reply traffic for symmetric ECMP routes skips router policies. */ ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_POLICY, 65535, ds_cstr(&ecmp_reply), "next;", - &st_route->header_, + route->source_hint, lflow_ref); /* Use REG_ECMP_ETH_FULL to pass the eth field from ct_label to eth.dst to @@ -11699,7 +11742,7 @@ add_ecmp_symmetric_reply_flows(struct lflow_table *lflows, " pop(" REG_ECMP_ETH_FULL "); next;"; ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_ARP_RESOLVE, 200, ds_cstr(&ecmp_reply), - action, &st_route->header_, + action, route->source_hint, lflow_ref); ds_destroy(&match); @@ -11715,6 +11758,8 @@ route_source_to_offset(enum route_source source) return ROUTE_PRIO_OFFSET_CONNECTED; case ROUTE_SOURCE_STATIC: return ROUTE_PRIO_OFFSET_STATIC; + case ROUTE_SOURCE_LEARNED: + return ROUTE_PRIO_OFFSET_LEARNED; default: OVS_NOT_REACHED(); } @@ -11767,17 +11812,16 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, struct ds match = DS_EMPTY_INITIALIZER; struct sset visited_ports = SSET_INITIALIZER(&visited_ports); LIST_FOR_EACH (er, list_node, &eg->route_list) { - const struct parsed_route *route_ = er->route; - const struct nbrec_logical_router_static_route *route = route_->route; + const struct parsed_route *route = er->route; /* Symmetric ECMP reply is only usable on gateway routers. * It is NOT usable on distributed routers with a gateway port. */ if (smap_get(&od->nbr->options, "chassis") && - route_->ecmp_symmetric_reply && sset_add(&visited_ports, - route_->out_port->key)) { - add_ecmp_symmetric_reply_flows(lflows, od, route_->lrp_addr_s, - route_->out_port, - route_, &route_match, + route->ecmp_symmetric_reply && sset_add(&visited_ports, + route->out_port->key)) { + add_ecmp_symmetric_reply_flows(lflows, od, route->lrp_addr_s, + route->out_port, + route, &route_match, lflow_ref); } ds_clear(&match); @@ -11787,19 +11831,19 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, ds_clear(&actions); ds_put_format(&actions, "%s = ", is_ipv4 ? REG_NEXT_HOP_IPV4 : REG_NEXT_HOP_IPV6); - ipv6_format_mapped(route_->nexthop, &actions); + ipv6_format_mapped(route->nexthop, &actions); ds_put_format(&actions, "; " "%s = %s; " "eth.src = %s; " "outport = %s; " "next;", is_ipv4 ? REG_SRC_IPV4 : REG_SRC_IPV6, - route_->lrp_addr_s, - route_->out_port->lrp_networks.ea_s, - route_->out_port->json_key); + route->lrp_addr_s, + route->out_port->lrp_networks.ea_s, + route->out_port->json_key); ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING_ECMP, 100, ds_cstr(&match), ds_cstr(&actions), - &route->header_, lflow_ref); + route->source_hint, lflow_ref); } sset_destroy(&visited_ports); ds_destroy(&match); @@ -11878,19 +11922,17 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, static void build_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, - const struct parsed_route *route_, + const struct parsed_route *route, const struct sset *bfd_ports, struct lflow_ref *lflow_ref) { - const struct nbrec_logical_router_static_route *route = route_->route; - - char *prefix_s = build_route_prefix_s(&route_->prefix, route_->plen); - add_route(lflows, route_->is_discard_route ? od : route_->out_port->od, - route_->out_port, route_->lrp_addr_s, prefix_s, - route_->plen, route_->nexthop, route_->is_src_route, - route_->route_table_id, bfd_ports, - route ? &route->header_ : &route_->out_port->nbrp->header_, - route_->is_discard_route, route_->source, lflow_ref); + char *prefix_s = build_route_prefix_s(&route->prefix, route->plen); + add_route(lflows, route->is_discard_route ? od : route->out_port->od, + route->out_port, route->lrp_addr_s, prefix_s, + route->plen, route->nexthop, route->is_src_route, + route->route_table_id, bfd_ports, + route->source_hint, + route->is_discard_route, route->source, lflow_ref); free(prefix_s); } diff --git a/northd/northd.h b/northd/northd.h index 77faab65d..126d58626 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -186,6 +186,10 @@ struct routes_data { struct hmap bfd_active_connections; }; +struct routes_sync_data { + struct hmap parsed_routes; +}; + struct route_policies_data { struct hmap route_policies; struct hmap bfd_active_connections; @@ -701,6 +705,8 @@ enum route_source { ROUTE_SOURCE_CONNECTED, /* the route is derived from a northbound static route entry */ ROUTE_SOURCE_STATIC, + /* the route is learned by an ovn-controller */ + ROUTE_SOURCE_LEARNED, }; struct parsed_route { @@ -711,16 +717,38 @@ struct parsed_route { bool is_src_route; uint32_t route_table_id; uint32_t hash; - const struct nbrec_logical_router_static_route *route; bool ecmp_symmetric_reply; bool is_discard_route; const struct ovn_datapath *od; bool stale; enum route_source source; + const struct ovsdb_idl_row *source_hint; char *lrp_addr_s; const struct ovn_port *out_port; }; +struct parsed_route * parsed_route_clone(const struct parsed_route *pr); +size_t parsed_route_hash(const struct parsed_route *pr); +void parsed_route_free(struct parsed_route *pr); +void parsed_route_add(const struct ovn_datapath *od, + struct in6_addr *nexthop, + const struct in6_addr prefix, + unsigned int plen, + bool is_discard_route, + const char *lrp_addr_s, + const struct ovn_port *out_port, + uint32_t route_table_id, + bool is_src_route, + bool ecmp_symmetric_reply, + enum route_source source, + const struct ovsdb_idl_row *source_hint, + struct hmap *routes); + +bool +find_route_outport(const struct hmap *lr_ports, const char *output_port, + const char *ip_prefix, const char *nexthop, bool is_ipv4, + struct ovn_port **out_port, const char **lrp_addr_s); + void ovnnb_db_run(struct northd_input *input_data, struct northd_data *data, struct ovsdb_idl_txn *ovnnb_txn, diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema index 22e43dc8a..74540782e 100644 --- a/ovn-sb.ovsschema +++ b/ovn-sb.ovsschema @@ -1,7 +1,7 @@ { "name": "OVN_Southbound", "version": "20.38.0", - "cksum": "956398967 32154", + "cksum": "1944407838 32212", "tables": { "SB_Global": { "columns": { @@ -625,11 +625,12 @@ "refTable": "Datapath_Binding"}}}, "logical_port": {"type": "string"}, "ip_prefix": {"type": "string"}, + "nexthop": {"type": "string"}, "type": {"type": {"key": {"type": "string", "enum": ["set", ["advertise", "receive"]]}, "min": 1, "max": 1}}}, - "indexes": [["datapath", "logical_port", "ip_prefix"]], + "indexes": [["datapath", "logical_port", "ip_prefix", "nexthop"]], "isRoot": true} } } diff --git a/ovn-sb.xml b/ovn-sb.xml index a65bd2cbb..493b7e839 100644 --- a/ovn-sb.xml +++ b/ovn-sb.xml @@ -5213,6 +5213,17 @@ tcp.flags = RST;

+ +

+ If the type is advertise then this is empty. +

+ +

+ If the type is receive then this is the nexthop ip we + from the outside. +

+
+

If the route is to be exported from OVN to the outside network or if diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index 4588a65c6..9583df998 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -6810,9 +6810,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=97 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = 1; next;) + table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = 1; next;) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | ovn_strip_lflows], [0], [dnl @@ -6828,9 +6828,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=97 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | sed 's/192\.168\.0\..0/192.168.0.??/' | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing_ecmp), priority=0 , match=(1), action=(drop;) @@ -6857,9 +6857,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=97 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | sed 's/192\.168\.0\..0/192.168.0.??/' | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing_ecmp), priority=0 , match=(1), action=(drop;) @@ -6875,14 +6875,14 @@ check ovn-nbctl --wait=sb lr-route-add lr0 1.0.0.0/24 192.168.0.10 ovn-sbctl dump-flows lr0 > lr0flows AT_CHECK([grep -e "lr_in_ip_routing.*192.168.0.10" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=73 , match=(reg7 == 0 && ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 0 && ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) check ovn-nbctl --wait=sb lr-route-add lr0 2.0.0.0/24 lr0-public ovn-sbctl dump-flows lr0 > lr0flows AT_CHECK([grep -e "lr_in_ip_routing.*2.0.0.0" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=73 , match=(reg7 == 0 && ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 0 && ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CLEANUP @@ -7306,16 +7306,16 @@ AT_CHECK([grep "lr_in_ip_routing_pre" lr0flows | ovn_strip_lflows], [0], [dnl grep -e "(lr_in_ip_routing ).*outport" lr0flows AT_CHECK([grep -e "(lr_in_ip_routing ).*outport" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=1 , match=(reg7 == 0 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=1 , match=(reg7 == 2 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lrp0" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lrp1" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:101; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=194 , match=(inport == "lrp2" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:201; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=73 , match=(reg7 == 1 && ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.1.10; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.1.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=74 , match=(ip4.dst == 192.168.2.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.2.1; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=97 , match=(reg7 == 2 && ip4.dst == 1.1.1.1/32), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.20; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 2 && ip4.dst == 1.1.1.1/32), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.20; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=2 , match=(reg7 == 0 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=2 , match=(reg7 == 2 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp0" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp1" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:101; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp2" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:201; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 1 && ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.1.10; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.1.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.2.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.2.1; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) ]) AT_CLEANUP From patchwork Mon Nov 4 11:04:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006173 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=dlbMJZd+; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=dlbMJZd+; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpXW25Wsz1xxN for ; Mon, 4 Nov 2024 22:05:15 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 83C964064D; Mon, 4 Nov 2024 11:05:13 +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 7JcUW2pVZMC9; Mon, 4 Nov 2024 11:05:10 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org CD6E340594 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=dlbMJZd+; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=dlbMJZd+ Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id CD6E340594; Mon, 4 Nov 2024 11:04:59 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2D7A6C08B4; Mon, 4 Nov 2024 11:04:59 +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 19901C08A8 for ; Mon, 4 Nov 2024 11:04:57 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 19B504063F for ; Mon, 4 Nov 2024 11:04:36 +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 gsQBSrCMCwn0 for ; Mon, 4 Nov 2024 11:04:33 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:260d::61b; helo=eur03-dba-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 47494405B1 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 47494405B1 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2061b.outbound.protection.outlook.com [IPv6:2a01:111:f403:260d::61b]) by smtp2.osuosl.org (Postfix) with ESMTPS id 47494405B1 for ; Mon, 4 Nov 2024 11:04:33 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=u2H0hhNtgkhphquXswM6afzYCiFXEgARlxHuvQCvPZd7Yoq849v7T4s4pnSrI4cOnjCKgXiBALkbkWuPfuCri41t8yjMlWmoMqJhXcXSv09YY5AgkwZPG3tjUHm9wmC6+QhSrZ389eLJws4mGqh10ZsZcmb/nYaF2UOQPFwYABtLweEOAQV6l8ktZE68H1a8Q87OCKaH46xdN9DIf2hxYxuKOu03shrYSSSb1LkcxuwNDUOxb5lgGW9XkIVq/JqzPDgT3ESiW4vMEtFZcNTF98xoFcDNniQggCcoht5bPd1x6rZFHFztkcvqrAbTnNUOSNBlenIF2JIjhTGX1XWaNw== ARC-Message-Signature: i=2; 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=weXdITvYFYpPg5jw9Pvl2/e4Ei5zNn7yiJ7w57LmiLk=; b=aI0fK364CQc0tmxsd/MomwZPBJcatmXkqBRXA8Su8nqdGNyewJLr2b4BSk1oRgfTS9uexwfdsrxInpQX+TRFpteTrdthgwLQTtlS8dMGnhiejO0oBlxkiAMyxbys9aQtoihmnq1T93xcGJEvT8e+Pcgk5q73Bh2eKpYmUu0b2/+woeoU0pIWNFUiuZM1qS6elVc2wgdgisGnNEvT+JVfS3ciaLUtRwBzkMXmO6w2KB1LkpzG3ZB2G33/kQmccD9JroXe5jJSQvoc4m2zCMog1C3rDnjG7i5fHRNREtQctl7J4e2Ts5DJz/up3F+hIrSwtrkpdzPBIVQbgrACuNkSaA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=weXdITvYFYpPg5jw9Pvl2/e4Ei5zNn7yiJ7w57LmiLk=; b=dlbMJZd+nC/tpzEAHyK0OIraywkjGEQIm6VMGHaFGYBGzROMVwNBsJN5lfJ/7bI3HxWXgyCyA2kA9Iz9Mb1uckFjbDLM28FzYFkTbvkr1wnaC2c+X6r7PB0IdFwrbO95m+r5lj4Vt4sqocNGvGUydT4/OZ7Qw7bJy/q3/M6Vcpwo94vW+o3iFVra4PQdxXWP2I7HBF+RvzIKVNGcj79lJzE04UkKJykeyqLdNS7GfkXR2PRRCjzuwRtOO944LhBhS+ZVBz7RmcfTGIufBX1Cr9OqVt0dzSrJT1TPd2VbmeRzrAYyq7hnDRr1dLekSiGXip4QAFnu3QdONLi9jMrjBw== Received: from DU7P190CA0028.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:550::14) by AS2PR10MB7779.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:647::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:04:30 +0000 Received: from DB1PEPF000509F5.eurprd02.prod.outlook.com (2603:10a6:10:550:cafe::9b) by DU7P190CA0028.outlook.office365.com (2603:10a6:10:550::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:30 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB1PEPF000509F5.mail.protection.outlook.com (10.167.242.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:28 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:29 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4353208 X-ExclaimerImprintLatency: 2367381 X-ExclaimerImprintAction: 2a6117f0f8c64f8f80bf5c1f102cdf6a ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pTRUaqJu2SqQy9r+JHOQhP4Hzta1PHTZ5G+4+mm9m4TkVdvhPUOuRcz2fUrMdT7ao6XaPhPetGIPzYj45w8LBPO9xLgpfLz02G6HCqdpTI8KnKqVYUHXybYvRydapHPNYIGFJl7fNs86mNdKMyxhHtz3oIxXZ9eEjcDiZC8vSxyLsJguOjdAp8Xs7dMks4aWwjdTZky/A8C5hUTdsS2yiDVkkwFuQHy5QwBZAcNDF0eZvMxevVa7+BLseJJh+HChkt5TjxNvEKgf17StnpySxsyoc1aAk2dQrNhyQm4dut4cqG2kJ8Q5qbQ1QLk1FGNBE2wUyvKofYyQ/a9fnJCIdQ== 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=weXdITvYFYpPg5jw9Pvl2/e4Ei5zNn7yiJ7w57LmiLk=; b=B42SmmH/KY7RfPl3wbzi7gPKGAHmX0O+VER9wDGiyY4ph01XD4pEl4kDIfbbMEyRE3NRSIREAhL/GIrnjnwU1iTQAJoXoHrJhFsVxMFMib6Vou5OdIuXYeHs4yu0z9zmcshVFcWiZDzT+iUSqddjHvphGIl26I4L98JIOg5vgkdSz+z0Na4OrtMK1CT1zbRCUzh82vSwCbER8nv99yZyLEKchkduhRLkORl2582RprGiKeXqS4Ub0ys3ZnAK1QRFaojD8wZFJx2qdAtqhlOYHr5ZxCS8eDX8lciGrKcfIzrBhkQ4+YvjoqIFVD9OrnA/bqUbveXPFYMRka2bT3UwoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=weXdITvYFYpPg5jw9Pvl2/e4Ei5zNn7yiJ7w57LmiLk=; b=dlbMJZd+nC/tpzEAHyK0OIraywkjGEQIm6VMGHaFGYBGzROMVwNBsJN5lfJ/7bI3HxWXgyCyA2kA9Iz9Mb1uckFjbDLM28FzYFkTbvkr1wnaC2c+X6r7PB0IdFwrbO95m+r5lj4Vt4sqocNGvGUydT4/OZ7Qw7bJy/q3/M6Vcpwo94vW+o3iFVra4PQdxXWP2I7HBF+RvzIKVNGcj79lJzE04UkKJykeyqLdNS7GfkXR2PRRCjzuwRtOO944LhBhS+ZVBz7RmcfTGIufBX1Cr9OqVt0dzSrJT1TPd2VbmeRzrAYyq7hnDRr1dLekSiGXip4QAFnu3QdONLi9jMrjBw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:25 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:25 +0000 Date: Mon, 4 Nov 2024 12:04:23 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0118.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::13) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB1PEPF000509F5:EE_|AS2PR10MB7779:EE_ X-MS-Office365-Filtering-Correlation-Id: 8890d6d0-127e-4d0b-daea-08dcfcc07401 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: oLZlJe2KBqjV5GUxK4RfQbSdboa2YORHJ1bSlEGHrzlrvbeTlyQmpQjfBihlSw3ZOkXhFKHZk2UDbG0KZGX8Q/uvd70hhPk4YYHSB3oos4vE5SSOEFKgoK6affT0YY7mpB2SSoWjIUqoJIx9huAYcyfMxY6w2ngUXhDhDnTu8NB7wxM4h9VofbelImaHq2iB1POVaR09QMnPYtXxslFwb8ZeI/mm2hS9WaZxZXyNw2bZJ0QuzJtLSjlVK2YZqUJ7y3Y872dEa7VSmen+vg+U43KTJ4vnEnC0ns9Wm4S7g3ktokHbir7j572fhRAPg689Nujg50DfptmS2PHigzVCSSZXgozcylrZNU99baUYEr3vXtP+By/phaeyiYs42dYGscx17WHjbqYxh8IIIadxiwSvCWIrom/8i/9SablrFLpqOLLggN+Z1FDKg4z8tQJCaM5oZ4Q5k2PhGc5uAGdB5sPeypabs2iol7MRUsZcz5v6eOaT1HiedxjXg/J/VSdurKVGwRfTV7FYsk0p73cu2LoU1Zo8Utra4DO7hrW+qEP7ZRPRJLQX9W0MLrtb88gWrG8I1YvdMPMP7ia7tmnLwiPBmYq/7JVxi+j4wE+d1z/Fe9brL1knusNkYmTjf2OjnShyTeglauPObAD1B6FekeHUUjhB/VCzUIS/3HjNKEeYkjl6sEO2mHRBhL2Bs5c/qyWKD4+DNiNPdXax/2JhRiuR80PkJTzaeTY8JeXM42kvhfvvWBaOz96nIGXsnk/Sy2FaMI+6p4lvS6BRLCrU5O0rT6KW7CFvxBvnXtdEIiXIJzrk2b84xHSPhGzN+mam00kp4PihgSie4XQbxqKsVS8TolGQRw+NSOJja/rBY9IRoh6rWxpgaOhLx1utTTIKV/WnKT/wKSQyYzpRVP4LGfuHnswTglBPyw7PHSD/nJdLjrmxe4Z/kiteuBsoxSPgz/7axMI0I+E7Qf/lcHuJvjj82CKm2xtYyshc8p02hvO2fu/5EVyuR8azergo/EWbpkKN5vJBfys4vlR2cfclJPj+2yfBZkHyS/kkOV8Cp1iB5wQXZOvcNfeH4laF2ZHSDOiAhRo8z3dYKfslQh1ICF+vBZ3MRES3ds6oJ6HuOE7M5q214sH6gKCqF0SBX6z2o8tXIaIAv+lDbMikTiXns1RBlzZhUxBDPF5AH8AsBIuH8bXFSomV0p70gH+sPBsEoATlgVF8q1lzNpLxEgjdihY8vUEAT98InTAA3pTGZrt6geMtzgc9aIONekZhWElH2jM+Ptx0BnjYGhlCilpazaZa8fcsWYN4VBWmfkY2D/ePb0XBsetQRAOG+PVN96Du X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509F5.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 03e93887-6c4e-4e75-20fe-08dcfcc071e6 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: VXfrcHckYEMYbfzbOmmh4fPmqHJu2gKbT9H8WN+4Tc3gxfwHZc65fQJwxDma8XAl5fEJIAdXut7DZo/uK0lMfLmU6XfMsXSXXWLS6LGj8QR8GNmi4AAvIGzggB3si3+IyCyGWeb9CwzXMlC9lqICqbomFgkzzQYgKKzNnsIYCmOm/T3qa0ibhl3AeGk9W3tLSF+xRAEpUL/m6VGrFTrSjKKS6C9lvbmk3G0A1lCQ5Ia63DJ3p85X+69RyhlcX+n4mujZnfGVORrnqtDE0xRw6HX08vf60Nc+usIxInnZRGyGk2qbN2EQiNDgQu4RvEWqGZvOsGfsBxrCtIT5UUSLcSdjuWDh/pSnBXGSLD2myL0ZyKTnYEk0SrK8/T8PDdshzB6tR2tPEphsU5xRddazu5UWWzCxUyj4+PoiKq8PtbKuyVcHiQUrZSNnr6dmG4thryuyPHwkxkj9KGsOW84UBK57SExMzQ2H4K1hEYPKNM07BjbJ1q/gxzILBroJJ7p24Gw9zYTOY5Gk+AW07k/WU0z6LFsQmX06yRUa9ylc6nDdNPd8KdADDCcMIz2i6QQSqWNLa9D7Rn0gTbRb8w8J9DXPMuENozC3/c9I+QZlyapFKQiESgfXcNvFg+gZgRPKEMvrhqfIotft0j85jeW6LSsabTHrtZOqJbT5N62l5pyoqV8D0NtR57nb7wWc5tqU/pn0UhJ7iZo+VCI1/mZpz+kPNE3uAcw6yB/fF+YXYPrKhiRqz7Bv9RuFBgfQvgSAPDV7jHmDFtFXtvk7qm/4j61zByuYZLbzV0asz4mnIcxqFKyUUHSIqTfbhwxghs9o2uP6hCPdGi/i+31vFZ6oG/FxaGJCbco3LfyX6yNCQ6C2+1Y0fFs24NtcjDIxZgLraTgz0eSzqNPu0/41c+pTxbjRPbO+tXxZHw5yh8+9GY2LC0iHHoOxRp/nuFLy4wrEytWnuZmy4373ZUDrIoNPJZWuNaPtXlS1oRMCftoTGbqUBuQIA7ScGTJ+hzA4cYkX+Skj0L/ZRhJu9Uqo5wQ1qRyVkl4vIxLr8XjcSwzIwZU3syN9soFzQDl2NPvHTRcBgmEId91tFyZ8kGGAjx/sQU+u8uyiJ1GnBow0V1RzYjM5R8DU9nD30ejUYwIJelpm4irCAS3rG5wPuBxu2THK5xvQV4AKOYeDMh918b2oZFJFrPKJ7EmBCJMB2MO2PBofxwV/NIJ0BnCEGXp6FqN56ahIik9O18C/tQ/EPY0VZf29vcsG9IDesmLd2XDDj83hXNaxho6mBudr1lejPcb/cOy+LCQfx0eeCK5sHqLrkdegZeCTOqQ9yUT19yX6afcEL/x8M6mZzspGdtxb7La1Qv15FJMFNhTJtIhYPDelrlB9zQ79AFSU8ITJr1hivljJ3BokqLGYVICC+OYI+JGKlg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(36860700013)(376014)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:28.7310 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8890d6d0-127e-4d0b-daea-08dcfcc07401 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509F5.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR10MB7779 Subject: [ovs-dev] [PATCH ovn v2 14/32] northd: Remove learned routes if lrp is removed. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" learned routes must be bound to a lrp on which the routes where learned. In case the lrp is deleted for whatever reason no ovn-controller would clean these routes up, therefor we do this in northd. Signed-off-by: Felix Huettner --- northd/en-northd.c | 2 ++ northd/inc-proc-northd.c | 1 + northd/northd.c | 31 ++++++++++++++++++++++++++++--- northd/northd.h | 1 + 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/northd/en-northd.c b/northd/en-northd.c index 6e90336f6..8152ccbcf 100644 --- a/northd/en-northd.c +++ b/northd/en-northd.c @@ -101,6 +101,8 @@ northd_get_input_data(struct engine_node *node, EN_OVSDB_GET(engine_get_input("SB_chassis_template_var", node)); input_data->sbrec_mirror_table = EN_OVSDB_GET(engine_get_input("SB_mirror", node)); + input_data->sbrec_route_table = + EN_OVSDB_GET(engine_get_input("SB_route", node)); struct ed_type_lb_data *lb_data = engine_get_input_data("lb_data", node); diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index 741295709..59cb50853 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -204,6 +204,7 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_northd, &en_sb_service_monitor, NULL); engine_add_input(&en_northd, &en_sb_static_mac_binding, NULL); engine_add_input(&en_northd, &en_sb_chassis_template_var, NULL); + engine_add_input(&en_northd, &en_sb_route, NULL); engine_add_input(&en_northd, &en_sb_fdb, northd_sb_fdb_change_handler); engine_add_input(&en_northd, &en_global_config, northd_global_config_handler); diff --git a/northd/northd.c b/northd/northd.c index b4412e70c..d93137a2d 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -3417,6 +3417,28 @@ cleanup_mac_bindings( } } +/* Remove received route entries that refer to logical_ports which are + * deleted. */ +static void +cleanup_routes( + const struct sbrec_route_table *sbrec_route_table, + struct hmap *lr_datapaths, struct hmap *lr_ports) +{ + const struct sbrec_route *r; + SBREC_ROUTE_TABLE_FOR_EACH_SAFE (r, sbrec_route_table) { + const struct ovn_datapath *od = + ovn_datapath_from_sbrec(NULL, lr_datapaths, r->datapath); + if (strcmp(r->type, "receive")) { + continue; + } + + if (!od || ovn_datapath_is_stale(od) || + !ovn_port_find(lr_ports, r->logical_port)) { + sbrec_route_delete(r); + } + } +} + static void cleanup_sb_ha_chassis_groups( const struct sbrec_ha_chassis_group_table *sbrec_ha_chassis_group_table, @@ -4220,6 +4242,7 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_mirror_table *sbrec_mirror_table, const struct sbrec_mac_binding_table *sbrec_mac_binding_table, const struct sbrec_ha_chassis_group_table *sbrec_ha_chassis_group_table, + const struct sbrec_route_table *sbrec_route_table, struct ovsdb_idl_index *sbrec_chassis_by_name, struct ovsdb_idl_index *sbrec_chassis_by_hostname, struct ovsdb_idl_index *sbrec_ha_chassis_grp_by_name, @@ -4245,7 +4268,7 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, &tag_alloc_table, &sb_only, &nb_only, &both); /* Purge stale Mac_Bindings if ports are deleted. */ - bool remove_mac_bindings = !ovs_list_is_empty(&sb_only); + bool any_sb_port_deleted = !ovs_list_is_empty(&sb_only); /* Assign explicitly requested tunnel ids first. */ struct ovn_port *op; @@ -4287,7 +4310,7 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, * Mac_Bindings are purged. */ if (op->od->sb != op->sb->datapath) { - remove_mac_bindings = true; + any_sb_port_deleted = true; } if (op->nbsp) { tag_alloc_create_new_tag(&tag_alloc_table, op->nbsp); @@ -4333,8 +4356,9 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, hmap_insert(lr_ports, &op->key_node, op->key_node.hash); } - if (remove_mac_bindings) { + if (any_sb_port_deleted) { cleanup_mac_bindings(sbrec_mac_binding_table, lr_datapaths, lr_ports); + cleanup_routes(sbrec_route_table, lr_datapaths, lr_ports); } tag_alloc_destroy(&tag_alloc_table); @@ -19021,6 +19045,7 @@ ovnnb_db_run(struct northd_input *input_data, input_data->sbrec_mirror_table, input_data->sbrec_mac_binding_table, input_data->sbrec_ha_chassis_group_table, + input_data->sbrec_route_table, input_data->sbrec_chassis_by_name, input_data->sbrec_chassis_by_hostname, input_data->sbrec_ha_chassis_grp_by_name, diff --git a/northd/northd.h b/northd/northd.h index 126d58626..7b318087a 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -51,6 +51,7 @@ struct northd_input { const struct sbrec_chassis_template_var_table *sbrec_chassis_template_var_table; const struct sbrec_mirror_table *sbrec_mirror_table; + const struct sbrec_route_table *sbrec_route_table; /* Northd lb data node inputs*/ const struct hmap *lbs; From patchwork Mon Nov 4 11:04:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006178 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r; 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 4XhpYp5j9Mz1xwF for ; Mon, 4 Nov 2024 22:06:16 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 3EEDE81214; Mon, 4 Nov 2024 11:06:10 +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 P_uNC-rr0Z07; Mon, 4 Nov 2024 11:06:05 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org A738E81242 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id A738E81242; Mon, 4 Nov 2024 11:05:48 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 73A10C08AA; Mon, 4 Nov 2024 11:05:47 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 16593C08A6 for ; Mon, 4 Nov 2024 11:05:45 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 8BF4140677 for ; Mon, 4 Nov 2024 11:04:48 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id YiNvYqxajtHf for ; Mon, 4 Nov 2024 11:04:44 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::613; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 9A7794062B Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 9A7794062B Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=B7zuTw3r Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20613.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::613]) by smtp4.osuosl.org (Postfix) with ESMTPS id 9A7794062B for ; Mon, 4 Nov 2024 11:04:42 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=fu2DvqwVTPQblXiArPcNIs5qkxW+Ns9vBqLmuAfwyHlIWwISZLbM259ez//uGrGHfoYTi/MXxU/BbQaf9iaq4PTaEUJwRyvv+/DZZ22O4NTYGnjSXmdxpjAnF/eXnyMHQSq9jSpGdjgWoBNIOkm5zrU/W7PD6UmIIq3mBApGh2YG0zNwNMG6YFKW+5VI/+KYaySRyX4zCbJOuZmMJBM+ApaURpnWaJSVR+ejWcFxQm4vWA8+gOVqwEZZ9PzghDiIL/3UmsB2pWxqaK7/5aeu0Ga+nSIMxAnPRjFMztCBR6OSX7MRXTFBvPkk+wbBMLpcKGaxr+T3ghPwoBqv8TkAzg== ARC-Message-Signature: i=2; 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=bCjepdVeUqZCaGNcljAQvCPfGIU4eZ78BqXAS6VFhf0=; b=jtcZBgdIbtJQh489OtUi/Z4xPzq4u7GdI7ZZxy+3FoUOAPgpdhbfEbOO5cVrHlayKRTD9Xd3OUojuFHgdmGLlSS0eaxSRK8bFv4y/DIF2bI0x+avJxXNOD99LAJkgqC4UW8ttWi6M3tHjt2AGJR74mvfUZxea5sACtMmLQJIn3ODCF6pcLtp7lwDL/l7WwV+YqLXqf0n8nsAhv3icFg2mkbOlnN8T14gApBzCd/j+Q9hyuZV4iOmbCXeAXK7KYVha/JlsAor+EEYZQm0KwdbACeXOUqfaMUGSeM5dM7ipvwbdkiv/GFiXj4r9KVd/h0iHgd87tId2RKu3ttUEVQltQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bCjepdVeUqZCaGNcljAQvCPfGIU4eZ78BqXAS6VFhf0=; b=B7zuTw3rnVmaCWI3udM+zgkH60O8pvdq/yZl/15kYlo4Bbxn+icstEf/UkzJzNE8f9RTpG8Qd+rBPm186cnhj0WDYgLt8RpMPbagMFBERFXEwiuC70pe7sX2HNiIjT+r2wyrTgt/eyd7idqsXl9w1K+tiG75hnkGxnNauDKmzoj0BY6oFWXuRFjmumtsXtcHxUDNjFFv58ir5+XnxKmCvxEapa+IuqFTEbe5bojG6MOjOqf/JOBCNlhhDCWs0fCwVBSP2P78R+IYf2cosBhxPzseyARGey3XkosSSrmunAAS8NlqdVmfLs+5F+wm4AJ/GciQ+SOMR9IL4OVQ0nxVew== Received: from DU7P189CA0003.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:552::9) by AS2PR10MB6848.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5f7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:04:32 +0000 Received: from DU6PEPF00009528.eurprd02.prod.outlook.com (2603:10a6:10:552:cafe::f0) by DU7P189CA0003.outlook.office365.com (2603:10a6:10:552::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:30 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU6PEPF00009528.mail.protection.outlook.com (10.167.8.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:30 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:30 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 3629377 X-ExclaimerImprintLatency: 2053095 X-ExclaimerImprintAction: 040100d0668944649c9a735684f306a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ERxauXSV2R/QBEgL57eGgomahdVpZIy81McscZ9ogXVM1E/IUWeIVGUDbxrXVfa56kO2GXCJ8H5GcpGZnH8LqVSd+GxjQxK/4EMZM1QQzLztknl+BVWXzPRDbdZERlBA1xvqPD0J6/wAejk8Y2mHF5Xn4Kqch6IAYKA2qViuAjfQ9FexSYDWbIO8ZXwYPqqva8NSAj7AElulRZaVuFVp7WeT1bDA1NDFpt/ZQ2SLaDlJYTjmrOynuUd1xJUIlE0ULawfPB0/0fW0QIQeuZOCiXKtRQJa+x6x1aU4WBqIn/SGRTDHZLIayGIqsNtpbx6NnWtf1ZzKLvzx+I+b6prpIA== 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=bCjepdVeUqZCaGNcljAQvCPfGIU4eZ78BqXAS6VFhf0=; b=rhkdoSH2D8huECQxYDnTVNAomRZWxdW/389YxMUsl5Z/VoC61UQ4zntuNF/p1mCW96P5eO2G/9biASzG+qs5A304IB4qesxPfO2VKV9wN7DeRlBQ+/BTtHC7MJgyLEyj+Ptbz3a51P42Mz8kX15NUsl7ub+7U7kKlJSSy2zYg7CfUq3NB+A4yi+mP5gB/pv2kXq8CSkOGxyEABNTukag1zAMjk5RBI1wlbnDGFLQgnTL0xFtj1J3563T6lKUYt18jiENLz60IpewL3VHyDSFg//ArpalO/CEQale9K5BIPGSqacgXLw34iOtvljx0+FXk1J++vknU1vh+I43Sm2iWQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bCjepdVeUqZCaGNcljAQvCPfGIU4eZ78BqXAS6VFhf0=; b=B7zuTw3rnVmaCWI3udM+zgkH60O8pvdq/yZl/15kYlo4Bbxn+icstEf/UkzJzNE8f9RTpG8Qd+rBPm186cnhj0WDYgLt8RpMPbagMFBERFXEwiuC70pe7sX2HNiIjT+r2wyrTgt/eyd7idqsXl9w1K+tiG75hnkGxnNauDKmzoj0BY6oFWXuRFjmumtsXtcHxUDNjFFv58ir5+XnxKmCvxEapa+IuqFTEbe5bojG6MOjOqf/JOBCNlhhDCWs0fCwVBSP2P78R+IYf2cosBhxPzseyARGey3XkosSSrmunAAS8NlqdVmfLs+5F+wm4AJ/GciQ+SOMR9IL4OVQ0nxVew== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:27 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:27 +0000 Date: Mon, 4 Nov 2024 12:04:25 +0100 To: dev@openvswitch.org Message-ID: <0e2e87172db6e83796565bac7757ddf782559fb9.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0116.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::20) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DU6PEPF00009528:EE_|AS2PR10MB6848:EE_ X-MS-Office365-Filtering-Correlation-Id: ef2aaf78-f18b-42f8-c58b-08dcfcc0751e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: mRBRqgVE1eMnvJrWncyKxhz1tLxmNYJK/QaW8pEtcrLupwofwo9bfmToCCG3KpaOfPruiNjeqQkyKfVxEphHaCVoGnXua76K8Q8WvXqgO/J1n0h78GNC5c7PgnXxhRaU9S32mdWhIvDN6HTB4roDgCV0rjTl5SDa4Ne9MLpFkBcdaRSagpa1UiXfKeYudF00yJCx7s51I0l4Wl+ISdpB4lMFgwfh9kHzaitE5qJuKpcfK4te0g33zbyyBhMQqaxw+e7LCTM/NBgQ+eAnMbH0wZ90wSfNWjI/I3SdhBsiLHnuq2pM/mYcwPf3pp/jNA+vMsCZt1Y2bVwUwVp6XfTq7JIwejBxqstFm5T5+X9nX95uft2zggv4YDMghJ2KckuB0N/geTcQ4iVOJ+JGRq5tDYGKj23xAtg9om66V8oP/P3+W5ZCiA66qhey9O3wopBIlKbzE2+sjfff/RPXNqtynMCt3oL9Xv2WnccnsS669709WBg/ZiDS55yXe7N9LBvnZAg2+kThR2IXDjsbBxXqilrolSPFgYMOGcUhCTxtEh/aMusZIVsKD3F1FUe5h2BHQcpRkrdfmG9AoPTFHB0u8tiTJNdSwF/UXFsEIpzu0dqLzvo9CEtKp5kDt/lIHSsT9wgF3fS2hsIurUWwIBRdc6Z9aNNw/y9RVUDXtebkYEEe2UfTIrYkZ2Cf+LztjpSBx4jyZm6l75AvKAXPDKsro/HsByMAdP0wB+cSkZkWx4Nf+/D6FWTQFIC/GE4yK0+Qz2nKt29uceZ3aRJbAJ6vZMlgZdQvcByuTOu2wnE0NhgteCmSLYVQR+caJaQeKkULvwaT2+7sJ2QI1mJh2wvb3f2rMZs1CvrWUpLfNe3IRcFdzgTkIEjomW9hQFoCTB3o+b15Nn9hlU76S1eOEAQptd9Ge4q2TKquXlKH8lIDBQhH79LKkb8cV0xdk1kVxQgc3l8wGjtj1ExA3hGNnJ4D1ZQgldFNqSj0gVXofWmRwAZyHJPMZfsT8uotxcF3qi1xk+W520wtl8txZqDCkDPW1J405yd5qWlq9E/gADiJZq/MVjxiWdMageZX8O4MB9kEIXeRfEngMbgJHCD6F9HpAdDCQk/G+OaRURqooE0L3NlvXk/tY0t7eaBjULmauBAeYkkkDhVsOM4fHkDNWj6/qc8TPckqK6GypEBJEF9HQFZmp6SKdynz/ysRTD8tTMDBvoJhKthjPJU513G/D8ucHnk0lhvrnX8iOY37QkKYyJtxeW1tFRjV/S45RogRKYEBdC5Jtsn4loSqsbwbA7eql/iUm8wUx9QjvYHAfehb+8qP/tXZ1TUEFOE6OFcSXSsu X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF00009528.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: f618bc15-1745-402c-dec2-08dcfcc07320 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|82310400026|1800799024|35042699022|376014|36860700013; X-Microsoft-Antispam-Message-Info: F+gI4ew1G+JIDM2W7k6zemAK3INs5Ia3ET/m5oxiWWivhzGNV4RuO3/35uAAAi0Haj3leLsfXlCCnOHNwfsJcbi1rHz5DrKVY1qU4B9AKFN3+RE9K3vAzQbBzRu5KmlG2RTC5dn7NphXKDLKtbwYIOHIXH4tJVDjeLT53mRd+RlbLvhBOaQCwGcvO2W9Z0QcVE6zOUwhJxOr+RZUMaH7luD3xkey88n94REuqIAA58Hqrq+p/Cm/CuDLivP5wsscRqk4rxhnBdZsWquA/c4XnMOtXpXZYU2MNBFI0uYdOLGyvjoa4ETVCgnZuUuahKfdL8X3MzqIGbmDcl+kr3zBlnLphmeSA0GrUiRnGVkuSY/zkjiefTAlf1bPBjoeUEU8rykvLGoPgMt/QmE++AW7sQvUZT1QpGrFW9l51AKQNlbxWFbiFm0OxPf7EFj7FEZPl9Un33FhpaPupx1DaqYiFxR/8V78XtzsZ3VqMkhFucU3HU1+K+9mlHHVts684PDPhEHazFFNKyE40LtEumi0PEJWoNLstBghrp3YCcTADjhUstIYiAjJNBrcyxkokNshN8rOb3Dgb3so3UAVqacyuUVUI5zrCDZQw4mGQnLeT1Ok50SgLqdQTUYW4W8sg9lZyfJBMAn29PLDh9JMo2nxUG3iZwt2cYJm25BiAx/bkk4TmOUiUeuACR/WKIx2lStHUGT2LwWDgWRC09KyODtAyAytupOy/7HVRXhcH/jAjkcKyO7+YYMU+PdTtwBr87/AiF6BenY+N5Fecn2kKMx0Y9fStCmDJb3hiq0gRoh35mH9aQ84zLmEqxtvqSm/Vs6tVwkmwJaoY/Lkw8uJSlH7xsDlIc3osJUjtirc5BZMS6hvMWKJZCzxf4/fwClTeQu5SORzj1bpOnu9WMSNpJO3N6dk1evwTUAWIuRrGMKKm8u6n8wSG2kgiF4zLwY8Z8BETilz3jMzAcgavNHa8wLqGMNjiZSVqQ49/meSgIn+l+l2cHoAhPLn8KpkvFgB7By5Qcuzm6uW6E2ebrbvsomqRrYD66g5q6x+G1SQiSYq9m/bLCr9jgp8+leU3hRQhwZcieNXXLIZNyJ2vJbkXySsfKAonv3kgirS4RRt/MwUc8W6gIyeW+Uz7jaKuSFsXy7Je0t3atypOIwk+I/B6Q5Aqqop/aTiyictJd1gBUNNsxQF1CGfHfgoq7jFkXOk74dfPs0/FXUvWhI9V3C6MWQ1+1IoLtcdIj4LfkD/zFxCYvwFK2sURF/DkCYbfeZ7+SYkiZPCdbmdR8fI1P0t5y6S2auLusrbVNMYoqFs3qsM6c2w9S9b+fqHRkJP5V+fYjagF4fjDhK1anZaR21oMzsR2UlX7wDS5ePvd3f2xqUm49m+Xv/cSqKB+FqKw5e71KQi3j92YZ0L5CHTTwhi3fVILg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(82310400026)(1800799024)(35042699022)(376014)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:30.6295 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ef2aaf78-f18b-42f8-c58b-08dcfcc0751e X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF00009528.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR10MB6848 Subject: [ovs-dev] [PATCH ovn v2 15/32] northd: Allow announcing individual host routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" sometimes we want to use individual host routes instead of the connected routes of LRPs. This allows the network fabric to know which adresses are actually in use and e.g. drop traffic to adresses that are not used anyway. Signed-off-by: Felix Huettner --- northd/en-lflow.c | 1 + northd/en-routes-sync.c | 214 ++++++++++++++++++++++++++++++++++----- northd/en-routes-sync.h | 20 +++- northd/inc-proc-northd.c | 4 +- northd/northd.c | 32 +++--- northd/northd.h | 25 ++++- ovn-sb.ovsschema | 3 +- ovn-sb.xml | 13 +++ 8 files changed, 259 insertions(+), 53 deletions(-) diff --git a/northd/en-lflow.c b/northd/en-lflow.c index 8995f0300..aabba943e 100644 --- a/northd/en-lflow.c +++ b/northd/en-lflow.c @@ -26,6 +26,7 @@ #include "en-northd.h" #include "en-meters.h" #include "en-sampling-app.h" +#include "en-routes-sync.h" #include "lflow-mgr.h" #include "lib/inc-proc-eng.h" diff --git a/northd/en-routes-sync.c b/northd/en-routes-sync.c index c932cc34e..f6c7b347b 100644 --- a/northd/en-routes-sync.c +++ b/northd/en-routes-sync.c @@ -13,6 +13,7 @@ */ #include +#include #include "openvswitch/vlog.h" #include "smap.h" @@ -20,6 +21,7 @@ #include "northd.h" #include "en-routes-sync.h" +#include "en-lr-stateful.h" #include "lib/stopwatch-names.h" #include "openvswitch/hmap.h" #include "ovn-util.h" @@ -29,15 +31,18 @@ VLOG_DEFINE_THIS_MODULE(en_routes_sync); static void routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_route_table *sbrec_route_table, + const struct lr_stateful_table *lr_stateful_table, const struct hmap *parsed_routes, const struct hmap *lr_ports, const struct ovn_datapaths *lr_datapaths, - struct hmap *parsed_routes_out); + struct hmap *parsed_routes_out, + struct routes_sync_tracked_data *trk_data); static void routes_sync_init(struct routes_sync_data *data) { hmap_init(&data->parsed_routes); + uuidset_init(&data->trk_data.nb_lr_stateful); } static void @@ -48,6 +53,7 @@ routes_sync_destroy(struct routes_sync_data *data) parsed_route_free(r); } hmap_destroy(&data->parsed_routes); + uuidset_destroy(&data->trk_data.nb_lr_stateful); } bool @@ -73,6 +79,30 @@ routes_sync_northd_change_handler(struct engine_node *node, return true; } +bool +routes_sync_lr_stateful_change_handler(struct engine_node *node, + void *data_) +{ + /* We only actually use lr_stateful data if we expose individual host + * routes. In this case we for now just recompute. + * */ + struct ed_type_lr_stateful *lr_stateful_data = + engine_get_input_data("lr_stateful", node); + struct routes_sync_data *data = data_; + + struct hmapx_node *hmapx_node; + const struct lr_stateful_record *lr_stateful_rec; + HMAPX_FOR_EACH (hmapx_node, &lr_stateful_data->trk_data.crupdated) { + lr_stateful_rec = hmapx_node->data; + if (uuidset_contains(&data->trk_data.nb_lr_stateful, + &lr_stateful_rec->nbr_uuid)) { + return false; + } + } + + return true; +} + void *en_routes_sync_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED) @@ -88,6 +118,13 @@ en_routes_sync_cleanup(void *data) routes_sync_destroy(data); } +void +en_routes_sync_clear_tracked_data(void *data_) +{ + struct routes_sync_data *data = data_; + uuidset_clear(&data->trk_data.nb_lr_stateful); +} + void en_routes_sync_run(struct engine_node *node, void *data) { @@ -101,14 +138,18 @@ en_routes_sync_run(struct engine_node *node, void *data) const struct sbrec_route_table *sbrec_route_table = EN_OVSDB_GET(engine_get_input("SB_route", node)); struct northd_data *northd_data = engine_get_input_data("northd", node); + struct ed_type_lr_stateful *lr_stateful_data = + engine_get_input_data("lr_stateful", node); stopwatch_start(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); routes_table_sync(eng_ctx->ovnsb_idl_txn, sbrec_route_table, + &lr_stateful_data->table, &routes_data->parsed_routes, &northd_data->lr_ports, &northd_data->lr_datapaths, - &routes_sync_data->parsed_routes); + &routes_sync_data->parsed_routes, + &routes_sync_data->trk_data); stopwatch_stop(ROUTES_SYNC_RUN_STOPWATCH_NAME, time_msec()); engine_set_node_state(node, EN_UPDATED); @@ -122,6 +163,7 @@ struct route_entry { char *logical_port; char *ip_prefix; + char *tracked_port; char *type; bool stale; }; @@ -129,7 +171,10 @@ struct route_entry { static struct route_entry * route_alloc_entry(struct hmap *routes, const struct sbrec_datapath_binding *sb_db, - char *logical_port, char *ip_prefix, char *route_type) + const char *logical_port, + const char *ip_prefix, + const char *route_type, + const char *tracked_port) { struct route_entry *route_e = xzalloc(sizeof *route_e); @@ -137,6 +182,9 @@ route_alloc_entry(struct hmap *routes, route_e->logical_port = xstrdup(logical_port); route_e->ip_prefix = xstrdup(ip_prefix); route_e->type = xstrdup(route_type); + if (tracked_port) { + route_e->tracked_port = xstrdup(tracked_port); + } route_e->stale = false; uint32_t hash = uuid_hash(&sb_db->header_.uuid); hash = hash_string(logical_port, hash); @@ -149,27 +197,54 @@ route_alloc_entry(struct hmap *routes, static struct route_entry * route_lookup_or_add(struct hmap *route_map, const struct sbrec_datapath_binding *sb_db, - char *logical_port, const struct in6_addr *prefix, - unsigned int plen, char *route_type) + const char *logical_port, const char *ip_prefix, + const char *route_type, const char *tracked_port) { struct route_entry *route_e; uint32_t hash; - char *ip_prefix = normalize_v46_prefix(prefix, plen); - hash = uuid_hash(&sb_db->header_.uuid); hash = hash_string(logical_port, hash); hash = hash_string(ip_prefix, hash); HMAP_FOR_EACH_WITH_HASH (route_e, hmap_node, hash, route_map) { - if (!strcmp(route_e->type, route_type)) { - free(ip_prefix); + if (!strcmp(route_e->type, route_type) && + streq(route_e->tracked_port, tracked_port)) { return route_e; } } - route_e = route_alloc_entry(route_map, sb_db, - logical_port, ip_prefix, route_type); - free(ip_prefix); + route_e = route_alloc_entry(route_map, sb_db, + logical_port, ip_prefix, route_type, + tracked_port); + return route_e; +} + +static struct route_entry * +route_sync_to_sb(struct ovsdb_idl_txn *ovnsb_txn, struct hmap *route_map, + const struct sbrec_datapath_binding *sb_db, + const char *logical_port, const char *ip_prefix, + const char *route_type, const char *tracked_port) +{ + struct route_entry *route_e = route_lookup_or_add(route_map, + sb_db, + logical_port, + ip_prefix, + route_type, + tracked_port); + route_e->stale = false; + + if (!route_e->sb_route) { + const struct sbrec_route *sr = sbrec_route_insert(ovnsb_txn); + sbrec_route_set_datapath(sr, route_e->sb_db); + sbrec_route_set_logical_port(sr, route_e->logical_port); + sbrec_route_set_ip_prefix(sr, route_e->ip_prefix); + sbrec_route_set_type(sr, route_e->type); + if (route_e->tracked_port) { + sbrec_route_set_tracked_port(sr, route_e->tracked_port); + } + route_e->sb_route = sr; + } + return route_e; } @@ -179,6 +254,7 @@ route_erase_entry(struct route_entry *route_e) free(route_e->logical_port); free(route_e->ip_prefix); free(route_e->type); + free(route_e->tracked_port); free(route_e); } @@ -269,13 +345,93 @@ parse_route_from_sbrec_route(struct hmap *parsed_routes_out, ); } +static void +publish_lport_addresses(struct ovsdb_idl_txn *ovnsb_txn, + struct hmap *route_map, + const struct sbrec_datapath_binding *sb_db, + char *logical_port, + struct lport_addresses *addresses, + struct ovn_port *tracking_port) +{ + for (int i = 0; i < addresses->n_ipv4_addrs; i++) { + const struct ipv4_netaddr *addr = &addresses->ipv4_addrs[i]; + char *addr_s = xasprintf("%s/32", addr->addr_s); + route_sync_to_sb(ovnsb_txn, route_map, + sb_db, + logical_port, + addr_s, + "advertise", + tracking_port->sb->logical_port); + free(addr_s); + } + for (int i = 0; i < addresses->n_ipv6_addrs; i++) { + if (in6_is_lla(&addresses->ipv6_addrs[i].network)) { + continue; + } + const struct ipv6_netaddr *addr = &addresses->ipv6_addrs[i]; + char *addr_s = xasprintf("%s/128", addr->addr_s); + route_sync_to_sb(ovnsb_txn, route_map, + sb_db, + logical_port, + addr_s, + "advertise", + tracking_port->sb->logical_port); + free(addr_s); + } +} + + +static void +publish_host_routes(struct ovsdb_idl_txn *ovnsb_txn, + struct hmap *route_map, + const struct lr_stateful_table *lr_stateful_table, + const struct parsed_route *route, + struct routes_sync_tracked_data *trk_data) +{ + struct ovn_port *port; + HMAP_FOR_EACH (port, dp_node, &route->out_port->peer->od->ports) { + if (port->peer) { + /* This is a LSP connected to an LRP */ + struct lport_addresses *addresses = &port->peer->lrp_networks; + publish_lport_addresses(ovnsb_txn, route_map, route->od->sb, + route->out_port->key, + addresses, port->peer); + + const struct lr_stateful_record *lr_stateful_rec; + lr_stateful_rec = lr_stateful_table_find_by_index( + lr_stateful_table, port->peer->od->index); + uuidset_insert(&trk_data->nb_lr_stateful, + &lr_stateful_rec->nbr_uuid); + struct ovn_port_routable_addresses addrs = get_op_addresses( + port->peer, lr_stateful_rec, false); + for (int i = 0; i < addrs.n_addrs; i++) { + publish_lport_addresses(ovnsb_txn, route_map, route->od->sb, + route->out_port->key, + &addrs.laddrs[i], + port->peer); + } + destroy_routable_addresses(&addrs); + } else { + /* This is just a plain LSP */ + for (int i = 0; i < port->n_lsp_addrs; i++) { + publish_lport_addresses(ovnsb_txn, route_map, route->od->sb, + route->out_port->key, + &port->lsp_addrs[i], + port); + } + } + } +} + static void routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_route_table *sbrec_route_table, + const struct lr_stateful_table *lr_stateful_table, const struct hmap *parsed_routes, const struct hmap *lr_ports, const struct ovn_datapaths *lr_datapaths, - struct hmap *parsed_routes_out) + struct hmap *parsed_routes_out, + struct routes_sync_tracked_data *trk_data) { if (!ovnsb_txn) { return; @@ -292,7 +448,8 @@ routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, sb_route->datapath, sb_route->logical_port, sb_route->ip_prefix, - sb_route->type); + sb_route->type, + sb_route->tracked_port); route_e->stale = true; route_e->sb_route = sb_route; @@ -326,21 +483,22 @@ routes_table_sync(struct ovsdb_idl_txn *ovnsb_txn, "dynamic-routing-static")) { continue; } - route_e = route_lookup_or_add(&sync_routes, - route->od->sb, - route->out_port->key, - &route->prefix, - route->plen, - "advertise"); - route_e->stale = false; - if (!route_e->sb_route) { - const struct sbrec_route *sr = sbrec_route_insert(ovnsb_txn); - sbrec_route_set_datapath(sr, route_e->sb_db); - sbrec_route_set_logical_port(sr, route_e->logical_port); - sbrec_route_set_ip_prefix(sr, route_e->ip_prefix); - sbrec_route_set_type(sr, route_e->type); - route_e->sb_route = sr; + if (smap_get_bool(&route->out_port->nbrp->options, + "dynamic-routing-connected-as-host-routes", + false)) { + publish_host_routes(ovnsb_txn, &sync_routes, + lr_stateful_table, route, trk_data); + } else { + char *ip_prefix = normalize_v46_prefix(&route->prefix, + route->plen); + route_sync_to_sb(ovnsb_txn, &sync_routes, + route->od->sb, + route->out_port->key, + ip_prefix, + "advertise", + NULL); + free(ip_prefix); } } diff --git a/northd/en-routes-sync.h b/northd/en-routes-sync.h index 391f17452..3b51b5e56 100644 --- a/northd/en-routes-sync.h +++ b/northd/en-routes-sync.h @@ -15,11 +15,29 @@ #define EN_ROUTES_SYNC_H 1 #include "lib/inc-proc-eng.h" +#include "lib/uuidset.h" +#include "openvswitch/hmap.h" + +struct routes_sync_tracked_data { + /* Contains the uuids of all NB Logical Routers where we used a + * lr_stateful_record during computation. */ + struct uuidset nb_lr_stateful; +}; + +struct routes_sync_data { + struct hmap parsed_routes; + + /* Node's tracked data. */ + struct routes_sync_tracked_data trk_data; +}; bool routes_sync_northd_change_handler(struct engine_node *node, - void *data OVS_UNUSED); + void *data); +bool routes_sync_lr_stateful_change_handler(struct engine_node *node, + void *data); void *en_routes_sync_init(struct engine_node *, struct engine_arg *); void en_routes_sync_cleanup(void *data); +void en_routes_sync_clear_tracked_data(void *data); void en_routes_sync_run(struct engine_node *, void *data); diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index 59cb50853..99318c633 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -164,7 +164,7 @@ static ENGINE_NODE(route_policies, "route_policies"); static ENGINE_NODE(routes, "routes"); static ENGINE_NODE(bfd, "bfd"); static ENGINE_NODE(bfd_sync, "bfd_sync"); -static ENGINE_NODE(routes_sync, "routes_sync"); +static ENGINE_NODE_WITH_CLEAR_TRACK_DATA(routes_sync, "routes_sync"); void inc_proc_northd_init(struct ovsdb_idl_loop *nb, struct ovsdb_idl_loop *sb) @@ -272,6 +272,8 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_add_input(&en_routes_sync, &en_sb_route, NULL); engine_add_input(&en_routes_sync, &en_northd, routes_sync_northd_change_handler); + engine_add_input(&en_routes_sync, &en_lr_stateful, + routes_sync_lr_stateful_change_handler); engine_add_input(&en_sync_meters, &en_nb_acl, NULL); engine_add_input(&en_sync_meters, &en_nb_meter, NULL); diff --git a/northd/northd.c b/northd/northd.c index d93137a2d..75f1d652e 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -1094,19 +1094,6 @@ build_datapaths(struct ovsdb_idl_txn *ovnsb_txn, ods_build_array_index(lr_datapaths); } -/* Structure representing logical router port - * routable addresses. This includes DNAT and Load Balancer - * addresses. This structure will only be filled in if the - * router port is a gateway router port. Otherwise, all pointers - * will be NULL and n_addrs will be 0. - */ -struct ovn_port_routable_addresses { - /* The parsed routable addresses */ - struct lport_addresses *laddrs; - /* Number of items in the laddrs array */ - size_t n_addrs; -}; - static bool lsp_can_be_inc_processed(const struct nbrec_logical_switch_port *); /* This function returns true if 'op' is a gateway router port. @@ -1141,7 +1128,7 @@ is_cr_port(const struct ovn_port *op) return op->primary_port; } -static void +void destroy_routable_addresses(struct ovn_port_routable_addresses *ra) { for (size_t i = 0; i < ra->n_addrs; i++) { @@ -1154,12 +1141,14 @@ static char **get_nat_addresses(const struct ovn_port *op, size_t *n, bool routable_only, bool include_lb_ips, const struct lr_stateful_record *); -static struct ovn_port_routable_addresses -get_op_routable_addresses(struct ovn_port *op, - const struct lr_stateful_record *lr_stateful_rec) +struct ovn_port_routable_addresses +get_op_addresses(struct ovn_port *op, + const struct lr_stateful_record *lr_stateful_rec, + bool routable_only) { size_t n; - char **nats = get_nat_addresses(op, &n, true, true, lr_stateful_rec); + char **nats = get_nat_addresses(op, &n, routable_only, true, + lr_stateful_rec); if (!nats) { return (struct ovn_port_routable_addresses) { @@ -1192,6 +1181,13 @@ get_op_routable_addresses(struct ovn_port *op, }; } +static struct ovn_port_routable_addresses +get_op_routable_addresses(struct ovn_port *op, + const struct lr_stateful_record *lr_stateful_rec) +{ + return get_op_addresses(op, lr_stateful_rec, true); +} + static void ovn_port_set_nb(struct ovn_port *op, diff --git a/northd/northd.h b/northd/northd.h index 7b318087a..75ad86973 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -25,6 +25,7 @@ #include "openvswitch/hmap.h" #include "simap.h" #include "ovs-thread.h" +#include "en-lr-stateful.h" struct northd_input { /* Northbound table references */ @@ -187,10 +188,6 @@ struct routes_data { struct hmap bfd_active_connections; }; -struct routes_sync_data { - struct hmap parsed_routes; -}; - struct route_policies_data { struct hmap route_policies; struct hmap bfd_active_connections; @@ -902,4 +899,24 @@ is_vxlan_mode(const struct smap *nb_options, uint32_t get_ovn_max_dp_key_local(bool _vxlan_mode); +/* Structure representing logical router port + * routable addresses. This includes DNAT and Load Balancer + * addresses. This structure will only be filled in if the + * router port is a gateway router port. Otherwise, all pointers + * will be NULL and n_addrs will be 0. + */ +struct ovn_port_routable_addresses { + /* The parsed routable addresses */ + struct lport_addresses *laddrs; + /* Number of items in the laddrs array */ + size_t n_addrs; +}; + +struct ovn_port_routable_addresses get_op_addresses( + struct ovn_port *op, + const struct lr_stateful_record *lr_stateful_rec, + bool routable_only); + +void destroy_routable_addresses(struct ovn_port_routable_addresses *ra); + #endif /* NORTHD_H */ diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema index 74540782e..01df9cc6b 100644 --- a/ovn-sb.ovsschema +++ b/ovn-sb.ovsschema @@ -1,7 +1,7 @@ { "name": "OVN_Southbound", "version": "20.38.0", - "cksum": "1944407838 32212", + "cksum": "1452226583 32264", "tables": { "SB_Global": { "columns": { @@ -626,6 +626,7 @@ "logical_port": {"type": "string"}, "ip_prefix": {"type": "string"}, "nexthop": {"type": "string"}, + "tracked_port": {"type": "string"}, "type": {"type": {"key": {"type": "string", "enum": ["set", ["advertise", "receive"]]}, diff --git a/ovn-sb.xml b/ovn-sb.xml index 493b7e839..bf587153a 100644 --- a/ovn-sb.xml +++ b/ovn-sb.xml @@ -5224,6 +5224,19 @@ tcp.flags = RST;

+ +

+ Only relevant for type advertise and if + options:dynamic-routing-connected-as-host-routes is + set on the OVN_Northbound.Logical_Router_Port. + + In this case this lists the name of the Port_Binding + that is holding this ip address. ovn-controller can use this + information to determine the distance and therefor the route priority + of a published route +

+
+

If the route is to be exported from OVN to the outside network or if From patchwork Mon Nov 4 11:04:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006176 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT; 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 4XhpYC3KYdz1xwF for ; Mon, 4 Nov 2024 22:05:50 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 07500608D3; Mon, 4 Nov 2024 11:05:46 +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 Qs5ujdIP36CN; Mon, 4 Nov 2024 11:05:41 +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 014D460A3D Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 014D460A3D; Mon, 4 Nov 2024 11:05:19 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4B956C08BF; Mon, 4 Nov 2024 11:05:19 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2AFF1C08B9 for ; Mon, 4 Nov 2024 11:05:18 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 23F0180BD6 for ; Mon, 4 Nov 2024 11:04:39 +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 MAzhkysURcf8 for ; Mon, 4 Nov 2024 11:04:38 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:260c::626; helo=eur03-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org E872580EC0 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E872580EC0 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=NOImcZBT Received: from EUR03-VI1-obe.outbound.protection.outlook.com (mail-vi1eur03on20626.outbound.protection.outlook.com [IPv6:2a01:111:f403:260c::626]) by smtp1.osuosl.org (Postfix) with ESMTPS id E872580EC0 for ; Mon, 4 Nov 2024 11:04:37 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=W+FZOjMTBwbpRzKU2AmuJDiAWSYw4oPKV0DyVVI3DPTeH9wMFb7J7NbnOBjKf7aqNx/QMLxCvvfsOKjqtQ91pmZtrfsJkirJoJ2VBBb6FDtj/xFXf5dnWHghoe/mXpy8m6mnsj5QIv/1NS5kCj4NyALLBbBr/rOtaj1YREYMGAhtSMhd8EtG9vhO1ICNLouKt9JVk6JifpqqqV+cINpW3RXfAbNt1yJMW9Oeat5KadaRo88NFyXKluj3fl7p2PwAKL2Bu/1Dn1mAISwyHITgRWLvh78WSoScl893VuwcQgsfr36IlMT8BzssnAlejIzKZyhi7NaJSGiWUi0PC/Nocg== ARC-Message-Signature: i=2; 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=GKmR0DMHczw6lQlU6iHtlCRaMhp8/FlM97YxiwO5aQ8=; b=D9g11DnNdRCwUwYJ8I5bCyJGMKeAaQQhYS93K+hQAEM1O2VIzEqREh7LupCtGcPYVwTowUvrhHJpn1F2DBN28t5H+GDHWcYAm8N1pG+l31AofMf9ELEXY3Z0BrRs6sRPy6XI4qV56i9V2y5exiR3cQ2y4xFHChAKfun/79c1mUwSmD14bD3saTMWT7IZiB1WduWySam72q3D/dXKf8PE4BHMWfQVh006ydjaYZk5tqehoX2yTYBqGCmS3FbvyiYVKSkBwHf/eob2MbOFofejUMoi2J3hUOv4hGbfGlQQqu0A4OUIUwpzFQD4NdmYyA6RB19gu1+Ke6ImIcaEtRfXeA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GKmR0DMHczw6lQlU6iHtlCRaMhp8/FlM97YxiwO5aQ8=; b=NOImcZBT6lIyAzdgeuxqtbff+PZ2LtBn978frvlBweVrYsRica1hJVQrtGTfHky6bf3k3wYdjw4UmiqOYDm2Yeo3J6bnaOmGP9I1gpxGdORSv1RAVkpEbnOokfyEKFQylib/6H6+b3288DT70Xa/IHE8GhU5aXl7DAJil9tfAk5NPlZCqTlM0kxHpUHii8S+1eKCl7zcw8QKuwW4SBot81MybM41TkTxW6xDVP7ctZUmkLA1YZ6K/tqxaZMTqK7vNxmMjgprvzGeNzr2v90bIMQZMDhsytXTHJGD77/QBHa5ZzNj7mFBiOW6kHNuH4z5tsoq9/5M1c1sIJf3Lhh3XA== Received: from DU7PR01CA0038.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::20) by PA2PR10MB8649.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:420::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.14; Mon, 4 Nov 2024 11:04:34 +0000 Received: from DU2PEPF00028D08.eurprd03.prod.outlook.com (2603:10a6:10:50e:cafe::6b) by DU7PR01CA0038.outlook.office365.com (2603:10a6:10:50e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:34 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU2PEPF00028D08.mail.protection.outlook.com (10.167.242.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:32 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:32 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 3370660 X-ExclaimerImprintLatency: 2073532 X-ExclaimerImprintAction: c4684ea0582c4a2eb53243096b98f1aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nJI9xM3JjddM9YhexqHkxePgS120ia7m4pgQ/bnv0bmtaKdNwEViAenB0Nef5CTecNA9km51K6JUmwu7n6OGFz5z/5TwssdIXHi5fyCt/+pZb/V/M3TH4XPSvAp+z8SFprG0ItqQBbsb32A7InrzxCm8PDKyQ+D0gJ9PyCLu0DzNAD+0xvTttNv/+khYojRwHc18tjnEK2+KU5tNed1fkmXZ1yK+IPFL0LUbW2xTNtGMCc+u6PNGtN643L9ieAfIZJ8wImCNMs8/5WwSiareloyPgfoNpvcKBVCqc8q7M5PQdzhWf/cUSVW4BHNWs5fVOLdRD0fn6JQrj4dDDROONw== 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=GKmR0DMHczw6lQlU6iHtlCRaMhp8/FlM97YxiwO5aQ8=; b=IEfAy4rKuqEqV8/AGPe37ReXnwzeXQDUaWvGMH6QarE3q7aht7XuufBqgtRrk5Cn+qBQ1HA3wD1/ZOotdg2yFwJE4VTFwwga3XWzSXC8MO0om7aSu+tE6vuuPS5ftxhYIv9nJjmdaWflgBX2zqIPoPlJRiAFLf4UEboElLGx+gLmJVZinE0BV/D17UKayGyeRAuX7OjvDJpA7D13SgQGau15ucLor6IM1pRMkkPhxEvnGtdLKu1gxpEMkRFD1hTq+ZsZwAKjabenh+0YcFemCacc9qG2wcLtWF1z5GnkKVl3+0vk7kjCuRth+/T7aEF0HeLF7edFMMfbujmvFNjE6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GKmR0DMHczw6lQlU6iHtlCRaMhp8/FlM97YxiwO5aQ8=; b=NOImcZBT6lIyAzdgeuxqtbff+PZ2LtBn978frvlBweVrYsRica1hJVQrtGTfHky6bf3k3wYdjw4UmiqOYDm2Yeo3J6bnaOmGP9I1gpxGdORSv1RAVkpEbnOokfyEKFQylib/6H6+b3288DT70Xa/IHE8GhU5aXl7DAJil9tfAk5NPlZCqTlM0kxHpUHii8S+1eKCl7zcw8QKuwW4SBot81MybM41TkTxW6xDVP7ctZUmkLA1YZ6K/tqxaZMTqK7vNxmMjgprvzGeNzr2v90bIMQZMDhsytXTHJGD77/QBHa5ZzNj7mFBiOW6kHNuH4z5tsoq9/5M1c1sIJf3Lhh3XA== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:29 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:29 +0000 Date: Mon, 4 Nov 2024 12:04:27 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0113.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::12) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DU2PEPF00028D08:EE_|PA2PR10MB8649:EE_ X-MS-Office365-Filtering-Correlation-Id: 5cd075fb-b7e2-4b8c-8d7f-08dcfcc07659 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: 3JAyT31qwMb87dzhzxGONv/0tP81pF0HSB+jSvHcnuRknrclSmI7LdN1rBYj/DMjaZxTetJaBv7WEKGz45twKjMz9R5OZFpfAWYA1ddSRJs5/PcaGAXSJUdQptRUQe+n9xBPks4x3emjf4DyvR6UMa60ous5GBPkmnSU5eK/Tv4Prnz3tdZAsK63My/lVGLtXJW+m99WDhrhcSz4LVWBu+yFhrytOCEO2H+uebPZjmCLIE5Pxz08hU04IeXFNy9zhpajYZYrxAKp3CqHtPRx60Thszhbi4raRIvTpxtz/LuX+v1gIBKDdFvgsD/0LlHeB4Egb+AzutI/+8ioGzLo/tk/wKha9Bhz8xt+hgXiH45d66Sw49J5mNb09WVEjpd58+LRg/mcWDs4MQUK4r9ACoJ8snFeUS7EzsusVTekWmBH6oBURsd2KlA2G36N++9LH8hcD67teXP5Z9GbHqrbePRTHSXL/XJUHFfniT4ZxhoNmmeQbTq2BRry3u/b1C9inh5DrZ4RnI+gHluibp37d48HBXpIOCWJ4TETttrV6xPEzJxFGmmBnX/aMWs+KjixCSqdSu1fKlx4yu82mRSnXxt34GWHlRqAWVrL9LK0wFuBlLJ3rXWjPUKI7CKTbzIlvplEMtAw/5xlhhKxzpcEp4b7oW4wLFhFwg5N+Z5jv8sNebf984mufCYZzY9XU4JHdB0eoqi8l4FVpPD1M4NZtIY7mRJR78yD9sNEFgrL1MonYm3aL2f6H7FeEEi1Gu1zaEZh6vEk5Vx/UiX1zxwX1mMOQG0cTDXT08cI+u6gAD3c7/3Xg5WaLAegljZ0nF2wejOlej3Ve4L5NUffTDZjI9olhu3qRMNjN55dLN6xwJGOKVt+jKkgo3tXKkR6fZ2/mdXGLUPFbxRQc05mfTBATXMYpS0KFgVt4msqZ0JdLjkDup+JsztBSi0+dM9Tv/PuSnqhxgHQ7fEoXDx9zaB+z653jbI9lMmLyLe7t6hsC3PjTuApY/vP3v4NXmxAWgEp7+4WPEXHlSgzJm/bs5krVbIbtGEGx8gcZ/pJJWbmxHxXdJWkmowmCenPeUxrfaxos9G7KcdMft9zvBCdhKH0fzD2ozuCX0baJnQQXOjUcJmari/1gMzuNluZYUKfLpE5btozQ9neoDODh7HGtH/PPzg1NpwdCs/2v8auUSyOqGsDswj9msKOk3rKQXWiR/0RM2KYa/D6f4ShYXAdpCu4U7nzw9hzDGKn5ECKVIxrveZILAZDI9bIj89pCQKCNVEG2RzLifdvChRIykDe/sGGvfSffZJqzILHk1X8aVjP4Nw= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D08.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 6b521f7d-2798-41e0-d30c-08dcfcc07453 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|14060799003|82310400026|36860700013|35042699022|1800799024; X-Microsoft-Antispam-Message-Info: LHSp3EgEVaicFcA1RkPm9uof1IVfk3Fna34MHK37nwmAUJYtTghp4KR2isyHdVaCMjSuV9AOPIzHdMsaoa6FSNu9afaM2gtZASOwgBFOx44cqsLvTss5T/mz8Y2+3kfe2ZLnLzlcPDcZLW+Crp+VQUNS0E99InQNNsgJSkCd+T3IuVO2O2PUjUyLVBoao1Ctzq9hyiEeNN5FvgQyvma/9oq/bwLujiLv61h+Dy3VpAjrHTpakKrg5N4gbH89iv8x2y8FWyOwpWZeDI0i6U5c8puMcJyBBd/oYYRterdNDwlQ0p+zl9p4dEvB/qJfEbHcvQufJZNXbiFpGnqz4jBPVXCrqYlZKrMLRSb/m+L0yuM0dtHE3IIIEMxwUA17ufz16lVgRKwbdEDQecWxREzxWJwtxZmxdSkG1xlwiQI7thn+IdCLL38khNmzdfuJGfqJAFi8DdEkNh9laJbvxcO5xZ1/rXbCmptMqzWIm0+9XX8rt10tidj9jKi0vpPLjRKRly05+M/Lq7sk77TbaYnKKPzPe1AkBqg2ZlWp9FY1UDJrqljoX135VhI1USMdLLGqHB8HCuzaThXeaZJmwqh6sdIVqZQ0ulgOUiXWco6Yy+4U69hCRX71KcmQ5ElzbuSsoYhkVvSyP4yqN7xxaM4ETO7zmNwrH7qUiauK9ZBwkjlLJJ2YW5Cj2aLs4ProRXT/4Fyuwd3i0ID5Z7Dj82sMivPEMckcLzJX8e135ldoh8fUuIVBypaT5friWAr+oPiD0GU2FkKQ2pHBlJjcUsL4HMkZ/jpQZA86fLqHJkOA/A2YlcK1GUkSVrVy5HvbCl8RTWy8YoSqbfRUcBOQs7ez/01wumbB7qcGrFhGygVsO47QkAay/0O7np9Fw7ohlZEJFYb7SgLAqi0P84jnr0GjBaKpHAdW0rzVGlVgf0t3AA54j8VHvjAHXzaRNcLLa+B3S2R7m8kJCWuf6nh3LwvbQ4ZEIJQbV3VbWcAhyDPSsivJFrvcGJoQQ/+BHf0T9aTaTOf/0lmw22/qljzBd4tav43ef/t0tZnZ/u+AQs9TV4Zlczc0Esf8jg3yWUaQrxfqJLBCbYaOSYnkap7Eqfi3FxOl+YynxjHNnE0Hjodvuxj/YFr6qjt59nFFhM40E/uHbkC7FzITuQKV30xOJzkO8l2XQoMXVnI+SQaQMItWX7qwUtpAB3u3jZhTLGT6tv/DhbtUhgg0Fon/Q3/I4g2rtfd/tsi4/i0Cw8N3tJOiHUm5A3jb9J2Z3Xr9/ZiqxkDUvxAgik1mWhxrIs2G36fSKr2XBBAnQInVZr7UVwT1M2Z3UagG/YKGD/fV2QWRO3IX/mJElQlhdUgL/Fvq/K4fHZhTe4gijpJKCYCYh3j/gapokUepR/qhiHCNbZSho8qU/bKJSgr7f4dD0JXII+Mr1w== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(14060799003)(82310400026)(36860700013)(35042699022)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:32.6768 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5cd075fb-b7e2-4b8c-8d7f-08dcfcc07659 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D08.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8649 Subject: [ovs-dev] [PATCH ovn v2 16/32] northd: Sync routing data to pb. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this allows the the ovn-controller to later find all ports that participate in dynamic routing. Signed-off-by: Felix Huettner --- northd/northd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/northd/northd.c b/northd/northd.c index 75f1d652e..46e209fa4 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -4114,6 +4114,16 @@ sync_pb_for_lrp(struct ovn_port *op, } } + if (is_cr_port(op) || chassis_name) { + if (smap_get_bool(&op->nbrp->options, "maintain-vrf", false)) { + smap_add(&new, "maintain-vrf", "true"); + } + if (smap_get_bool(&op->od->nbr->options, "dynamic-routing", false)) { + smap_add(&new, "dynamic-routing", "true"); + } + } + + const char *ipv6_pd_list = smap_get(&op->sb->options, "ipv6_ra_pd_list"); if (ipv6_pd_list) { smap_add(&new, "ipv6_ra_pd_list", ipv6_pd_list); From patchwork Mon Nov 4 11:04:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006175 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl; 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 4XhpY209kJz1xwF for ; Mon, 4 Nov 2024 22:05:42 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 0644660B12; Mon, 4 Nov 2024 11:05:40 +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 WUgKZl7ZPPUO; Mon, 4 Nov 2024 11:05:35 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org F0402608EB Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id F0402608EB; Mon, 4 Nov 2024 11:05:16 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 825C6C08A6; Mon, 4 Nov 2024 11:05:16 +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 2366CC08AA for ; Mon, 4 Nov 2024 11:05:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id CE228408EB for ; Mon, 4 Nov 2024 11:04:40 +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 Wt76NhYUfrjv for ; Mon, 4 Nov 2024 11:04:39 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::606; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 9F1874071B Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 9F1874071B Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=a9im7Yfl Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20606.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::606]) by smtp2.osuosl.org (Postfix) with ESMTPS id 9F1874071B for ; Mon, 4 Nov 2024 11:04:38 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=WwHDrDqfN9qd34LxXvhioX/yU5hEIok9+37DI5Hz98VgDsxyoYUIOM7e6sECw12rCb8ws5lsca74/WGqGr/uyrTpaC50FWlpA/Ryjx4Q5F98Bc4g8mIho4mpIAdxj3uZc6MrRA+eXUAfQry1YKLx8aU4k7Jr0nLh7AuR1x1VHpbf2DTjeq36o7RNi+rE/Qfps2I23TuJXS0CET1XtQgJU6p9ysac0qpH6hUavJH3BvPSMxKdlun7zpane8zaBhZ13YMe99yWnXoF3ReoY8wtRj4juXTSeIviJpNN1mdiM6goygm/F3EA3pYC9pnKW1XDWvW8L/T66uMzvQh4Ex6DCA== ARC-Message-Signature: i=2; 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=Vacei35TeHDcjs+xtPImSS+ACKjaux/+XrbMlWO3Sj0=; b=QwTwEPEFu/NSIhHWT+kSl506spuBfPqxUsO28Nj6lMzvOwcMw+o88mFeZe8J0GP7ATP4DVS7/zbOn/7FS0PxmZFnmGr9eNdvvvkkub4QF7mjbmkXZAzHyhpQ27e6UNoZ1U1X3wBoEz9DNqCyp6Sbf7xbIHWMUKOuw5QkJ+3jaEJV717efG9H4RocOwb79bK0daExWj0FwStIhlkHcYqIZwliCzZjq8MIXhy83zRrnmpQyLMi3+yBhJ4fS9dxhFZeVsXpehXxvdHkYXMnZzJQy3IkVi8jJK6DFm8ulaIHbVse+LtBxgnSYnBFNfYk5Omm5rRTm1rZ3MdMDFusNBquVg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vacei35TeHDcjs+xtPImSS+ACKjaux/+XrbMlWO3Sj0=; b=a9im7Yfl3TkpXbMnZObbnkuVSlehUy4oHOaj0iMeOFC+Q9baXTSPJyMSjuPClFE54F0xl7kFwhOQoxELPyKjR1k0GPZyyRX52rC9wTEHFsWXPvdPtgQhnzZ1ssHD/CQa5DVuohCPFpNKjlUsHeHQ3aL5EPF9QFo4ZnkCSCOQ4Ohr4Mfn5iQEr7LXQELIXqVjEeqSNy1dT3GVL22h4NToMZACMuiKiF4YJKbIhdY+vT04s95CcaxOd3Uzp4CJZtuYkiYW4Lg56+qUzgKuAZEKUjDc1p7gsmiLfabij5vsnTbQbnVTsbH89hE9pDtTECcBx5uEV6A0jsW/rrfDjXfyCw== Received: from DUZP191CA0037.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4f8::9) by DB9PR10MB5140.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:327::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:35 +0000 Received: from DB1PEPF000509E8.eurprd03.prod.outlook.com (2603:10a6:10:4f8:cafe::ec) by DUZP191CA0037.outlook.office365.com (2603:10a6:10:4f8::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:35 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB1PEPF000509E8.mail.protection.outlook.com (10.167.242.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:34 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:35 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4074853 X-ExclaimerImprintLatency: 2411643 X-ExclaimerImprintAction: bffd2a80cb67420eb68f58cae44ad949 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Af9A7b+wHdBA6oOnt+/B5lshxywftPiv3O0q9yjncXvI+rp41L9C3ggT+m6Pp1LZ7kt2mKycXYroaew7UhrjDDmhIVb2a8OO6DUvJn1SsPKC31OqzWQQlVQu+OHCB/aEqU+hVxA4gv2aFvVkNgN8Z17ZsI+paTuKJNYNzUENaYcoDmPs8CznhzAXOpH9yMhjZWst9cTiLoRdsJDYhre4g+bxClE9ITZzWcneqZxY3amHFP3/k0O7Ed39YwG0hy0XNLGw2KodC3bCXC/wxYmAn+uaTfXgK/VebBug8MDsO4ArptBTUYGhtXSWmHXCXnpM7xfRDnTpStcOB72Gdsl1Yw== 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=Vacei35TeHDcjs+xtPImSS+ACKjaux/+XrbMlWO3Sj0=; b=kMZPz7BXanL0Yv3TiSs3uIzB6DGlM1Yq2XNUHpyAJWhqXKOeX8aEIKDkNI5VF5E5jaTWB5SuZhwfC3aX2ggwcgvJ6EMow+feUM+PXEcd5pA5OYvQdj9R0mTygS2ujWGXPumCdr9wDQr7T0FG9wG3fKatgMmSlTGCQCQroUji6ul99NuN51RLxLn8PscFA5kgRup7OitGi/e1oKr4qR/BhIol1hFkv43mHwBFzyR/+2OHYEOoFG0XYkGYdTsbotIpZsWqzmow/4id4VK+NgmwVOa+nYeRLJ7m4RLDSbBsoVvGHywBajUMSsO7LXS+m9k7QFy09X4i6Lyz+p+75ExF+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vacei35TeHDcjs+xtPImSS+ACKjaux/+XrbMlWO3Sj0=; b=a9im7Yfl3TkpXbMnZObbnkuVSlehUy4oHOaj0iMeOFC+Q9baXTSPJyMSjuPClFE54F0xl7kFwhOQoxELPyKjR1k0GPZyyRX52rC9wTEHFsWXPvdPtgQhnzZ1ssHD/CQa5DVuohCPFpNKjlUsHeHQ3aL5EPF9QFo4ZnkCSCOQ4Ohr4Mfn5iQEr7LXQELIXqVjEeqSNy1dT3GVL22h4NToMZACMuiKiF4YJKbIhdY+vT04s95CcaxOd3Uzp4CJZtuYkiYW4Lg56+qUzgKuAZEKUjDc1p7gsmiLfabij5vsnTbQbnVTsbH89hE9pDtTECcBx5uEV6A0jsW/rrfDjXfyCw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:31 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:31 +0000 Date: Mon, 4 Nov 2024 12:04:29 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0116.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::20) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB1PEPF000509E8:EE_|DB9PR10MB5140:EE_ X-MS-Office365-Filtering-Correlation-Id: c09536f1-b85a-465e-b355-08dcfcc077a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: elfKMLRvgzVEVxFqKpVQxFfCaRF5wWkIJVf/f8mgtTApHEcM4M33yYan8OTfLv964cg6Kri4LQpnr4Xysk2hBCCiXLP0xoeE8jLYIbtlBUvEtMltOX3McFuiUZ/KQ6SXn1ihNl9OsN8glA1+5BHtYIDV+WT2vp19hfLhe6/cxw/xF9XX2aLe6TVh7DIjTJnva1MDkMcxir6RA+/AYqNWWPJY60pt920PD2lbSGH+yRojD8ebppvPP5FBnH/jFr4IQGl956SovDlROElGYaM3PZDzu7P3Fw3+Zc3pqJYfodVVrGCLR6DM4BTkZOf4Cc6z5xe5junWlm70I1t1M9Z35eBYfFjlQJj/VAqYMcgCcCj75s+B5oFzIRHVzwX3DvfwMWy2T4PWV4wLchXOILDtkslos0FDESCAhjvwW224Yih2ZUmQ+RjtfL4NJMdccsVomEBq+it/sTqneV65v5jl8LdyHQN2kOeeDdu5KmDPOK7rr59lsU5XvUAl1iCoH6bw2kMC0qK+p/roKt3XIm37XPHhPyVm2l7ndnasKDwOPX/MJh77OQX1JngnFHivSiJTF781Udml/VRlVylF+2AV3QfqF4PrKa2N9MFZAg05CZQFSd6SN3vYHDzlwSSray26bS+a9w63Aj9J8QxRYhJBhi+ralqwr1O283lIZ/qoFimyWHn5mTRtO6DygMnBwSmcB/mNxhwqmg6DdUgeBEYz2LRTTnVo+o2z1lAyO5Hccf8vw5SvH+uPjvgnf0+mH1QiIUQoosH2BYNP0mbkfUixyQYAN4jq4DZVw6z0W4ZpXEtq9fGbaaupmr7qmHUsBkYg4QTmul9lMx0d/6xPRuQCenoE1SJzcHeSr/4Pqmpd+1uCITfNOwDHuyKVer5b9cOrkM7VWckRd5vmkYkINc4nwwSIrb1D/xHSlH/9wgAyo4nzjawPy15TX/oSSn+ajNDPMNGs02zV8dG9PAtCXQt+e53VEmqm9JZfcJw2tdIB3jMTMPyljZY5R1dWqe+pRhVI7xy0vyG5XhWDYSkI2qqVtLiBq2HTM7ytbyJNeesOi057Rjba05BrqqGQ2H9tViwwD83tfF3AbxDCFgGAVeaCSyUVoPtoEYebPC6s9ogBG8KRoCG9unNzebqwv7g52LT+mrJFIjbt0wVk2NxKHPyuXOKPCN8Sz6KYFSc0Jtg045UsgQJv8KYkoAPrlsnvBtYBhywsmgmK1M72xZYpy4SCb1lSI8eGSxyLJzNZJgL5R6xI4GDwHlYoPQGIyznMPOzL X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509E8.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 731fef2d-6407-411f-40bd-08dcfcc07592 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: imeZIHk9ag5YerfHrzrm7biuhWZ7NJ9/4Td7EOKRNbCaobyFEG4dHDZVYg1D9PN9pUKF+33ud6XZHIOM4+EnIbsyEpf0SA/LzzMm34Iv6VDIcqaNRoZQO2apDEn/HvWQYzBvuz7kw+u5HsCZbE8pm/DAUq2QFTU/KynJad3TOihiTBmnEjdZwzYphLiZ9eumQX5/yWY33SkHKlll5DsNvlXt6l3TdN0nNSiguHrp50ndQRWBRacKDLWv5ESlfZbH11hC/Jl9hDOv4S8IFmN01vo/59KiJ9NbjA2KoJ2hdxAYvKCxzUEWUZ1X1qwklVLfg4yRCflgSADfTeE7K1yFXfpBNFuDMCnkUjxHGn26CeuRfpj/8FuymThLH6MBQ1L4fydkh5pI5QnrkpcfR8VUrd2MV9r/rEjC6rhd8yrOK+9eytAklucfaZTtnIMT2OFGybHfbRE2oG9rSBSqfTO0QKv8dGP0duma65Su8Sf9jdMq0KLLeLh/4vLYXznTqGj5ZBt1Co0YeI9MG6+K1lS948MsERLHivRKbyHWLYN7hvaoT+V6i5/25rcTqnNm6sqcGWZMxhyZHcGYkPU3YQBoRFK0u5H5Y9M0r13X5++q8VdFpDXhCgUlAmr8B76Qz980+iu1BdC4bo4OSct+xXw4ixZvbp4hpc982lxaKMId7BjoRQ7+0p+6eJdpNggk/opYcKIAQg5/DDJVBaszSkcOEmtAbwpO6/XZiGLR8ZJuxGdV0oEod/XcMJope4QLG0oh8Tgro/YtPr1zWO8sMsZSYKpjpKl0PaA7fr8XaeumOjJNgBDM63vkfJ8k8oasFzDk9f2bCdwevfeOo6COwuqTo06rRqGUSv3otEBRU1t7pO7a2+IjSUClzukye65mCcto4qGT0k68gbwO39p+BECrw0SS/DF3dOM9NziUuvmaueeR0VyufPifc8XKscPjMvFajbf/LScl7furgJNAXxG8Wf5TvNvrHu2mWA5rsUm8sKJi1viFCx0BnmhQcY8LM4qDZVqjowG+CAdfT/TBqNNFxnJS5mNecbD6Vq4pxp0aGMHscZ81OzW+5GN1H5dM1/o0e4M95r7FCVu36SXfGrohnuDLPZerg5RGnxTbu2ZKLoKWRuz9RqlIRk3WLfo1ER7x2zVqTq5bzrOUcHvqxb5IgX4Mql7P8kUx963EvwPmB5YVie1hvdgRQLym+bBhbfYZbYWSIC0qgslLncDaOmO+q75IPxBuw1yM6U212lixYdmnpNPJu70M/8O3ksS3gCkQzdJiHrxfETtZxpjhtF4NXWGlJgpOOY3Q97tpVdwkfGzJ5g18ROKREiA0l2dqxItEQevgxBPRgV36rcZ3OQTFAQ== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:34.8379 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c09536f1-b85a-465e-b355-08dcfcc077a5 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509E8.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5140 Subject: [ovs-dev] [PATCH ovn v2 17/32] DO NOT APPLY: Use my ovs repo and bump. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this patchset depends on some additional features in the OVS repo. As they are not yet in there at the time of development i just reference to my repo here to make ci testing work. Ideally i have sent a link in the cover-letter to the OVS patchset that is needed for this change. Once this is merged we should replace this commit with a bump of the ovs repo. Signed-off-by: Felix Huettner --- .gitmodules | 3 ++- ovs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index f0d1f8cbe..41b1ebf35 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "ovs"] path = ovs - url = https://github.com/openvswitch/ovs.git + url = https://github.com/felixhuettner/ovs.git + branch = test_active_active_routing_v4 diff --git a/ovs b/ovs index c598c05c8..70e6a78ce 160000 --- a/ovs +++ b/ovs @@ -1 +1 @@ -Subproject commit c598c05c85b2d38874a0ce8f7f088f6aae4fdabc +Subproject commit 70e6a78ce7bd152ccac6db99d49a532ed342f69f From patchwork Mon Nov 4 11:04:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006179 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=lD0Na8cj; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=lD0Na8cj; 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 4XhpYq18nDz1xxW for ; Mon, 4 Nov 2024 22:06:23 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 7958B607DA; Mon, 4 Nov 2024 11:06:06 +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 YH3PtMQKv8KE; Mon, 4 Nov 2024 11:06:03 +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 4388B60838 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=lD0Na8cj; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=lD0Na8cj Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 4388B60838; Mon, 4 Nov 2024 11:05:46 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id ED25AC08A6; Mon, 4 Nov 2024 11:05:45 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2D080C08A8 for ; Mon, 4 Nov 2024 11:05:44 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 8ABBB607A4 for ; Mon, 4 Nov 2024 11:04:44 +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 6eUv-TsIZlRb for ; Mon, 4 Nov 2024 11:04:43 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::60b; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 0052C60810 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 0052C60810 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2060b.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::60b]) by smtp3.osuosl.org (Postfix) with ESMTPS id 0052C60810 for ; Mon, 4 Nov 2024 11:04:40 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=etyfEKtfnOGziXxmon7NDSLOab0thktdDY9xPMll9wJJ7Qd4JcBdndK9J4fgTFTe1PCJRi/+8bka8eWcw590CzmmwvF5GKus8D2ooaH7c4/J+93vIviAmmeCE7Zo1WOVZG9FiQnHWluXmx8PpCJMRrAWzI6o4TM3ZTRHPjngM0Z33/zfIHoY8Aidrxtm6+Y6azxFflw5GZu4N8J5L+BI9pqYkKx+jIYrYs55BdJdwEAvpv1gC2T1LqiPdYX3/csVIpVUavXSiirLtMwFBNdFiwBoSPgsUwsryXIA7nfVJnGAPZou6pDE6rCDXoSAGcFG0xRiRZYeHszQ0cLER8AFXg== ARC-Message-Signature: i=2; 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=Kss53cjHbmN9F7rBLNKgGFJ4WZWJo1xMnj6qrWRcNTs=; b=qRbo4JVoSms3Feu9RMO8M60j7iKdYbHOINw+GWv6rWeBp7xwONphJP3Pla8FjiM0oK9Ls/ronHULrEJDFfPgDzDxpfbN0Iyb8uTc5th3M4Si0xDSAHR7TZkbHsrzZb3D1KNQWMvHM6fr0xvvJS2cDX9ozV5U/prQPH5jejyKwqDpQL2JwddLFlavscTcqEc3LDlajBt7oBqZEojUmutYLg3eUa6y0Xq96S9OW7nHbtY0vy0FlUCx4Td5mizw/1oSMCw/oy9NN+9yXF+M8b3gt01ZPChNX0ZSfBZ2l6OqmTRwC5ymYn77w82FPdIhWMcUQUGp8bSi3dDb5w3kg1dlvQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kss53cjHbmN9F7rBLNKgGFJ4WZWJo1xMnj6qrWRcNTs=; b=lD0Na8cjXLfzBu3yLJJwHYtggfqv4ef86fg0tu0xo8pK2nWBNKRLbmuTjhZubyWpxYteySSRXgPp85VV8JUsJ8Ik5+opvAfzGXI6S58cLJYzFDLvukzzYDUytDrfLMKyse9eE422v/QD6Cbl5aY7iKZDxQE/V514IVIXyQx+thPGFI3zplkj/RXgAWez7EgJFA1BoALhw/57+IAvIZrJ01jPoH4zQHKyV1ySYm2LPI9v/lZ2DIlcvhdBnMvyUMf0VMIlIeQRyS9tgX4QL7I/Qfty9ENI3ETvZS2mlOjVMhm6/zQhe9+1a6Xo6u2fQSLy8/pIBpSB0O8pdJnAx7Dj8A== Received: from DU6P191CA0040.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:53f::15) by AM0PR10MB3522.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:153::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:37 +0000 Received: from DB5PEPF00014B8C.eurprd02.prod.outlook.com (2603:10a6:10:53f:cafe::37) by DU6P191CA0040.outlook.office365.com (2603:10a6:10:53f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:36 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB5PEPF00014B8C.mail.protection.outlook.com (10.167.8.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:35 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:35 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4227849 X-ExclaimerImprintLatency: 2386098 X-ExclaimerImprintAction: edfe249014864642aae228ff60cfef60 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TiFl/fLQa8fB3fl/JKbZd1/oRTCSsaNjOptpc0Lrrtgo+doY59l7Fm95KRvq6tG++9uTmUJmbxj7Q22xG4uqmeR5LB5th5gRRLvd9JsomoNwB7bIKWosXEyArzRHIYvaIwED/WkLxU7q5s6fVI2Rw+UdYH3NyHAriZMv10LJFTujP/HSfrEdSp/k2v/iFe97B4SYzSAuPJTUBYNutVek0bBBe5LLMEam5eBCC+YyswmfxbHZ+2sBqDY0swVQMk3VsjCiD1VuK+RmtOUbfJ28YTwo8MecK3CjyGN9li85xOIaFrrUM6eq+3clk+Vu8g1ihUTp/5zeRRA4eBdax0ltVg== 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=Kss53cjHbmN9F7rBLNKgGFJ4WZWJo1xMnj6qrWRcNTs=; b=JNtEBH8g/K9TFpCNAj+vDGlQuayHXUqLWdCJq5WdkuwN8+OWC6bVE4e7HU0CfUIWYL0EtU9YrXJ0yKEGBoMSuoPBuf5mr7dhy2aDF4DQzQZfGEE5ttFIS3jvbwgnsp2W2T5HI3eiOwhJBeJixzKnNSVXakV/wQjG6k1z3hKiSKFwAtIojDfH+9omEYJi3AitM6nOw5S6M3g38UvN0OOUd3YVgUz0ZTudLtj8jahM+gtK62JBXW51gJS3uAMSOTEWRZl1C2r/BxeUikIZKzS3yPHgtDYDitviBOaycivUuSpOfB33Qahjs0X5EMOH1axS+e56wRJJ7Dvd2I8lHWEgrw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kss53cjHbmN9F7rBLNKgGFJ4WZWJo1xMnj6qrWRcNTs=; b=lD0Na8cjXLfzBu3yLJJwHYtggfqv4ef86fg0tu0xo8pK2nWBNKRLbmuTjhZubyWpxYteySSRXgPp85VV8JUsJ8Ik5+opvAfzGXI6S58cLJYzFDLvukzzYDUytDrfLMKyse9eE422v/QD6Cbl5aY7iKZDxQE/V514IVIXyQx+thPGFI3zplkj/RXgAWez7EgJFA1BoALhw/57+IAvIZrJ01jPoH4zQHKyV1ySYm2LPI9v/lZ2DIlcvhdBnMvyUMf0VMIlIeQRyS9tgX4QL7I/Qfty9ENI3ETvZS2mlOjVMhm6/zQhe9+1a6Xo6u2fQSLy8/pIBpSB0O8pdJnAx7Dj8A== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:33 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:33 +0000 Date: Mon, 4 Nov 2024 12:04:31 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::16) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB5PEPF00014B8C:EE_|AM0PR10MB3522:EE_ X-MS-Office365-Filtering-Correlation-Id: a76289fb-e142-4160-e01d-08dcfcc07818 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: /ztzAkXpiqA0sQaDmtLp1ZepBgZR3FTKhABtYyiroWUkwuD4tdp2CBQq/sVZw/VQPp3Q7guFMyYWGWN1Ov/SrGu9LTG+ri35/8D6qbQe0jJPoADPNKySNe05R4S6tgjd2wAU8HGVgub1zAQ4Ky6h6opFzxlRjF6aLYZ3qNlXZxvcgWAD2yT1wbFOhQ5o5Tmk7ajBPHEOkJjhAH17n6UA+G4rSZ6xmuvvwUoqtiNroiOsf/kZ79LxRNtuLtbanK9TphgQMoRewFLYbvgstdRJJktn6sThLdqAhbigQdVnsnEFxPp7FKP2u2xXQQsiT7O+6EIh1+NRXgDk7OE7rir/dj/2BPoXrWgpIyLHk+tJboUbeuycn1UxSpFjR9ULVdZTbJA2zGmfI7qBSB5SLYoSaBvdi+JAbJbRd2oAFFuHYBOgMRgKQJ+i72O49X7ntHytdE6ihhXc6qICw3cLADOODfaJQmsiNNooVVWDKc6vjjUghF1hldwOsov6ujPcTTHz9AXdVAK/3GpybIuydh/pzYlv9Jw18zU3tEmtdMJNBazU1EVIzopzxBn+rHpSLh1MA0zd4LixhIjz7Llv2cpXfVHQE1ZesvztrXOk6kLUGhTvL4HbCYIljWBOjU2yVlBDebFO6rJIdKNhXDoVpW2Dm6kS/LPqvR5UF1QjDbS//4Y9LiboE6r0/rmxFMDfQpvnB32EzrBiSDnf2upvRZraLmwIz/3eD8bXpJ6dukrMm5G/Xxw0zAZZ8YtRVG6oExqDfJ2vjWCMdE90Thp4aLfXxTfoIyh9IoIiNbDGirSnFUNJCzZ2525VH4FXI+ze78a3VZwhRmMS7aRhURkUOBDpvtjBDfczcFbCBhe3fr/wrS+QimQZy6a0ddtR59mt1ipY5wzQRYh8OZeI/X834PwRjfXHi2JoER1jKPTXlo4oTnuUJtxCyWg6kWEgqUBEgL/oPq3jdkbofh3xK/28jHqz3uDwWTAdk4AadxRD1KOhxeP23OcxCWheXYB1oGgPn7tSHza2oYD06Tu2PbnYpv9CdAOKv4wfOSqG//iOCdNab2MgxiSYAkHmZesBzVXoYxpC+GW2TpwncdHfplKn6gPZir5SJp2ZZ6ANrX7pKplaA1+XOiaq+ifr5TwXZ3fmA0K3POFyhdV+sOc2zsOtUBw+/7m1/MQTP6GeQzrgG0Mmqtwt4Qzw6wKCgisgywJoo+ro/7TcX5aCVKA5RrDl6mT8hOzFC+oq+yvjgHkKAfjcE+jUOoxKBCA21ky/Du0cw5jZBCy6KrC+GjIrFXbP9EHp0zwPPCcB6L4sO3S/hyF2704= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B8C.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4cfb1da2-cdbb-49c2-cbfa-08dcfcc076c6 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: 3+oJbdCPTFEtj73fyCk0yma9mJcUsqepW68tb1vf42L2zGiBPCI5LzgsXaE9aR3NvwxnXxpNz91b7OSWhD4pMmpxGNYaWkreHC5BnwMrYPtjGry2ZK+Wbs10u787DTrb2a2N2GQ56VMj+q6MCeFN9UF3EwcPjJr0pPvmbXD0Mvbr4nIeI638n0Vgpu4KMVRHzH1/NHJRcm55pBuE+bNnK+k4dF8+tejQaSEZaiXx6RzBojFoEFXgFl37t9Ek4yds9SQKN3YLq2Ivtu+cuUBfnrJo0mbBehpn1vLOVFavKMVFepRd6M3atgrlBP38vp4DRrt+ON+IT/vVmxpXbqZZPX6E/I9mUaKtR2k5rfXZLCbxP/EyEHOjXz6tgD3U3JDaiK+hnlMSQSpk8yR2U0wL9VktS5tuGZYzBK1S4phuF8/fH/BjaOCwKzcdxXq74FW4IyeJ7s24wdvtt4b6K4VApzxvl6BM/2nAe+GSg9So3eiTDSdDGQ68GaCq4laYm8Oc7VEeH29Ff5oPn/Fg1H0qD6TnHgRKsg/uyd2qqsJ2XyvVuimQ+VYTWhESpNBPB2CzKuoAmgQ2r/TAJcGUmZ7w44pNLRvO8NGJ9bMlH95Mf1w8eTOdWitEKWlBXiu9ybiqc0V6ltqrNA4NcR7rDY/acxwz6FK/DYTe6ib+0raizeVVk2jFiUJd0nrNvIT5o6wsIORenJ+cr3rn5/0pBLMKEkj3Z7OQC+vuOd16/Gyp33+hTaea7moutsiNpL3sXC/y6DZNFddkDdTemjhL47jqpbliLqse/Z2g9KLcnpqpzmolsLQe3259FHeTZ6Ibj/BZKi9B1Jo5xUf9a+2tFBJg//E4QaPhVarb+ZFzwK6zfpu3rGZBEbb4AovKURwLY9ER11dTnxEkf1nmTAHBLSlIGFvmsIjawSQZLqNBO3KZOqdEQEhEeBqqbIMnuAJlNQve1myqLaSIh/paQt2Y+G8Fgr1Bt2eBuzM8E/LAOwfxQB1XOcNVQKp3v8HpM3OPLomI/4ITYSEVhMXoOgr3ugaghaCdar7tLYh0UrhsJlgtbYiCwAMdThS+HO4lM1GrBMsFZLnwITIxbEEHGGgQyDmDLxbm35bvaDP4lgjSOpKjnVJT0K4Bpgz3Dci5PbzyQDzibzCSXQt8ZnHdQlh6cRnDLDmTRaiyNYuJT2WReZsgOeSFPayae/OgCnRsIbZat3T+Y/KUYBYD8/uxDIpZsOG1YxZLoAKz+2UoRO2YPOefHOygNC/pIJ9b40EQ2DN1r9Uqg4aCmTORyzMcGJ63exPXKzubdUdJ+RKC1+XHufz6HzYDX+wWakxSuUuZN35hZs5cWYWOYzf35KReOdGRWlyT/JXi9oSuw5HlUSJRHyT3KibN4uGit+iIySFH7w1agNjnGqj939Isz64NnWKpx6Na/Q== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:35.5146 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a76289fb-e142-4160-e01d-08dcfcc07818 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B8C.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB3522 Subject: [ovs-dev] [PATCH ovn v2 18/32] ci: Manage host/system level dependencies. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Frode Nordahl Most dependencies are managed in the `prepare-container` job, but there are some host/system level dependencies. This will be used by a subsequent patch that adds system tests that require the `vrf` kernel module to be loaded. Signed-off-by: Frode Nordahl --- .github/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 82e09fbef..12fac0c59 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -108,6 +108,11 @@ jobs: - { arch: x86, compiler: gcc, opts: --disable-ssl } steps: + - name: system-level-dependencies + run: | + sudo apt update + sudo apt -y install linux-modules-extra-$(uname -r) + - name: checkout if: github.event_name == 'push' || github.event_name == 'pull_request' uses: actions/checkout@v4 From patchwork Mon Nov 4 11:04:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006181 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=X9+EaWEM; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=X9+EaWEM; 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 4XhpZB1Szjz1xxW for ; Mon, 4 Nov 2024 22:06:42 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 28E97810CC; Mon, 4 Nov 2024 11:06:30 +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 XS--DtC0NgtQ; Mon, 4 Nov 2024 11:06:28 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 7B68581184 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=X9+EaWEM; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=X9+EaWEM Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 7B68581184; Mon, 4 Nov 2024 11:06:18 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0DCC5C08AA; Mon, 4 Nov 2024 11:06:18 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0DAAEC08BC for ; Mon, 4 Nov 2024 11:06:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 029EF810E2 for ; Mon, 4 Nov 2024 11:05:06 +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 FJI7El7O4X9b for ; Mon, 4 Nov 2024 11:05:04 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::631; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 9755D810E8 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9755D810E8 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20631.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::631]) by smtp1.osuosl.org (Postfix) with ESMTPS id 9755D810E8 for ; Mon, 4 Nov 2024 11:04:54 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=CfZpEbBKWYWv0ong80bKHJ/PL2283FMuohlln8IFfGd0J8vytv/9S9Z9XbTBNp+8rbhEiEE+lAhTMC5Bnk1IPWe9h3dmdbj0DDexTXllVWItEaCM3Exc3b29bSu+iMN1QxRhdVGw2XJzQ1L3GT9Xh3pZerRqh80qKIxu3zsqWBYg1Xo1bE2rndcI3lh5nTxR2nQgZaQMTxmKUgd+UYzcexebAxzymUtDt2JXg//hIU3EJ5DEGGfXzI27A0kGVdKs4KVwSp8Zqc8hYbQH4BYrzq2dgvJgTUk0rkQI1X4ol08v7RCaRRo3WdWuTCms7Z1O+cksilFWaF5RdId58y1Esg== ARC-Message-Signature: i=2; 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=jAPgEUcwDyMnpFPBCzgHcdEbUZX97afEt7OoQHe/Dbc=; b=IonpXqI24PhAymjri71v/yrBCQGkj3ucEUOXCRISDWw421YCQuYgInfcWkFKOjSeh3VmXLDGvBUXddwa+kKPceYiDBeYTYbTENfDvzxmr8zAfyXWyYyfkhHcHCfhrt+kgasAvTN/XEpN4jjrm/rtzc+yyMCNVwth131PwcyMvYBjizHcRCasANskap+Pk4Lf9r63pdA5pyqluljHrr02XfS+j3+Ozq5IyMRAqCui4qwEOxlOaHWv7RtV3MB7vnJa2dhCkGRI8SNGQNCJT3DuBXh5U1GHWYotw4u9oDS+FAZN9ceOW/LiGGgToMG7lq3/Jht30xMk2n9FJbsNGrvAig== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jAPgEUcwDyMnpFPBCzgHcdEbUZX97afEt7OoQHe/Dbc=; b=X9+EaWEM6c+5GJzTC/iAt4X50ROBiCiUrkXRVjY3gXla/SURAC6NVR7BPBs5JDU9j2YF50nB7raCftPLsGrEYB4zpMrqbKPlmM8vhcpQA5csaqXSj0S6SUMg7YlTZ+mjrx7ynfoeMgtGqvXbG/N0wm0QPxKTbTJOmxzm5R9tq8XkAhpteTtKUktO0wqmx40XJ3bNgKPLBv1MX2GL9xHNjXHBZ7wSUUa1fgSN0msDQcoHPgC3Ot7X4Q3p8lOmAlHSA+bArN7Vzo0a3FEVGu7GM+ZkgtOqXvSeI+jf/UqCBWg+ODLztj9P89ck+dax0+R1WQTLqz/WiIPDeQMarhdvUg== Received: from DUZPR01CA0132.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bc::22) by AM7PR10MB3889.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:172::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:51 +0000 Received: from DU6PEPF0000B61E.eurprd02.prod.outlook.com (2603:10a6:10:4bc:cafe::ec) by DUZPR01CA0132.outlook.office365.com (2603:10a6:10:4bc::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:51 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU6PEPF0000B61E.mail.protection.outlook.com (10.167.8.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:37 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:51 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 139862246 X-ExclaimerImprintLatency: 137972041 X-ExclaimerImprintAction: 6e8e3140a9034ee5abba558892f9b35d ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iB0xc/LDrivo7Y4t/DLnWgn4CDqWN1gihik/S0qc+lqOFbjoc1AXcBLa95Ui2eFIpV+LKJLLs4YPpr91GZ++V2BlgRL8S2yAYywk7fevL/eoH1iXuxHECDS95dftfIL8mhQvOAZ8CsiW6ah30ZbfaLsrEW+oUjDl+wBMyeWWraO1RgF6f6JSAOh5CwMSFLWn9CHY+F2ZmJ1f0og/bINJ5+pmlQDrEUvEu4EEaA5yysKhJK8LJ2y13Rp/8mpgSVoy3XQwL/taAgXXdvh7uEhhSLFg6CycWGE3eDkPKPdEliECVq3/tTlnp4F6HQbdTRBW183lHQvxvTbhFwR6GN+iKg== 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=jAPgEUcwDyMnpFPBCzgHcdEbUZX97afEt7OoQHe/Dbc=; b=AlqfTbi2tCvoPTkTWcTnV/Ny1BZSYp/YMvWcbcOJ6oc36R54xinTluYhG7qiLA+P/lokyNWHI788WA7C1BB9PM/NxXcthSZvOzIf7SUVHLM04zyjWRKV9dcx1GU03fs0qx+zCzUrHo8FT1STqEmhBnr75c+qrdBr/xdMYTW88T41oXLkIyKvkA1X2CI0/1hqrsozP1daAVT4DCOxpJYMrdSxz1dsBWDIPgYzC0wgMsZpt+olSyHvLQ9nGUbJ7teVPyqXNLjl2NxcCeHwpwFyaqrmciuvvWFwnlfQA9/YgXmolDQFWXw/Yip/cn6qVPx03iSqjikfvV/SuH2tGuX91g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jAPgEUcwDyMnpFPBCzgHcdEbUZX97afEt7OoQHe/Dbc=; b=X9+EaWEM6c+5GJzTC/iAt4X50ROBiCiUrkXRVjY3gXla/SURAC6NVR7BPBs5JDU9j2YF50nB7raCftPLsGrEYB4zpMrqbKPlmM8vhcpQA5csaqXSj0S6SUMg7YlTZ+mjrx7ynfoeMgtGqvXbG/N0wm0QPxKTbTJOmxzm5R9tq8XkAhpteTtKUktO0wqmx40XJ3bNgKPLBv1MX2GL9xHNjXHBZ7wSUUa1fgSN0msDQcoHPgC3Ot7X4Q3p8lOmAlHSA+bArN7Vzo0a3FEVGu7GM+ZkgtOqXvSeI+jf/UqCBWg+ODLztj9P89ck+dax0+R1WQTLqz/WiIPDeQMarhdvUg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:35 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:35 +0000 Date: Mon, 4 Nov 2024 12:04:33 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0116.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::20) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DU6PEPF0000B61E:EE_|AM7PR10MB3889:EE_ X-MS-Office365-Filtering-Correlation-Id: d49523e5-0a63-4d6b-33ac-08dcfcc08146 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: 7VVEQjvj87KgEoBrzibyje19uqihva+hBsrY4gVuScqEk/Cp9pxG56l0IaQXjk9YMq2qDym0bG1h6/lkRh4/p9LOQZldg4JdW4LRBYvPKM2nq9uYRZPED9PxTfH9S5FCKirVwd7HMD2LC6jfcyE2hXS0+1P/vczBidStleFupW79uP8MnUXZ6xK2oZXbVdVNFBddeC7rlVrgJwQm3jx2Dapuc5psdcH0Ed1RvTx3cBAfsEzZTZRf/9fPcZhfToH9wNhwUXHomrjqetxsbFmysYPZnO5V8h8I/XcDMz1qZZ5zrkhWP40j/NYzyFKOu0abN/0qz3oLdoargC2ny453o90VD4J14Q5JKfZrN0IPG6kZyz58rTQQ8jp651PuhTBx9WDwy4CTXlStRxCxZxp8+d/w4vGyuw+LOsOtSz1hp0fp1y13nKHmGkrec9swNqDKnH33W8UokVIqvZTSsMiJ1tE2/sXvFce5skd+fcwJiS/ZBvq2j5aTxbfHumKDWh0Pya0HY4MWRJbX2ffcjr3rWMtZSuBKkxm/SgO7dKHaXdvLfArs92Ew/jTmQsZf7iN8qoVLxWp5+AyJ253uIfKpGN6kf35Hix3YNJoChWK9CeBy76UccaFHdNDOoLmDunazwOPLUXrH2xAOwPS5LvMCQEm+AplWgFVZWSdK8WxAuOuO4sSPcsS9Q3jVsrUbSh2r1QcttMu6zkaanv6zlFn0nXRxrwLfif7pHU28l1tGhHkuh8gfOUzOByl9EWgszBqwpoHa6Jn2K9YTJU41EhFE7hf7lFImF+wapqLF2d33NZRRAxV7Q67CvpKd5G1FIp8cGGyrvm9VK5RrRuuuBCFPVFkFD3Dbzg5+WNUZQqqkogOLghbNIbdVXC/1NXMS8KwAhWY6uAHzG/zLZovakOO+p8oP5H2jPNkN6ufhMONUBCvnb+hjdViUuZkDK3iVp/dNAdjGIZnqmI1Oc83FIYqgsZYx483gdiZOGr3HIbGGMJQmb/ubG4OCGKCmuV4js/tx7F86eAPddCfUk0op4hkQmLRBUqh7KD+YTW5+SCQsgNkoFR85eF02z0G+A5bKQI85+kDKHPDijBqKGTKbtJLY83yzRYDIB2Dy5H93ZXzQjKrmpMg28Z/eCWMmSqy4GqlDvX+TTrZIl4SMcef/cWs6vcfw9PYue4dKtWxaQrHXX9p93aodvlj9n6brbwBxmFiIE94RbFKJbQ0x4jLxA0ByJauxOlMR3oKqJeU6rrHHCo6lsFbXoObz52PMQ6XQpwXghWoCXH8C7rG8RB6bUc1ybaoDHnUO6zqHXWfDZ2kYeVeVyHxFzTHPLRuvK5HkZP54 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF0000B61E.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 796c278d-7827-4239-0640-08dcfcc077ee X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|14060799003|35042699022|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: P19vIBxvtIr5iu43hFNRWhxsRj5zWuy9eeWiaWVssrHAtDhwiE6fFquoGiEhBIJtDE04a8KQFjwQV5ugAz+kxqacYh9W7lVLLH448uRneXQ5NQwN6HIETN/IAyYDYkiwz4JwQUIxA4BSfNHaEd76Ho3+ojw6kEmRMjdGeX9nW7TYpWUjzqd1qA6L3QOgQ0Z1FjHvbebBVhvfZvTS4Hf/kWBetQYT2bekDK0VFzmhIzwxFuNzTCxLfZlTc/VfR6vt6yoMywMkWSzRZzeETIsFIGgloAVopgTPiY7/vgwDYGKcSQON60EGh5z+2G5QzNFlu8Y/JNwzT6UtCTyJl+B0kraX6NDZp145zYlML5YkDVHX9aaGPSd+GEOkPbY0mii3rMpPTxnJi3SQnxoMxlQOdtfrbKMBJoQH83HjPNlyBvsCyhu36Cho8hd4wwQ+o+AEuhqRwBr8QqX85pq1al37g1l+E60nm8xta2Jv/DFFRraPzl3tbCUAg3y7Pgq4Y0Jhs6dqUuvCvWLAFupj/nD6kwyPKYGwCx56jUm2J053AYhyP+eFYXWo4Pwn1k3tief30F8UrMMR9JhxPVcPe8Wfy/3yXDsCKtDTA44jnzgJrnzteXYA3n14kj/PRc2vf7ZQI/iDB66HhoZvAe6nj7W+nfCVZ23h1rnSxClwqn2SWmh9I04JiJUBOt9rNLNS22ODsEYhUqTtuwYoH/++Zr4a5j+WyMHxo8HXp+0B00jT4bdAxvdfh/V1nQTw09xm2M9uSr66JUy0HBDs7RrUJxm03d+uVR53+4mmnCv8mwTZi/yhGh+j/6AhHBsavA6UI7yOaB4VjQ3rPtUa4CQqxgWOCz70XRum7hwlg0FXzCN96iX2QTkbGgi52LNnhkV6sB2iRLeYpmgkSHIGRKvQEu+YECi/xe1vh62O2wbU7VU4G6ESB0dtMhtrK4W1oqp4foLwgodXp4kw5pR4CS3nWclxVGZi4w9YaCmhQ31ObheA+0A9nubJvoqz2HhUKKl/kG/H3y2WeFz1WkbHtWpLX5AsPKt+QndZ2+wGAHVOAsUxBqvjAr9nUcaDQIWA7USOdzQh3rDS3IFk1YvrbLM7MpVcoiMdM4AtL3cHtN8MP2Y3at8+UW+byoAbcMiOTjKUObqq/hux0YLUiD2kT9FTkoXAHU1m9ziEWlQLnUqvlD2wnoOFHIi/kg2kW+Lgt5x4vb4pfxaDrXakmbWKRSSLYCfIx7p4wy+YcLvmovA8ZFTQfUa6BGso5w5+HIDfOr2iiUgtm04xj30ysUhB3C6ehlXzMER9liCWcPGZlYD25lFPMahvqc/l4fMHZkY7KYV6mzZrtpnYGSMFcvGNbBnDzIPOYcpea59RWJISg9+P5WZ2rMHyYVvmFga9f+AM1egXN70VcBK/VtmGai7oLVPaW709Fg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(82310400026)(14060799003)(35042699022)(376014)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:37.4109 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d49523e5-0a63-4d6b-33ac-08dcfcc08146 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000B61E.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR10MB3889 Subject: [ovs-dev] [PATCH ovn v2 19/32] system-ovn: Remove route without nexthop. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" for yet unclear reasons some versions of scapy are confused by this route. It causes them to log "MAC address to reach destination not found. Using broadcast." instead of using the dst mac address that is already known by linux. It then sends some packets with a broadcast dst mac which are completly ignored by ovn. Additionally it seems to attempt arp resolution. This slows down the requests long enough that the test runs longer than 1 second causing multiple packets to get through and failing the test. Signed-off-by: Felix Huettner --- tests/system-ovn.at | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system-ovn.at b/tests/system-ovn.at index 6dfc3055a..cbc9d2e1a 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -7502,6 +7502,7 @@ ADD_NAMESPACES(server) NS_CHECK_EXEC([server], [ip link set dev lo up]) ADD_VETH(s1, server, br-ext, "172.16.1.50/24", "f0:00:00:01:02:05", \ "172.16.1.1") +NS_CHECK_EXEC([server], [ip route del 172.16.1.1 dev s1]) AT_CHECK([ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=phynet:br-ext]) check ovn-nbctl lsp-add public public1 \ From patchwork Mon Nov 4 11:04:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006190 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD; 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 4XhpbJ35HQz1xxW for ; Mon, 4 Nov 2024 22:07:40 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 3A1E3610C1; Mon, 4 Nov 2024 11:07:38 +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 9sb_eKmHmteh; Mon, 4 Nov 2024 11:07:34 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 7D8C560F1A Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 7D8C560F1A; Mon, 4 Nov 2024 11:07:02 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 92AE0C08A9; Mon, 4 Nov 2024 11:07:01 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 13657C08A9 for ; Mon, 4 Nov 2024 11:07:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id DCDFD406C4 for ; Mon, 4 Nov 2024 11:05:07 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id S9a-NPIT-X02 for ; Mon, 4 Nov 2024 11:05:04 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2606::60c; helo=eur02-am0-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org A55E8405B1 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org A55E8405B1 Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=E0AAN6vD Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2060c.outbound.protection.outlook.com [IPv6:2a01:111:f403:2606::60c]) by smtp4.osuosl.org (Postfix) with ESMTPS id A55E8405B1 for ; Mon, 4 Nov 2024 11:04:56 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=jC2uTIgGTBc7Y4MgG3P52sMGisSfYpC1BdkjriOY3aRiLz2ZNjofvJD0sRjcqfVw0cCFaoz+eUjwJhOERjc+w2CcwujZjHHi1MVi8+DkRcxxsM8bdI5ZA4ty7/7AaosKV9zsotqqxeQNJwULzVtLhsBtLOjJjuC0ksxoftn+RD81vr1n3lR+Y2DqVVPkZ5Z83cH6fUKRrISwD9ixRZLx025jfYi9pSsFYoLaHTEKZZ+R4wYOO0BNjISrRCG84eCpjz+gVh2IMnxlKR8wMFvjddZGQu3I+FWx4G5IgJ4+LJ3hU0Oe8YXgw/cxaGfDWhZoGGCFMLrl4WQg0W01e2tFUw== ARC-Message-Signature: i=2; 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=ikWibLis2Crs5zq7U2zqVXnpTjxmT6ElcY4nGKDvI0A=; b=B63nOVye97f3n7XINAvQn5eMyj/1IjrE+n830BI0jfebf15VZhT/telOPxHx/JU1IGHTGLggtS2LT5KqbIWT96RG742ElY/+fqWeJ0cRv3ZZfP63w1R3S7PGO8FIZRHrWzVdIpb2F32l8liU51knMBshV0UcDJ0IK3gNwL7UIcPYLJj1HyMXzorH0+MRIQeD7HDzpjlzKHZiLyJcrJcrd7RIlNBX5UWh54QLU/M7hjWMDPuH4as42rPgZ1enzsqEJtN3fWzkvKbXwZRiYKLm4U5vBoKMsyDxWw3Ge0bT0QZ8fp1Xwa+MYiWfr9GKNQCPGb3LihjLFPQhl66NYeMQWA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ikWibLis2Crs5zq7U2zqVXnpTjxmT6ElcY4nGKDvI0A=; b=E0AAN6vD2a0+hixIIoJDlw44k+ddgDdvM6fiQhQM4LE1he8LIq8rxgNPnemKgjYqyM63Dc5n2BEixGwP+GqxuDO/u2el6zrZBnNZVYAx49OKv71xulPII4ahCvSfF4fIOr/MPNsM8OkDBsLBXSVmHWjoQSA3GLRx9oFFoiCd/e2A18m/FoNOySC0qIoENFLjavL9IugH8IDHhwM/Zim7f9yXDUjXcj3H3Omvv/Q7InZK0qgihIuq07QX9azBoFuEo3eBv0xgcVJPvPoDZkEkviKPgP2KPW8eKgBD5heiRmh+JhV+45qU0ScNJ7znTJ0YoqnYXwjwZA2CF0LinqlYcw== Received: from DUZP191CA0042.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4f8::6) by GV1PR10MB9185.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:1ce::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:53 +0000 Received: from DB5PEPF00014B8F.eurprd02.prod.outlook.com (2603:10a6:10:4f8:cafe::51) by DUZP191CA0042.outlook.office365.com (2603:10a6:10:4f8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB5PEPF00014B8F.mail.protection.outlook.com (10.167.8.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:52 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:52 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4512475 X-ExclaimerImprintLatency: 2227443 X-ExclaimerImprintAction: dfc80c70c45d41b393e3747f5521ec33 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bK7THFAx9X7ZpKFfPl0gRjGsziASpxqI5v5jTxfyJCw0tLxkTzN/k/jRE/sBeN1nd6CNelY7IAJNHC2oM4j/SIi9f/QFyYBQRxiYatiKza1mcfGfBTQ8iuBnN8wMTgoL9q5IGbo6BsKl+9Ym0Xj8hshq7BMGRWxut8qYToBsVTa3sIj5Ar06Tn9VQnAmi2+hJjzpkYX+FQl2vsY1/GUf2L5d93G032JVkQeMOSFTIULUr1kbDILiPErPJ+s/Xan/xIy2dMoJZ3J+2YLZP4tOtXFc0AZyYjHWGN3vQZJXxVTlqZjxP2oli/JsKqlo45zBhNUCI1XWYmOAol2WSq3BnA== 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=ikWibLis2Crs5zq7U2zqVXnpTjxmT6ElcY4nGKDvI0A=; b=FtJ+VfRNXu7hJMSYXdOlX48zH7rGDFjmngDN8t+QB4nKySu7K2CCNF4Mszm3sQMbs4/jbj2vFNqzfUyRsGKH/LACuWdJ/ODWu6hxLSqb4lsp5gdITVgtOJnCbPmaJTJePWhxRnMshgJkhF+tBVfHRiomgX9RSrCfymbwMe98rFkq7tLoiEW6VwAoAT+nVVf5E2Ch5aMx20UZqFREkZi282ciWfGWxIwSdQXPvK7b2pHWzMKGFxocGZr1Aq/TzjQ5Tr3K90MeCZ5imt/VrviUAkKsIFt5vIpyLjvZe+4OhYNpLiFh2I7aT6JuT50/EqoYWQMDwxual+16ljQn6rpROA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ikWibLis2Crs5zq7U2zqVXnpTjxmT6ElcY4nGKDvI0A=; b=E0AAN6vD2a0+hixIIoJDlw44k+ddgDdvM6fiQhQM4LE1he8LIq8rxgNPnemKgjYqyM63Dc5n2BEixGwP+GqxuDO/u2el6zrZBnNZVYAx49OKv71xulPII4ahCvSfF4fIOr/MPNsM8OkDBsLBXSVmHWjoQSA3GLRx9oFFoiCd/e2A18m/FoNOySC0qIoENFLjavL9IugH8IDHhwM/Zim7f9yXDUjXcj3H3Omvv/Q7InZK0qgihIuq07QX9azBoFuEo3eBv0xgcVJPvPoDZkEkviKPgP2KPW8eKgBD5heiRmh+JhV+45qU0ScNJ7znTJ0YoqnYXwjwZA2CF0LinqlYcw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:38 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:38 +0000 Date: Mon, 4 Nov 2024 12:04:35 +0100 To: dev@openvswitch.org Message-ID: <7666757592ee17bdcd83c5c84c9fbacf5bc1fe42.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0119.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::19) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|DB5PEPF00014B8F:EE_|GV1PR10MB9185:EE_ X-MS-Office365-Filtering-Correlation-Id: 164fc847-8ce1-492a-0468-08dcfcc08204 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: +i5SQGF9/K1HK2xmXN5su0BxbimASpk/vEujgJ7bEXPkAAPb0EUJhmIUOqhOpYPxPTaX5RV8aF6+198haKw/q4qlBY/Te2ccDokNmdbS0449QRl+n9j518fCrw/U2dpW5iybD6oKfAohktUV0V8yf05sQwKK6IgjUK26zb5KuW04pcVM1dMtxka70aoG/u9kMqEs8jDPdIff3Jc4buI6sdyKq7N5QuQDBC+dWUfPwyK4KBOj7/TJ1lDrLABj/zCzor1YpFD5TXSCK0LbBaQLklR6SvxdbFLz7gy9//zb9AKSYxkIZd+oA2ieOGur3P+oJZzHJQ+IPuR3+SnZXlQRMUOABAGHsR2kjXf0dhiroM9AjKIrNIv1nQxnHHHaRjwj9BBzfEYCXIgJR43A1jE74BFmbX0+ReQqLK51+KmAa4RIAO1A/6j9XVCpUmeWT+SqszPQ5Getwgo5Ylm1QlCoriMeeFgWvcq5YExGf5xqzBgYZbAScpD1bSAcFhbxWAEUjVbYNReh1syH29RTZRS/LZJIw/ZxfrdzD3sxTUuNS9Hq0NCklcvHgdoOagHdKg5hMj+v+d0g869gXL7HTXrdEJ/ra2z5+PYAArHaTWjxmQCKokXzgtNT6hcYORIfLWaLzVuVWM/0ZsEGapIV/KT6PFEXO9cNecVSP4fFRdzAbx2fy0v9WsekRQD4febvB7t/pdwK8cgj5qSnoT99qHsjv6gx77lAiRpQNYP3VKTVnkQnfrM85563u8GM4aRJ9QI9KDRdQL/Nnmdu5Z1nbMyZPMvVtC4hB7GzU/vSN5sztLpSHb/h5XPJnwUVEF8kTUFz+dZDAejXB6WLeybHn5n0obGn3BhuDdBD4nAwkubOkid6h8kNsf3P3ZPrTqMyJuk7JLkaS9lRUfEYydq2GdOSjCLcNSlDN/wuFLLTKTXjCndbEmuQF6ZWGHG2EM2MpXQYAQL9gisFo9cl4DEXGAf0cGuZZCiYjdj1FdYUJKbwbGwTM31cFeeAhHzForvXPaxL7NS+B9HaoAu3MahwlOvrHVwyrFCdaKPrRX081Y45V8YW2Q+TpHI9/gxj8CmLmwHl4aVX8WFLerFypPuPjYRbIucm2l0YZeON6VqOHS6RBnJ0BRXUb67bbZnE6ehfwNH4v+sdXQBaYAo/u6z7bk98nXRVkubA6QNifZ+0MAThNp3bXpXAmoShoASLlcDqHuiPCmRXepjs9cY4LZNEwtH6LCHXbidYwvLzQeeZUC00Ws8+WGAManZoLkP11eqgDgSisewOX4lNu/AsyF4WFt925X3frSELmWNwG40xfidGeLUaRBHFxa/XImjkOgnXOlC6 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B8F.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 431a6f90-eef1-4e2c-fcae-08dcfcc0790e X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: MgMAz7wLRZHoiCwURPRw4v+b/VxjmqC0dCP8/Ayz4WAHc6fi/qhxuj1JSPplv8JuTUNgzzTXzdrF0Ki0CyVxvCNa+b/38UOi66LE3eEDd+rRfsO90XYOGg5J0s/Lgqqdtkdqjq1F9ahcPmvCn8npSgJas+lvQZcRyqSwnQv3lbqWZxOfoAu7JqxWLamHUP+kjUfw8nzRrrxRhFcAh0FOmtcMN/WU41viNFs74dKUzyteqa703hu70DcBVkSlCiN7mRqjqIY45mvo33lVRyZujdyqDEvzW2hYl6jXQ9HG5I6bWiYrYF9NASXqquaRZ2nzwrHh1Vussf/V1HTVdOFmtKdTTHhT2zoZ8xrCgknL2AoR6E6iToiV7p+T9Tg8ZhaNxCbwt82j2coVyBWss/4KbmvpCj+JWUuJ+Jk9wzZuzssL0Wu7vifxblenwDxEWQXAXum3pP0CSaPq7+yrOjVBasg4cvNQyurB+Z9jhHKIHDOA3kWdSDzFkjsyptZGeYM5vGxJzjiQ0qogNlzQ9SCD1WGe3pN/hhIGBNZ3cHL1qL56kIn6XwcE1lFzbxOZREW37t8yW7YDBnVgqsFAo28QCFZnSJP9RAm1779cuSDnIPFYdRuFd3kTJ4KjerRrpYvn55T/iyMTBHX+WMuzoNCYvq5yMJpP61nIRdWpHzpD666RwssL4HuYpFjZyvpRrY5/zuLxJSPM7mXMtdxXg/MXmjJ5GUOdT0iYDlHNKuizf79tHWZbm+SJG/RMSetbv1kdiZYYqL0niKfuE4bzf9lxCnalRQsIzVlkcBtw20wERcwPWPAd/JDry+YRRW3OxUvviVjTt+ZzNXzMkz775I4i6L5nLs+fuNydKxX4L73ahHLDNBxM1InMS+KvTyH271vMUvKzHHzApJ+qrgk4XPmZLArzpGAl1Ct/+Nh9q8lncg6M0c2Fr9jk+iWwvCyrSAjOSN6QEPI/ZdnTjjdCuzh9J4IQAbiVXsW2Ieey7JFm3k9CFqviCembWcNUP9PZt7EDZOV7tfA7DsXbCTCvWe9PyUKwtzxCMXz6qCZ//3P+Qc131xBvj+oZZhFzi2OyiDAbQFjrOMlZfpM7w1+9B7W4l3RtLWTkTfPJ/2eN7NqJbLSgVIcClnyq/uRmH/j631OJxh+wCtrDVV0enmfLCLyvgc8cqSo6DMCaSsR5t9z8JHCbuIvu9RkGJY0Zt+eg3sXBRKWvyN0sOkdJloMqjLP7lyDA1uS+ZP0aigIS7rsVPsESVZBRR6kUavOvjVj7yN7ZqtAm8f7rv22r+54IxT6MHRXQVnvNQhXLsB+nFXWrfhm/S9otytwOcHsZ75QTCRYDlkIkGp/T/5HfleOCrvnmlWDva6Ke9sNAp3Oye8NJgIH5bzPe2GLR1kfnc7PH4vViFGIZ9H8rPB6onXQf0VUoYQ== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:52.2333 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 164fc847-8ce1-492a-0468-08dcfcc08204 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B8F.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR10MB9185 Subject: [ovs-dev] [PATCH ovn v2 20/32] controller: Introduce route node. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" this engine node determines the routes that the ovn-controller should export. Signed-off-by: Felix Huettner --- controller/automake.mk | 4 +- controller/ovn-controller.c | 176 +++++++++++++++++++++++++++++++- controller/route.c | 194 ++++++++++++++++++++++++++++++++++++ controller/route.h | 73 ++++++++++++++ tests/automake.mk | 1 + 5 files changed, 446 insertions(+), 2 deletions(-) create mode 100644 controller/route.c create mode 100644 controller/route.h diff --git a/controller/automake.mk b/controller/automake.mk index ed93cfb3c..fc1f3cbc0 100644 --- a/controller/automake.mk +++ b/controller/automake.mk @@ -49,7 +49,9 @@ controller_ovn_controller_SOURCES = \ controller/statctrl.h \ controller/statctrl.c \ controller/ct-zone.h \ - controller/ct-zone.c + controller/ct-zone.c \ + controller/route.h \ + controller/route.c controller_ovn_controller_LDADD = lib/libovn.la $(OVS_LIBDIR)/libopenvswitch.la man_MANS += controller/ovn-controller.8 diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index c40fb3d43..652209ff5 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -87,6 +87,7 @@ #include "statctrl.h" #include "lib/dns-resolve.h" #include "ct-zone.h" +#include "route.h" VLOG_DEFINE_THIS_MODULE(main); @@ -861,7 +862,8 @@ ctrl_register_ovs_idl(struct ovsdb_idl *ovs_idl) SB_NODE(fdb, "fdb") \ SB_NODE(meter, "meter") \ SB_NODE(static_mac_binding, "static_mac_binding") \ - SB_NODE(chassis_template_var, "chassis_template_var") + SB_NODE(chassis_template_var, "chassis_template_var") \ + SB_NODE(route, "route") enum sb_engine_node { #define SB_NODE(NAME, NAME_STR) SB_##NAME, @@ -4785,6 +4787,160 @@ pflow_lflow_output_sb_chassis_handler(struct engine_node *node, return true; } +struct ed_type_route { + /* Contains struct tracked_datapath entries for local datapaths subject to + * route exchange. */ + struct hmap tracked_route_datapaths; + /* Contains struct advertise_datapath_entry */ + struct hmap announce_routes; +}; + +static void +en_route_run(struct engine_node *node, void *data) +{ + struct ed_type_route *re_data = data; + route_cleanup(&re_data->announce_routes); + + const struct ovsrec_open_vswitch_table *ovs_table = + EN_OVSDB_GET(engine_get_input("OVS_open_vswitch", node)); + const char *chassis_id = get_ovs_chassis_id(ovs_table); + ovs_assert(chassis_id); + + struct ovsdb_idl_index *sbrec_chassis_by_name = + engine_ovsdb_node_get_index( + engine_get_input("SB_chassis", node), + "name"); + const struct sbrec_chassis *chassis + = chassis_lookup_by_name(sbrec_chassis_by_name, chassis_id); + ovs_assert(chassis); + + struct ovsdb_idl_index *sbrec_port_binding_by_name = + engine_ovsdb_node_get_index( + engine_get_input("SB_port_binding", node), + "name"); + struct ed_type_runtime_data *rt_data = + engine_get_input_data("runtime_data", node); + + struct ovsdb_idl_index *sbrec_route_by_datapath = + engine_ovsdb_node_get_index( + engine_get_input("SB_route", node), "datapath"); + + struct route_ctx_in r_ctx_in = { + .ovnsb_idl_txn = engine_get_context()->ovnsb_idl_txn, + .sbrec_port_binding_by_name = sbrec_port_binding_by_name, + .chassis = chassis, + .active_tunnels = &rt_data->active_tunnels, + .local_datapaths = &rt_data->local_datapaths, + .local_lports = &rt_data->local_lports, + .sbrec_route_by_datapath = sbrec_route_by_datapath, + }; + + struct route_ctx_out r_ctx_out = { + .tracked_re_datapaths = &re_data->tracked_route_datapaths, + .announce_routes = &re_data->announce_routes, + }; + + route_run(&r_ctx_in, &r_ctx_out); + + engine_set_node_state(node, EN_UPDATED); +} + + +static void * +en_route_init(struct engine_node *node OVS_UNUSED, + struct engine_arg *arg OVS_UNUSED) +{ + struct ed_type_route *data = xzalloc(sizeof *data); + + hmap_init(&data->tracked_route_datapaths); + hmap_init(&data->announce_routes); + + return data; +} + +static void +en_route_cleanup(void *data) +{ + struct ed_type_route *re_data = data; + + tracked_datapaths_destroy(&re_data->tracked_route_datapaths); + route_cleanup(&re_data->announce_routes); + hmap_destroy(&re_data->announce_routes); +} + +static void +en_route_clear_tracked_data(void *data) +{ + struct ed_type_route *re_data = data; + + tracked_datapaths_destroy(&re_data->tracked_route_datapaths); + hmap_init(&re_data->tracked_route_datapaths); +} + +static bool +route_runtime_data_handler(struct engine_node *node, void *data) +{ + struct ed_type_route *re_data = data; + struct ed_type_runtime_data *rt_data = + engine_get_input_data("runtime_data", node); + + if (!rt_data->tracked) { + return false; + } + + struct tracked_datapath *t_dp; + HMAP_FOR_EACH (t_dp, node, &rt_data->tracked_dp_bindings) { + struct tracked_datapath *re_t_dp = + tracked_datapath_find(&re_data->tracked_route_datapaths, t_dp->dp); + + if (re_t_dp) { + /* Until we get I-P support for route exchange we need to request + * recompute. */ + return false; + } + + struct shash_node *shash_node; + SHASH_FOR_EACH (shash_node, &t_dp->lports) { + struct tracked_lport *lport = shash_node->data; + if (route_exchange_relevant_port(lport->pb)) { + /* Until we get I-P support for route exchange we need to + * request recompute. */ + return false; + } + } + } + + return true; +} + +static bool +route_sb_port_binding_data_handler(struct engine_node *node, void *data) +{ + struct ed_type_route *re_data = data; + const struct sbrec_port_binding_table *pb_table = + EN_OVSDB_GET(engine_get_input("SB_port_binding", node)); + + const struct sbrec_port_binding *sbrec_pb; + SBREC_PORT_BINDING_TABLE_FOR_EACH_TRACKED (sbrec_pb, pb_table) { + struct tracked_datapath *re_t_dp = + tracked_datapath_find(&re_data->tracked_route_datapaths, + sbrec_pb->datapath); + if (re_t_dp) { + /* Until we get I-P support for route exchange we need to request + * recompute. */ + return false; + } + + if (route_exchange_relevant_port(sbrec_pb)) { + /* Until we get I-P support for route exchange we need to + * request recompute. */ + return false; + } + + } + return true; +} + /* Returns false if the northd internal version stored in SB_Global * and ovn-controller internal version don't match. */ @@ -4993,6 +5149,9 @@ main(int argc, char *argv[]) struct ovsdb_idl_index *sbrec_chassis_template_var_index_by_chassis = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, &sbrec_chassis_template_var_col_chassis); + struct ovsdb_idl_index *sbrec_route_index_by_datapath + = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, + &sbrec_route_col_datapath); ovsdb_idl_track_add_all(ovnsb_idl_loop.idl); ovsdb_idl_omit_alert(ovnsb_idl_loop.idl, @@ -5075,6 +5234,7 @@ main(int argc, char *argv[]) ENGINE_NODE_WITH_CLEAR_TRACK_DATA(lb_data, "lb_data"); ENGINE_NODE(mac_cache, "mac_cache"); ENGINE_NODE(bfd_chassis, "bfd_chassis"); + ENGINE_NODE_WITH_CLEAR_TRACK_DATA(route, "route"); #define SB_NODE(NAME, NAME_STR) ENGINE_NODE_SB(NAME, NAME_STR); SB_NODES @@ -5097,6 +5257,15 @@ main(int argc, char *argv[]) engine_add_input(&en_lb_data, &en_runtime_data, lb_data_runtime_data_handler); + engine_add_input(&en_route, &en_ovs_open_vswitch, NULL); + engine_add_input(&en_route, &en_sb_chassis, NULL); + engine_add_input(&en_route, &en_sb_port_binding, + route_sb_port_binding_data_handler); + engine_add_input(&en_route, &en_runtime_data, + route_runtime_data_handler); + engine_add_input(&en_route, &en_sb_route, + engine_noop_handler); + engine_add_input(&en_addr_sets, &en_sb_address_set, addr_sets_sb_address_set_handler); engine_add_input(&en_port_groups, &en_sb_port_group, @@ -5277,6 +5446,9 @@ main(int argc, char *argv[]) controller_output_mac_cache_handler); engine_add_input(&en_controller_output, &en_bfd_chassis, controller_output_bfd_chassis_handler); + /* This is just temporary until the route output is actually used. */ + engine_add_input(&en_controller_output, &en_route, + controller_output_bfd_chassis_handler); struct engine_arg engine_arg = { .sb_idl = ovnsb_idl_loop.idl, @@ -5307,6 +5479,8 @@ main(int argc, char *argv[]) sbrec_static_mac_binding_by_datapath); engine_ovsdb_node_add_index(&en_sb_chassis_template_var, "chassis", sbrec_chassis_template_var_index_by_chassis); + engine_ovsdb_node_add_index(&en_sb_route, "datapath", + sbrec_route_index_by_datapath); engine_ovsdb_node_add_index(&en_ovs_flow_sample_collector_set, "id", ovsrec_flow_sample_collector_set_by_id); engine_ovsdb_node_add_index(&en_ovs_port, "qos", ovsrec_port_by_qos); diff --git a/controller/route.c b/controller/route.c new file mode 100644 index 000000000..6aaabe576 --- /dev/null +++ b/controller/route.c @@ -0,0 +1,194 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include "openvswitch/vlog.h" + +#include "lib/ovn-sb-idl.h" + +#include "binding.h" +#include "ha-chassis.h" +#include "local_data.h" +#include "route.h" + + +VLOG_DEFINE_THIS_MODULE(exchange); +static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); + +/* While the linux kernel can handle 2^32 routing tables, only so many can fit + * in the corresponding VRF interface name. */ +#define MAX_TABLE_ID 1000000000 + +bool +route_exchange_relevant_port(const struct sbrec_port_binding *pb) +{ + return (pb && smap_get_bool(&pb->options, "dynamic-routing", false)); +} + +uint32_t +advertise_route_hash(const struct in6_addr *dst, unsigned int plen) +{ + uint32_t hash = hash_bytes(dst->s6_addr, 16, 0); + return hash_int(plen, hash); +} + +static const struct sbrec_port_binding* +find_local_crp(struct ovsdb_idl_index *sbrec_port_binding_by_name, + const struct sbrec_chassis *chassis, + const struct sset *active_tunnels, + const struct sbrec_port_binding *pb) +{ + if (!pb) { + return NULL; + } + const char *crp = smap_get(&pb->options, "chassis-redirect-port"); + if (!crp) { + return NULL; + } + if (!lport_is_chassis_resident(sbrec_port_binding_by_name, chassis, + active_tunnels, crp)) { + return NULL; + } + return lport_lookup_by_name(sbrec_port_binding_by_name, crp); +} + +static void +advertise_datapath_cleanup(struct advertise_datapath_entry *ad) +{ + struct advertise_route_entry *ar; + HMAP_FOR_EACH_SAFE (ar, node, &ad->routes) { + hmap_remove(&ad->routes, &ar->node); + free(ar); + } + hmap_destroy(&ad->routes); + sset_destroy(&ad->bound_ports); + free(ad); +} + +void +route_run(struct route_ctx_in *r_ctx_in, + struct route_ctx_out *r_ctx_out) +{ + const struct local_datapath *ld; + HMAP_FOR_EACH (ld, hmap_node, r_ctx_in->local_datapaths) { + if (!ld->n_peer_ports || ld->is_switch) { + continue; + } + + bool relevant_datapath = false; + struct advertise_datapath_entry *ad = xzalloc(sizeof(*ad)); + ad->key = ld->datapath->tunnel_key; + ad->db = ld->datapath; + hmap_init(&ad->routes); + sset_init(&ad->bound_ports); + + /* This is a LR datapath, find LRPs with route exchange options + * that are bound locally. */ + for (size_t i = 0; i < ld->n_peer_ports; i++) { + const struct sbrec_port_binding *local_peer + = ld->peer_ports[i].local; + const struct sbrec_port_binding *sb_crp = find_local_crp( + r_ctx_in->sbrec_port_binding_by_name, + r_ctx_in->chassis, + r_ctx_in->active_tunnels, + local_peer); + if (!route_exchange_relevant_port(sb_crp)) { + continue; + } + + ad->maintain_vrf |= smap_get_bool(&sb_crp->options, + "maintain-vrf", false); + ad->use_netns |= smap_get_bool(&sb_crp->options, + "use-netns", false); + relevant_datapath = true; + sset_add(&ad->bound_ports, local_peer->logical_port); + } + + if (!relevant_datapath) { + advertise_datapath_cleanup(ad); + continue; + } + + /* While tunnel_key would most likely never be negative, the compiler + * has opinions if we don't check before using it in snprintf below. */ + if (ld->datapath->tunnel_key < 0 || + ld->datapath->tunnel_key > MAX_TABLE_ID) { + VLOG_WARN_RL(&rl, + "skip route sync for datapath "UUID_FMT", " + "tunnel_key %"PRIi64" would make VRF interface name " + "overflow.", + UUID_ARGS(&ld->datapath->header_.uuid), + ld->datapath->tunnel_key); + goto cleanup; + } + + if (ad->maintain_vrf && ad->use_netns) { + VLOG_WARN_RL(&rl, + "For Datapath %"PRIu64" both maintain-vrf and " + "use-netns are set, this will never work", + ld->datapath->tunnel_key); + goto cleanup; + } + + struct sbrec_route *route_filter = sbrec_route_index_init_row( + r_ctx_in->sbrec_route_by_datapath); + sbrec_route_index_set_datapath(route_filter, ld->datapath); + struct sbrec_route *route; + SBREC_ROUTE_FOR_EACH_EQUAL (route, route_filter, + r_ctx_in->sbrec_route_by_datapath) { + if (!strcmp(route->type, "receive")) { + continue; + } + struct in6_addr prefix; + unsigned int plen; + if (!ip46_parse_cidr(route->ip_prefix, &prefix, &plen)) { + VLOG_WARN_RL(&rl, "bad 'ip_prefix' %s in route " + UUID_FMT, route->ip_prefix, + UUID_ARGS(&route->header_.uuid)); + continue; + } + + struct advertise_route_entry *ar = xzalloc(sizeof(*ar)); + hmap_insert(&ad->routes, &ar->node, + advertise_route_hash(&prefix, plen)); + ar->addr = prefix; + ar->plen = plen; + } + sbrec_route_index_destroy_row(route_filter); + + if (!hmap_is_empty(&ad->routes)) { + tracked_datapath_add(ld->datapath, TRACKED_RESOURCE_NEW, + r_ctx_out->tracked_re_datapaths); + } + + hmap_insert(r_ctx_out->announce_routes, &ad->node, ad->key); + continue; + +cleanup: + advertise_datapath_cleanup(ad); + } +} + +void +route_cleanup(struct hmap *announce_routes) +{ + struct advertise_datapath_entry *ad; + HMAP_FOR_EACH_SAFE (ad, node, announce_routes) { + hmap_remove(announce_routes, &ad->node); + advertise_datapath_cleanup(ad); + } +} diff --git a/controller/route.h b/controller/route.h new file mode 100644 index 000000000..ca309c7be --- /dev/null +++ b/controller/route.h @@ -0,0 +1,73 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ROUTE_H +#define ROUTE_H 1 + +#include +#include +#include "openvswitch/hmap.h" +#include "sset.h" + +struct hmap; +struct ovsdb_idl_index; +struct sbrec_chassis; +struct sbrec_port_binding; +struct sset; + +struct route_ctx_in { + struct ovsdb_idl_txn *ovnsb_idl_txn; + struct ovsdb_idl_index *sbrec_port_binding_by_name; + const struct sbrec_chassis *chassis; + const struct sset *active_tunnels; + struct hmap *local_datapaths; + const struct sset *local_lports; + struct ovsdb_idl_index *sbrec_route_by_datapath; +}; + +struct route_ctx_out { + struct hmap *tracked_re_datapaths; + /* Contains struct advertise_datapath_entry */ + struct hmap *announce_routes; +}; + +struct advertise_datapath_entry { + struct hmap_node node; + /* tunnel_key of the datapath */ + int64_t key; + const struct sbrec_datapath_binding *db; + bool maintain_vrf; + bool use_netns; + struct hmap routes; + /* the name of the port bindings locally bound for this datapath and + * running route exchange logic. */ + struct sset bound_ports; +}; + +struct advertise_route_entry { + struct hmap_node node; + struct in6_addr addr; + unsigned int plen; + /* used by the route-exchange module to determine if the route is + * already installed */ + bool installed; +}; + +bool route_exchange_relevant_port(const struct sbrec_port_binding *pb); +uint32_t advertise_route_hash(const struct in6_addr *dst, unsigned int plen); +void route_run(struct route_ctx_in *, + struct route_ctx_out *); +void route_cleanup(struct hmap *announce_routes); + +#endif /* ROUTE_H */ diff --git a/tests/automake.mk b/tests/automake.mk index 3899c9e80..9244532fa 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -305,6 +305,7 @@ tests_ovstest_LDADD = $(OVS_LIBDIR)/daemon.lo \ controller/ovsport.$(OBJEXT) \ controller/patch.$(OBJEXT) \ controller/vif-plug.$(OBJEXT) \ + controller/route.$(OBJEXT) \ northd/ipam.$(OBJEXT) # Python tests. From patchwork Mon Nov 4 11:04:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006189 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=s1MvT773; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=s1MvT773; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (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 4XhpbB0w0sz1xwF for ; Mon, 4 Nov 2024 22:07:33 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 639A140707; Mon, 4 Nov 2024 11:07:31 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 4YnbCx1hVnwm; Mon, 4 Nov 2024 11:07:29 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 3C3794057B Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=s1MvT773; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=s1MvT773 Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 3C3794057B; Mon, 4 Nov 2024 11:07:29 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E7318C08A6; Mon, 4 Nov 2024 11:07:28 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 17D72C08A8 for ; Mon, 4 Nov 2024 11:07:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 1E3DF40611 for ; Mon, 4 Nov 2024 11:05:15 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id OcXLhmqXBgvt for ; Mon, 4 Nov 2024 11:05:10 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::60a; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 8C8B2406FA Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 8C8B2406FA Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2060a.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::60a]) by smtp4.osuosl.org (Postfix) with ESMTPS id 8C8B2406FA for ; Mon, 4 Nov 2024 11:05:02 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=SPBNNyvOJBKH/VSdaRhQa9lfzMp8zlN3Jm2stLIj8KafkT0dBljxrYGFQHA8PjH9KKhOuS5qbMzkBBBIV+bWr/ibu71UKkSsbBW3AdPwrWpl61uVN6GbUGv0a9KToax7zANOF1nsfsRPvwrH4qXAH0peCIdfL2Yejd3ILuD06T/aFkUVyOBLJgiB0sqhHmCb4e18DoM1J2gNP0sKxR3KVTjnSdT/HJxaRkrzjvuXnyGlZ4eucQJVuz4FhqyanN8WemYP19BN+ovcY0LnCAouQF02OvA0GN1HaZX022E8GHBY2ZgCv/0sBM7p5okXFiRoB5MjKzbWlahcsCIUmSwLBw== ARC-Message-Signature: i=2; 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=doePn71rZ+79NgF8RK4zuFTEBPo6YVuJ7q2EsDfgq9U=; b=FQNVcvz+rNs044ARTs0eEHJGfFOCbLJc5sszOyRI0i/u4fo475GwmSi5eXhK33xrg42lpkZ6wDWwXuDaXWSvrgpg+4C6ihm3Gd2iU7+c4zt6gKzxv+g8Lv3tpt0pKC2waTionCyqDeBPRaBUq4SOzSQUhOZBR+HiBcTiwnVYmSTZlEkeRGToUL+sy2RGUKOl+4FNNqFwh4HhankYgg+SjRjfF6dDNoCf/ylRGDmrvO9Wz8IL+pCFBOjUsfo+z2qHLv6RzsWQ/RqktVg0r/RoCQdYb3kvLj14LPz8piw24UmA9A23YvhskZkTX1RedJ/dBCuSw2yjjH2xX+TJOz/ZLQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=doePn71rZ+79NgF8RK4zuFTEBPo6YVuJ7q2EsDfgq9U=; b=s1MvT773LAaNN/JvmlS/5+lpDIbi10s1ljXMqXSFSz3ufyb8KLtIigKiMGx0VflJ+Ku3Wyi1HsJba2OrC+LMvOJS3KpFM+L/eUPx9okLC/mSH5XlWvUEpvUAB/6l0IQWBey27kQxFqoUR9bdZrPWNTzRdrWlQBaA9GaH0jJc0NejcxOzlZ2aedXhUJLeHEYEWxEFhJXQbt0WXXvHG9cR9F4erGOnuOdcXfk2pk5Y5M+iOPeFF8xeFb6Y4TpKWL5p3cCAkGPhjXJr2m4Mm+TomaMunq1m6b7wQesVcvOkbaMr4EdQohgK/g5eCqzY3Bh6n7mrrxS9TBm5aqZMuq/n2g== Received: from AS9PR06CA0260.eurprd06.prod.outlook.com (2603:10a6:20b:45f::25) by GV2PR10MB7437.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:de::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:55 +0000 Received: from AMS1EPF0000003F.eurprd04.prod.outlook.com (2603:10a6:20b:45f:cafe::d8) by AS9PR06CA0260.outlook.office365.com (2603:10a6:20b:45f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:55 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by AMS1EPF0000003F.mail.protection.outlook.com (10.167.16.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:54 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:55 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 6579173 X-ExclaimerImprintLatency: 3274996 X-ExclaimerImprintAction: f5c1b49056a447459231fbd0f54a4394 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=omPStEScN3+nO5E1ojBLmxt6zDVsL0k7SpnNLGSP/odMHXtixpJeWiXBbVL+PLugsDikg+S1UGf5CvjFhqWyTz77/I0r44x7V2HA5lUJ0K+bOXRF7Nt/idZRScYVaBRjezoYnLoZFLEfe99vmN90P4+UzkPGRP/dsx/j4611S9ANa6N7g4k88RAxA7umiMdDivseyZ2vBX2qVj8qiplFlMjLxkTY//zzU3+26EcpgwJlxti+v4EKH6Cmy389gl8GXasONR3s5b5BQxM9/KZReOWqrkIOeNS99Tm8BA4/npiiLFsl5YCXuUAIGBd1QjIAubkdDr/hUAh8RYvQL/8yNw== 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=doePn71rZ+79NgF8RK4zuFTEBPo6YVuJ7q2EsDfgq9U=; b=j4Wk9/Cope8SG/L7buitOweWx/BOXNH8h4eg2+7gI4T89X5bpS9r84r1+D1bBxGlageuDwqfwDN1j84Jv1CtEXD2CV5F1kcpZMxZxbUXRJDiQPvhe7svlyTv9Ch5+eMgCwQ4HlRbS90ySADAQBd1yzrZxu/863mIublO0LrLXmU1cD4LKvWSk/c+ESOpzBY8FAX+tATQSkrAImLb8GhiYbWot47QzEO70rg09BgTTg+/uXZkLL/5UsVzfyUiL7UuVDu4apVof/DjxuaeBcro5e7tcu+fR8ZdVvvpmhRiaZuJtErPiU/7DCTAzcYGBayEfxnEMm/Od262TmeEE2cGMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=doePn71rZ+79NgF8RK4zuFTEBPo6YVuJ7q2EsDfgq9U=; b=s1MvT773LAaNN/JvmlS/5+lpDIbi10s1ljXMqXSFSz3ufyb8KLtIigKiMGx0VflJ+Ku3Wyi1HsJba2OrC+LMvOJS3KpFM+L/eUPx9okLC/mSH5XlWvUEpvUAB/6l0IQWBey27kQxFqoUR9bdZrPWNTzRdrWlQBaA9GaH0jJc0NejcxOzlZ2aedXhUJLeHEYEWxEFhJXQbt0WXXvHG9cR9F4erGOnuOdcXfk2pk5Y5M+iOPeFF8xeFb6Y4TpKWL5p3cCAkGPhjXJr2m4Mm+TomaMunq1m6b7wQesVcvOkbaMr4EdQohgK/g5eCqzY3Bh6n7mrrxS9TBm5aqZMuq/n2g== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PR3PR10MB4112.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:af::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:39 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:39 +0000 Date: Mon, 4 Nov 2024 12:04:37 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0108.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::11) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PR3PR10MB4112:EE_|AMS1EPF0000003F:EE_|GV2PR10MB7437:EE_ X-MS-Office365-Filtering-Correlation-Id: de9f6968-6e46-4bbb-0cce-08dcfcc083b4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info-Original: u9DK390Fkm7dtqxPo5vUg0eaxEYD++uEdn0p3CX0k1Tfn9E3N2lB7OidzCQW4x2jYlwyMxsiXmjZyrgRZRUnZLQE23TnmVFiBKVWDRX2v1izMbNTIiai6Eg5a0OWoq790RIgspI0330WLrbUHkZ57FVwDLO3+oIL0Cjt3CcfQ63MhOyHIqljQuVbbrUKZ/av7D8KkBHhMZLyLzZJP91tzGpORaRNIVMvj8s078Q3Gak/L41BgaTeayUjm5hgiXKzfKbM2kZFSk7cL/ouFJECee1tzF0Ie+yZ6djYr2IYymxHeiLLa6QoG7vgoVcXHLoCKNppSqS5fRuSLUn1id6Vj8FismvO8cLj3E/Tg2q5OUwaW7g0WIZNniOm4ViLmxtCXki6pm2llcn/dUTnFHoEMkKKTlrYU7h8RsBtPFfxofRPGa81Wyw0Wqjeq5j1w4nXpVsD6dOObMMyfCDR0BMxXby5gCFb6yudCl5Ivcm2EI6pLF7jgCaT6DJYzaLYUUoK9ZZqjHYRxOsiVizRvrmzyx71d/1o4ThIPZ4DZ4Wf9xomylgw2y+IWwl+OQMv8W1TlC4IDbfDIP+J66NJpc00rH08KW3kfnh8y8A9QY/+Y8GosbVUlkaCs1X7AehwZZqHucq9RdS1uBxXu0Cktptqoe6CqE/YjC732FM3R2a8kUSzdN65pI13VSMRGNq5Zwr9nLKKhUCWrbi2h0PfasxNrQEppHghUQLCx1s3sGfJ2Ikhk8ZIzdarqs/WQp77GhS2a1pNHEsV7v1MkzlAzPIpxXS2lq/5r1XUxyqhe8rCiGb2u1Bpo8563hwHmtYaPmzUZnFxkbps1lqHZiYC3mK/9FSoiebXwAzG7HRGW3vXpHRoJvyuCn4q6uyT2UtW8miCf/ZTz/Qfl49SGdg7s1j8g4boxxnHaIVc7vZKrnJzAwZEQA5nJotoWMw/KqjYdmhC5SmrgdfrsPk1SkmlR2fmgoeUcg13UuNwvjoSY63sUVr/agJy3Cj1XO2w+RZSGMKHaLNwuRFHXPz9C/KVpPrF+Cpac6Q1Q80J5X2y5cLrLx7Fc2CjvsuHcPQCXD04b/wcGNwg/AQLG4iRXsOvvuycTmNkhUNBEb05U5RAsOgFHTWfOXWJWEq4Syh09Kt9Hgd+FkjifNnLw1zV3oUHc6+IK7byFwXSBtj18DfmxyRaFw9MGtBo9nJ7PEb3E+X9QlPGIpRyE2Jz6jCjIUhsn/i26P0N41/LAI1NOBofQui4DWNE5Ayvqq1SMiYo1XLD/nof X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4112 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS1EPF0000003F.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 5c41aa3d-4ee1-44a8-ac0f-08dcfcc07a3c X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|376014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: VgnAEXsCA1674RKbbHsMTJvfaWwZINMyqapF803Sa2+ZprM+nngorpmbSERx9mldYtSRDRurcbqvDGDIwL1By4NfycdV21ANAWqham9QN+5jlSfGg4Z4T6TARkJfcYbpzOLE1EsvkU7aAVL6CpmEIBPszjTrWHe2Ae3sVrvHd/qvGK1clcF1ae5Bx+UN8GLlpX8eiZSIW1JJUOS0Lvxq/ezhegZJQAHAtHAs68WKpx8kH+FPI7BRH+3dJD2aVDo+rHIDoa2Ix/ySuPoTWpDIuR2i+prVDbfOyZVnDMPXcWKCDUHlE7EJMVpSsj0ktNwaYEWKF0oXgKR3JTpKeZ+EtSDiqA4hKkmr5nt/2tJl39AFIo7TboAPojuaa//zagjT1k123bjqdptuGftXIlocqXmEtffwjra6ocwSsYoQa0czEWWWlUXugJbG/ZTiDEQSoOF+Yiabb58iIkKWQ2pMzN+DDpt82TkaRmq1cEzF9ytYVbMLNVb6d8utnQeqOcJhtI3Y3MnTVz0Vzcqcx7OJJJt9A+Ref9YttkrGFQ1EDh27L3fy0WapIQWf9DH2qH5y0Is1KGIZal940gX7BGeaTXBnqH0hviYd3rFz/smfm7kMD3cFsGducRJAMYtxFKkOCNiFotjnwDqbMUFfYVqJ+JpPyWY6qTpKVMTSOv2ePL9vp++3QrCsJZduYElfUwHGsYsbK71ET8hIiGJ4LxlHAUdRcFTULvl3gCLUHI5D3uCB9VmnGnLyTp3lYbVpzbpQ7DzbxHVjssmPN1NFltG5LUnc8JiiL9TSZig73XZkVcFwSqxrja4J7jofOUeqydiis/fJDk2A0vv0ityr44rF2mfmdPc8LDcfS1FCeDqhmoSkocQzaTrPQZPk5vuYN6whiq00bhGCJ+MO3Ben/xrg5l/iNGSUMlLV+cdTu+Fw8wZszrI/AZuuH4tbwmvW90nRc34RWydns9slWVnCBMmbzJGJZUjka1LkQz1xDwSDqh62kmGH6d9Lr9HNlDQBco3zA2lBHlbe/tUsIKbAGq6xe0riy3SbjqI6tNE5fR8Asmir3iI4cnpki6aI88il696+jSijcvmsnMOneCsc7aKZrBb+YB7PJje9a3YstIGqMNHmjPAXkNb5qCVq7OfvYf7fWUPxGuvOHNUYx0MIXzlI/YfooGUi+mUxgdOnbsN38KpdXT4et76vIW0HC9mtluyiJOq2PVIaoVMuEB7uGSke0XIgIbheW8J3ZLtNLJkjWaGrnKJQRxW8Sza0/FGagswm4fYf7iUAHmNpLvSheDpwpdAjTsDAbLodYDX6GNUllmBjct6yTG+JJZTNQd2J7dRT6SpuCdx7brnEc0QbV30L17tWY12jxAKVebJNy2o5uj0= X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(376014)(36860700013)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:54.9240 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: de9f6968-6e46-4bbb-0cce-08dcfcc083b4 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AMS1EPF0000003F.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR10MB7437 Subject: [ovs-dev] [PATCH ovn v2 21/32] controller: Introduce route-exchange-netlink. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Introduce route-exchange-netlink module which implements interface for maintaining VRFs [0] and routes through Netlink. There is a desire to do this without having to (re-)implement routing protocol state machines in OVN, and to accomplish this we make use of Netlink. Netlink was chosen because: * Its ubiquitous nature with availability on any Linux system as as well other platforms. * Presence of a very good Netlink library implementation in our sibling project and library, Open vSwitch. * Popular routing protocol software conveniently already have support for redistributing routes to/from Netlink. * Support for interacting with Virtual Routing and Forwarding domains [0], allowing full isolation between virtual network resources defined within OVN and the hosting system while retaining access to all system network interfaces. It is important to note that the purpose of this integration is generic exchange of control plane information, while allowing to keep the datapath in OVS/OVN, enabling users to leverage its full range of user-, kernel- and mixed- space datapath implementations. 0: https://docs.kernel.org/networking/vrf.html This was orignally built by Frode Nordahl Signed-off-by: Felix Huettner --- configure.ac | 2 + controller/automake.mk | 6 + controller/route-exchange-netlink.c | 249 ++++++++++++++++++++++++++++ controller/route-exchange-netlink.h | 40 +++++ m4/ovn.m4 | 25 +++ tests/automake.mk | 5 + tests/system-common-macros.at | 12 ++ 7 files changed, 339 insertions(+) create mode 100644 controller/route-exchange-netlink.c create mode 100644 controller/route-exchange-netlink.h diff --git a/configure.ac b/configure.ac index 4a63b84d4..cf9b4a6fd 100644 --- a/configure.ac +++ b/configure.ac @@ -87,6 +87,8 @@ OVS_CHECK_WIN32 OVS_CHECK_VISUAL_STUDIO_DDK OVN_CHECK_COVERAGE OVS_CHECK_NDEBUG +OVS_CHECK_NETLINK +OVS_CHECK_LINUX_NETLINK OVS_CHECK_OPENSSL OVN_CHECK_LOGDIR OVN_CHECK_PYTHON3 diff --git a/controller/automake.mk b/controller/automake.mk index fc1f3cbc0..54855a3f9 100644 --- a/controller/automake.mk +++ b/controller/automake.mk @@ -53,6 +53,12 @@ controller_ovn_controller_SOURCES = \ controller/route.h \ controller/route.c +if HAVE_NETLINK +controller_ovn_controller_SOURCES += \ + controller/route-exchange-netlink.h \ + controller/route-exchange-netlink.c +endif + controller_ovn_controller_LDADD = lib/libovn.la $(OVS_LIBDIR)/libopenvswitch.la man_MANS += controller/ovn-controller.8 EXTRA_DIST += controller/ovn-controller.8.xml diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c new file mode 100644 index 000000000..84c6baa15 --- /dev/null +++ b/controller/route-exchange-netlink.c @@ -0,0 +1,249 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +#include "netlink-socket.h" +#include "netlink.h" +#include "openvswitch/hmap.h" +#include "openvswitch/ofpbuf.h" +#include "openvswitch/vlog.h" +#include "packets.h" +#include "route-table.h" +#include "route.h" + +#include "route-exchange-netlink.h" + +VLOG_DEFINE_THIS_MODULE(route_exchange_netlink); +static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); + +#define TABLE_ID_VALID(table_id) (table_id != RT_TABLE_UNSPEC && \ + table_id != RT_TABLE_COMPAT && \ + table_id != RT_TABLE_DEFAULT && \ + table_id != RT_TABLE_MAIN && \ + table_id != RT_TABLE_LOCAL && \ + table_id != RT_TABLE_MAX) + +static int +modify_vrf(uint32_t type, uint32_t flags_arg, + const char *ifname, uint32_t table_id) +{ + uint32_t flags = NLM_F_REQUEST | NLM_F_ACK; + size_t linkinfo_off, infodata_off; + struct ifinfomsg *ifinfo; + struct ofpbuf request; + int err; + + flags |= flags_arg; + + ofpbuf_init(&request, 0); + nl_msg_put_nlmsghdr(&request, 0, type, flags); + ifinfo = ofpbuf_put_zeros(&request, sizeof *ifinfo); + nl_msg_put_string(&request, IFLA_IFNAME, ifname); + if (type == RTM_DELLINK) { + goto out; + } + + ifinfo->ifi_change = ifinfo->ifi_flags = IFF_UP; + linkinfo_off = nl_msg_start_nested(&request, IFLA_LINKINFO); + nl_msg_put_string(&request, IFLA_INFO_KIND, "vrf"); + infodata_off = nl_msg_start_nested(&request, IFLA_INFO_DATA); + nl_msg_put_u32(&request, IFLA_VRF_TABLE, table_id); + nl_msg_end_nested(&request, infodata_off); + nl_msg_end_nested(&request, linkinfo_off); + +out: + err = nl_transact(NULL, NETLINK_ROUTE, &request, NULL); + + ofpbuf_uninit(&request); + + return err; +} + +int +re_nl_create_vrf(const char *ifname, uint32_t table_id) +{ + uint32_t flags = NLM_F_CREATE | NLM_F_EXCL; + uint32_t type = RTM_NEWLINK; + + if (!TABLE_ID_VALID(table_id)) { + VLOG_WARN_RL(&rl, + "attempt to create VRF using invalid table id %"PRIu32, + table_id); + return EINVAL; + } + + return modify_vrf(type, flags, ifname, table_id); +} + +int +re_nl_delete_vrf(const char *ifname) +{ + return modify_vrf(RTM_DELLINK, 0, ifname, 0); +} + +static int +modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, + const struct in6_addr *dst, unsigned int plen) +{ + uint32_t flags = NLM_F_REQUEST | NLM_F_ACK; + bool is_ipv4 = IN6_IS_ADDR_V4MAPPED(dst); + struct ofpbuf request; + struct rtmsg *rt; + int err; + + flags |= flags_arg; + + ofpbuf_init(&request, 0); + nl_msg_put_nlmsghdr(&request, 0, type, flags); + rt = ofpbuf_put_zeros(&request, sizeof *rt); + rt->rtm_family = is_ipv4 ? AF_INET : AF_INET6; + rt->rtm_table = RT_TABLE_UNSPEC; /* RTA_TABLE attribute allows id > 256 */ + /* Manage only OVN routes */ + rt->rtm_protocol = RTPROT_OVN; + rt->rtm_type = RTN_BLACKHOLE; + if (type == RTM_DELROUTE) { + rt->rtm_scope = RT_SCOPE_NOWHERE; + } else { + rt->rtm_scope = RT_SCOPE_UNIVERSE; + } + rt->rtm_dst_len = plen; + + nl_msg_put_u32(&request, RTA_TABLE, table_id); + + if (is_ipv4) { + nl_msg_put_be32(&request, RTA_DST, in6_addr_get_mapped_ipv4(dst)); + } else { + nl_msg_put_in6_addr(&request, RTA_DST, dst); + } + + err = nl_transact(NULL, NETLINK_ROUTE, &request, NULL); + ofpbuf_uninit(&request); + + return err; +} + +int +re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, + unsigned int plen) +{ + uint32_t flags = NLM_F_CREATE | NLM_F_EXCL; + uint32_t type = RTM_NEWROUTE; + + if (!TABLE_ID_VALID(table_id)) { + VLOG_WARN_RL(&rl, + "attempt to add route using invalid table id %"PRIu32, + table_id); + return EINVAL; + } + + return modify_route(type, flags, table_id, dst, plen); +} + +int +re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, + unsigned int plen) +{ + if (!TABLE_ID_VALID(table_id)) { + VLOG_WARN_RL(&rl, + "attempt to delete route using invalid table id %"PRIu32, + table_id); + return EINVAL; + } + + return modify_route(RTM_DELROUTE, 0, table_id, dst, plen); +} + +struct route_msg_handle_data { + const struct hmap *routes; +}; + +static void +handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) +{ + const struct route_data *rd = &msg->rd; + struct route_msg_handle_data *handle_data = data; + const struct hmap *routes = handle_data->routes; + struct advertise_route_entry *ar; + int err; + + /* This route is not from us, we should not touch it. */ + if (rd->rtm_protocol != RTPROT_OVN) { + return; + } + + uint32_t arhash = advertise_route_hash(&rd->rta_dst, rd->plen); + HMAP_FOR_EACH_WITH_HASH (ar, node, arhash, routes) { + if (ipv6_addr_equals(&ar->addr, &rd->rta_dst) + && ar->plen == rd->plen) { + ar->installed = true; + return; + } + } + err = re_nl_delete_route(rd->rta_table_id, &rd->rta_dst, + rd->plen); + if (err) { + char addr_s[INET6_ADDRSTRLEN + 1]; + VLOG_WARN_RL(&rl, "Delete route table_id=%"PRIu32" dst=%s plen=%d: %s", + rd->rta_table_id, + ipv6_string_mapped( + addr_s, &rd->rta_dst) ? addr_s : "(invalid)", + rd->plen, + ovs_strerror(err)); + } +} + +void +re_nl_sync_routes(uint32_t table_id, + const struct hmap *routes) +{ + struct advertise_route_entry *ar; + HMAP_FOR_EACH (ar, node, routes) { + ar->installed = false; + } + + /* Remove routes from the system that are not in the host_routes hmap and + * remove entries from host_routes hmap that match routes already installed + * in the system. */ + struct route_msg_handle_data data = { + .routes = routes, + }; + route_table_dump_one_table(NULL, table_id, handle_route_msg_delete_routes, + &data); + + /* Add any remaining routes in the host_routes hmap to the system routing + * table. */ + HMAP_FOR_EACH (ar, node, routes) { + if (ar->installed) { + continue; + } + int err = re_nl_add_route(table_id, &ar->addr, ar->plen); + if (err) { + char addr_s[INET6_ADDRSTRLEN + 1]; + VLOG_WARN_RL(&rl, "Add route table_id=%"PRIu32" dst=%s " + "plen=%d: %s", + table_id, + ipv6_string_mapped( + addr_s, &ar->addr) ? addr_s : "(invalid)", + ar->plen, + ovs_strerror(err)); + } + } +} diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h new file mode 100644 index 000000000..f87ebd75d --- /dev/null +++ b/controller/route-exchange-netlink.h @@ -0,0 +1,40 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ROUTE_EXCHANGE_NETLINK_H +#define ROUTE_EXCHANGE_NETLINK_H 1 + +#include + +/* This value is arbitrary but currently unused. + * See https://github.com/iproute2/iproute2/blob/main/etc/iproute2/rt_protos */ +#define RTPROT_OVN 84 + +struct in6_addr; +struct hmap; + +int re_nl_create_vrf(const char *ifname, uint32_t table_id); +int re_nl_delete_vrf(const char *ifname); + +int re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, + unsigned int plen); +int re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, + unsigned int plen); + +void re_nl_dump(uint32_t table_id); + +void re_nl_sync_routes(uint32_t table_id, + const struct hmap *host_routes); + +#endif /* route-exchange-netlink.h */ diff --git a/m4/ovn.m4 b/m4/ovn.m4 index ebe4c9612..e8f30e0ac 100644 --- a/m4/ovn.m4 +++ b/m4/ovn.m4 @@ -576,3 +576,28 @@ AC_DEFUN([OVN_CHECK_UNBOUND], fi AM_CONDITIONAL([HAVE_UNBOUND], [test "$HAVE_UNBOUND" = yes]) AC_SUBST([HAVE_UNBOUND])]) + +dnl Checks for Netlink support. +AC_DEFUN([OVS_CHECK_NETLINK], + [AC_CHECK_HEADER([linux/netlink.h], + [HAVE_NETLINK=yes], + [HAVE_NETLINK=no], + [#include + ]) + AM_CONDITIONAL([HAVE_NETLINK], [test "$HAVE_NETLINK" = yes]) + if test "$HAVE_NETLINK" = yes; then + AC_DEFINE([HAVE_NETLINK], [1], + [Define to 1 if Netlink protocol is available.]) + fi]) + +dnl OVS_CHECK_LINUX_NETLINK +dnl +dnl Configure Linux netlink compat. +AC_DEFUN([OVS_CHECK_LINUX_NETLINK], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([#include ], [ + struct nla_bitfield32 x = { 0 }; + ])], + [AC_DEFINE([HAVE_NLA_BITFIELD32], [1], + [Define to 1 if struct nla_bitfield32 is available.])]) +]) diff --git a/tests/automake.mk b/tests/automake.mk index 9244532fa..11696f159 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -308,6 +308,11 @@ tests_ovstest_LDADD = $(OVS_LIBDIR)/daemon.lo \ controller/route.$(OBJEXT) \ northd/ipam.$(OBJEXT) +if HAVE_NETLINK +tests_ovstest_LDADD += \ + controller/route-exchange-netlink.$(OBJEXT) +endif + # Python tests. CHECK_PYFILES = \ tests/test-l7.py \ diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at index c59556173..0ed5bc567 100644 --- a/tests/system-common-macros.at +++ b/tests/system-common-macros.at @@ -530,3 +530,15 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/.*error receiving.*/d /failed to query port patch-.*/d /.*terminating with signal 15.*/d"]) ])) + +# CHECK_VRF() +# +# Perform a requirements check for running VRF tests. +# +m4_define([CHECK_VRF], +[ + rc=0 + modprobe vrf || rc=$? + AT_SKIP_IF([test $rc -ne 0]) + on_exit 'modprobe -r vrf' +]) From patchwork Mon Nov 4 11:04:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006180 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Opk9/zTx; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Opk9/zTx; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.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 4XhpYz10Vmz1xwF for ; Mon, 4 Nov 2024 22:06:29 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BFED08132C; Mon, 4 Nov 2024 11:06:27 +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 rH8DHrLUxJns; Mon, 4 Nov 2024 11:06:18 +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 96F29810CD Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Opk9/zTx; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Opk9/zTx Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 96F29810CD; Mon, 4 Nov 2024 11:06:12 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5BEA5C08A6; Mon, 4 Nov 2024 11:06:12 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 20F56C08A8 for ; Mon, 4 Nov 2024 11:06:11 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id DF494810D3 for ; Mon, 4 Nov 2024 11:05:03 +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 AHTpI7e83h7j for ; Mon, 4 Nov 2024 11:04:56 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2612::623; helo=eur05-am6-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 20CE8810BD Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 20CE8810BD Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20623.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::623]) by smtp1.osuosl.org (Postfix) with ESMTPS id 20CE8810BD for ; Mon, 4 Nov 2024 11:04:49 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=XRRhz8DSoAmTddUNrtlztWen7JrNPPNhSmOPq1i+VzlWrTc8oIHv85hQTSi9W8F7UVHAro/vKUtYN6Bq86VAOI+vAZhFJk09McOhEQzyNn7j5fSFqBrOy/4KxXwLNP+YlLgkc73uKqcY8Jokk8wlTYqE5n2ZNwXBxqMHVM5DwKuRXGAfvChQTLLmeM7WTao9nFo0Mp8WIvz9rmydPTQN14jg3TlRA8i59trM9x8SXeIGinOpnTFb7qxr52ZW3pKwdAZ3M0bXxcWCX+BBYb3ne41mFF9qZrpwq/om57LRuCj1jxdRlGj5vDGhCY9xzqEm3e5z5UbcBFe1EHYV0F71uw== ARC-Message-Signature: i=2; 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=ftk/3xvDEhjeVWQy2w720WYw6YJTSP3RRK6J0cI6TGo=; b=M/gGTKk1r6L/jEOydY7RvNzuXNr2yfrmRU18ZJTR0TEZo0vefFdw+dC2tEFQ1QLnF98qoTotG7U2xd2DROPQESh4Eczb2OJ6T1Nu6KIcSAtYk2L0/+6aTbQjBFb5D996ed/1W2kUDTOOM9KrS7PJDXexwcdoQuaYdNjdAWnNgdp1t3BkGyuMhorWpjFa0KyGqasNsYI5+4AjmTO54LWZ6CUXyFlE0/Qu2WidbkW/1jfXMKorA68FmkYzW+TpsTymrVjGHtKMBLiUrD/ib4Ik1MgJQjMT21FgI7ORcFHd8cVT5s/jyekGhzzL8fITdBc3IrxMg5j0exIbuuqykaQp6Q== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ftk/3xvDEhjeVWQy2w720WYw6YJTSP3RRK6J0cI6TGo=; b=Opk9/zTxmLFJBUhA/vr2UBPp1wpb0oL7TaTajExNqal8F0RulitB/xeYT+ajgs387cl/fiTC8ZJR1JnJ0G4IiwvG7iJBNuxMyZmHMmED4PiJWAy8JY7brsIpf7aa7mNKo+enHu6/G82FajG0VKaMQX9/J+4HHaWRAw1zRzFEXNif9m1/GTH6aHdSa722LsflBRr/LCP5OS1o21RhMF/eEr5ZUYHzKIShfeaSWvwQvS6FlQ3cF9hixngV0dfNnF/OBa1+YDVklXp04T3vLHP+dLhQ/dgRdTff0z7A2z2Zn0X/XPLKD+sCDTHJ/0vU2JYG9mSPwTTkcSQfF6k67yKlig== Received: from DU2PR04CA0354.eurprd04.prod.outlook.com (2603:10a6:10:2b4::7) by AM0PR10MB3123.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:18b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.10; Mon, 4 Nov 2024 11:04:43 +0000 Received: from DB1PEPF000509EB.eurprd03.prod.outlook.com (2603:10a6:10:2b4:cafe::4c) by DU2PR04CA0354.outlook.office365.com (2603:10a6:10:2b4::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:43 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB1PEPF000509EB.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:42 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.105) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:43 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 7959638 X-ExclaimerImprintLatency: 5177607 X-ExclaimerImprintAction: 1fc4a530a4f24a1c903ad6c1450e331b ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uq+KBhluzVpzAKb8IK5iHAg/ws6CxHuYhsL8x9LuDKI27twDEIvB/4l+Mj5k6tJvZd6VxO1/fEEkFTNRhovL79FPCH3faOFnrRZ7uGo6H1t0+hldZedCyQ3qa3IWdtfW7Si24lwf9bsDVofagMIKnKcBOOCVN3TrzdB3cN4sOmX5Y8kawkBBY4OZ/CnJC+IBcYgDP1rqkNWL7ydk2Yc018TC/v1Tgyz3jDYXJ7/Euic8/e+ZNhd29Ed5YjpZbUJl9xU3ZN1KPMvMq0zHBRyojJz2RfI8dd9LjMf1OyfJdC4+Jml0+1SMvSL5PfF0/o408ZOH09yEc6WpeDSQKA4XhQ== 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=ftk/3xvDEhjeVWQy2w720WYw6YJTSP3RRK6J0cI6TGo=; b=nJbsefeTrc25auligMcCPTNcdLyuQRZDuax+SAHYoR61VIiCeqApU7rNGkhfYmhMLpLpSAiUpj3wudP3z/7w6lczQJ6081sHQ08F8VWYDzWV+cR9dkRCANVch4d05fxrbpngQLDXHnn21UnB94JtNHnbgqzHSRqaOexxoItVysaQpXzJrDSIuk42G8AvJlKICWue4/+pmzl4wYEuOtaZORaAS/TDAAvn4/TMpuVcxmMSiTuAhfFigY+w1lIUxVlbtSYm43KviJLMqN1q7c9LuMeWGIGQVDnqWFIpq+8ZPJFL16E1zmYbxXFlUSX5d00zQJV9mIwuRZaH5o1CuS/GMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ftk/3xvDEhjeVWQy2w720WYw6YJTSP3RRK6J0cI6TGo=; b=Opk9/zTxmLFJBUhA/vr2UBPp1wpb0oL7TaTajExNqal8F0RulitB/xeYT+ajgs387cl/fiTC8ZJR1JnJ0G4IiwvG7iJBNuxMyZmHMmED4PiJWAy8JY7brsIpf7aa7mNKo+enHu6/G82FajG0VKaMQX9/J+4HHaWRAw1zRzFEXNif9m1/GTH6aHdSa722LsflBRr/LCP5OS1o21RhMF/eEr5ZUYHzKIShfeaSWvwQvS6FlQ3cF9hixngV0dfNnF/OBa1+YDVklXp04T3vLHP+dLhQ/dgRdTff0z7A2z2Zn0X/XPLKD+sCDTHJ/0vU2JYG9mSPwTTkcSQfF6k67yKlig== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:41 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:41 +0000 Date: Mon, 4 Nov 2024 12:04:39 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::16) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DB1PEPF000509EB:EE_|AM0PR10MB3123:EE_ X-MS-Office365-Filtering-Correlation-Id: 25e1fc53-786f-4c24-a527-08dcfcc07c98 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: bwllDUvVoXEjxq/dLXBYnZQNHi7LHqZVmIZzJvN5iCdFeVZohZraZDRxvKW0P/msrUuvzoCwLC0bw1kMmY3kLdcQrTnfgx3RFFuUzWjxefawobb+tpWIZcldBTORDc9ViLI7jhoCYlMppGEH3wbcu9oXxOGjTuhW3XxlzB7pkOQfngrz7pA9FHK7zb/BPVkHHrqg6iS31zd9SsgMp7DKowCufYKTOX1Kc7in0FWKDbMUN3QVOZxZuHBazBvlunwnq3orks0VVG/p4+6Apu4AD933GXssehauGOW4ZWMualMqq8qVKc/LmgI9E3oJIP4gSYC8Sd/UESALLtwgYTkNaAKUhDkNW/2n/0rdrYm0CzIguxVir/P+3qiOIy/YaP8vwIdEMvJRBBIoftzOjtmhMPVGC2tGxhon3Rpojdk5Omz3CxWdMyhwGOtPzUGaH60e0wGZEHLDYhpqUbTfMu4pNo+Tiad3yVE2RpK6Tj/7Dh2933vT2U8apEVCSZIOyQ2bCuAQeQoZahTqJUSWpjimfol9CeQ1CnuYMipkaxaHcQp31YjBcyswI4tHt75vyZQmISpqjc2fEHFBgLJOfO15081+jd4oD8zU3cD+z908X4CNBg5Mg9/YXmzWz5cw4OJUV/3BdBSUh3digZCEYjj8JLJnR9/f3fYdl3wWN/+n0IskH2ZNVIma+4FrrV3MakbKHaxksKs/wAkWD6OZeFVRgQVxNJbGlmQ/5v9q50U6qCkIXl5jPoZxa2FdflBAtpKNO5dcH8TMIAhal8Cz99U5PW9puT8Pk2EgfoHhr/rEofoLKZ+yn9PdYNclBnAeLPedQ/u4+2Q4IuxNBIiTV/r9X6ILU9nlgQtP4LjemBltFieSA12KD8hTlL9ILXqRqWXWho1wG60FJlvCviP4kENfsRva3iAVlYKxDznI+OlO0mLJZrJUAfYKmP0OpFgza/RA0lrBqu8BFAzCmi9DEd4hZbAbIrWffHjPd72LuA7kDb9QO5DJox0iuNdyC1qFSBPrF9TA/PzPz4TngqF/Gaa76ilwK+fHiqL3Mktfa3X+5pQd8OCE2AtS3zoOiNvKdmEVEMgZV9mojFGFfdGzk11HFx0VLc0OuHUV/hXW9p3o/K3clgrUDJKVel5k6nGhxWExQFj9vtv5YMlSYgXGGzu+JlxbgNBGLjR/A5QpUEaymqnHuOaVJIGMPh3d3U9QkRVytn3GzDYaO89Mgb+mANZEqW6IUEiDQ0SSlBKVq0CzXahfWZWeJk8V0roaX8F/lo7JkIFKPf6jke1iCIDpxcMsapRgH8CfOWGEBwiCP8vfkXlv4QG1RBG4m5CNTdWS+19z X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509EB.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b9ddbf28-cd80-4eac-1f96-08dcfcc07b65 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|35042699022|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: tdknvbMGYGxI+7j2duG2kyN/T1Tgix1yfak99iKDSU+IS/XUaMHKV7iX/9Z8QTQt1gB6LLrt5npI1s19XD0CUtzGclqfzIBdD9E0SjvuUHNQf6U5tcKRVJ5N34MhTZOfiLs6W9zSCCa0VdvPrjxZB0sjP6ykNFD4qPYDidFVXEgtRnzy/++0svr+7c9Kls3kOM2anXfA7cyUeDkpHtUAWOIqZXG5cBb6hoqgYXDQFIg8p4/QMV2xDIkGRBG2WNGyDXb4lqp7/xjEbJ/5XNFKKenBkfwZayX0+m2yoWbFLBwUrf9acw0fcX8E8HKcfLtyED1shO+XulG71xY4pQZTdOYbB2k0Kna5EW8T3zqnaSupTnolDmYy9RnMZIYUmISPvpaKbDhvgSwenKcOhRcY4aOYYsMlnYTNLFP6bDgUcZLOPFSVH30h4OXqgHbEJi9bMRXyRqwzQ618n/ok5EYUy7UP6q0p7cge4/nC7DE3PtUc/LCh0QN1AN8Ch6aoVkECMiQunEMYmF8jn7ZWjkV1Hlb7hIWwvsxDuRJsplU/aA5UiN8QtPCM9Vpc7Nr5iGVXIu+BYvYS1yvRdJammcqtj/pqgUyTK3jHJEZaHLMLciTGCBYs6yNTo143jvAUol6lYKPsIa5VlByKu7LUVjeCCf1GHzt0PZz7YiSSUoh4FdWLsR7en+EZZQfYj8GPcaBnpMxR3c8Sv7iztYh8TmRL4KmUJpbrkJD8xilDOPwoF0G7PdsukOStLe09nr0US1aqfDUvvcoMtzHvsL7BnD1S9YKdRAcylX4awy3hT9ghybF+vOF/zqcoUjfbpYwVW/NtrBa5EGh7XtOki6SPESmQstwmmdFGD5Gt0rgbCsUwFcaQyJh+ldEQjDYUtl6TkLAvaUHo9d64SIZQyPckKmTeDiRS/uzpljqypRw+FRdp8nkUgcY9aJqvATQrwQDf/WbWDYpVWVu38no+E9sZ05B/ZHJYpMFFSUNyg2EWcPNCYpr+QiUa1SXSTAGVAlwNfCoZnfR02iTlGogYNI/3eKA4UH8Nj7fcW1rQE2ptfv+I2msvrbbLl8qCEnYtVXbPdbK14Ctu0G7RCw/rvWG0ITh9PWdXQV3i4TAWu8zf477jzMsdbAZv3y6ieFAiL8zbqjukB2kMiKKcJ3W3M83dCMCeAxVTaEh2uANvaw2roea4gxG9Uu+96buJ4hOLvouo3jUygFLjoAjIFhMlOxYnjfpVrr1P+iqmla7Lb89OCU8msmjMRvZXu7UMAv2Kh0AvpXnakrQh6F4WBxVPFbCFB+dtR3axbqUyH904Uou1HTO/RYRqf/fY3RF3zTNwlteMy84O732zVn5t/2wNpx08m8d3sgo8exTH5MgDtUKvtzK2pREdBWQZZJnMSrPTes7R+FJ1cT948CGXrQ4KAd7Fpl8D2w== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(35042699022)(36860700013)(376014)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:42.8754 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 25e1fc53-786f-4c24-a527-08dcfcc07c98 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509EB.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB3123 Subject: [ovs-dev] [PATCH ovn v2 22/32] controller: Announce routes via route-exchange. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" This engine node takes the routes from the "route" engine node and ensures they are written to the linux side. It is separate from the "route" engine node as it will also be used to learn routes in the future. Signed-off-by: Felix Huettner --- controller/automake.mk | 7 ++- controller/ovn-controller.c | 48 +++++++++++++++- controller/route-exchange-stub.c | 42 ++++++++++++++ controller/route-exchange.c | 97 ++++++++++++++++++++++++++++++++ controller/route-exchange.h | 33 +++++++++++ 5 files changed, 223 insertions(+), 4 deletions(-) create mode 100644 controller/route-exchange-stub.c create mode 100644 controller/route-exchange.c create mode 100644 controller/route-exchange.h diff --git a/controller/automake.mk b/controller/automake.mk index 54855a3f9..b1bb23e78 100644 --- a/controller/automake.mk +++ b/controller/automake.mk @@ -50,13 +50,18 @@ controller_ovn_controller_SOURCES = \ controller/statctrl.c \ controller/ct-zone.h \ controller/ct-zone.c \ + controller/route-exchange.h \ controller/route.h \ controller/route.c if HAVE_NETLINK controller_ovn_controller_SOURCES += \ controller/route-exchange-netlink.h \ - controller/route-exchange-netlink.c + controller/route-exchange-netlink.c \ + controller/route-exchange.c +else +controller_ovn_controller_SOURCES += \ + controller/route-exchange-stub.c endif controller_ovn_controller_LDADD = lib/libovn.la $(OVS_LIBDIR)/libopenvswitch.la diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 652209ff5..3adc96960 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -88,6 +88,7 @@ #include "lib/dns-resolve.h" #include "ct-zone.h" #include "route.h" +#include "route-exchange.h" VLOG_DEFINE_THIS_MODULE(main); @@ -4764,6 +4765,14 @@ controller_output_bfd_chassis_handler(struct engine_node *node, return true; } +static bool +controller_output_route_exchange_handler(struct engine_node *node, + void *data OVS_UNUSED) +{ + engine_set_node_state(node, EN_UPDATED); + return true; +} + /* Handles sbrec_chassis changes. * If a new chassis is added or removed return false, so that * flows are recomputed. For any updates, there is no need for @@ -4941,6 +4950,36 @@ route_sb_port_binding_data_handler(struct engine_node *node, void *data) return true; } +static void +en_route_exchange_run(struct engine_node *node, void *data OVS_UNUSED) +{ + struct ed_type_route *route_data = + engine_get_input_data("route", node); + + struct route_exchange_ctx_in r_ctx_in = { + .announce_routes = &route_data->announce_routes, + }; + + struct route_exchange_ctx_out r_ctx_out = { + }; + + route_exchange_run(&r_ctx_in, &r_ctx_out); + + engine_set_node_state(node, EN_UPDATED); +} + + +static void * +en_route_exchange_init(struct engine_node *node OVS_UNUSED, + struct engine_arg *arg OVS_UNUSED) +{ + return NULL; +} + +static void +en_route_exchange_cleanup(void *data OVS_UNUSED) +{} + /* Returns false if the northd internal version stored in SB_Global * and ovn-controller internal version don't match. */ @@ -5235,6 +5274,7 @@ main(int argc, char *argv[]) ENGINE_NODE(mac_cache, "mac_cache"); ENGINE_NODE(bfd_chassis, "bfd_chassis"); ENGINE_NODE_WITH_CLEAR_TRACK_DATA(route, "route"); + ENGINE_NODE(route_exchange, "route_exchange"); #define SB_NODE(NAME, NAME_STR) ENGINE_NODE_SB(NAME, NAME_STR); SB_NODES @@ -5265,6 +5305,7 @@ main(int argc, char *argv[]) route_runtime_data_handler); engine_add_input(&en_route, &en_sb_route, engine_noop_handler); + engine_add_input(&en_route_exchange, &en_route, NULL); engine_add_input(&en_addr_sets, &en_sb_address_set, addr_sets_sb_address_set_handler); @@ -5446,9 +5487,8 @@ main(int argc, char *argv[]) controller_output_mac_cache_handler); engine_add_input(&en_controller_output, &en_bfd_chassis, controller_output_bfd_chassis_handler); - /* This is just temporary until the route output is actually used. */ - engine_add_input(&en_controller_output, &en_route, - controller_output_bfd_chassis_handler); + engine_add_input(&en_controller_output, &en_route_exchange, + controller_output_route_exchange_handler); struct engine_arg engine_arg = { .sb_idl = ovnsb_idl_loop.idl, @@ -6166,6 +6206,7 @@ loop_done: poll_block(); } + route_exchange_cleanup(); } free(ovn_version); @@ -6195,6 +6236,7 @@ loop_done: service_stop(); ovsrcu_exit(); dns_resolve_destroy(); + route_exchange_destroy(); exit(retval); } diff --git a/controller/route-exchange-stub.c b/controller/route-exchange-stub.c new file mode 100644 index 000000000..2ca644b06 --- /dev/null +++ b/controller/route-exchange-stub.c @@ -0,0 +1,42 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include "openvswitch/compiler.h" +#include "route-exchange.h" + +bool +route_exchange_relevant_port(const struct sbrec_port_binding *pb OVS_UNUSED) +{ + return false; +} + +void +route_exchange_run(struct route_exchange_ctx_in *r_ctx_in OVS_UNUSED, + struct route_exchange_ctx_out *r_ctx_out OVS_UNUSED) +{ +} + +void +route_exchange_cleanup(void) +{ +} + +void +route_exchange_destroy(void) +{ +} diff --git a/controller/route-exchange.c b/controller/route-exchange.c new file mode 100644 index 000000000..86ccc92cb --- /dev/null +++ b/controller/route-exchange.c @@ -0,0 +1,97 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include + +#include "openvswitch/vlog.h" + +#include "lib/ovn-sb-idl.h" + +#include "binding.h" +#include "ha-chassis.h" +#include "local_data.h" +#include "route.h" +#include "route-exchange.h" +#include "route-exchange-netlink.h" + + +VLOG_DEFINE_THIS_MODULE(route_exchange); +static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); + +static struct sset _maintained_vrfs = SSET_INITIALIZER(&_maintained_vrfs); + +void +route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, + struct route_exchange_ctx_out *r_ctx_out OVS_UNUSED) +{ + struct sset old_maintained_vrfs = SSET_INITIALIZER(&old_maintained_vrfs); + sset_swap(&_maintained_vrfs, &old_maintained_vrfs); + + const struct advertise_datapath_entry *ad; + HMAP_FOR_EACH (ad, node, r_ctx_in->announce_routes) { + struct hmap received_routes + = HMAP_INITIALIZER(&received_routes); + char vrf_name[IFNAMSIZ + 1]; + snprintf(vrf_name, sizeof vrf_name, "ovnvrf%"PRIi64, + ad->key); + + if (ad->maintain_vrf) { + int error = re_nl_create_vrf(vrf_name, ad->key); + if (error && error != EEXIST) { + VLOG_WARN_RL(&rl, + "Unable to create VRF %s for datapath " + "%"PRId64": %s.", + vrf_name, ad->key, + ovs_strerror(error)); + continue; + } + sset_add(&_maintained_vrfs, vrf_name); + } + + re_nl_sync_routes(ad->key, &ad->routes); + } + + /* Remove VRFs previously maintained by us not found in the above loop. */ + const char *vrf_name; + SSET_FOR_EACH_SAFE (vrf_name, &old_maintained_vrfs) { + if (!sset_find(&_maintained_vrfs, vrf_name)) { + re_nl_delete_vrf(vrf_name); + } + sset_delete(&old_maintained_vrfs, SSET_NODE_FROM_NAME(vrf_name)); + } + sset_destroy(&old_maintained_vrfs); +} + +void +route_exchange_cleanup(void) +{ + const char *vrf_name; + SSET_FOR_EACH_SAFE (vrf_name, &_maintained_vrfs) { + re_nl_delete_vrf(vrf_name); + } +} + +void +route_exchange_destroy(void) +{ + const char *vrf_name; + SSET_FOR_EACH_SAFE (vrf_name, &_maintained_vrfs) { + sset_delete(&_maintained_vrfs, SSET_NODE_FROM_NAME(vrf_name)); + } + + sset_destroy(&_maintained_vrfs); +} diff --git a/controller/route-exchange.h b/controller/route-exchange.h new file mode 100644 index 000000000..2c2a9ab84 --- /dev/null +++ b/controller/route-exchange.h @@ -0,0 +1,33 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ROUTE_EXCHANGE_H +#define ROUTE_EXCHANGE_H 1 + +#include + +struct route_exchange_ctx_in { + /* Contains struct advertise_datapath_entry */ + struct hmap *announce_routes; +}; + +struct route_exchange_ctx_out { +}; + +void route_exchange_run(struct route_exchange_ctx_in *, + struct route_exchange_ctx_out *); +void route_exchange_cleanup(void); +void route_exchange_destroy(void); + +#endif /* ROUTE_EXCHANGE_H */ From patchwork Mon Nov 4 11:04:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006182 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=emmgbLuS; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=emmgbLuS; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 4XhpZB42yYz1xwF for ; Mon, 4 Nov 2024 22:06:42 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id A241440F0F; Mon, 4 Nov 2024 11:06:39 +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 zmHEjMfKux62; Mon, 4 Nov 2024 11:06:34 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 20E3940C2F Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=emmgbLuS; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=emmgbLuS Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 20E3940C2F; Mon, 4 Nov 2024 11:06:27 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id C166AC08A6; Mon, 4 Nov 2024 11:06:26 +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 15A7AC08A6 for ; Mon, 4 Nov 2024 11:06:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id CAC704063F for ; Mon, 4 Nov 2024 11:05:02 +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 OJYdUgHTSTit for ; Mon, 4 Nov 2024 11:05:00 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:260d::62b; helo=eur03-dba-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org BFAD3409B1 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org BFAD3409B1 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2062b.outbound.protection.outlook.com [IPv6:2a01:111:f403:260d::62b]) by smtp2.osuosl.org (Postfix) with ESMTPS id BFAD3409B1 for ; Mon, 4 Nov 2024 11:04:52 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ZvrZ3BiPJXCHPKsHipIT3BHRJMTRIXVqSn/fBvR5/xR5piA5T3rSdq4ZUt759c7cWUG96GcMkf7zEw7ujenYULSNZWFT/5o9lGZqizz2rO4Lrlaj2DSRHI/xweVX3e35kaUziaKYV61oxFds2hGR1auWd9+DbUGFnwUOCIa6muEudNPuZFb5nCRZNsU9g3SaBdDB7haA42ObqkhYzfwBkRkyxFkzxSymb/Y7Dar0n+/QrEXHC93NoYDdxBBxF2kL41BbXLx4PdflSu9uiRC0aAhbgc4AcRUolDdAPFbcUBmtECZ+RzR+pQW9p19NLBuXZynb+FPKmhaw3Ui+irGtag== ARC-Message-Signature: i=2; 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=tnHwEU20/LZxfDQQe3SIr+B/GhcdSKU9Eie5wdr5Vo4=; b=s1inxMMeE/TJI9UDKv80hNzZutGjGcPDFh585OOu7aFZQnptOcWTt/6lKBR0zbd0iJWEDj7D+fCTbg9TuXBgPzOx7DNWCXfuefUjn032l+UDWAjO7SzS2b587Cik/gx4g81t1zeHb8rjxjABliOXm1m18e65SFnUG69H9/P9/DSKTosL7lxkaT1azuNw5FfTp4MVikcpos6jp1u8FQ6cOB2+817tRYCeDKR+wWyIc3gbZJmOIDlHmocuPbl9bgiFM1S5xUGiWqAEA54JM1WaYaAnIZF2G52fBUkOJ8F98U0KDB/auk+9HME1c9NVSnYvC0lnGAlU21w/T2iN6fUZ0g== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tnHwEU20/LZxfDQQe3SIr+B/GhcdSKU9Eie5wdr5Vo4=; b=emmgbLuS7h1rpw2rdQuU3W6ecvrl3TxHWtlH/72VovIYP0EVOfOyh6EcLIpKuWPeTBp6xvbgwbHvn7Rw1BDk6gz30ZvSOayFxo1ZIUheKKi/6+34Q/R94KKdVTp8yT8XgJno8y9ujQzUFUIv9afJV35h9lKzBy0QNIxnPBg4W1vORCVf1ha4gK8qQT4xSb1LYrpJoRTH0VzlY2raFCnlAiw3+jUp6IaMPzhepENnizGG8CEp8Y6k3Y5NCkmOoahJ9XVEfuD11xtuEvzsTFa4X1qOtRt2VIfjXn1YQs7VUnB0jr6mmH+Z5Rw1xLlcBU6hZRfRp5Ci7+wOskl+KDrzow== Received: from DUZPR01CA0328.eurprd01.prod.exchangelabs.com (2603:10a6:10:4ba::13) by DU0PR10MB6226.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:3ed::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:46 +0000 Received: from DU6PEPF0000A7E4.eurprd02.prod.outlook.com (2603:10a6:10:4ba:cafe::6) by DUZPR01CA0328.outlook.office365.com (2603:10a6:10:4ba::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:46 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU6PEPF0000A7E4.mail.protection.outlook.com (10.167.8.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:44 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:45 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5797264 X-ExclaimerImprintLatency: 3189246 X-ExclaimerImprintAction: 449f6b3060644e04be84078877a6969d ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=upOjjIz0FTDpTygbAFimikrdluRfNpKoPjmJszfFS7fEKsqLAyHyP7RdnOqcrLQ19S9N9yqmyflNwtI7jB50AFxx1ZO1Ko+G7AjGz15OGmZm5+W9brcQ1On8TQOZyfkZAJ0ax8wo4iP9/FKR+hkM20jZ3KaQV7z4GFxznZ3z3Fbevr//XHUSgSle6pj8edCc3jjBHAVs6UUTfUUpWsXcJ18GxlHFSOYWA3eqaCR6iHRnq1Jwd7mQ2FWgqnjolMXbxlzQq+hfFJtnBXBwAZuw3efnj0AX8FpbNDI/PwqY2RnH59mBWxfwcMU//XuJqrmP/BVxmslaGuA+0QZND7dIJQ== 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=tnHwEU20/LZxfDQQe3SIr+B/GhcdSKU9Eie5wdr5Vo4=; b=u3RrZCFJ9X+hOEm0e5+GnVDN2OK9TI3Wo4m1RBVaEKSFIoCbzGCBNwx3Nf32AT18vYexYBI0sUH+5DU59UFnJKUr4lV5RuwkQkBmgh51Md0fuqU9xKwgHMpvMWYSXQwr0OHOT7ZlnEqWjzWEssB00bwysYSPFL3zlAesTZiOW59rHtFXHODgIviUxWIn4uaEtDfnJwaMCmqMCAWfRbQ2s8DwZp9aSuknuZxfAb3ecqTBQVyQIUOX7nGpkbKKLINW+G1W8cFcwg35IEwuxSlSMvnTK51E0m5reGJRr9nH50AMuZoCst9oI0RNk/2neT0Q0mzr+KsDnmSyjmyxTC3l/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tnHwEU20/LZxfDQQe3SIr+B/GhcdSKU9Eie5wdr5Vo4=; b=emmgbLuS7h1rpw2rdQuU3W6ecvrl3TxHWtlH/72VovIYP0EVOfOyh6EcLIpKuWPeTBp6xvbgwbHvn7Rw1BDk6gz30ZvSOayFxo1ZIUheKKi/6+34Q/R94KKdVTp8yT8XgJno8y9ujQzUFUIv9afJV35h9lKzBy0QNIxnPBg4W1vORCVf1ha4gK8qQT4xSb1LYrpJoRTH0VzlY2raFCnlAiw3+jUp6IaMPzhepENnizGG8CEp8Y6k3Y5NCkmOoahJ9XVEfuD11xtuEvzsTFa4X1qOtRt2VIfjXn1YQs7VUnB0jr6mmH+Z5Rw1xLlcBU6hZRfRp5Ci7+wOskl+KDrzow== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:43 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:43 +0000 Date: Mon, 4 Nov 2024 12:04:41 +0100 To: dev@openvswitch.org Message-ID: <3e8708272f00074ff43bdad11c3eb1b1ecc620f8.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::16) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DU6PEPF0000A7E4:EE_|DU0PR10MB6226:EE_ X-MS-Office365-Filtering-Correlation-Id: d7783fdc-60c3-424d-0f20-08dcfcc07d9f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: iDG3m0p04Rp+Kb3SA8hC9GuqouC29Ivizx4InlzyiKiwK/SCF471wWQ9bshE6Uq25j88XQt6eiLm99qKocE2RjZZMcskst/G3yLNsE1p+bp+o2TBv992Sa5/39V82LxPKjSaEp3OZk+5mrx2DC7K9aClIBG64KcdmCu3ZmEA/ObnSNqC6W8XVb30J0kADVhPhNgnXvgCUZZ+5N1gowBD21oCrbmnezbeB4cRJirB+iECDI3ACITrSXlFGBh15HNnzH2m7lMeohZdQrpdcvV6AIy50hU0aEzkyLZUNh4K2N96Bn92MtHT1ot41yatqJ9lWtNz5bntM/Hb/syz2VXj5bK9mdfPIhmZsS3ccXd9b0iDArBQdQBBIe4tx1mUl70GzQsm1JvyyEMBLGGAIFJ1SP77wwonuCqbohw/X1N1fhxN7+eEzgm/G+UWKEAkfpqwC5xV6fvI026Ran9c8RhIAB1KaxC53vGFuTdzkfoaAv1DXxwyM3uRgdjiF3h1FGwBJYrAflGZX+N7dGqVEIgzibvR9GJ8q87QMOApPwhzomGpYgQxoB8wi/LYK4M2gBrgv+j5hfTW2A9TlE7caRJlpPn7vIjI52bXx6MLyvrOG1xpkuTTeWaL40wU3Og4viL/9pzhXc1LknzW82zjyRR+YEVGzecQHKBVKFjYxG8OObjeM6PNrlLqGSy98nyg8JfHcRGQFDP0y5Bts6fYioMHoWREF1ON7ZS//tHqPLSYsDJjJRkQ5wu2YEwMWHdn8/6O3Avl/exxiQisftREj/oDQi87DRZya+Rbr+eKXMPLKwfo08H4WYvSPqVanO0DgG7KMbRTkDuwBH9+2kEHPlu1xMX1ZGwrMhyolWunZBvVf+a9GOszPlJZ92s0qIK+6RUBdXvYjExvxVSZYQ0J/fw6e1G9T2X/P3cqmejrtrivzeKwHfnmxt4aSlsiNApslF+cadHczelPS6GweLFi2ashuUHi4Qp4CModKFki0jieZU6gAbFrg8VU23YwvBXO2cBgZl0KUfRkEGYVIt7Wz3U43TaXlgdN2O8Af+qv6xv2Pd7nZGzxuMc0cvhKk9O81OntuxBTd/jiOKzceIP8zidQHKdCqGE+I1ZeER0HHY31Neq70uKARl+LMaq6UtYMRyvwISBWSUAo/Avxe7DaHi5EgTkmNdvP/QCLLpPXC6c8aE7drxzeyPgsNjL1gBz98wEI6yRxtZ2nCVPyPpJ7SgWIsaRqt7RJqHoNj8WupEu7jW+7aslbnFJ+8fdpQ7riol+T X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF0000A7E4.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 938638d9-ae8e-4483-3705-08dcfcc07c8d X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: D/IMQYSzYl67GA6VKdOgPC/vQGqI7SElKfFEsU6CRzMINNsS9e9cEDv8sYP3DjErlfyZsJfNxKvuAjTWDrDj4nYZZPrm7IbuvNzTkok+PX9/x5VZpVKjEDp8jZ1FkjeRzr5I2MoLdHZeGRHOvZ/CZO6Sq+n2RRtszgsfBWDzmgebAqrtMqxz8pxvHEUT751qhX8thdV1BEyV4tF3TPXF4OHkd+M7dVBfd3hCqbQvTaCERc9zGiBaJoACl2htm48dqZRNjbho4I35t9Eu14hvAg8O5ybJWCoTHb5CzfD0sHfUkKescNY1qyYJgxhicZMzgpZ5Zfm6BmOdf3eyCTwkpHYEgZicS2aILujIoSztXuK1inwgZr/Ge+Kbov4yBMjPhsSZaGYv4k8/GGVayY8LrISar12smjVtJL7ZYs+yOo01RPa9dp/OJibnIG29NdrOUtP46ev0rWcYiSpySD/FcPvEkqfAIk4s04MDmVKP7NoNeuWd98LQoKpbt/36h8zbIxBrJ8et8UMgUXgsixgqrI3m08GdFvTZVdC0q/YFABpnB+BRdE8ar/11ecPt5H6Rl6o4/LPNwfFlFRnR1bcbF4gUCCFD6iHLHkH9aXbNfxzLMkqSHOYtGVku6qTxkzAxpq+nyKsTiSR75u/wSQbIUT3+jHveVbQRDkEc1Jg2q8OmqAhG7dwOrmGob1FIhJDxJ4EBaF2Rihcdeg9z4omjCOlsOkpNOljhBXgGyhHvCQo0ArnzSLqDz8zk3joEfVF05p+P7VlefZl2slyEXo3juDxioASD7okGeqDmDxodZbvpiGfVYJBiI4FgF0ocne3h9IyxTJ0MOmENyZtgEGHMqIOrKrflLf7bU3vGxja+7eYig6k8rxvEEzuX0TP0eNtx+vgx28tdXfCe8kIcHz6h9n55St3nrDsC2WIAysA87WfSHfHD60a4GX+GR521L0FRM5j2PttZCDXQl6WkbGOUH1Mtu+xG7DlAt8ikNJdXfxyPvwQ6CJ0B9bRNfXDVLI9vQ353aQvdTYoI2RWrRVhIZC6nK0Zw4gFym4D6mQlBtvy5OaswcXg5zRfzUhKd0hjo3/pZmBDv7By/TrINA7IjSRknUbPCklRA/0gXMubcH4TQhBcANh7zoroXRvm4qpSD5biRgzNVyB3HJTyH3Dq1xdYFwja2Tn/EyWjQcBRSi6Gsmz0wmuEXigw74d92qUU6xsoXC0mKBVZNjTgqdTYGYNKV+V6rigkIrDLo3GejpiTmVJLLuxzLbOLYLlNIIRQDZCzU4RRGV1+UfLbo40M8Iw4PlRNQR/n8uuBj5S9hTYovqEQ+WeAjhY2R84smDYCEjiJLPsjOyJYR0o3uQJtiADVnelb8KNE290Vi0cQGJXM= X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:44.7826 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d7783fdc-60c3-424d-0f20-08dcfcc07d9f X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000A7E4.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR10MB6226 Subject: [ovs-dev] [PATCH ovn v2 23/32] controller: Support learning routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" we now learn all routes inside the vrfs we also advertise routes on. The routes are then placed in the southbound database for processing by northd. Routes are only selected if matching the following rules: 1. must not be a route advertised by us 2. must not be a local connected route (as we want to not learn transfer networks) 3. the prefix must not be a link local address However we can not reliably determine over which link we learned the route in case we have two LRPs of the same LR on the same chassis. For now we just assume the routes on both links are identical. Future commits will refine this. Signed-off-by: Felix Huettner --- controller/ovn-controller.c | 8 ++ controller/route-exchange-netlink.c | 41 +++++++- controller/route-exchange-netlink.h | 13 ++- controller/route-exchange.c | 146 +++++++++++++++++++++++++++- controller/route-exchange.h | 2 + lib/ovn-util.c | 10 ++ lib/ovn-util.h | 1 + 7 files changed, 216 insertions(+), 5 deletions(-) diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 3adc96960..cd14db8de 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -4953,10 +4953,16 @@ route_sb_port_binding_data_handler(struct engine_node *node, void *data) static void en_route_exchange_run(struct engine_node *node, void *data OVS_UNUSED) { + struct ovsdb_idl_index *sbrec_route_by_datapath = + engine_ovsdb_node_get_index( + engine_get_input("SB_route", node), "datapath"); + struct ed_type_route *route_data = engine_get_input_data("route", node); struct route_exchange_ctx_in r_ctx_in = { + .ovnsb_idl_txn = engine_get_context()->ovnsb_idl_txn, + .sbrec_route_by_datapath = sbrec_route_by_datapath, .announce_routes = &route_data->announce_routes, }; @@ -5306,6 +5312,8 @@ main(int argc, char *argv[]) engine_add_input(&en_route, &en_sb_route, engine_noop_handler); engine_add_input(&en_route_exchange, &en_route, NULL); + engine_add_input(&en_route_exchange, &en_sb_route, + engine_noop_handler); engine_add_input(&en_addr_sets, &en_sb_address_set, addr_sets_sb_address_set_handler); diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index 84c6baa15..ee33d08d2 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -26,6 +26,7 @@ #include "openvswitch/ofpbuf.h" #include "openvswitch/vlog.h" #include "packets.h" +#include "ovn-util.h" #include "route-table.h" #include "route.h" @@ -171,8 +172,27 @@ re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, return modify_route(RTM_DELROUTE, 0, table_id, dst, plen); } +static uint32_t +route_hash(const struct in6_addr *dst, unsigned int plen) +{ + uint32_t hash = hash_bytes(dst->s6_addr, 16, 0); + return hash_int(plen, hash); +} + +void +re_nl_received_routes_destroy(struct hmap *host_routes) +{ + struct re_nl_received_route_node *rr; + HMAP_FOR_EACH_SAFE (rr, hmap_node, host_routes) { + hmap_remove(host_routes, &rr->hmap_node); + free(rr); + } + hmap_destroy(host_routes); +} + struct route_msg_handle_data { const struct hmap *routes; + struct hmap *learned_routes; }; static void @@ -184,8 +204,24 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) struct advertise_route_entry *ar; int err; - /* This route is not from us, we should not touch it. */ + /* This route is not from us, so we learn it. */ if (rd->rtm_protocol != RTPROT_OVN) { + if (prefix_is_link_local(&rd->rta_dst, rd->plen)) { + return; + } + for (int i = 0; i < rd->n_nexthops; i++) { + if (ipv6_is_zero(&rd->nexthops[i].rta_gw)) { + /* This is most likely an address on the local link. + * As we just want to learn remote routes we do not need it.*/ + continue; + } + struct re_nl_received_route_node *rr = xzalloc(sizeof *rr); + hmap_insert(handle_data->learned_routes, &rr->hmap_node, + route_hash(&rd->rta_dst, rd->plen)); + rr->addr = rd->rta_dst; + rr->plen = rd->plen; + rr->nexthop = rd->nexthops[i].rta_gw; + } return; } @@ -212,7 +248,7 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) void re_nl_sync_routes(uint32_t table_id, - const struct hmap *routes) + const struct hmap *routes, struct hmap *learned_routes) { struct advertise_route_entry *ar; HMAP_FOR_EACH (ar, node, routes) { @@ -224,6 +260,7 @@ re_nl_sync_routes(uint32_t table_id, * in the system. */ struct route_msg_handle_data data = { .routes = routes, + .learned_routes = learned_routes, }; route_table_dump_one_table(NULL, table_id, handle_route_msg_delete_routes, &data); diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index f87ebd75d..566b38fde 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -16,6 +16,8 @@ #define ROUTE_EXCHANGE_NETLINK_H 1 #include +#include "openvswitch/hmap.h" +#include /* This value is arbitrary but currently unused. * See https://github.com/iproute2/iproute2/blob/main/etc/iproute2/rt_protos */ @@ -24,6 +26,13 @@ struct in6_addr; struct hmap; +struct re_nl_received_route_node { + struct hmap_node hmap_node; + struct in6_addr addr; + unsigned int plen; + struct in6_addr nexthop; +}; + int re_nl_create_vrf(const char *ifname, uint32_t table_id); int re_nl_delete_vrf(const char *ifname); @@ -34,7 +43,9 @@ int re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, void re_nl_dump(uint32_t table_id); +void re_nl_received_routes_destroy(struct hmap *); void re_nl_sync_routes(uint32_t table_id, - const struct hmap *host_routes); + const struct hmap *host_routes, + struct hmap *learned_routes); #endif /* route-exchange-netlink.h */ diff --git a/controller/route-exchange.c b/controller/route-exchange.c index 86ccc92cb..41fea6398 100644 --- a/controller/route-exchange.c +++ b/controller/route-exchange.c @@ -34,6 +34,139 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); static struct sset _maintained_vrfs = SSET_INITIALIZER(&_maintained_vrfs); +struct route_entry { + struct hmap_node hmap_node; + + const struct sbrec_route *sb_route; + + const struct sbrec_datapath_binding *sb_db; + char *logical_port; + char *ip_prefix; + char *nexthop; + bool stale; +}; + +static struct route_entry * +route_alloc_entry(struct hmap *routes, + const struct sbrec_datapath_binding *sb_db, + const char *logical_port, + const char *ip_prefix, const char *nexthop) +{ + struct route_entry *route_e = xzalloc(sizeof *route_e); + + route_e->sb_db = sb_db; + route_e->logical_port = xstrdup(logical_port); + route_e->ip_prefix = xstrdup(ip_prefix); + route_e->nexthop = xstrdup(nexthop); + route_e->stale = false; + uint32_t hash = uuid_hash(&sb_db->header_.uuid); + hash = hash_string(logical_port, hash); + hash = hash_string(ip_prefix, hash); + hmap_insert(routes, &route_e->hmap_node, hash); + + return route_e; +} + +static struct route_entry * +route_lookup_or_add(struct hmap *route_map, + const struct sbrec_datapath_binding *sb_db, + const char *logical_port, const char *ip_prefix, + const char *nexthop) +{ + struct route_entry *route_e; + uint32_t hash; + + hash = uuid_hash(&sb_db->header_.uuid); + hash = hash_string(logical_port, hash); + hash = hash_string(ip_prefix, hash); + HMAP_FOR_EACH_WITH_HASH (route_e, hmap_node, hash, route_map) { + if (!strcmp(route_e->nexthop, nexthop)) { + return route_e; + } + } + + route_e = route_alloc_entry(route_map, sb_db, + logical_port, ip_prefix, nexthop); + return route_e; +} + +static void +route_erase_entry(struct route_entry *route_e) +{ + free(route_e->logical_port); + free(route_e->ip_prefix); + free(route_e->nexthop); + free(route_e); +} + +static void +sb_sync_learned_routes(const struct sbrec_datapath_binding *datapath, + const struct hmap *learned_routes, + const struct sset *bound_ports, + struct ovsdb_idl_txn *ovnsb_idl_txn, + struct ovsdb_idl_index *sbrec_route_by_datapath) +{ + struct hmap sync_routes = HMAP_INITIALIZER(&sync_routes); + struct route_entry *route_e; + const struct sbrec_route *sb_route; + + struct sbrec_route *filter = + sbrec_route_index_init_row(sbrec_route_by_datapath); + sbrec_route_index_set_datapath(filter, datapath); + SBREC_ROUTE_FOR_EACH_EQUAL (sb_route, filter, sbrec_route_by_datapath) { + if (strcmp(sb_route->type, "receive")) { + continue; + } + /* If the port is not local we don't care about it. + * Some other ovn-controller will handle it. */ + if (!sset_contains(bound_ports, sb_route->logical_port)) { + continue; + } + route_e = route_alloc_entry(&sync_routes, + sb_route->datapath, + sb_route->logical_port, + sb_route->ip_prefix, + sb_route->nexthop); + route_e->stale = true; + route_e->sb_route = sb_route; + } + sbrec_route_index_destroy_row(filter); + + struct re_nl_received_route_node *learned_route; + HMAP_FOR_EACH (learned_route, hmap_node, learned_routes) { + char *ip_prefix = normalize_v46_prefix(&learned_route->addr, + learned_route->plen); + char *nexthop = normalize_v46(&learned_route->nexthop); + + const char *logical_port; + SSET_FOR_EACH (logical_port, bound_ports) { + route_e = route_lookup_or_add(&sync_routes, + datapath, + logical_port, ip_prefix, nexthop); + route_e->stale = false; + if (!route_e->sb_route) { + sb_route = sbrec_route_insert(ovnsb_idl_txn); + sbrec_route_set_datapath(sb_route, datapath); + sbrec_route_set_logical_port(sb_route, logical_port); + sbrec_route_set_ip_prefix(sb_route, ip_prefix); + sbrec_route_set_nexthop(sb_route, nexthop); + sbrec_route_set_type(sb_route, "receive"); + route_e->sb_route = sb_route; + } + } + free(ip_prefix); + free(nexthop); + } + + HMAP_FOR_EACH_POP (route_e, hmap_node, &sync_routes) { + if (route_e->stale) { + sbrec_route_delete(route_e->sb_route); + } + route_erase_entry(route_e); + } + hmap_destroy(&sync_routes); +} + void route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, struct route_exchange_ctx_out *r_ctx_out OVS_UNUSED) @@ -57,12 +190,21 @@ route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, "%"PRId64": %s.", vrf_name, ad->key, ovs_strerror(error)); - continue; + goto out; } sset_add(&_maintained_vrfs, vrf_name); } - re_nl_sync_routes(ad->key, &ad->routes); + re_nl_sync_routes(ad->key, &ad->routes, + &received_routes); + + sb_sync_learned_routes(ad->db, &received_routes, + &ad->bound_ports, + r_ctx_in->ovnsb_idl_txn, + r_ctx_in->sbrec_route_by_datapath); + +out: + re_nl_received_routes_destroy(&received_routes); } /* Remove VRFs previously maintained by us not found in the above loop. */ diff --git a/controller/route-exchange.h b/controller/route-exchange.h index 2c2a9ab84..d19e83403 100644 --- a/controller/route-exchange.h +++ b/controller/route-exchange.h @@ -18,6 +18,8 @@ #include struct route_exchange_ctx_in { + struct ovsdb_idl_txn *ovnsb_idl_txn; + struct ovsdb_idl_index *sbrec_route_by_datapath; /* Contains struct advertise_datapath_entry */ struct hmap *announce_routes; }; diff --git a/lib/ovn-util.c b/lib/ovn-util.c index 55a081ab1..5d0db1a5a 100644 --- a/lib/ovn-util.c +++ b/lib/ovn-util.c @@ -802,6 +802,16 @@ normalize_v46_prefix(const struct in6_addr *prefix, unsigned int plen) } } +char * +normalize_v46(const struct in6_addr *prefix) +{ + if (IN6_IS_ADDR_V4MAPPED(prefix)) { + return normalize_ipv4_prefix(in6_addr_get_mapped_ipv4(prefix), 32); + } else { + return normalize_ipv6_prefix(prefix, 128); + } +} + char * str_tolower(const char *orig) { diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 98cb8e69d..3ccd7d003 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -205,6 +205,7 @@ bool ip46_parse(const char *ip_str, struct in6_addr *ip); char *normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen); char *normalize_ipv6_prefix(const struct in6_addr *ipv6, unsigned int plen); char *normalize_v46_prefix(const struct in6_addr *prefix, unsigned int plen); +char *normalize_v46(const struct in6_addr *prefix); /* Returns a lowercase copy of orig. * Caller must free the returned string. From patchwork Mon Nov 4 11:04:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006183 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6; 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 4XhpZF0jklz1xyH for ; Mon, 4 Nov 2024 22:06:45 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id C4D1360DEF; Mon, 4 Nov 2024 11:06: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 WjLb0SLsjCTW; Mon, 4 Nov 2024 11:06:38 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org BA11460A94 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6 Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id BA11460A94; Mon, 4 Nov 2024 11:06:15 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 81966C08A3; Mon, 4 Nov 2024 11:06:15 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 112B1C08A6 for ; Mon, 4 Nov 2024 11:06:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id A2623810D5 for ; Mon, 4 Nov 2024 11:05:04 +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 PeCPxznhHsuE for ; Mon, 4 Nov 2024 11:04:58 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2608::60e; helo=eur02-db5-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 08810810C3 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 08810810C3 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=g8gsVlc6 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2060e.outbound.protection.outlook.com [IPv6:2a01:111:f403:2608::60e]) by smtp1.osuosl.org (Postfix) with ESMTPS id 08810810C3 for ; Mon, 4 Nov 2024 11:04:50 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=fXxT5EkttORc0RLnIYsAnzwPjSYzDIoWG3j9HlB9w5qdErBdA+Pr+/tZr2Sbf2DcgixN1+TDmZh28anbgxb665P0yOsTROL21ZKcJdjxN64Mqls2Kicyq9VITi5WGthmxicTet+atrtH3ZM0b+skBd2cU+Lqw+9dW/Er2dsQV828RtEMdpT84kOKBj70ZPl4jkZTjGg6ql6Sk3PEqdyaetLI+poBdmAk9ZJd9NKvrIgUzfLmwuGd5v9L2lziNFusV/futwzvJVPnM5hXJCtAaA4a7hlPIyHroNyaqUmidARPlJc6dNJZB7nip3hpqfYAw0ZE+JR1S2SNeEIDEsxnAQ== ARC-Message-Signature: i=2; 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=YzwthZ2URD5qjRFudtQbW0QnOiCjOJyM7RynUVYyySw=; b=n/clnT2/fnH87kmECcxKr2Gv1v3LtNhQd8n1cP+MouAkBRXoZRm0e4X9tXXyr/ZDRSASPceA8LIlIoQyeDgWq1WsVgptB1Hu5E2f/d+7gl8bpSM94qTr0LCrrggvp+YijJJwSOvgGUIdfqs17zI32zXSgne1Jsx4VoCvPnSstNZKlTZZiZeAa889JRBU0uBoI1dbYUJFpFjScybVZin92182aXbtHd8EJ1rtgcvAZodPu17KplrBUmvB3bIO1KM4yh+CstSXfRcVoRBW3z+NDjBhwtQ0KyZLIFVzM8ecPev3AyqbZJTVtNeaQp4AKTyQEhgWkaDWAxCgiAkZAuuiNg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YzwthZ2URD5qjRFudtQbW0QnOiCjOJyM7RynUVYyySw=; b=g8gsVlc6nsB/rVQM6z/mzKN9AmLld9KV1L865uKhEiD6B+Uv70iVrRKNvRZyiUUxE3bN63B0sLug+Qsq+7R1RlXRgBWUgn4n9I/O6tNdkiqqsRkBtTiQsOumJAn8G+Gx07xfM50o8OlmtGe/PzGg1ErY6kzaiI//UIGOOORyHqOAGaFHXg9T9+jEvl610vczaPcpvIj1kvtBDomBgWtq1bh5dQXws+oSkacEiec++qnafTCEkCLKyfhJKf8hYgQudX/ShiST3LGANsvd7RxXbV4Ry4rV25aJ2dI0LVaNgqjC+wa/TVk65/aCRDWh5TychETIo9+8m0SBWkuQ6iKUTg== Received: from DU7PR01CA0022.eurprd01.prod.exchangelabs.com (2603:10a6:10:50f::10) by GV1PR10MB8805.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:1cc::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:47 +0000 Received: from DU6PEPF0000A7E3.eurprd02.prod.outlook.com (2603:10a6:10:50f:cafe::30) by DU7PR01CA0022.outlook.office365.com (2603:10a6:10:50f::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.31 via Frontend Transport; Mon, 4 Nov 2024 11:04:47 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU6PEPF0000A7E3.mail.protection.outlook.com (10.167.8.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:46 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.111) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:47 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 3248924 X-ExclaimerImprintLatency: 1617932 X-ExclaimerImprintAction: ac7c73e0dba64cfd93f391534d34025f ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vKE2MpNsY7kPXwZqwGEXbnYOSNkAvVCF/TzWa52jGZizJ/NhAKzsa3Et01G0kEE5GBC+AoJZ7ESBHdeNBwwROlc7QqtNDVfR2JO27skmypiT2PKmNuADdhFzLjmF3ZtRC7096KM2SricB0KzLGFBI4xnb9KJ5wAjgLl5sLx4qMQY5P4DQj6YKwoXjK6m9+lh/rbAluFaPDiy1Vvu9gvFT/MMci4mD2WeLwH3gQy7vcmakMjkyCmH5yhhPl5SnbdNcxfpioHULZtlxDdIuAG5YNSwm2roe82fxGB7YU9wfHCxbZKysmw0ryyzon5Wq94w+4181ndyhM+sVPiIfyTxsA== 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=YzwthZ2URD5qjRFudtQbW0QnOiCjOJyM7RynUVYyySw=; b=Rh8OZthQYu7Gg/h6NYlZDMDpxKv2GMj3OAQtGByIHh15wV74a4qeHzwBEB1E5DCAVg33mkFW+EGHqpLNhmISXLyLsaopvCxzPmaYXWr35sstJYBW3Ka8oIwKG9nRO0z2LH/hPfaUW20p8NjMPG9OQ2dowgFQwHs6ypxrRMC5KcOKV7Vp+j4uOreCeClsY/IU5vMSoGhLwADosvpAU9f0wbXl4Okbt0u3HHYiT7qAtM6bzpo2KDwgjQL8zwxeJHR1otjAQerOom1oZ2GaPH4x8xE+gLOw7uzWZV20IdUKyZAYPk/USQedqM7OJ0qlohXj5MpnJRaveCfKVkpci9Rjgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YzwthZ2URD5qjRFudtQbW0QnOiCjOJyM7RynUVYyySw=; b=g8gsVlc6nsB/rVQM6z/mzKN9AmLld9KV1L865uKhEiD6B+Uv70iVrRKNvRZyiUUxE3bN63B0sLug+Qsq+7R1RlXRgBWUgn4n9I/O6tNdkiqqsRkBtTiQsOumJAn8G+Gx07xfM50o8OlmtGe/PzGg1ErY6kzaiI//UIGOOORyHqOAGaFHXg9T9+jEvl610vczaPcpvIj1kvtBDomBgWtq1bh5dQXws+oSkacEiec++qnafTCEkCLKyfhJKf8hYgQudX/ShiST3LGANsvd7RxXbV4Ry4rV25aJ2dI0LVaNgqjC+wa/TVk65/aCRDWh5TychETIo9+8m0SBWkuQ6iKUTg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:45 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:45 +0000 Date: Mon, 4 Nov 2024 12:04:43 +0100 To: dev@openvswitch.org Message-ID: <8c7a994a1de7c308a3acc1236f99c35536777f6d.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0117.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::8) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DU6PEPF0000A7E3:EE_|GV1PR10MB8805:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e359fa3-f1d1-45d4-db81-08dcfcc07ec7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: KO8viq1wrTgcJm8th/w6vqNEJRvOozrjNoFEzLhyJ2hV7TqXb/OhrFaHiHQiLG5h/rUZESskiiWct0gMhHAZjWHmfFroZssT0OEFqwcIGrTEhbYEQmC90xtcyyro1EgyoEZYVC/RchPYBbLHEZF3loGEEde0xQqWZFMfrFTljfpMbHUuXXRSgPjyuda3p3Uk9MgQlEsYnZ9YI9Rc+aocVnGrcYZJMgkJwqJYW+xgg0E0V7AgeFdCPTocl2rXF1S5rvHbbvMKPwyzvV50SNnHyRTHpVDhqFpZ1TPT/opUFBpkfb2aHjYx6C8UTHz4+JmiPUDmS5AnRT/hJECqW4Mp0N0pEGxwqQlyUdIRNthhukWjkCWXb4g0rxTn/SVg/ZblgkXMjMun38GX82B0Mh5rBVDwUFw6pInERry1qJBmg9uAJps0k1in9NZp2EXyI7dreQaKKtpOfdqD8bEZO3eDGRyal5miOJmJsV6zUKHmBpq3s02y5ZjHOpQ4aGoAVbIeOo29ZaPdSGNOimqI2/w7xYDgYlPzC7Iztfzt1q6qekwsz5vejBmrnTLNvYgXo5S0ScR4cukkM5U4ZVbX1aWpYU3sluGAKVeWpWk/wUgDPS85bLecyoBPjK+BMYo31e79/oEwsK018wf+yMaL2noKK2LnLcV5eO88unydE5jQnLynO+f3Q463gFVA0l51wL/rf3kYb8ehBuXi2eCvBpA8Baeddh2NLRo40OS33NLvz0//m0TaGtP0J/4SsRPrSLEq5t7hgJnmoAXNF9vHe869rbiMP5tyK0AyQP1bkiR+xvMiQTwNfaJcN4XgBacDIEPgawZlVvypwCmvXvky/fj57veWhOUaQgjSFZWfZSEZDHDDl3XQ+eZlf3SkzFw6YnqNj4JSYvEufC6hVhpna7b/guWYCq41xBB5NNh5B5reO3AO1mTNaQRlRYmF9O9vNuagrFqXV4SlcMb5goWliHCAWgIHRwcHfRMLw7uUOyZULy702LxCQgee78xHMqztZ9DqO290/Rv5AxxpyJlnY2br2+0FpHKz3b246Oo0XsVTzpnc32beFgc4rDlouliAkQBpIFLhP02a7Cyeqb18SegDHDtXDOjeIZp/EH2bDabJ6Pl5YBIbooICtusEhjhDc07qgFnPpLpSF9QC894AnqLPdGBkHcSbVaZjrB1U8n7UmOcQWi2+dxEWFxZVA/YYIylmjhm43xc7i1ld+zOwzafOpkz3l8jHXe9hn0P++rK0FDoOfKKoA8HexpF/7rnbDtIE7AuqS0/+qeoXh81SomQPB3gYfQhfV6Zm1P3UvWhz1bbWnuCyTe/1dpQXAkk6GJ4d X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF0000A7E3.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 8398a253-6ce9-413c-667e-08dcfcc07dca X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: aM+e/XP9F7gaQY3O1IXUbrpTsFYq/WLvqKrOaxstnKU8LWRLli67dPMxOayY5cArmZXCFLgqKXOLi2eH1bnrXPEv9tV2pCcf1SFpu/0D7a8V2L5HNNIxncXrfv1InhfjVQizyON33PIAkm4BxAiO4dwcVOcNNpeVVPue86nOump2iOndg+9OMUi9hzlAohioRFTN1OkaCqndNNF0yixDc5cg/35CiWCZqHtQ5k1ofsHSiX+qPsMND1ekIsgA0G66HgHkJWX6r9IOTrcYplhHGboLSNqjza9emkYnHfcWTIBHwebZqRLEnz2YNjfxkBFVk9yofAtBtxa4qaeeN/rhz0A1urregN37pJZT07eHYbZHt1D++6mGaAHL72RpMWkOiyshLfPiS9+hTQ/YLBpNgnX9ly8zYkzCLB1E4rc+yrbBYCROq+uz8Loft9h6zgMQX5Uuf/fv0n+9aBlUi9uvBDAndw3jLLTH6WXydNtU8/VOYipFoppCJdjXsMGsFrxJJb5+dRHG/WeAOHIGpuiP4f4WisKwhaNmJjhOzDDb2jaB3+kH7jY4EQV+T+TBmyFPWVUIjAS1+Ha3UwPrLBYSFd6Ns5OPVpOY8ea26d24i6TiTQNX3WynyBiNogzqE8xtJ5k9IaVlfSQdVlaNVZ8tPR86nTr4UUfKVp2z0btBJBCWD++cwxtZiAHUHDZ92ierlzkp7UkMca3p8JrsmCt3GjNSbFsC9M9mMf96grh9AUoARwH+jJFfUS9BtLHI0XEB1hkz8Zta6GiI77O83AJVIfgXwTpwtlaGj+yWBlurxwnb8RuWpSCuRfS9P8ek96DwKV6j2S7eBk8O0ANAyUUgUzqaMWIutcvJfg09pPP/wax5ceLeup/eHj3u48amXDYuajHUVXhJTuCEJSjZ6Vy35T2KvQPgqvE3AkAV8lJVOVcHsGpOH5xLtTHD0jXmZ8joakNWWF99xvTMuVLLZACpLpsqX2Bo0eYwmw1Anpq9bsrd8JjusmSIZJkHY8xxuADaRt6qrlPTDpFm8uTQHIG6t9SCv3YiVxFpWyrP+ZN8k2GWQ0Qp1edMwC1F3wI3wJ5uQ4ad5X2vZ75QoqAh9TWvYzjOM7lRLA7nmY9VlqScgPqmvnFnZyf9M1GswTRgzRszkax8gjH0BeoTd2ZNV2nFQDXBP4P0of3HEj6aIG3VineSmES82oLkK95+vQAgh+grcJ5Wv5Y9Y1MkD0SSyXw1P4czpEOfl7IfLWDZry7y5QCnKy6/+ea1JCag4ViOWk+obwFLxv7ais0EbK9pDpf/cs6dOSKMOOZiUoAaFhgN8qby8o5Pl7azAh3x+kRSe+8NhLNnYISZ66Ln+gu6NsB2eWBMKQZjzWExXjBp7Qne7TADh4ogziDFaBzpd150qx3FsXnvxR/CQZmyZbEF+sZdOg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:46.8684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0e359fa3-f1d1-45d4-db81-08dcfcc07ec7 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000A7E3.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR10MB8805 Subject: [ovs-dev] [PATCH ovn v2 24/32] controller: Prioritize host routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" northd allows us to announce host routes instead of connected routes of LRs. For the host routes we also know the LSP that host the address. We can then check if this LSP is pointing to a LRP that is also local to the current chassis, so if a LR is chained behind an LR and both use chassisredirect ports. In this case we can announce the route with a more preferable priority than otherwise. This helps in the following case: * the backend router is bound on only a single chassis * the frontend router is bound to multiple chassis (with multiple LRPs) * one of the chassis of the frontend router matches the backend router In this case it would be preferable if the network fabric sends the traffic to the chassis that hosts both the frontend and backend router. Other chassis would work as well, but then OVN would redirect the traffic from one chassis to the other. So this allows us to skip tunneling traffic in one case. Signed-off-by: Felix Huettner --- controller/route-exchange-netlink.c | 20 ++++++++++++-------- controller/route-exchange-netlink.h | 4 ++-- controller/route.c | 29 +++++++++++++++++++++++++++++ controller/route.h | 1 + 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index ee33d08d2..1d6e1a58e 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -102,7 +102,8 @@ re_nl_delete_vrf(const char *ifname) static int modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, - const struct in6_addr *dst, unsigned int plen) + const struct in6_addr *dst, unsigned int plen, + unsigned int priority) { uint32_t flags = NLM_F_REQUEST | NLM_F_ACK; bool is_ipv4 = IN6_IS_ADDR_V4MAPPED(dst); @@ -128,6 +129,7 @@ modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, rt->rtm_dst_len = plen; nl_msg_put_u32(&request, RTA_TABLE, table_id); + nl_msg_put_u32(&request, RTA_PRIORITY, priority); if (is_ipv4) { nl_msg_put_be32(&request, RTA_DST, in6_addr_get_mapped_ipv4(dst)); @@ -143,7 +145,7 @@ modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, int re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen) + unsigned int plen, unsigned int priority) { uint32_t flags = NLM_F_CREATE | NLM_F_EXCL; uint32_t type = RTM_NEWROUTE; @@ -155,12 +157,12 @@ re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, return EINVAL; } - return modify_route(type, flags, table_id, dst, plen); + return modify_route(type, flags, table_id, dst, plen, priority); } int re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen) + unsigned int plen, unsigned int priority) { if (!TABLE_ID_VALID(table_id)) { VLOG_WARN_RL(&rl, @@ -169,7 +171,7 @@ re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, return EINVAL; } - return modify_route(RTM_DELROUTE, 0, table_id, dst, plen); + return modify_route(RTM_DELROUTE, 0, table_id, dst, plen, priority); } static uint32_t @@ -228,13 +230,14 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) uint32_t arhash = advertise_route_hash(&rd->rta_dst, rd->plen); HMAP_FOR_EACH_WITH_HASH (ar, node, arhash, routes) { if (ipv6_addr_equals(&ar->addr, &rd->rta_dst) - && ar->plen == rd->plen) { + && ar->plen == rd->plen && ar->priority == rd->rta_priority) { ar->installed = true; return; } } + err = re_nl_delete_route(rd->rta_table_id, &rd->rta_dst, - rd->plen); + rd->plen, rd->rta_priority); if (err) { char addr_s[INET6_ADDRSTRLEN + 1]; VLOG_WARN_RL(&rl, "Delete route table_id=%"PRIu32" dst=%s plen=%d: %s", @@ -271,7 +274,8 @@ re_nl_sync_routes(uint32_t table_id, if (ar->installed) { continue; } - int err = re_nl_add_route(table_id, &ar->addr, ar->plen); + int err = re_nl_add_route(table_id, &ar->addr, ar->plen, + ar->priority); if (err) { char addr_s[INET6_ADDRSTRLEN + 1]; VLOG_WARN_RL(&rl, "Add route table_id=%"PRIu32" dst=%s " diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index 566b38fde..4c0f37a98 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -37,9 +37,9 @@ int re_nl_create_vrf(const char *ifname, uint32_t table_id); int re_nl_delete_vrf(const char *ifname); int re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen); + unsigned int plen, unsigned int priority); int re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen); + unsigned int plen, unsigned int priority); void re_nl_dump(uint32_t table_id); diff --git a/controller/route.c b/controller/route.c index 6aaabe576..3af7b8859 100644 --- a/controller/route.c +++ b/controller/route.c @@ -33,6 +33,9 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); * in the corresponding VRF interface name. */ #define MAX_TABLE_ID 1000000000 +#define PRIORITY_DEFAULT 1000 +#define PRIORITY_LOCAL_BOUND 100 + bool route_exchange_relevant_port(const struct sbrec_port_binding *pb) { @@ -66,6 +69,19 @@ find_local_crp(struct ovsdb_idl_index *sbrec_port_binding_by_name, return lport_lookup_by_name(sbrec_port_binding_by_name, crp); } +static const struct sbrec_port_binding* +find_local_crp_by_name(struct ovsdb_idl_index *sbrec_port_binding_by_name, + const struct sbrec_chassis *chassis, + const struct sset *active_tunnels, + const char *port_name) +{ + const struct sbrec_port_binding *pb = lport_lookup_by_name( + sbrec_port_binding_by_name, port_name); + + return find_local_crp(sbrec_port_binding_by_name, chassis, active_tunnels, + pb); +} + static void advertise_datapath_cleanup(struct advertise_datapath_entry *ad) { @@ -162,11 +178,24 @@ route_run(struct route_ctx_in *r_ctx_in, continue; } + unsigned int priority = PRIORITY_DEFAULT; + + if (route->tracked_port) { + if (find_local_crp_by_name( + r_ctx_in->sbrec_port_binding_by_name, + r_ctx_in->chassis, + r_ctx_in->active_tunnels, + route->tracked_port)) { + priority = PRIORITY_LOCAL_BOUND; + } + } + struct advertise_route_entry *ar = xzalloc(sizeof(*ar)); hmap_insert(&ad->routes, &ar->node, advertise_route_hash(&prefix, plen)); ar->addr = prefix; ar->plen = plen; + ar->priority = priority; } sbrec_route_index_destroy_row(route_filter); diff --git a/controller/route.h b/controller/route.h index ca309c7be..b5aab50cb 100644 --- a/controller/route.h +++ b/controller/route.h @@ -59,6 +59,7 @@ struct advertise_route_entry { struct hmap_node node; struct in6_addr addr; unsigned int plen; + unsigned int priority; /* used by the route-exchange module to determine if the route is * already installed */ bool installed; From patchwork Mon Nov 4 11:04:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006184 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tWakI3k/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tWakI3k/; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (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 4XhpZr4Ck4z1xwF for ; Mon, 4 Nov 2024 22:07:03 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id E093C40EE6; Mon, 4 Nov 2024 11:06:59 +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 zJrqDxssPP4h; Mon, 4 Nov 2024 11:06:56 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org DEDDB40F29 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tWakI3k/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tWakI3k/ Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id DEDDB40F29; Mon, 4 Nov 2024 11:06:40 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id A5778C08A8; Mon, 4 Nov 2024 11:06:40 +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 1B6A1C08AA for ; Mon, 4 Nov 2024 11:06:39 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 69A83405D1 for ; Mon, 4 Nov 2024 11:05:06 +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 MAWKZwrcnQCL for ; Mon, 4 Nov 2024 11:05:04 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::601; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 0249240966 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 0249240966 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20601.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::601]) by smtp2.osuosl.org (Postfix) with ESMTPS id 0249240966 for ; Mon, 4 Nov 2024 11:04:54 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=wVwP4QrsOQ0OHlX9A6LGyIJJgKNA7aKdn9MkokchfByGU7T4os8/72ioPX/cpmE19glTUto/u6MD8Nn7CU+n2VN1SauRBlCu92A6q+4grangNFRmEStkOFRNUTUtMuEB9oLMneC+zV7yc/qZaN2YgL+YmQSUnXSxISmiKLgKyjLy3jyu3jRkqSZCvf3mIpDx3B1dojH8sg3ImibkRFn4bZzXWF1amNQhZHxouH9OMo0zNwOcuWD/r5TRCCK7X6yx5VqKPrMnVPi7O3YZiJ5+4eY/8zFY/LlMNCMiy7+M3pJUmwGWxmLSnP3LokJQ9xt7EE+Vf22ZgFfncBED0GYCWQ== ARC-Message-Signature: i=2; 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=9etHSVvf6WInE/vKxvUFFfcO9SobKyEENdjYgBQjXw8=; b=Q6CcCxNOJsiQFD+fbFYb6Q/zgzTvMRk85LJQeFW/Xy2ZIGS4hKnoLc7sK0ez8NVut+1Yl5AlDYkypXHUDjDlcr3kFOs2SX5/ZkSsFGoCWZ+8XwDVvrlehNEzqNNOc9TdtpqjSGB3W5FbgcjUIGoiPDIIX0/1579Ow9QlzOrMLlNn7wwm+HkryddypTopdFmBq4uqV71M2QH9/bHRRtLS3PETrU4QRHnd60g1kPlxAiSjEecQXHE8DKSsAhHsJ5CJljwznXtmC1XAXr9vbtLYfBg26yI3UQrK/3g2pKqODDPCJ8IErxMS7pxTnpp4MpxhE5cI2Dze0OEQK+nb8r+Fhg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9etHSVvf6WInE/vKxvUFFfcO9SobKyEENdjYgBQjXw8=; b=tWakI3k/Fd11fEc1kA4gLO8N0MLeRmuFpwGp6AZc9wWZW9BObdz6n2sCFQ8Kh/iX850c/BYebyeWFgnkewuIS/d7AyDaD9mggxtiOZrwVBSHRUPDCGVj/hnMucqIo+ogtoGOXFutrR843A/ogOWZKTpCeBEClVMQfIwMohsoVFzDp35ub34daBQp8mcpNlmkq1jQ6sqCvjx0oE1yi+r7MtzXjWzKolyChxpTr4xDUNIUTBvtZwjSUxXcpzR6LW4VZUrrxDBYgMOS48fYUvbKYT4dUuth+f6jcDXovcFObQGDctpEr+V7tFgq++p5bxJVD4R9BmSbwUuDiSzGellAwg== Received: from AM0PR02CA0185.eurprd02.prod.outlook.com (2603:10a6:20b:28e::22) by GV1PR10MB6684.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:86::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:49 +0000 Received: from AM3PEPF00009B9F.eurprd04.prod.outlook.com (2603:10a6:20b:28e:cafe::d9) by AM0PR02CA0185.outlook.office365.com (2603:10a6:20b:28e::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.29 via Frontend Transport; Mon, 4 Nov 2024 11:04:49 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by AM3PEPF00009B9F.mail.protection.outlook.com (10.167.16.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:49 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.110) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:49 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5814931 X-ExclaimerImprintLatency: 2034487 X-ExclaimerImprintAction: 07bb9e304a074b2ea36e0bb0840cd7d4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HuIiDNGR8IxeSDAv2arQ5nagldYg6lwes8O/3hQks6xZH3+EDJHDCFRaw20EiG9w1fwdMVF/C6/qax35QVZW6CtsQvDvaoxzIW9z9XoXamu164hZ9jc2Ta4Y/0Ul6+SGl/oxzM4kW2a8VTYt/e6qkzN7tZ/2xWT5dL9u5dfGlJWbiMeaH/RINv5ZrTp0HyTc2qevArkf0p9tYU+HPn8DvuyzfrkDF0y+KtMwk8BPz3/hfJlgKW5CFcavLnUj0/quvCk1QPquK/nnz/TU0D+7EfUNbDsnDge0v9d4bnpooWiXZfDU+wwPcHxPMRLAKpcMdcfpc2eqZu3Jw9rP+/tsIw== 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=9etHSVvf6WInE/vKxvUFFfcO9SobKyEENdjYgBQjXw8=; b=viw5e1RbAJz2AEyo9u0JW+1sbZrb+7r6Q+g/l48Cn6gNNuOFSR5yoHpbbF7yFLw4d6ZR8d+OXwzs6SGhlYNfNA2H8RQxGLzA9NZtw57d2onoOiBIHiK3dWd6AMxf6Bl6fG74q/aLJzrzSMC8tGRtbVk0AKg++ZrgWcbYvCI84SiG9iEjktaCj4IEwIHVHXf8dZN2qH9YtyQclS8yypXmSJQNCh8i/tgvqW22tuYCXgnFqGqRoU2YWXIfkHyU5LZsAt/sXxShDpmb3BpUUbObLn+JPsvNCqH8jP5fIGhcVM0LxPyw9e5pQUsRYvZTSf1VxwRYqmdug2ZS4ITfnAII+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9etHSVvf6WInE/vKxvUFFfcO9SobKyEENdjYgBQjXw8=; b=tWakI3k/Fd11fEc1kA4gLO8N0MLeRmuFpwGp6AZc9wWZW9BObdz6n2sCFQ8Kh/iX850c/BYebyeWFgnkewuIS/d7AyDaD9mggxtiOZrwVBSHRUPDCGVj/hnMucqIo+ogtoGOXFutrR843A/ogOWZKTpCeBEClVMQfIwMohsoVFzDp35ub34daBQp8mcpNlmkq1jQ6sqCvjx0oE1yi+r7MtzXjWzKolyChxpTr4xDUNIUTBvtZwjSUxXcpzR6LW4VZUrrxDBYgMOS48fYUvbKYT4dUuth+f6jcDXovcFObQGDctpEr+V7tFgq++p5bxJVD4R9BmSbwUuDiSzGellAwg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:47 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:47 +0000 Date: Mon, 4 Nov 2024 12:04:45 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0120.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::18) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|AM3PEPF00009B9F:EE_|GV1PR10MB6684:EE_ X-MS-Office365-Filtering-Correlation-Id: 06424e84-5aba-45ac-ae61-08dcfcc08019 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: u56OSLT+kJxjphJEMMgcl+ilwOgJTg6p8e15jBXM6SzG5bl4QxUU/aAG6pXRtHZe3qU8hoOeUx8ylBk7z/a4sZOfZinAg/TF03WZgUxHx0COMcI7u6Y3IZz81GqHQBrbAGj9syW2j7vj/Z2vEPSUOIO+OB37azlJzujT+sJyCVGY+c5O2AluBeYFwkWIpjJ6PeAGbOVKXYcwZpLbwDT5ExDmyNVNMdnTBFXW6Xkf91ptfY2RleKQyUcFShhTv9Ii+xW24EcksIG8ljQz6Ywn8FPkRLolZW7ig/wU2PrqjN/hrWO10WcWRQ26jexbB0o2ypICZxpAlnsmL+K1TP8lPV4n0XbHjx3R8jXnZ+zmvkw+CUo8mLpl/uCkH+lJRE3BvVGTAp/ttla4de55EwTkXn7bIlNhSOwFZUFOnizqgWz9PbXAgclPcRpC/RHCs6+DlqaA5otcqzTWldX7s341fZbOQE6OccpZO9foQekK4a4Pt2dtk2IYUrt63W/kYS9tkyjxpvi8H82LQJvmomEZncVnCCW/TAR6ABxiR8J3lZo52b8Mj97WMSU3bOOz5+AG8t/iPGKrD8MquDkluQnaPL9jvz2VpDIlA8D+gBAgFMcLqzmMC21v8AC2Yvd31A8CnCDlHgGbimlTOa+OmlNA15wCpKPqFUxeGmf6e4+QGrYnUUh+/PqRm7FgtJ40wVKh8VTnUzzeTSYkUTbIC1YFRID0gaC9ayoqm2zo6OrycMVmankYwHsiXjGUMtcL7tp+qBnvx4Tke2KfOdgEFtJN6ux36IWrEty61I0exDRZ/3rYbwc1xC4V2bppzySRXEyd/248DJE22gXgn1ITJ7GS1HojKyCAgYwXusXYMcPpc3u1cg0CxPDUs2srBfFIX1MGHocIJJRGdfs0908zN9ySm0xE+hi2sFymh8AClS3Uj7aOChQ9G2QYEIMevu58xCJTIQsay+zpPPZEcTFv7OJGoAzboS1T6TY2n+Cokil2ljelqrRhYw5rmU3AZQnVB7u9P0fcQrURYcFLbL5R0YbbLAxEiRf+pNNMDoiyO9GuGs5/mqq1nX8FkpQhVL3z/qTrH9mr/S6HNHjntBoIN4AxQ8QWi6UNIrp/jnuPxz/wBv0CtoxSsXVJgL5XZMOAiUR0z7MylbwLPSWLJqY4mHwFSy5el2GWSp4gtoZxLj7d/GJgaRfrON4sA2SIVZUoFYMb2CAAPRkYE/fIclTKjJNQQDKTszWIwrPMHKwhf/boy34PxxWW586ynrOjjRQ0QIetefjoNr+9l1HUqT2mj7/TDZiDs6cE/6CWqwmvTEo/nBMC5xe73/fIWcdHH39Txa2Y X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF00009B9F.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a374e4c6-649e-4ce3-dfc7-08dcfcc07ef7 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|82310400026|36860700013|376014|35042699022|1800799024; X-Microsoft-Antispam-Message-Info: H+9RI5MaK01tt0E/Tu/KPUExwyB9yynf0pJOPcm5a7aO4H85iTu1FjBncdE8Ty7aIsse0fBJC5NPQvgp8hKWg2+RhFdPlEIMcMetdsUG8rZD08tSFj5ktYkeApW3JnKTWVX+YT6jjQFVBFOwMO0FTrPWZd6SCDoydD/vEGQOxqe5jIppDcsDnhsKDJw83GJBOaklaTbPMASoGB6lEvgDtcOJdxoF3VzSQxZ4ekSpKmx3swLaN51leVQVXlg1qSfYU4ejcFz0OMie3TyNRZQDtFFjoD8TFKbzvNR8cnHzU+SkSFnAjQQ8lq358DNATYybrYcj33WHoly5ofkWis2RZmbjdMXB7RWxaMCmrXpan7PYrpNTuTM8qa+3BKf5dvumBKMeWmn8t+HojMapx8u1NYvqrlyDT1iQ3vo9LDGkEYI1jiIxh1Mk4H5RvliW+zG9UgUZPZ4s232+C9amch6UYHhoSe52ngJb1BFWvd3mou+L301j3vhZCDciD+RZHSaOQmWogHF5ruZPtyvQ55S6WJB6Yr9aCqE1hcUEWDu4OWk5B6bfS3WAseUwLX0DGSRu3vmMQsgjH5v6EKlqL4/nuGc6vcwma3iUHkCOxTaMyy4nlvmtpdi8xe959UpOXYi8NM9UFKMy4Ziy9itutVZa/n+ja4Rx2qh5xdJWe2X2LpjMizoP3CJORXnNzUXhvqtN0zLKVPTFzj8t+8qxPbsWaf4XQ2N9Lp4EssYAQn8+gUBoDIuUzSY9EAw/mz4criduGaXTvEDhBTpNlLfeJxK2Jqx0GznTLBNJd3bCBOHIz/BcdRrcQIH5g/PuGD4YbkDDVrBIummvBy1aArQ95LEGRhmaVRBtD8GciOaYFlpPzoPA+rBaU1szEdlCGrLTOnnkhW2WXA4mdeSqURoJtYe1bqs2wQjIO3JWKNQD7ttRZekGQRcWxk6KyHtZzbyoJyXqZPQs3+lnv/bZLhGpHk4RP8CgPXy20xMAigpnuNcthUHsXCruOHsvopnXcXScYDEDd5/FL9y5aSBv3XD4hEEUIrJC1E5ahiUtSDoxxFsNTkbTlu3u+mkNiujZUe030PFtc/0pobEe/HTQ9pN1YnIS0oOFOK6Osf5aeUVXPM43EXrXlMGJ8bosPWUbfEHx6hsXWIx1WLFdkvPWqI4XiuR7vfZ2kLkFY41AV1uz7d7J9FvGmms+I0wglLCrPiybUm1rmjUEgd72o+zpp/ZaCa6CMRSHzJ2do1neByAYJtlBaQdbhKr6eCv92drdaZlZWAgyHNisRcKVQNG4lraRwgClWnjV/ZtF+yY3AUJJ9NFMjxrEntPQ11zwuRXbWgs39WvezGdwTEW9pJBUCssInuywZ61XCXZSguOgZ0qznKwf8j4ZZWjvNxR6Y3uRoYI9jmfZPL31TePDwiakcZmc2rqjAg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(82310400026)(36860700013)(376014)(35042699022)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:49.0042 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 06424e84-5aba-45ac-ae61-08dcfcc08019 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF00009B9F.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR10MB6684 Subject: [ovs-dev] [PATCH ovn v2 25/32] controller: Allow network namespaces for routes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" instead of using VRFs to announce routes we can now also use network namespaces. This can be usefull if the network namespaces is used to also run the routing protocol agent (e.g. frr). The network namespace could then also have a vif port based on the routing-protocol-redirect feature. Signed-off-by: Felix Huettner --- controller/route-exchange-netlink.c | 43 +++++++++++++++++++---------- controller/route-exchange-netlink.h | 14 ++++++---- controller/route-exchange.c | 4 +-- northd/northd.c | 3 ++ 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index 1d6e1a58e..f2d72c3a7 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -38,7 +38,6 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); #define TABLE_ID_VALID(table_id) (table_id != RT_TABLE_UNSPEC && \ table_id != RT_TABLE_COMPAT && \ table_id != RT_TABLE_DEFAULT && \ - table_id != RT_TABLE_MAIN && \ table_id != RT_TABLE_LOCAL && \ table_id != RT_TABLE_MAX) @@ -101,8 +100,8 @@ re_nl_delete_vrf(const char *ifname) } static int -modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, - const struct in6_addr *dst, unsigned int plen, +modify_route(const char *netns, uint32_t type, uint32_t flags_arg, + uint32_t table_id, const struct in6_addr *dst, unsigned int plen, unsigned int priority) { uint32_t flags = NLM_F_REQUEST | NLM_F_ACK; @@ -137,15 +136,16 @@ modify_route(uint32_t type, uint32_t flags_arg, uint32_t table_id, nl_msg_put_in6_addr(&request, RTA_DST, dst); } - err = nl_transact(NULL, NETLINK_ROUTE, &request, NULL); + err = nl_transact(netns, NETLINK_ROUTE, &request, NULL); ofpbuf_uninit(&request); return err; } int -re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen, unsigned int priority) +re_nl_add_route(const char *netns, uint32_t table_id, + const struct in6_addr *dst, unsigned int plen, + unsigned int priority) { uint32_t flags = NLM_F_CREATE | NLM_F_EXCL; uint32_t type = RTM_NEWROUTE; @@ -157,12 +157,13 @@ re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, return EINVAL; } - return modify_route(type, flags, table_id, dst, plen, priority); + return modify_route(netns, type, flags, table_id, dst, plen, priority); } int -re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen, unsigned int priority) +re_nl_delete_route(const char * netns, uint32_t table_id, + const struct in6_addr *dst, unsigned int plen, + unsigned int priority) { if (!TABLE_ID_VALID(table_id)) { VLOG_WARN_RL(&rl, @@ -171,7 +172,7 @@ re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, return EINVAL; } - return modify_route(RTM_DELROUTE, 0, table_id, dst, plen, priority); + return modify_route(netns, RTM_DELROUTE, 0, table_id, dst, plen, priority); } static uint32_t @@ -195,6 +196,7 @@ re_nl_received_routes_destroy(struct hmap *host_routes) struct route_msg_handle_data { const struct hmap *routes; struct hmap *learned_routes; + const char *netns; }; static void @@ -236,7 +238,8 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) } } - err = re_nl_delete_route(rd->rta_table_id, &rd->rta_dst, + err = re_nl_delete_route(handle_data->netns, + rd->rta_table_id, &rd->rta_dst, rd->plen, rd->rta_priority); if (err) { char addr_s[INET6_ADDRSTRLEN + 1]; @@ -251,8 +254,16 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) void re_nl_sync_routes(uint32_t table_id, - const struct hmap *routes, struct hmap *learned_routes) + const struct hmap *routes, struct hmap *learned_routes, + bool use_netns) { + + char * netns = NULL; + if (use_netns) { + netns = xasprintf("ovnns%d", table_id); + table_id = RT_TABLE_MAIN; + } + struct advertise_route_entry *ar; HMAP_FOR_EACH (ar, node, routes) { ar->installed = false; @@ -264,8 +275,9 @@ re_nl_sync_routes(uint32_t table_id, struct route_msg_handle_data data = { .routes = routes, .learned_routes = learned_routes, + .netns = netns, }; - route_table_dump_one_table(NULL, table_id, handle_route_msg_delete_routes, + route_table_dump_one_table(netns, table_id, handle_route_msg_delete_routes, &data); /* Add any remaining routes in the host_routes hmap to the system routing @@ -274,8 +286,8 @@ re_nl_sync_routes(uint32_t table_id, if (ar->installed) { continue; } - int err = re_nl_add_route(table_id, &ar->addr, ar->plen, - ar->priority); + int err = re_nl_add_route(netns, table_id, &ar->addr, + ar->plen, ar->priority); if (err) { char addr_s[INET6_ADDRSTRLEN + 1]; VLOG_WARN_RL(&rl, "Add route table_id=%"PRIu32" dst=%s " @@ -287,4 +299,5 @@ re_nl_sync_routes(uint32_t table_id, ovs_strerror(err)); } } + free(netns); } diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index 4c0f37a98..11f989cf6 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -15,6 +15,7 @@ #ifndef ROUTE_EXCHANGE_NETLINK_H #define ROUTE_EXCHANGE_NETLINK_H 1 +#include #include #include "openvswitch/hmap.h" #include @@ -36,16 +37,19 @@ struct re_nl_received_route_node { int re_nl_create_vrf(const char *ifname, uint32_t table_id); int re_nl_delete_vrf(const char *ifname); -int re_nl_add_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen, unsigned int priority); -int re_nl_delete_route(uint32_t table_id, const struct in6_addr *dst, - unsigned int plen, unsigned int priority); +int re_nl_add_route(const char *netns, uint32_t table_id, + const struct in6_addr *dst, unsigned int plen, + unsigned int priority); +int re_nl_delete_route(const char *netns, uint32_t table_id, + const struct in6_addr *dst, unsigned int plen, + unsigned int priority); void re_nl_dump(uint32_t table_id); void re_nl_received_routes_destroy(struct hmap *); void re_nl_sync_routes(uint32_t table_id, const struct hmap *host_routes, - struct hmap *learned_routes); + struct hmap *learned_routes, + bool use_netns); #endif /* route-exchange-netlink.h */ diff --git a/controller/route-exchange.c b/controller/route-exchange.c index 41fea6398..a5a5afee5 100644 --- a/controller/route-exchange.c +++ b/controller/route-exchange.c @@ -195,8 +195,8 @@ route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, sset_add(&_maintained_vrfs, vrf_name); } - re_nl_sync_routes(ad->key, &ad->routes, - &received_routes); + re_nl_sync_routes(ad->key, + &ad->routes, &received_routes, ad->use_netns); sb_sync_learned_routes(ad->db, &received_routes, &ad->bound_ports, diff --git a/northd/northd.c b/northd/northd.c index 46e209fa4..69d86f1c7 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -4118,6 +4118,9 @@ sync_pb_for_lrp(struct ovn_port *op, if (smap_get_bool(&op->nbrp->options, "maintain-vrf", false)) { smap_add(&new, "maintain-vrf", "true"); } + if (smap_get_bool(&op->nbrp->options, "use-netns", false)) { + smap_add(&new, "use-netns", "true"); + } if (smap_get_bool(&op->od->nbr->options, "dynamic-routing", false)) { smap_add(&new, "dynamic-routing", "true"); } From patchwork Mon Nov 4 11:04:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006188 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS; 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 4Xhpb30YqFz1xwF for ; Mon, 4 Nov 2024 22:07:26 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id E354E60FEF; Mon, 4 Nov 2024 11:07:16 +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 SDxxbsLlVxFI; Mon, 4 Nov 2024 11:07:13 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org DFA4760C2C Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id DFA4760C2C; Mon, 4 Nov 2024 11:06:48 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8A54FC08A6; Mon, 4 Nov 2024 11:06:48 +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 26932C08A9 for ; Mon, 4 Nov 2024 11:06:47 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 397674064A for ; Mon, 4 Nov 2024 11:05:08 +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 HJcVM68dx6q5 for ; Mon, 4 Nov 2024 11:05:05 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2608::627; helo=eur02-db5-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org F1335409E5 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org F1335409E5 Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=FW4XhEOS Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on20627.outbound.protection.outlook.com [IPv6:2a01:111:f403:2608::627]) by smtp2.osuosl.org (Postfix) with ESMTPS id F1335409E5 for ; Mon, 4 Nov 2024 11:04:56 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=Aj1k4jxJtxpYoc/5vuLkQjQWrmzI9J+P58WR7U6YVLhnbOb4dyrWytQGPzWz5qKWTP1bqXBIUsj8caaH4/DKqpuEbDHI6G+TNbP16Lo4qDTcFVY9NQBitq7jxniiQYtsraOSqSAmry+bltA2rdANpdDVFywMQD4FHkEIt0x6/ef6u/i62tBmbcYohh0FXW8vhQks082pC+XRG299fehOsb9buVwRi7cmL7YiaqCd3fZxQSnSwV6+3Udjcz7Y98Ywx2HgDoMMq86rr2Jjt7FbpSV0ff/hjv5jXOltYpr6ehN0N/LgNUvcYhKZBFpZ7IkDW1XVMmZVVTbrqeRTCSvmKw== ARC-Message-Signature: i=2; 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=wa6i4vCev+D8pKQ9/2F8jKdBXaibzodbS8j8e9pGnUw=; b=rJjU6NUNgRksXvs4HoaaI7vJwVZGgMJhpjUbptjMbD9slidEVuVoIH3Ld+dyJZ6ZqMc6KpcnjfmnotW9tzP7Xbdzg/41uiP3aN4FVJMIZnZ/1bx+qo3phrZKjX2CBf3HaIZuCeAFlKEGZ46cRMBpAhkQOLFjhi1Y493oz0X5YvRdeKHjYzTK0LSZlXzVip/kUqreIJrYJgLYh6mHn2XC21SOTwvJPQlqvHKwnQcLE+BN1h68gD3+CtmajCW2g9qGWM775w5urIkFmrloYxiAsn9HIU4uQajgPfY6KcTlBUOl+mBbLau8e+JY7lo5Ge3ajLqidYBVqjwrQCW6xzRyVg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wa6i4vCev+D8pKQ9/2F8jKdBXaibzodbS8j8e9pGnUw=; b=FW4XhEOSUHEaWD6JlMc4OUr8dQZXVZErUPi/134eLUYNerARg82DfbcAdC2qj1O/UVTVSxVxI0Zf3UBkXqCQd6JK8AOROte41eHgZ2aeG6dCfM9RF6dofmTwmNDMtwIdL/QJy3hu1JSgqczrj/kIt8a7hBa4bAj5w+1SUTZ3ylCEjS2mCH60YiijbabrwRbHiqAPkA7R76kbaKSiguypM7YaxFmR4a532CxbNW0XMe0DubwOFugUDcCjY8yzJ7PRHO3q4uadXSDw1QoGiJsTzmO+DKBZw/ewHj+wvMsdmBxSuvs26VhkdSG6K+4c1WjKkQSVkUm9SW/rSGgEd4Ynow== Received: from DU7P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:10:551::7) by DU0PR10MB7167.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:44d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.14; Mon, 4 Nov 2024 11:04:51 +0000 Received: from DB5PEPF00014B89.eurprd02.prod.outlook.com (2603:10a6:10:551:cafe::fb) by DU7P251CA0006.outlook.office365.com (2603:10a6:10:551::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:51 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB5PEPF00014B89.mail.protection.outlook.com (10.167.8.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:51 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.112) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:51 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4834594 X-ExclaimerImprintLatency: 1694577 X-ExclaimerImprintAction: 403f093032c9432ca8a87a6e0d762954 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f3oLvyZaz6yDmUwKAPAoJuRea6FM34qOuUPQI3KKqozFjaPJ/ozDaalTENt0fgiukKKuuHQCvULKeaADctcZD4eBmpMFe0CoMVKYshZOOQPUzQpKbDnsO63C6r3tawzsvO8p0TFLXyhmS67uqvllWotcEYmqnahwipdDnmRDztv10ukTVQbnIhzoC+XtRV9Hl2fVnjwGIQUfnAaWWE5gDCoyYT+FXkbEcaKLJS/Lq4qYsT1hDP7d2mH4tLQ4c/BVu8BzCa3OwOxO64ft2CxHTCZaWlg0EZ6Ly2QsCl3zrZvnfwWw9kYiocWG9/MQaPStSDdlJY5b10lDM9o7OJmR9Q== 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=wa6i4vCev+D8pKQ9/2F8jKdBXaibzodbS8j8e9pGnUw=; b=n5CfTmy9K85bGEelM6E5liyYGIqBie651sFY25sGZ+wZmcdsSlbWTC6zn0KRaEItMV2NC7NiDV9020ve0geLWTCPE4HLxxhCzOLHaJtmVd4CUoe4v8Qf1XQZxNoJg0WSFt4IOXkrQnFRbbBHKyN1OW0tUv3mjAWZzk/puCfhdm0LDYXByPC1JW8XKBADWzFxKt4wXwsyzg9Xk3JrCdXmU2fe40CQl6SU5RxE5XsVkABoKE6n+1b8F2z9VP7Ni+xlMOlZptvT2i6aAcSpERN0sRFg16wp096ySGGlCTWbdeujwAjuxTW5CrCzL/93uvr9nFUVc3CB+Xl/+2BlKdS5rA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wa6i4vCev+D8pKQ9/2F8jKdBXaibzodbS8j8e9pGnUw=; b=FW4XhEOSUHEaWD6JlMc4OUr8dQZXVZErUPi/134eLUYNerARg82DfbcAdC2qj1O/UVTVSxVxI0Zf3UBkXqCQd6JK8AOROte41eHgZ2aeG6dCfM9RF6dofmTwmNDMtwIdL/QJy3hu1JSgqczrj/kIt8a7hBa4bAj5w+1SUTZ3ylCEjS2mCH60YiijbabrwRbHiqAPkA7R76kbaKSiguypM7YaxFmR4a532CxbNW0XMe0DubwOFugUDcCjY8yzJ7PRHO3q4uadXSDw1QoGiJsTzmO+DKBZw/ewHj+wvMsdmBxSuvs26VhkdSG6K+4c1WjKkQSVkUm9SW/rSGgEd4Ynow== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:49 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:49 +0000 Date: Mon, 4 Nov 2024 12:04:47 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0118.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::13) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DB5PEPF00014B89:EE_|DU0PR10MB7167:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f3bebf7-0da3-49e6-696c-08dcfcc0814f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: P4R/3de8RSB9DTuTfLRelI2Mgl9DWLSUw1+PVsgoFPcygdfEjQN2r0V5OdNtoNMlLn+IUHTiRqEVlVMgsrSKr8TA9Ih2p6sMUjzHHd3MhiGZSjxlJ+Qh26wvcXb6+wHHeqE2cM6qfWFbsCeJiP/7m7lrxQrOgVgLIE5qo4OIiofzwOIvGhpwfO+AlwvrOC4X2xbD/OpKd/xf8yMfvkNJAiGCaSMXqb52fKMlkLt8tI6b1ch89354Sz9qzxu4c7oETdZl7e3qZ1oHKzBLOLAdn9WSYsW6mPZ+kvIyTd1qY+brD6JZg0jVyEB3/mtuh4xsay3z28lLdhp6zKPbeBQ2qrEnsS6Kn/dYBLCbVeTab0+CE3rz9OF+2PepD215ecuZ2mAY/FRd525XgSz/Q9wCFMELKyvRu6bQpH1MjEWietuW4kZ7dW1ZIu/7usfS3p+H4SspQ8QgQoIeYCHjOZ2KHvTX0BvatMf48MW3Q675RRQjin4R5dXlpJX2kxpW559qhyjxtWzN6ZIFvnk0D3CWkAASd5vy8IR7DvfCfAqJz9JsLm5mRHIff3aRRK3hh5Ju3RTVfeLSAzz/r7+/3cti3CQ8c3Xd2cwz8yBLlC5T+u8vzACFAqtGplPnQ5ykjBlhmt5slv4aM2Nik7hbg4diWLEmdd3VDMT1JT8OIKf+BcsBZEaEHMZ9N/fpw2rXbdTZ8ie2LN8/F487bvZ2gPRdcwuvcJM5xQKXToHymX5jg1WzPqW7HpPUenwnbHDQBgRrKzbwRlIS5LfBIst6bEmmpFlUJuPZSjDm9BIrzCsPghA0zKevkinjUW6qzpYA66171gKhN/tFLkWS3unNO/XZLCU+rSwy33bDZYU6n81TPOIj44cB2KAN56SWc+lPQYG7+pfCKhOvHxQqEToQNpNJ+WU7o/WFAGNMSsrk7G1ns2CkTFnSUOVAN/+LsbgEnyGSL2phc3lkC+Dr6RpuvM89/F+8AtXENJ53STo9dbB0kDblqR1e2F48v0UlqzXDTlc9FcU2s6MdpidAjdzbWTCMeOUz8BZpQg0Dk+0mtqJd5vcpE80EJUQpRp8e+bl7u2V9WxhAQW1P6NrxWatNZ1uX3jXFNmLj40su+sv93q7/SozBtYOXHz8StIrqFiTpq+SKBdywhO8GAJBuiFhmD39djer8Pnacyw/Vrcvd05IEHB2IIYR5WjiAA2JunuvFfFwUC/VqUixg0Odu8HEi+j22M8qcQia9JXhrGFZsW7HOvketGjaQOscTWfKNjQjPfivasoJ2z2pYT9x0Vup4NJIFqRpALuS+AH2h7A7ZkmX6vwdh5kdce6MLFCkwchH5wPak X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B89.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: e2ebaa8f-6db6-46b7-3fb8-08dcfcc08024 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: yv3X7mBZPMGZTIWm5Yk8nrb36QVbvIU7UVogcYSYu/soaOkYT23fejMCZkaOq6hOeh9xcE6ntt6p8HoxkQmj4wk8qRkVlh8txOaDiz6Wv8nnH7lOsBzMl9FnPnLEF+E8RiBq0lUcpRqrEH0d3vOEOhrtbPjlXbLVCs0yzn/xIFZ2BzIcRP97KrceYpFQIoQoVOyzFAR4ClzZCcxVXuC0fekO6dXJxRFHu6FtyoxnYbFi2iUZ9psEUx6rqlTEZgYMBuIWwP9RElaTFRCyvKdhxlm9RBlbQuk6lBBWGUA8p5gmZ6n0PtkRFPJVfJQalQhqRU5iLBgs+r3P85x9C9krYXZWGZWIgD4SC7UKZ4vNzfnF/TJH3hquvFLdVaxuqRGWXT1PQWJvb/fTbXRiAbZ2rbNmdoXMM/kA17FqnM+Pe46hFMaWRpSX95MOZSUbNQdfuU0Ey2909J33aWga7osvIZEIJadEU0nW3D/sF/kxiYG15XbnjZgti113Ibb0dUS/kn4ffeA7hnbyBwYvnrLv7GGv/yx1GRmM9rwGsYnz1JI6NRgQJ7FRmp7pLcExSLrztDBBFXOqQVcKgQw+jillqp3zdaNSipCqVMMbo4okGfArOPcyN//L2MnAs61+SQKdXWnrEqhrhFE8Y9aLIhYAYQmqS8qXOusoUVRoTkAKdU2/0vUlaVaJYoop3xo3LYLXkKMmfpsdC0cLCMN/jGBMupyEk0iBpSWn6FO1Cg7W3LIj1ndDXOlryQpxOKZNf8JICrAff4W7NBNtmRdLDQfJXo794d0VeN4OGKPOEwhIA5a4gkwLVe+oIuD15qo2XttpJzfWDV9bi2gmOS6Yb6yxxg2kycf4y0VhjU/JeHMf6ieoMJChMFQYOQA3nVHUoW6mmJgtPlMJI51lV17OhVtBbpR6azxfoCFpLiOordr+10WMJor5il6ivGDYXVq/qdU0Ca8Zxwmqa/rjaVxyiJCkQTc+ILH21nuzMnPfNDt8bVIgSivN2VLLR7c7aPnjpqfPfz/xaoQzSuzSxCqfxnmlDVoYR7M4WzNA4p70QYzMPKFqx7DMsd8VX01pTjH6yMlI+gFdjt0+d3Hkn52h4HwGSamtrqx+syYQLG+zd4MT86MHtpK1hckuvYIxejCOuMhdQG9kWlW/pzleUsBX6yYhQry//YKucW1EllPTnhPFoYer/BKpwQWMya6YXxYpa3r55E+vwlve3xkX3ZNIRFEKYXtTsxRbpskYxZ61ctXvU/ON/U1Z17QjZOWgbDjUKI7K+Wjcr76Htd8RVqF/u+F+iGOByzOtOsSL0finc+DiIG/YfkrDlkGrUMUeCACnZYcbRM4IKEA5I/tIVWIOMP2AKvzdRQOAooe1IC75S2atvKYCQgz1K9/wM9ha8jUeHUziEer7C68C1LmYCogPT8vldg== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:51.0965 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6f3bebf7-0da3-49e6-696c-08dcfcc0814f X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B89.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR10MB7167 Subject: [ovs-dev] [PATCH ovn v2 26/32] controller: Watch for route changes. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" for each vrf/network namespace we use we open a netlink watcher. This allows us to reconcile on changed route entries from outside routing agents. Signed-off-by: Felix Huettner --- controller/automake.mk | 7 +- controller/ovn-controller.c | 48 +++++++++ controller/route-exchange-netlink.c | 8 +- controller/route-exchange-netlink.h | 2 + controller/route-exchange-stub.c | 6 -- controller/route-exchange.c | 9 +- controller/route-exchange.h | 3 + controller/route-table-notify-stub.c | 37 +++++++ controller/route-table-notify.c | 154 +++++++++++++++++++++++++++ controller/route-table-notify.h | 43 ++++++++ 10 files changed, 307 insertions(+), 10 deletions(-) create mode 100644 controller/route-table-notify-stub.c create mode 100644 controller/route-table-notify.c create mode 100644 controller/route-table-notify.h diff --git a/controller/automake.mk b/controller/automake.mk index b1bb23e78..6d3bd9b59 100644 --- a/controller/automake.mk +++ b/controller/automake.mk @@ -51,6 +51,7 @@ controller_ovn_controller_SOURCES = \ controller/ct-zone.h \ controller/ct-zone.c \ controller/route-exchange.h \ + controller/route-table-notify.h \ controller/route.h \ controller/route.c @@ -58,10 +59,12 @@ if HAVE_NETLINK controller_ovn_controller_SOURCES += \ controller/route-exchange-netlink.h \ controller/route-exchange-netlink.c \ - controller/route-exchange.c + controller/route-exchange.c \ + controller/route-table-notify.c else controller_ovn_controller_SOURCES += \ - controller/route-exchange-stub.c + controller/route-exchange-stub.c \ + controller/route-table-notify-stub.c endif controller_ovn_controller_LDADD = lib/libovn.la $(OVS_LIBDIR)/libopenvswitch.la diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index cd14db8de..3091128c7 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -89,6 +89,7 @@ #include "ct-zone.h" #include "route.h" #include "route-exchange.h" +#include "route-table-notify.h" VLOG_DEFINE_THIS_MODULE(main); @@ -4968,9 +4969,13 @@ en_route_exchange_run(struct engine_node *node, void *data OVS_UNUSED) struct route_exchange_ctx_out r_ctx_out = { }; + hmap_init(&r_ctx_out.route_table_watches); route_exchange_run(&r_ctx_in, &r_ctx_out); + route_table_notify_update_watches(&r_ctx_out.route_table_watches); + hmap_destroy(&r_ctx_out.route_table_watches); + engine_set_node_state(node, EN_UPDATED); } @@ -4986,6 +4991,38 @@ static void en_route_exchange_cleanup(void *data OVS_UNUSED) {} +struct ed_type_route_table_notify { + /* For incremental processing this could be tracked per datapath in + * the future. */ + bool changed; +}; + +static void +en_route_table_notify_run(struct engine_node *node, void *data) +{ + struct ed_type_route_table_notify *rtn = data; + if (rtn->changed) { + engine_set_node_state(node, EN_UPDATED); + } else { + engine_set_node_state(node, EN_UNCHANGED); + } + rtn->changed = false; +} + + +static void * +en_route_table_notify_init(struct engine_node *node OVS_UNUSED, + struct engine_arg *arg OVS_UNUSED) +{ + struct ed_type_route_table_notify *rtn = xzalloc(sizeof(*rtn)); + rtn->changed = true; + return rtn; +} + +static void +en_route_table_notify_cleanup(void *data OVS_UNUSED) +{} + /* Returns false if the northd internal version stored in SB_Global * and ovn-controller internal version don't match. */ @@ -5280,6 +5317,7 @@ main(int argc, char *argv[]) ENGINE_NODE(mac_cache, "mac_cache"); ENGINE_NODE(bfd_chassis, "bfd_chassis"); ENGINE_NODE_WITH_CLEAR_TRACK_DATA(route, "route"); + ENGINE_NODE(route_table_notify, "route_table_notify"); ENGINE_NODE(route_exchange, "route_exchange"); #define SB_NODE(NAME, NAME_STR) ENGINE_NODE_SB(NAME, NAME_STR); @@ -5312,6 +5350,7 @@ main(int argc, char *argv[]) engine_add_input(&en_route, &en_sb_route, engine_noop_handler); engine_add_input(&en_route_exchange, &en_route, NULL); + engine_add_input(&en_route_exchange, &en_route_table_notify, NULL); engine_add_input(&en_route_exchange, &en_sb_route, engine_noop_handler); @@ -5816,6 +5855,14 @@ main(int argc, char *argv[]) &transport_zones, bridge_table); + if (route_table_notify_run()) { + struct ed_type_route_table_notify *rtn = + engine_get_internal_data(&en_route_table_notify); + if (rtn) { + rtn->changed = true; + } + } + stopwatch_start(CONTROLLER_LOOP_STOPWATCH_NAME, time_msec()); if (ovnsb_idl_txn) { @@ -6092,6 +6139,7 @@ main(int argc, char *argv[]) } binding_wait(); + route_table_notify_wait(); } unixctl_server_run(unixctl); diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index f2d72c3a7..284161144 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -252,6 +252,12 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) } } +char * +re_nl_get_netns_name(uint32_t table_id) +{ + return xasprintf("ovnns%d", table_id); +} + void re_nl_sync_routes(uint32_t table_id, const struct hmap *routes, struct hmap *learned_routes, @@ -260,7 +266,7 @@ re_nl_sync_routes(uint32_t table_id, char * netns = NULL; if (use_netns) { - netns = xasprintf("ovnns%d", table_id); + netns = re_nl_get_netns_name(table_id); table_id = RT_TABLE_MAIN; } diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index 11f989cf6..5d48cbfd7 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -34,6 +34,8 @@ struct re_nl_received_route_node { struct in6_addr nexthop; }; +char * re_nl_get_netns_name(uint32_t table_id); + int re_nl_create_vrf(const char *ifname, uint32_t table_id); int re_nl_delete_vrf(const char *ifname); diff --git a/controller/route-exchange-stub.c b/controller/route-exchange-stub.c index 2ca644b06..7225e67a8 100644 --- a/controller/route-exchange-stub.c +++ b/controller/route-exchange-stub.c @@ -19,12 +19,6 @@ #include "openvswitch/compiler.h" #include "route-exchange.h" -bool -route_exchange_relevant_port(const struct sbrec_port_binding *pb OVS_UNUSED) -{ - return false; -} - void route_exchange_run(struct route_exchange_ctx_in *r_ctx_in OVS_UNUSED, struct route_exchange_ctx_out *r_ctx_out OVS_UNUSED) diff --git a/controller/route-exchange.c b/controller/route-exchange.c index a5a5afee5..12204e42a 100644 --- a/controller/route-exchange.c +++ b/controller/route-exchange.c @@ -25,6 +25,7 @@ #include "ha-chassis.h" #include "local_data.h" #include "route.h" +#include "route-table-notify.h" #include "route-exchange.h" #include "route-exchange-netlink.h" @@ -169,7 +170,7 @@ sb_sync_learned_routes(const struct sbrec_datapath_binding *datapath, void route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, - struct route_exchange_ctx_out *r_ctx_out OVS_UNUSED) + struct route_exchange_ctx_out *r_ctx_out) { struct sset old_maintained_vrfs = SSET_INITIALIZER(&old_maintained_vrfs); sset_swap(&_maintained_vrfs, &old_maintained_vrfs); @@ -203,6 +204,12 @@ route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, r_ctx_in->ovnsb_idl_txn, r_ctx_in->sbrec_route_by_datapath); + struct route_table_watch_request *wr = xzalloc(sizeof(*wr)); + wr->table_id = ad->key; + wr->is_netns = ad->use_netns; + hmap_insert(&r_ctx_out->route_table_watches, &wr->node, + route_table_notify_hash_watch(wr->table_id, wr->is_netns)); + out: re_nl_received_routes_destroy(&received_routes); } diff --git a/controller/route-exchange.h b/controller/route-exchange.h index d19e83403..986194e81 100644 --- a/controller/route-exchange.h +++ b/controller/route-exchange.h @@ -16,6 +16,7 @@ #define ROUTE_EXCHANGE_H 1 #include +#include "openvswitch/hmap.h" struct route_exchange_ctx_in { struct ovsdb_idl_txn *ovnsb_idl_txn; @@ -25,6 +26,8 @@ struct route_exchange_ctx_in { }; struct route_exchange_ctx_out { + /* contains route_table_watch */ + struct hmap route_table_watches; }; void route_exchange_run(struct route_exchange_ctx_in *, diff --git a/controller/route-table-notify-stub.c b/controller/route-table-notify-stub.c new file mode 100644 index 000000000..d6de9852e --- /dev/null +++ b/controller/route-table-notify-stub.c @@ -0,0 +1,37 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include "openvswitch/compiler.h" +#include "route-table-notify.h" + +bool +route_table_notify_run(void) +{ + return false; +} + +void +route_table_notify_wait(void) +{ +} + +void +route_table_notify_update_watches(struct hmap *route_table_watches OVS_UNUSED) +{ +} + diff --git a/controller/route-table-notify.c b/controller/route-table-notify.c new file mode 100644 index 000000000..fcfd833fd --- /dev/null +++ b/controller/route-table-notify.c @@ -0,0 +1,154 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include + +#include "netlink-notifier.h" +#include "openvswitch/vlog.h" + +#include "binding.h" +#include "route-table.h" +#include "route.h" +#include "route-table-notify.h" +#include "route-exchange-netlink.h" + + +VLOG_DEFINE_THIS_MODULE(route_table_notify); + +struct route_table_watch_entry { + struct hmap_node node; + uint32_t table_id; + bool is_netns; + struct nln *nln; + struct nln_notifier *route_notifier; + struct nln_notifier *route6_notifier; + /* used in update_watches to ensure we clean up */ + bool stale; +}; + +static struct hmap watches = HMAP_INITIALIZER(&watches); +static bool any_route_table_changed = false; +static struct route_table_msg rtmsg; + +static struct route_table_watch_entry* +find_watch_entry(uint32_t table_id, bool is_netns) +{ + struct route_table_watch_entry *we; + uint32_t hash = route_table_notify_hash_watch(table_id, is_netns); + HMAP_FOR_EACH_WITH_HASH (we, node, hash, &watches) { + if (table_id == we->table_id && is_netns == we->is_netns) { + return we; + } + } + return NULL; +} + +static void +route_table_change(const struct route_table_msg *change OVS_UNUSED, + void *aux OVS_UNUSED) +{ + if (change && change->rd.rtm_protocol != RTPROT_OVN) { + any_route_table_changed = true; + } +} + +static void +add_watch_entry(uint32_t table_id, bool is_netns) +{ + struct route_table_watch_entry *we; + uint32_t hash = route_table_notify_hash_watch(table_id, is_netns); + we = xzalloc(sizeof(*we)); + we->table_id = table_id; + we->is_netns = is_netns; + we->stale = false; + char *netns = NULL; + if (is_netns) { + netns = re_nl_get_netns_name(table_id); + } + VLOG_DBG("registering new route table watcher for table %d and netns %s", + table_id, netns); + we->nln = nln_create(netns, NETLINK_ROUTE, route_table_parse, &rtmsg); + free(netns); + + we->route_notifier = + nln_notifier_create(we->nln, RTNLGRP_IPV4_ROUTE, + (nln_notify_func *) route_table_change, NULL); + we->route6_notifier = + nln_notifier_create(we->nln, RTNLGRP_IPV6_ROUTE, + (nln_notify_func *) route_table_change, NULL); + hmap_insert(&watches, &we->node, hash); +} + +static void +remove_watch_entry(struct route_table_watch_entry *we) +{ + hmap_remove(&watches, &we->node); + nln_notifier_destroy(we->route_notifier); + nln_notifier_destroy(we->route6_notifier); + nln_destroy(we->nln); + free(we); +} + +bool +route_table_notify_run(void) +{ + any_route_table_changed = false; + + struct route_table_watch_entry *we; + HMAP_FOR_EACH (we, node, &watches) { + nln_run(we->nln); + } + + return any_route_table_changed; +} + +void +route_table_notify_wait(void) +{ + struct route_table_watch_entry *we; + HMAP_FOR_EACH (we, node, &watches) { + nln_wait(we->nln); + } +} + +void +route_table_notify_update_watches(struct hmap *route_table_watches) +{ + struct route_table_watch_entry *we; + HMAP_FOR_EACH (we, node, &watches) { + we->stale = true; + } + + struct route_table_watch_request *wr; + HMAP_FOR_EACH_SAFE (wr, node, route_table_watches) { + we = find_watch_entry(wr->table_id, wr->is_netns); + if (we) { + we->stale = false; + } else { + add_watch_entry(wr->table_id, wr->is_netns); + } + hmap_remove(route_table_watches, &wr->node); + free(wr); + } + + HMAP_FOR_EACH_SAFE (we, node, &watches) { + if (we->stale) { + remove_watch_entry(we); + } + } + +} diff --git a/controller/route-table-notify.h b/controller/route-table-notify.h new file mode 100644 index 000000000..4fdbc0366 --- /dev/null +++ b/controller/route-table-notify.h @@ -0,0 +1,43 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ROUTE_TABLE_NOTIFY_H +#define ROUTE_TABLE_NOTIFY_H 1 + +#include +#include "openvswitch/hmap.h" +#include "hash.h" + +struct route_table_watch_request { + struct hmap_node node; + uint32_t table_id; + bool is_netns; +}; + +static inline uint32_t +route_table_notify_hash_watch(uint32_t table_id, bool is_netns) +{ + uint32_t hash = hash_add(0, table_id); + return hash_boolean(is_netns, hash); +} + +/* returns true if any route table has changed enough that we need to learn + * new routes. */ +bool route_table_notify_run(void); +void route_table_notify_wait(void); +/* updates the list of route table watches that are currently active. + * hmap should contain struct route_table_watch_request */ +void route_table_notify_update_watches(struct hmap *route_table_watches); + +#endif /* ROUTE_TABLE_NOTIFY_H */ From patchwork Mon Nov 4 11:04:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006185 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/; 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 4XhpZz6br2z1xyH for ; Mon, 4 Nov 2024 22:07:21 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 4A29C81139; Mon, 4 Nov 2024 11:07:13 +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 Djij2dUk06A1; Mon, 4 Nov 2024 11:07:10 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 629E4812A5 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/ Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 629E4812A5; Mon, 4 Nov 2024 11:07:00 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E8BC7C08A6; Mon, 4 Nov 2024 11:06:59 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1C636C08A6 for ; Mon, 4 Nov 2024 11:06:59 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 986ED4071B for ; Mon, 4 Nov 2024 11:05:07 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id PH9WaLOyJ8Aj for ; Mon, 4 Nov 2024 11:05:04 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2612::608; helo=eur05-am6-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 71BDC4063B Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 71BDC4063B Authentication-Results: smtp4.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=TsQTqBz/ Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20608.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::608]) by smtp4.osuosl.org (Postfix) with ESMTPS id 71BDC4063B for ; Mon, 4 Nov 2024 11:04:58 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=yXRavhIUI+C1w/tZ93hSAQdblYkX+r6N+0qZ+FsArXsywCTdW7lKWUwbUR2v92MUKo9x1VknfgvEuO+tlgPhx6v3BaNmQ4hgXs7JyzY1XROZVx00wUHxPDC3HCSZZLPUr3D/nLc556zQa5BjmZ+xUMuvfv9rIwFw+kn6A951cUkqytrBkhlHtkNfaYJSWE7ntqrPXX8RUhkgeOmzlyT85hTXI5Zio7TvX9Qla0DzfwzUUca5ndnVv7T/ZMAw8HyLv4HPpmLvvslvSE3WiLF11tEGgdVkADdHYOTsX30O7NNb53sO1srlprwZ1SMtSS78DGLmP8WOBcDXhz5zYBQTzg== ARC-Message-Signature: i=2; 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=ThJIhkRn9zakx17kE099bD0J5pfxIvEd4m9MlVklglo=; b=qQe2WMh5ZMGgSW14pI1VcKwZMVURndN8jmTm9NJ+vi36o1g1lc9LqMi/T6eZWaguhRQB/f1xNy1/QYeC+d3gPdKelPIq1aYTh+GS006s/ezb2IhKeGvpXaNQcGKD5uMyUCXK14Fy8QGMqAAaOF/vmJqAsNk7JuQKUuQf6MswRGmaBiGrKp0tc1jH16+yIHmn2oZGkrrTde+qJ8uITNv0EAgtxRiiEwfGnfZsu/7QzOIaUa4QXWiaK17phKUqd12G4rUEL5ioaTdQ8D2a1pZSpcyAQJAKtLxHqP/pfh30Yabjf1T2kmTVqkxrsiS2mwgxAuei5nqfwRnRzmvYpJbM+g== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ThJIhkRn9zakx17kE099bD0J5pfxIvEd4m9MlVklglo=; b=TsQTqBz/2urrQ12XPToqMsKA8APW4dBDwdLhcDJLPwjxVamDIRqdZp8hWUq0E1hPv5LCVnal4V7blWcWr4qYyRfRE876HalTfU2dWr4iBjL679v+0Xs55RMG84XAd6NVTao93K10a3T09Iq3O/95nMeCO6+kWu79usFLIrpXPkUbQZWQyWTKJSJh0+iEBy4PtyTrdRFOA6ouRKeuK1aRPxyq2wceqwXOwYAPsDDiaaTzlRlKSppsvZFxORXlWY6Ps+wu4ThInfCXytv9LMVtUPqemBvgt7b1L6xRo/JVCKTOM01uuW0vM/dgymoJ28jmO4f8v7jEiHKneIoLqO1m6Q== Received: from DU7PR01CA0042.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::26) by GV2PR10MB7079.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:df::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.14; Mon, 4 Nov 2024 11:04:53 +0000 Received: from DU2PEPF00028D08.eurprd03.prod.outlook.com (2603:10a6:10:50e:cafe::6f) by DU7PR01CA0042.outlook.office365.com (2603:10a6:10:50e::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DU2PEPF00028D08.mail.protection.outlook.com (10.167.242.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:52 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.110) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:53 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 7674481 X-ExclaimerImprintLatency: 3713378 X-ExclaimerImprintAction: fcb8c7206a0d4cea8333c9afd316a9c7 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OWy3QnGKobd6JP4Kt0gjVS6UCYZ1+zm5J61fXy5JjpY3McydGIr00BrmlcaOWa2kWf2gK+mNO3ZXN5hBKD0fZtmOd20Is7hOJZkupqJEstqbTqUWF/O9cQI4xp55JNaovNnKtM6E4c4t9FObz6aA+ggXNFkQiwndjBXVmJ8gDzggSroXOUW8Gk4FCzvUxGwDopml3IUxybyUQRex3gFZoQfllIubICkoWpwCu5l/Wgcf6MGBIMmPQ15VUxFX44l7F/Rjz8dxFsmSnrst4QHPjKohejezfUusDki+gLzxQqQR/892Q/MgJi/QlofgiqJ3V1hMZ0atmTyRNRwy3Me1nw== 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=ThJIhkRn9zakx17kE099bD0J5pfxIvEd4m9MlVklglo=; b=oyYVWjRfN6bckrW+MEEFXGhU+XVWXqF+wEPhYroNYG2NX5BfRl8wD668BuSXVH3xk1EFrgvRIkTfA+CIJLaFezAa7zF5kzqVGNycC1ToQr6jXRMCqUaLG/Yk7KNSU5Ko29ZT/Q1LLZAVvVq9gTpVjr/jMN6kBzH9GWEwr5TrB7zbC8PfVLo04MjsbcmDl3ZrCRTCNyOLW5bfeVaLi/rVG5gz4fHhbWdxcfagC+JQECHIplEyuh6XDsI5msWsVljOAH4k6E6M7TCK3fst2M0X2OM7STUoUBe/StrTEBgalrxfZxyOTi0FU4wtQpoiAG1vwbe5ZfOfUasSvGjQRaGifQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ThJIhkRn9zakx17kE099bD0J5pfxIvEd4m9MlVklglo=; b=TsQTqBz/2urrQ12XPToqMsKA8APW4dBDwdLhcDJLPwjxVamDIRqdZp8hWUq0E1hPv5LCVnal4V7blWcWr4qYyRfRE876HalTfU2dWr4iBjL679v+0Xs55RMG84XAd6NVTao93K10a3T09Iq3O/95nMeCO6+kWu79usFLIrpXPkUbQZWQyWTKJSJh0+iEBy4PtyTrdRFOA6ouRKeuK1aRPxyq2wceqwXOwYAPsDDiaaTzlRlKSppsvZFxORXlWY6Ps+wu4ThInfCXytv9LMVtUPqemBvgt7b1L6xRo/JVCKTOM01uuW0vM/dgymoJ28jmO4f8v7jEiHKneIoLqO1m6Q== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:51 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:51 +0000 Date: Mon, 4 Nov 2024 12:04:49 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::16) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DU2PEPF00028D08:EE_|GV2PR10MB7079:EE_ X-MS-Office365-Filtering-Correlation-Id: 460f937b-c383-4e8b-1ee8-08dcfcc0827c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: 5NbUR/bdncZoshErwC/Dnl/47Byn+75f2bZd7ZN6zwCiMOeh+VYkQEd7VeTUAPxoOhLzdfdF91/MS9dbbrLGJRYm/O0mWdwtzQQIXfN5t+1DVbvpUZO0dvuTXmle+OOUJSzhYb5WGZJtoMBhIJXv5kfi0YQZ2hB5pSqJFLLFBkqNDQ86c3GppVM7ZxMajzA79q6E6mknCMLoWRCbkqUg59Bvq5RiLL2MoHjSN9IEV2ASEMdvgFzWTbWCaFUK8MuKNRiDBaYqoIv3yzVxygtmSCx0m4AS2ZCSh2eH3140Y2WavSr9tHZ1/DJYoTeIQxxAS4Xh6FbmxBWo/ZTlUdrMUO/vnUM5FYm2TfPKvf6WWPcRCeYToP34Lcwy1DBjNc3FXZQ67StzEpkc1/yndQlKDs/LBVw2xvmab6QzD8+9YshLBohCUYeUPG/tlKv3qcH20IY8+SXhAg/7UL05E4ucRkKC1f0UelQOAip1+oOqDZW8xey2XFvdWerzVhg0jW/hD7b/Z34n0aRIDezcLDhGMItpm6u7fgmA8yYIdCbcElumg0JdtiggRpB9NhKWytEb50NdGmoJzX1GAqjjoK1/GCRu6p7wCsWueck+Px7Y2FE+V6u0de04R46O5UYWb+4doiywedQmFlBgZ8o9cPe+19oxsLC6ZdOGC4lDYnQNqpUQiK8MREdZIufGekLuyZDuPKr0kvsv5YuZ1DumfGObLapbNmj0v5VP1vp7EWB+obIE7xY5ktE08LgBNrrtUqpXqhmoSm82q8kOnZSfyVWX3fnvXzdZKfxD232JNpwlQ2z+Vd0RDlDRUdICUzeFR5cjGmBDuCJPVEzFPayHd+0kfy99A3WKe7vlZAIPFjd8inYvyElUiDUcXfWy5EDNlvf1wlEJBMqAYeCiju9pCwlcQbHCyw+su1Qdd7x5IhemJ6hnVbXJHMslyHaWZKNJXQElvaFy3DlSNuLep026n19SAe1jL+ZHjCvspC0rggGKwtvYYnKAHj22L9xPMO4XZf8WEr+tcVbiYmIcKU/6KY0hLUTu3tdGEk3msQWhLAe+5Mztmc7e4cIawAov2YlbtOQVizTGLbMwC3yMtzXKzXFv9J6N8pqwapcBiOFf6FdrbFhmawqOKyo4mLyC4W2UmcVvx6fm2lnycUtznT8jK0ShV+yKd93plHH4b/o+WPM7XD/V9lg8mA5hCKlL9/fWcIK8U7sLfgFxvGsdr2xVd/s9jRAkJBvhscFiPgCo8npc7lE+aQn+FkvQ/hOVmsAD1t6IbPkfUz8LXO6r31meXoLvA6B5PmnA+iH/EdDDVcWF9rs= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D08.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b0799fc3-0c02-4d51-488c-08dcfcc08148 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: HmCSvngdx+rp5084FsWnv+u/Fqh54cg1R6sOUDLLN7v2NZCYrikMfB9SHAusm7/8/c+MIdhXrlUBxQuyqLuSifZoKnYGEhFiTtO7Ljxk29NdKdKXrPBAzBNfKaBiLix8w4DR/iW8lf2NyMyvOm9fnjdOl5SxmYMoc0QGG62vdFwmoJhEtWVp7LE8hiLglBbj6+tw5Phqt1MZwUkrzknL4kf98y9wloshWHTAYDQI1fUPhz+HLmZwAsoflMZImsN+zR5uYSuT3iX9niACa8MKGvQBchtxba0/d8LI96dlG723GKjC/F8jn/j4OtKsG95B1FZ+eX2UB+aUAPDbfF3ciQn7zGCBlAwMPKnifRsH/CwyQPPQPXWHLoXnTo4bXxkoafXwKB4bvuTUIOqlmc2RqTBFzIlKXJZP3CvXR0viTDOD2EBZqQ5ZPt9XBMgcvaYOmlBWlqU64O4rEbYKkY0tFxw9JEEXvdkboECyn77qZLMt38DrygDfB4BFWeIoFLOns7KSym3GR1lQpW/3pg9x+l4iscRk6W2st0sEuSd7gA21dyNpVBBHaElW3zaRyEwMMMTy8BFhXUV46byplEaeKRzIqe0FZ6R7ac3FczFKMVmdjaazMMtZm8yqgeeK719jSLfoDWW13N8O3nfeJn2lx1FWWc6+QmUYUDP6hF7ny9sdJtbZVolGVEaz/Knqsic/SdYeXsimV6BxfDEosvP4ytMpFSTLjMZCr6wuz/gwDnAseSdhp78spwXhF72AHJ6ZI1NQgqUL+ul/U4+m0UkgNzFydnsRLWbR17c/qZz5Bg0IOHQ96MKFW86dFLs24FCaRjHa4ac1jY3cLOKQATLKkFccNnkQ72xO9o1YcaXtOUYNZaojvjBYY9RiDfCeed5MLa0IVZL45UWDU7m6DM2XEqdSbm/3TsZ77OJdHnJLKBbcgQqlQU7gLEtpJ3Rv8OMy7HAkWOSecy2pXdYJgoaF0sQJP8+H7q8lGHQsms1sSTY6CQZlQdBzaGVgAIkcfilFw8/1aSORnd2PblquAhkQwuuIrLuquohySAzue+BLzpVxGbgEKz4cAXyEZ0dV5GIm6Q+v99dpyHvRLZzRCld6+m0OxqGCSEOEOg8nArnRChFWJfLgrxEOeWo+BI8LNWcWbZnLca/5bcK3RjCKuiTNlg8hLLsbTAFNCgDj534KmyffxAAsj7U/1pPPqHAYmrmcxpHyyUCc8IWYwldpIC+BovDu9x9mMT7ySVXa3xtFKiJkD/6ddhEZ51b5F3zuRbYKLb9V8Ms02WgyuDK9Jhdcn6B9bzWZTMbnNtpHHe4dMpWOhIrCi4gASD4Je4BvZ9UesyhCsrQW9EXF+cNcxjSLzXZb99RW0miLg7z3HNLwe3ujIze3dhVS/EyCKWj8AuYQQXaoijsw7k0yBDZ7dduAlw== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:52.8641 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 460f937b-c383-4e8b-1ee8-08dcfcc0827c X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D08.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR10MB7079 Subject: [ovs-dev] [PATCH ovn v2 27/32] controller: Cleanup routes on stop. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When we stop ovn-controller without immediately restarting it we now cleanup routes. This allows the routing agents to stop advertising this chassis to the fabric. Signed-off-by: Felix Huettner --- controller/route-exchange-netlink.c | 50 +++++++++++++++++++++ controller/route-exchange-netlink.h | 2 + controller/route-exchange.c | 70 +++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index 284161144..832c62686 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -307,3 +307,53 @@ re_nl_sync_routes(uint32_t table_id, } free(netns); } + +static void +handle_route_msg_delete_all_our_routes(const struct route_table_msg *msg, + void *data) +{ + const struct route_data *rd = &msg->rd; + struct route_msg_handle_data *handle_data = data; + int err; + + /* This route is not from us, so not interesting. */ + if (rd->rtm_protocol != RTPROT_OVN) { + return; + } + + err = re_nl_delete_route(handle_data->netns, + rd->rta_table_id, &rd->rta_dst, + rd->plen, rd->rta_priority); + if (err) { + char addr_s[INET6_ADDRSTRLEN + 1]; + VLOG_WARN_RL(&rl, "Delete route table_id=%"PRIu32" dst=%s plen=%d: %s", + rd->rta_table_id, + ipv6_string_mapped( + addr_s, &rd->rta_dst) ? addr_s : "(invalid)", + rd->plen, + ovs_strerror(err)); + } +} + +void +re_nl_cleanup_routes(uint32_t table_id, bool use_netns) +{ + char * netns = NULL; + if (use_netns) { + netns = re_nl_get_netns_name(table_id); + table_id = RT_TABLE_MAIN; + } + + /* Remove routes from the system that are not in the host_routes hmap and + * remove entries from host_routes hmap that match routes already installed + * in the system. */ + struct route_msg_handle_data data = { + .routes = NULL, + .learned_routes = NULL, + .netns = netns, + }; + route_table_dump_one_table(netns, table_id, + handle_route_msg_delete_all_our_routes, + &data); + free(netns); +} diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index 5d48cbfd7..f3059e5af 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -54,4 +54,6 @@ void re_nl_sync_routes(uint32_t table_id, struct hmap *learned_routes, bool use_netns); +void re_nl_cleanup_routes(uint32_t table_id, bool use_netns); + #endif /* route-exchange-netlink.h */ diff --git a/controller/route-exchange.c b/controller/route-exchange.c index 12204e42a..2eeabb5ec 100644 --- a/controller/route-exchange.c +++ b/controller/route-exchange.c @@ -16,6 +16,7 @@ #include #include +#include #include "openvswitch/vlog.h" @@ -33,6 +34,14 @@ VLOG_DEFINE_THIS_MODULE(route_exchange); static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); +struct maintained_route_table_entry { + struct hmap_node node; + uint32_t table_id; + bool is_netns; +}; + +static struct hmap _maintained_route_tables = HMAP_INITIALIZER( + &_maintained_route_tables); static struct sset _maintained_vrfs = SSET_INITIALIZER(&_maintained_vrfs); struct route_entry { @@ -47,6 +56,39 @@ struct route_entry { bool stale; }; +static uint32_t +maintained_route_table_hash(uint32_t table_id, bool is_netns) +{ + return hash_boolean(is_netns, hash_int(table_id, 0)); +} + +static bool +maintained_route_table_contains(uint32_t table_id, bool is_netns) +{ + uint32_t hash = maintained_route_table_hash(table_id, is_netns); + struct maintained_route_table_entry *mrt; + HMAP_FOR_EACH_WITH_HASH (mrt, node, hash, + &_maintained_route_tables) { + if (mrt->table_id == table_id && mrt->is_netns == is_netns) { + return true; + } + } + return false; +} + +static void +maintained_route_table_add(uint32_t table_id, bool is_netns) +{ + if (maintained_route_table_contains(table_id, is_netns)) { + return; + } + uint32_t hash = maintained_route_table_hash(table_id, is_netns); + struct maintained_route_table_entry *mrt = xzalloc(sizeof(*mrt)); + mrt->table_id = table_id; + mrt->is_netns = is_netns; + hmap_insert(&_maintained_route_tables, &mrt->node, hash); +} + static struct route_entry * route_alloc_entry(struct hmap *routes, const struct sbrec_datapath_binding *sb_db, @@ -174,6 +216,9 @@ route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, { struct sset old_maintained_vrfs = SSET_INITIALIZER(&old_maintained_vrfs); sset_swap(&_maintained_vrfs, &old_maintained_vrfs); + struct hmap old_maintained_route_table = HMAP_INITIALIZER( + &old_maintained_route_table); + hmap_swap(&_maintained_route_tables, &old_maintained_route_table); const struct advertise_datapath_entry *ad; HMAP_FOR_EACH (ad, node, r_ctx_in->announce_routes) { @@ -196,6 +241,8 @@ route_exchange_run(struct route_exchange_ctx_in *r_ctx_in, sset_add(&_maintained_vrfs, vrf_name); } + maintained_route_table_add(ad->key, ad->use_netns); + re_nl_sync_routes(ad->key, &ad->routes, &received_routes, ad->use_netns); @@ -214,6 +261,17 @@ out: re_nl_received_routes_destroy(&received_routes); } + /* Remove routes in tables previousl maintained by us. */ + struct maintained_route_table_entry *mrt; + HMAP_FOR_EACH_SAFE (mrt, node, &old_maintained_route_table) { + if (!maintained_route_table_contains(mrt->table_id, mrt->is_netns)) { + re_nl_cleanup_routes(mrt->table_id, mrt->is_netns); + } + hmap_remove(&old_maintained_route_table, &mrt->node); + free(mrt); + } + hmap_destroy(&old_maintained_route_table); + /* Remove VRFs previously maintained by us not found in the above loop. */ const char *vrf_name; SSET_FOR_EACH_SAFE (vrf_name, &old_maintained_vrfs) { @@ -228,6 +286,11 @@ out: void route_exchange_cleanup(void) { + struct maintained_route_table_entry *mrt; + HMAP_FOR_EACH_SAFE (mrt, node, &_maintained_route_tables) { + re_nl_cleanup_routes(mrt->table_id, mrt->is_netns); + } + const char *vrf_name; SSET_FOR_EACH_SAFE (vrf_name, &_maintained_vrfs) { re_nl_delete_vrf(vrf_name); @@ -237,10 +300,17 @@ route_exchange_cleanup(void) void route_exchange_destroy(void) { + struct maintained_route_table_entry *mrt; + HMAP_FOR_EACH_SAFE (mrt, node, &_maintained_route_tables) { + hmap_remove(&_maintained_route_tables, &mrt->node); + free(mrt); + } + const char *vrf_name; SSET_FOR_EACH_SAFE (vrf_name, &_maintained_vrfs) { sset_delete(&_maintained_vrfs, SSET_NODE_FROM_NAME(vrf_name)); } sset_destroy(&_maintained_vrfs); + hmap_destroy(&_maintained_route_tables); } From patchwork Mon Nov 4 11:04:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006186 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ; 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 4XhpZx0Qrsz1xxW for ; Mon, 4 Nov 2024 22:07:18 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 2A4CE60A95; Mon, 4 Nov 2024 11:07:05 +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 D1zfBClC-vKC; Mon, 4 Nov 2024 11:07:01 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8A76F60B33 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 8A76F60B33; Mon, 4 Nov 2024 11:06:38 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5BF35C08A6; Mon, 4 Nov 2024 11:06:38 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 139E4C08A6 for ; Mon, 4 Nov 2024 11:06:37 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id C7202810C5 for ; Mon, 4 Nov 2024 11:05:11 +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 G1YMm8RkX3vm for ; Mon, 4 Nov 2024 11:05:10 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::609; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 0EFAF8101C Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 0EFAF8101C Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=IYqhxBEQ Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20609.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::609]) by smtp1.osuosl.org (Postfix) with ESMTPS id 0EFAF8101C for ; Mon, 4 Nov 2024 11:04:57 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=kgm29OxiaLQmBXzx605LeCzhBPV3kkRcoLjL3u+ZskfkcLAxSV4UPP4fT00ln/e3SKtdiozWYHea42q8EOgptBgHxKB4tJYfwFIiQYSXDVgkoodxHZ7FZxO08767YBR4EXtJp5+hyVJNCnC8MKj6YPyu0GPaZCL2W3re9s2Gl6RNr/XUTTYQ7CMu5/tm+ZgTEXh9tP2fshTWYLdqfS56a/KxlXOFcrd6vgsoluiZjqo+U1Jjw+u5xHVrKfCc5z73yWaVuMtOI2Wny/MJkN/1Ev8QpuvRYpV5Yj+JNLAZa8wq1rsaEDRy8P6knvF5X8ARQznXyy9ZRpZlKeiSGEcSCQ== ARC-Message-Signature: i=2; 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=qlx9qQZt1AHSriscxpXoD2FNRe6Hhby+sx77d+i6Fbs=; b=GKfi5Fwn5p0g5gdSm7mnmOD01222ufxrOCQFZuSS/rApgHeIz0etCzDyHJOTRqT0bGILqhCQf9i6lYDUt/iR9xcc+lqb/O+69oZCHMq3jpVYEx012yzi8qjX7K0+YrwOJgc3D9W5y4kBFTcWQjvVzCZYjcCma31wrRa2Dq8lWxMmgyKShtr30R/4Drzlh2cjKp+YRbCw+qnRp8uXsGwaUTFJ23WdIZCjRQvucUk9fcHIPdTWh48ZGm9kArn8g71k/8C0pLuenMtfPTqgvws0Ar4JV98uodR+lmsc6IQrTSn9EEpYyDINc+1nrAnIWmeUIW0tIDkKSDoU6Vv8mUd0Vg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 52.169.0.179) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qlx9qQZt1AHSriscxpXoD2FNRe6Hhby+sx77d+i6Fbs=; b=IYqhxBEQroECgmc3jGHggFelf+72GVC1z+BBLei8pXYEt7cSfLAe59S5OY79bRuvGUWAdwIAPcd5B1tzr7vhV5/3LIqpeB3VLr4ZMOODEVTFxIRxyErAlMyZX39e3TD6qvyuKL6WVTRAw+F//wC9kl8RAav2u/QX48qQjzq3oJLEzo1X2liytr0QLrR4Kh6/AFzpalocBIhwo1bG7P/HppHD8GyUhjBkd+cuN0zGRn7a71Ve1WL5qrQxswWcoBBfhACP2p2BimW613l0JMR42uX3DXPa6WJEtsQB3k5pkzFO4lTgBX2+w8UT5L97LAJhyo04NF2LjUVwUwOdp0PiWw== Received: from DB9PR05CA0017.eurprd05.prod.outlook.com (2603:10a6:10:1da::22) by PA1PR10MB8332.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:44a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:55 +0000 Received: from DB1PEPF000509EE.eurprd03.prod.outlook.com (2603:10a6:10:1da:cafe::24) by DB9PR05CA0017.outlook.office365.com (2603:10a6:10:1da::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.29 via Frontend Transport; Mon, 4 Nov 2024 11:04:55 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 52.169.0.179) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 52.169.0.179 as permitted sender) receiver=protection.outlook.com; client-ip=52.169.0.179; helo=eu2.smtp.exclaimer.net; Received: from eu2.smtp.exclaimer.net (52.169.0.179) by DB1PEPF000509EE.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:54 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.110) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:54 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 6640690 X-ExclaimerImprintLatency: 3265968 X-ExclaimerImprintAction: 9899eb10f18b4ac096b9e16a5e869db0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sFcB/Iz4iC5nfZKVJZrBeaGqbWgym1gznjD5kHSomzoP0Vt5ouXv3kYhwC0MFwc+Ow82rFJopdwwqLvQ2keXOfyEyLe41YXZgnqeQtoaSChMX2K9Un0KnpLwiB3h8r2TiCyKHiEurVDXsuX49FNo+8YGyt0J4qSR2uCisZW/5F0y4kn2nZmfuKDRMMoONnfoN2US/ezQQtoLIjBd3EftczqdcQ7m1hiYHI4MOdABsEY8VpMrH2mar+A9DO53oR6AhrwkuKrX6zwXMrat822i3bY5BlA2iUkmxOO8HRSrPOt9IeK01jCTp02dSgLkrdoAGrwW2EJY65fmOhpIl1allw== 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=qlx9qQZt1AHSriscxpXoD2FNRe6Hhby+sx77d+i6Fbs=; b=raggKUd/PkGMDN5/yjs9WzIHy3rZoBXVwtU5gUhB+HPnT7BLOskhshPxd4tJl5MFQUa31lI8G3f1NotJeOPt3YswYKTeQIqkyZhSD8E0daac8MY5HbYsLYfPWSkK4h062wUF/Y96s4XhXhKjo3o64cG6UTwAy+JVIBgt/SaE1YHEhKD+UXFL5DUyAW4D/NT3VSMNwYN32RoXBTNnbyhY2IxolV0kLQ2Ly1+yLuBxCdG/Fz++C8wFY2ZSEANL3qBCM0XSm7XXE+ypUkjCXVE4PXjOis2U+q39yzJ4FDeQx7vwCNTCggYl/HqWpzaS9E4JfMVxir1+93b+amCq3Z9i2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qlx9qQZt1AHSriscxpXoD2FNRe6Hhby+sx77d+i6Fbs=; b=IYqhxBEQroECgmc3jGHggFelf+72GVC1z+BBLei8pXYEt7cSfLAe59S5OY79bRuvGUWAdwIAPcd5B1tzr7vhV5/3LIqpeB3VLr4ZMOODEVTFxIRxyErAlMyZX39e3TD6qvyuKL6WVTRAw+F//wC9kl8RAav2u/QX48qQjzq3oJLEzo1X2liytr0QLrR4Kh6/AFzpalocBIhwo1bG7P/HppHD8GyUhjBkd+cuN0zGRn7a71Ve1WL5qrQxswWcoBBfhACP2p2BimW613l0JMR42uX3DXPa6WJEtsQB3k5pkzFO4lTgBX2+w8UT5L97LAJhyo04NF2LjUVwUwOdp0PiWw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:53 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:53 +0000 Date: Mon, 4 Nov 2024 12:04:51 +0100 To: dev@openvswitch.org Message-ID: <0fb4d5983929ad9a31a42df16472b06a2062cc25.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0109.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::9) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DB1PEPF000509EE:EE_|PA1PR10MB8332:EE_ X-MS-Office365-Filtering-Correlation-Id: 69c9df5b-7d8c-4cba-a693-08dcfcc08379 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: phInYATl9bkM/tFGDDMjRkVy7a4oDDAUFIqreFIEZMAdu3tug4hxubupW4rNUPHyEQljfo/zoLvrWsYxmXZA7s/6Db27ZF3gNvw6ojCXxLRSjfU45CPyQv4swiLhDAXa/nG7+N3q8pOJl8jYWAz0kRsqWGKi2k8hCSrlLCsgWmSawab94UggxhegOMt74ydyAlpm2oKbW+Wfr5Jx6j0267f9Fysm+bimBZdtICUFZWjcqJopCAjbgUwcF4zjhsSglF+EFz4FdM2qY1n4cbZr5zk6Ku10pF+yCdiKZ3rBMsPgbpC4WbNELMSbDlQZhg67bRtxJ3lQACk0S1bDkx0G3NskY2COiuqZe7h/0PTcTsWgBrKJfsQbjuiKFBt1LsNmu99O1htbD6DDHdTfcdJptK+NunATBBmR/MmvbXrY1MaFDD9dakBJ/cc9hUV4iUecvjImyz/dXrf+cNOI54LrIw0yocvlvuEADmhi8scHzQ0cwkqo1ulwM17ly5W+Pp7ZJLkkpoU8QuBrhH4VPxwtPJMIv923CNbMQnqDg7othQMJ313dwRWgBYC3sTdI2DoBV2iyGocxvXiBERbrEPww44Hh0+JxouHrh4VWgavEVEelt4o4zQWfAUlZHzxycYybBoSEgczGOrrXxKnYAQGQRxBaqVdnnO7qGSr8QskuIpNaxvpP5becRO9xwomu26FhwTDVT6iP6OfHt7mN4XsPa+XDEi00H9jr7HrwhJ6d6Yg9w4jmf0nwTk5ak/2qEGgsmlklf7Eap5NaQxRsig2j/2HZeLbjkY+muPiQJewt2p0f214OspJvkKxOefb8dmnuOwVJ3FVpq/m5R4B9Qc/+MpxUdE8NvwF1uBKzC7l55ZEHi1OCz5S55yqzF2TZH7XOWkCyCPg9Nxaj9Msa5yoI93CrQw1dbyazngRtLD6mG8AT6Mjts30r+0J0aUeTMU6SDQaTWQlcyZC3YQ7sNODpWLV68en5Xk3ra5r6fxnaAxWXtBgC9hBgQX/cpVasXyah6kjAoN1rAb7dmYp3GaERMaSLNgnwDultyCpP7Iem4QIi7ZpEJujJ6e6qSS51gzKTFVP6fytRWh31LAlK5wjnQjgCPDV/75NhPT668dDywREzrIz+GnGPX/tYhWLG2cRBT7bKme6+NbIDPRB+3/Srf7xz0gBAHckxkzxSJRgzuuUkS+NzicXCOe9VZMyc+xtU4msFuSYfBl58C3MAP6OreGnYpQQyn+shsw18BIrk+Orlxus6bmOBWKEaAp51ZRxcFn8NJUvsRGWYg3DPmQvGuBs7trbXnYGrSHOnUCmSDMKX4YILLKmTGDDSj7AbdsGx X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509EE.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 12b52d05-856c-4185-046d-08dcfcc08270 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: 982M3utCyjK6rwYoAmeRzH+AAUj4AOPdJULOVKtBhB2LthQsdj++RCzAZb/rOuxkaCtli4b51OMVKTJWyTA4Xs07veZQKMN8k+CO9PYknfmaDs0skEIPukr36E+rYrW5Y4NH79sLguTE3XLH0/N0AZw5MWkQBbRB2UJ4mUfW7gZZZRFVJFD8tQSAGyIlnkunZmPDnt9HsYC9UVfI9k+ct/EJawGjOvSUXluzdOCydIBqBNfLh/OWIKgXOOVZjtDGxZHaXQ6pCWFWxFsa/EkUEvNSI/+qUFCvOujJgvSwtfOgXFbePJZuGgcQXPsC9i4PYH0dEfOGtUKVI2Qn/vdir+eqjNIoXNfL5kM65FIw7y9LTv8/rqEUPHC1aklmprEVesXCYGUgfREiuz3ckGpyC8lFnA59mssDKjePsyU9DJI9A2rnNvZ5Q4CfBLmItgWJ30kvw7Qo0V+e0DbYYLTOfttOS50McXw2+74YyY9GNB3t22OqyJCy2dAzC/FckQmp/fzpLshs1WCbD/3CJHEL9e4CMBGnjCRLuJ+lN06m6T2Cu3UGp6FYM2++pBSL6BQqeHZ0wuJ5DVrAWogZKuKlUzpqY/ajtwTIoPIdiW8VvXUm2Y15Gu86OEd5MV84trfwprq58Aj6kk/ZCTbkK0OSKu6rL9twgqzIXzF4V4V3D4BwoOIb5AQyID4VH0ERhu/9Z0YmQaLkHLRoxjfDQSuQVOBuoLNKpkF5HJd2lERyqteuVzCTUvPhEu7OH6iJCGAk+aapjkmQxEAzX++2irRDgP4dOefBJwyjwi7m+FTxkqiGpVNBFv+3fk8U06cn5iYgpg671gnedsR2VpeFNMgf6W6cqq6BTTYmX+UoEPCxR7Ii3hrd9tVZuib7r2/GNQnABu2ERfe2p7QxSdF8XDTnD0RDQkSoatS70UIxJ5RD3W+Pfx49eVd7P6GDhmxG2khSdNQVmcIG+3H/eriLARwZt4MvZWWSbua+BLuSbRBQe9J8P2WX4xjYwYkNSERHC7mtsZBYMYdt8VQ2J3zeHj3nvSiWQu8a9nhgfOfJs/5SzBXYbqEa+z1mbIUJnVTVWp62nESwOn9ZjfUm46Cgp5IUnm8bkMW1rLYhT89VuVw/Y8F7enLuEXsS8AiyiGtl1KLhzNboKOp6QUjOYfyeU6Kc275SZotleI3HBqU+SF/+0t616a1yTX/+0o23z9+JLoW3+4SAZdh+OWkZ8mEcGZaK3axa9usUIuuZHbLbFmrb8c1tNedgvq4sll9ASTSqtj5hQgSN7NAl1bSLE0bK86LOk06wsRp3hCErpDInH6vZ3hgaM90ZP+kC9G0uAKkPf1MzP416rYJ76DfqU6dXSs71+R+1BYgTSQiEhiv/gGB1cbMJGUChKsTF4qjXak7oDEcICaolBGXvqekQp8sidz9+WA== X-Forefront-Antispam-Report: CIP:52.169.0.179; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu2.smtp.exclaimer.net; PTR:eu2.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:54.5726 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 69c9df5b-7d8c-4cba-a693-08dcfcc08379 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[52.169.0.179]; Helo=[eu2.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509EE.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR10MB8332 Subject: [ovs-dev] [PATCH ovn v2 28/32] controller: Publish ovn-active-active-mappings. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" The options:ovn-active-active-mappings will be used by northd to generate active-active LRP + LSP combinations for active-active routers with external interfaces. Signed-off-by: Felix Huettner --- controller/chassis.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/controller/chassis.c b/controller/chassis.c index ee839084a..38cdfd2bf 100644 --- a/controller/chassis.c +++ b/controller/chassis.c @@ -52,6 +52,7 @@ struct ovs_chassis_cfg { const char *cms_options; const char *monitor_all; const char *chassis_macs; + const char *active_active_mappings; const char *enable_lflow_cache; const char *limit_lflow_cache; const char *memlimit_lflow_cache; @@ -132,6 +133,14 @@ get_chassis_mac_mappings(const struct smap *ext_ids, const char *chassis_id) "ovn-chassis-mac-mappings", ""); } +static const char * +get_chassis_active_active_mappings(const struct smap *ext_ids, + const char *chassis_id) +{ + return get_chassis_external_id_value(ext_ids, chassis_id, + "ovn-active-active-mappings", ""); +} + static const char * get_cms_options(const struct smap *ext_ids, const char *chassis_id) { @@ -316,6 +325,8 @@ chassis_parse_ovs_config(const struct ovsrec_open_vswitch_table *ovs_table, ovs_cfg->monitor_all = get_monitor_all(&cfg->external_ids, chassis_id); ovs_cfg->chassis_macs = get_chassis_mac_mappings(&cfg->external_ids, chassis_id); + ovs_cfg->active_active_mappings = + get_chassis_active_active_mappings(&cfg->external_ids, chassis_id); ovs_cfg->enable_lflow_cache = get_enable_lflow_cache(&cfg->external_ids, chassis_id); ovs_cfg->limit_lflow_cache = @@ -378,6 +389,8 @@ chassis_build_other_config(const struct ovs_chassis_cfg *ovs_cfg, smap_replace(config, "ovn-trim-timeout-ms", ovs_cfg->trim_timeout_ms); smap_replace(config, "iface-types", ds_cstr_ro(&ovs_cfg->iface_types)); smap_replace(config, "ovn-chassis-mac-mappings", ovs_cfg->chassis_macs); + smap_replace(config, "ovn-active-active-mappings", + ovs_cfg->active_active_mappings); smap_replace(config, "is-interconn", ovs_cfg->is_interconn ? "true" : "false"); smap_replace(config, OVN_FEATURE_PORT_UP_NOTIF, "true"); @@ -556,6 +569,14 @@ chassis_other_config_changed(const struct ovs_chassis_cfg *ovs_cfg, return true; } + const char *chassis_active_active_mapping = + get_chassis_active_active_mappings(&chassis_rec->other_config, + chassis_rec->name); + if (strcmp(ovs_cfg->active_active_mappings, + chassis_active_active_mapping)) { + return true; + } + return false; } @@ -699,6 +720,7 @@ update_supported_sset(struct sset *supported) sset_add(supported, "ovn-trim-timeout-ms"); sset_add(supported, "iface-types"); sset_add(supported, "ovn-chassis-mac-mappings"); + sset_add(supported, "ovn-active-active-mappings"); sset_add(supported, "is-interconn"); /* Internal options. */ From patchwork Mon Nov 4 11:04:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006187 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 4Xhpb05Vxnz1xyJ for ; Mon, 4 Nov 2024 22:07:24 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id B5AD340E4E; Mon, 4 Nov 2024 11:07:19 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id wv171mXM-jWU; Mon, 4 Nov 2024 11:07: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 smtp4.osuosl.org 054AF40C7B Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 054AF40C7B; Mon, 4 Nov 2024 11:07:17 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 89B1AC08A3; Mon, 4 Nov 2024 11:07:16 +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 2F0FEC08A3 for ; Mon, 4 Nov 2024 11:07:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 2BBE040990 for ; Mon, 4 Nov 2024 11:05:14 +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 wfgxs_qYfoIz for ; Mon, 4 Nov 2024 11:05:11 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:260e::628; helo=eur03-am7-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 0DD02409FF Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 0DD02409FF Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=YNoBSwvK Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on20628.outbound.protection.outlook.com [IPv6:2a01:111:f403:260e::628]) by smtp2.osuosl.org (Postfix) with ESMTPS id 0DD02409FF for ; Mon, 4 Nov 2024 11:05:00 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=bBpUHJeljF82ZXl8VuQRSn8FdtG5J4cuiPv+yWh63rlZ7GThNdnfrtjh/eir+YtotEb4cfVWk0gNWhUAS3gf0JRLBzff0l3QPn+Tvuiil0g829UZ8be3RIq9qBw6l3GDtxVxc1ibYu+ixwEUO7V35yBChdRKyr8cBc5PaWW13IiEaBXZHpz7MQ8yyEJjPLIyvd80zj3EEaabx4EOCrkxweK8fGwf1IQ9/uuR8Jt6CIKWmwddZRJ7VJMiBxirEvQK9BPptal7bs4ka7jDxMAsCiXzXgixHa4U+JyoHwwWQRAPVB983levwEexsJXzOfsBI3epECGBO8w4KHGgkw/Cbg== ARC-Message-Signature: i=2; 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=1KzVf61YhxKU3jM0UYB2zXXM6rBCHCl1O3JHai6Sfdg=; b=Wlr+BJ2Kyxu65Cp6Kpr/Sxd56KfRHsIxgmBQaqX+TO+PqCZGb1pEGu4mL20VHpYqe+cgnup6keJRt8aOmXenIqG7JOykaYXa4w8nh/hIgqQwnf4KV+PRGL9HNN5FjdnbKfev6yelQWPpMGLnSKRtVqdqvBxRaJzMSxdpfB8IWFNOLCzhjzOycyZr+zj8FUqBnTyG+OMh6swhYxEymizfIlsj/D4Jo4eYO9t1EmFktOs8nY8SQbcWtCyPCLsolr6mt0w2gRXUb4x37Be5KMI8HGNBFVy4RIUXynzEWXaaUAegEJ21bGd11s57MsE8YntgY6Ug5tptFcXQ6x1m6FldAQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1KzVf61YhxKU3jM0UYB2zXXM6rBCHCl1O3JHai6Sfdg=; b=YNoBSwvKjhd1JSvjkNA4hG/YYaJvI+CKiG1fasvaLi8BZr3+MtFwfDKuIzVAIXoI4aVV1idXGJUs07K59j1qVeJCzFdPzFpKM7oKhxTu2+qzfUyOzl0pRlKWXrMr2pnQXt6p952ilefSFbgEHuM0k3BYTU2/xWL6cfWeKRaWDkIOS5OT0jIitznRw1XImH80EVHtLoOdq+XulwP9qtvqnhOgGbdPScMo8jrnSGw42dtfVXgsmJi12DqeUiODalGl0bZIVouNF56IxsCjZBPwiTJr1HDsWPb2g+78QA9upam5DWgsp3pWkf2Hpa3/YiZgVA3sGPW9IHODmaHfQUc9Ng== Received: from DUZPR01CA0084.eurprd01.prod.exchangelabs.com (2603:10a6:10:46a::11) by PAVPR10MB6909.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:328::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.15; Mon, 4 Nov 2024 11:04:57 +0000 Received: from DB3PEPF0000885F.eurprd02.prod.outlook.com (2603:10a6:10:46a:cafe::60) by DUZPR01CA0084.outlook.office365.com (2603:10a6:10:46a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:57 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DB3PEPF0000885F.mail.protection.outlook.com (10.167.242.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:57 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.108) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:57 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 8273803 X-ExclaimerImprintLatency: 2948171 X-ExclaimerImprintAction: fed1e82026b04795b8373f343ff6962e ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xrQxb1grKSq5YX2wUHYO9Gbk4bJolVcinjne0kIlzmpTCaNw4ZwxDee7D6iRPq/61IEb3UKeYvn5SN/Zq6fZb2rTURs7OY2cZuz8FDe09sqejMkQOO/0CFODjnCm+qilChJ78Lzjiyc3iH7gXra0/8+zI9R+w3o+qURO9pdcZCWn/jtKeKFDzCPN3+Va+DLRkes2vCaVP8ti1m/Q6F80pAYNxUg5ybwsDyhBxui00X581iCFVSSr2u7ZNvUfTSl0Xs4aeXQy/wma8HFgkG+kplHg1n0mtuNz31E/w26rBXos2Jp0P99rqszuk56cepDuG3i3rKB4EHTGvJeSNU/mbg== 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=1KzVf61YhxKU3jM0UYB2zXXM6rBCHCl1O3JHai6Sfdg=; b=gZgtdleTa+OM6jqass5EmIP7GTZubG6g0s/QBn21rkwYGm5GTyIC0PzNfEIVWHg6EDtqvSkVLFWjspV8UsR8Rj1B8HEL+oFneMinEhzKs2rj0M1YO0+0t1KQi/Cy+sVSlcWear5ejRCzALIgQAKg5HKGMWcPfnInHf+GJid9KJcvQOzaP+TiCExKsLwhEkWiwBkTXctI+niCc9UPSDHHNBHB7Q/jOCy9Raux8ZnTHvq+x/JBVmV2NCxwfRPQ/1W7PJft0IruNrEu4xOYKk3EY9Aw+a8uif+6IHh/6dBzOekosThryxmOr5ee/n9S47/V/JFfIICcTowWuVmjyOHPSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1KzVf61YhxKU3jM0UYB2zXXM6rBCHCl1O3JHai6Sfdg=; b=YNoBSwvKjhd1JSvjkNA4hG/YYaJvI+CKiG1fasvaLi8BZr3+MtFwfDKuIzVAIXoI4aVV1idXGJUs07K59j1qVeJCzFdPzFpKM7oKhxTu2+qzfUyOzl0pRlKWXrMr2pnQXt6p952ilefSFbgEHuM0k3BYTU2/xWL6cfWeKRaWDkIOS5OT0jIitznRw1XImH80EVHtLoOdq+XulwP9qtvqnhOgGbdPScMo8jrnSGw42dtfVXgsmJi12DqeUiODalGl0bZIVouNF56IxsCjZBPwiTJr1HDsWPb2g+78QA9upam5DWgsp3pWkf2Hpa3/YiZgVA3sGPW9IHODmaHfQUc9Ng== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:55 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:55 +0000 Date: Mon, 4 Nov 2024 12:04:53 +0100 To: dev@openvswitch.org Message-ID: Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0107.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::17) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DB3PEPF0000885F:EE_|PAVPR10MB6909:EE_ X-MS-Office365-Filtering-Correlation-Id: f1443ffe-0c3a-4054-f55d-08dcfcc08502 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: sZVWqAcj+QZvwt6wWAaTyxWFBDY9tIx6bMAJfs3UYd/z7/sjzqalt6BqXYBFNQRp3YY8jfT9f2kVn9GHz/bQMV0CXu5BG5rcMWIa8k8+Ra1JeMaERfDFn4xpKaspHB4OT7qMliNl3wTTxTo/qrJJRakx5EuDg80hTjTuEn+2sqbLxzxxwraiq7CwPaeWwJBocZSRstVfc8qv2fNZ9YwC4rXUC/MlyANgoM8niYfVelQ2uVrJmKYSVAtg1GNXI3mK43jiNfnJGGSr/3gh9aGEV40/8dohrwOwJ01DTUHfI/iZwd5GlFDPicr0K6Fb/co7W0i/MCoUz4rSm/UeoQHY77uaxuooCFWAX/BgPP/7y2KaGEUGmw+S5hn7PgSLEOS00ZR3dijpkXQ8JYBPdDxMVpBWghOi49APtPib21+xjCkSPkuwfkVLpgFBItELvJcxSRHbWL7hWf+SkCOx5LarJjylEL0PIg6MIvhh/LVkRFtNy+IPeeDF4/RkD+jAMAgDkBWSJjmUZws5XdISr0XX85Ac8GvRgmJNJAiXMkRn3UIUY/sW2mVsck9MwGh5/BJdJuNpGYW7ta2uISR4N692xrZ7QfrPc7FrD++P83lBv/yIjaHVZkE/NbDwOd6EL9BQ/gQMr3j3HvklufxMh9+9Rba3r11MAFd0JofqjS6gt5oxmwqfKwUK6X9bKQiXnah5e+h35AUaXhDpoPMRjbicVTgnWquL1mVMt45oxyQa4D9XCkXdrIdyHrgGVLTv1iVOzdBJvHnr8c3lrtVpkp8izOPX6M8kbVCSan3B4p+ovlUwQfPhWJNdTwe8NTDSgEh7DPKoTx9dPWxz4JPXvyPfd96n7GE3NpEY9OGNGf7UMQnd3UDM5GVdkYHewlVVb+uw4PlrvhBPClERXoHoX2jlCBhp3ZjHjp00npx2SP7hLE20aqe0XkPR2FoUHkle5RCrBPaIEpb/OXnJn+OfbRRNPTu+eAY6bbONB2QkReIZUOJcExDL6ZCEsrGAT/bN70r8smX7hE6/XD5JpWrN69mpSzRaLFnVOrKf8svK42vMNBj5WQybSJN4zmDC452njH4fKnjq90HrK3PlcWjET6Pq+JeRoP1NmRk7m1YJllR2irdyA5o6C9e1MK864tTCwn3usXLRT75GjgioBt8fQOP6H2ictMKdBK9O1GblLQgYR44EobT1E71ABnkh2xPMJQOQfkeODDW3iLVPeKqGlcKoLg2AB/bAxqBqX46+7fXHkaDG5+P7lntrqaZovfQu//vAJ1fsRgffQJ8Wz9XjXpayEj3ZQNd8dpILNudN0/pfM8HlR1QAgWl9sBYN0l5NFrqJ X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB3PEPF0000885F.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1747cbbd-4cd7-4b49-f775-08dcfcc08394 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|36860700013|376014|35042699022|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: 4LJOZSDwd12UmHqvw224WOmjRRRpU521ZwStcFkiCSFoirEDPSZ7jWqkd6gmFaTuECscTmP9ZUgqG6ND3uuTui7tYY1Y/0BPyVsohIUtVCeNQ8nTfTmNW9k8ZZJVb8O0fiI/7Sj5R2vhEiePHt1UDTQ7GeLcWOOmqb8rzK0T/5gfO27K7hc36pWisB57edP2WXDeI4RdmfsI9YKHI/bnXa8sYkFQjkx9ascL8NeU0yR42IetYCtEycp1S86lZeiLY/MqdM+GjeRGz2TQqOxzgmq9Ic+1xTScvL/k01N4p6+xhJC+YNhcB61Gzqc9Z01xM59HtRysECRjx58SuF/HQWKLz0m6ROxXteHEoInTehE156M4Q0Z1zS8mDm99U3iUp4QJH/WQlTcwKlLuFSNz48P5mdCbGaTVrgl4oKP4G//J7e7Xh0pkdGOlgKlJahADdyshuBeS0SEHebO/lPpOZIbEv5UXZBUBqWu8v2OWY6TcBn0H5AENKnWFuEi9tDqBKR6oWPmW1QJAs10r9uX5SLNPojeT4B9jyFDXMre5d6qEJJ3k3VFWGcKE/mSCr/mcjpm82w5n8KXfnBKBhYpGZQM2JNIwAF3NVkXEndyNiAlVUsNletgNtrl+GQAellapH1RC4WRPApoWAFFGYd4MBwyYdn4xGGJ3wFEt6S7AkL3aO9LgsvxCQ11GRzCpruHBZjwt0KnQhA1WwPAKeBdIH4m3s3+WBpD3vhH0C6CxvVIxJge62xNmjGz4pPzrqKm8aQWyiASf1357zjCoZeAAReU2zh6PcKbnI6Qj8UEDzz13L6CkOkLNOKtw35jk07Zp/ldx9tDcBLHEEzA0n9UI6MK8VKE9F2u5Z2HhL3JU0EG/XNY36d468jotULsnMQ5s0UiGl2CriQh6rk41T0K1hZVCpcmpvly9ZVzF5wvhhLNx4Jx4xtz1Tu59WvF2zmHt1A+2KwZ8pPj4TnIMP3edNnDYnMrRogx3EDzO+7kc1reOGzzLwfdUP2OMLfCR6sqwdueMukys22wBjvaFAGgd3mw579//dHrxI/6zlWqo/a5+HjnQtZbS/3fcEQWWOxuz2BSIOKLxtCYCGTdPwYkWAoZpFxOPAG6VSy7RU8478Vt6cJ1Z5wonU++QGiT63HylYhELnWqqnSpZBkBR/x+uTBabI34HQiK2ZfEaxcrOAVptE8O684836qYx3BWEm/ZWVhH9Ebom/b23kr8gHu2QJ0k2Pd5gjLXKGFcpkEhtPzNyNbiKecyqWnTVdZHt+JB4gB94dx3/dDxLLepWiVjk2dnfv0e74p/nldeIBObQPB4a8z7tIxD5bKhinAQolEPxN3Ubq2kQ/OZFHdqbFn09ehHjYvCAUGlUYEznThn9ba+TvyqcXAx4D2IIx+1ymF+L35Dbtgdda2xvpl0BgG0Vow== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(36860700013)(376014)(35042699022)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:57.1189 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f1443ffe-0c3a-4054-f55d-08dcfcc08502 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DB3PEPF0000885F.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR10MB6909 Subject: [ovs-dev] [PATCH ovn v2 29/32] northd: Support active-active lrps. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" In case we find a LRP (or a LSP connected to a LRP) that has options:active-active-lrp set we ignore it during normal processing in join_logical_ports. We add an additional section at the end where we then use these ports to generate derived Port_Bindings for each LRP + LSP combination once for each matching ovn-aa-port-mappings entry. In the end this gives us the same result as if someone would have precreated a LRP + LSP combination for each ovn-aa-port-mappings in the northbound. However it allows our users to benefit from active-active routing without their CMS needing to know about this feature (besides the active-active-lrp setting). Signed-off-by: Felix Huettner --- lib/automake.mk | 2 + lib/lrp-index.c | 43 +++++++ lib/lrp-index.h | 25 ++++ lib/ovn-util.c | 97 ++++++++++++++ lib/ovn-util.h | 11 ++ northd/en-northd.c | 4 + northd/inc-proc-northd.c | 6 + northd/northd.c | 272 +++++++++++++++++++++++++++++++++++++-- northd/northd.h | 10 ++ 9 files changed, 456 insertions(+), 14 deletions(-) create mode 100644 lib/lrp-index.c create mode 100644 lib/lrp-index.h diff --git a/lib/automake.mk b/lib/automake.mk index b69e854b0..90b8ed5a4 100644 --- a/lib/automake.mk +++ b/lib/automake.mk @@ -26,6 +26,8 @@ lib_libovn_la_SOURCES = \ lib/ovn-parallel-hmap.c \ lib/ip-mcast-index.c \ lib/ip-mcast-index.h \ + lib/lrp-index.c \ + lib/lrp-index.h \ lib/mac-binding-index.c \ lib/mac-binding-index.h \ lib/mcast-group-index.c \ diff --git a/lib/lrp-index.c b/lib/lrp-index.c new file mode 100644 index 000000000..ac64c4b45 --- /dev/null +++ b/lib/lrp-index.c @@ -0,0 +1,43 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "lib/lrp-index.h" +#include "lib/ovn-nb-idl.h" + +struct ovsdb_idl_index * +lrp_index_create(struct ovsdb_idl *idl) +{ + return ovsdb_idl_index_create1(idl, &nbrec_logical_router_port_col_name); +} + + +/* Finds and returns the lrp with the given 'name', or NULL if no such + * lrp exists. */ +const struct nbrec_logical_router_port * +lrp_lookup_by_name(struct ovsdb_idl_index *nbrec_lrp_by_name, + const char *name) +{ + struct nbrec_logical_router_port *target = + nbrec_logical_router_port_index_init_row(nbrec_lrp_by_name); + nbrec_logical_router_port_index_set_name(target, name); + + struct nbrec_logical_router_port *retval = + nbrec_logical_router_port_index_find(nbrec_lrp_by_name, target); + + nbrec_logical_router_port_index_destroy_row(target); + + return retval; +} + diff --git a/lib/lrp-index.h b/lib/lrp-index.h new file mode 100644 index 000000000..2c56933fc --- /dev/null +++ b/lib/lrp-index.h @@ -0,0 +1,25 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OVN_LRP_INDEX_H +#define OVN_LRP_INDEX_H 1 + +struct ovsdb_idl; + +struct ovsdb_idl_index *lrp_index_create(struct ovsdb_idl *); + +const struct nbrec_logical_router_port *lrp_lookup_by_name( + struct ovsdb_idl_index *nbrec_lrp_by_name, const char *name); + +#endif /* lib/lrp-index.h */ diff --git a/lib/ovn-util.c b/lib/ovn-util.c index 5d0db1a5a..c86f6f209 100644 --- a/lib/ovn-util.c +++ b/lib/ovn-util.c @@ -1074,6 +1074,103 @@ get_chassis_external_id_value_bool(const struct smap *external_ids, return ret; } +bool +chassis_find_active_active_networks(const struct sbrec_chassis *chassis, + const char *network_name, + struct chassis_aa_network + *chassis_aa_network) { + memset(chassis_aa_network, 0, sizeof *chassis_aa_network); + + const char *aa_ports = smap_get(&chassis->other_config, + "ovn-active-active-mappings"); + bool found = false; + char *curnet, *nextnet, *curport, *nextport, *start; + + /* Structure + * ovn-active-active-mappings="|" + * network=";;" + * port="," */ + nextnet = start = xstrdup(aa_ports); + while ((curnet = strsep(&nextnet, "|")) && *curnet) { + nextport = curnet; + char *network = strsep(&nextport, ";"); + if (strcmp(network, network_name)) { + continue; + } + found = true; + chassis_aa_network->network_name = xstrdup(network); + chassis_aa_network->n_addresses = 0; + while ((curport = strsep(&nextport, ";")) && *curport) { + char *mac, *ip; + + mac = strsep(&curport, ","); + ip = curport; + + if (!mac || !ip || !*mac || !*ip) { + VLOG_ERR("Invalid format for " + "ovn-active-active-mappings '%s'", + aa_ports); + continue; + } + + chassis_aa_network->addresses = xrealloc( + chassis_aa_network->addresses, + (chassis_aa_network->n_addresses + 1 + ) * sizeof *chassis_aa_network->addresses); + struct lport_addresses *address = + &chassis_aa_network->addresses[ + chassis_aa_network->n_addresses]; + init_lport_addresses(address); + + if (!eth_addr_from_string(mac, &address->ea)) { + VLOG_ERR("Invalid mac address in " + "ovn-active-active-mappings '%s'", + aa_ports); + free(address); + continue; + } + snprintf(address->ea_s, sizeof address->ea_s, ETH_ADDR_FMT, + ETH_ADDR_ARGS(address->ea)); + + ovs_be32 ip4; + struct in6_addr ip6; + unsigned int plen; + char *error; + + error = ip_parse_cidr(ip, &ip4, &plen); + if (!error) { + if (!ip4) { + VLOG_ERR("Invalid ip address in " + "ovn-active-active-mappings '%s'", + aa_ports); + destroy_lport_addresses(address); + continue; + } + + add_ipv4_netaddr(address, ip4, plen); + } else { + free(error); + + error = ipv6_parse_cidr(ip, &ip6, &plen); + if (!error) { + add_ipv6_netaddr(address, ip6, plen); + } else { + VLOG_ERR("Invalid ip address in " + "ovn-active-active-mappings '%s'", + aa_ports); + destroy_lport_addresses(address); + free(error); + continue; + } + } + chassis_aa_network->n_addresses++; + } + } + + free(start); + return found; +} + void flow_collector_ids_init(struct flow_collector_ids *ids) { ovs_list_init(&ids->list); diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 3ccd7d003..24ee55a9c 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -44,6 +44,7 @@ struct ovsrec_flow_sample_collector_set_table; struct sbrec_datapath_binding; struct sbrec_logical_flow; struct sbrec_port_binding; +struct sbrec_chassis; struct smap; struct svec; struct uuid; @@ -351,6 +352,16 @@ int64_t daemon_startup_ts(void); char *lr_lb_address_set_name(uint32_t lr_tunnel_key, int addr_family); char *lr_lb_address_set_ref(uint32_t lr_tunnel_key, int addr_family); +struct chassis_aa_network { + char *network_name; + struct lport_addresses *addresses; + size_t n_addresses; +}; + +bool chassis_find_active_active_networks(const struct sbrec_chassis *, + const char *, + struct chassis_aa_network *); + const char * get_chassis_external_id_value(const struct smap *, const char *chassis_id, diff --git a/northd/en-northd.c b/northd/en-northd.c index 8152ccbcf..664ace650 100644 --- a/northd/en-northd.c +++ b/northd/en-northd.c @@ -41,6 +41,10 @@ static void northd_get_input_data(struct engine_node *node, struct northd_input *input_data) { + input_data->nbrec_lrp_by_name = + engine_ovsdb_node_get_index( + engine_get_input("NB_logical_router", node), + "nbrec_lrp_by_name"); input_data->sbrec_chassis_by_name = engine_ovsdb_node_get_index( engine_get_input("SB_chassis", node), diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c index 99318c633..22227f349 100644 --- a/northd/inc-proc-northd.c +++ b/northd/inc-proc-northd.c @@ -19,6 +19,7 @@ #include #include "chassis-index.h" +#include "lrp-index.h" #include "ip-mcast-index.h" #include "static-mac-binding-index.h" #include "lib/inc-proc-eng.h" @@ -361,6 +362,8 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, .sb_idl = sb->idl, }; + struct ovsdb_idl_index *nbrec_lrp_by_name = + lrp_index_create(nb->idl); struct ovsdb_idl_index *sbrec_chassis_by_name = chassis_index_create(sb->idl); struct ovsdb_idl_index *sbrec_ha_chassis_grp_by_name = @@ -380,6 +383,9 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb, engine_init(&en_northd_output, &engine_arg); + engine_ovsdb_node_add_index(&en_nb_logical_router, + "nbrec_lrp_by_name", + nbrec_lrp_by_name); engine_ovsdb_node_add_index(&en_sb_chassis, "sbrec_chassis_by_name", sbrec_chassis_by_name); diff --git a/northd/northd.c b/northd/northd.c index 69d86f1c7..6884b7a0e 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -14,6 +14,7 @@ #include +#include #include #include @@ -30,9 +31,11 @@ #include "hmapx.h" #include "openvswitch/hmap.h" #include "openvswitch/json.h" +#include "openvswitch/shash.h" #include "ovn/lex.h" #include "lb.h" #include "lib/chassis-index.h" +#include "lib/lrp-index.h" #include "lib/ip-mcast-index.h" #include "lib/static-mac-binding-index.h" #include "lib/copp.h" @@ -1252,6 +1255,11 @@ ovn_port_cleanup(struct ovn_port *port) free(port->ps_addrs); port->ps_addrs = NULL; port->n_ps_addrs = 0; + if (port->is_active_active) { + ovs_assert(port->aa_chassis_name); + free(port->aa_mac); + free(port->aa_chassis_name); + } destroy_lport_addresses(&port->lrp_networks); destroy_lport_addresses(&port->proxy_arp_addrs); @@ -1433,6 +1441,32 @@ lrport_is_enabled(const struct nbrec_logical_router_port *lrport) return !lrport->enabled || *lrport->enabled; } +static bool +lrport_is_active_active(const struct nbrec_logical_router_port *lrport) +{ + if (!lrport) { + return false; + } + return smap_get_bool(&lrport->options, "active-active-lrp", false); +} + +static const struct nbrec_logical_router_port* +lsp_get_peer(struct ovsdb_idl_index *nbrec_lrp_by_name, + const struct nbrec_logical_switch_port *nbsp) +{ + if (!lsp_is_router(nbsp)) { + return NULL; + } + + const char *peer_name = smap_get( ->options, "router-port"); + if (!peer_name) { + return NULL; + } + + return lrp_lookup_by_name(nbrec_lrp_by_name, peer_name); +} + + static bool lsp_force_fdb_lookup(const struct ovn_port *op) { @@ -1462,6 +1496,18 @@ ovn_port_get_peer(const struct hmap *lr_ports, struct ovn_port *op) return ovn_port_find(lr_ports, peer_name); } +static const char * +ovn_port_get_mac(struct ovn_port *op) +{ + if (op->is_active_active) { + return op->aa_mac; + } else if (op->primary_port && op->primary_port->is_active_active) { + return op->primary_port->aa_mac; + } else { + return op->nbrp->mac; + } +} + static void ipam_insert_ip_for_datapath(struct ovn_datapath *od, uint32_t ip, bool dynamic) { @@ -2295,13 +2341,19 @@ join_logical_ports_lrp(struct hmap *ports, return op; } +struct active_active_port { + const struct nbrec_logical_switch_port *nbsp; + const struct nbrec_logical_router_port *nbrp; + struct ovn_datapath *switch_dp; + struct ovn_datapath *router_dp; +}; + static struct ovn_port * create_cr_port(struct ovn_port *op, struct hmap *ports, struct ovs_list *both_dbs, struct ovs_list *nb_only) { - char *redirect_name = ovn_chassis_redirect_name( - op->nbsp ? op->nbsp->name : op->nbrp->name); + char *redirect_name = ovn_chassis_redirect_name(op->key); struct ovn_port *crp = ovn_port_find(ports, redirect_name); if (crp && crp->sb && crp->sb->datapath == op->od->sb) { @@ -2346,6 +2398,8 @@ peer_needs_cr_port_creation(struct ovn_port *op) static void join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, + struct ovsdb_idl_index *nbrec_lrp_by_name, + struct ovsdb_idl_index *sbrec_chassis_by_name, struct hmap *ls_datapaths, struct hmap *lr_datapaths, struct hmap *ports, unsigned long *queue_id_bitmap, struct hmap *tag_alloc_table, struct ovs_list *sb_only, @@ -2355,6 +2409,8 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, ovs_list_init(nb_only); ovs_list_init(both); + struct shash active_active_ports = SHASH_INITIALIZER(&active_active_ports); + const struct sbrec_port_binding *sb; SBREC_PORT_BINDING_TABLE_FOR_EACH (sb, sbrec_pb_table) { struct ovn_port *op = ovn_port_create(ports, sb->logical_port, @@ -2371,6 +2427,20 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, = od->nbr->ports[i]; struct lport_addresses lrp_networks; + + if (lrport_is_active_active(nbrp)) { + struct ovn_port *op = ovn_port_find_bound(ports, nbrp->name); + if (op) { + ovs_list_remove(&op->list); + } + struct active_active_port *aap = xzalloc( + sizeof(struct active_active_port)); + aap->nbrp = nbrp; + aap->router_dp = od; + shash_add(&active_active_ports, nbrp->name, aap); + continue; + } + if (!extract_lrp_networks(nbrp, &lrp_networks)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); @@ -2388,6 +2458,16 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, for (size_t i = 0; i < od->nbs->n_ports; i++) { const struct nbrec_logical_switch_port *nbsp = od->nbs->ports[i]; + const struct nbrec_logical_router_port *nbrp + = lsp_get_peer(nbrec_lrp_by_name, nbsp); + if (lrport_is_active_active(nbrp)) { + struct active_active_port *aap = + shash_find_data(&active_active_ports, nbrp->name); + ovs_assert(aap); + aap->nbsp = nbsp; + aap->switch_dp = od; + continue; + } join_logical_ports_lsp(ports, nb_only, both, od, nbsp, nbsp->name, queue_id_bitmap, tag_alloc_table); @@ -2466,6 +2546,103 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, } } + /* Now we setup the active-active lrp/lsps */ + struct shash_node *aa_snode; + SHASH_FOR_EACH (aa_snode, &active_active_ports) { + const struct active_active_port *aap = aa_snode->data; + const struct nbrec_logical_switch_port *nbsp = aap->nbsp; + const struct nbrec_logical_router_port *nbrp = aap->nbrp; + ovs_assert(nbrp); + ovs_assert(aap->switch_dp); + ovs_assert(aap->router_dp); + + if (aap->switch_dp->n_localnet_ports != 1) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "active-active lrp '%s' is not connect to a " + "ls with exactly one localnet port", nbrp->name); + continue; + } + + const struct ovn_port *localnet_port = + aap->switch_dp->localnet_ports[0]; + + const char *network_name = + smap_get(&localnet_port->nbsp->options, "network_name"); + if (!network_name) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "active-active lrp '%s' has a localnet port " + "connected with no network_name", nbrp->name); + continue; + } + + if (!nbrp->ha_chassis_group) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "missing 'ha_chassis_group' for" + " active-active-port %s", nbrp->name); + continue; + } + + for (size_t i = 0; i < nbrp->ha_chassis_group->n_ha_chassis; i++) { + const struct nbrec_ha_chassis *hc + = nbrp->ha_chassis_group->ha_chassis[i]; + + const struct sbrec_chassis *chassis = chassis_lookup_by_name( + sbrec_chassis_by_name, hc->chassis_name); + if (!chassis) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "'ha_chassis_group' contains not found" + " chassis %s", hc->chassis_name); + continue; + } + + struct chassis_aa_network networks; + if (!chassis_find_active_active_networks(chassis, network_name, + &networks)) { + static struct vlog_rate_limit rl + = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "chassis %s does not contain network" + " but it is in ha_chassis_group", chassis->name); + continue; + } + + for (size_t j = 0; j < networks.n_addresses; j++) { + char *lrp_name = xasprintf("%s-%s-%"PRIuSIZE, + nbrp->name, chassis->name, j); + char *lsp_name = xasprintf("%s-%s-%"PRIuSIZE, + nbsp->name, chassis->name, j); + struct ovn_port *lrp = + join_logical_ports_lrp(ports, nb_only, both, &dgps, + aap->router_dp, nbrp, + lrp_name, &networks.addresses[j]); + struct ovn_port *lsp = + join_logical_ports_lsp(ports, nb_only, both, + aap->switch_dp, nbsp, + lsp_name, queue_id_bitmap, + tag_alloc_table); + free(lrp_name); + free(lsp_name); + if (!lrp || !lsp) { + continue; + } + lrp->peer = lsp; + lsp->peer = lrp; + lrp->is_active_active = true; + lsp->is_active_active = true; + lrp->aa_mac = xstrdup(networks.addresses[j].ea_s); + lrp->aa_chassis_name = xstrdup(chassis->name); + lsp->aa_chassis_name = xstrdup(chassis->name); + lrp->aa_chassis_index = j; + lsp->aa_chassis_index = j; + } + free(networks.network_name); + free(networks.addresses); + } + } + struct hmapx_node *hmapx_node; HMAPX_FOR_EACH (hmapx_node, &dgps) { op = hmapx_node->data; @@ -2523,6 +2700,8 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, HMAP_FOR_EACH (op, key_node, ports) { ipam_add_port_addresses(op->od, op); } + + shash_destroy_free_data(&active_active_ports); } /* Returns an array of strings, each consisting of a MAC address followed @@ -2876,6 +3055,51 @@ sync_ha_chassis_group_for_sbpb( sbrec_port_binding_set_ha_chassis_group(pb, sb_ha_grp); } +static char * +generate_ha_chassis_group_active_active( + struct ovsdb_idl_txn *ovnsb_txn, + struct ovsdb_idl_index *sbrec_chassis_by_name, + struct ovsdb_idl_index *sbrec_ha_chassis_grp_by_name, + const char *chassis_name, + const struct sbrec_port_binding *pb) +{ + bool new_sb_chassis_group = false; + char *chassis_group_name = xasprintf( + "active-active-fixed-%s", chassis_name); + const struct sbrec_ha_chassis_group *sb_ha_grp = + ha_chassis_group_lookup_by_name( + sbrec_ha_chassis_grp_by_name, chassis_group_name); + + if (!sb_ha_grp) { + sb_ha_grp = sbrec_ha_chassis_group_insert(ovnsb_txn); + sbrec_ha_chassis_group_set_name(sb_ha_grp, chassis_group_name); + new_sb_chassis_group = true; + } + + if (new_sb_chassis_group) { + struct sbrec_ha_chassis **sb_ha_chassis = NULL; + sb_ha_chassis = xcalloc(1, sizeof *sb_ha_chassis); + const struct sbrec_chassis *chassis = + chassis_lookup_by_name(sbrec_chassis_by_name, chassis_name); + sb_ha_chassis[0] = sbrec_ha_chassis_insert(ovnsb_txn); + /* It's perfectly ok if the chassis is NULL. This could + * happen when ovn-controller exits and removes its row + * from the chassis table in OVN SB DB. */ + sbrec_ha_chassis_set_chassis(sb_ha_chassis[0], chassis); + sbrec_ha_chassis_set_priority(sb_ha_chassis[0], 1); + const struct smap external_ids = + SMAP_CONST1(&external_ids, "chassis-name", + chassis_name); + sbrec_ha_chassis_set_external_ids(sb_ha_chassis[0], &external_ids); + sbrec_ha_chassis_group_set_ha_chassis(sb_ha_grp, sb_ha_chassis, + 1); + free(sb_ha_chassis); + } + + sbrec_port_binding_set_ha_chassis_group(pb, sb_ha_grp); + return chassis_group_name; +} + /* This functions translates the gw chassis on the nb database * to HA chassis group in the sb database entries. */ @@ -3130,14 +3354,29 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn *ovnsb_txn, "ignoring the latter.", op->nbrp->name); } - /* HA Chassis group is set. Ignore 'gateway_chassis'. */ - sync_ha_chassis_group_for_sbpb(ovnsb_txn, - sbrec_chassis_by_name, - sbrec_ha_chassis_grp_by_name, - op->nbrp->ha_chassis_group, - op->sb); - sset_add(active_ha_chassis_grps, - op->nbrp->ha_chassis_group->name); + if (op->primary_port && op->primary_port->is_active_active) { + + /* Generate new HA Chassis group just bound to one node. */ + char *ha_chassis_group = + generate_ha_chassis_group_active_active(ovnsb_txn, + sbrec_chassis_by_name, + sbrec_ha_chassis_grp_by_name, + op->primary_port->aa_chassis_name, + op->sb); + sset_add(active_ha_chassis_grps, + ha_chassis_group); + free(ha_chassis_group); + } else { + + /* HA Chassis group is set. Ignore 'gateway_chassis'. */ + sync_ha_chassis_group_for_sbpb(ovnsb_txn, + sbrec_chassis_by_name, + sbrec_ha_chassis_grp_by_name, + op->nbrp->ha_chassis_group, + op->sb); + sset_add(active_ha_chassis_grps, + op->nbrp->ha_chassis_group->name); + } } else if (op->nbrp->n_gateway_chassis) { /* Legacy gateway_chassis support. * Create ha_chassis_group for the Northbound gateway_chassis @@ -4252,6 +4491,7 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_mac_binding_table *sbrec_mac_binding_table, const struct sbrec_ha_chassis_group_table *sbrec_ha_chassis_group_table, const struct sbrec_route_table *sbrec_route_table, + struct ovsdb_idl_index *nbrec_lrp_by_name, struct ovsdb_idl_index *sbrec_chassis_by_name, struct ovsdb_idl_index *sbrec_chassis_by_hostname, struct ovsdb_idl_index *sbrec_ha_chassis_grp_by_name, @@ -4272,7 +4512,10 @@ build_ports(struct ovsdb_idl_txn *ovnsb_txn, /* Borrow ls_ports for joining NB and SB for both LSPs and LRPs. * We will split them later. */ struct hmap *ports = ls_ports; - join_logical_ports(sbrec_port_binding_table, ls_datapaths, lr_datapaths, + join_logical_ports(sbrec_port_binding_table, + nbrec_lrp_by_name, + sbrec_chassis_by_name, + ls_datapaths, lr_datapaths, ports, queue_id_bitmap, &tag_alloc_table, &sb_only, &nb_only, &both); @@ -12974,7 +13217,7 @@ build_lrouter_icmp_packet_toobig_admin_flows( " (ip6 && icmp6.type == 2 && icmp6.code == 0)) &&" " eth.dst == %s && !is_chassis_resident(%s) &&" " flags.tunnel_rx == 1", - op->nbrp->mac, op->cr_port->json_key); + ovn_port_get_mac(op), op->cr_port->json_key); ds_clear(actions); ds_put_format(actions, "outport <-> inport; inport = %s; next;", op->json_key); @@ -13017,7 +13260,7 @@ build_lswitch_icmp_packet_toobig_admin_flows( "((ip4 && icmp4.type == 3 && icmp4.code == 4) ||" " (ip6 && icmp6.type == 2 && icmp6.code == 0)) && " "eth.src == %s && outport == %s && flags.tunnel_rx == 1", - peer->nbrp->mac, op->json_key); + ovn_port_get_mac(peer), op->json_key); ovn_lflow_add(lflows, op->od, S_SWITCH_IN_CHECK_PORT_SEC, 120, ds_cstr(match), "outport <-> inport; next;", op->lflow_ref); @@ -13026,7 +13269,7 @@ build_lswitch_icmp_packet_toobig_admin_flows( "((ip4 && icmp4.type == 3 && icmp4.code == 4) ||" " (ip6 && icmp6.type == 2 && icmp6.code == 0)) && " "eth.dst == %s && flags.tunnel_rx == 1", - peer->nbrp->mac); + ovn_port_get_mac(peer)); ds_clear(actions); ds_put_format(actions, "outport <-> inport; next(pipeline=ingress,table=%d);", @@ -19055,6 +19298,7 @@ ovnnb_db_run(struct northd_input *input_data, input_data->sbrec_mac_binding_table, input_data->sbrec_ha_chassis_group_table, input_data->sbrec_route_table, + input_data->nbrec_lrp_by_name, input_data->sbrec_chassis_by_name, input_data->sbrec_chassis_by_hostname, input_data->sbrec_ha_chassis_grp_by_name, diff --git a/northd/northd.h b/northd/northd.h index 75ad86973..12fe83440 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -66,6 +66,7 @@ struct northd_input { const struct chassis_features *features; /* Indexes */ + struct ovsdb_idl_index *nbrec_lrp_by_name; struct ovsdb_idl_index *sbrec_chassis_by_name; struct ovsdb_idl_index *sbrec_chassis_by_hostname; struct ovsdb_idl_index *sbrec_ha_chassis_grp_by_name; @@ -664,6 +665,15 @@ struct ovn_port { /* Only used for the router type LSP whose peer is l3dgw_port */ bool enable_router_port_acl; + /* Used for active-active port bindings to store the data they where + * generated from */ + bool is_active_active; + char *aa_chassis_name; + size_t aa_chassis_index; + /* The following value is only set on the lrp side of an + * active-active port binding */ + char *aa_mac; + /* Reference of lflows generated for this ovn_port. * * This data is initialized and destroyed by the en_northd node, but From patchwork Mon Nov 4 11:04:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006192 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (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 4XhpbY1fcdz1xwF for ; Mon, 4 Nov 2024 22:07:53 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 88FA2410E5; Mon, 4 Nov 2024 11:07:51 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id Yr78268NliPz; Mon, 4 Nov 2024 11:07:49 +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 smtp4.osuosl.org 77002406BE Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 77002406BE; Mon, 4 Nov 2024 11:07:49 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 58198C08A6; Mon, 4 Nov 2024 11:07:49 +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 22796C08A8 for ; Mon, 4 Nov 2024 11:07:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 2CDAF408F0 for ; Mon, 4 Nov 2024 11:05:25 +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 Xzaa74YosgKa for ; Mon, 4 Nov 2024 11:05:17 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2612::60e; helo=eur05-am6-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 8545B40A15 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 8545B40A15 Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=SaV8Y0wp Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2060e.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::60e]) by smtp2.osuosl.org (Postfix) with ESMTPS id 8545B40A15 for ; Mon, 4 Nov 2024 11:05:06 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=sCJhnKeBVuMBOcEvpf8YTXBDwG7iiXl9fMUu1vAwSOKWr/yBy8aHTRH/qQZSToPBL+hN+7iK7TxggyI/Yu0MeSiR5E8FAsV+yOVhnQm6NNuKHtct9bPHclEV8o8quUWm+99rlNwWju/DD+5S3diPYpZ/SbFT0R7wkrTXdVT7xGSk96tGNE0XaN3n/OHzGGTYHMJHU2IT56TNSDz4cqxZkMGsF4o+mP6vkNCNWW2NmX4FbVtOlRQSxDS0YtpdWIvCrQDqLrFEhuoBUGwNKcoGRJEGccrYhpyIpjthyCSuXFyxvHTjhPGomamAmSRLv7ax2kEgnfRQJSSy/NqF++Cj+A== ARC-Message-Signature: i=2; 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=inSM54uhhL3MJM4LnOHfWZEQyBdQGovNtiyXnjiyzkE=; b=iKyLH7JRazO6VYMjKBkvqqKlisyEnzfF+iAK9k4hYErO5rO4UonNy0/cvuf6aSA95FkZmmP7GjfCr8zi4SdAJjmsA2kbJVH8SEIDUsXTIJXhtqK5nPryfmeRr7IVQUuXqpg6F43doWc38TY2Yt4x7S844r9acnNl4RG92hxqd4lfE020CNuS6fWyB+27Wv3zjXY6J1+OD6feFNG96awTGESxO+i7o/wzpDby73WWD7GSG/7lwydPYShgXUcp4HtB7jFXuE/J6IxuegmG3G/3QZoDhbZmZJmGLzPDzsDZwMimyUn/Rpm0scIwg2FLkD+4mpUQLjasqgYXVx4Lnqp3XQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=inSM54uhhL3MJM4LnOHfWZEQyBdQGovNtiyXnjiyzkE=; b=SaV8Y0wpXUi0G7N7lKTUDzm1ObVm4fq8PxdM9aE8+McZCPr2XXY+YjlGBOMIlkz8L56q1KkEJ1qydgpthbObOeee+Q0pMp3Qz7w3ud/A4iq2o4ZxDdWOjc7StJy3+IML+grwAaepxUrGI/lwfUCVbaA0mgQsxbRjkV7jJKZJ86DVF2nQl8wdpJv8Xl3x/gZcG6uay+Bus8cu8oxkVRP9ndkDx8dOUSWocoOvx6eCOuOqguX3LSwPGnhZdBIj99r/pFhL/YzwvzIgi8xJCqVuk5Jcfb68xX4mS8qv9Wx+EkSPnUBljhgJDATdYPRQeU2hBne8nsZgFVkYzgmXT5A2rw== Received: from AM8P190CA0003.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::8) by DB4PR10MB6311.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:381::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:04:59 +0000 Received: from AM4PEPF00027A6B.eurprd04.prod.outlook.com (2603:10a6:20b:219:cafe::8c) by AM8P190CA0003.outlook.office365.com (2603:10a6:20b:219::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:04:58 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by AM4PEPF00027A6B.mail.protection.outlook.com (10.167.16.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:04:58 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.113) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:04:58 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5528566 X-ExclaimerImprintLatency: 4237720 X-ExclaimerImprintAction: 2929eaa0113441aa8351d8806832a1b8 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DAFJbIxrJb9/edPgdCNk73sz2hm+0WZnn5ZUwcp8toXm4O3/svE0eeVQYS84wxWw05LarsB8ayOIuLnIW6Hy2kSZ6ItL8ymYiAr6/wJWv8L9q+g/Dv6rlB7AGIAoMw1VRvRf19D5pQJc9Tg/AJtNr1YTTyI9cMzlI470ydCcSU0hjw6cxCPiJdmve0p3FNEHZlRPxqZJ3Q5WAA/NEDbzO24nWEpLRLMiUYDRCZentTzPMobrWJV0RgnsV3EX+wJxYfCqpkN6uoPA2PbfJdZlXx/kn9FMsSk2iageMIiKT5CVIdFGaE4SGBoeUINqF/4CZrSinxdVnyThHCjlXgE9eQ== 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=inSM54uhhL3MJM4LnOHfWZEQyBdQGovNtiyXnjiyzkE=; b=gpA5XRbphJAnI+78ivWeUYWaqTFwm4gu95Nu2IjCFR+sdemSFJxENICO7dwLdZ/BNZvHOBaM9mCYIablK0i2WeFmdVBYqA7iVPDsILk+3l4hOekXeG0RF7bnOX7eb05SPmT7Lp8UqLUaVEhnjUPGbVKev+odF5LhxJ69cPAq0DcFqtDB2IdKhxEPSyKpqut3fE7/kAE1aGE6xIiZtwD5g/dtA7QCC4MsVMDWqWTwWDUqsSzIqlJaKrJyCukMVLoe06krKe9D1r5EcXNiBhhLusf0LdOjJ4TQyeXU5p+qIKqSrh9SEW+Ts/dGdG3ETpBrTWkpalVogdYsVHtkbJcAoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=inSM54uhhL3MJM4LnOHfWZEQyBdQGovNtiyXnjiyzkE=; b=SaV8Y0wpXUi0G7N7lKTUDzm1ObVm4fq8PxdM9aE8+McZCPr2XXY+YjlGBOMIlkz8L56q1KkEJ1qydgpthbObOeee+Q0pMp3Qz7w3ud/A4iq2o4ZxDdWOjc7StJy3+IML+grwAaepxUrGI/lwfUCVbaA0mgQsxbRjkV7jJKZJ86DVF2nQl8wdpJv8Xl3x/gZcG6uay+Bus8cu8oxkVRP9ndkDx8dOUSWocoOvx6eCOuOqguX3LSwPGnhZdBIj99r/pFhL/YzwvzIgi8xJCqVuk5Jcfb68xX4mS8qv9Wx+EkSPnUBljhgJDATdYPRQeU2hBne8nsZgFVkYzgmXT5A2rw== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:57 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:57 +0000 Date: Mon, 4 Nov 2024 12:04:55 +0100 To: dev@openvswitch.org Message-ID: <90ba2b325d56d71d191b6d064f87b4677960ca8f.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0107.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::17) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|AM4PEPF00027A6B:EE_|DB4PR10MB6311:EE_ X-MS-Office365-Filtering-Correlation-Id: 8468a98c-b108-4afe-fa89-08dcfcc085c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: OpER7TUieMslInwH3acr8iMnDB7aHqeg800PPxIs37xAVlMDXiQSPpMo8EMkiIzj3Wu9L3i0zuhy5R9O//nIQU0Erysu5UssvtszanvEjV/d0psikB3Sp+AwyuwjKUATFN6ukUEFsijVC8R/lAYaKcdWk8sPiJcS6omBleskS6kHn8H9Unpis2PrVMN6YaOKa3uZ12Ug7vIhHAyCA84La7tMMkHLrtWkm5L1FnBaFFPh5gNamL4Uz5TI20M5Hu/wCixL7cSmQbIknX9Cojm7oqHS+D9F8SIrQJEGA2dAqJHcEMb349/GT4b2curOTsUsb7kfsQFS7OZvwqL5ebx2OL9SqHod1e7fjuBMxkIzhZYzgzUMevR/DPuin4OTw0ubwlMPI5+zw0uOnvgYybRyLylf71GSXkNgX6Tm3/FJd+oWCFxvLOXDLPHcUwr2eW1g1gaWOQhFY9LpwdRQ3ekgdAljzfOZf+2ak88g8JKh5pci+zIirysxs/GuHBec/kN55by0tPX0f647vtCzki2LE01SUOI7p65sxrOCsM2Y7sPTokQeNfyXEc02O0qspk3iBDXxOXe8thlSfm9DquPNeKiL2dngXMri7uVBdUouUD2T5E1WtDYwMKx1jHRN/rZaMcE2DStC8MNi/JjY9xhx/i0A2wGhHrf06I7BM5uYgNvMCNQNKQa6/51AzDMZcgzKMfLD8wuf2q8btzjOok5D+WhzCpgn+6Xia9IvLdAxn1Djqxtt10GlndA1TVaFXEgj53Scqt2DVqYXwggJMhHQo7Ox1L/ShmX0Ub4ZImDhQz8DkjfP44E2E8Dl9BOvdDt4OH7RT8Tk8VKQgIjfu9L1MiSl1MOT85pc/mXxwDNXSMmPldmc9FZNUH54o3x7egK8IqqEuWzRXFA+7yzBaNA7sdQPlKUAbB1C6bN9zldCnRCZ0q51ktzIrXEgCYH3jeCX9oB02mITp/XdlwwT+z0pv/TypSw+SULTYQ/u2URvFG0aOS77IUIJjqQeUy/ADz+7wqoGuEqY6ejTEomSnOLeMB79YD9Fvzsg2C0gavZVR466R7K4fQG5yApDFUk/bAqOhDJQY7/oztfVdnTXuWzDMldLyO1a5NN+aampKyYmRod6vDC3HogPx0S7xR4+L0MAkRMmW2RZA4FeyII3Gv1yEJWqxrIKWKOoL1cFHlCtwQli3zZRDj8FtaaRRYjCohe3i9V5NOmu1x37GNns8NEJMbqrDgaKOhVJ6/hvgvjS2JQVH+/6vEJwOOBraAkKi1bOj7z93iUlE7WUvdRAxMmtrSdsaV+KVfV/vAdc8XUcDLeV9WDNu6WzQeds9NIetzXG X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00027A6B.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 404bfaa4-8153-4214-f47f-08dcfcc084c8 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|35042699022|14060799003|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: H5iAvhwKodIffwSA232hN9H5E/ZPLDynRSn3qvPKFJnxZ6fPD1SLKz37i5Kavc+4DabOlmItvHt7rZgHWwudfXbWyQemNzIomMmyIav+VxBx9xOe1u74AZdiZwjWXEorLZtkh9QMUBEgjLEt8Yxs0QEVCtWgccv78YHE5VJRspETKWmRTS5CZ7k8EUaNSf9t5jWYPNLXySIAIyhD5JFo8JfgzTBJGsw7tBzckqVb5ItYl4DKT2us+na6WfuuD1V9r2oKOx7sWEBUbIi2tyuI9KZ97rKzHjo4BN1DmWEDbD/XE/4ywCOMvz/Ex2rBpB81HruhoKEookbIVQblKUYKW1BKtZ/2byeRE9CHouZV4BPKeZqlGtsH5mksVxWlWQH/QEeDAVryCOQPZDtT4mNO+nhCTaKKPXV3jepNP/ausC0wx9XgBHT/Ugu4H9j9QwMUafFU7GULCEgQcXXJQ2l252Xif4liVGVb170467HA3wrNjxjautpdDVcO0dtk7TtO37iDgTy/owl2VIzqvXxwkCyVrI+nPbUa9is8PF0jPT1MruDcbbBewQM69VJSNFOIxc+JKud7e7earvuAFTOsQ7MO0edJo5jUcO87hPfKbmlSwipESi2bMdGYSjGbiRLUgMveI/eb5cLvYtMAAL9p3WSWxnkkNvJXNVB7RpTp2V/4WVAlsrFc0a9rZnm+j/xI3y5YVNSlVLirSHZLKIEbNxTPsRMbi9Wex4BvC9vsto1qbVJyOYtgj0ogw0ArFut2yTXga7k4HrQpVA7eADK8AcyfdB7eTC8uLsA0PDpotkOyA6xUs9jF0xDupTNt9lYC5yuFeOeKktc9ZC0xt+5ivaCzkvwTlKh9EBreQ29CwnjNk7HI4h22XduSPK5z++g4DjKZaN7sIjEPw6UirnXhtQTnYRspCVpdSfQWs/ADRM87G1Va3c88PjgfSNsUzE/6FBz/T0IcTuztay0uvcDBWim67IuOPt+v5ei2ZA0//eaJbyRp4xgO+8vcafZ2+a7KFMs7Q4tJJDgs2pqn8PeOchm8k7IrqDB/5S5fs5dvEcsbp+nWAGbVW9Gdh0un9AEyJ3KECxzr+AoIlekgvT7gZC4KZWRlQ8lgr+Xym20mA6BqCCWm9VvLsKteSNHW3csRdAj0X825DdeuJhSqf2iye8r2Dgi4t4ct4gfbnmXqimj9HpGNGfvHUQVciSGppvn6BAa0rKGKDIPLYZXhHc6Fr9aDXCuPGd3xPygmu8bSeOpHV2Y+Mj3bBcKUyMdShtlTUlwxPePDYcFtfJ3iFAGfl+DEDerE08lj6UWtceQ4xV5y+8whZVZ/kJCKGqZZpM2xNmFEeVIgEZWK4+JMhUjCs2DoBSpTuNYTubOGlIknihLfwvZnUR0io6Nl3vKMjE+lb6sN3whhFZN/6bMywSQmtQ== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(35042699022)(14060799003)(82310400026)(1800799024)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:04:58.3854 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8468a98c-b108-4afe-fa89-08dcfcc085c8 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00027A6B.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR10MB6311 Subject: [ovs-dev] [PATCH ovn v2 30/32] northd: Support active-active bgp redirects. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" add support for routing-protocol-redirects in combination with active-active routing. Signed-off-by: Felix Huettner --- northd/northd.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index 6884b7a0e..05edb1cad 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -2343,6 +2343,7 @@ join_logical_ports_lrp(struct hmap *ports, struct active_active_port { const struct nbrec_logical_switch_port *nbsp; + const struct nbrec_logical_switch_port *routing_protocol_redirect; const struct nbrec_logical_router_port *nbrp; struct ovn_datapath *switch_dp; struct ovn_datapath *router_dp; @@ -2410,6 +2411,7 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, ovs_list_init(both); struct shash active_active_ports = SHASH_INITIALIZER(&active_active_ports); + struct shash aa_redirect_targets = SHASH_INITIALIZER(&aa_redirect_targets); const struct sbrec_port_binding *sb; SBREC_PORT_BINDING_TABLE_FOR_EACH (sb, sbrec_pb_table) { @@ -2438,6 +2440,12 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, aap->nbrp = nbrp; aap->router_dp = od; shash_add(&active_active_ports, nbrp->name, aap); + + const char *redirect_port_name = smap_get(&nbrp->options, + "routing-protocol-redirect"); + if (redirect_port_name) { + shash_add(&aa_redirect_targets, redirect_port_name, aap); + } continue; } @@ -2468,6 +2476,12 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, aap->switch_dp = od; continue; } + struct active_active_port *aap = + shash_find_data(&aa_redirect_targets, nbsp->name); + if (aap) { + aap->routing_protocol_redirect = nbsp; + continue; + } join_logical_ports_lsp(ports, nb_only, both, od, nbsp, nbsp->name, queue_id_bitmap, tag_alloc_table); @@ -2551,6 +2565,8 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, SHASH_FOR_EACH (aa_snode, &active_active_ports) { const struct active_active_port *aap = aa_snode->data; const struct nbrec_logical_switch_port *nbsp = aap->nbsp; + const struct nbrec_logical_switch_port *nbsp_rpr = + aap->routing_protocol_redirect; const struct nbrec_logical_router_port *nbrp = aap->nbrp; ovs_assert(nbrp); ovs_assert(aap->switch_dp); @@ -2637,6 +2653,18 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, lsp->aa_chassis_name = xstrdup(chassis->name); lrp->aa_chassis_index = j; lsp->aa_chassis_index = j; + + if (nbsp_rpr) { + char *lsp_rpr_name = xasprintf("%s-%s-%"PRIuSIZE, + nbsp_rpr->name, + chassis->name, j); + join_logical_ports_lsp(ports, nb_only, both, + aap->switch_dp, nbsp_rpr, + lsp_rpr_name, queue_id_bitmap, + tag_alloc_table); + free(lsp_rpr_name); + } + } free(networks.network_name); free(networks.addresses); @@ -2701,6 +2729,7 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, ipam_add_port_addresses(op->od, op); } + shash_destroy(&aa_redirect_targets); shash_destroy_free_data(&active_active_ports); } @@ -14379,6 +14408,20 @@ build_arp_resolve_flows_for_lrp(struct ovn_port *op, } } +static char* +ovn_port_get_redirect_port_name(struct ovn_port *op) { + const char *rpr = smap_get(&op->nbrp->options, + "routing-protocol-redirect"); + if (!rpr) { + return NULL; + } + if (op->is_active_active) { + return xasprintf("%s-%s-%"PRIuSIZE, rpr, + op->aa_chassis_name, op->aa_chassis_index); + } + return xstrdup(rpr); +} + static void build_routing_protocols_redirect_rule__( const char *s_addr, const char *redirect_port_name, int protocol_port, @@ -14512,8 +14555,7 @@ build_lrouter_routing_protocol_redirect( /* Proceed only for LRPs that have 'routing-protocol-redirect' option set. * Value of this option is the name of LSP to which the routing protocol * traffic will be redirected. */ - const char *redirect_port_name = smap_get(&op->nbrp->options, - "routing-protocol-redirect"); + char *redirect_port_name = ovn_port_get_redirect_port_name(op); if (!redirect_port_name) { return; } @@ -14529,6 +14571,7 @@ build_lrouter_routing_protocol_redirect( "Switch Port. Routing protocol redirecting won't be " "configured.", op->key); + free(redirect_port_name); return; } if (lsp_in_peer->od != op->peer->od) { @@ -14539,6 +14582,7 @@ build_lrouter_routing_protocol_redirect( "option. Routing protocol redirecting won't be " "configured.", op->key, redirect_port_name); + free(redirect_port_name); return; } @@ -14550,6 +14594,7 @@ build_lrouter_routing_protocol_redirect( "were set via 'routing-protocols' options. This " "configuration has no effect.", op->key); + free(redirect_port_name); return; } @@ -14597,6 +14642,7 @@ build_lrouter_routing_protocol_redirect( ds_cstr(match), REGBIT_PORT_SEC_DROP " = 1; next;", lflow_ref); + free(redirect_port_name); } /* This function adds ARP resolve flows related to a LSP. */ From patchwork Mon Nov 4 11:04:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006193 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU; 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 4Xhpbm1vbfz1xwF for ; Mon, 4 Nov 2024 22:08:04 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 6194B818DC; Mon, 4 Nov 2024 11:08:02 +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 9A3-PpbjDc4Y; Mon, 4 Nov 2024 11:08:00 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 8405B813F6 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 8405B813F6; Mon, 4 Nov 2024 11:07:41 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2A49BC08A3; Mon, 4 Nov 2024 11:07:41 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 09C2FC08A6 for ; Mon, 4 Nov 2024 11:07:40 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 1233B60A4B for ; Mon, 4 Nov 2024 11:05:28 +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 tS4zjkXM63d1 for ; Mon, 4 Nov 2024 11:05:25 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::60d; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 37F7D608A0 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 37F7D608A0 Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=Ie86LGsU Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2060d.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::60d]) by smtp3.osuosl.org (Postfix) with ESMTPS id 37F7D608A0 for ; Mon, 4 Nov 2024 11:05:09 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=TitH+ssrgYVKmNNFk3J5/mzrUsmr2xTgmxxsejMw1S3T3s40W+zjFZNVSZcj2iekGl5gsoTrTDXaHY8yLwzTeKvgReb0CNWtcMq6qmgyeEa+DxvzTdJjDB6CwfCOKLfvDNl4HNR+oqg0CuwHDAPag9pkQMjz3aiMit1xMiXPAQZP7KGNn2VeTSf0UDXHYJCqOefuHsCAEd/c3iWY4dPTkPo21sUz5Yp93FygyKxxwUwvikYrVJ8LWwz7BPTDYxlthJk00pb0cnzUwmBjWitebnrF52BOPExIMxi3XyBNKfq4XDXKfYburF351vp0SwRTcsNbhJJOtJ0cErxLZXd4YA== ARC-Message-Signature: i=2; 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=49IFJ83vOdMmyoqNxVfsG3iJuxNFJP+yxyQV8lciOyg=; b=nd1VnEFa9b1IKiUbxN8Ql+V/AYa3/TJ+dPXY54xXRn29+S0+qgiSq2exyVpiYRplE0WowMXWFApYXYwnigzcBk5q10lfqdwnKStERHBLO8rK7NRUMNQ1Yj6QupjzObLhko5Ri+DMGzth8k84S1TRp9fiK4EgEqhlGVjG+iZN81MR78JYK5fFbhnDuzg3fZ/5fd0u8faK0ZD+6B0FTnutwmVvF29S38B7+bET9UpJZV4carTDtv2Ql++gV1Yho4ovEn0O3kkOYDeehXY1NXJaE/HhC7lWux9ix1sYodJGIPOeRFyFPuAMy0iNjm4Zbbx2H6IAVdduTWUBaBHTpaVGzw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49IFJ83vOdMmyoqNxVfsG3iJuxNFJP+yxyQV8lciOyg=; b=Ie86LGsUCkqQDjasjmZ3CV8rLPYNGdBKNiLmgNqd4erPu5E9I5YPmvXWxTlMyaozkzQohC+yP5+SQyMTPd75mlYIIzezs4PW4K0PqAosSIHHqP8Dh5goLpQh10IiQ7k/yk+FfcpbZqfCb5/o+xwZUyJGnv0tFQmoTYMBMn7LnAVCOF2pxmDCVjRq7TOE4as1b5oUGE21VTb7ZSaYRNGGbSWq5dd9PS+niXJGqSIB52wmZfQoLw10EPWPYKb/1CVLBXxnCo7ypTXzvyXaVbDbNkZZ0zeEIo/Gh5c+fpJL380DFnVE5ytwbSvAI01BLFWVXovk/7PfssEKf93WUW1xPg== Received: from DU7PR01CA0029.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::7) by VE1PR10MB3776.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:800:161::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:05:03 +0000 Received: from DU6PEPF0000B621.eurprd02.prod.outlook.com (2603:10a6:10:50e:cafe::df) by DU7PR01CA0029.outlook.office365.com (2603:10a6:10:50e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.29 via Frontend Transport; Mon, 4 Nov 2024 11:05:01 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DU6PEPF0000B621.mail.protection.outlook.com (10.167.8.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:05:00 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.106) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:05:01 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 9388807 X-ExclaimerImprintLatency: 3792313 X-ExclaimerImprintAction: 242d8f901976408b9d231f4e6a2ce8a8 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M/QtOkuSfjTWtU2Yg5nX7ZvxTmwGTlr9dY6ds2AciPU4esLyW3csENPyiwic2JNcQlRIp+/FlfpDsHUtTFkKa190P5fw1+rlUDjdM3k3rrdv6+DogJ3iKTSGZ+swB3MC3gFYo23B3np1T18EV2mNp2kBMMq8RvFJou5R0lOwRm0EBZ5Pd4e0XjzuD5Xe98ltDFvLYHgN9tQOXXqzRvDStHR0BUN1/u3Hogt4q/7RMin6R9EF+kTjBrb9loAyJ0XMhMKqKY0DAIElKjUCtJpA+znN+nifHBT9Wddd6LjBjES67AGe7Vx0p5zbhiBEXcAvq9oXSXpK+WVM6Mp2qxVc1Q== 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=49IFJ83vOdMmyoqNxVfsG3iJuxNFJP+yxyQV8lciOyg=; b=HZre8Aivr9wpVdt62AC8kVi+4QlG7jg/RTf5+OU71y1krsDwjyzRXIuGCQZFSzl5/RYFWnyEPQd9L33UtR94X9N3GUUPo06KxwHfdl7NIKyDOSSQD0gXaUIUWiav+N89sdapNWsgmvsIXl/ixa6c7kYwvOQU2061CzqUZMGOVzeSc107ifI6YRTetkP4KMH43SVSTNSXYny4HzaeuZNuf7LeZU8bFjyC0UCGYt2/0MyZqA+OwrhjxOz6jwEiGhlG3hUGgMfxZidR3GcPIqYcUVd4E2E32KwXNqKgWB79ZAP4bA9W8d2EWJWbFJVUbGNErA9cl9BaF323RJhpJnmCUg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49IFJ83vOdMmyoqNxVfsG3iJuxNFJP+yxyQV8lciOyg=; b=Ie86LGsUCkqQDjasjmZ3CV8rLPYNGdBKNiLmgNqd4erPu5E9I5YPmvXWxTlMyaozkzQohC+yP5+SQyMTPd75mlYIIzezs4PW4K0PqAosSIHHqP8Dh5goLpQh10IiQ7k/yk+FfcpbZqfCb5/o+xwZUyJGnv0tFQmoTYMBMn7LnAVCOF2pxmDCVjRq7TOE4as1b5oUGE21VTb7ZSaYRNGGbSWq5dd9PS+niXJGqSIB52wmZfQoLw10EPWPYKb/1CVLBXxnCo7ypTXzvyXaVbDbNkZZ0zeEIo/Gh5c+fpJL380DFnVE5ytwbSvAI01BLFWVXovk/7PfssEKf93WUW1xPg== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:04:59 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:04:59 +0000 Date: Mon, 4 Nov 2024 12:04:57 +0100 To: dev@openvswitch.org Message-ID: <1f6edd21c3afbc44272f412d78d5398733bf2461.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0109.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::9) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DU6PEPF0000B621:EE_|VE1PR10MB3776:EE_ X-MS-Office365-Filtering-Correlation-Id: 03fc5899-3b76-4a06-d210-08dcfcc08720 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: S8pyggmvTMFCVr1F4V7bzWeEqHpzZeLfNHHnZqm5Z8q+h9fVVEQzHyIOppe4+s9Kqt3nitTOUTxrM6FT3giNQexbHZzKdrbE03/anzaLrnfowMQRY2ql6rR+vFLuqaXjt6lWgc2v4VkRI4kVeBR2ORKy723svaMqlz0yUHbiAqYhRM1gSKfkPMfJrZnM6rKZObXYNx1V7pc93+pZeQKFEksz2dpBNWFbL0mXed8kLWO811juaTUtIj0xDfDJQbPKehTZsEB3IJKPqkBIH4XSuTFWVQsUuzhErxVNA9vrcJAFnmE7BadVfKweyfKrM71hlcVPwE1E9fIyOzQ+kxFQ7Br0j/rwSWGcZc++AiyNONdeWtLRjpSP+5pZc6+0LPnsLUGSVoMheAdATNypauq7t3s48CyFILbKyUevJZGWO9rmAw/zbMykb2GQs2C12Gu+SmS/QdQcX/RHXd7lUgeTkj+QVcbCQtKqvxXC2wJ17PcUrnb/AjZWI2O5UT5FOs+N3vk3N55T1LkNvc2y+PM2pUGppseGIZ7XCNwxfnWb7wIRLbz+awsfE2BzmJorfCGWND7JH3Q6c3JdGsTXDxwEHhBUnktI49ymUaUC6W0dmyK0slTiB7I0IWugN2YMYBuF1NULIzAZv1XLOjqnJYy/LbWkF10zjneWyDS68fbpXJX9qSJl8LnMaXPBr+6+Ni8l4ZznffprLzC78thtCranR3UhJkxGVtJDJQ+slUoKhPzUpeaOPqFojb76sRSKmZBQdGB+9ve5NIquDfBHmQA/rF7ebENd/M1t52LVLnEB51ZWPu+P2q/45qN6rbGBVRIJ8m6p91YXs3p7QCT8HVjCm4XxfvCDQmHSC2EcDf36IMxB9BnL4wUz1pkXJWSFeJkRwrL+yEahuuc9w25C5C52840FrjqEAHWAoEOuvcR+U61khfZBx0F3WqhIUfP8qwLkfiavho3q2uF5eVWIIdsqyiQo/aAbAfAoOdQbYlCeB/RazsEnHsRKgj3MX0gNaSmMUq2A8HNpGY8TUalbhGyX/ppAEivpW82A+nr35CjXwcrWuKvQc5A8pIGDsleFsw6Q+uDnpC9lNBFYNmFbcGxbnVHL8N3fZs+g/wSOaBD88NlTnbQKoqy7c85yOPFgOrmia/0vyV+p0BUtjljSYpkMib+XppkRukAb89Ky5/pIaVPKQ0eTwhVTjbubrBjT7mp2BuBfS+H36A6YAtE0OMwSTh+1ClLuceOD1n+Kb/FpP5+UDa2mehS/vgQxJocRPReJUgQvTgOEcwiHKMUEwsclqq3hzoD0KX7iYQiAToHeSBNxu+Igsgsy6/u2X1xS3Qjs X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF0000B621.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a0b7d659-336f-418b-4bee-08dcfcc085f2 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|82310400026|1800799024|35042699022|14060799003; X-Microsoft-Antispam-Message-Info: aNkf9M9UnBKQnZ1HR7qMt7ipTThS/SDu3fmftrPD8/HdKYI63DFeCSXA+NvsOE+ph3QczbRjSIjtooHFwC5Jf5wLkwkzlwYCvqT5ho43dyaF66/jkmXe/zxR0rQ3InJk5JhfB1s7CqCetJLKB3w5Gs+2oPQ9vx5lVkBASAn4ZqwbbstZQyO/Vyd43vrLuTa6jBd11mQUEFhILk5Xl3BkxxOU520DP1JJNV586ol3raWvyJSCSElpPrpdee1S++Wa3t+B5IkP+gBLNu8AhfwFTLcNZTpzeb0ivSGg6SbJTVKS8eJzo6kyTxwpB6E1+1DgCkXdpN+ypw/Y/xqkddCYubSu0hq3NcjUd3NhxTu3BYr4HEYnV5aPQSfI9qnKCvGxdbIki+AAcltjbgULEQa0v/V6Afhn5+esgLicSV+Scey+qW4j/gZsuNvfa69fBzJE0Y2n7/IsJs94gJftKMDQL1zdeBo9afbEcBsodigvRMlIC3SRY+T/0qOqogpQDKdseWwdL8Y60IMXMt8fiEnigOx6qXxKgrUpDayJXhkMRDH7Lb7/ojOF7GIixb9Zkvk4MEU6sKChTuIqG8GoP5TwNdqmZqCzprMdKr+rjzF2WoxyDXcj87vNUyE8eiNiHUkJgehzzhtRZq1CPe3MSUTyx5nJdn0LESFWvPww/mqCulz2lUvB2z3BsBOP8+EOzbztLRqivNXlU3MJB+ysQrkhFeRzGI/NhPfsG113fJ+OgTE9VFCjQod7vaYRL0FS2k+s9sWQMdZ6wV097WbjZIqb/6w7NBRaYUp0hM7YBYE3/ifYqQGFGwoVg2S2i+k7yb3CZyfhLLrpAHZlPeIOP7EtYqXWInoKBMoGMv1WXauDlyXPkKxLbHyuQfFT6GAgC30WD8H3MF+1KveTMh9dFSeWZ9QRleqp3BeztHVpDOSlDxMh9oTiyY2u8hkOdHS1eUe+zRYIR4FuLZ6aMkgAm/QoGo6QrFlMhL/wfzFwqOIvoFw+ep6GJpAYAnU6hrS5sfkTmTD0+bCxixwQNrrp0aiQuDfHiuhwrKAQxGvr2Cimg9nV6u58ssMSmrCnvMJ3QWB2QM+A/st412sog8/w6b8BZdZK6MaFMI1FbuOahtxWbaJU3sc+lWPfkpK5n1tcTQt+5LB7vMpi5OQiHHMZgpRmVIFp0PAffkuF3TROOO1ISp4yoH3EFqw0ERko/Qyypqj9KoO50TLpltwUc4j0oBAXusqu8ujnkjISUhYSpo9wVupAxt4zc8VVyN0uRNGLgOVU9kk2XAgVLRcnuEyvkzZiCRn0Q3eT5qxhgFYwS/QGGS+39yaXNh3U5BfwF7yjddkckjpMq+qL7tqJA6wsN5aJySS/ax+LzI7vszSCc304t4Boa+rHGBwhtIdhtjJ52B3Ve6cw1CX5M3UxVCoqgUeQFQ== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(35042699022)(14060799003); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:05:00.6388 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 03fc5899-3b76-4a06-d210-08dcfcc08720 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000B621.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR10MB3776 Subject: [ovs-dev] [PATCH ovn v2 31/32] controller: Allow filtering routes on ifindex. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" previously if a single chassis has multiple LRPs of a LR bound then the routes learned would be shared by all of these LRPs. However potentially only some of the LRPs have actually received this route. To allow for filtering we allow the user to define the ifindex of each interface and thereby learn routes individually per LRP. Signed-off-by: Felix Huettner --- controller/route-exchange-netlink.c | 1 + controller/route-exchange-netlink.h | 1 + controller/route-exchange.c | 19 +++++++++++++------ controller/route.c | 9 ++++++--- controller/route.h | 6 ++++-- lib/ovn-util.c | 20 +++++++++++++++++--- lib/ovn-util.h | 3 ++- northd/northd.c | 10 ++++++++++ northd/northd.h | 4 +++- 9 files changed, 57 insertions(+), 16 deletions(-) diff --git a/controller/route-exchange-netlink.c b/controller/route-exchange-netlink.c index 832c62686..d126f8357 100644 --- a/controller/route-exchange-netlink.c +++ b/controller/route-exchange-netlink.c @@ -225,6 +225,7 @@ handle_route_msg_delete_routes(const struct route_table_msg *msg, void *data) rr->addr = rd->rta_dst; rr->plen = rd->plen; rr->nexthop = rd->nexthops[i].rta_gw; + rr->ifindex = rd->nexthops[i].ifindex; } return; } diff --git a/controller/route-exchange-netlink.h b/controller/route-exchange-netlink.h index f3059e5af..fb76b9a21 100644 --- a/controller/route-exchange-netlink.h +++ b/controller/route-exchange-netlink.h @@ -32,6 +32,7 @@ struct re_nl_received_route_node { struct in6_addr addr; unsigned int plen; struct in6_addr nexthop; + unsigned int ifindex; }; char * re_nl_get_netns_name(uint32_t table_id); diff --git a/controller/route-exchange.c b/controller/route-exchange.c index 2eeabb5ec..c1304cd91 100644 --- a/controller/route-exchange.c +++ b/controller/route-exchange.c @@ -29,6 +29,7 @@ #include "route-table-notify.h" #include "route-exchange.h" #include "route-exchange-netlink.h" +#include "simap.h" VLOG_DEFINE_THIS_MODULE(route_exchange); @@ -145,7 +146,7 @@ route_erase_entry(struct route_entry *route_e) static void sb_sync_learned_routes(const struct sbrec_datapath_binding *datapath, const struct hmap *learned_routes, - const struct sset *bound_ports, + const struct simap *bound_ports, struct ovsdb_idl_txn *ovnsb_idl_txn, struct ovsdb_idl_index *sbrec_route_by_datapath) { @@ -162,7 +163,7 @@ sb_sync_learned_routes(const struct sbrec_datapath_binding *datapath, } /* If the port is not local we don't care about it. * Some other ovn-controller will handle it. */ - if (!sset_contains(bound_ports, sb_route->logical_port)) { + if (!simap_contains(bound_ports, sb_route->logical_port)) { continue; } route_e = route_alloc_entry(&sync_routes, @@ -181,16 +182,22 @@ sb_sync_learned_routes(const struct sbrec_datapath_binding *datapath, learned_route->plen); char *nexthop = normalize_v46(&learned_route->nexthop); - const char *logical_port; - SSET_FOR_EACH (logical_port, bound_ports) { + struct simap_node *port_node; + SIMAP_FOR_EACH (port_node, bound_ports) { + /* The user specified an ifindex, but we learned it on a different + * port. */ + if (port_node->data && port_node->data != learned_route->ifindex) { + continue; + } route_e = route_lookup_or_add(&sync_routes, datapath, - logical_port, ip_prefix, nexthop); + port_node->name, ip_prefix, nexthop); route_e->stale = false; if (!route_e->sb_route) { sb_route = sbrec_route_insert(ovnsb_idl_txn); sbrec_route_set_datapath(sb_route, datapath); - sbrec_route_set_logical_port(sb_route, logical_port); + sbrec_route_set_logical_port(sb_route, + port_node->name); sbrec_route_set_ip_prefix(sb_route, ip_prefix); sbrec_route_set_nexthop(sb_route, nexthop); sbrec_route_set_type(sb_route, "receive"); diff --git a/controller/route.c b/controller/route.c index 3af7b8859..dabe78800 100644 --- a/controller/route.c +++ b/controller/route.c @@ -91,7 +91,7 @@ advertise_datapath_cleanup(struct advertise_datapath_entry *ad) free(ar); } hmap_destroy(&ad->routes); - sset_destroy(&ad->bound_ports); + simap_destroy(&ad->bound_ports); free(ad); } @@ -110,7 +110,7 @@ route_run(struct route_ctx_in *r_ctx_in, ad->key = ld->datapath->tunnel_key; ad->db = ld->datapath; hmap_init(&ad->routes); - sset_init(&ad->bound_ports); + simap_init(&ad->bound_ports); /* This is a LR datapath, find LRPs with route exchange options * that are bound locally. */ @@ -130,8 +130,11 @@ route_run(struct route_ctx_in *r_ctx_in, "maintain-vrf", false); ad->use_netns |= smap_get_bool(&sb_crp->options, "use-netns", false); + unsigned int ifindex = smap_get_uint(&sb_crp->options, + "dynamic-routing-ifindex", + 0); relevant_datapath = true; - sset_add(&ad->bound_ports, local_peer->logical_port); + simap_put(&ad->bound_ports, local_peer->logical_port, ifindex); } if (!relevant_datapath) { diff --git a/controller/route.h b/controller/route.h index b5aab50cb..a039474f9 100644 --- a/controller/route.h +++ b/controller/route.h @@ -19,6 +19,7 @@ #include #include "openvswitch/hmap.h" #include "sset.h" +#include "simap.h" struct hmap; struct ovsdb_idl_index; @@ -51,8 +52,9 @@ struct advertise_datapath_entry { bool use_netns; struct hmap routes; /* the name of the port bindings locally bound for this datapath and - * running route exchange logic. */ - struct sset bound_ports; + * running route exchange logic. + * The key is the port name and the value is the ifindex if set. */ + struct simap bound_ports; }; struct advertise_route_entry { diff --git a/lib/ovn-util.c b/lib/ovn-util.c index c86f6f209..4218de77d 100644 --- a/lib/ovn-util.c +++ b/lib/ovn-util.c @@ -1089,7 +1089,8 @@ chassis_find_active_active_networks(const struct sbrec_chassis *chassis, /* Structure * ovn-active-active-mappings="|" * network=";;" - * port="," */ + * port=",," + * ifindex is optional */ nextnet = start = xstrdup(aa_ports); while ((curnet = strsep(&nextnet, "|")) && *curnet) { nextport = curnet; @@ -1101,10 +1102,11 @@ chassis_find_active_active_networks(const struct sbrec_chassis *chassis, chassis_aa_network->network_name = xstrdup(network); chassis_aa_network->n_addresses = 0; while ((curport = strsep(&nextport, ";")) && *curport) { - char *mac, *ip; + char *mac, *ip, *ifindex; mac = strsep(&curport, ","); - ip = curport; + ip = strsep(&curport, ","); + ifindex = curport; if (!mac || !ip || !*mac || !*ip) { VLOG_ERR("Invalid format for " @@ -1163,6 +1165,18 @@ chassis_find_active_active_networks(const struct sbrec_chassis *chassis, continue; } } + + chassis_aa_network->ifindexes = xrealloc( + chassis_aa_network->ifindexes, + (chassis_aa_network->n_addresses + 1 + ) * sizeof *chassis_aa_network->ifindexes); + uint32_t ifindex_i = 0; + if (ifindex) { + ifindex_i = atoi(ifindex); + } + chassis_aa_network->ifindexes[ + chassis_aa_network->n_addresses] = ifindex_i; + chassis_aa_network->n_addresses++; } } diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 24ee55a9c..312629bd9 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -354,8 +354,9 @@ char *lr_lb_address_set_ref(uint32_t lr_tunnel_key, int addr_family); struct chassis_aa_network { char *network_name; - struct lport_addresses *addresses; size_t n_addresses; + struct lport_addresses *addresses; + uint32_t *ifindexes; }; bool chassis_find_active_active_networks(const struct sbrec_chassis *, diff --git a/northd/northd.c b/northd/northd.c index 05edb1cad..aa748b4f2 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -2653,6 +2653,7 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, lsp->aa_chassis_name = xstrdup(chassis->name); lrp->aa_chassis_index = j; lsp->aa_chassis_index = j; + lrp->aa_ifindex = networks.ifindexes[j]; if (nbsp_rpr) { char *lsp_rpr_name = xasprintf("%s-%s-%"PRIuSIZE, @@ -2668,6 +2669,7 @@ join_logical_ports(const struct sbrec_port_binding_table *sbrec_pb_table, } free(networks.network_name); free(networks.addresses); + free(networks.ifindexes); } } @@ -4392,6 +4394,14 @@ sync_pb_for_lrp(struct ovn_port *op, if (smap_get_bool(&op->od->nbr->options, "dynamic-routing", false)) { smap_add(&new, "dynamic-routing", "true"); } + uint32_t ifindex = op->aa_ifindex; + if (!ifindex && op->primary_port) { + ifindex = op->primary_port->aa_ifindex; + } + if (ifindex) { + smap_add_nocopy(&new, xstrdup("dynamic-routing-ifindex"), + xasprintf("%u", ifindex)); + } } diff --git a/northd/northd.h b/northd/northd.h index 12fe83440..51abddd43 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -670,9 +670,11 @@ struct ovn_port { bool is_active_active; char *aa_chassis_name; size_t aa_chassis_index; - /* The following value is only set on the lrp side of an + /* The following two values are only set on the lrp side of an * active-active port binding */ char *aa_mac; + /* This is 0 if not set by the user */ + uint32_t aa_ifindex; /* Reference of lflows generated for this ovn_port. * From patchwork Mon Nov 4 11:04:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2006191 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=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (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 4XhpbJ25ygz1xwF for ; Mon, 4 Nov 2024 22:07:40 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 8D0FA410C5; Mon, 4 Nov 2024 11:07:38 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id dyC2QZ5lvw-b; Mon, 4 Nov 2024 11:07:35 +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 smtp4.osuosl.org C2107410D2 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2; dkim=fail reason="signature verification failed" (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2 Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id C2107410D2; Mon, 4 Nov 2024 11:07:34 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 87F6AC08A9; Mon, 4 Nov 2024 11:07:34 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6D904C08A3 for ; Mon, 4 Nov 2024 11:07:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 1AC7E8115B for ; Mon, 4 Nov 2024 11:05:29 +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 gUEPk-lCVqhU for ; Mon, 4 Nov 2024 11:05:25 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2614::616; helo=eur05-db8-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 499E98110D Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=reject dis=none) header.from=stackit.cloud DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 499E98110D Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=pJ24Y0A2 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20616.outbound.protection.outlook.com [IPv6:2a01:111:f403:2614::616]) by smtp1.osuosl.org (Postfix) with ESMTPS id 499E98110D for ; Mon, 4 Nov 2024 11:05:10 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=FWJAjHc6K0PsNAqRDW94977ORI4Kz81rHjCOy0m93A6hW7GsYS61lMjaPETdMkO0h1IjtO5Ib/VvvgDy/kxVB8Qk4E6vF5n40MfXcM4rcHn8FAJ9Ze0BC3g+A9VQzUcKMCnCriXxstllvTi4uRDKH22t+nLjiXLqHin8MxfZeaVqfQEtJdcc5VoH+173CxYnXXBUaNbaVqRT3v9Zs16sCkE9JETgbMxiJR4kMNwHyR6Rdj0APo/VqRS4asvsICsITGma1NsDnASLAmWZAs3AooCGf4AibifnPscahsk7Je/090/RWbixmFd/QyY2DFr/Q3aib2al4sSEL7rtPcmoVQ== ARC-Message-Signature: i=2; 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=YgT7+Cl190yutMTdQ8Z0qEmzFQvlKKnjLbd4dQXfjTU=; b=XrSstiTIOghYK/s8Resu/2owU3k81rbDvxXjTbl4fQ9Q4O3eQdH0uFyS6cAriDKVpaH0ciigVhdXX/9+D7fT0xDWHpt4JqqxFRA5FXwsJKtoB0kNsiOD4o0lup+fUdWN28WLd5UBv9Kiie4wk1jLPma6yvqmUJnfqbbgclcjfLFehk6epXcwkO5T+LPj5gN2LmaH+Jtloj+OetbBA+yzxeiyxhgc9MFWbrf1Z7qpe6Q5tSHWCKefoNmd6nzYdyZ6v0sSyX3on+a4/wrfDhHOWA2tdzMmI2cua7A9hz0+SwF4OYjOkkRtnHycFX3otHoEfx+XMBwkMBT9i7Frpd2Gmg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 104.40.229.156) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=stackit.cloud; dmarc=pass (p=reject sp=none pct=100) action=none header.from=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=stackit.cloud] dkim=[1,1,header.d=stackit.cloud] dmarc=[1,1,header.from=stackit.cloud]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YgT7+Cl190yutMTdQ8Z0qEmzFQvlKKnjLbd4dQXfjTU=; b=pJ24Y0A22Svjb4wmsqefWY0VcAyOBkQ4bkBXNOyVNKz4MVs5Xvmb6fIm1X8u7nZtLG6GS4jNYYjy5wFMm3CVQoXLAhJnKibWTZnTlb9tlOzpK4eMaXIGR0SwWEBYK7akdB+Oqp9OHLzjbfZRyTuVrg7ymfpay7XwZtcurYG/rvIzMvgVZuMpy83t7P+FyOcISq0h87/aL9O99yMnjnjmBI0oRVoxgeEK+sGgBUVkO2cikN+12pM7pHnEqMyOf2VO7WlOMMpXz4YHfcOeadMgdXaVgbS9tUSJs2XxQeKvuv/730tRDTQM8JEcTyb6zitGsKiMDsIbakJuYcvQSc9nag== Received: from DB8PR03CA0021.eurprd03.prod.outlook.com (2603:10a6:10:be::34) by DB3PR10MB6835.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:42a::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17; Mon, 4 Nov 2024 11:05:07 +0000 Received: from DU2PEPF00028D11.eurprd03.prod.outlook.com (2603:10a6:10:be:cafe::ef) by DB8PR03CA0021.outlook.office365.com (2603:10a6:10:be::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.30 via Frontend Transport; Mon, 4 Nov 2024 11:05:07 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 104.40.229.156) smtp.mailfrom=stackit.cloud; dkim=pass (signature was verified) header.d=stackit.cloud;dmarc=pass action=none header.from=stackit.cloud; Received-SPF: Fail (protection.outlook.com: domain of stackit.cloud does not designate 104.40.229.156 as permitted sender) receiver=protection.outlook.com; client-ip=104.40.229.156; helo=eu1.smtp.exclaimer.net; Received: from eu1.smtp.exclaimer.net (104.40.229.156) by DU2PEPF00028D11.mail.protection.outlook.com (10.167.242.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Mon, 4 Nov 2024 11:05:05 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (104.47.18.106) by eu1.smtp.exclaimer.net (104.40.229.156) with Exclaimer Signature Manager ESMTP Proxy eu1.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_DIFFIEHELLMAN_WITH_AES256_NONE); Mon, 4 Nov 2024 11:05:05 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 4739588 X-ExclaimerImprintLatency: 2193416 X-ExclaimerImprintAction: 374eb030f92143b585942dc012b38fc2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AYJLTjEQ6KkRWOmWltj1+wYBnrRZwKsrBaCvkApvmVsDqR9YruDlSlfYHsnRjLOCYd80jTSoYB8Fjb6Og+zKqyjBOmuMFwi4KV9uUYggjw28rqFtiZMbPVDpdmDalvlXpSYCpWQgMFpOXazHedTipS5JKF3WX1IoqeUJoF1dAsjegLxFg4Rmlzs0cF48r0VNe3m6CGhJvn/INT2g5ypYfUnzUmyBVZOD0EXfqDHfIBXz6ouil+We05oyq4dc9jXTCCP73oZXagmrU5Ydkz3ix5aS2sY3pvC6KgwqFY75N1jzsRCZ4Isslu4k5/G8w+KCW2rT30hukitTsF7ZWGAN3w== 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=YgT7+Cl190yutMTdQ8Z0qEmzFQvlKKnjLbd4dQXfjTU=; b=cYmqlQ5HZrW65WUzikHHx+zHZHY5CQzb9xWE8B0+DrQFSSJ4boWb+mWELs35wMcCZTWXJlvDWOL975EPkTK2vGbJo0ZOwD755yopzGbhNwkFYovJyLCb5oeQ9WnkwlFgKLqvmDiIgnNyFSTC9TnjJWCYvplv/XStBK6bxu694HoLK5uhDz3airN1YqV2duvIX5mhbK4al/6mRpkOLmtIbsG9YrYlddjHy8Eor2cCrrDmTfo1dZBhGNWwqd1bImoi40tRA0RNZ6ulCCuRjvaHE9pFQBHRBiunFziVH/SPEVB3l0wMFgJHAu10AqynhhxeylB/DJLyTbJjW7+DKOzeuw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stackit.cloud; dmarc=pass action=none header.from=stackit.cloud; dkim=pass header.d=stackit.cloud; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stackit.cloud; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YgT7+Cl190yutMTdQ8Z0qEmzFQvlKKnjLbd4dQXfjTU=; b=pJ24Y0A22Svjb4wmsqefWY0VcAyOBkQ4bkBXNOyVNKz4MVs5Xvmb6fIm1X8u7nZtLG6GS4jNYYjy5wFMm3CVQoXLAhJnKibWTZnTlb9tlOzpK4eMaXIGR0SwWEBYK7akdB+Oqp9OHLzjbfZRyTuVrg7ymfpay7XwZtcurYG/rvIzMvgVZuMpy83t7P+FyOcISq0h87/aL9O99yMnjnjmBI0oRVoxgeEK+sGgBUVkO2cikN+12pM7pHnEqMyOf2VO7WlOMMpXz4YHfcOeadMgdXaVgbS9tUSJs2XxQeKvuv/730tRDTQM8JEcTyb6zitGsKiMDsIbakJuYcvQSc9nag== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) by PA2PR10MB8449.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:425::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.16; Mon, 4 Nov 2024 11:05:01 +0000 Received: from PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8]) by PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM ([fe80::f00d:feeb:e45e:54f8%7]) with mapi id 15.20.8137.013; Mon, 4 Nov 2024 11:05:01 +0000 Date: Mon, 4 Nov 2024 12:04:59 +0100 To: dev@openvswitch.org Message-ID: <519ac9c874b1adb3a94adb2bd4452cb015f2ae0d.1730713432.git.felix.huettner@stackit.cloud> Mail-Followup-To: dev@openvswitch.org References: Content-Disposition: inline In-Reply-To: X-please-dont-add-a-signature: thanks X-ClientProxiedBy: FR3P281CA0117.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::8) To PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:30d::9) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAVPR10MB6914:EE_|PA2PR10MB8449:EE_|DU2PEPF00028D11:EE_|DB3PR10MB6835:EE_ X-MS-Office365-Filtering-Correlation-Id: 76b73d22-7a1d-4ae8-29dd-08dcfcc089b3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info-Original: O+GI184+7J9k0tUTQUorFt51vvDrbL7jc7dkk55S0uJaaI4mxI4WsF/IPD0XVi5KvkbdP/Nl+lKfzhX6ikeqiHrI0lHeJB7Obz9lBup8KHt2Cd5qvYnEfXNpRsDrm2YxSvZTCOIDrYi/C128uHL5UF6mt5Ak0oqI/N/m7jYcGyDmNQ1pAhOkjesA7AYtbdaVFUA3MdL4dfq89QrQRBoH2Z3aXeFvtBGkY5oK40YRmXoRH6hQNb/cByETGrVLHz88IcScfALVA+vMqb2MWqSgotq9LiDClu3JdG9LwYQsL2Zy8rLj/3v8pxAi1KYhZ8kTes0AiYyhBh+O62oNT4dv5cMR5YB0IiZ/WKPgED9INcCNrOx+0F90aYMGNd29+8VAPt7NzhbAj5r+MPy+3X1zWKUIkJUGTam9dXbEmWawYUlRB1jyYpMEBpwlnX469V79oT1xBC+1gu8n+i8mTEJDu7eWombNPdVToYx69/aho5NC+9/syPKgWc+++Dn7v+veTkjY6QQMlVofhDvswcohFQiwQWotmAyh7IMDZ+vscQMHoidmIeUGXBDe3lp3PCwRFtFbWqObELo/xmayCq5gg38QkqwCD9XIgQkf6GLpD8PX8jcF0dFCaFE0o/UtYMzv2ybNIA7t4Y92s4tnjmtzbItC9Wx9lk7i3W76X9oZBuIP6TpXSYEgy2KqzR/PLB7jasHWucbAKkXG3LqRbxbC/eIsPsUB0jYB3jeA1UTw2c4r8O69jnyQnR2ooSHAJrRduHITLo9W7flL/GICITgQXLnEwxdi6SveS188UNbNkNaGUtcg75FZX+K2YD9v8cd1pFA9rbDlpK1pbNXJR4xNIUa76nx/ITNyfYk/IQ+31dJDLrd/MQMgn2wj49gPCkS4dmaVzCSIr8NcVcbdr/uUZbemVRzWRmrVg24SX/4rblUF6GCE0QygV/l6uz/UaSJ5tmdI0/Z4kh9d8858FdZaT9fR6+JH3kRrbRChGSY0KowMlE9RE8l11Zq6qx3u0edPPKLDvXqZw4PVShuMmBjNhsoQKS8MZYCJsMrciEfm5QJFcUJom5eZddbCMKiP4AsDleRW6/aryCMTdARhEEjH4JbOiZ1f/OU4yfWPu+o3f49GlJuJhhqQ5QwmNfCklFJQHNd1LVZSuOTb9/rqHDMyzHOcxlUEYM530Kko8PGyqa8ipDwWnF6sgRpWZ68UHUyE3tTnwR7eIGc7+uZbdS8jP77YE2fAHEWg4NM17Mk9Lc6Q5XW0ruHlLfoSXJCOJ4NQR+FhZvBCF9ZahIKOzZVbTDmlh4quHT89OHU2Pu2k/mwWNaV1HTwQt9swW20UZPep X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAVPR10MB6914.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8449 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D11.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 43c7edf4-14d0-489e-7a36-08dcfcc08717 X-Microsoft-Antispam: BCL:0; ARA:13230040|14060799003|82310400026|36860700013|376014|35042699022|1800799024; X-Microsoft-Antispam-Message-Info: 9HXJoaX6z3TeJL/cUU2iUZpC+jZEm8a1Hv8xv0bxOKeK+Ug5MvPba+PZgUjjRB4iYOi8KQKvwbmn/yPJBUC9F7RkkvfbXkJSAB5Z5iTTFOrYdPi3mObYgXkgy9xG43A7zYiJO9l542DOTPb+XBlzO7aipKdbaHOOAtoSsiVfR16m84Bf/S7KmwGkfMXp0Rg96KwQ7fi1BvF2oZh6QP3/aUryZeRmmUnMJC//xaoUv+NeF9kocyYOwz1YlKc51T588pyTaIbiYhuna4ccs6K26qbKYDBrm7EJqxwSVFAhCwKdw+B0af1mKQ6juuGbYHPUuX6ea3fIQNd+cTCdbCp1ft1TAHmseqdd+vv4/fjCuUwca28/wzNtfthznsHku9EJ+rMs2ORGVhJBm3U3KScmQVLTJs/Z+H5H+DU7TCUmKfcu3X4kR6OyKkhu33qphowF5b7vEcCdpB09xdEz5T8I6VcA2ZaDBuQsE+rSXBluNTM8NzJAVj0N59qO5hDzR13vYaXECkUWdYDKqHvc5FtKBVXE6XOsd9zwK3aF7sieCyaEYZ7SoQ1kHwWNJzacu/kF+ixE8pTkIFl6TKOn3DC6YQqiyUKp5sck2dS7UnU36c5lbKbVuukZ1W5b1rS0kdSQlVE1y1iybIeg7RfX1qiBrAnqGprYKX5egDwf04v+D2Cu0aAJLhv+vYzvxyppWPlCOCo3ztQdGkM8QX91vNiaRtKFsEbu1RNIEXZnfZjUdlXU3Y5yA/MPMvQ1zrrFdmd+cXXh4ZWcthymKdI2f5SKt4zF8MEG4OdvPc3JjaLMKGlUOCwoaJGbDfTraZcGKkSu3P1tw1rRLo+7owiGlPt+rM//iiukX8uTm0tNJjjxDQW1Jptl6dZISXhydUt0PnXrlkAnHU07LXsUjd6rViXbQnz9lUXNcQRPS7r9AHWbzd2/R0cg5NUKfv7ULLqEhblTL25Lv+GIuRtOiUax6nZDDbZyZ91dXuAv66BaDu5+21PFi4a/r9CPR1gpRm8y/oUCP1KYFM7WYh6CPJ8YLr9m2Rplnc38Z1+HUmjh3OPYSlMzror/rwTsle08f5wUe9F3JrmpeMThvqNI+PsjlEnjZ8MAYA+SWCo/hDJp8k8styg42DiJEn0tSBOiHcETtikmPiwhvH2tRQgXoq0PWDB4Ovvm5vNy2QqQmBXwYFcsO6wtlTfJU1MSySoTDY2ZuNNfscX1REWed2501uMdP58onxAaN+TcoAdfQrXTVx9vs6Dv/aT4ii2WDVtppqp51P44L60dB+lRj5Nk+BUb43UYMmZ2ZE0HNps/GujfHZE+0oCBXnYqMZ8ogMnsqyuzFj99pQok1oC0Cp9A5bssK3vn5RlbeRjarXTjMeMoEbHNML9QlisBKsgdIEGu4hiz3EGodnmKYUg5jYU6vb0xA1EqLA== X-Forefront-Antispam-Report: CIP:104.40.229.156; CTRY:NL; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:eu1.smtp.exclaimer.net; PTR:eu1.smtp.exclaimer.net; CAT:NONE; SFS:(13230040)(14060799003)(82310400026)(36860700013)(376014)(35042699022)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2024 11:05:05.0939 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 76b73d22-7a1d-4ae8-29dd-08dcfcc089b3 X-MS-Exchange-CrossTenant-Id: d04f4717-5a6e-4b98-b3f9-6918e0385f4c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d04f4717-5a6e-4b98-b3f9-6918e0385f4c; Ip=[104.40.229.156]; Helo=[eu1.smtp.exclaimer.net] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D11.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR10MB6835 Subject: [ovs-dev] [PATCH ovn v2 32/32] northd: ECMP prefer local routes if possible. 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: Felix Huettner via dev From: Felix Huettner Reply-To: Felix Huettner Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Assume the following setup: 1. there is an LR connected via LRP to some internal networks 2. the LR is connected via two separate LRPs (LRP-ext-1, LRP-ext-2) to a external network 3. there are two default routes, one for each of the external LRPs 4. the external LRPs have ha_chassis_groups with different priorities In this case for internal traffic arriving to the LR it would first determine one of the ecmp routes to use and then forward the traffic appropriately. This can mean that if we are on the same chassis as LRP-ext-1 then we could still choose a route that outputs via the chassis of LRP-ext-2. In this case we would send traffic to another chassis for no real reason. To avoid this case we add for each ecmp route additional non-ecmp routes. These use is_chassis_resident to filter for the above case and then choose local routes. If there are no local routes available we use the normal ecmp route selection. This feature is especially needed in the case of active-active routing. There there will be a lot of per "project" LRs connected to one LS which then connects to the external LR as described above. As the LRPs of the "project" LRs mostly already need ha_chassis_groups for NAT handling the chance of the traffic to be already on an appropriate chassis is quite high. Signed-off-by: Felix Huettner --- northd/northd.c | 129 ++++++++++++++++++++++++++++++++++++++++---- tests/ovn-northd.at | 38 ++++++------- 2 files changed, 138 insertions(+), 29 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index aa748b4f2..9fd225d77 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -306,11 +306,16 @@ BUILD_ASSERT_DECL(ACL_OBS_STAGE_MAX < (1 << 2)); * 1. (highest priority) connected routes * 2. static routes * 3. routes learned from the outside via ovn-controller (e.g. bgp) - * 4. (lowest priority) src-ip routes */ -#define ROUTE_PRIO_OFFSET_MULTIPLIER 4 + * 4. (lowest priority) src-ip routes + * + * When having ecmp routes with multiple different output ports on different + * chassis we prioritize being on the same chassis. + * However longer prefix matches are more important than being local. */ +#define ROUTE_PRIO_OFFSET_MULTIPLIER 8 #define ROUTE_PRIO_OFFSET_LEARNED 1 #define ROUTE_PRIO_OFFSET_STATIC 2 #define ROUTE_PRIO_OFFSET_CONNECTED 3 +#define ROUTE_PRIO_OFFSET_ADD_SPECIFIC_CHASSIS 4 /* Returns the type of the datapath to which a flow with the given 'stage' may * be added. */ @@ -11726,6 +11731,10 @@ struct ecmp_groups_node { uint32_t route_table_id; uint16_t route_count; struct ovs_list route_list; /* Contains ecmp_route_list_node */ + /* If this is set the route should only apply to chassis where the port + * is resident. It will also receive a higher priority*/ + struct sset ports_resident; + bool has_different_chassis; }; static void @@ -11742,6 +11751,22 @@ ecmp_groups_add_route(struct ecmp_groups_node *group, er->route = route; er->id = ++group->route_count; ovs_list_insert(&group->route_list, &er->list_node); + + if (!group->has_different_chassis) { + struct ecmp_route_list_node *ern; + struct sset chassis_names = SSET_INITIALIZER(&chassis_names); + LIST_FOR_EACH (ern, list_node, &group->route_list) { + if (ern->route->is_discard_route || + !ern->route->out_port->is_active_active) { + continue; + } + sset_add(&chassis_names, ern->route->out_port->aa_chassis_name); + } + if (sset_count(&chassis_names) > 1) { + group->has_different_chassis = true; + } + sset_destroy(&chassis_names); + } } static struct ecmp_groups_node * @@ -11763,7 +11788,9 @@ ecmp_groups_add(struct hmap *ecmp_groups, eg->is_src_route = route->is_src_route; eg->source = route->source; eg->route_table_id = route->route_table_id; + eg->has_different_chassis = false; ovs_list_init(&eg->route_list); + sset_init(&eg->ports_resident); ecmp_groups_add_route(eg, route); return eg; @@ -11794,6 +11821,7 @@ ecmp_groups_destroy(struct hmap *ecmp_groups) ovs_list_remove(&er->list_node); free(er); } + sset_destroy(&eg->ports_resident); hmap_remove(ecmp_groups, &eg->hmap_node); free(eg); } @@ -11803,15 +11831,19 @@ ecmp_groups_destroy(struct hmap *ecmp_groups) struct unique_routes_node { struct hmap_node hmap_node; const struct parsed_route *route; + /* If this is set the route should only apply to chassis where the port + * is resident. It will also receive a higher priority*/ + const char *port_resident; }; -static void +static struct unique_routes_node * unique_routes_add(struct hmap *unique_routes, const struct parsed_route *route) { - struct unique_routes_node *ur = xmalloc(sizeof *ur); + struct unique_routes_node *ur = xzalloc(sizeof *ur); ur->route = route; hmap_insert(unique_routes, &ur->hmap_node, route->hash); + return ur; } /* Remove the unique_routes_node from the hmap, and return the parsed_route @@ -12094,7 +12126,21 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, int ofs = route_source_to_offset(eg->source); build_route_match(NULL, eg->route_table_id, prefix_s, eg->plen, eg->is_src_route, is_ipv4, &route_match, &priority, ofs); - free(prefix_s); + + if (sset_count(&eg->ports_resident) > 0) { + priority += ROUTE_PRIO_OFFSET_ADD_SPECIFIC_CHASSIS; + ds_put_format(&route_match, " && ("); + bool first = true; + const char *port; + SSET_FOR_EACH (port, &eg->ports_resident) { + if (!first) { + ds_put_format(&route_match, "||"); + } + first = false; + ds_put_format(&route_match, " is_chassis_resident(\"%s\") ", port); + } + ds_put_format(&route_match, ")"); + } struct ds actions = DS_EMPTY_INITIALIZER; ds_put_format(&actions, "ip.ttl--; flags.loopback = 1; %s = %"PRIu16 @@ -12159,7 +12205,9 @@ build_ecmp_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING_ECMP, 100, ds_cstr(&match), ds_cstr(&actions), route->source_hint, lflow_ref); + } + free(prefix_s); sset_destroy(&visited_ports); ds_destroy(&match); ds_destroy(&route_match); @@ -12173,7 +12221,8 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, bool is_src_route, const uint32_t rtb_id, const struct sset *bfd_ports, const struct ovsdb_idl_row *stage_hint, bool is_discard_route, - enum route_source source, struct lflow_ref *lflow_ref) + enum route_source source, struct lflow_ref *lflow_ref, + const char *port_resident) { bool is_ipv4 = strchr(network_s, '.') ? true : false; struct ds match = DS_EMPTY_INITIALIZER; @@ -12193,6 +12242,12 @@ add_route(struct lflow_table *lflows, struct ovn_datapath *od, build_route_match(op_inport, rtb_id, network_s, plen, is_src_route, is_ipv4, &match, &priority, ofs); + if (port_resident) { + priority += ROUTE_PRIO_OFFSET_ADD_SPECIFIC_CHASSIS; + ds_put_format(&match, " && is_chassis_resident(\"%s\")", + port_resident); + } + struct ds common_actions = DS_EMPTY_INITIALIZER; struct ds actions = DS_EMPTY_INITIALIZER; if (is_discard_route) { @@ -12239,7 +12294,8 @@ static void build_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, const struct parsed_route *route, const struct sset *bfd_ports, - struct lflow_ref *lflow_ref) + struct lflow_ref *lflow_ref, + const char *port_resident) { char *prefix_s = build_route_prefix_s(&route->prefix, route->plen); add_route(lflows, route->is_discard_route ? od : route->out_port->od, @@ -12247,7 +12303,8 @@ build_route_flow(struct lflow_table *lflows, struct ovn_datapath *od, route->plen, route->nexthop, route->is_src_route, route->route_table_id, bfd_ports, route->source_hint, - route->is_discard_route, route->source, lflow_ref); + route->is_discard_route, route->source, lflow_ref, + port_resident); free(prefix_s); } @@ -14029,6 +14086,58 @@ build_route_flows_for_lrouter( } } } + + /* We now duplicate some routes based on ecmp groups. The goal here is to + * prioritize taking some route of a ecmp route if we are already on the + * respective chassis. This saves us potentially forwarding traffic between + * chassis for no reason. */ + HMAP_FOR_EACH_SAFE (group, hmap_node, &ecmp_groups) { + if (!group->has_different_chassis) { + continue; + } + struct simap chassis_count = SIMAP_INITIALIZER(&chassis_count); + struct ecmp_route_list_node *er; + LIST_FOR_EACH (er, list_node, &group->route_list) { + if (er->route->is_discard_route || + !er->route->out_port->is_active_active) { + continue; + } + simap_increase(&chassis_count, + er->route->out_port->aa_chassis_name, 1); + } + + + struct simap_node *chassis_node; + SIMAP_FOR_EACH (chassis_node, &chassis_count) { + ovs_assert(chassis_node->data != 0); + struct ecmp_groups_node *found_group = NULL; + LIST_FOR_EACH (er, list_node, &group->route_list) { + if (er->route->is_discard_route || + !er->route->out_port->is_active_active || + strcmp(chassis_node->name, + er->route->out_port->aa_chassis_name)) { + continue; + } + const char *port_name = er->route->out_port->cr_port->key; + if (chassis_node->data == 1) { + struct unique_routes_node *ur = + unique_routes_add(&unique_routes, er->route); + ur->port_resident = port_name; + } else { + if (!found_group) { + found_group = ecmp_groups_add(&ecmp_groups, er->route); + } else { + ecmp_groups_add_route(found_group, er->route); + } + sset_add(&found_group->ports_resident, port_name); + } + } + } + + simap_destroy(&chassis_count); + } + + /* And now really add the routing flows */ HMAP_FOR_EACH (group, hmap_node, &ecmp_groups) { /* add a flow in IP_ROUTING, and one flow for each member in * IP_ROUTING_ECMP. */ @@ -14037,7 +14146,7 @@ build_route_flows_for_lrouter( const struct unique_routes_node *ur; HMAP_FOR_EACH (ur, hmap_node, &unique_routes) { build_route_flow(lflows, od, ur->route, - bfd_ports, lflow_ref); + bfd_ports, lflow_ref, ur->port_resident); } ecmp_groups_destroy(&ecmp_groups); unique_routes_destroy(&unique_routes); @@ -17290,7 +17399,7 @@ build_routable_flows_for_router_port( laddrs->ipv4_addrs[k].plen, NULL, false, 0, bfd_ports, &router_port->nbrp->header_, false, ROUTE_SOURCE_CONNECTED, - lrp->stateful_lflow_ref); + lrp->stateful_lflow_ref, NULL); } } } diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index 9583df998..6e29e9fda 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -6810,9 +6810,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = 1; next;) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=258 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = 1; next;) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | ovn_strip_lflows], [0], [dnl @@ -6828,9 +6828,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=258 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | sed 's/192\.168\.0\..0/192.168.0.??/' | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing_ecmp), priority=0 , match=(1), action=(drop;) @@ -6857,9 +6857,9 @@ AT_CHECK([grep -w "lr_in_ip_routing" lr0flows | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing ), priority=0 , match=(1), action=(drop;) table=??(lr_in_ip_routing ), priority=10300, match=(ct_mark.ecmp_reply_port == 1 && reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; eth.src = 00:00:20:20:12:13; reg1 = 192.168.0.1; outport = "lr0-public"; next;) table=??(lr_in_ip_routing ), priority=10550, match=(nd_rs || nd_ra), action=(drop;) - table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=258 , match=(reg7 == 0 && ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lr0-public" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:20ff:fe20:1213; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | sed 's/192\.168\.0\..0/192.168.0.??/' | ovn_strip_lflows], [0], [dnl table=??(lr_in_ip_routing_ecmp), priority=0 , match=(1), action=(drop;) @@ -6875,14 +6875,14 @@ check ovn-nbctl --wait=sb lr-route-add lr0 1.0.0.0/24 192.168.0.10 ovn-sbctl dump-flows lr0 > lr0flows AT_CHECK([grep -e "lr_in_ip_routing.*192.168.0.10" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 0 && ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=194 , match=(reg7 == 0 && ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) check ovn-nbctl --wait=sb lr-route-add lr0 2.0.0.0/24 lr0-public ovn-sbctl dump-flows lr0 > lr0flows AT_CHECK([grep -e "lr_in_ip_routing.*2.0.0.0" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 0 && ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=194 , match=(reg7 == 0 && ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; flags.loopback = 1; next;) ]) AT_CLEANUP @@ -7306,16 +7306,16 @@ AT_CHECK([grep "lr_in_ip_routing_pre" lr0flows | ovn_strip_lflows], [0], [dnl grep -e "(lr_in_ip_routing ).*outport" lr0flows AT_CHECK([grep -e "(lr_in_ip_routing ).*outport" lr0flows | ovn_strip_lflows], [0], [dnl - table=??(lr_in_ip_routing ), priority=130 , match=(reg7 == 2 && ip4.dst == 1.1.1.1/32), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.20; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=194 , match=(reg7 == 1 && ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.1.10; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.1.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=195 , match=(ip4.dst == 192.168.2.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.2.1; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) table=??(lr_in_ip_routing ), priority=2 , match=(reg7 == 0 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) table=??(lr_in_ip_routing ), priority=2 , match=(reg7 == 2 && ip4.dst == 0.0.0.0/0), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp0" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp1" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:101; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=259 , match=(inport == "lrp2" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:201; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=98 , match=(reg7 == 1 && ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.1.10; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.1.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.1.1; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) - table=??(lr_in_ip_routing ), priority=99 , match=(ip4.dst == 192.168.2.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.2.1; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=258 , match=(reg7 == 2 && ip4.dst == 1.1.1.1/32), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.20; reg1 = 192.168.0.1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lrp0" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:1; eth.src = 00:00:00:00:00:01; outport = "lrp0"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lrp1" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:101; eth.src = 00:00:00:00:01:01; outport = "lrp1"; flags.loopback = 1; next;) + table=??(lr_in_ip_routing ), priority=515 , match=(inport == "lrp2" && ip6.dst == fe80::/64), action=(ip.ttl--; reg8[[0..15]] = 0; xxreg0 = ip6.dst; xxreg1 = fe80::200:ff:fe00:201; eth.src = 00:00:00:00:02:01; outport = "lrp2"; flags.loopback = 1; next;) ]) AT_CLEANUP