From patchwork Thu Oct 24 15:46:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Huettner X-Patchwork-Id: 2001813 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=tZ9wiecw; 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=tZ9wiecw; 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 4XZ9Jz6PnFz1xwy for ; Fri, 25 Oct 2024 02:47:15 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 4E3DB81446; Thu, 24 Oct 2024 15:47:14 +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 MKjUrAR3KSIs; Thu, 24 Oct 2024 15:47:13 +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 CAD1E80B16 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=tZ9wiecw; 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=tZ9wiecw Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id CAD1E80B16; Thu, 24 Oct 2024 15:47:12 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id AD38BC08A6; Thu, 24 Oct 2024 15:47:12 +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 0A88DC08A6 for ; Thu, 24 Oct 2024 15:47:12 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id AC9D340838 for ; Thu, 24 Oct 2024 15:46:43 +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 UuYPtZI5DqvL for ; Thu, 24 Oct 2024 15:46:41 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:2613::600; 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 0123B407F7 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 0123B407F7 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=tZ9wiecw; dkim=pass (2048-bit key) header.d=stackit.cloud header.i=@stackit.cloud header.a=rsa-sha256 header.s=selector1 header.b=tZ9wiecw Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20600.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::600]) by smtp4.osuosl.org (Postfix) with ESMTPS id 0123B407F7 for ; Thu, 24 Oct 2024 15:46:40 +0000 (UTC) ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ah+B0HDJmE10xwhx1mFZ9sgbQui6sCXxkQ0Xj+u//59o4lRRXyDD3SPQemjWnZ9hwTa40BELVY8askr9yJuatOfJ+TNj1/wNiembfcYZ+Vlpa9HlsgOAZ2I04Sx1JH9uJSPy5QZIF/F7wxOQ6LygidRsq6ngWJcuUhiONJuQ0GymfjNCZZ9bF78gdmFUSp8yJJukb0ApmXGahcEBrn5/+9/s0UP4yvMf1DDxiPg8L2e9QVYT9C7LRARgeSa27XX1J2Q0GK3eJgCEi+vlFtgRxvYkC66hfkK/fonRkTqES7p2jBQpPv0Y8peQQi8ldhjg6zLtB5Sz+Q7JnAEWN8ctdw== 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=2FVb/4SGqYHHE5dwFHeajnq7wX3DZRaR2kibW/KbhqM=; b=eErxf3YbZ/UHgJJas7xENq8g2W1IWKyn4VB+W0JJ81oX+PUvd9CNDLBXvoCV0uvDMxrwznbFQhqObY8IW5I9UiftWpimjfiWGri22EQ6qJ/5q1FcgN5PhkvUX0Q5m5NJXr3NviABSvsqxU8cwfIs8W9sexidKUN5TZXawMcmmkYqc/x1RyJZgLupBT2PrSSVjWHQvUy83hMusgKpDvKCwCFuDSEMgxqdlQvm4fP6QmYV7JUMF3Jkut707xxD7j2kpmt93JEhd0BzC0sf7WtkmD7b/40vagRr8VMuhl9PXaKChumrtStf42iectf250ixNWDIJAh0aVr4usFQauH8dw== 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=2FVb/4SGqYHHE5dwFHeajnq7wX3DZRaR2kibW/KbhqM=; b=tZ9wiecwYqf6vgBW+0B3Z5S83XPT0QPZSONeDLt4XYXaoob95pdeU479qVqGhFVQODDRi4+riExR8rFU4KhuFQqWOkW/3NGvaK8SCqdi9+TzKbxOgvBgRWj9FuOyzrxZwnHyVIQbE4bmqPptxSq0WjewbAl6X8fQKIwrsbsnuWOxH2qWY69dStVh7l01fCon1vs7TdklKGqW7Bt+0i5LgjO7ELdp0wde5tgotMoY2xI2rxD9o8OGY/vacNH7AliqmXP3XStXGe+TZJLQIoi3E4eoIQz0hi7uqEiGY6KR4E8nvazWEPCnSR5cGvq2RhSALXdeI6ZFc3ndgvHjW9CR7w== Received: from DU2PR04CA0189.eurprd04.prod.outlook.com (2603:10a6:10:28d::14) by VI0PR10MB8956.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:800:218::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.8; Thu, 24 Oct 2024 15:46:36 +0000 Received: from DB5PEPF00014B93.eurprd02.prod.outlook.com (2603:10a6:10:28d:cafe::82) by DU2PR04CA0189.outlook.office365.com (2603:10a6:10:28d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.20 via Frontend Transport; Thu, 24 Oct 2024 15:46:36 +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.8093.14 via Frontend Transport; Thu, 24 Oct 2024 15:46:34 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (104.47.11.41) 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); Thu, 24 Oct 2024 15:46:34 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 5895484 X-ExclaimerImprintLatency: 2166013 X-ExclaimerImprintAction: e20f10b0ab264b7ba2c1c8c55fdb9fad ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=atSfqPlmeuog0EWmCkioS/mlvFd0FQTOtqWwpspxSxtK8PHY1Sb4fBhn9D3t7ng3uE27H1bqYVrOilQc7B0ejrhlN70SU7k+9jultrZWEFRA9T29EHJSLEX3MGfXH99PXhCJq4VID0cYQeSWMjTrz4UndRO9ydVZvpCQa6quF0DAaedYooWpBvYTeocoiSlfeOjDxzNf4jXgM+u+WT/CAaYzQfCJ84VkOJ0XzEDG1GCRH4cniPAUfzZUxgOascEzmZXO+zVjmtPaIikGEJVJQEXc3STDzxnuEQutiSX5slKs8JrQ93ohfqNSSs5+dWSx2N6VoL/XTME156d5RKjSUw== 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=2FVb/4SGqYHHE5dwFHeajnq7wX3DZRaR2kibW/KbhqM=; b=ZOMke7SAgWU3V7dhRl3SAH9F32KOIfskK4geUzDiNBbsXVGd1eDWDy1kRmTaTID1cp1ejPZ9tkA4Rs1bs93QGP38WBjUq+60cyGn1Nog7Ipj/O7yDkJ1mLW3pxRIFMWTZAyVzIZe1C8S1VSTJNC2NR6CohSENoOk0n13Mxj6bOGU00V46YaALeaIGwwnqe0gc//XLA1NLvbpDdt8zH/eyy1mOsim3xy5Ig0tMWqCrLcEFlxRoYbTc1gU+4HmEKIfbxqq/98A+4AV39+p92eFxUxRK2LiNYYfk1jBa4ufJqJtv0Z51brftrSv+H7K14ucvg1iCVgAjsLRybsHtqxUvw== 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=2FVb/4SGqYHHE5dwFHeajnq7wX3DZRaR2kibW/KbhqM=; b=tZ9wiecwYqf6vgBW+0B3Z5S83XPT0QPZSONeDLt4XYXaoob95pdeU479qVqGhFVQODDRi4+riExR8rFU4KhuFQqWOkW/3NGvaK8SCqdi9+TzKbxOgvBgRWj9FuOyzrxZwnHyVIQbE4bmqPptxSq0WjewbAl6X8fQKIwrsbsnuWOxH2qWY69dStVh7l01fCon1vs7TdklKGqW7Bt+0i5LgjO7ELdp0wde5tgotMoY2xI2rxD9o8OGY/vacNH7AliqmXP3XStXGe+TZJLQIoi3E4eoIQz0hi7uqEiGY6KR4E8nvazWEPCnSR5cGvq2RhSALXdeI6ZFc3ndgvHjW9CR7w== Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=stackit.cloud; Received: from DB4PR10MB6917.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:3ff::16) by GV1PR10MB7597.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:87::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.15; Thu, 24 Oct 2024 15:46:32 +0000 Received: from DB4PR10MB6917.EURPRD10.PROD.OUTLOOK.COM ([fe80::b865:87a6:68fa:764e]) by DB4PR10MB6917.EURPRD10.PROD.OUTLOOK.COM ([fe80::b865:87a6:68fa:764e%5]) with mapi id 15.20.8093.014; Thu, 24 Oct 2024 15:46:32 +0000 Date: Thu, 24 Oct 2024 17:46:30 +0200 To: dev@openvswitch.org Message-ID: <702e5e3f34bf9a07257f07c92808c67b2af26146.1729784574.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: FR3P281CA0111.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::14) To DB4PR10MB6917.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:3ff::16) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB4PR10MB6917:EE_|GV1PR10MB7597:EE_|DB5PEPF00014B93:EE_|VI0PR10MB8956:EE_ X-MS-Office365-Filtering-Correlation-Id: 85456a8a-41b5-4737-54c0-08dcf44309c8 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: cwF4VDxY7ffL6Bl11zV9qme/Ua1MLeEmDZOTqj6sNBPdlbMil2TMjrNI9kpiNtXi8Z9feDmON2gnPyTB5QGaOvhmYswL8Y8GL1vFE/5fau49ir9fDm/OiJ6QkFTZn7RK1xd1j5CpTMXOTZ7kOMr//tMC0EPvb6fvWi4S6krY9foXzIwnMM/ypBtqrgS4z4nJyLMUm2iYRK+RYal+eVjlRRRCbq8N9RDPBGmE9/cLY5nwVw+M+/etyd4VdpBXCS3xS79kG9u8pSEAVW8T7A2Z/XaEd9+4KU8L16/euOi3o32eA4lqwIkPnfKXsaOfExiYtiK6jQbKVPBM4I2Fdas4jYYFTi+YSUqWcmI245qXMWCmSxkRocZ0nF4RmVjqstcOmwa1KE+jCvvWR0GP6uyIw9k80j2Iztdt2i8hVhJpQaM/4GVu/UAEfKth9Lb3VOHqWETTsxheMK9h5Uep8vfXZY2GHZxZRAkb/rnPktAk3rusmT6kI/DTcOryBJgODY2WqOuL4hUvpRwKLXXrEWFTIgGYNjU+LBhfMY7h/hLU6+YkNOTRLPp5eM3z+IwiWb3rstvzTr9ijIfuTX/lC3huNUXH4fFv+xKicRsn0icpFdv8Iz0vAWZqTMbzwFpAL0Qtj7Mqi9ENL5m6w7J3tnHWzI9NnPlaa3UmWdE0zrjgcOMwHfKgHkrRqnSR5CCzzigUKUeAa7xP6mtCOEKKb8AE4xrvkeyOYWrkk/jLe7ChyF+/03J9WSRvKEeU1zF7Fio0J3QikHynzb7ho9XOH8bvvC7K2uCDgw3t9YRjmO6xV4r+vR2qaqYNqkmpSKObu2SA1Id6WnjK69Qh4Msw4LP8aoNduX3FSXGsCCZfihteCD7XZyYbW6JuEjps03h3/Rh8ntFnjt6ro0sx/AtogeGdDpq1LNvBmLXXCEVRLoZRs+R78VGgllv2oOlnUZtg6Av67Tqo37xI1Iho9Q6CSmlPYr6hYKwINavEKIMiOkAdk+xAIhvPrHgwLK3/t3OFf5ZGCmPxXEyfDp3QobJSU/G7nEA2Z8heR2WWdIaT/8PrCJwMoHK5vLsNRvt852MMd0Poa6T8GY11dwDLO+4SGna4oa7NspxV1U34FQhZwZq3G5XxA6QQxogUiwXXfY+6zLX94LE4J+06F97ft01vjhruCMzSERG2UTAFx1ow8XsNSiho0NuWHNjJ5oS7pJmWwk7X1xtQSg1yW3rEctb/AeWI/XneflCPTEQ2iMx988HtWvwnVIXgAILncy/f03m2ZfxLUIy+pbvoHaA7M6sJPXnZvrZ9JkgeMzcV9a4sDUBA0ClSZ5pw6CrU/6f6x0Cajt95 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB4PR10MB6917.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR10MB7597 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B93.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 8a4e8608-2388-47e9-de2c-08dcf44308a2 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|36860700013|376014|35042699022; X-Microsoft-Antispam-Message-Info: AJV3elXMtwcaJ6Fy9atE+V1Pz/qU/37of8fiCwRqwKBX5hpYGKss2QZa/N2iMOqpkiy33Gl/W2U2E7ZyRPiHP7rBYpvGolFzOWf827JUjfx/2feVc3EGinpoC2QkEJNRu+msptu0ntlPrgyHxmW+vpkIhHjar/pt6Un2HO4sUT87+UPU3l0yv8PpMZBktw9wW//ao2vrOlfln/N3+mFNezhUbJ5kPshitk1adidPGmZC9ub5/ETOXlDDWDnCUAQlItWtwvfVadZyHn9AHVjrE8sLsEdKzv1AhkI7XV/kma3HT/S2fS9Fyn0TtN+g6cqcHCcjn9C+7XmhumZijYhoG4hyg9XCCkIDcWW/xHph7BU6rOBWyoFtqDcG5BCto3ghjTzJt3J+yeg7pQTX5myidw8qZ71Hkgw/v574R3ViujHWIvmfVWF+H1BFgYcP8FTaVsofvCT2rshXKp4PfREV20GWONvLg1TPzO4HmB653OXjqTQmIybyccUhdH94EhhR1lTYeB0oa4n1KRf+0CvDnPuFYpcWLIvA16flIuRtGepTtmd3qgoVmIfPSn38SLMXc6Zl25EpQS6ClJ5lNan8hOB5mKwplcur4Jt1RgDE6+Kopjxo21apzVjiaLbOmGwCw95a8MNEBqXzuJbtps5fiDA97Me2WCkNJ9DpCA1UuFFT+VufS5O5ScTs8jZ8kZXjhL/bRmOn62sZejy/y0R0Fy3juJ5904WJDnmJepCfBdNjj8sCeAKM82bayYy3f9haaFAQQiuQUJBEyT1HTzqfqX7sNrfxwHh+gUyBeB/+E0ov2u1pNmdQgOEHHK2DtJ8SBCRoHADKgDyWS9io5Bto4rIkNqo1RPiRr57L6bHFHn2DMKoK4szg/jy+Gx7ToXN8Wb5lXTTq0WGXVb50Qu7QVMjZPzKG1dq3a/1kTn6Suxr+tIcx7tX1NbmsN/9iUP8Y3XCxIq8GQQ/GQpdJEXCKfdF0jZpVhjshYSPritMb0Raace89P6MAm5R/whDCzOnKEWhH5CBFBXuqmnsTA5DtRyGEPnOThkbl1q9YBBuFrX23Y1WI3muLDcZJ7miPHXZ7BpdevjiQFpiU/48lT5PjCANQO6DLmfDCKV1dSNOT/EMVYmiHxjFxWZVEY8kXm3blw3wB1f5claFdBoJOho+ahei1jJT/bJVDCWTRA6YFNRjSzAfoNTrVbrS7PMU1YERUs4HTNyP5ZD2kADuwIiORaFYMjHs6MbX9RV3//MZV5LU2i6CUVFkD4p0cjkhM81KdNZTczkxhBmFDQXzRLV8FefPmOGu4lw8GWHd8jVDM1IkropMz8JWoVx1utG482ORFKAVn5aSyKlDHA0vfSm74HEbOgtuiqJih8aXdfBUqdg4RgZEvHWGJcFohY5Z6KHaWyUPElMDuvBelIWLxfEd9Lw== 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)(1800799024)(82310400026)(36860700013)(376014)(35042699022); DIR:OUT; SFP:1101; X-OriginatorOrg: stackit.cloud X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Oct 2024 15:46:34.0752 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 85456a8a-41b5-4737-54c0-08dcf44309c8 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: VI0PR10MB8956 Subject: [ovs-dev] [PATCH v1 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 | 148 +++++++++++++++++++++++++++++++++++++--------- lib/route-table.h | 12 +++- 2 files changed, 131 insertions(+), 29 deletions(-) diff --git a/lib/route-table.c b/lib/route-table.c index 9b5c9f29d..80325f6f9 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -207,6 +207,107 @@ route_table_reset(void) } } +static bool +route_table_add_nexthop(struct route_table_msg *change, + bool ipv4, + struct nlattr *nl_gw, + uint32_t ifindex) +{ + ovs_assert(change->rd.n_nexthops < MAX_ROUTE_DATA_NEXTHOP); + + 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 0; + } + } + change->rd.n_nexthops++; + return 1; +} + + +/* 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) { + + bool parsed; + + struct ofpbuf buf; + 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 0; + } + + if (!route_table_add_nexthop(change, ipv4, attrs[RTA_GATEWAY], + rtnh->rtnh_ifindex)) { + return 0; + } + + len -= RTNH_ALIGN(rtnh->rtnh_len); + rtnh = RTNH_NEXT(rtnh); + } + + return 1; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + /* Return RTNLGRP_IPV4_ROUTE or RTNLGRP_IPV6_ROUTE on success, 0 on parse * error. */ int @@ -223,6 +324,7 @@ route_table_parse(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[] = { @@ -233,6 +335,7 @@ route_table_parse(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)]; @@ -255,7 +358,6 @@ route_table_parse(struct ofpbuf *buf, void *change_) if (parsed) { const struct nlmsghdr *nlmsg; uint32_t table_id; - int rta_oif; /* Output interface index. */ nlmsg = buf->data; @@ -289,21 +391,6 @@ route_table_parse(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) { @@ -326,21 +413,28 @@ route_table_parse(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; @@ -367,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 968652d66..f96dbebb3 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