From patchwork Tue Nov 26 14:37:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2015469 X-Patchwork-Delegate: echaudro@redhat.com 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=sOCB0pOe; 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=sOCB0pOe; 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 4XyQCR1KhCz1yQY for ; Wed, 27 Nov 2024 01:37:39 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 6DDCB4EBC9; Tue, 26 Nov 2024 14:37:37 +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 gQScTaFe6X7f; Tue, 26 Nov 2024 14:37: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 smtp4.osuosl.org 87AAF4EBF9 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=sOCB0pOe; 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=sOCB0pOe Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 87AAF4EBF9; Tue, 26 Nov 2024 14:37:35 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 741BCC08AA; Tue, 26 Nov 2024 14:37:35 +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 2FCDDC08B9 for ; Tue, 26 Nov 2024 14:37:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 1F74C434D5 for ; Tue, 26 Nov 2024 14:37: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 hbkAs4GFfOOK for ; Tue, 26 Nov 2024 14:37:23 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::61f; helo=eur05-vi1-obe.outbound.protection.outlook.com; envelope-from=felix.huettner@stackit.cloud; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org E5497434C7 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 E5497434C7 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=sOCB0pOe; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=sOCB0pOe Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2061f.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::61f]) by smtp2.osuosl.org (Postfix) with ESMTPS id E5497434C7 for ; Tue, 26 Nov 2024 14:37:22 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=kLbvMN4rGgd+bW6/YAZKz1ahDvDayLajEzY+0vPHlQOvdUC5To6AZWKrhvNUdjfaivmz1DIZ3q2PRXFE5+Kk93SuCJHKf8mrXBB7TpFFWqi1T7jaNI3gw+iLe70p6FC8vFp9FsU5oA9v2F1+cbpmaXj5Z5Se9CLLoWHobepH1elnnzhWfueGjSPyg7dqgJ+6lJNd1Y3v3kdsIMgtGrXmr/STG5RSToJhzq2nbDGhFwbdph0HRSCiSUH63pAsP8lJH02QkAcDhPLsm+3sZkkZVWdOEwZOuhdSwoiumCKlR7fdJVMgT0llerF3GD2c+BwzoIpO1Yyum07+MLqCsi1vtw== 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=kZmK2bkclNxeGQJg3JOpUq5Xk6PeMxy9OvL6ruR+Tds=; b=ii+mNyAz3fRwPuZKNbS9i8EA5Eny/QiUKpQ3RZX38QcCgCgIE+dGCmWSvp2DvuACUcdrziDVUhcSgEFYqk5kTKBFrOJ2U2IYt0Dtv4FTCHlTneFCQqECAHAxWxbXveaUG4EVUOPgfehCXuXQaYSA36OjxAONoUAf/tY/usQSCtUd3saeA8nWy66Dr/UY3rO7rXg05H27EOXWXaH7yslOBy+HjfBxmuaGCe4g0UQ6yskZH5mLbuwa8cbJgdn7QVOkvyP98sMBLIJkZDQl2slRg8ZzrK8qRNt7naUjrWIuR/O6m1Wim6x/39WOfv7lqnK6kpvA6s+E51u5iJCtqgpGzw== 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=kZmK2bkclNxeGQJg3JOpUq5Xk6PeMxy9OvL6ruR+Tds=; b=sOCB0pOeeb+6a2N9krNxSR92AJgmo1B/tK8/W8ydeWMLURiHi4YJZ0BVw9naAiHVULzbCbDeEiCanlVa8wJibvyex/8OPzd4ZtBhOmOX9rv7CDxvPRAVFVdd415fVQEG6qaT1mADEMHgWVh5vQLtrLL3JLQH2Pj25utOOTWGpzFIvnjzoe58FxjCdf8jcX0S7BhAAMu0u1j0ZDPhQoLRWUKtvhThMlyKxbmTDSyRRk40M/GQYqgv3EZHu0/a9X512jbzQLuZLEti3soes7JL08wNYIgh7kLs0FC5MvgXUvHLLXt6BimOAIrcsxxvwJEfhUs16Dw6Oztmkc2cVjDcNQ== Received: from AS9PR06CA0137.eurprd06.prod.outlook.com (2603:10a6:20b:467::29) by AS8PR10MB7524.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5af::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8207.11; Tue, 26 Nov 2024 14:37:15 +0000 Received: from AM3PEPF0000A79A.eurprd04.prod.outlook.com (2603:10a6:20b:467:cafe::89) by AS9PR06CA0137.outlook.office365.com (2603:10a6:20b:467::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8182.19 via Frontend Transport; Tue, 26 Nov 2024 14:37:15 +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 AM3PEPF0000A79A.mail.protection.outlook.com (10.167.16.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8207.12 via Frontend Transport; Tue, 26 Nov 2024 14:37:14 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (104.47.17.112) 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); Tue, 26 Nov 2024 14:37:14 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 6998567 X-ExclaimerImprintLatency: 5409239 X-ExclaimerImprintAction: 1b6d590077cc4f0ab3f9706d763518f2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bh9IKjsL86QQCQsAunUAvWD1jtdbfmqyQxNMvLbJxMelCmwgKG9ESB8z8ROU9r5fudbsteW58PSZD7KB6iH4cFbftccLPASOq6FIrPxBBdn8RIxbCuS+6paBO1Ks8DaeMneTmXv6ZXiAeW9cv77FIMPACfuFDzWgQgue11g5HmgU+XhIOKWJ2hVXYAQli59YcGUO4aNRPGY7wNmaQ6333wmNN4sT3zA28dpTIK8bN0g4dR9HdGO0KSeN6vwqyo/1vuXtE6rpHx2Y+Kakf5Xd3L43Q2PjKVFV8jJfGhZwBGur3CcC16NdaFY1QOZ95FMpdR8foXbHQauqQc6lSuOjbg== 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=kZmK2bkclNxeGQJg3JOpUq5Xk6PeMxy9OvL6ruR+Tds=; b=IGDb3/6MwXz7FSMSPxefj/C9ikLg3C8D8OZvO3Tr4Q3h8ckCogCZ5wLEJAykw4TB53r+FK5jSkRRixjyCJmsnDAcyihvbC7Vze7EOJN/FGmUNJ+qyiv1v7HYvTNkIZsIGG7HaNoAWbujgCIEjG8SeoJchZjWOxdt0KcJjSq0ami9hBEJiWKY71y9RxN2RADwvZ4NDeQA7s/YPhr3fUNugDEtUUOvDwhcP7I+J/pUdIPebrQzsPooS8vkfIUeFcqX61ZQaQHRTL/UaP2UtLMxTv57+0wlntMXsc9m1ATS0NA2IQhN4BOb/6Vto+C6JtG06e+Me/9CKEjlIh5Jr1Ok5w== 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=kZmK2bkclNxeGQJg3JOpUq5Xk6PeMxy9OvL6ruR+Tds=; b=sOCB0pOeeb+6a2N9krNxSR92AJgmo1B/tK8/W8ydeWMLURiHi4YJZ0BVw9naAiHVULzbCbDeEiCanlVa8wJibvyex/8OPzd4ZtBhOmOX9rv7CDxvPRAVFVdd415fVQEG6qaT1mADEMHgWVh5vQLtrLL3JLQH2Pj25utOOTWGpzFIvnjzoe58FxjCdf8jcX0S7BhAAMu0u1j0ZDPhQoLRWUKtvhThMlyKxbmTDSyRRk40M/GQYqgv3EZHu0/a9X512jbzQLuZLEti3soes7JL08wNYIgh7kLs0FC5MvgXUvHLLXt6BimOAIrcsxxvwJEfhUs16Dw6Oztmkc2cVjDcNQ== 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 DB8PR10MB3193.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:114::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8207.12; Tue, 26 Nov 2024 14:37: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%4]) with mapi id 15.20.8207.010; Tue, 26 Nov 2024 14:37:06 +0000 Date: Tue, 26 Nov 2024 15:37:05 +0100 To: dev@openvswitch.org Message-ID: <8c6c957ddd81ecd7a1242a3b5c8daed8527732bc.1732630344.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_|DB8PR10MB3193:EE_|AM3PEPF0000A79A:EE_|AS8PR10MB7524:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f6d43a4-4b23-4a17-3bc2-08dd0e27d20a 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: qwngEkoCfuI9aW8FyvNYGD4gwtLRzcORJy7GzLoK7thCLYqycWrYjJvWXN565zWxPQEKmMDbtoIhVHcqkGlG1Ea7sLWsA8im7/6hQIYloYU+dbsG7ZX2DXEmclphohZWCcPfgP9LYiTBMrxnnNV4EyvzSZDz5y6bOeiv5xXyBN1arMgPwQp9R3M6m15NCOuBHu0MXJPfg+I/cUAfSFWW1eeAZ1B+AZRy9I/noBzv0mLQJ+4clopg0AP7KQ173iH16zy/UIemUU5h/DQs4LOD4OS+6Ols/3y9I3+fydwoc21VIupwAtZfdN8xLlIJuVC1Adb1/V0AAOHfQoMnYtYyk6d7h0H5ayyBTesG3uRu+wOf4YLfehv1iMpB+WdvFhCpBR3fA3CxLVfJQb1P8nsPOBJRpC9TcbKglFJ2jt2zVfYlCcWZMZj4vKDhVt2to4QO37BYPd1XLI33FtEUYqx7w+0COJJoOBjrdmf4zWTT8Zf08JXYi0nP2DXUVNJkcmBYI2avd6c5TdwB5b5rfhYAvbTWyYfn5l3Akv5dc+UazSYumqKxdmRhIjkeggsbtryswNJW5vyjDLETkvmbL1cGndn8f1tEF0dEhNH1s0Ik/2qB5FS+LuQGODm/XmBOYFWbY7VW4ClitQxTTLt0I6IdHrh7nNxQ11UBej2KAUT7k/ouAJ3/SX9whi/040M4PXxFJr8a3bjut6qFJPnZxEoNS4tEB7vREBW99ehgDodrbnr1DtiJaWIqagaGrjmWvn26E0OWzH3vLRizqhTi0Tj+BEFPz+Uq1SQFuGh7VrSRRBEu4ZrNdVn203TjVPDrhKVPy/+E1zdMMi4F5ULwV50XVIj2JoFNFGjbzyuLjKsaSHybOTlVCSOYSo13T/DTHmtEYPBZoE1i26gAYEjc7fvX+UW5N42PplC4u8FthTqxmF6dCJLvf0cG04+sZP7GccS7QGce0fXub9Zhzl7W0hv1N7/tATd6s1fsAwi9AMP5o609gh71p9F+t9sfejQylu2hNKDn+h+5dbEnwRTzCijhSuVgFw6Xuln4pnlY4SnhQ9dEWzEaZGnZKaSvNQfBHFvJGgSN5sFhqd4iwXgauN+uOQKkNFuhcZdIEQrvq40VnqxMVzmknKSlY/hpeyYMXuMjspRTrW6sAA7HU8RC2GX6neshDIy1nDpZ7xtuKYzcahW7GZBdYHSI2ANOze1CP5XMWyXqt7pLVBSOZZXvDeK6x/ESaYqO7oFpJSm1gnoaCEDALQs32lQYtOQq8OhoDSCqg85sze0KnvmriawNhk94G/3rBo8vrmLP8i+e1LMk+j3k3IxvDNoHrsTSfBViFujNGCPH7VErzqaJQ540ya88Fw== 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: DB8PR10MB3193 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A79A.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1d346fdc-59f1-41cf-e86c-08dd0e27cd37 X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|376014|82310400026|1800799024|14060799003|36860700013; X-Microsoft-Antispam-Message-Info: TVTIC7zeQCn9m0aoB3wwlpomMd62OaorUfAMh0ywn7JKJ7bwyiBQKMBgwzRkog/J8EzXsDpn/ptFMI9O/tnnKh6SS0OHHjuXo5FCmgDXKdlZvugCaQp98o8XEL+dbLzi1NjEJxVM5HU5T2NLW2Y/UIohxWcQWd0H/v83ezum10VqRWelIGvwA7lfA9wRlTZVn2a34NvfD7q7ZUdr/MR618aJzGFEdAAEcj6xYSxH48yMYfyKSSNBv9JtfE7GYXT1iul98y+BSpyNHpK7eU7MO+vEbOBpyWPkcGOGrLKCNAk2C0islYYBG9fF+AZ85+ezEEINxdbP1V0by9bPVUPtXt90x7gKYoSRIFL1BI4OJ66MZIYUiRxNAeWUoZGgzbh1LTosSPwyeLIZv47jSPFDiLTc2A+DOCdftdfG4rpm0HHJzSe1OIH3YW7MLMjpAj0Z2D8Y5kXdSwfmfwOOJ/Ub7EmHbVPD3r+ACxUy7GPuMOaXCCYAacFWX2u6+6I07cQu+aoh9UZKmi5XEJaBqfZ0DOTzVXII/AJTEwxvWXx79b9ockE79y7oq8ykkYXBwoM46JPDdYppbkSYhDI6htygSirehyKO1Edo7inZeA354mRXjBBGV9DXW95zruJdtGn5rVxVO2xI0TBG1c7RlWowjDWBoHQsDq5ka/Q8ppsWVkbQ6zC5FL87TruwHKAa+Y/8+vb5yQP1/nYTFkNp7fpDx2P4FG5sy8oAtZvu2Te0Exo6o0gnlsyGvwBwIveS2hfa2PjVqU0EatVsVo2L+TW/BXS0lotyn5flrrYWOpYl/Tp17CyocpJwT/3Vtq/NhhzSDEsye4FPYhJWWTWE+7/uVJPyvNhDqj5L2BrGU8QOssfACiNp5mDSxf0WvGZ4ri4fWIT3++8ARHClKlbd1rCCM8KNBJNq+wE3/0gaZLoXyXaT9OHR+USQA0Lkc7o2RHNR9UY3BXYypiY5Z2S4IPSh2nzZuLTbSb5cjtPVVrgUDJVIiDrOKbBSHOpRU4XdJtBxoroErXcHYepZSdVotRuyCOA1mQyJJ3rrjGWEPee32s1hO/3vAJLg0VU4gx/apxItaddpzOColw4xWhuabudonoB3PW7PD3F5PDra1uVKiBxGEtigCCcLEFsaNHtoc05LoLdH9pg2RWbJWi1MsN/ozwLv11ohFVsHcgLex8u44QFYl6egTIhXjg3KC/BheOr4s9ayrC9llUMC/bxVa6++ByvGmsDFgH0yjWl3P36Av0rLDXqWQKPEOl+6EAYq5X6ASQHQ9kd5OXolfxQ6qMT6ZMXV/rRlg5ZyDElkYZ2FB3RMcAS+Ja0VtDGaEZfCJTnrS3YPivCGwfvz3xIH01lc9YicrjGcAK9UN+eaiyMcLuqoQ7Asp/Jr36zsFZqUF7tGyLjH7dMxQIGy3HEjeG/czi95LX4H8KYDdGuB8AcpE8knI5j/ClZZl0OK5rTX+qgv 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)(376014)(82310400026)(1800799024)(14060799003)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Nov 2024 14:37:14.1252 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7f6d43a4-4b23-4a17-3bc2-08dd0e27d20a 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: AM3PEPF0000A79A.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR10MB7524 Subject: [ovs-dev] [PATCH v2 5/6] route-table: Support parsing multipath 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" Multipath routes have separate structures for each of the nexthops. Previously if a multipath route was received it was treated as a route without a nexthop. Now these nexthops are parsed (up to a limit) and the ovs router uses the first route in the list. OVN will use the other routes. Signed-off-by: Felix Huettner --- lib/route-table.c | 151 +++++++++++++++++++++++++++++++++++++--------- lib/route-table.h | 12 +++- 2 files changed, 134 insertions(+), 29 deletions(-) diff --git a/lib/route-table.c b/lib/route-table.c index a9a9c6b85..06e391184 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -203,6 +203,110 @@ route_table_reset(void) } } +static bool +route_table_add_nexthop(struct route_table_msg *change, + bool ipv4, + struct nlattr *nl_gw, + uint32_t ifindex) +{ + if (change->rd.n_nexthops >= MAX_ROUTE_DATA_NEXTHOP) { + VLOG_DBG("tried to add more nexthops to a route than possible"); + return false; + } + + struct route_data_nexthop *nh = &change->rd.nexthops[ + change->rd.n_nexthops]; + + if (nl_gw) { + if (ipv4) { + ovs_be32 gw; + gw = nl_attr_get_be32(nl_gw); + in6_addr_set_mapped_ipv4(&nh->rta_gw, gw); + } else { + nh->rta_gw = nl_attr_get_in6_addr(nl_gw); + } + } + + if (ifindex && !if_indextoname(ifindex, nh->ifname)) { + int error = errno; + + VLOG_DBG_RL(&rl, "Could not find interface name[%u]: %s", + ifindex, ovs_strerror(error)); + if (error == ENXIO) { + change->relevant = false; + } else { + return false; + } + } + change->rd.n_nexthops++; + return true; +} + + +/* The following function uses the RTNH defines of rtnetlink.h + * As these rely on casts from char * to struct rtnexthop * clang will issue + * a warning about alignment even though the defines will ensure that the data + * is alligned. */ +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-align" +#endif + +static bool +route_table_parse_multipath(struct route_table_msg *change, + struct nlattr *multipath, + bool ipv4) +{ + static const struct nl_policy policy[] = { + [RTA_GATEWAY] = { .type = NL_A_U32, .optional = true }, + }; + + static const struct nl_policy policy6[] = { + [RTA_GATEWAY] = { .type = NL_A_IPV6, .optional = true }, + }; + + struct nlattr *attrs[ARRAY_SIZE(policy)]; + + size_t len = RTA_PAYLOAD((struct rtattr *) multipath); + struct rtnexthop *rtnh = RTA_DATA(multipath); + + while (len >= sizeof(*rtnh) && len >= rtnh->rtnh_len && + change->rd.n_nexthops < MAX_ROUTE_DATA_NEXTHOP) { + + struct ofpbuf buf; + bool parsed; + + ofpbuf_use_const(&buf, RTNH_DATA(rtnh), + rtnh->rtnh_len - sizeof(*rtnh)); + if (ipv4) { + parsed = nl_policy_parse(&buf, 0, policy, attrs, + ARRAY_SIZE(policy)); + } else { + parsed = nl_policy_parse(&buf, 0, policy6, attrs, + ARRAY_SIZE(policy6)); + } + + if (!parsed) { + VLOG_DBG_RL(&rl, "received unparseable rtnetlink route message"); + return false; + } + + if (!route_table_add_nexthop(change, ipv4, attrs[RTA_GATEWAY], + rtnh->rtnh_ifindex)) { + return false; + } + + len -= RTNH_ALIGN(rtnh->rtnh_len); + rtnh = RTNH_NEXT(rtnh); + } + + return true; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + /* Return RTNLGRP_IPV4_ROUTE or RTNLGRP_IPV6_ROUTE on success, 0 on parse * error. */ int @@ -220,6 +324,7 @@ route_table_parse_ns(struct ofpbuf *buf, void *change_, [RTA_PREFSRC] = { .type = NL_A_U32, .optional = true }, [RTA_TABLE] = { .type = NL_A_U32, .optional = true }, [RTA_PRIORITY] = { .type = NL_A_U32, .optional = true }, + [RTA_MULTIPATH] = { .type = NL_A_NESTED, .optional = true }, }; static const struct nl_policy policy6[] = { @@ -230,6 +335,7 @@ route_table_parse_ns(struct ofpbuf *buf, void *change_, [RTA_PREFSRC] = { .type = NL_A_IPV6, .optional = true }, [RTA_TABLE] = { .type = NL_A_U32, .optional = true }, [RTA_PRIORITY] = { .type = NL_A_U32, .optional = true }, + [RTA_MULTIPATH] = { .type = NL_A_NESTED, .optional = true }, }; struct nlattr *attrs[ARRAY_SIZE(policy)]; @@ -252,7 +358,6 @@ route_table_parse_ns(struct ofpbuf *buf, void *change_, if (parsed) { const struct nlmsghdr *nlmsg; uint32_t table_id; - int rta_oif; /* Output interface index. */ nlmsg = buf->data; @@ -286,21 +391,6 @@ route_table_parse_ns(struct ofpbuf *buf, void *change_, change->rd.local = rtm->rtm_type == RTN_LOCAL; change->rd.plen = rtm->rtm_dst_len; change->rd.rtm_protocol = rtm->rtm_protocol; - if (attrs[RTA_OIF]) { - rta_oif = nl_attr_get_u32(attrs[RTA_OIF]); - - if (!if_indextoname(rta_oif, change->rd.ifname)) { - int error = errno; - - VLOG_DBG_RL(&rl, "Could not find interface name[%u]: %s", - rta_oif, ovs_strerror(error)); - if (error == ENXIO) { - change->relevant = false; - } else { - return 0; - } - } - } if (attrs[RTA_DST]) { if (ipv4) { @@ -323,21 +413,28 @@ route_table_parse_ns(struct ofpbuf *buf, void *change_, nl_attr_get_in6_addr(attrs[RTA_PREFSRC]); } } - if (attrs[RTA_GATEWAY]) { - if (ipv4) { - ovs_be32 gw; - gw = nl_attr_get_be32(attrs[RTA_GATEWAY]); - in6_addr_set_mapped_ipv4(&change->rd.rta_gw, gw); - } else { - change->rd.rta_gw = nl_attr_get_in6_addr(attrs[RTA_GATEWAY]); - } - } if (attrs[RTA_MARK]) { change->rd.mark = nl_attr_get_u32(attrs[RTA_MARK]); } if (attrs[RTA_PRIORITY]) { change->rd.rta_priority = nl_attr_get_u32(attrs[RTA_PRIORITY]); } + + if (attrs[RTA_GATEWAY] || attrs[RTA_OIF]) { + uint32_t ifindex = 0; + if (attrs[RTA_OIF]) { + ifindex = nl_attr_get_u32(attrs[RTA_OIF]); + } + if (!route_table_add_nexthop(change, ipv4, attrs[RTA_GATEWAY], + ifindex)) { + return 0; + } + } else if (attrs[RTA_MULTIPATH]) { + if (!route_table_parse_multipath(change, + attrs[RTA_MULTIPATH], ipv4)) { + return 0; + } + } } else { VLOG_DBG_RL(&rl, "received unparseable rtnetlink route message"); return 0; @@ -364,8 +461,8 @@ route_table_handle_msg(const struct route_table_msg *change, const struct route_data *rd = &change->rd; ovs_router_insert(rd->mark, &rd->rta_dst, rd->rtm_dst_len, - rd->local, rd->ifname, &rd->rta_gw, - &rd->rta_prefsrc); + rd->local, rd->nexthops[0].ifname, + &rd->nexthops[0].rta_gw, &rd->rta_prefsrc); } } diff --git a/lib/route-table.h b/lib/route-table.h index 1e9f51a98..5a0e317df 100644 --- a/lib/route-table.h +++ b/lib/route-table.h @@ -26,6 +26,13 @@ #include "openvswitch/ofpbuf.h" +#define MAX_ROUTE_DATA_NEXTHOP 8 + +struct route_data_nexthop { + struct in6_addr rta_gw; + char ifname[IFNAMSIZ]; /* Interface name. */ +}; + struct route_data { /* Copied from struct rtmsg. */ unsigned char rtm_dst_len; @@ -34,13 +41,14 @@ struct route_data { /* Extracted from Netlink attributes. */ struct in6_addr rta_dst; /* 0 if missing. */ struct in6_addr rta_prefsrc; /* 0 if missing. */ - struct in6_addr rta_gw; - char ifname[IFNAMSIZ]; /* Interface name. */ uint32_t mark; uint32_t rta_table_id; /* 0 if missing. */ unsigned char plen; unsigned char rtm_protocol; uint32_t rta_priority; + + size_t n_nexthops; + struct route_data_nexthop nexthops[MAX_ROUTE_DATA_NEXTHOP]; }; /* A digested version of a route message sent down by the kernel to indicate