From patchwork Wed Jul 19 13:57:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 13319026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D03DCC001DE for ; Wed, 19 Jul 2023 13:57:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230333AbjGSN5P (ORCPT ); Wed, 19 Jul 2023 09:57:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231303AbjGSN5O (ORCPT ); Wed, 19 Jul 2023 09:57:14 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2075.outbound.protection.outlook.com [40.107.92.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8760912C; Wed, 19 Jul 2023 06:57:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I62xG8eX7qsyxlAsn7pH+uR8Y9LLdWY7b9HEG7yKKwo1a1EmZyJHJ3Y2QizASdSbS9KrGQNK+uYMOQAfnEQ3yCVTau2ifBssMFuN74CjmmYPH4X3FHRzRRCNyYPZVbhLPbhPPcjSSdLgqhv0J3quXwhm04foP+cdRi3TvRlquxPPCkclGrjyiJLkXAl0IL0LYqYEDmE4JkD0R4RbehbBKzKlCIOynMn5FOgtbGlgVsdZIV0NOGtiOu8URqBymEELIY4kURANuLbFJO7Ktu/EVCJcdf2XnWbZyN8ZhLgmXXlGXSnFrorrFjx1ar4GGSYSjA2JDiyYCgf0pDWG0rW+hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=tUeV8oIuvHrSih9x/1pXMDjhs4xpnIKANIY1SsSmAiE=; b=mE0BwpAAqQHjPAr5cHA2rmlGpav2jvYayl1CW84ozB0KsOuZbFAcMNTGk9TNRU4F1Fy8aQVhnWijWWc37TsxLs71n4a9LuEna09kJ29pX0WxNhXGK6Zzj6JiR7rrBvWc8Y7O1MWTahX/ocWtXu4CWAdkDry3XpzZft3mH/ymtH9q6sw1xWkiBGvqwuqiRseF4tYvthT5gY9zfpWvTIl65doImMeBZgF+KW2I7OyNXM4netzk0Qm7+wOtjGbcB2nTJE4J1+7xwIC6qBidW315JKCWwk5QHdWKnyhV9f6IuULL8z+p+l4lvE0wwqaTuBPZLB9/hbOUQElbZzr1eFa0qA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tUeV8oIuvHrSih9x/1pXMDjhs4xpnIKANIY1SsSmAiE=; b=aUiWmK2/wyWjNwxBqRm+mVkC69aYaM5QzZKfJ2I7tFoJ0/xoI59ZalAWTa3eIK3Sdg4DOyr1AKd4JN7uqLhMWpCkd5nhkjKNNx5U1vhBZQVhe7InWenDj8p4DSsR16dz+gmWNqIKdNuXlXWASuU7dQX3M0ETiZ1Zpc9Faz50mDukHLMRehGeoYlzsxJimuK7v+sRJ7H2I5vdtTauNU63VNJbgLjvWXkZXV8Y/BO1/HW1iQtzpAf/iyqcEcgACPxdwAnJDWJzg/NU4giqQNy4+obenMb9u7/mNBc0N2uMuD/rvks2+7S2/FcrNpXNA4OLk+iivtPd1oKlIkizS0vTPQ== Received: from MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) by SA1PR12MB6994.namprd12.prod.outlook.com (2603:10b6:806:24d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.23; Wed, 19 Jul 2023 13:57:11 +0000 Received: from MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec]) by MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec%5]) with mapi id 15.20.6609.022; Wed, 19 Jul 2023 13:57:11 +0000 From: Benjamin Poirier To: David Ahern , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-kselftest@vger.kernel.org" , Ido Schimmel Subject: [PATCH net-next v2 1/4] nexthop: Factor out hash threshold fdb nexthop selection Thread-Topic: [PATCH net-next v2 1/4] nexthop: Factor out hash threshold fdb nexthop selection Thread-Index: Adm6SOo2pRJ1b9JTe0qaFpcgHytNCA== Date: Wed, 19 Jul 2023 13:57:11 +0000 Message-ID: <20230719-nh_select-v2-1-04383e89f868@nvidia.com> References: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> In-Reply-To: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: YQBPR01CA0111.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:1::11) To MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) x-mailer: b4 0.12.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB4373:EE_|SA1PR12MB6994:EE_ x-ms-office365-filtering-correlation-id: 0179fdf1-1668-4f01-79d8-08db88600cb3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wbZ2KqZq0jkWSbxmd2wET4D2USkpHJ0X7keB/s4+Boo7TVRtRbZ/Ve8b/1PPG2bff+XRaqo0QOxunpQBHnYNLlj/QMbkzlOQAkmVkdMpFn7qIZ/GlnsWy9+hOtJoL9zHPNwfj6OtyBUBdL964J//JG/dYlgu0kzarfLKlDn+3LvadTENXS4eQ3ZN0Xy0/pARBiCYt52onele1lVxIuZEwesTU85R+2k6DzVU7AbOsh5Deg+oKJioJO50bn6nImoSbU/VhW52xm6GCel5T2C5jP4h7LYff7Am/HB8wlJQmSD1+Cj+Cuf/sDEIq9JBVWw2scwCCd6iwdNbZN5dGo6as9HmTjS9G0cZn++0elo8oH4LZFYXpFcQyg1mvLFn5WjeNbhQ3stV6ObrMRGnPnH1LshIkLf9cpyba6jMYfSZwAH20u0/oIiIcvJuf2x5qhzGhoVTTu82wQPHUTwGOtNwPFeNBOId1VglGjY0IPkKa4DFuAehtOF9lvu5lRd7B3364bQAjTMWMrGCC/60WoR0LieQeKLB2SmeklbwSBIH32CzNTas7wX5cJh4EQgYJm/K x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4373.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(366004)(136003)(39860400002)(376002)(396003)(451199021)(316002)(41300700001)(66476007)(64756008)(4326008)(66946007)(66446008)(66556008)(5660300002)(8676002)(8936002)(2616005)(83380400001)(86362001)(38100700002)(122000001)(186003)(26005)(6486002)(36756003)(6512007)(6506007)(107886003)(110136005)(54906003)(478600001)(71200400001)(2906002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?AhoaCay1JuwoEgwfu307iAbMrfFK?= =?utf-8?q?qLAsLTxE2oP3XErUQqxLJRhRY3us8u2Da91yR13SShBgfP9eBILyNWGTwn3Zf9Wnm?= =?utf-8?q?/LktqOVLTzCSMsjT4S9hMOMe+L6RrCPKPdlu43arty5d1Ln4pc6tJllJL3lBSV0RC?= =?utf-8?q?ohnITxQzRr5AvNA+bKY+JDwTRhW8DVTcm93xEUuvZlzmzPZE0W7ZyKqNE/Brs6dR9?= =?utf-8?q?YOpPG1tz3chjiW3VINvkPh9bPd/Eu0uvZR/z6AKcIa/V3tbcBq+cqCaXn7zFrT/I9?= =?utf-8?q?63cyn+OM409aMFq3gG3gxeN/ucdYUN1geCFWpyKYG80eOPdYZyJJ4Z7i5n5siERo3?= =?utf-8?q?CwMyiOBA2lQYBcKlIUa+Ds0Ke3QIklds50GqP+o9SUw7NWuA+sPPRpDZy9hAJSE2K?= =?utf-8?q?6yvYPQMHr4wBeRa7/gEIpa8YSn+bTUzaiCZh8SmfwaYpClXMLSel41NPLyr+nG6Th?= =?utf-8?q?LBsU0gSqMDTapOoCA94j4UVsjv4IdFxM7BCyNaow0Z0/5zkD80rw8AuA/j1OwFbHu?= =?utf-8?q?Bpwl9xoHIGDbjXZasbe3Zcsk26B8qFcXhoYn1yqU7W0O1M7hwyISUiAd+vNPdC3Il?= =?utf-8?q?90xp71+A7U96YG02M7QZ9HkRWQHNeOYTq+QmtCh2mIvAsvOdlZD/lkz7aYMhna5SE?= =?utf-8?q?3gqxllwGpDOjyWyzyUbW+fipl/sCe1RC+lJK4O24BGDQJgllaSj7bm9PYnudyFAgj?= =?utf-8?q?hWt0GtzJSLQ4Goe6Hw+lsz3evzNLWpMWVrblK1E3IK12+sr/IgFPfzON5Pu7MuojK?= =?utf-8?q?fprqFEMDht2k5rpOdrkgFWS8lpQl0XIxCA3hfp3tRcEx5XbG/eJHjcADe74jpcyw7?= =?utf-8?q?GTQ/eSpDnkuJXR9jM05zg/Z8tBMltpugZcWRhMp2K0Q5yc7ziHZRXwn+B3ALQvq7G?= =?utf-8?q?MJeRNH8QPRn/voaLAq5rbE0XbCFDxOhCj5PrcEXn7h2vmAwqlzGRbhDlerxbOGIpY?= =?utf-8?q?fI9SdZlFCqCmuKV2e9S+L5SYMIB3JuFvXv9GomQS5C8zZId0cvtF8e2LA4kMRpp3C?= =?utf-8?q?P50XtHi+wHXPqrhvx+79LHjxrE1Wkvj5endTRha4BDRxA2AiOzOLtvJpKB9VzZ6L2?= =?utf-8?q?dyFNwb5zO5BfAfs9iEP9WqVq4IkmOcyXwcOQFqAGWDQlYTT5q0eDRfHV03L3oVh8G?= =?utf-8?q?OyR31jkTn3f0H+NvQs8+cgXE9p2PIf8oB+3eZ6glwvm4FNGiQjwoeB5mYRfZ4f9yD?= =?utf-8?q?nF7s8ilbOouPp8jkPPWz3BM1GIj6jx8bZh402cBNX6jZNItQEp57Ii4++3KLOawpl?= =?utf-8?q?eWHOaJVNrOQJup2f0HB0LUCpvNzCdmOTnBwPHSDZrRlIaTGxJtah+aCEViktEIIru?= =?utf-8?q?TBEI/zrBnzBr5Z1NU0njXrmXwbk8Ll3rmtuG7n2In9YzEA44hahvCdatxzqeiKyun?= =?utf-8?q?mYWwBPxnweC66MghAQEIHBfNMySHy7ujKMDV00UKhYk/bftg0ymt+Un0mNyXxfjk8?= =?utf-8?q?7z0AHt40rdbkWkYqF13hfBS9/hGQcPzKqZo7d0+7x0kaLaiF8A0EiJ4Qkq91i2Zwh?= =?utf-8?q?5LkB6gvZTKJY?= Content-ID: <3226475388E5084BB5AAC618C3FD29AA@namprd12.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4373.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0179fdf1-1668-4f01-79d8-08db88600cb3 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2023 13:57:11.4082 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rcJb5PL7M9me788VnfNIwydHdacLzuF7J/dmujJ0sJ1vpOmfZVCwHMgY+Z+GfxKXrrKaQJkKiGtnzgTuEejmfA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6994 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org The loop in nexthop_select_path_hthr() includes code to check for neighbor validity. Since this does not apply to fdb nexthops, simplify the loop by moving the fdb nexthop selection to its own function. Signed-off-by: Ido Schimmel Signed-off-by: Benjamin Poirier Reviewed-by: David Ahern --- net/ipv4/nexthop.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c index f95142e56da0..27089dea0ed0 100644 --- a/net/ipv4/nexthop.c +++ b/net/ipv4/nexthop.c @@ -1152,11 +1152,31 @@ static bool ipv4_good_nh(const struct fib_nh *nh) return !!(state & NUD_VALID); } +static struct nexthop *nexthop_select_path_fdb(struct nh_group *nhg, int hash) +{ + int i; + + for (i = 0; i < nhg->num_nh; i++) { + struct nh_grp_entry *nhge = &nhg->nh_entries[i]; + + if (hash > atomic_read(&nhge->hthr.upper_bound)) + continue; + + return nhge->nh; + } + + WARN_ON_ONCE(1); + return NULL; +} + static struct nexthop *nexthop_select_path_hthr(struct nh_group *nhg, int hash) { struct nexthop *rc = NULL; int i; + if (nhg->fdb_nh) + return nexthop_select_path_fdb(nhg, hash); + for (i = 0; i < nhg->num_nh; ++i) { struct nh_grp_entry *nhge = &nhg->nh_entries[i]; struct nh_info *nhi; @@ -1165,8 +1185,6 @@ static struct nexthop *nexthop_select_path_hthr(struct nh_group *nhg, int hash) continue; nhi = rcu_dereference(nhge->nh->nh_info); - if (nhi->fdb_nh) - return nhge->nh; /* nexthops always check if it is good and does * not rely on a sysctl for this behavior From patchwork Wed Jul 19 13:57:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 13319027 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75630EB64DA for ; Wed, 19 Jul 2023 13:57:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231303AbjGSN5Y (ORCPT ); Wed, 19 Jul 2023 09:57:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231411AbjGSN5T (ORCPT ); Wed, 19 Jul 2023 09:57:19 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2074.outbound.protection.outlook.com [40.107.92.74]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A25C71724; Wed, 19 Jul 2023 06:57:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Htr0M8fqOPdo0ZQUmDux4aWNKFM+AFgfaKgq1DoVvNhCXmbh0mIdvx6npmjO/Y25+maYRXLmqYd/XNYS7EjRKh/Kv3y/6r8Vy77sPUUtthJKd3aQL8C5AEynxzUdfgBE2Inx7xF7vvoHcGVgs0zWFN7qT7S5M3/CFbrflAqrZ/o7VT+xrt6lf/mBALVF+2ao5iqXStJL99GO+7km4gljmGzsj4QDxPTtaMD6CsyiVmT2TPTY30KcD5iB6vrcfp83cNTjopMqe2mikN2krNK3Czp9z5B7YJPvUdhwYve5H8VDLMNXISlLHNzoTPEMvEAf4oRse5zf1qzR5bHOpjlwCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=5G7duKyBRwn33i/M0Orq92l5Mbix0iGcQuUUTFgRYXY=; b=AcDE73cdI6ULWf3Yvbard2MwmPbHfHuQCIIbXUdOrebJchCAHn/xM+/RlMBxv+JRKNVBIujK0dTe73MFX5RkBA7dsYFMRYG8jsGAu0M/hkRrPE5DXgKaOuPaQXy4c3doRGXU2yaHHUAHS5mF/4Qyjh4ubzA7FEIvXh4B4eY21ulGcTDpye1f7c3v7QUrz7/y7nMg6RvU3Hq312sqPFDpv0Y+AFAe6IZQFqRIuBQ3wugNqTIZt+CQku5oAJ8x5+hU53uYK4qLvnu9Xi33O0KethgnzC3kXx6jivf5R/2SntUpfKEJybNGC2DXj13HssoW2xnOChE+H1gmLkGTb5Cl5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5G7duKyBRwn33i/M0Orq92l5Mbix0iGcQuUUTFgRYXY=; b=Kw7AudvM5WaA+os5yY7N81/jEeJ4mxqKA1aakoTkPa8LLFAMSAENs1dQ6fr2lu3C8UGO3VqfKEUd9Q2qGRGVNWAaS7FozfE+DAEj6skE4Ol1WQbJK5MIV3xPrjhlMjaHNz8eIA5kYw2nBgfE9P8bm8ylvJ4972qoy1BYkYqE99kAbK3ML6aa4YUsfZ6u5OUtDP8TfrbDPP36psHW59GcQeLckYAG02ojWjC+zRTdQEmMsjf4SIR8i0dt5BojrDxv30uxOOkILBe6sEY3lkDTxddwoIqcmNwgRV/5uHUFLkkrascvr9CcvQ9o48CeIkoVlTPtmrM7RFpmozbmYvm5aQ== Received: from MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) by SJ0PR12MB6687.namprd12.prod.outlook.com (2603:10b6:a03:47a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Wed, 19 Jul 2023 13:57:16 +0000 Received: from MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec]) by MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec%5]) with mapi id 15.20.6609.022; Wed, 19 Jul 2023 13:57:16 +0000 From: Benjamin Poirier To: David Ahern , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-kselftest@vger.kernel.org" , Ido Schimmel Subject: [PATCH net-next v2 2/4] nexthop: Factor out neighbor validity check Thread-Topic: [PATCH net-next v2 2/4] nexthop: Factor out neighbor validity check Thread-Index: Adm6SO0RjClS2VcqDUm7NVFWUjJK/g== Date: Wed, 19 Jul 2023 13:57:16 +0000 Message-ID: <20230719-nh_select-v2-2-04383e89f868@nvidia.com> References: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> In-Reply-To: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: YQXP288CA0030.CANP288.PROD.OUTLOOK.COM (2603:10b6:c00:41::36) To MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) x-mailer: b4 0.12.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB4373:EE_|SJ0PR12MB6687:EE_ x-ms-office365-filtering-correlation-id: 843f0ad7-5f98-4caf-ac0b-08db88600f91 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DglcoChecyAPBKHmC0sIjJko9m9ecUcVX/Qk08GIKSVd53q+qmNG0up0s9Fh5nLvCujlncTzopn/iw5d40886SN7hK/DreDvfESEG3z6NVO23FvjB09k4i9hV4YVUEpbjkpvrsiWS2vyJVckxRN2TUNbjZq44FfrcM49QGeVrl1uRX4lMkewM22HuFhdYE9Yu9dchRR+Ymh2xLl+GLXUqgnSBhjkIjjoCqFmsySKVdsB9bw/E2weueEmfRL15RkTHm4rfmjl8cuqPrA9Qpm0a59ioWjyxKXPXOYGQAr4fR3VPu04oNMPtkc0pAs6a96b0ki8FcJqzRzkB9k6SkVl8wfI+ZAUWhewKTJmmSR0vdG+ZvT3WjlqXx/8HrvLIEDPmS9tpaIfP5fQcaeAnQNhRZ3Px4LRQS5iSgRilH4rdfBBAXnz6UKUXj6GUPcdGSBrBe1oROOfW27KdeUAW1jtUsADDey66fxuJ3nN8wmmek0KYvfQ00mFnSXRfjcSCCNI0T9FWNIaE3QUg9plVys8mqxUxLRdlHdifyI6DzZ2DLZgT/52ovflImshJHxRSiU4 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4373.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(366004)(136003)(346002)(39860400002)(396003)(451199021)(71200400001)(107886003)(38100700002)(122000001)(2906002)(6512007)(6486002)(2616005)(83380400001)(36756003)(186003)(6506007)(26005)(86362001)(64756008)(478600001)(4326008)(66446008)(41300700001)(8936002)(8676002)(54906003)(110136005)(66556008)(66476007)(316002)(66946007)(5660300002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?dUnxKIStuG1czk55q5yxz2BOEjht?= =?utf-8?q?yGsTing1uvQEteUUvs4uQ2+t67yoxOBM8Em+bQGIjUINP3Im839Mq8He5ZRgsWV2w?= =?utf-8?q?EW8mKnTUOTFYyECzJbJIud56AQiNXrtQgWygC5SujTlnKiPvQjOOn7IU0SfnJ9yfw?= =?utf-8?q?H7scUkL0f1H6PdIELmNux7iLr/OIVlJTBNJkGwPvf1AraOyTKui+Fq/wbQhEP+8Nf?= =?utf-8?q?M6LmedqofLW5bF3VaabIfSdQUri8rzeq8hy+lg2+Qq4BsDxgSOICJ+/jVUZp4rdnP?= =?utf-8?q?PZu1PP4XYtV1BKQKzpdHIU5HwHB9fTsMfj/YJCe4nz4p6n9SxPFG/fC9ii06EASsA?= =?utf-8?q?sBir03xSwoqqzgk+BH0ZGavUIL6nP4/he4OkdwU7QRvecCp8ZeDi2KzIXoQGUcVFK?= =?utf-8?q?0093lrzIhDw/7zKYjXdgKG4o+jj7KNS/qCxJBr+TIomcfLJgTVUx5Uq2oTXsQMDC9?= =?utf-8?q?jyNJaW+nQde56WNYJ95fszIiazS7bQ0XdJ7+DMDVwIS5Us7cs0VseIowcGTK6grUz?= =?utf-8?q?Ark9UZPViTIdFikfnNBPc5RQUSmFOjIz2i3ixXNNbvSWgPq+hUl/J54Ni3iIo6W1p?= =?utf-8?q?84z5h1MxiKQUAwSvtxFsfnGLmzepbsGpajsHKwcMQPGdFjX8f9FEbVkCN0HM0pm/a?= =?utf-8?q?+R3ypGHzgrhtPz1pC254E76PFiHUGEeRPfhL6QBoEZV28ESXdKD9SUES/+2C9urvt?= =?utf-8?q?2NQLScyReCdWBeEmQ2kZczBhAzQcZSqACswg/2RE28Pxjs0D9MZmmAILI9XDspIyr?= =?utf-8?q?73/yMpaUBkIQhPatU3jFgU4jPSz80l+SzD/p4NvQGntWLkK+Uiv+RdO6UiYYpRLDM?= =?utf-8?q?SxXT/BF/57925Uy86JHgX1T1s2m2MNhXs4IHNCE1Ea9gkdBTKih4ibiKr5tTYCzD4?= =?utf-8?q?YzzIF2VHU8sS4jLdiWEb7CRr+Cjv9gJ1KNvI5/DYy1HvdvQxfu9Pop9HXdMvJvgGi?= =?utf-8?q?42Zh+02oapLmcpcQZxbpyu4t7815+NN7BSq2sROPrw50kHIsy4JEBVx9NimnCVOXH?= =?utf-8?q?0yrbHpFknoVcRE3g2yIgV7oHelRJdekTFi80x3R9iMgJds7Ek3Hw26DK96Q9Jrbli?= =?utf-8?q?LeYk5tHolVDzxwReTC5rKqlvKMQE/7/yca+50UN4R/0007ocNhU8XC2tWPw++V/KN?= =?utf-8?q?QYtz9xUOcEhgiBbk7z8h/Gw9dsPdTpqeZd6vI9pvDV1djULumRoAtlmZGAx58i0Dk?= =?utf-8?q?RMgWRAZTrc+S6+lQNW9raJymiIH/U+4KHQHXedsZSSC4cnRSLr/WholEMQFScSsje?= =?utf-8?q?4jNBZv6msiCdkUFadrrkQsBHk5HISHOAEmWiM/4/yeLcg1wtoMZtLBfazAkP/npRP?= =?utf-8?q?XiwMDWiOfsPVbqi1RxpkC98aOiBPlEQsfi7pJf7QTjeh3Mcm3ATr3YuhvLJCYRVa5?= =?utf-8?q?y7fXcNP7KGBosTWuEXhsA/Kj4tstvX+jmE/SbK4bFEI+AUMKR1JQAUKlA8lRgHdt8?= =?utf-8?q?yrH9FR7FzWR9AawV7YBW8LHMRN1Mc0rc+RR7PLrmHq6slwI/lfABtyQqRlXBxEud9?= =?utf-8?q?YPiG9VY7l/aU?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4373.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 843f0ad7-5f98-4caf-ac0b-08db88600f91 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2023 13:57:16.2226 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: HhMQHGyVH8UioGs+m0raC7N9mhJ5qb4Y5F4ZGw1rsUXm8TPlDPKygFJ6Jc1+Q2UiMsx6S6WiwD+ueRTv6nTVww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6687 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org For legacy nexthops, there is fib_good_nh() to check the neighbor validity. In order to make the nexthop object code more similar to the legacy nexthop code, factor out the nexthop object neighbor validity check into its own function. Signed-off-by: Ido Schimmel Signed-off-by: Benjamin Poirier Reviewed-by: David Ahern --- net/ipv4/nexthop.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c index 27089dea0ed0..c12acbf39659 100644 --- a/net/ipv4/nexthop.c +++ b/net/ipv4/nexthop.c @@ -1152,6 +1152,20 @@ static bool ipv4_good_nh(const struct fib_nh *nh) return !!(state & NUD_VALID); } +static bool nexthop_is_good_nh(const struct nexthop *nh) +{ + struct nh_info *nhi = rcu_dereference(nh->nh_info); + + switch (nhi->family) { + case AF_INET: + return ipv4_good_nh(&nhi->fib_nh); + case AF_INET6: + return ipv6_good_nh(&nhi->fib6_nh); + } + + return false; +} + static struct nexthop *nexthop_select_path_fdb(struct nh_group *nhg, int hash) { int i; @@ -1179,26 +1193,15 @@ static struct nexthop *nexthop_select_path_hthr(struct nh_group *nhg, int hash) for (i = 0; i < nhg->num_nh; ++i) { struct nh_grp_entry *nhge = &nhg->nh_entries[i]; - struct nh_info *nhi; if (hash > atomic_read(&nhge->hthr.upper_bound)) continue; - nhi = rcu_dereference(nhge->nh->nh_info); - /* nexthops always check if it is good and does * not rely on a sysctl for this behavior */ - switch (nhi->family) { - case AF_INET: - if (ipv4_good_nh(&nhi->fib_nh)) - return nhge->nh; - break; - case AF_INET6: - if (ipv6_good_nh(&nhi->fib6_nh)) - return nhge->nh; - break; - } + if (nexthop_is_good_nh(nhge->nh)) + return nhge->nh; if (!rc) rc = nhge->nh; From patchwork Wed Jul 19 13:57:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 13319028 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90E70EB64DA for ; Wed, 19 Jul 2023 13:57:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230440AbjGSN5c (ORCPT ); Wed, 19 Jul 2023 09:57:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229915AbjGSN53 (ORCPT ); Wed, 19 Jul 2023 09:57:29 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2050.outbound.protection.outlook.com [40.107.92.50]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66A041BF5; Wed, 19 Jul 2023 06:57:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yrtmbe4o94yrI2Sly2digJt5GyCs28ixFN3WwlHLOGFDBUZWU+5j5SFfadkh1KOEUUUQh9NzSHMA3kQYN+czX4Fi0xB7aLKJ8BQ4Pm74xStK8GTsxnTphrcMitHtRJ8LY8RoLqcjMEWabkehXoCdIzK+5OrWp7NgQVx6IHveG/Bi/YFbsjC7sQ+RgDImuBAqAr064Eqq4n+rr+ShBbyfTFFAiwCjpi9gZ5FgHgudhf213v0C9xDPkB+8yIOaCkRmd6Z1RFGYkSAqSUxSvMCYT8nK8Cx62pKc7k1AFsTXwhstiUu2VIIihnzn6ww0AXRqGoTl+c+C+5Ik4lJSaMguVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=xxpO4bcWuo1MgkT2NiTuTmmshEYXt3etyzvEDEnQDdc=; b=KXeFyAMV53etekt76F0m6VpNOdd1g2qhclpP5r0ePB7caO7VdWrbcizTWRXfhpQfzssJJNKLdhhDM6ZvFIbHuYojL8p1A8D1YlVZ38FTyD3JSTC8PI2yom9/f7RvugFHoOwcLWy6Wui1IuPCKWrE38xbVqBthrmV+itP+b5GTddsLf2e9+62XTprBFOJzbX1TmPvMaIbwRKBDXLaDxdKODFAJ2b3X8+44nA4d85Qu1hZwsDnRViQbA08b0XaOGHVSJ0CzxNvsOI8IaBYWgfpnvlypcg0r25gWjXxOiDc5MaKzQwObERsTe68akodF8lV6/Ks5MS9L85SEFLRcUaE0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xxpO4bcWuo1MgkT2NiTuTmmshEYXt3etyzvEDEnQDdc=; b=M/QqG0RHUJ0mOgTGuSUhQwrO5g7m+/dfWUcagmAqyOqQlmhpJI5dA45PJBFk4u7q+Q7fMBmDZ4wbAf0H13Jz6TLvbzAP7NTBAgI1y/YFf9/7D+BwV/3jP9je3eX/tR+cibAK5YwZyHORiQdSUnQMRyNnH0CNyidkruDnflHqgaycatSn+YOc2q33gwD8rWw5JeE78nEWcYqile9KYhMCGn9Ks6A5y2cPBpc6YBFG801Htk7hvo95fc60ZtwWs/feCgzg7xjT73uUkqBSFCEM9VLBe0TFGZ7YK14L0DWh89L1nieKqBWcXdI4fxl7EBb4nU7zcmqMCmpd1+rS8s7qSw== Received: from MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) by SJ0PR12MB6687.namprd12.prod.outlook.com (2603:10b6:a03:47a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Wed, 19 Jul 2023 13:57:22 +0000 Received: from MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec]) by MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec%5]) with mapi id 15.20.6609.022; Wed, 19 Jul 2023 13:57:22 +0000 From: Benjamin Poirier To: David Ahern , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-kselftest@vger.kernel.org" , Ido Schimmel Subject: [PATCH net-next v2 3/4] nexthop: Do not return invalid nexthop object during multipath selection Thread-Topic: [PATCH net-next v2 3/4] nexthop: Do not return invalid nexthop object during multipath selection Thread-Index: Adm6SPCTjLnm6ZDF2UuYdzGvm4mP9w== Date: Wed, 19 Jul 2023 13:57:22 +0000 Message-ID: <20230719-nh_select-v2-3-04383e89f868@nvidia.com> References: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> In-Reply-To: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: YQXP288CA0028.CANP288.PROD.OUTLOOK.COM (2603:10b6:c00:41::40) To MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) x-mailer: b4 0.12.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB4373:EE_|SJ0PR12MB6687:EE_ x-ms-office365-filtering-correlation-id: 1b305924-6441-45d3-f67b-08db88601311 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9SrbSJxm0ffRrFOZu2eWUcL5lVO6wXLc73ytkiYB+nmL874YjRJh0J7BmDRlYwY3JgaxdgeQgOdGhzqBrEWpks0SJKR0SwQoorAW5tS8G+qUdyxDX7HJ2SSfYDOPaKRcNTxAxLhyo/1FEnNgs8O8jjWODd8deMLbs7u2MWcOBmOzhZ/w7lpDelrOaKt+fxypL9Wh3C6HmtLve8EIHlTFZQGxxctZfXXlP6DR6XWk1GPq3kIbrpt4IfV8VIQUpuDhx+jKMok3rtj1n/qCNONsqUemS32NSCBnllyTXoQ7rNJI/RMMiNMjgRnReIm07Bzx5f7mJzeuapAheonhepFrNOg4+jgvePasOEtTVYRGOggxfBySciPMz/7cOGeU0nSbs2pwzpWw6dJeXtAPKi/UhbozSDZYIqr2ahbFV3tLzG5vEWyKI8Ye8+9yQPraox0HUiyq3gdBQd0/fl5BjFV8GqDs6eahfTjVN1wE9h2XDWm6FlO4moLiCz78c5R9zFfQod8qLUHIjwbz56QQB7lF/mOXZKaQcjyf2Xu3qQo+c+KTZO3jWYW4Cur8aVwj3v5Q x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4373.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(366004)(136003)(346002)(39860400002)(396003)(451199021)(71200400001)(107886003)(38100700002)(122000001)(2906002)(6512007)(6486002)(2616005)(83380400001)(36756003)(186003)(6506007)(26005)(86362001)(64756008)(478600001)(4326008)(66446008)(41300700001)(8936002)(8676002)(54906003)(110136005)(66556008)(66476007)(316002)(66946007)(5660300002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?fxk8FmSI8xb0bBtxbxXc9nRnFL21?= =?utf-8?q?HvehY+Zec40UORO9C0W+qt9XHD7FGVSv4MvhZRugMSux7Pa8YHxRqijkyQKUr0wT6?= =?utf-8?q?gGeDQVJWS0fQm1V9km/ro6Vo7j2d71UnmdoEgpZLDz1CXa9AwWzdMNGv1ltWB6kp0?= =?utf-8?q?aAIlec4fshwdXD73IUPlnziOWldBSxNNy65Z0A8Gj9pKXuccP1pKNFnnn9c8XNeEz?= =?utf-8?q?4aETqI1nE7duUzkj9zFcPoQX7ZeosCRd/q6pWlzvhmu3BjGWe+gL3lOueaj7eXucQ?= =?utf-8?q?5lkldrv5T++V7Cu10xmEXnoqisM6RzAn8GR9Zjngk1TZ1RBoMCInZ1J4Vl/wL8W3g?= =?utf-8?q?Gd7+3Y7tiQ2SfzzycVVoYGsWUc5z31q6cNQkELuM/IiE8u4EBzT8uM7OGJKA0CCPL?= =?utf-8?q?7u4rC7euatZDI/PACOb4wx87OgZV2Cx1nOruO3CrrAYDv93UEQmZYnX0YEe1xvW4O?= =?utf-8?q?RNaq+HGt/mjLU46UXKck2ohryjye8jmULFCzl/Yc3rGzvbbh1yOyJe2QgamMuQ4bz?= =?utf-8?q?CdIpsF0+Utxwa5W/w4UoFeNN2gFiRAn2JDdA9toh6NIfiY4dlTADfA7mcItoiZxPn?= =?utf-8?q?kow0RmzSBIqK5e2ER3NYo75vueEij6AO0TFAUCPsAkvmgZazFTBR4/b5lHM7logm9?= =?utf-8?q?u3iCxx7Mk0VueYBtE/HzcsQ1lD7xQdVX+10rl3ekQbtzX8E5iUfUwlhDrPkWgd2oY?= =?utf-8?q?wKBJWd8JF25G34AQWhv4Xm9ptxRPcfNMYVz7w6z403CJbk6hNSo6TN/BCNfJTvIbX?= =?utf-8?q?Ut4xGCQYqJ7m00sX/d2r1X0DS9RLVJyU6dy+Qj5OlVYrSX1qNcilrWr4v9n1rXJRg?= =?utf-8?q?i8atVBEgq1zpV8rWoj5fC8V9qMrOSR09NIM+C35tZib6kNuYswKgIBaogdpKKuGo9?= =?utf-8?q?T5HKz3mlmky8tyl2nD3/Q2WYyhjxphvPgdqx6HHAsMxF4dt8lGw3z1O5qbW58TfBO?= =?utf-8?q?r8qau9NVEZHuwXKpnE6GRDovhK9eW1v17GDVS5OONZ5IMR1CPem+e6utHrafMNytd?= =?utf-8?q?7lgFDnrWb1dY3hGPm1PJ4qvjaBs8JCja82vkwW/JCwmJuKoo9Qzzcqa1dujVvjx5O?= =?utf-8?q?oNR892K/E3s8G97AMHaEIT/zKrk6LrTo/tl7CqIRMeH3m044yRya+njgJckE+u9vv?= =?utf-8?q?r7Vk5krlALl14S2qLT4uccYa6EPcmFDWS+RT85HZ0vqUplC6IBDooskeQUCPhSoij?= =?utf-8?q?ztMSD4k0WCPzNPYv1v2JPOEB8GG4IMLMpApYSm0rk6JOX9nPcRQpafsCTeg0LHg3v?= =?utf-8?q?5OmQBEljeEVA7qv6FLtW8YgRYGxHuU76xWA+iwCLXctTG/XI9z0GHNdA9dQ/ojajR?= =?utf-8?q?HDcdjua5tQf87HWGQQoCNJ63pi1x/Pm92bpZtRBkjGDyXo9bTTzb9TPRWMI9V5aIt?= =?utf-8?q?DHlUvLwl0aWG26tNTMCK3qP2ZrHzfPD2SfnA9IlSArgb8jVAxf5P7YC9xk+inDjKg?= =?utf-8?q?29+uRSPV0TLTD4f8EYrweVtN19IayG6KQBfFKgXFv3uy/d/dO4VCJx5z4XGGvn11s?= =?utf-8?q?lyk90C4F656s?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4373.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b305924-6441-45d3-f67b-08db88601311 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2023 13:57:22.1009 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CFRE29vqlxDz3Z86gHnSe3hJ4JNyZ37NqhkAjrkUcg7ckagKEYODgck26oEOoKRFL3Y+SEYWaW7P2B+13M7aQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6687 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org With legacy nexthops, when net.ipv4.fib_multipath_use_neigh is set, fib_select_multipath() will never set res->nhc to a nexthop that is not good (as per fib_good_nh()). OTOH, with nexthop objects, nexthop_select_path_hthr() may return a nexthop that failed the nexthop_is_good_nh() test even if there was one that passed. Refactor nexthop_select_path_hthr() to follow a selection logic more similar to fib_select_multipath(). The issue can be demonstrated with the following sequence of commands. The first block shows that things work as expected with legacy nexthops. The last sequence of `ip rou get` in the second block shows the problem case - some routes still use the .2 nexthop. sysctl net.ipv4.fib_multipath_use_neigh=1 ip link add dummy1 up type dummy ip rou add 198.51.100.0/24 nexthop via 192.0.2.1 dev dummy1 onlink nexthop via 192.0.2.2 dev dummy1 onlink for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip neigh add 192.0.2.1 dev dummy1 nud failed echo ".1 failed:" # results should not use .1 for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip neigh del 192.0.2.1 dev dummy1 ip neigh add 192.0.2.2 dev dummy1 nud failed echo ".2 failed:" # results should not use .2 for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip link del dummy1 ip link add dummy1 up type dummy ip nexthop add id 1 via 192.0.2.1 dev dummy1 onlink ip nexthop add id 2 via 192.0.2.2 dev dummy1 onlink ip nexthop add id 1001 group 1/2 ip rou add 198.51.100.0/24 nhid 1001 for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip neigh add 192.0.2.1 dev dummy1 nud failed echo ".1 failed:" # results should not use .1 for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip neigh del 192.0.2.1 dev dummy1 ip neigh add 192.0.2.2 dev dummy1 nud failed echo ".2 failed:" # results should not use .2 for i in {10..19}; do ip -o rou get 198.51.100.$i; done ip link del dummy1 Signed-off-by: Ido Schimmel Signed-off-by: Benjamin Poirier Reviewed-by: David Ahern --- net/ipv4/nexthop.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c index c12acbf39659..93f14d39fef6 100644 --- a/net/ipv4/nexthop.c +++ b/net/ipv4/nexthop.c @@ -1194,20 +1194,22 @@ static struct nexthop *nexthop_select_path_hthr(struct nh_group *nhg, int hash) for (i = 0; i < nhg->num_nh; ++i) { struct nh_grp_entry *nhge = &nhg->nh_entries[i]; - if (hash > atomic_read(&nhge->hthr.upper_bound)) - continue; - /* nexthops always check if it is good and does * not rely on a sysctl for this behavior */ - if (nexthop_is_good_nh(nhge->nh)) - return nhge->nh; + if (!nexthop_is_good_nh(nhge->nh)) + continue; if (!rc) rc = nhge->nh; + + if (hash > atomic_read(&nhge->hthr.upper_bound)) + continue; + + return nhge->nh; } - return rc; + return rc ? : nhg->nh_entries[0].nh; } static struct nexthop *nexthop_select_path_res(struct nh_group *nhg, int hash) From patchwork Wed Jul 19 13:57:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 13319029 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 926F8EB64DA for ; Wed, 19 Jul 2023 13:57:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231420AbjGSN5o (ORCPT ); Wed, 19 Jul 2023 09:57:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38956 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231434AbjGSN5n (ORCPT ); Wed, 19 Jul 2023 09:57:43 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2050.outbound.protection.outlook.com [40.107.92.50]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E68A1FFB; Wed, 19 Jul 2023 06:57:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LCVrFmt5NKhRTsGhnlgU6ohT9/+6HK9tEwzn4JDeIz805o+ky1WjX4zXEQTKlz2ZPp+J4ComvIq++VggrUUZbVotQktsIHG9PWKbrdqVTbp/30Esx0emdb/LvEZ0iGSl/IrwSM4z+NC1NwLk2oPWoskFlg0MOF2whsDljg8wAo1TXjy9H6R21bpxJWFB1AklDkciYPt/MGq/YIIBhX3MU2mx6FR5vp9gXq8tc2VB3fZmld7oP4Kk4ErAHD0CBbeh5Rbx1+Y1f9n+7JTF4bVbSJh4/CN6Blbg4C2FgaDcePOk4S5EjnbJWD2sZwD58AANX2m6pqI+DCEfYWdSMWtt1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=mHreOrxHmeQscue0UYzAUvLaEA5x2VQ2tDaoVTf6vR0=; b=Y6J7dLe3Bv6QXEFDj2Dv8aqd6p2Q3vWX2094cjd9tdaeMX6vHcq0M/xmdqHRS0gCa8NRgCxb4vzk76n1uiRGLMM23Oc9+dxYsAtxazwqKphKxlWlHIeJmE+u2E30TvDc72k0UrTxkaAor+Nf+H9tQzzxWGGzvpbxnWWdFkah/9+5DRipGs2S7fv023fxSmuMZtzfc45mpM9LvvN+ehc8Bp3n5Ue0kFlBDutcQSyesMvvhyDPWRu5BrmotvPEbMSpf/qcpc1fnngxFR7kFjfaNxbB2ACm+GrcOqqNq+XDIei5ESPsjNqBAEPSS0IIe2Cthvn/lPM+3nABOrkf00VJfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mHreOrxHmeQscue0UYzAUvLaEA5x2VQ2tDaoVTf6vR0=; b=Pk0fRJ5l0cwtD8YsmKLHbSOJOYWr/ClDW1npDFvUJyo//FBFSEGnvPi+UXz65p56S5KgRjviXRwUCdV//QwQAN7d3004baNUnl+uIe5V/7SLOL3DTHa5A8EMPLRWcuhjn1JH0OXyqE3JRZV2ZP98yrETbwwIJLCQV1Kv3LZFdMrpBipCGUs1kszEJAr4Al5rz7UYKBB7lX3yEBXFWbq+HVRBb+/9O8IqOSX6muNlPn0JSe19K/muhbfUsTiUS4hf27bEH7Q+FwkECbQ5JOVPvLAgsTRFOB5HEAFKzbd4vduPVZgpC+vBdR5no/X40lWYrCOpmx76AvXoQMEy1PqDLQ== Received: from MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) by SJ0PR12MB6687.namprd12.prod.outlook.com (2603:10b6:a03:47a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Wed, 19 Jul 2023 13:57:27 +0000 Received: from MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec]) by MN2PR12MB4373.namprd12.prod.outlook.com ([fe80::982f:232b:f4af:29ec%5]) with mapi id 15.20.6609.022; Wed, 19 Jul 2023 13:57:27 +0000 From: Benjamin Poirier To: David Ahern , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-kselftest@vger.kernel.org" Subject: [PATCH net-next v2 4/4] selftests: net: Add test cases for nexthop groups with invalid neighbors Thread-Topic: [PATCH net-next v2 4/4] selftests: net: Add test cases for nexthop groups with invalid neighbors Thread-Index: Adm6SPOwIKYdSXmxeUyme8WchlbtrA== Date: Wed, 19 Jul 2023 13:57:27 +0000 Message-ID: <20230719-nh_select-v2-4-04383e89f868@nvidia.com> References: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> In-Reply-To: <20230719-nh_select-v2-0-04383e89f868@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: YQBPR01CA0033.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01::41) To MN2PR12MB4373.namprd12.prod.outlook.com (2603:10b6:208:261::8) x-mailer: b4 0.12.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB4373:EE_|SJ0PR12MB6687:EE_ x-ms-office365-filtering-correlation-id: b927cd76-6496-43f2-22e8-08db8860162e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YbBlhdjsajkkNGTzG6GYm6OJG5xLZ2wfMUzLsoEohLFkyPJiUHtDdsPdk6Jc929t8qD6j3wzR5scFAlbSpota3L322NKlArs3GNXcuIkbCRzGpqbhTsTtI0yRjjHJAAySRVfrl+6AiA3S+FNZW76hRhQUPZOnnouz0FE1JrZK81sxwlhotYZTrx9yYxoafWZJk/9bl+l58EviyyWfWvoZpDdYNf+jdwh9bN6CsmUY3uUZjB42kxMYKSIBOSgf90tSw7DtLedsbrO/pfvvnjVSBKY9CShFhXoyPpTt97OQ4SCvIVG/NEND/lSbElGSw2EiO7sochBgtQ0/hZYcg5yVhtxbnF3+KZbA03LE5+8Am2Y92EIdFYjL8quw/TzpYzpYd2399VcuEJYuUk6CwD0bpkAUSRMtOKe5RhkaUnvlw6eE0j3obXbJvdG0Cvbq1bPUtwuL1dXcv/mG+HvDPen8xWbOFuuiQy3XEjfLKeoEqvj01v7q1GDCEQLchk2aAfkLUQMiqJUoEC6qw6Rr6WuLK0hZaeqc5/1vbmrBh1T8Odp9Sv3CP5AYUTrFKK7d8wo x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4373.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(366004)(136003)(346002)(39860400002)(396003)(451199021)(71200400001)(38100700002)(122000001)(2906002)(6512007)(6486002)(2616005)(83380400001)(36756003)(186003)(6506007)(26005)(86362001)(64756008)(478600001)(4326008)(66446008)(41300700001)(8936002)(8676002)(54906003)(110136005)(66556008)(66476007)(316002)(66946007)(5660300002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?6Hzk4atqK4krWnV1DWwJ+M3npQZL?= =?utf-8?q?r3FmJYM8BXSr/clY/4NPYYutNAl0V6OIDIy/FGbpCC39Q1XTymc54jUn2QqwaSJY9?= =?utf-8?q?sQ0BdLye9RIsEvyWmoAtwjGF4UxivmHJly+teFVyq1VHBdVSNNomc4cdQom7tzXVi?= =?utf-8?q?NGiCtF2FuX3Kl/9ZruRk/pyRmuvj2/dRNLWqCih/97HHhu/kJ8yjt80oihAecUn1+?= =?utf-8?q?SfjIl418GLcafkPoTuZ/b0Zf4xHxORK9h/41uWJl46ilDnG8s3A74JqjKiRmUvQXo?= =?utf-8?q?WboD+qgXITILLhc/UXywjUKgLH8bX8a8hZkca1Xo5JhsC3W/zs+qMFCVx3/cQiZ/4?= =?utf-8?q?81BnqvlfBSYNVsKyK5qLJaFTAzXx15HXI9Ux+mfOUo+7W4HNpsYjXoZCK8CD1goDj?= =?utf-8?q?7RQhnVFNJQkpXXlDCn0FXV2rzUhMOOPqT13hxENZMx+0kI6yDd/958NCVH5nwKpWu?= =?utf-8?q?kTzHTXOROYiiGRaCh4gbUXzPqxYdi118mkc2qmpTSFR7IOaVf8Qdevur1caDYENPd?= =?utf-8?q?KHzvVvSVSDkY8Y4zYJTsd+6IJgkju5vqwzYbgbXblE1m8GPoucRv0+G3QjyOmq2ZL?= =?utf-8?q?E8BFh0UVXzOFNLZo8HKUdrdb0LgHHOxDnQ7s3S3Ga57BY7ysbGERaiOUt6vt+azSK?= =?utf-8?q?be2LBxHo/lPvk8AM8AQKUORpLGkj7lKFRmRAErkykAK/8cAQNnu1TZyfStO3ZsIX5?= =?utf-8?q?Glyn8uJYqolwl04/lyJuH0dO04BRViJSnHpwy1qtQgXMsDfcuUY5o/EC2tItICOTB?= =?utf-8?q?7cM+p74bn0L5uk53NfKfr4zXqgzqHGtF015hN2K32yU6njRRcx+zN/Rof6WmCDA30?= =?utf-8?q?bKb6uqe11OMz2WgfPA02K67dHFNHalubPiwesQ+TS1AItm9AeGGyvOWr9/MCHYeHv?= =?utf-8?q?hrdbQfFzlYkggQYxffFBYs4PYcC6CluyQc9uwknGyuZ+L7PND9Jmqdao2hOWbsz8M?= =?utf-8?q?zVrlPFTiwSfpPhyAIoeEi//g+ZQzBZ09w1Wg9dGD7uhWruXBF0w2Wuklu1Dg1WqAN?= =?utf-8?q?cyffm0v2SGHYhlvl77NR63mcd5rlwRMRu2hU9ckhhqFovCEKT3OZaRT1P7EurWXBA?= =?utf-8?q?YZtVbr/GLQMO2BzoT7TbTlK/U0BIPR0+2hn+dP750nuopusY5R/EHcLUgXgRO8kLy?= =?utf-8?q?IUjcW7kgawTDF+2QwhnQfvi3o2CxnHDAQ5F8A7KEhHMfcegoEfYB43iMsz++n9JcO?= =?utf-8?q?VF8GP9ab8z1aYEHKQNr6ohxx2BkD5lYnl5DzmgXwXYDlXQ3dHqj3xujbHUKuUqDp8?= =?utf-8?q?Mm+IeUGEsXLo+xL4hfYiN0UkEuD7xY2LmcPC3yD8a6L/WxBRiMg8QiuS7rSp4vix2?= =?utf-8?q?4fOcRBMZsvcDJr7ENHBtxeh1hFX+l87TGIgymhVbKPnTrEdQBhrR4fc81fsBZWtnL?= =?utf-8?q?Y3sAhm3VWn6F6R0LvsFcWWvmbaKex6XcXcCxtaoanGn3r3S6tzlbC1cR5FgDvdJsQ?= =?utf-8?q?Y596ykyhV1/XaL66sK+h9PwLMGWR6wwcmkigrvN+AzgK0F3apX0e2+I2DGTC8RLfe?= =?utf-8?q?8vdI6PrDc/+w?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4373.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b927cd76-6496-43f2-22e8-08db8860162e X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2023 13:57:27.3386 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: opR0o+KslADtf3gXgBq+ILajGfBVh4AlIMKsae1jbjrcMtSFeWIXQkNbpXUoZAMX9sfpoZSbej1/0uawRbRptA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6687 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Add test cases for hash threshold (multipath) nexthop groups with invalid neighbors. Check that a nexthop with invalid neighbor is not selected when there is another nexthop with a valid neighbor. Check that there is no crash when there is no nexthop with a valid neighbor. The first test fails before the previous commit in this series. Signed-off-by: Benjamin Poirier Reviewed-by: David Ahern --- tools/testing/selftests/net/fib_nexthops.sh | 129 ++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh index 0f5e88c8f4ff..54ec2b7b7b8c 100755 --- a/tools/testing/selftests/net/fib_nexthops.sh +++ b/tools/testing/selftests/net/fib_nexthops.sh @@ -29,6 +29,7 @@ IPV4_TESTS=" ipv4_large_res_grp ipv4_compat_mode ipv4_fdb_grp_fcnal + ipv4_mpath_select ipv4_torture ipv4_res_torture " @@ -42,6 +43,7 @@ IPV6_TESTS=" ipv6_large_res_grp ipv6_compat_mode ipv6_fdb_grp_fcnal + ipv6_mpath_select ipv6_torture ipv6_res_torture " @@ -370,6 +372,27 @@ check_large_res_grp() log_test $? 0 "Dump large (x$buckets) nexthop buckets" } +get_route_dev() +{ + local pfx="$1" + local out + + if out=$($IP -j route get "$pfx" | jq -re ".[0].dev"); then + echo "$out" + fi +} + +check_route_dev() +{ + local pfx="$1" + local expected="$2" + local out + + out=$(get_route_dev "$pfx") + + check_output "$out" "$expected" +} + start_ip_monitor() { local mtype=$1 @@ -575,6 +598,112 @@ ipv4_fdb_grp_fcnal() $IP link del dev vx10 } +ipv4_mpath_select() +{ + local rc dev match h addr + + echo + echo "IPv4 multipath selection" + echo "------------------------" + if [ ! -x "$(command -v jq)" ]; then + echo "SKIP: Could not run test; need jq tool" + return $ksft_skip + fi + + # Use status of existing neighbor entry when determining nexthop for + # multipath routes. + local -A gws + gws=([veth1]=172.16.1.2 [veth3]=172.16.2.2) + local -A other_dev + other_dev=([veth1]=veth3 [veth3]=veth1) + + run_cmd "$IP nexthop add id 1 via ${gws["veth1"]} dev veth1" + run_cmd "$IP nexthop add id 2 via ${gws["veth3"]} dev veth3" + run_cmd "$IP nexthop add id 1001 group 1/2" + run_cmd "$IP ro add 172.16.101.0/24 nhid 1001" + rc=0 + for dev in veth1 veth3; do + match=0 + for h in {1..254}; do + addr="172.16.101.$h" + if [ "$(get_route_dev "$addr")" = "$dev" ]; then + match=1 + break + fi + done + if (( match == 0 )); then + echo "SKIP: Did not find a route using device $dev" + return $ksft_skip + fi + run_cmd "$IP neigh add ${gws[$dev]} dev $dev nud failed" + if ! check_route_dev "$addr" "${other_dev[$dev]}"; then + rc=1 + break + fi + run_cmd "$IP neigh del ${gws[$dev]} dev $dev" + done + log_test $rc 0 "Use valid neighbor during multipath selection" + + run_cmd "$IP neigh add 172.16.1.2 dev veth1 nud incomplete" + run_cmd "$IP neigh add 172.16.2.2 dev veth3 nud incomplete" + run_cmd "$IP route get 172.16.101.1" + # if we did not crash, success + log_test $rc 0 "Multipath selection with no valid neighbor" +} + +ipv6_mpath_select() +{ + local rc dev match h addr + + echo + echo "IPv6 multipath selection" + echo "------------------------" + if [ ! -x "$(command -v jq)" ]; then + echo "SKIP: Could not run test; need jq tool" + return $ksft_skip + fi + + # Use status of existing neighbor entry when determining nexthop for + # multipath routes. + local -A gws + gws=([veth1]=2001:db8:91::2 [veth3]=2001:db8:92::2) + local -A other_dev + other_dev=([veth1]=veth3 [veth3]=veth1) + + run_cmd "$IP nexthop add id 1 via ${gws["veth1"]} dev veth1" + run_cmd "$IP nexthop add id 2 via ${gws["veth3"]} dev veth3" + run_cmd "$IP nexthop add id 1001 group 1/2" + run_cmd "$IP ro add 2001:db8:101::/64 nhid 1001" + rc=0 + for dev in veth1 veth3; do + match=0 + for h in {1..65535}; do + addr=$(printf "2001:db8:101::%x" $h) + if [ "$(get_route_dev "$addr")" = "$dev" ]; then + match=1 + break + fi + done + if (( match == 0 )); then + echo "SKIP: Did not find a route using device $dev" + return $ksft_skip + fi + run_cmd "$IP neigh add ${gws[$dev]} dev $dev nud failed" + if ! check_route_dev "$addr" "${other_dev[$dev]}"; then + rc=1 + break + fi + run_cmd "$IP neigh del ${gws[$dev]} dev $dev" + done + log_test $rc 0 "Use valid neighbor during multipath selection" + + run_cmd "$IP neigh add 2001:db8:91::2 dev veth1 nud incomplete" + run_cmd "$IP neigh add 2001:db8:92::2 dev veth3 nud incomplete" + run_cmd "$IP route get 2001:db8:101::1" + # if we did not crash, success + log_test $rc 0 "Multipath selection with no valid neighbor" +} + ################################################################################ # basic operations (add, delete, replace) on nexthops and nexthop groups #