From nobody Tue Apr 7 17:15:07 2026 Received: from mail-pf1-f225.google.com (mail-pf1-f225.google.com [209.85.210.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 988B2330321 for ; Thu, 26 Feb 2026 18:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772131627; cv=none; b=KG41qpswlsq/YEQaRSW5pRKDuVsVNnJSChar1LfeZfSYqszWvYNsof5h70BGHN06o7isgNTWHwzxbcBj6IeBDG86GHvqQmqxG6I1Lv3y7apcO5b3l7GZOu8G2U1WEKy1x/u471V3K7iW/7Kxj0HVv+314Da1EP561HRiWVwzm9Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772131627; c=relaxed/simple; bh=W86nEt6NxrH/azDYUo8e8qcXbO9XW3P9ASHlOypQvuE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UYMhSbWiTjPZn9rsqibMmRS3Yw3SbLbvHLbZJXlTtmw4g0meQtSiQmg6RMdNstYtSIB8x39Yd7BG0WN/62KB/PCgSMN3Thpx6CxEKs8o8QueitkjRybDC7FEVtGmx7Wev/n6OBOl+WT4J/1fbQonB81JPXSIxgo7ZKYTj/QbgRQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=GxuSCWox; arc=none smtp.client-ip=209.85.210.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="GxuSCWox" Received: by mail-pf1-f225.google.com with SMTP id d2e1a72fcca58-827270d50d4so1282337b3a.3 for ; Thu, 26 Feb 2026 10:47:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772131626; x=1772736426; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HBpIii1a6ci9G3XxJ980AkP2auUKLh+wfXsf/L+7o90=; b=NdSOjFRwG3M5fsBhr4lAKcuic1UFsxboeVxFzZNu60+lgK4YRp9aqCrgkuuSW8S9b6 np3+IzyKPS7uxCRIizujLuyFDPJnVqmmpbMWJM2Pg3onlEUdI7RbEt4vLOiObhtuz39m bMKuC4ZYGTzdd2dwSGD8vLPIiLOVHyxiINbjiqH8nSnlmWK+0vuhg0VIBFz2TudgONiQ P/LX8LhVLUWMF6astJnrJok0H5RvV/YlyC0ViPcAjZTzOcTxFvBjorAMo/5g8oyJew/b Xd/TBK9ACzH4BXClNuBUg56fiRodeCTCiaqr5026ptGoUmHToVtCa3YdonbVfFKoQTAv JojA== X-Forwarded-Encrypted: i=1; AJvYcCUi90WtB6SjG2fNgz9crIzB6pFRqoZa9vfAirhxDPUYN01KLBan1KZhAWQoRl6cTR0uHvemCxrriuYTwU8=@vger.kernel.org X-Gm-Message-State: AOJu0YzXpZgBMUpLKHmQHbKS53B9uYPoCSQ2b91xksbKAptj35d/XvOs 2DL3MqtVECDIZAdTEFZxmjCKACDCISN93gGLsmcA4psjBMlMU1+PT8TXUipmWbGn0DCh0ssxv+j NQpWT/jw6eMCzNpNUJdLiAwm+ftbTcO2MAeV7dgyxYlZMEf5N/cKq5V1CsFjz1ToJGPNAh1p7NA 7NPYQg3n9gqMtp/qhUzeQ/2bF1BmuTAp/lAkXRR9otJnj8j8FGC50D44bE1/j72DCvV+R8/6m+e M2kIbMhY1a7P1b6cYWR X-Gm-Gg: ATEYQzxevk23AEJpxDJ790G2OSnhRyvFstOSinwIlK8u6nBvqQKIWIovFhM5efcS7nO tZkGal8FMz4iqVXmNz6tNh1e2WZKkP4uFNe9yg0X+l/7+Bp5v5ZbbjZALE6h2uHWQOkMzIlafDE lYxWad5lKGPNjz4eX39OxzG+CvD4jiVGkjYMgTNojAD5Jk0G8hx189a/MN0HS4M3vVhyA3jAtOk uAQe9j3PZ8E/l2ZD5CWtMvFTXn5vAKsyz9Ajo3IdlQ4ynTJmsh2dJ+/59r/RKReIKF+OF3CiooZ GFbp5nmortEZvwbuxNKg7F2sUHhJvYGtBnqRdSLLhKSJ/g+j1QOlGdqgPw54yLCkXbQNGh62JTu 2EF7qSPF4PGXDtw0yeQTkwYduoUkupK/Ua0A4pWRHf88dSYS1eeGsCGvpHDBz4Olilt0m2epAXB xJcX45ikBl7VjNKL38/l8s2ht+abN9YWNEn5651VNq/2u6+wsXeE4n6LQ= X-Received: by 2002:a05:6a00:6b93:20b0:81f:3f88:89ee with SMTP id d2e1a72fcca58-8274d9408dcmr73095b3a.12.1772131625852; Thu, 26 Feb 2026 10:47:05 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-27.dlp.protect.broadcom.com. [144.49.247.27]) by smtp-relay.gmail.com with ESMTPS id d2e1a72fcca58-82739e492a6sm335912b3a.5.2026.02.26.10.47.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Feb 2026 10:47:05 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8c71500f274so123363885a.1 for ; Thu, 26 Feb 2026 10:47:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1772131625; x=1772736425; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HBpIii1a6ci9G3XxJ980AkP2auUKLh+wfXsf/L+7o90=; b=GxuSCWoxCs9dnunJSI0/zZJUiH065i5fsy2mFBGYlqCLaQ7LxIeQVYX7IGhPK6+h4h pxgxEXxzUYNE8hM8cth8YaLNpWRKy4O0achHsURAgC8LDnT9RHquiJu0jXqJjxqSgmwz Y1woy4xlxE9tzijAm3qnt+/WHa/peBCHirJBw= X-Forwarded-Encrypted: i=1; AJvYcCUaXfoSoYFNPh9HUFHS07/cX4auEC0NshRmWpn0UvCxHpTkYnI9ICEEKa6CWmxWJLreog3JVCaKyqpZ+tM=@vger.kernel.org X-Received: by 2002:a05:620a:1a90:b0:8ca:55:ac60 with SMTP id af79cd13be357-8cbc12294fdmr421801385a.78.1772131624405; Thu, 26 Feb 2026 10:47:04 -0800 (PST) X-Received: by 2002:a05:620a:1a90:b0:8ca:55:ac60 with SMTP id af79cd13be357-8cbc12294fdmr421794885a.78.1772131623840; Thu, 26 Feb 2026 10:47:03 -0800 (PST) Received: from lvnvda4076.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8cbbf6f5c41sm255721485a.24.2026.02.26.10.47.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 10:47:03 -0800 (PST) From: Kiran Kella To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, daniel.zahka@gmail.com, willemb@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: shuah@kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, jayakrishnan.udayavarma@broadcom.com, ajit.khaparde@broadcom.com, akhilesh.samineni@broadcom.com, Kiran Kella Subject: [net-next, v3 1/2] psp: Support for transmit on logical device when the underlying transport device supports PSP. Date: Thu, 26 Feb 2026 10:46:53 -0800 Message-ID: <20260226184654.3180648-2-kiran.kella@broadcom.com> X-Mailer: git-send-email 2.45.4 In-Reply-To: <20260226184654.3180648-1-kiran.kella@broadcom.com> References: <20260226184654.3180648-1-kiran.kella@broadcom.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" This is achieved by propagating the psp_dev from the lower device to the upper devices in the device stack via a netdevice notifier. The lowest device owns the psp_dev pointer while the upper devices just borrow the pointer. When the lower device is unlinked, the borrowed pointer is cleared in the upper device. Assumption being that psp_dev is set on the lowest device before any upper devices are stacked on that lowest device. Signed-off-by: Kiran Kella Reviewed-by: Ajit Kumar Khaparde Reviewed-by: Akhilesh Samineni --- net/psp/psp_main.c | 117 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 1 deletion(-) diff --git a/net/psp/psp_main.c b/net/psp/psp_main.c index a8534124f626..303a3af3bdf2 100644 --- a/net/psp/psp_main.c +++ b/net/psp/psp_main.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -110,13 +111,45 @@ void psp_dev_free(struct psp_dev *psd) kfree_rcu(psd, rcu); } =20 +/** + * psp_clear_upper_dev_psp_dev() - Clear borrowed psp_dev pointer on upper + * device + * @upper_dev: Upper device that may have borrowed psp_dev pointer + * @priv: netdev_nested_priv containing the psp_dev being unregistered + * + * Callback for netdev_walk_all_upper_dev_rcu() to clear borrowed psp_dev + * pointers on upper devices when the underlying psp_dev is being unregist= ered. + * + * Return: 0 to continue walking, non-zero to stop. + */ +static int psp_clear_upper_dev_psp_dev(struct net_device *upper_dev, + struct netdev_nested_priv *priv) +{ + struct psp_dev *psd =3D priv->data; + struct psp_dev *upper_psd; + + upper_psd =3D rcu_dereference(upper_dev->psp_dev); + if (upper_psd =3D=3D psd) + rcu_assign_pointer(upper_dev->psp_dev, NULL); + + return 0; +} + /** * psp_dev_unregister() - unregister PSP device * @psd: PSP device structure + * + * Unregisters a PSP device and clears all borrowed psp_dev pointers on + * upper devices (e.g., VLAN subinterfaces) that reference this device. + * This prevents use-after-free if upper devices still have borrowed + * pointers when the psp_dev structure is freed. */ void psp_dev_unregister(struct psp_dev *psd) { struct psp_assoc *pas, *next; + struct netdev_nested_priv priv =3D { + .data =3D psd, + }; =20 mutex_lock(&psp_devs_lock); mutex_lock(&psd->lock); @@ -137,6 +170,12 @@ void psp_dev_unregister(struct psp_dev *psd) =20 rcu_assign_pointer(psd->main_netdev->psp_dev, NULL); =20 + /* Clear borrowed psp_dev pointers on all upper devices */ + rcu_read_lock(); + netdev_walk_all_upper_dev_rcu(psd->main_netdev, + psp_clear_upper_dev_psp_dev, &priv); + rcu_read_unlock(); + psd->ops =3D NULL; psd->drv_priv =3D NULL; =20 @@ -313,11 +352,87 @@ int psp_dev_rcv(struct sk_buff *skb, u16 dev_id, u8 g= eneration, bool strip_icv) } EXPORT_SYMBOL(psp_dev_rcv); =20 +/** + * psp_netdevice_event() - Handle netdevice events for PSP device propagat= ion + * @nb: notifier block + * @event: netdevice event + * @ptr: netdevice notifier info + * + * Propagates psp_dev pointer from lower devices to upper devices when + * upper devices are created (e.g., VLAN subinterfaces). + * Excluding from this logic, the upper devices that have multiple lower + * devices eg., bond devices. + * + * Return: NOTIFY_DONE + */ +static int psp_netdevice_event(struct notifier_block *nb, + unsigned long event, void *ptr) +{ + struct netdev_notifier_changeupper_info *info; + struct net_device *dev, *upper_dev; + struct psp_dev *psd; + + if (event !=3D NETDEV_CHANGEUPPER) + return NOTIFY_DONE; + + info =3D ptr; + dev =3D netdev_notifier_info_to_dev(ptr); + upper_dev =3D info->upper_dev; + + if (netif_is_lag_master(upper_dev)) + return NOTIFY_DONE; + + if (info->linking) { + /* Lower device is being linked to an upper device. + * Propagate psp_dev from the immediate lower device to the + * upper device. The immediate lower device would have already + * got the psp_dev pointer set in a previous notification (or + * owns it if it's the lowest device). + * Upper devices just borrow the pointer. + * + * Use psp_dev_tryget/put to guard against a concurrent + * psp_dev_unregister that may have already cleared the + * lower device's pointer and started freeing the psp_dev. + */ + psd =3D rtnl_dereference(dev->psp_dev); + if (psd && psp_dev_tryget(psd)) { + rcu_assign_pointer(upper_dev->psp_dev, psd); + psp_dev_put(psd); + } + } else { + /* Lower device is being unlinked from an upper device. + * Clear the borrowed psp_dev pointer on the upper device. + * Any devices stacked above upper_dev will get their own + * NETDEV_CHANGEUPPER notifications as the stack unwinds. + */ + psd =3D rtnl_dereference(upper_dev->psp_dev); + if (psd) + rcu_assign_pointer(upper_dev->psp_dev, NULL); + } + + return NOTIFY_DONE; +} + +static struct notifier_block psp_netdevice_notifier =3D { + .notifier_call =3D psp_netdevice_event, +}; + static int __init psp_init(void) { + int err; + mutex_init(&psp_devs_lock); =20 - return genl_register_family(&psp_nl_family); + err =3D register_netdevice_notifier(&psp_netdevice_notifier); + if (err) + return err; + + err =3D genl_register_family(&psp_nl_family); + if (err) { + unregister_netdevice_notifier(&psp_netdevice_notifier); + return err; + } + return 0; } =20 subsys_initcall(psp_init); --=20 2.45.4 From nobody Tue Apr 7 17:15:07 2026 Received: from mail-ot1-f100.google.com (mail-ot1-f100.google.com [209.85.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99BA91E9B1A for ; Thu, 26 Feb 2026 18:47:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772131651; cv=none; b=koSWSGUpjlWvUQtQUSblLb0bZ265Cnpbb7qua7+PGiCFGQjI+JQ/Hrd4In/g7J6BmKSnos2exN1gRmtkmilaC4CwWGVqIO75UdIKzNdes3rgyQOEjkD0twOOU80U2I7g5pGfvBEwyVlltb559vqupjhp4pPRrhH72DpgluoMAx4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772131651; c=relaxed/simple; bh=o5gl4lvmo8nTD5aew6xv75adaez1vKzLC90tZuUkeGQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YKSEfybx0RbQ4wO+KyX+FQuHw3cOGaaMFPDaz6mEaW8XdpT5zxjKz7YovpfI/pB7bgLa7jgMslEtNy1Pa9p3D3QD17J6jBDGTB7fyZV+I9K05tG+YmW0kY/VEBji6/m6P9uzWFiHOVMeh47QRDg1TXncGfd6QI0kWrA0T94JQhk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=DPlwYU91; arc=none smtp.client-ip=209.85.210.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="DPlwYU91" Received: by mail-ot1-f100.google.com with SMTP id 46e09a7af769-7d4c4b494fcso688853a34.3 for ; Thu, 26 Feb 2026 10:47:29 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772131648; x=1772736448; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jafYfDMXlkNngqCFpdDSXM7Zpv6/tNdLZ8FA9C+kjOU=; b=HRGFqW2EdHvrDkT9nqrKMhaQV2WFsZA4EJbcMiPc0HkvPU5koJYQ19FNnBJWUCqsqY uz8yJ2r5DvKiD59R1NaPC0luNTqKVr3iAbNXQCoKhNstsGjlcK/YYZ0Q9I+A6dJ1xKOs fL/CokU8Um3IBuPqx4e/Psyyrsyk2sR4cHd9V3000boX+WVSoWoNoJds7/0Vf0k8MLSe HepfifHpsW8qf5AgGmNYBh9Kv2vX1PxRH1JIZITj0LfW8/PZ+Rx3eT80njinkMaM0oHt H1A5ZthnVPUmesM7CGAwXcFd4SWgmwJnCiPByWAEh/1zm47JG65SugTZiE1nLmqBAtJK 7+HQ== X-Forwarded-Encrypted: i=1; AJvYcCXj3v6ffVXyh3C7P1Ly7Bsdr+cV3Q0X834EUEKgiMYgAm755p+A5EYnNwAlI1iKwxTqJAzs1ogKdmnJUB0=@vger.kernel.org X-Gm-Message-State: AOJu0YxToYnpRvDOri7Fne0aIjlVNVuT8kyP75glQctIDnnysNiWEOV5 7pd6yKHTMhtQ1Tb+WuEC5cHe9d+DgaOTw91o9UUiv2zSt94bZMlQeO4RYqQHcotwuoIKy/bsbvC sNIbIO2vWbr+xEY3JUOuw6/cl2CXBXB3tHgISC3ZhTrY19z3qrs3RE7UjthT7d2VSDuRVImq8wB dmsftZ1giBtzCJSTppRpoT2A1xNRwAc916l30P3L0gRx1rCslpF1jRK+p3pkKkpENMx4rU0tMbx j3GVUA5Rhr7hNkmAiLb X-Gm-Gg: ATEYQzwb4MbEvn0/7BzhU0PT0ZrZIA0vFCeuzxYieDT3XBov7YQnpsrOI/7dO4/APSM es0vkQl3wkZwyb/TRuo3+o9nSF2T7Tv7+cUayrHql/+2ZEuTuzxXMZ+z0GqznDaPdwWPO+Jk7bw ZMTnOPCkBz4O3pINMdDcRi261tB2LJtqo/0GHikEsXZ8BcirA85MDPyRIj+q9bfY90J7dkA+KW5 ukgBf0igcCGSbf6SSVzxJILqqGm1BP0TaCu99lKYolo86I6aHp9lNwaTh3Uc62r0KlZqCMV8rrc qX1VrWv+yBFUYq/iwLSL7jnAfTyhPc577LWQSO4ZZpEjYlrBqglcLR1JmW2Vy7rtxE7VcQRP3v9 5R7NPCH54nFnlwghuKAGHog0U1vHiAGaza3+7TE/T1MKRom/+OihXHpIQhbb8+ewDvJLMxbzl1s dV7dFqtsRADGHL0D0/vhQDsLAOdIgKCspBBocvcg1MkjS2RaGMfVC/Elg= X-Received: by 2002:a05:6871:c314:b0:3e8:8e56:671d with SMTP id 586e51a60fabf-416270f31d4mr128427fac.53.1772131648389; Thu, 26 Feb 2026 10:47:28 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-27.dlp.protect.broadcom.com. [144.49.247.27]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-4160d2d4c0bsm377565fac.17.2026.02.26.10.47.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Feb 2026 10:47:28 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cb52a9c0eeso1338561285a.2 for ; Thu, 26 Feb 2026 10:47:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1772131647; x=1772736447; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jafYfDMXlkNngqCFpdDSXM7Zpv6/tNdLZ8FA9C+kjOU=; b=DPlwYU91pHG2TRP+TouWPRpfSuo9C80R0NunXO5UE1Z3LC4rKwcLv5r8hpXC9AV5rc w60UZiEzzsmaqXnyCxJefJ1mM+AWND1ASYGpTpqDD+uK+bjsbkupRKEkVqRVA8KzvT0C H3SGu2SSPANPdbKgXREpqsa4rPj4k1Vrtzpmg= X-Forwarded-Encrypted: i=1; AJvYcCWRhZsAZ5KemSYVVMVbcaonRMuhi3f1WGkNng+Ur+0tBTy8UWL2bV8KitIXaFeWZe4c4XeO6pavk9zNT5s=@vger.kernel.org X-Received: by 2002:a05:620a:710b:b0:8c7:c25:9e53 with SMTP id af79cd13be357-8cbbd04021bmr612526285a.59.1772131647502; Thu, 26 Feb 2026 10:47:27 -0800 (PST) X-Received: by 2002:a05:620a:710b:b0:8c7:c25:9e53 with SMTP id af79cd13be357-8cbbd04021bmr612522385a.59.1772131646927; Thu, 26 Feb 2026 10:47:26 -0800 (PST) Received: from lvnvda4076.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8cbbf6f5c41sm255721485a.24.2026.02.26.10.47.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 10:47:26 -0800 (PST) From: Kiran Kella To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, daniel.zahka@gmail.com, willemb@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: shuah@kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, jayakrishnan.udayavarma@broadcom.com, ajit.khaparde@broadcom.com, akhilesh.samineni@broadcom.com, Kiran Kella Subject: [net-next, v3 2/2] selftests: drv-net: psp: add test for VLAN sub-interface Date: Thu, 26 Feb 2026 10:46:54 -0800 Message-ID: <20260226184654.3180648-3-kiran.kella@broadcom.com> X-Mailer: git-send-email 2.45.4 In-Reply-To: <20260226184654.3180648-1-kiran.kella@broadcom.com> References: <20260226184654.3180648-1-kiran.kella@broadcom.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Add test to validate that the psp device information is propagated properly from the lower device to the upper devices so that the PSP transmit validation passes. Signed-off-by: Kiran Kella Reviewed-by: Akhilesh Samineni --- tools/testing/selftests/drivers/net/config | 1 + tools/testing/selftests/drivers/net/psp.py | 81 +++++++++++++++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/drivers/net/config b/tools/testing/sel= ftests/drivers/net/config index 77ccf83d87e0..e03676f1d993 100644 --- a/tools/testing/selftests/drivers/net/config +++ b/tools/testing/selftests/drivers/net/config @@ -3,6 +3,7 @@ CONFIG_DEBUG_INFO_BTF=3Dy CONFIG_DEBUG_INFO_BTF_MODULES=3Dn CONFIG_INET_PSP=3Dy CONFIG_IPV6=3Dy +CONFIG_VLAN_8021Q=3Dm CONFIG_NETCONSOLE=3Dm CONFIG_NETCONSOLE_DYNAMIC=3Dy CONFIG_NETCONSOLE_EXTENDED_LOG=3Dy diff --git a/tools/testing/selftests/drivers/net/psp.py b/tools/testing/sel= ftests/drivers/net/psp.py index 864d9fce1094..b3d00bb01816 100755 --- a/tools/testing/selftests/drivers/net/psp.py +++ b/tools/testing/selftests/drivers/net/psp.py @@ -9,6 +9,7 @@ import socket import struct import termios import time +import types =20 from lib.py import defer from lib.py import ksft_run, ksft_exit, ksft_pr @@ -18,6 +19,7 @@ from lib.py import KsftSkipEx from lib.py import NetDrvEpEnv, PSPFamily, NlError from lib.py import bkg, rand_port, wait_port_listen =20 +from lib.py import cmd, ip =20 def _get_outq(s): one =3D b'\0' * 4 @@ -570,6 +572,83 @@ def removal_device_bi(cfg): finally: _close_conn(cfg, s) =20 +def vlan_basic_send(cfg): + """ + Test PSP over VLAN-to-VLAN traffic + + Network topology: + Local VLAN (nsim0.100) <---> Remote VLAN (nsim1.100) + | | + Local Physical (nsim0) <---> Remote Physical (nsim1) + [PSP configured here] + """ + _init_psp_dev(cfg) + + try: + cmd("modprobe 8021q") + except Exception: + raise KsftSkipEx("VLAN (8021q) kernel module not available") + + vlan_id =3D 100 + local_ifname =3D f"{cfg.ifname}.{vlan_id}" + remote_ifname =3D f"{cfg.remote_ifname}.{vlan_id}" + + # Create VLAN interface on LOCAL side + ip(f"link add link {cfg.ifname} name {local_ifname} type vlan id {vlan= _id}") + defer(ip, f"link del {local_ifname}") + ip(f"addr add 192.0.2.21/24 dev {local_ifname}") + ip(f"-6 addr add 2001:db8::21/64 dev {local_ifname} nodad") + ip(f"link set {local_ifname} up") + + # Create VLAN interface on REMOTE side + ip(f"link add link {cfg.remote_ifname} name {remote_ifname} " + f"type vlan id {vlan_id}", host=3Dcfg.remote) + defer(ip, f"link del {remote_ifname}", host=3Dcfg.remote) + ip(f"addr add 192.0.2.22/24 dev {remote_ifname}", host=3Dcfg.remote) + ip(f"-6 addr add 2001:db8::22/64 dev {remote_ifname} nodad", + host=3Dcfg.remote) + ip(f"link set {remote_ifname} up", host=3Dcfg.remote) + + local_ifindex =3D ip(f"-j link show {local_ifname}", json=3DTrue)[0]['= ifindex'] + + vlan_cfg =3D types.SimpleNamespace( + ifname=3Dlocal_ifname, + ifindex=3Dlocal_ifindex, + remote_ifname=3Dremote_ifname, + addr_v=3D{"4": "192.0.2.21", "6": "2001:db8::21"}, + remote_addr_v=3D{"4": "192.0.2.22", "6": "2001:db8::22"}, + addr=3D"192.0.2.21", + remote_addr=3D"192.0.2.22", + pspnl=3Dcfg.pspnl, + psp_dev_id=3Dcfg.psp_dev_id, + remote=3Dcfg.remote, + comm_port=3Dcfg.comm_port, + comm_sock=3Dcfg.comm_sock, + ) + + s =3D _make_psp_conn(vlan_cfg, version=3D0) + defer(_close_psp_conn, vlan_cfg, s) + + # Create PSP associations + # The socket's device is VLAN, but PSP device is on physical NIC + rx_assoc =3D vlan_cfg.pspnl.rx_assoc({ + "version": 0, + "dev-id": vlan_cfg.psp_dev_id, # PSP device on physical interface + "sock-fd": s.fileno() + }) + rx =3D rx_assoc['rx-key'] + tx =3D _spi_xchg(s, rx) + + vlan_cfg.pspnl.tx_assoc({ + "dev-id": vlan_cfg.psp_dev_id, + "version": 0, + "tx-key": tx, + "sock-fd": s.fileno() + }) + + # Send data through VLAN interface (VLAN-to-VLAN traffic!) + data_len =3D _send_careful(vlan_cfg, s, 100) + _check_data_rx(vlan_cfg, data_len) =20 def psp_ip_ver_test_builder(name, test_func, psp_ver, ipver): """Build test cases for each combo of PSP version and IP version""" @@ -624,7 +703,7 @@ def main() -> None: ] =20 ksft_run(cases=3Dcases, globs=3Dglobals(), - case_pfx=3D{"dev_", "data_", "assoc_", "removal_"= }, + case_pfx=3D{"dev_", "data_", "assoc_", "removal_"= , "vlan_"}, args=3D(cfg, )) =20 cfg.comm_sock.send(b"exit\0") --=20 2.45.4