From nobody Fri Apr 17 09:02:36 2026 Received: from mail-vs1-f97.google.com (mail-vs1-f97.google.com [209.85.217.97]) (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 830B436AB6A for ; Mon, 23 Feb 2026 19:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771873932; cv=none; b=cxoQX1Rrmwj9hWY5jJ6z6H8RKGxzCURsBrgaUyHWgL64Z5HQVHgqZJDMvHz40nmaRqqRn1oEuwFqkc82GhMrnSphF7Iz82sQ6oJcLgOrGo2TGh+JXdb5zacHvBrEn4WWLZQ7WzVSSF801xgr0RjiBZDZwwbstO8RUTLN2y6/11s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771873932; c=relaxed/simple; bh=WutPYL4cG/EXST+jBmz13oiyimF6V23PC8A+85qvxYI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VWRWlp5IS1iKP/ztGDPFM0SDs8r9p8Hfzkseig4i/VFSHX2wy3/lODzcfb6Vd4d4yWsnPfciIwBPEjvBebwpYUCx6iBKrhOVFaUWD4yuWKRiIGem1h5Y8DrLpj3Dp+mQWHGfFnSM1q4MRd9qjnw1/VsBDKZeeWyq+a7vZy60+no= 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=acfXjAFp; arc=none smtp.client-ip=209.85.217.97 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="acfXjAFp" Received: by mail-vs1-f97.google.com with SMTP id ada2fe7eead31-5fa26e497feso1532035137.3 for ; Mon, 23 Feb 2026 11:12:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771873930; x=1772478730; 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=v49c/0FsrhD7zmHG67B+ZI0NaJwp1KpfxbdYTpU5cag=; b=G1s1r188DQ8sBRZp1dQw22SFbvXD3piec53mwkZMFN/GAbfN5dRMG2gR2aUCzYIF3c jyau6c5i7WZbhyUJpLzsFQ/oxTdAteaR5ar0kx9eDsXxBht89DpFNzvlcz/YrmZvYKjE VRk16/b4lUuAI6z2iTk6eqHjv+/RBtyJKgKTj5gPCNjPx2c0SPaXvWrORFMaKXuU1ZOV +mO08JRAAkC6a7YG++71E3iLEnPcUTBq4yb63wpdo8vnfQYFkPMT8aZ6moz1hoQFWYHa 7KxtLlrAszsqy8xIqjIA2O0NQ1Mz5XsdRC/qj7EsKz6qnrsr1CJty54DXhivOJWsStcM Y4Fw== X-Forwarded-Encrypted: i=1; AJvYcCXMo16B7xpBe+TTQ/r2K/4ltfqCw5ckaeLofy5doRiIfPZ+4o0OGrRkdjmYz3x6ToQhBPICDQztV6rCmaI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2+AcJwmNU8DRynwtH4aI6bku30BRUD6lhl9j/DKZcFeFXRREa VFNcywxqvaGQ4pi3ntvjGYdsivO9YBbBmMk6axdQqQ00inOEn1CIgvBZ1dphF3ZYRk3C2xP9NWB sFx37wSwFhN/v2qAQNNBK+c4rEnMAUz1ny8hf10LgTKfjlIFaAj0CpTowINP0AxQEWyfOSEkceR cekHmm222mBqMp7S1TT+CP40+ImyqkHrjAIoYg8uNgmjOgEH7JXuQyKnNyYnls+Y/m9ecImztcc jBYjgCimZtPm6OrFir3 X-Gm-Gg: AZuq6aIfMmU7LGyuk6KBPR/xOZ+lJDpDxFst/keIZw1q2zPp9UVIfpNMeIiBez5VFIb fUXqc+onYiKLatAV8sJuqhZhEhaNQG6tAdGvvRmpC4QHdOrwo+jrcHbGOQC3VaQ9zSQYNBt2t7t RiOLmhj4XIj/tYiMUtt5jAPagGWL8gWAjAFMbNIXZvEQdUMNqkFU2qoofu4K9OE75DPhdc8j0tp TexADyqxBl1NN3A7c36QLO6+CGPTd71up+bHdEHn8P9xFW+b4DOuEZflRNbsV9LshqRZKsvWKlm KNOjZKcbZBgzdY51VAuaLcEvA1XI/CEZOkhRAtnIwMX0wCT2MC7/g7SFxIfG+lLHH2DksWKECTu SzJffSdVzWuw5qBiNGFC0mb7Hl2A27xbp8gEzEdPvoT2enfPYgNBRAesnrH5Z0sRDJKTqwvvaMv D53rUaBZPJV5xzSDmUfYRSAtrTFCJn806H8g979jiJ/Jvdgbg+YWzIzvNkOw== X-Received: by 2002:a05:6102:d8f:b0:5f5:4247:8d08 with SMTP id ada2fe7eead31-5feb30556a2mr3408686137.21.1771873930252; Mon, 23 Feb 2026 11:12:10 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-103.dlp.protect.broadcom.com. [144.49.247.103]) by smtp-relay.gmail.com with ESMTPS id a1e0cc1a2514c-94da899fff8sm643346241.2.2026.02.23.11.12.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Feb 2026 11:12:10 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2ba8a461dd9so24910323eec.1 for ; Mon, 23 Feb 2026 11:12:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1771873929; x=1772478729; 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=v49c/0FsrhD7zmHG67B+ZI0NaJwp1KpfxbdYTpU5cag=; b=acfXjAFpsNi9FJIrVO3kZ6P80IFlS8Q1QNlkavqBSK1w05O0yW7c+2hrIf9P7PF0T/ YG2udLj3Z7JcD/UV6KoFTOjoEdYWD68hsS24tAwxLvv8ZJelwFVopm4VGF43Ga1SkJsZ ySJXDUItGladoUmBKU4r6HZ0oBOGtrfDgA0Ek= X-Forwarded-Encrypted: i=1; AJvYcCUN3jdivmfoz36y4jMX8QDw2Ik9YkxMvIli4Y0oSozL62fqAQmy642wgv9gp22M5etmUjfvx88tF9a3oVY=@vger.kernel.org X-Received: by 2002:a05:7300:d505:b0:2b7:32a6:82d1 with SMTP id 5a478bee46e88-2bd7bae915dmr4336142eec.13.1771873928895; Mon, 23 Feb 2026 11:12:08 -0800 (PST) X-Received: by 2002:a05:7300:d505:b0:2b7:32a6:82d1 with SMTP id 5a478bee46e88-2bd7bae915dmr4336120eec.13.1771873928176; Mon, 23 Feb 2026 11:12:08 -0800 (PST) Received: from lvnvda4076.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2bd7da3eec5sm5332734eec.4.2026.02.23.11.12.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 11:12:07 -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: 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, v2 1/2] psp: Support for transmit on logical device when the underlying transport device supports PSP. Date: Mon, 23 Feb 2026 11:11:53 -0800 Message-ID: <20260223191154.2800616-2-kiran.kella@broadcom.com> X-Mailer: git-send-email 2.45.4 In-Reply-To: <20260223191154.2800616-1-kiran.kella@broadcom.com> References: <20260223191154.2800616-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 | 109 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/net/psp/psp_main.c b/net/psp/psp_main.c index a8534124f626..fac785dcfa0f 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,79 @@ 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. + */ + psd =3D rtnl_dereference(dev->psp_dev); + if (psd) + rcu_assign_pointer(upper_dev->psp_dev, psd); + } else { + /* Lower device is being unlinked from an upper device. + * Clear the borrowed psp_dev pointer. + */ + 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 Fri Apr 17 09:02:36 2026 Received: from mail-pl1-f228.google.com (mail-pl1-f228.google.com [209.85.214.228]) (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 941B236EA81 for ; Mon, 23 Feb 2026 19:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771873934; cv=none; b=QTGA8H+O4AXj8dz3G/cCZtMuZsOPG5YxjhmVFOYSHUX+t36BpVs321PsPOpnN25fpw247P//la5kedQNEbAfaYRTX8N5CJh6rbJodoq5c2pppVyD6Tk+cWkZ5vcB+ly2C09YMKorYv4wXZr14iMw6fTSV8Q8JI2B8PG9HMV6V9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771873934; c=relaxed/simple; bh=x17WP3Dwga+51H9UAnNm6q/nTgZkKgkWipG2h8Ozs08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JxLATwS78Zgwuv4M7boSJZRPHHGSgbZp/N3Ed60Kx6VGtsPBww4low20g+uYKArhYqR4ZYcAXwMi2AEp+67oYMJMV2K2+NYlVJWaTo6FuMMd3IQjFodqNRHcBoYfLCN7VSIqySL4yl7dopcUd/X2cE/vxP+1eW3xe/IUcSO/RDE= 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=YUwSrjLB; arc=none smtp.client-ip=209.85.214.228 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="YUwSrjLB" Received: by mail-pl1-f228.google.com with SMTP id d9443c01a7336-2ab47d8b33cso27062385ad.2 for ; Mon, 23 Feb 2026 11:12:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771873933; x=1772478733; 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=VuvyQiLmrnh28Gu37E9OPE1T+qFo4OP2EvGponbeEDU=; b=JD7pwTj1BIhp8V/egF8mM9fTlfvWBZAGFth1/CQEE0GjWPnurxk7xQZxoTd236iXYI zzFFTip612e4qQs3qpsiqM2kLLE56+pkKhofGpD9TudszQmq0F9htlTsP9RBLhs6rtdb TkaRqwLdX+wB/uIRGolydt9WPfcgsOIe+fE0Yj/OVGlR53+XHijKStsj/Q7NsSf1+2L9 ltrY93kzuB8jCyN/vuYluoBICTIi47+nZ+9c3M/Lsmd+1kzclO046PpK0vsoWMNSpfB9 ePFAjT1Yc830GqqzPY48OtU/F1jZwFuBi/WcAGoHWZbnY81aBsCGw0sY83Uh8eTxvx58 Y7Kg== X-Forwarded-Encrypted: i=1; AJvYcCU+6sCf4sQcXeDVIPrp0/+IySqjgBBG9LNQHM4+z29hbiMJ9hRCocHt82dn3VOLj86sNJbnYISczwNTkJE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2jiRaNQZ388EHbEd3hDwVZj01J19dqqw0M0HcFZ7jJLzGOhZV usBL8XPhffE47o/2wTlaIHK6XKs3hUAz4qw8Wcqv2ct4SUEQ8ZrxLYBh7Q9e/7xnDWXabEL1u6r +JdhtG6Cqw0T4JihiZt02sHfVAb0pLZv4VMNakIa89SpcUHznAqemrr/7LxxbPKBYhzv4aFOeAs Gtw/JXpLm+x6/WlR1sKIQs1NtnEiU1m3kaqDVVbFYUYXwIqaMPFfIzC9cYqAZj+qF/p1h/kzVwj P+vi0D4dGCLAIoQdBv7 X-Gm-Gg: ATEYQzyYVEr5AVB5M1fiOgrIeWnDYxUd+JF0nYtZo1eBiJxPQ89xw2pxX17fQscvcfZ sXs5rfvEHle8bVFY4V/X0ReVvUiPgT7qyvksgv/kf4zbWWlXLnev50ogXc4nFC+SgbTvlLaGJu2 W7Nci2poXSxsQ8A9nVcZhiwWuzxiUuOYmDs6bBNUwPwT6b8eh9hnne5jqeNphMPD3z8yIjlIbql OGun0DbwvDISWsirjPl/PyQCtlYhnPMZEFC8mNhb4UfnY5zpMe3wmN6v6egULKVU+2kFvQNIMNf utFAihbMAps8dkaNzkKX4NzohfKZxlooBFV3vlxiufiO8TIv0SzfXeG8edbaXO+7y/0ljQm88xk ooO+B7I2Kavd1r95PhclYP6wH7TRE7c+wKLLTgeURQJ4lMlgDAXFw27EKAlOAR++ZMum1AbYB1M W3wUD64k3H1KgFnn7iX2aAyYaXEQVcS2uT83gKI/sFIIzAwdZQpEZlIYk= X-Received: by 2002:a17:903:11cc:b0:2a9:4998:6636 with SMTP id d9443c01a7336-2ad7449f895mr68674195ad.20.1771873932855; Mon, 23 Feb 2026 11:12:12 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-95.dlp.protect.broadcom.com. [144.49.247.95]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2ad74fd7254sm8987445ad.28.2026.02.23.11.12.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Feb 2026 11:12:12 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2ba66faa692so7622784eec.1 for ; Mon, 23 Feb 2026 11:12:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1771873931; x=1772478731; 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=VuvyQiLmrnh28Gu37E9OPE1T+qFo4OP2EvGponbeEDU=; b=YUwSrjLBh8FbD4nhrVrhk3sdpowGDsekStHGd4+8lHRHXgkVtfMz9OOl97ouXhi3qH /BJduc+awlx39Gj9paJJfpGIF/6YSBtygqF/91hzELLfqsKXafiahX9cIb1/b0cM62xP 7Qnq0EFnPNikdR2EwCLg4OH/l7vPOWEEx86WA= X-Forwarded-Encrypted: i=1; AJvYcCUMi1cdw5O591CnieC3tsmnBTOJiYSYkYljGVcXxtEYAcycHMsGLKN9Z5BdSEjY4/YAf5QPkCHKzl+P+MM=@vger.kernel.org X-Received: by 2002:a05:7300:bb0a:b0:2ba:6a79:f04c with SMTP id 5a478bee46e88-2bd7bd54575mr4359575eec.18.1771873931162; Mon, 23 Feb 2026 11:12:11 -0800 (PST) X-Received: by 2002:a05:7300:bb0a:b0:2ba:6a79:f04c with SMTP id 5a478bee46e88-2bd7bd54575mr4359554eec.18.1771873930474; Mon, 23 Feb 2026 11:12:10 -0800 (PST) Received: from lvnvda4076.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2bd7da3eec5sm5332734eec.4.2026.02.23.11.12.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 11:12:10 -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: 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, v2 2/2] selftests: drv-net: psp: add test for VLAN sub-interface Date: Mon, 23 Feb 2026 11:11:54 -0800 Message-ID: <20260223191154.2800616-3-kiran.kella@broadcom.com> X-Mailer: git-send-email 2.45.4 In-Reply-To: <20260223191154.2800616-1-kiran.kella@broadcom.com> References: <20260223191154.2800616-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/psp.py | 86 +++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/drivers/net/psp.py b/tools/testing/sel= ftests/drivers/net/psp.py index 864d9fce1094..c45a04172844 100755 --- a/tools/testing/selftests/drivers/net/psp.py +++ b/tools/testing/selftests/drivers/net/psp.py @@ -18,6 +18,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 ip =20 def _get_outq(s): one =3D b'\0' * 4 @@ -570,6 +571,89 @@ 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) + + # VLAN configuration + vlan_id =3D 100 + local_vlan_ifname =3D f"{cfg.ifname}.{vlan_id}" + remote_vlan_ifname =3D f"{cfg.remote_ifname}.{vlan_id}" + + local_vlan_addr_v4 =3D "192.0.2.21" + remote_vlan_addr_v4 =3D "192.0.2.22" + local_vlan_addr_v6 =3D "2001:db8::21" + remote_vlan_addr_v6 =3D "2001:db8::22" + + # Create VLAN interface on LOCAL side + ip(f"link add link {cfg.ifname} name {local_vlan_ifname} type vlan id = {vlan_id}") + defer(ip, f"link del {local_vlan_ifname}") + ip(f"addr add {local_vlan_addr_v4}/24 dev {local_vlan_ifname}") + ip(f"-6 addr add {local_vlan_addr_v6}/64 dev {local_vlan_ifname} nodad= ") + ip(f"link set {local_vlan_ifname} up") + + # Create VLAN interface on REMOTE side + ip(f"link add link {cfg.remote_ifname} name {remote_vlan_ifname} type = vlan id {vlan_id}", host=3Dcfg.remote) + defer(ip, f"link del {remote_vlan_ifname}", host=3Dcfg.remote) + ip(f"addr add {remote_vlan_addr_v4}/24 dev {remote_vlan_ifname}", host= =3Dcfg.remote) + ip(f"-6 addr add {remote_vlan_addr_v6}/64 dev {remote_vlan_ifname} nod= ad", host=3Dcfg.remote) + ip(f"link set {remote_vlan_ifname} up", host=3Dcfg.remote) + + # Get VLAN interface index + local_vlan_info =3D ip(f"-j link show {local_vlan_ifname}", json=3DTru= e)[0] + local_vlan_ifindex =3D local_vlan_info['ifindex'] + + # Create a cfg-like object for VLAN interfaces + # The PSP device is still on the physical interface, but + # the socket will be bound to the VLAN interface + class VlanCfg: + pass + + vlan_cfg =3D VlanCfg() + vlan_cfg.ifname =3D local_vlan_ifname + vlan_cfg.ifindex =3D local_vlan_ifindex + vlan_cfg.remote_ifname =3D remote_vlan_ifname + vlan_cfg.addr_v =3D {"4": local_vlan_addr_v4, "6": local_vlan_addr_v6} + vlan_cfg.remote_addr_v =3D {"4": remote_vlan_addr_v4, "6": remote_vlan= _addr_v6} + vlan_cfg.addr =3D local_vlan_addr_v4 + vlan_cfg.remote_addr =3D remote_vlan_addr_v4 + vlan_cfg.pspnl =3D cfg.pspnl + vlan_cfg.psp_dev_id =3D cfg.psp_dev_id + vlan_cfg.remote =3D cfg.remote + vlan_cfg.comm_port =3D cfg.comm_port + vlan_cfg.comm_sock =3D cfg.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 +708,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