From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE73A5908DA for ; Tue, 8 Sep 2026 17:10:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887413; cv=none; b=HTjyok3Yi0wnes6IPvzOmJrfcrp4eh4/r1hFTH8w50+QFb47/9tcxTyQ+x3eZTOm1SdoWyU6wLESFs7Gk0CcJn7U7q5/UbryKJLShEZY9GCpqM7+4ofIjvEAW3lumBQCv1i5P6vjkLvX9HDViDxUsnSKUYd08J+IyQ0Fx9ilNAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887413; c=relaxed/simple; bh=NrgThq6Y8uHhb3wAckmPMV55GlSGJaL3Mt7emHZURDY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=F8+Kxko/07U0ZT+UztcCMXpPOswgVmIz9T/9kxk+P2qrzoRdQCy8Cj85GOBHo3XToJ2chfS48bM5lhEak9tpkCpuCVbtB860ask0wT5QIc2R3gji1UP3hHD4XBjPdJFW7R/viLzs5MvbfBfT1QOkg2BVu1xhc/5s+gAObj+59ZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=mbM6R92I; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fgjDTlAx; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="mbM6R92I"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fgjDTlAx" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdZP22899279 for ; Tue, 8 Sep 2026 17:10:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= UZdtDE9nITufoadjKmxDFYIwfAzWlsnkOtcwwliJ40E=; b=mbM6R92IpOK5evsc mB1MtHjS76EOxfKfaWUgzbwllqe2qK8te+UJKcgClQbZu4hrivXX+gGxCBivQ8XT U7fdyMtVAqyUpvS4s6nVmPRu5ER2Bs5BY8KTtxM3YA7zgUG8eywFmeYQy+sRQCj0 8ztVB2KG7i6Rg5k05cqwxbF6uGohb5f8j21/kOJrcEQZgN9LVICO+/6HTltnYOBF 09kgPHZvdcYbrLulrRBmlfpzispybVSYWfd89Pgq/CWUrH30gZglneMcgCqymuzn mCfjt8SQO0pksuQ3Flbi9qXwwk7DfWxulqpX/Wz7irN4+wejdKw1GMMMmnFBXbik 2f2Oww== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcvujvc3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:09 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-8663802b58fso2026726b3a.2 for ; Tue, 08 Sep 2026 10:10:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887404; x=1789492204; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=UZdtDE9nITufoadjKmxDFYIwfAzWlsnkOtcwwliJ40E=; b=fgjDTlAxTpb94Gre70BDBVeim08n9s1hD15RfS8DUC6IUS6nX1KEyWH6jm3++6Gc36 AA7HEXuJndZDoahkbmfwVTDgPcNH2ftpzQb7mbnvbAKyf+Z/8RliiLnthMLUcZsTRVqC AburXl8y0+vsmSnvrlwR0D4iCPqZLyR1AEuQHV9E+GwIG31a4UwsTyhn1jUl2QDhc5qY lGzH4lAcc8r4pRl72fxOq9uxbYWFJNPVwWsWABpzwJhGM2WIjZ0Fe7bnLaBOArhA0/5c en6A/I5Xj+pcmEWiumAnWcoRTYZm6lQzia8plNY/w7fFkDGIhyKAa+OIRUr1o0xxuZd1 WMww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887404; x=1789492204; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=UZdtDE9nITufoadjKmxDFYIwfAzWlsnkOtcwwliJ40E=; b=pVmCBxHFOch3JxRpCK3PjNwpBET7db2Dqk3irmXxruEb2sGm4bedgEIzKzkv3IFJnR K2W1hCCtXJSXAA7A48qqlu8pI7HvmQj2aLjUlWKW+utRs4BAJnnw7DpnHG2DBgpFeX7J cEp2sg4Jl9eK6cNWdCXY2D3li3OtO6P/7NdrcB7BoxvLP2D8vvDOd/WWgjhD2J1vwtBU c/aIkZwwHggir4x93D4mKEtwFA5G1j/bpA+jwwKdkx0CNoAeWVm1sAe5uRumdHNgizMh JYZBR6014YMfmIWCcN4DHdzsNEjUjRW7fFesa2wDnfd+ZPQ9QUDQtitnqk7SM+2+C7Gw U+HQ== X-Gm-Message-State: AFuF++mdMNShhj4qHjsS+FxZY25NHkMl0tFEkDGFt80m3Rp6UhADf0rU 0uvIRl4MJ14/QMfr4vCNOlAwZUA0mV43IKDnweLNFqkRR4MXKUVJXYQa9GPUvMCBhQIUOzsQofG bkDl8RQ5Q4z2f/4FTmHRqysUQPnK9GjnKZviJ5fPeGyOdExvkR4hilFL2G8xW5Baprg== X-Gm-Gg: AYBFou0mkqCw0yuodbnAn9NcMrEShCRq04hNLizcrx3xvr69kORLC8OEDNve+uacPtG bF5utvBaBpntCeP3aYjWR/BYfu+OwdJfB0t/jnv5YBgQipqHf3jOnr6OqS3jnxnwIF0KQHnUbI+ bROrGGXTbGcljG+R5UoxGetNPD/Y7LzigxbdzSwGcZl7XtKKihb+Sx0uzzjzcxLYxTI+VAQVIgV Al3Pw06/dSgX+Q2Rru47puvjMu034Xc/yMSDvSBLHjvfti/PZTk9xQiPUUpUtS3jK1A6aA3aYNC B+tiaBQk59uutXRjxCoXtc2vVxRjfhLzmZEITB0s6Cx/L7HksYvYipJqcXx0RcocxugBR6UW16z yQhw/n/UwBqY1CuupXFuzY22rzgomDB97lxLtr2d8yPIM12rSgkZGLvJtSVmCDn2ME7dIP/94Hf EtNnRbtsV4H6gmL9pHU7bbyQ== X-Received: by 2002:a05:6a21:7748:b0:3da:6bdd:2c74 with SMTP id adf61e73a8af0-3da6bdd6cfcmr27957448637.10.1788887404144; Tue, 08 Sep 2026 10:10:04 -0700 (PDT) X-Received: by 2002:a05:6a21:7748:b0:3da:6bdd:2c74 with SMTP id adf61e73a8af0-3da6bdd6cfcmr27957381637.10.1788887403611; Tue, 08 Sep 2026 10:10:03 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:02 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 01/18] net: skbuff: Add SKB extension support to wireless drivers Date: Tue, 8 Sep 2026 22:39:29 +0530 Message-Id: <20260908-smd-v1-1-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=ePkjSnp1 c=1 sm=1 tr=0 ts=6aa04171 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=axc-8nxta6ncDHcsNdkA:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-GUID: n3TiekvdxkgiOAtuaS8fiolJpKggnQEf X-Proofpoint-ORIG-GUID: n3TiekvdxkgiOAtuaS8fiolJpKggnQEf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXyUXoU09MzP6H 8PHjLfb+h057vXF1UuoUp+c3HAE84wAS7RwNLY8c2bgPuBWtCJ02tzES4PAraYpDDA89ZJJg7og yinOc+H/aYCLLX2EpYLOIAMdN8Qts4umgeUMOEUE8wMIQSzajTeBYFQ1xS4dVXUNm7iFghN8QUB WZU15h4wn9Kr/VIGW6MvWhBZithdjjv/HZsv2NsHOkx2L61Xh3i83hHrVRxSmxDLOLgNk/0xw1/ 02C/8e0U8IfjsGrPd8GuNpe/BZUswq/opGStCdePoOW3z2kXSbxlmgkcSacoPXJm+nV2rRLrHRy ckGW4pgRUWrA1Va67h/qVca1VBEW0pqprCmNZFUFfrMb5PwvoXkrVNJ5o+8omHVnaRvQqeR3nOb SgocdO7GEFtT45iTKrpPzk0lHHEc8z8GpT1f/B5MZSUfpdJ9LpjcQe02I8UUKWeAKp2ncpE+pwa BsJmY+V1wIU3fHlIxKQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX+A//ia0iZSZg lY3achwD6kcQyK8/XdLoSvRaqGgCciJDTVbcooycvcOWike6D8u5dohC9g+zUi9FhnDVEzFw92K DUt2Sb8YCb5RjbYUWUNWemRGlRPwOEw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16, defines Seamless Mobility Domain (SMD) BSS Transition, in which a station roams between two AP MLDs within an SMD across two phases: Preparation and Execution. During these phases, the receiving AP driver processes a query frame and must carry the station's roaming context - per-TID sequence numbers in downlink (DL) and uplink (UL) directions, packet number in DL and per-TID packet numbers in UL, and per-TID BlockAck session parameters in DL and UL, plus a variable-length driver context - up through mac80211 and nl80211 to userspace, which uses it to complete the transition. This context does not fit in skb->cb (48 bytes). Carrying it separately, outside the SKB, breaks when the SKB is cloned through the RX path because the context lifetime is no longer tied to the frame; the driver would need independent state correlated with the SKB at nl80211 encode time, adding error-prone lifecycle management. SKB extensions avoid these problems: they are reference-counted, copy-on-write safe, and freed automatically with the SKB. Add a new skbuff_wireless.h with a typed union structured to accommodate future wireless extension types, carrying the SMD roaming context as its first payload. Signed-off-by: Pooventhiran G --- include/linux/skbuff.h | 3 +++ include/linux/skbuff_wireless.h | 55 +++++++++++++++++++++++++++++++++++++= ++++ net/core/skbuff.c | 55 +++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 113 insertions(+) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 421f6fc45451..fb686024e97d 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -5061,6 +5061,9 @@ enum skb_ext_id { #endif #if IS_ENABLED(CONFIG_CAN) SKB_EXT_CAN, +#endif +#if IS_ENABLED(CONFIG_WIRELESS) + SKB_EXT_WIRELESS, #endif SKB_EXT_NUM, /* must be last */ }; diff --git a/include/linux/skbuff_wireless.h b/include/linux/skbuff_wireles= s.h new file mode 100644 index 000000000000..2cb04bff061c --- /dev/null +++ b/include/linux/skbuff_wireless.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * IEEE 802.11 WLAN skb_ext definitions + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef LINUX_SKB_WIRELESS_H +#define LINUX_SKB_WIRELESS_H + +#include +#include + +/** + * enum wireless_skb_ext_type - type of data in wireless_skb_ext + * @WIRELESS_SKB_EXT_INVALID: uninitialized state + * @WIRELESS_SKB_EXT_UHR_SMD: payload is @uhr_smd_ctx + */ +enum wireless_skb_ext_type { + WIRELESS_SKB_EXT_INVALID, + WIRELESS_SKB_EXT_UHR_SMD, +}; + +/** + * struct wireless_skb_ext_smd_ctx - UHR SMD roaming context container in + * SKB extensions + * @refcnt: reference count; one count per distinct skb_ext block that hol= ds + * this pointer. Plain skb_clone() shares the same skb_ext block and + * does not increment this counter. Only skb_ext_maybe_cow() increments + * this counter, when a COW produces a second independent ext block copy. + * @smd_ctx: pointer to the IEEE P802.11bn UHR SMD roaming context; + * must be a kmalloc-ed buffer, freed together with this container. + */ +struct wireless_skb_ext_smd_ctx { + refcount_t refcnt; + void *smd_ctx; +}; + +/** + * struct wireless_skb_ext - SKB extension data for wireless module use + * + * Carried as an skb extension (SKB_EXT_WIRELESS). The union is reserved + * for future wireless extension types; only one member is active per skb. + * + * @type: type of data + * @uhr_smd_ctx: pointer to the UHR SMD context container + */ +struct wireless_skb_ext { + enum wireless_skb_ext_type type; + union { + struct wireless_skb_ext_smd_ctx *uhr_smd_ctx; + }; +}; + +#endif /* LINUX_SKB_WIRELESS_H */ diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ab195b99c853..f28ab7c3c888 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -93,6 +93,10 @@ #include #include =20 +#if IS_ENABLED(CONFIG_WIRELESS) +#include +#endif + #include "dev.h" #include "devmem.h" #include "net-sysfs.h" @@ -5169,6 +5173,9 @@ static const u8 skb_ext_type_len[] =3D { #if IS_ENABLED(CONFIG_CAN) [SKB_EXT_CAN] =3D SKB_EXT_CHUNKSIZEOF(struct can_skb_ext), #endif +#if IS_ENABLED(CONFIG_WIRELESS) + [SKB_EXT_WIRELESS] =3D SKB_EXT_CHUNKSIZEOF(struct wireless_skb_ext), +#endif }; =20 static __always_inline __no_profile unsigned int skb_ext_total_length(void) @@ -7152,6 +7159,16 @@ static struct skb_ext *skb_ext_maybe_cow(struct skb_= ext *old, if (flow->key) refcount_inc(&flow->key->refs); } +#endif +#if IS_ENABLED(CONFIG_WIRELESS) + if (old_active & (1 << SKB_EXT_WIRELESS)) { + struct wireless_skb_ext *wifi =3D + skb_ext_get_ptr(old, SKB_EXT_WIRELESS); + + if (wifi->type =3D=3D WIRELESS_SKB_EXT_UHR_SMD && + wifi->uhr_smd_ctx) + refcount_inc(&wifi->uhr_smd_ctx->refcnt); + } #endif __skb_ext_put(old); return new; @@ -7256,6 +7273,36 @@ static void skb_ext_put_mctp(struct mctp_flow *flow) } #endif =20 +#if IS_ENABLED(CONFIG_WIRELESS) +static void skb_ext_put_wireless(struct wireless_skb_ext *wifi) +{ + switch (wifi->type) { + case WIRELESS_SKB_EXT_UHR_SMD: + if (!wifi->uhr_smd_ctx) + break; + + if (refcount_dec_and_test(&wifi->uhr_smd_ctx->refcnt)) { + kfree(wifi->uhr_smd_ctx->smd_ctx); + kfree(wifi->uhr_smd_ctx); + } + + /* + * __skb_ext_del clears active_extensions but not ext->offset[], + * so __skb_ext_put will call skb_ext_put_wireless again; + * mark NULL regardless to avoid double free in __skb_ext_put. + */ + wifi->uhr_smd_ctx =3D NULL; + break; + case WIRELESS_SKB_EXT_INVALID: + /* data not yet set */ + break; + default: + WARN_ONCE(1, "unknown wireless skb extension type=3D%u\n", + wifi->type); + } +} +#endif + void __skb_ext_del(struct sk_buff *skb, enum skb_ext_id id) { struct skb_ext *ext =3D skb->extensions; @@ -7278,6 +7325,10 @@ void __skb_ext_del(struct sk_buff *skb, enum skb_ext= _id id) if (id =3D=3D SKB_EXT_MCTP) skb_ext_put_mctp(skb_ext_get_ptr(ext, SKB_EXT_MCTP)); #endif +#if IS_ENABLED(CONFIG_WIRELESS) + if (id =3D=3D SKB_EXT_WIRELESS) + skb_ext_put_wireless(skb_ext_get_ptr(ext, SKB_EXT_WIRELESS)); +#endif } EXPORT_SYMBOL(__skb_ext_del); =20 @@ -7300,6 +7351,10 @@ void __skb_ext_put(struct skb_ext *ext) if (__skb_ext_exist(ext, SKB_EXT_MCTP)) skb_ext_put_mctp(skb_ext_get_ptr(ext, SKB_EXT_MCTP)); #endif +#if IS_ENABLED(CONFIG_WIRELESS) + if (__skb_ext_exist(ext, SKB_EXT_WIRELESS)) + skb_ext_put_wireless(skb_ext_get_ptr(ext, SKB_EXT_WIRELESS)); +#endif =20 kmem_cache_free(skbuff_ext_cache, ext); } --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 194EC5921F4 for ; Tue, 8 Sep 2026 17:10:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887412; cv=none; b=aYFC+Y8rwa730u3H18cWUnTmiMsHn0fmZ7gyZs3ApCJNbLfyDyGm3hNxYHjnk8A3lTIx+NTmlDpio6w8LH6wJCyNynzK1ltRtsAeHQGKQSHVzjpyNe+MqzWhZiT2vrzOdSgmjxwWJKfOKBrhWGaYTfuSe7Gr2F3yvVeTS2ikQsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887412; c=relaxed/simple; bh=ODuW2nybW3REfD8SbUhi8QOhAYOU2HQqcQkaxRn64Q8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=K/kW5ExAYC5aOkulcQBSR7TwFXFnnKJ+cg1Uqgq+FzQMZEhOmiKFIwWY2fbs6RMBG+VLI3j7XqqCVA5EhKesvcMKJTdj9r9Ss4Ww4zjL+X1kuutGqh9dxkHMO1dbpRZNdEbA4lD7vL3I4yid7S9fSPuhyXAnZ8FKpKKq+QH/wls= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=fmeleVvc; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Y+XVyUwX; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="fmeleVvc"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Y+XVyUwX" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdXZa2899194 for ; Tue, 8 Sep 2026 17:10:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= s4tTeUVXrP8PDX4fDGv3MD0jVy8bbBgnnC6+ayxYRRA=; b=fmeleVvcLmVg/F+L 67ClZFMqSQOuWGLlkj0g/0Y2g6VTbZltqahkldxXSwRv7UPzf3qAsrroIYSmUONx sOYg5wntLKNSdlv0q3Kuf/f28AtfIY0m7OVMQ3QtsLJmSA2VovpoapJYcwFVHnFz EKiIWJeJLd/GDO5HJztDlN8YQQWNPssd8dPqIsz4YD0CJsU/6BK1+PdFWz28TePE meubVXNpG6YR7KKTgUjLrKXt37UPuUyryudKKk4HbLK1sCaM2o57AreZDtckJSe9 Qw6TnzRoAAY4AjlpUa2jYo5KJS4EAFeft3NxvEjGcI0jamiW2DMYR0auwVPlk99m TdeJ3w== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcvujvc0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:09 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc132709c76so6600055a12.3 for ; Tue, 08 Sep 2026 10:10:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887408; x=1789492208; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=s4tTeUVXrP8PDX4fDGv3MD0jVy8bbBgnnC6+ayxYRRA=; b=Y+XVyUwXcuvKybd7cYGFw4Z+UbtnLFDr0L2W/XjlcNmUoDA3WNZ2kkN1dDTIYXirsq q3pJvBdAYr5vrBFyESshbskAs1/GTDNJW58rPCDu7IPnwpRkY21mlTJoyRFNqmZIF6/V jjiVw5LbPPwt6UBXODmU3z4c0jJY9ZOzd0TcfbDeVHNb/Y9ddt08bl8/l+WWtK7oqxz6 1g7K1gGBsbVrgRk0XubdUYyqTLJjqtTkDNqAVSAV4/CSlmZNCRYogRkuQXha34lcMYaL iJAptBIyLaUqh8YsiE+88xkCy44JFRbkxuBOXI1pfiU+ncOweRi9hfXe+bgyUatGiEiB K+FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887408; x=1789492208; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=s4tTeUVXrP8PDX4fDGv3MD0jVy8bbBgnnC6+ayxYRRA=; b=Y95lcUO33+r/S0u7LLwmPnNlDVcldE34QobMM0c2KaySGz+wBsBIHUtpuR2h1/xppU p5O3zV0DinVj4NgjdcrVwk5B6L4v8T2+3qLY2DdJfBh1miU5hCr7+VnfITnPh6Zh+BmH lqzvJylzkdpubOjtUKTS581bW/h2xcRAAk5NzmVWQINY17wvnH86/YpzfoEZQWgahOyU 5BDeCMKu9WQ80DJlCTjYe/445b1hFlh7Hkm/5aY4an+F1RVoK6VdSaLbJkxmhUU5qyYX o94nh25MAai4EojeiHKifCk4N/8tyuestTyOjMChrU50kCAKzqwo0hw7zGx2fXAarJZf jjMg== X-Gm-Message-State: AFuF++kNLPyrXjDpTn/MEzS23KVaOt6YbWGn4zLsQgFJEnr355IVDOMy PYTthOV8+oUQySWxrgxNEmgtwqJftblN5aSmkj/2IIP5ltFpvP3qQdr2MRxerEmWe1fcRhvrOKv HqvSCCMmXOJz2ueXqwgEiGStvlUIkiYsrsDatWJBfwvd5D891mk94G2RfiOjLXP70Pg== X-Gm-Gg: AYBFou3jn9gUNctTERfK3fB5MSGJEQqSrV7JleUouKbW/DEfQ0eRQT/2PzIArBIo7vs 418WCSsQRI7EIwtaV1jy5nnLgy5HvvQmeEOyup6VuAh0eiwhSWZk59fynW+pfzz82/vRCPNSWKy pLwOAwT3irnRx3wIlcmASUuXlcx0plvICw8qkYhJLS6CJ/hMSWRjig8jgHdFw0PlguQ+9h0bnDO KRQuMEd+EYJl5m/kor1ABJ3FGuV8zuvUihI24lSFwS6PK1xrLQCOwUHna1gCWpl3FTwDqTVOQ/N MCsE4yWJSH1wOQjIfu1Tez2J3HprsqEGPXgKqMWR+nF3v+YatDiFQVidlYYZVKyTuQ7rhY0R4Zq ZbZ3nlyj0CTnAQ6fV2kp/K3OWKVLERCF75j9+FHfAk38dmXTAnIdbQVOGe35BHl7FmC9eck4g8y TkhZA0IuwkF4uFEXLcCcbDng== X-Received: by 2002:a05:6a21:2983:b0:3cc:8f53:26c0 with SMTP id adf61e73a8af0-3da3a03ccf1mr51867745637.17.1788887408415; Tue, 08 Sep 2026 10:10:08 -0700 (PDT) X-Received: by 2002:a05:6a21:2983:b0:3cc:8f53:26c0 with SMTP id adf61e73a8af0-3da3a03ccf1mr51867662637.17.1788887407858; Tue, 08 Sep 2026 10:10:07 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:07 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 02/18] wifi: nl80211: Define Seamless Mobility Domain (SMD) device capability Date: Tue, 8 Sep 2026 22:39:30 +0530 Message-Id: <20260908-smd-v1-2-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=ePkjSnp1 c=1 sm=1 tr=0 ts=6aa04171 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=-9rhnhb8Ej--qkh-m00A:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: IFDsnimxhnf0XwgZ6YFiHS1Wzy5WUmv4 X-Proofpoint-ORIG-GUID: IFDsnimxhnf0XwgZ6YFiHS1Wzy5WUmv4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX51JcveAzUHdk dMErk406Qnxu6bQhwbwWzNWhzFQZw1Y7fasAZAyaOESChiZg56O+cxLpxs+9f+KeTv8/6Jmeyn1 5H8e6tI7u4UJi6mFZHHBIF9xi3PwdJ0wKpXSVD8rxNFQfS43cTjQlbTgh+1aAwhWCcuCml4aPKZ cMw+LEsavkxEd6qTEtEJblY7ytiA4T1ptA5EhqYOUummSXN6dLMDIrwx0BsmvBrEPwcknZR+AfC OPtR80RoOP1DHOQA1FSW/Pvi1JQdYU/qoilEE/z2Jpay96qnWyRPOpu1naRbLITHGgcnnuOcywq CDHG1dRBbLf9aaVFueJAOwDkgeucBRmzYhSMjt1JUs5OAYCnMt0C7rxcPzvFQEYLY6HEjRA9m6x cs3E1sPwbNWpaC/K/vRRMXIKwmGQ+lCQwPnD89WvoxTEWpQYB9IRey+3t3sLHtsgi8tUclgqU50 fKCs6eExPncDVl6ObzQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX+9FRUc14djE6 P8oXjBitjq7wIOnKurNBsQuARCYYavxPo/4C0tgcBY2LJl0WzSxMwNLgOWjXNm5RdD+2v/qQPRj KxTkDZJw43nFpBabXnbj3mk0xmyMFjI= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 From: Sidhanta Sahu Per IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16, an AP MLD can be managed by a Seamless Mobility Domain Management Entity (SMD-ME) along with partner AP MLDs to enable seamless transition of an associated non-AP MLD from the current AP MLD to a target AP MLD. A non-AP MLD advertising SMD supports association to an SMD-ME and SMD BSS Transition between AP MLDs within an SMD. Subclause 37.16.11 defines an optional capability for the current AP MLD to forward buffered downlink (DL) data frames for the non-AP MLD to the target AP MLD. Userspace needs a way to be aware of the driver's SMD capabilities so that it can enable SMD configuration and operation only on capable devices. Define two extended feature flags - NL80211_EXT_FEATURE_SMD for SMD management and BSS Transition capability - NL80211_EXT_FEATURE_SMD_DL_PKT_FORWARDING for DL data forwarding capability so that userspace can gate SMD setup and data forwarding configuration on driver support. Signed-off-by: Sidhanta Sahu Signed-off-by: Pooventhiran G --- include/uapi/linux/nl80211.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index d8fefefc11a9..d9ce185b0ef1 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -7114,6 +7114,15 @@ enum nl80211_feature_flags { * @NL80211_EXT_FEATURE_PROBE_AP: Driver supports probing the associated AP * in STA mode using @NL80211_CMD_PROBE_PEER. * + * @NL80211_EXT_FEATURE_SMD: Driver supports Seamless Mobility Domain (SMD) + * and is managed by an SMD-ME to support SMD BSS Transition in AP mode + * and supports association to an SMD-ME and SMD BSS transition in + * non-AP STA mode. + * + * @NL80211_EXT_FEATURE_SMD_DL_PKT_FORWARDING: Driver supports forwarding = of + * buffered downlink (DL) data packets in AP mode to the non-AP STA during + * SMD BSS Transition. + * * @NUM_NL80211_EXT_FEATURES: number of extended features. * @MAX_NL80211_EXT_FEATURES: highest extended feature index. */ @@ -7196,6 +7205,8 @@ enum nl80211_ext_feature_index { NL80211_EXT_FEATURE_ROC_ADDR_FILTER, NL80211_EXT_FEATURE_SET_KEY_LTF_SEED, NL80211_EXT_FEATURE_PROBE_AP, + NL80211_EXT_FEATURE_SMD, + NL80211_EXT_FEATURE_SMD_DL_PKT_FORWARDING, =20 /* add new features before the definition below */ NUM_NL80211_EXT_FEATURES, --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 688245947FD for ; Tue, 8 Sep 2026 17:10:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887421; cv=none; b=NSnNXYinKRDvrwjswUuNHHQXtDThMav8AEtTQ+Khl8XGkqzUiJ4QnTIYXyz4LlXIP0d/ubYPRiJztPCrxRbhGeSzAiC2KgbavZcEYruVBZx2osBGte7W5pUG6YroOIz5/zZib5iB20TuYfvvQZ5DDyOCRBs/ogQn9HivedvYpiY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887421; c=relaxed/simple; bh=BdDhSKqvE4bR6i94Z4PzJjpFNgCG9vS4dOfg0BJDMsA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Dlqq3bXpgX7sjXS37D83zzkkm5fcdkebeKo+frc6gs0AIDv9nv6uG4Vx4L2ojNi+6mlvfVg9HToopQQPcTVgb2DuwGhc386Fet3qVHVvfPEsckeL3MQfBiRJA7zTILJTOyblnBGcYQZr6BULN1xVkJtVz6y8RHxvGMCkv4DdcFA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=YJh2tyZD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YQRvW5tr; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="YJh2tyZD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YQRvW5tr" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdZ24045458 for ; Tue, 8 Sep 2026 17:10:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= VQNR1mlZBEy+Xn7d0FfH0MwnsJQZNZ8utWBVHbu9Dpk=; b=YJh2tyZDV4+4QIsc f/a72uwTDIpYdXsz+YbrhiPs83btOx1iL5vX5HYWTjxB4KSPnfWyLVOfWjqu/WSD epSWSRf4W5G0IwHCPKc+nTCX7Tk7SgfbpkFfLScSvUzRAlPHJwB7bLwSfVVC0Efz h9U0lYx9F/LsIfjgwW1enkxN+Zxl2y/nw4W14jsakKoTD2Bqr32wRZJZtRN61boT GNFZXhD9eaGGZR8U3vz5bpNANzRVlTtSi0Y7LUuj8EjtBzzsjznEr8xcxLbKCWT0 /eEpfSGjoWADI9XhHmOjPtvjwfOHeMoh6jK4bQayBQUq1JBlYGat6QPXVWpqscP3 26QRKg== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjg8xsy4t-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:18 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cc4216aee8fso6498618a12.1 for ; Tue, 08 Sep 2026 10:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887413; x=1789492213; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=VQNR1mlZBEy+Xn7d0FfH0MwnsJQZNZ8utWBVHbu9Dpk=; b=YQRvW5tr9JBb73ShIlCNVeUwX28Dy4miUpk4iER+4T0YH4/PWQJEU1/8LmK/7GqFdw MEIi5duELwDliQw5wIvtf6mG7lsq/To+IptPp3xRNY787Fuz33cwwaAba/Vt3VNcDZhd hpekUjwMTm8trTSGtu8sEnoohGMUdYRqkTmt/FXNOE61xIwi2rakw9b43pl3cSXc2FCg DQ5jMsHBiN5QK8EuSiEviLlb9L+g9IdagTaz7CY3Xg/ArndEf8CAJyPk86/2v4MNbbE9 kEW33UVlLAhK1DAoPkGvfSiSZEs/E1uj0oxcd7kibfmyScUUwj9sCLnMIvyAPI3Op+5K aSWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887413; x=1789492213; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VQNR1mlZBEy+Xn7d0FfH0MwnsJQZNZ8utWBVHbu9Dpk=; b=g7ohuhW/7HL8VhvIQmMc+h7A0UA2vo8003cf704NG73vKmTa+7KP6/leIS/gJILAfl ECdMDCfYHs87Hazn49jTHu/PTVF5Rq3dzZDYZvymnVW03w/kL+rlHqsvIYXmJziDDXvr B2KQ71dJCAAmf1v+aIWasrhofmFKicHiGv+eEkX5DMHru4rY8xj1xyCLAAwtxAzqDQl2 6AC8SRv8aIFAxxRaWy2wloRTgV66unhguCOLrSF/bm8JnRLX+XVHacxoRF0SV2K2sgBF gk0B1lz7jjaJoxuGZffxP1aycJZetHtuRtMTHNgJ5L9dg8ofrBQuUj3JQ4Xppg+QxS74 T3hw== X-Gm-Message-State: AFuF++nAMZSPJSEIVBARqdfWIhAW9vkSxNASZAL0yzSsHYJO0qI/Msd2 MRdU+aBYDZobyrST88fkxfZUc/M11rgEPzcGtTANmuErWEP8LFjkgTDrs9UH6KauIvW1aZdGkqr PzSUTvdvSVhAdqd1ptz5K+jXy1Gda/k7NYfrb7gDGP9laDKUjwt66TT98eW6mN6J90g== X-Gm-Gg: AYBFou3Wk1plvgzDLny7vCxdA9yUthT/EnTlgackpzLJC3bAh2LoMMxqFoUZTNq+3M1 Mn8tYrBEx9p6lTv4hVha0XrYn7Buu0P6vgTsRnppgRVzpwnvhQJWp2BxRPrr8/8ukrdL9z//b9n e32/Fa9Z3Ng/5ko8L3wYFgvzfLuHXtDpEnV1K0DUFbFRbb1k28SXeNIvTXV2fUy4K5LH3DKXGuu Xx3I34pecrD5PWF67uIIAEPrauh2W08xE+pyGXyMZnVxw2W4+8/u4m9bFAYw68vr+giYpRy9H2U iaLJNoAp0y53hMlYsi7/YHZqob/E9N3O2HcoVvlVNdXBs6W3XB8PmT/10xR57DDVFB1lt4soQRm /Z0eTz4pQece6a7pr0+oND014/a8TcyQ04NyIzTcpxk0iwkKMVcqSJnylnDpf7MgVOHYF4eMXQi E3dl/NATqEVoBiNihqHEyNxQ== X-Received: by 2002:a05:6a21:e081:b0:3b4:61f:1fec with SMTP id adf61e73a8af0-3da39bb593dmr47007575637.2.1788887412679; Tue, 08 Sep 2026 10:10:12 -0700 (PDT) X-Received: by 2002:a05:6a21:e081:b0:3b4:61f:1fec with SMTP id adf61e73a8af0-3da39bb593dmr47007494637.2.1788887412057; Tue, 08 Sep 2026 10:10:12 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:11 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 03/18] wifi: nl80211: Add kernel interfaces for Seamless Mobility Domain setup Date: Tue, 8 Sep 2026 22:39:31 +0530 Message-Id: <20260908-smd-v1-3-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=J7GaKgnS c=1 sm=1 tr=0 ts=6aa0417a cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=WqWJlBuMtEtNw8dGTc8A:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-ORIG-GUID: Q066q9vAiwVFy9nGwG4BVMaBdT8iohLr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXxMADW6b6i7wQ 5yRDZHQ7qFVW/FgSXBszpVwpp2MyOgGYdib7XNDNW67KhzwbEwk6IjpIS0FqGvouNfO2oOgp3rM 8v7w1z+APcQupL9+M97hqpPeCW/SVa+2GSJUdLa2nUt9PbQrA9FVo6YCvrOUt774Vo4/1eUWqG/ vYHnSK51m5cDOulW/X7Etu+M+JmvMmyurO6qVJErB29g/kdgYOTMBHVeDwVmJrFpVbK78Mjf+rZ jDgoCZ2C//r1ay346jrvOWB1BWvh6d+asI/WkWNV9xTd1encpGeGjl7w4dbLK8WJL00ucdHC0m7 fA61vZzC0/c9YVl4urEKsCsamXJsyn0eGmhfojtMGosZS/7ir5Jd8Mm+o5Y2Qgzrqy5FrptGxOA WADZ39VHMVUOP6r8dtOXMKSyYSua6H3XszCBo0Ruz679NFXbmsgv7BjliBJETyl8R3SJDoJMETA d+NXDM10jzDCio+u2yQ== X-Proofpoint-GUID: Q066q9vAiwVFy9nGwG4BVMaBdT8iohLr X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX64YLAvdipL92 YH1eWaaBu/sPVTxph++ppuPV58VQEoMLE1WhGIaw48w4PqV+eAYesjQuN7ZB3KbqqDc/pNPL/ti JexO88WeypoHdPSXUTopQv2R3zkcIx0= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 From: Aditya Sathish An AP MLD managed by an SMD-ME must advertise its SMD parameters in Beacon and Probe Response frames so that an SMD-capable non-AP MLD can negotiate SMD during association and may choose to later perform SMD BSS Transition. Add nl80211 kernel interfaces for userspace to configure these parameters in nl80211_start_ap() so that the driver and lower layers can be configured with appropriate parameters. Signed-off-by: Aditya Sathish Co-developed-by: Rohan Dutta Signed-off-by: Rohan Dutta Signed-off-by: Pooventhiran G --- include/linux/ieee80211-uhr.h | 4 ++ include/uapi/linux/nl80211.h | 95 +++++++++++++++++++++++++++++++++++++++= ++++ net/wireless/nl80211.c | 17 ++++++++ 3 files changed, 116 insertions(+) diff --git a/include/linux/ieee80211-uhr.h b/include/linux/ieee80211-uhr.h index 19e9260d0db8..c3f87d4c8bec 100644 --- a/include/linux/ieee80211-uhr.h +++ b/include/linux/ieee80211-uhr.h @@ -589,6 +589,10 @@ ieee80211_uhr_dbe_cap(const struct ieee80211_uhr_cap *= cap) #define IEEE80211_SMD_INFO_CAPA_TYPE 0x10 #define IEEE80211_SMD_INFO_CAPA_PTK_PER_AP_MLD 0x20 =20 +/* IEEE P802.11bn/D2.0, Aug 2026, subclause 9.4.2.363 */ +#define IEEE80211_SMD_INFO_PREP_TIMEOUT_MIN 2 /* in 64 TUs */ +#define IEEE80211_SMD_INFO_NUM_PREP_AP_MAX 7 + struct ieee80211_smd_info { u8 id[ETH_ALEN]; u8 capa; diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index d9ce185b0ef1..f5c8dbe5f26a 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -3185,6 +3185,12 @@ enum nl80211_commands { * The aggregated message always precedes the per-link messages for the * same station within a dump sequence. * + * @NL80211_ATTR_SMD_PARAMS: Nested attribute to indicate support for Seam= less + * Mobility Domain (SMD); it contains parameters to define capabilities of + * an AP managed by an SMD-ME. Valid if the driver supports + * %NL80211_EXT_FEATURE_SMD. + * Used with %NL80211_CMD_START_AP. See &enum nl80211_smd_params_attrs. + * * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use @@ -3785,6 +3791,8 @@ enum nl80211_attrs { =20 NL80211_ATTR_STA_DUMP_LINK_STATS, =20 + NL80211_ATTR_SMD_PARAMS, + /* add attributes here, update the policy in nl80211.c */ =20 __NL80211_ATTR_AFTER_LAST, @@ -9118,4 +9126,91 @@ enum nl80211_nan_peer_map_attrs { =20 #define NL80211_NAN_SCHED_NOT_AVAIL_SLOT 0xff =20 +/** + * enum nl80211_smd_type - Type of the SMD + * + * @NL80211_SMD_TYPE_PER_AP_MLD_MAC_SAP: Separate MAC SAP is used per AP M= LD. + * @NL80211_SMD_TYPE_PER_SMD_MAC_SAP: one MAC SAP is used in the SMD. + * @NUM_NL80211_SMD_TYPES: internal. + * @NL80211_SMD_TYPE_MAX: Max type of the SMD. + * + * This value represents the data path models between the non-AP MLD and D= S. + * DS mapping for the non-AP MLD is updated if + * %NL80211_SMD_TYPE_PER_AP_MLD_MAC_SAP is used. + * + * All AP MLDs within an SMD shall indicate the same SMD type (refer + * IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.1.2). + */ +enum nl80211_smd_type { + NL80211_SMD_TYPE_PER_AP_MLD_MAC_SAP, + NL80211_SMD_TYPE_PER_SMD_MAC_SAP, + + NUM_NL80211_SMD_TYPES, + NL80211_SMD_TYPE_MAX =3D NUM_NL80211_SMD_TYPES - 1, +}; + +/** + * enum nl80211_smd_ptk_mode - PTK Mode used in the SMD + * + * @NL80211_SMD_PTK_MODE_PER_SMD_PTK: one PTK is used by all AP MLDs in th= e SMD. + * @NL80211_SMD_PTK_MODE_PER_AP_MLD_PTK: Separate PTK is used per AP MLD. + * @NUM_NL80211_SMD_PTK_MODES: internal. + * @NL80211_SMD_PTK_MODE_MAX: Max type of PTK mode. + * + * This value represents the security mode of the SMD that dictates the PT= K used + * in current and target AP MLDs to protect communications with the non-AP= MLD + * (refer IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.1.3.2) + */ +enum nl80211_smd_ptk_mode { + NL80211_SMD_PTK_MODE_PER_SMD_PTK, + NL80211_SMD_PTK_MODE_PER_AP_MLD_PTK, + + NUM_NL80211_SMD_PTK_MODES, + NL80211_SMD_PTK_MODE_MAX =3D NUM_NL80211_SMD_PTK_MODES - 1, +}; + +/** + * enum nl80211_smd_params_attrs - SMD Domain parameters + * + * @NL80211_SMD_PARAMS_ATTR_UNSPEC: Invalid attribute. + * @NL80211_SMD_PARAMS_ATTR_IDENTIFIER: Required (binary) attribute of ETH= _ALEN + * bytes used to define the unique identifier for the SMD. + * @NL80211_SMD_PARAMS_ATTR_TIMEOUT: Required (u16) attribute to define th= e SMD + * Preparation timeout (in 64 TUs, values 0 and 1 are reserved) for + * the target AP MLD. + * @NL80211_SMD_PARAMS_ATTR_DL_DATA_FORWARDING: Flag attribute to indicate= that + * the device supports forwarding of buffered DL data packets. + * @NL80211_SMD_PARAMS_ATTR_MAX_PEER_APMLDS: Required (u8) attribute to de= fine + * the maximum number of AP MLDs a non-AP MLD can prepare with. Value is + * the maximum number of AP MLDs - 1. A value of 0 means that the non-AP + * MLD can prepare with 1 AP MLD. + * @NL80211_SMD_PARAMS_ATTR_TYPE: Required (u8) attribute to indicate the + * SMD Type (&enum nl80211_smd_type). + * @NL80211_SMD_PARAMS_ATTR_PTK_MODE: Required (u8) attribute to indicate = the + * PTK mode used for protection (&enum nl80211_smd_ptk_mode). + * @NL80211_SMD_PARAMS_ATTR_NEIGHBOR_PROBING: Flag attribute to indicate t= hat + * the device supports UHR Neighboring AP Probing. + * @__NL80211_SMD_PARAMS_ATTR_LAST: Last attribute, used internally. + * @NL80211_SMD_PARAMS_ATTR_MAX: Max attribute. + * + * Nested attributes carried in %NL80211_ATTR_SMD_PARAMS to define + * device capabilities that is part of an SMD (refer IEEE P802.11bn/D2.0, + * Aug 2026, subclause 9.4.2.363, Figure 9-aa43 and Figure 9-aa44). + * + */ +enum nl80211_smd_params_attrs { + NL80211_SMD_PARAMS_ATTR_UNSPEC, + NL80211_SMD_PARAMS_ATTR_IDENTIFIER, + NL80211_SMD_PARAMS_ATTR_TIMEOUT, + NL80211_SMD_PARAMS_ATTR_DL_DATA_FORWARDING, + NL80211_SMD_PARAMS_ATTR_MAX_PEER_APMLDS, + NL80211_SMD_PARAMS_ATTR_TYPE, + NL80211_SMD_PARAMS_ATTR_PTK_MODE, + NL80211_SMD_PARAMS_ATTR_NEIGHBOR_PROBING, + + /* keep last */ + __NL80211_SMD_PARAMS_ATTR_LAST, + NL80211_SMD_PARAMS_ATTR_MAX =3D __NL80211_SMD_PARAMS_ATTR_LAST - 1 +}; + #endif /* __LINUX_NL80211_H */ diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index e585da1d79c9..22d71f32815f 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -689,6 +689,21 @@ nl80211_nan_conf_policy[NL80211_NAN_CONF_ATTR_MAX + 1]= =3D { [NL80211_NAN_CONF_NOTIFY_DW] =3D { .type =3D NLA_FLAG }, }; =20 +static const struct nla_policy +nl80211_smd_params_policy[NL80211_SMD_PARAMS_ATTR_MAX + 1] =3D { + [NL80211_SMD_PARAMS_ATTR_IDENTIFIER] =3D NLA_POLICY_ETH_ADDR, + [NL80211_SMD_PARAMS_ATTR_TIMEOUT] =3D + NLA_POLICY_MIN(NLA_U16, IEEE80211_SMD_INFO_PREP_TIMEOUT_MIN), + [NL80211_SMD_PARAMS_ATTR_DL_DATA_FORWARDING] =3D { .type =3D NLA_FLAG }, + [NL80211_SMD_PARAMS_ATTR_MAX_PEER_APMLDS] =3D + NLA_POLICY_MAX(NLA_U8, IEEE80211_SMD_INFO_NUM_PREP_AP_MAX), + [NL80211_SMD_PARAMS_ATTR_TYPE] =3D + NLA_POLICY_MAX(NLA_U8, NL80211_SMD_TYPE_MAX), + [NL80211_SMD_PARAMS_ATTR_PTK_MODE] =3D + NLA_POLICY_MAX(NLA_U8, NL80211_SMD_PTK_MODE_MAX), + [NL80211_SMD_PARAMS_ATTR_NEIGHBOR_PROBING] =3D { .type =3D NLA_FLAG }, +}; + static const struct netlink_range_validation nl80211_punct_bitmap_range = =3D { .min =3D 0, .max =3D 0xffff, @@ -1097,6 +1112,8 @@ static const struct nla_policy nl80211_policy[NUM_NL8= 0211_ATTR] =3D { [NL80211_ATTR_NPCA_PUNCT_BITMAP] =3D NLA_POLICY_FULL_RANGE(NLA_U32, &nl80211_punct_bitmap_range), [NL80211_ATTR_STA_DUMP_LINK_STATS] =3D { .type =3D NLA_FLAG }, + [NL80211_ATTR_SMD_PARAMS] =3D + NLA_POLICY_NESTED(nl80211_smd_params_policy), }; =20 /* policy for the key attributes */ --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D890569F2A for ; Tue, 8 Sep 2026 17:10:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887420; cv=none; b=Lb4rz7g2K1GvEI/aAGacU+7fRSKTKhqdxtF6ooKhs1fEUOLqRJHIHnh5XR86JjIVwR0OSNNzOOdhF3GLQhJqm8lGEZtz36NfbO+SArOtnSJbORzYtdShhtRpWPWu8ap2vcRTyPsokAjpmjUX7WqtThBZU2Wm7fJTs/tSjBfjOxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887420; c=relaxed/simple; bh=vGFJQ6aAodKhtzS21oPWEsRImbjCMwfBF99koJOYdiM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=tZDv1aXZGpCVpJxPebCAS2Q2ZEg3mgGN+ciooh16yyAI+ZDJjDWl82h/VM5Id6NvPIWR3X9XgbVaz598d9OtQzFe3fhFo024cBKcTubrHz6ehxqJMz/VJ1/UbzcKET2EJIoUKZCWew2SKH38eqsMmOjf4e50772nsA7274z070g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=GvTpwNkj; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=em9L3VXJ; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="GvTpwNkj"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="em9L3VXJ" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdxCr2900125 for ; Tue, 8 Sep 2026 17:10:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= tmSBOtvSp+Gmy3pqLBjim1lUAAw6sE0lZZQQfu5q2wE=; b=GvTpwNkjRPblAZV3 wBYl4geZZJBHmih1Ts5hQwRvDRzRXpwkLEb/P+IDEeWv7GF9EKwlgR0LWbihzPgh VgrdwdwvWq1mlyM2oNSuws9yRJqJeXmDmE82T8s+6y7D8BXmW22YxpXtP+BXT9IM kL54lHzOhZgye0vJVV2ipuFgwNkaGDE153uVUPXDwF3b2T7WNLTk8uCk0POnkrEf ltYzMXvi/pYRcihNwh9PkCgaTVMuWVw/JXh1KcpI37Qv6MBrZOekgYhS/wQ1Df0+ DPdmN/F4tVhwxi0TpWLGTGJZqLCB64NPM7l7yOqHS8FtASYkFLF16MlZAeC7nLGe NmPdiA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcvujvch-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:17 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cc1bbd7d6e6so5194792a12.3 for ; Tue, 08 Sep 2026 10:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887417; x=1789492217; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tmSBOtvSp+Gmy3pqLBjim1lUAAw6sE0lZZQQfu5q2wE=; b=em9L3VXJR0AA7t0HKCixms3+990j4ly9vCT3R3KAYbzcAa33uCPUEibcV3dwIbyeam 8htzFfPjoZqNFqgXGeAlH64id+/03btyIvZhfaIGbl3+QAfb1DwyJ06dfDbLs3Ml4uV8 zvXC68LoGI7pCFsO7TF3ssbbRW8gYt1MnvEDwfrFNNONLAiVNvNhvsQAOeqyjnk5Xk4e fn8M3d2JtjUqQCwNS9fe6LDmuPIvpYHpf+dELfccolEetFDK+rsdT6QSPcfsmrajkkSd oHnLohWRieifFxK9X3/wRfcxxg/Sr9TEK4SGJeBxE0jWGUMFYZ2OxucE9AvCF6onGQ/E tMeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887417; x=1789492217; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tmSBOtvSp+Gmy3pqLBjim1lUAAw6sE0lZZQQfu5q2wE=; b=of24XaETOleO6hpOxVIj28lQtWX0ravHJcFkRaZJSKpNXzIZiuu9CEqua8macK+1pg FrxZ1ned962ESTC1AkG++xPmmUDAwOU0YMp1f2ktzvNw1cKCeajkub4ewkcXyBTYK0YM 2TRCgXGahX4aadvXtu8/q/uDvlPVTkNU0bMf/q7b5qrNsHAJCaZ/dkf3DN3syoh4ec12 tLiFzBXEPJQn/yE107i+XEmb5tfTuTmqgVmpRRUFdCUYfYwR+dHFb1pixMEUl8Ss3mUj xh71seyCypBf0fBzPEVTWzT0pTkDbZYGPnIzxKqrcJH/A04kttiWXLwZu2v3cHnra+Bq TBPA== X-Gm-Message-State: AFuF++nhidkpr83usX0qkU1tcY6nss7zUnIM1xYslInoVLIcVJYN5Gx5 79IPZFQ9CwA7PGWs4g6NpPJ25Hoer156rJHuVGWJtAux/G627Z2eCKc50K+fqz8qbxyfIq3XGxk YcZaQWRDkqf8WTSMsMX7InPya9+qfxHVjMAgysRKhOAKVQrP9K177tgXKPLElrjDPiQ== X-Gm-Gg: AYBFou3P/wRcI5cuGepsS77PH8HWDAFeRYWicwKhrvSADCSFpagxSrUDYyPrZaEJfY+ NnERG0yxnJAOC/awnCBPp6UZuptvDFlbXXzQtBryWi1lDZ3R2zXrTM6SjL2T0vneHteBVEjvdpK ghcnd9Xqq0JIme2W7YTEspRgr3OMuQFp4cmX30p957XKhQYMElzMrbMW2wCuU1AybKYTHRT0pOm XLocqqBsah2NXS7jyJyMac0EXDAJ4MezSOD8xCkDPeuCneMOhxG8xiM5+xP2jhKA8Rkd8Gxu+kS BhN+axphLCnkwKYS5WgtQ1Wbc7xukMHvdqJ7dPxCpzqJ8PtDAIeM3YYG1iwPgRGAzKd/iG24niy MmwaWrY0ZXGj2IkYrw+ePEGBM8FCcdCCPTo5P9uLiYCsqhChVfKJxU+Oidn6zGf3lr+Ojje+hFj Vt364HgMaIAfQyjQsxpaJJgw== X-Received: by 2002:a05:6a20:db91:b0:3d3:ae1f:d7f5 with SMTP id adf61e73a8af0-3da3a0b9eecmr47536194637.21.1788887416833; Tue, 08 Sep 2026 10:10:16 -0700 (PDT) X-Received: by 2002:a05:6a20:db91:b0:3d3:ae1f:d7f5 with SMTP id adf61e73a8af0-3da3a0b9eecmr47536097637.21.1788887416272; Tue, 08 Sep 2026 10:10:16 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:15 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 04/18] wifi: cfg80211/mac80211: Configure AP with SMD capabilities Date: Tue, 8 Sep 2026 22:39:32 +0530 Message-Id: <20260908-smd-v1-4-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=ePkjSnp1 c=1 sm=1 tr=0 ts=6aa04179 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=56q9xwJp3_aMvtWITrUA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: MfAO-9NG9gvbuK3ZdkfnNkW3ZzXEE-gf X-Proofpoint-ORIG-GUID: MfAO-9NG9gvbuK3ZdkfnNkW3ZzXEE-gf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX4yRJm859IVyW xilAQbWdez5sGp0iIoqqZHesOcPxrN6YDtUnExU2PSA60M4fPVSYejIid7ie2JQNx63SNnPj8Vl h+K41yET0ACQWoImdY5CKWNqN/8PsziYYiK9eaWorSEsUGeEnvRbpzV1x6x5apdw/OSoWnIQ6XK R+TFCQzkFrKP53wwntzeWRSn4GtTbJdCoXgJYjefqs/a38RLwusjt2SbTHSYneR/MqfnmMS84BF vOnXP4VI5FiGnH46Z4i53bjcn+DMhITddNsoP4vvvn054EkFUTT+BdUNbQDCd/mgsgMWquQIV7A 1DNTVQ3Grz1/+vqeDOZ2pmup2Bb4pKcf7lEre0cKxv+H81h+JsuMQ2Cvv2o4p6dEhZEVbtCV6dy uGuX3ofnr9RiE8F+5OhLQ8HcH71u2JF71XcRFLM1tCI5AQxohlbSZgjf84sg0c+rE5QgMudNGgU TTicXJfHGOKI3dX3Z8A== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX3l4GLeL0Y0Un AZg50P0+9kswf2AdJDH+db7gWK9HF42HhULK0c2q83WLWmDY/t2hh7O1uAZxRr27OyvsO4XwvZf QFA/ObR+mmxQxlBO5br2w/USd7jMrCI= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 From: Rohan Dutta When an AP is getting started, configure the AP as SMD-enabled if userspace defines configuration for the Seamless Mobility Domain (SMD). The SMD parameters are: - SMD Identifier: unique identifier of the SMD - SMD Preparation Timeout: Valid duration for a prepared target AP MLD - Downlink Data Forwarding: Forwarding support for buffered DL packets - Max number of Peer AP MLDs: Number of target AP MLDs a non-AP MLD can prepare with - SMD Type: Type of SMD - SMD PTK Mode: PTK mode used in the SMD - Neighbor Probing: UHR Neighboring AP Probing Without these parameters configured, drivers and lower layers cannot be able to support SMD BSS Transition. Signed-off-by: Rohan Dutta Co-developed-by: Aditya Sathish Signed-off-by: Aditya Sathish Co-developed-by: Sidhanta Sahu Signed-off-by: Sidhanta Sahu Signed-off-by: Pooventhiran G --- include/net/cfg80211.h | 25 ++++++++++++++++ include/net/mac80211.h | 2 ++ net/mac80211/cfg.c | 5 ++++ net/wireless/nl80211.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 110 insertions(+) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 6461a7bd0169..d0a269f4c711 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -1587,6 +1587,29 @@ struct cfg80211_s1g_short_beacon { size_t short_tail_len; }; =20 +/** + * struct cfg80211_smd_params - Seamless Mobility Domain parameters + * + * @smd_enabled: SMD is enabled on this device + * @smd_identifier: SMD ID (ETH_ALEN bytes) + * @smd_timeout: timeout in 64 TUs for ST preparation + * @dl_data_fwd: MSDU forwarding supported + * @max_num_of_peer_apmlds: max prepared AP MLDs supported (0-7) + * @smd_type: SMD type + * @ptk_mode: PTK mode + * @neighbor_probing: UHR Neighboring AP Probing supported + */ +struct cfg80211_smd_params { + bool smd_enabled; + u8 smd_identifier[ETH_ALEN]; + u16 smd_timeout; + bool dl_data_fwd; + u8 max_num_of_peer_apmlds; + enum nl80211_smd_type smd_type; + enum nl80211_smd_ptk_mode ptk_mode; + bool neighbor_probing; +}; + /** * struct cfg80211_ap_settings - AP configuration * @@ -1623,6 +1646,7 @@ struct cfg80211_s1g_short_beacon { * @mbssid_config: AP settings for multiple bssid * @s1g_long_beacon_period: S1G long beacon period * @s1g_short_beacon: S1G short beacon data + * @smd_params: Seamless Mobility Domain (SMD) parameters */ struct cfg80211_ap_settings { struct cfg80211_chan_def chandef; @@ -1655,6 +1679,7 @@ struct cfg80211_ap_settings { struct cfg80211_mbssid_config mbssid_config; u8 s1g_long_beacon_period; struct cfg80211_s1g_short_beacon s1g_short_beacon; + struct cfg80211_smd_params smd_params; }; =20 =20 diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 7bb4618065b6..6b82ca07fbf0 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -797,6 +797,7 @@ struct ieee80211_bss_npca_params { * @s1g_long_beacon_period: number of beacon intervals between each long * beacon transmission. * @npca: NPCA parameters + * @smd_params: SMD parameters */ struct ieee80211_bss_conf { struct ieee80211_vif *vif; @@ -904,6 +905,7 @@ struct ieee80211_bss_conf { u8 s1g_long_beacon_period; =20 struct ieee80211_bss_npca_params npca; + struct cfg80211_smd_params smd_params; }; =20 #define IEEE80211_NAN_MAX_CHANNELS 3 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 23f4f9ec86d0..b4b42790c5d7 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -1796,6 +1796,11 @@ static int ieee80211_start_ap(struct wiphy *wiphy, s= truct net_device *dev, } } =20 + if (params->smd_params.smd_enabled) + link_conf->smd_params =3D params->smd_params; + else + link_conf->smd_params.smd_enabled =3D false; + if (sdata->vif.type =3D=3D NL80211_IFTYPE_AP && params->mbssid_config.tx_wdev) { err =3D ieee80211_set_ap_mbssid_options(sdata, diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 22d71f32815f..aa7aa70a5b41 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -7224,6 +7224,78 @@ static int nl80211_check_npca(struct cfg80211_regist= ered_device *rdev, return -EINVAL; } =20 +static int nl80211_parse_smd_params(struct genl_info *info, + struct cfg80211_smd_params *smd_params) +{ + struct nlattr *smd_params_attr =3D info->attrs[NL80211_ATTR_SMD_PARAMS]; + struct cfg80211_registered_device *rdev =3D info->user_ptr[0]; + struct net_device *dev =3D info->user_ptr[1]; + struct wireless_dev *wdev =3D dev->ieee80211_ptr; + struct nlattr *tb[NL80211_SMD_PARAMS_ATTR_MAX + 1]; + int err; + + if (!wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_SMD)) { + GENL_SET_ERR_MSG(info, "SMD is not supported"); + return -EOPNOTSUPP; + } + + if (!wdev->valid_links) { + GENL_SET_ERR_MSG(info, "SMD is not allowed without MLO"); + return -EINVAL; + } + + err =3D nla_parse_nested(tb, NL80211_SMD_PARAMS_ATTR_MAX, + smd_params_attr, nl80211_smd_params_policy, + NULL); + if (err) { + GENL_SET_ERR_MSG(info, "failed to parse SMD parameters"); + return err; + } + + if (!tb[NL80211_SMD_PARAMS_ATTR_IDENTIFIER] || + !tb[NL80211_SMD_PARAMS_ATTR_TIMEOUT] || + !tb[NL80211_SMD_PARAMS_ATTR_MAX_PEER_APMLDS] || + !tb[NL80211_SMD_PARAMS_ATTR_TYPE] || + !tb[NL80211_SMD_PARAMS_ATTR_PTK_MODE]) { + GENL_SET_ERR_MSG(info, "required SMD parameters are missing"); + return -EINVAL; + } + + memcpy(smd_params->smd_identifier, + nla_data(tb[NL80211_SMD_PARAMS_ATTR_IDENTIFIER]), + ETH_ALEN); + + smd_params->smd_timeout =3D + nla_get_u16(tb[NL80211_SMD_PARAMS_ATTR_TIMEOUT]); + + smd_params->dl_data_fwd =3D + !!tb[NL80211_SMD_PARAMS_ATTR_DL_DATA_FORWARDING]; + if (smd_params->dl_data_fwd && + !wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_SMD_DL_PKT_FORWARDING)) { + GENL_SET_ERR_MSG(info, + "SMD DL packet forwarding is not supported"); + return -EOPNOTSUPP; + } + + smd_params->max_num_of_peer_apmlds =3D + nla_get_u8(tb[NL80211_SMD_PARAMS_ATTR_MAX_PEER_APMLDS]); + + smd_params->smd_type =3D + nla_get_u8(tb[NL80211_SMD_PARAMS_ATTR_TYPE]); + + smd_params->ptk_mode =3D + nla_get_u8(tb[NL80211_SMD_PARAMS_ATTR_PTK_MODE]); + + smd_params->neighbor_probing =3D + !!tb[NL80211_SMD_PARAMS_ATTR_NEIGHBOR_PROBING]; + + smd_params->smd_enabled =3D true; + + return 0; +} + static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev =3D info->user_ptr[0]; @@ -7505,6 +7577,12 @@ static int nl80211_start_ap(struct sk_buff *skb, str= uct genl_info *info) =20 /* FIXME: validate MLO/link-id against driver capabilities */ =20 + if (info->attrs[NL80211_ATTR_SMD_PARAMS]) { + err =3D nl80211_parse_smd_params(info, ¶ms->smd_params); + if (err) + goto out; + } + err =3D rdev_start_ap(rdev, dev, params); if (!err) { wdev->links[link_id].ap.beacon_interval =3D params->beacon_interval; --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C6335581F6 for ; Tue, 8 Sep 2026 17:10:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887428; cv=none; b=IkYKSvANKLGby3jFV0UUVuUy3Scw4HB6o44n73I82gkZ+7TyZ7PIWkZ9D95P33zo8zqN0jUDUjLl2dZ7r9Shng+CJNQEdO8yW+7Jnf0KjNcdJR4eA8qokBMIE9u27jxX3yhKJdFImcwWZf/8en1WzKA347/TvnDr9ID/U0C01jY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887428; c=relaxed/simple; bh=okDgO6J3Qp+rfKQOFHaR0Wyt8fws8ufD69oII3M+1Jg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=svNMuziTK6lLCawFsfZr7VfZAStg6zZfwdc+X6ovqc0swppraFRnRnY7rmCiET4qelavz7pz2BMSfKR/ve9FM39s8zByomTZ3p4q98C9y4hBMhx1Jzbh0e9svp7KITa1JYKihbahH+nC6Bv4wg8tSxK6K+F9snoC2+pIy1QJ3gQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=WvFh2BoL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=CYIa2KOt; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="WvFh2BoL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="CYIa2KOt" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688Fdpvv3613527 for ; Tue, 8 Sep 2026 17:10:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= nlCSODNKgYyiYLj0bQxf12brdADlE9sLW5aEHOCrxXQ=; b=WvFh2BoL9HIwJNts rU57dRzSbWn+0mHU9byhzVGTpgLSqm6fIKPTQ+OfZFeKGFP1BEsLGGOZ0AUPqoOF pLlTgvYaJ9Zq+dSYlzlsju2+HgPHTgHEJ3l2Pn//6HAw16Sn9AvAWtowJNaLQOw2 kFggbH9C9eWZ510EOmw4XVMqQQ3qi2h8jLWYGBmRj7UdRFISpvocOApUFWb0MrwI DN1HrwTUoo69xLuoiCAJKntHjwfrEgkYYjYRv1xV4VXwd5JFJy9k8YjTGUoVtBj+ l+8oeBTEWVzYAuODkDhGDyisNwEtGG8iqdpHQLccyC4O4P+nsJNl1n08R6wWeCmx PE9nmw== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjagukdue-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:24 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-39512608fb1so10118642a91.1 for ; Tue, 08 Sep 2026 10:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887421; x=1789492221; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=nlCSODNKgYyiYLj0bQxf12brdADlE9sLW5aEHOCrxXQ=; b=CYIa2KOtib2CbWs5k0w0w9lgwa61lCP3X44mGVo0AhIj6Ub03kL8yY9NYm1CLeVBxi YpGlu/rQGGTr0W+qHXZhnIvEsCcNeRCg1Yz65D3iJ+V6Cph3MMrIWoBCZGxw221Tfgvp HP5BwnvIL0JrYrm6PB152Uj14tjYq295Lwd97wdhvj0LrrrOR7rHHwttALdy63MM1O2p bE7b+Dqt6bOyFEUUKc2DYBeV4RHNAXIatPajHb6jZ4NVvxEAOxWpUAL3eouzg9GdJk0x zIgBnjlgEmXajJ35DOxZSDfxrBu0CcFiIqd/eDYMVZ2PK1DeNRVwdgYp1V+QtcywLwVA KRUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887421; x=1789492221; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nlCSODNKgYyiYLj0bQxf12brdADlE9sLW5aEHOCrxXQ=; b=O1k1y3lZOFCmmAreGuHXeDvolSbO/35NjzZnJ6Qi2bKl8OddoUUQWhL/uGR0xSKfHO 3AUUeAJ7ZgqJJkUrfG3JD0SphWueHjMAdDgSYMyLaq8DBBg+9AuSxcp7M1GiVx5J3JO/ g5eBREj3fkN7cea/bfTYvwrRywe2S898dk6iIL/6pVI5dcLRAwPpmYpI9OicsOS4YbXo N2uVfJ4W8V4V+g+GQ7Ch4YPiE/ohb2eqonsd+f4891uUo26jqoo4sbob/zmdC+1Mf1PZ FHDHoliNMLY8wT8Ya88j0H61PurMMWfn+PR0j4rGcneYmCj9qdjj2VtfsVJiG3l+6C32 QA4g== X-Gm-Message-State: AFuF++mNiC8Idj+AfseikJnt1eRwpEihshcIF6baOvk8nq3TAdcobl9k 64M5mWXZwujjRVpWPgAgXdAxFmN2m7Tnae9IOAuyYsVyNX/DakK+0WaA07Ysgt4OPO+CoJ04RDd ms85/lbzoyp2dzT7iOQuo2TfZiRpFV1j6xteR2pVrXExn1bn6VbdzXgjZ1v2PxosmHA== X-Gm-Gg: AYBFou0llmnV4VfSxvERN6jo9x8MMlEFTIuKyJaTAyTW4ALNY9dUmH/QC1BcSbwMKdm q+69fFzzfyR0aFLoRIr8jTo0QgaUccjBlkK2pE3cNkx8RSZTYz6xddgxHNmQhzehyr0bRNbki6G lN4C+aOLSnVDdM2poEMzFEQH3TsLFHCpirqhVEgP6IoO0gcvkwWgIJ1nF6ikMxd42c+DGBXtQPd 9KI5ix6VegoNODhv1L7LZACEQEJ8o6o8QhUjPP3Z4cQWGaTE5l1tRErvdcXM6UF2oTrwM6A0gdA Wp1O5NYmCfXhzohMqTMB4UmmgMTOzOjpP8ITMMQQWyffUSla5ESJhpU9FDM0vqO962LXpMCgP63 OMTi8QB+G5gJgXq6lWDRWNYxZDGySjsi6PzIGz2fGAKguSr4kAn17wtxWNwwSONc+Os/qcla119 ouZ0r/paoUBkbY15wyrk7kNg== X-Received: by 2002:a17:90a:1188:b0:39b:a8d8:985 with SMTP id 98e67ed59e1d1-39ba8d80b06mr1301936a91.12.1788887421417; Tue, 08 Sep 2026 10:10:21 -0700 (PDT) X-Received: by 2002:a17:90a:1188:b0:39b:a8d8:985 with SMTP id 98e67ed59e1d1-39ba8d80b06mr1301889a91.12.1788887420741; Tue, 08 Sep 2026 10:10:20 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:19 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 05/18] wifi: cfg80211/mac80211: Parse SMD parameters in STA addition/modification Date: Tue, 8 Sep 2026 22:39:33 +0530 Message-Id: <20260908-smd-v1-5-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=TqLWQjXh c=1 sm=1 tr=0 ts=6aa04180 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=Y27KnQjsX7IjzuVWbagA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: lpaIG-Ljf7ttBpdGgyoGmpAWw2rN3rTL X-Proofpoint-ORIG-GUID: lpaIG-Ljf7ttBpdGgyoGmpAWw2rN3rTL X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX7+Af1+FbQJcv x4/z0b8JhhWHZgalDIRBnrCU8+dA/p7gjTsqcc7WnkKoUAZ6zX0hPiKmp/LSPuWijl4eDzOIxzb jQpkapG/RScnMWA96FXuMtpTHkqoNHE= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXw4ZjF1HizJ7n 6RInTSRfMVCpv+js50cy921EpDOJZfEW29oYXveXB1VJbkc6TK23jqvnhadQ5ezhQaV9Xwf+/+3 q2rakBdgXZqzy5NtGZ2fEto+LiCWQAbAfqRJIzsVV0dt6EzBDvI/UXM8oebAODcoycEcbA7gv/x wqRYxrSTxAB8oWL524OIakF7iDWh6x3IzPdkchO23PgJOFduR5QaamHej2x2tfcONXhP1G/IxGF vGvT6yret90I4SWDbiWf1woL1C2rpBc0Uk/1iEuTRa/qBm5h3GedVCWzeVZgtLp1o+vUwLB7Bk/ MxYzKVC6oBg4tE8FIgpVoF2TDGsZMO+1lLlYghJTfg3UP37lsdwCUy84EyJY6ZLwEmROQUQMvgL dhnDAyOwVOe8q4HKw54IWdEcsH8pR7ksVBww5cLs9OqrmDD0epz4uFKwgkjkhhePTMrTZy4XZ2i TQJt0ZXPampxKOaZZ/Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 bulkscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 malwarescore=0 clxscore=1015 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 From: Aditya Sathish When a non-AP MLD is getting added or having its capabilities updated, handle the SMD parameters passed from userspace. Otherwise, drivers will not be able to identify that the non-AP MLD has negotiated SMD with this AP MLD during association nor can they support SMD BSS Transition if it has been requested later by the non-AP MLD. Signed-off-by: Aditya Sathish Co-developed-by: Sidhanta Sahu Signed-off-by: Sidhanta Sahu Co-developed-by: Pooventhiran G Signed-off-by: Pooventhiran G --- include/net/cfg80211.h | 15 +++++++++++++ include/net/mac80211.h | 3 +++ include/uapi/linux/nl80211.h | 17 ++++++++++++++ net/mac80211/cfg.c | 10 +++++++++ net/mac80211/debugfs_sta.c | 1 + net/mac80211/sta_info.h | 2 ++ net/wireless/nl80211.c | 53 ++++++++++++++++++++++++++++++++++++++--= ---- 7 files changed, 94 insertions(+), 7 deletions(-) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index d0a269f4c711..bf33cf5366ef 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -1897,6 +1897,19 @@ struct cfg80211_ttlm_params { u16 ulink[8]; }; =20 +/** + * struct cfg80211_sta_smd_params - SMD parameters for an added station + * + * @smd_sta: SMD-negotiated STA + * @smd_identifier: SMD Identifier + * @dl_data_fwd: MSDU forwarding supported + */ +struct cfg80211_sta_smd_params { + bool smd_sta; + u8 smd_identifier[ETH_ALEN]; + bool dl_data_fwd; +}; + /** * struct station_parameters - station parameters * @@ -1937,6 +1950,7 @@ struct cfg80211_ttlm_params { * @link_sta_params: link related params. * @epp_peer: EPP peer indication * @nmi_mac: MAC address of the NMI station of the NAN peer + * @smd_params: SMD params for this station */ struct station_parameters { struct net_device *vlan; @@ -1965,6 +1979,7 @@ struct station_parameters { struct link_station_parameters link_sta_params; bool epp_peer; const u8 *nmi_mac; + struct cfg80211_sta_smd_params smd_params; }; =20 /** diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 6b82ca07fbf0..d8f5e5d8a021 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -2727,6 +2727,7 @@ struct ieee80211_link_sta { * @nan_sched: NAN peer schedule for this station. Valid only for NMI stat= ions. * @ext_mld_capa_ops: the MLD's extended MLD capabilities and operations * NOTE: currently only tracked for AP STAs + * @smd_params: SMD parameters of the STA */ struct ieee80211_sta { u8 addr[ETH_ALEN] __aligned(2); @@ -2761,6 +2762,8 @@ struct ieee80211_sta { /* should only be accessed with the wiphy mutex held */ struct ieee80211_nan_peer_sched *nan_sched; =20 + struct cfg80211_sta_smd_params smd_params; + /* must be last */ u8 drv_priv[] __aligned(sizeof(void *)); }; diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index f5c8dbe5f26a..f1d8db31f17e 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -3191,6 +3191,17 @@ enum nl80211_commands { * %NL80211_EXT_FEATURE_SMD. * Used with %NL80211_CMD_START_AP. See &enum nl80211_smd_params_attrs. * + * @NL80211_ATTR_PEER_SMD_ENABLED: Flag indicating a peer STA has SMD enab= led. + * Used with %NL80211_CMD_NEW_STATION. + * + * @NL80211_ATTR_PEER_SMD_MAC_ADDR: Binary attribute with the 6-byte MAC + * address of the SMD-capable peer STA. + * Used with %NL80211_CMD_NEW_STATION. + * + * @NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING: Flag indicating the peer STA + * supports DL data forwarding within the SMD domain. + * Used with %NL80211_CMD_NEW_STATION. + * * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use @@ -3793,6 +3804,10 @@ enum nl80211_attrs { =20 NL80211_ATTR_SMD_PARAMS, =20 + NL80211_ATTR_PEER_SMD_ENABLED, + NL80211_ATTR_PEER_SMD_MAC_ADDR, + NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING, + /* add attributes here, update the policy in nl80211.c */ =20 __NL80211_ATTR_AFTER_LAST, @@ -3942,6 +3957,7 @@ enum nl80211_iftype { * that support %NL80211_FEATURE_FULL_AP_CLIENT_STATE to transition a * previously added station into associated state * @NL80211_STA_FLAG_SPP_AMSDU: station supports SPP A-MSDUs + * @NL80211_STA_FLAG_SMD: station has negotiated SMD. * @NL80211_STA_FLAG_MAX: highest station flag number currently defined * @__NL80211_STA_FLAG_AFTER_LAST: internal use */ @@ -3955,6 +3971,7 @@ enum nl80211_sta_flags { NL80211_STA_FLAG_TDLS_PEER, NL80211_STA_FLAG_ASSOCIATED, NL80211_STA_FLAG_SPP_AMSDU, + NL80211_STA_FLAG_SMD, =20 /* keep last */ __NL80211_STA_FLAG_AFTER_LAST, diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index b4b42790c5d7..138b67f4bda4 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2528,6 +2528,16 @@ static int sta_apply_parameters(struct ieee80211_loc= al *local, if (mask & BIT(NL80211_STA_FLAG_SPP_AMSDU)) sta->sta.spp_amsdu =3D set & BIT(NL80211_STA_FLAG_SPP_AMSDU); =20 + if (mask & BIT(NL80211_STA_FLAG_SMD)) { + if (set & BIT(NL80211_STA_FLAG_SMD)) + set_sta_flag(sta, WLAN_STA_SMD); + else if (test_sta_flag(sta, WLAN_STA_SMD)) + clear_sta_flag(sta, WLAN_STA_SMD); + } + + if (params->smd_params.smd_sta) + sta->sta.smd_params =3D params->smd_params; + /* mark TDLS channel switch support, if the AP allows it */ if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && !sdata->deflink.u.mgd.tdls_chan_switch_prohibited && diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c index ef75255d47d5..d7e7c9c578e4 100644 --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c @@ -78,6 +78,7 @@ static const char * const sta_flag_names[] =3D { FLAG(PS_DELIVER), FLAG(USES_ENCRYPTION), FLAG(DECAP_OFFLOAD), + FLAG(SMD), #undef FLAG }; =20 diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index ee0d32877c5b..506aeb241a6d 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h @@ -72,6 +72,7 @@ * @WLAN_STA_USES_ENCRYPTION: This station was configured for encryption, * so drop all packets without a key later. * @WLAN_STA_DECAP_OFFLOAD: This station uses rx decap offload + * @WLAN_STA_SMD: this station is associated to an SMD-ME. * * @NUM_WLAN_STA_FLAGS: number of defined flags */ @@ -104,6 +105,7 @@ enum ieee80211_sta_info_flags { WLAN_STA_PS_DELIVER, WLAN_STA_USES_ENCRYPTION, WLAN_STA_DECAP_OFFLOAD, + WLAN_STA_SMD, =20 NUM_WLAN_STA_FLAGS, }; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index aa7aa70a5b41..0d20c2ab3d5e 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1114,6 +1114,9 @@ static const struct nla_policy nl80211_policy[NUM_NL8= 0211_ATTR] =3D { [NL80211_ATTR_STA_DUMP_LINK_STATS] =3D { .type =3D NLA_FLAG }, [NL80211_ATTR_SMD_PARAMS] =3D NLA_POLICY_NESTED(nl80211_smd_params_policy), + [NL80211_ATTR_PEER_SMD_ENABLED] =3D { .type =3D NLA_FLAG }, + [NL80211_ATTR_PEER_SMD_MAC_ADDR] =3D NLA_POLICY_ETH_ADDR, + [NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING] =3D { .type =3D NLA_FLAG }, }; =20 /* policy for the key attributes */ @@ -7702,6 +7705,7 @@ static const struct nla_policy sta_flags_policy[NL802= 11_STA_FLAG_MAX + 1] =3D { [NL80211_STA_FLAG_MFP] =3D { .type =3D NLA_FLAG }, [NL80211_STA_FLAG_AUTHENTICATED] =3D { .type =3D NLA_FLAG }, [NL80211_STA_FLAG_TDLS_PEER] =3D { .type =3D NLA_FLAG }, + [NL80211_STA_FLAG_SMD] =3D { .type =3D NLA_FLAG }, }; =20 static int parse_station_flags(struct genl_info *info, @@ -7768,11 +7772,13 @@ static int parse_station_flags(struct genl_info *in= fo, switch (iftype) { case NL80211_IFTYPE_AP: case NL80211_IFTYPE_AP_VLAN: + params->sta_flags_mask =3D BIT(NL80211_STA_FLAG_SMD); + fallthrough; case NL80211_IFTYPE_P2P_GO: - params->sta_flags_mask =3D BIT(NL80211_STA_FLAG_AUTHORIZED) | - BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | - BIT(NL80211_STA_FLAG_WME) | - BIT(NL80211_STA_FLAG_MFP); + params->sta_flags_mask |=3D BIT(NL80211_STA_FLAG_AUTHORIZED) | + BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | + BIT(NL80211_STA_FLAG_WME) | + BIT(NL80211_STA_FLAG_MFP); break; case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_STATION: @@ -8913,7 +8919,7 @@ int cfg80211_check_station_change(struct wiphy *wiphy, return -EINVAL; =20 /* When you run into this, adjust the code below for the new flag */ - BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 8); + BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 9); =20 switch (statype) { case CFG80211_STA_MESH_PEER_KERNEL: @@ -9007,7 +9013,8 @@ int cfg80211_check_station_change(struct wiphy *wiphy, BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | BIT(NL80211_STA_FLAG_WME) | BIT(NL80211_STA_FLAG_MFP) | - BIT(NL80211_STA_FLAG_SPP_AMSDU))) + BIT(NL80211_STA_FLAG_SPP_AMSDU) | + BIT(NL80211_STA_FLAG_SMD))) return -EINVAL; =20 /* but authenticated/associated only if driver handles it */ @@ -9261,6 +9268,30 @@ static int nl80211_parse_sta_txpower_setting(struct = genl_info *info, return 0; } =20 +static int nl80211_set_station_smd(struct genl_info *info, + struct station_parameters *params) +{ + struct nlattr *smd_mac; + + params->smd_params.smd_sta =3D + !!info->attrs[NL80211_ATTR_PEER_SMD_ENABLED]; + + if (!params->smd_params.smd_sta) + return 0; + + smd_mac =3D info->attrs[NL80211_ATTR_PEER_SMD_MAC_ADDR]; + + if (!info->attrs[NL80211_ATTR_MLD_ADDR] || !smd_mac) + return -EINVAL; + + nla_memcpy(params->smd_params.smd_identifier, smd_mac, ETH_ALEN); + + params->smd_params.dl_data_fwd =3D + !!info->attrs[NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING]; + + return 0; +} + static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev =3D info->user_ptr[0]; @@ -9399,6 +9430,10 @@ static int nl80211_set_station(struct sk_buff *skb, = struct genl_info *info) if (err) return err; =20 + err =3D nl80211_set_station_smd(info, ¶ms); + if (err) + return err; + /* Include parameters for TDLS peer (will check later) */ err =3D nl80211_set_station_tdls(info, ¶ms); if (err) @@ -9627,6 +9662,10 @@ static int nl80211_new_station(struct sk_buff *skb, = struct genl_info *info) if (parse_station_flags(info, wdev->iftype, ¶ms)) return -EINVAL; =20 + err =3D nl80211_set_station_smd(info, ¶ms); + if (err) + return err; + /* HT/VHT requires QoS, but if we don't have that just ignore HT/VHT * as userspace might just pass through the capabilities from the IEs * directly, rather than enforcing this restriction and returning an @@ -9660,7 +9699,7 @@ static int nl80211_new_station(struct sk_buff *skb, s= truct genl_info *info) return -EINVAL; =20 /* When you run into this, adjust the code below for the new flag */ - BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 8); + BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 9); =20 switch (wdev->iftype) { case NL80211_IFTYPE_AP: --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3026550DB8 for ; Tue, 8 Sep 2026 17:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887429; cv=none; b=cP5QoaY7tKVNFR9vG3X4jJwBd8fwcttgy2tMYdBcFBCXFT2jSfUPH9DCRKcxFell7uS5M8PWajidknqByxRCHYNGbtodwNM+O0qiOHkS/87m1ena2mkVBX5NUyFLGG03FFbPxv7BUTp4k7oDHdgSsKitF/Z0oscGMOhO8rJVQ5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887429; c=relaxed/simple; bh=n6QZOZ4ipBg1ZD4KtCHhdn0h3EQTsWMtpUTn1ZHyNpw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=SflX6QxKmRbHslPzaJTk0oGGS4Z6rZ9rZu99qIxebqKNX0BKihl4MKKpKfFOUyoqMVBZoShNpBgetfwNkskmmSVAa3HpMVjdXlkYDVEqr0PZnjjRR/VDBh2o35dwtv3XtyvTSDK3x0cTY1gZyop6hhxTh4ESrUYWQgWrmXULRpI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=P14et4ST; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=c5ZSajN0; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="P14et4ST"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="c5ZSajN0" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdsbT2770700 for ; Tue, 8 Sep 2026 17:10:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 4cSKp76Wny+ccMBfbKuXS85MttxoIgTePwgcdN/NDrU=; b=P14et4STYhZg+RU/ kkrax5emSypPbcKPFH0rDmaMyJZRXBfoM3RSSWHDTH4iMbwHsQhDIZtaZVyNUtVC TZ/3nwE7x8GxJdfruiRx7tFSvWGS5QBTBcPc2zNTOydaicr82pdG6VJ/uMyJ30EF uRfnvgdx3socpHCBLYKP8wFNXy+jWNwe7OtaX/Pj6CPTHzx4S6Sdb/kLn0e1fRo4 5NFPEuKDGnGJmBPWtfwduUsPFMk203Z0YJqEOaCICIolmZEvdDKjakQteMPcb1Le 6eIKopTDbjOfirnfN5t0zSQO9yVKkRqaecgZpwIbxIxcjquIs0CNN1fDsGljeHM+ h2VhVw== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjjvuh946-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:26 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2db87f759c5so7823935ad.1 for ; Tue, 08 Sep 2026 10:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887426; x=1789492226; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=4cSKp76Wny+ccMBfbKuXS85MttxoIgTePwgcdN/NDrU=; b=c5ZSajN0Mh2Z+DnAuVpFhy+ylQswyS1SRYtKPLv+PiJRy1QQOfgpufuNvJUyYjmGyf 9+4eOCOM1mCGcPew9IdFIReRVExCOllHJPCggYE/MVz8Cz3buVOHBvOQE0nvNQpWd2/c RhLIzLcakrOdM295bNkYdNohUF33nyBNgmJxA7xRasZMA47tz+WRglagwdY1iZtHgx1q UNJg8sGB9Fw2LTGCNYc0RymGtWWveldmPeu8bSZoOkqQ0SLCzVkbQ5BWa4euwz367QPH 8CwE/ONWwauSYqaEbgK7ACpVWHLSC8/+TUWX328svL+uvaNQplTKkqPSChUVBH4HUAEV 9v6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887426; x=1789492226; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4cSKp76Wny+ccMBfbKuXS85MttxoIgTePwgcdN/NDrU=; b=bC0bgLI45SyvT67aDbXoebIKAaxNyqZccRaAmJVd7t9Pelm/SXFb+8miQk2iN5ElP2 1Kj0hnIFzWCGpA/BDEIHgK6bCQV6bRU+u3Aa0znCxYi/R7VArl4AnlnRRbLypybVm4Fo 1aYa5bj/LdUIfV9di1GSGFowk+zA62MfPT3KNnKQA5JLjAKDNF/zXZM99HgknQOP38cI Sh80s9KSJ/duEn9CZn2CfxzGHzSfhdcpyQhDE0Huuy9RHLkFjoSCvHX3whdJkpXonDs2 YvpZ4yDaTOBQqkP2MhI883CsYMDXJcgM+4VUEHIrmKHgOGx/C5q6xOb8z/bkzLIwVwDr dROg== X-Gm-Message-State: AFuF++ncZ1rAD1XKmrM63RS9ryRVOiw9fDdkKKcECnX6ZDXtdyJjGwfu 4dIpGHsdoN+n6Y/M6DXDGgF3LCBp0MB4awjaV9aFYS8lSIep656K1G+kss1okY8Lq4T++m572Oh HmMVCmy+Vu5bMgwNvsIXbGEq25nJdskZHZHx7/tz/I8VDlNzGEa8kFv154pyhsos44Q== X-Gm-Gg: AYBFou1H/DjC3Rn0HREuW5funupYp70fGVlrasbb8YVz7IMBUyT3HjXgIWlYtMp0eVw jFTU7E4K6YIYl5N43un4iK/9hWHTGackBORcYeaDsuEUffqsTpM6gPVnO7lhnhreBi8KDZsL9O/ 8Ib0QNnnDsonEAj1HeFdqcTeiY2DQac8B+Cm2m9G8ud2JIRIz/toB/ooKfxtxoGQmQP6cjl5WXP s1rnI3HhxP2H5jCQ06G+k4oK0qegyAIY59XENcl/TmAdQS5GIYzXVTtWVbkhHEVdQdy5WHcKHgY HQYmC0lyy2lOlmU2JTJxxuw5LthmKpgACcAsJPDyaF8MGcz8rTes+GAm3t4mNU5KUQuFiOWYvIk iQeldIGYFabSTXHDHoRi31ny2XQZoRVqVJQnyxUZmcpgs5QnFXeAC+oWp/qJLrddGlsnJEmsZCV nJidoqhQJrpQc6g9sZv7lIBw== X-Received: by 2002:a17:90b:538b:b0:392:e5b1:d833 with SMTP id 98e67ed59e1d1-39b261d5148mr44232780a91.13.1788887425603; Tue, 08 Sep 2026 10:10:25 -0700 (PDT) X-Received: by 2002:a17:90b:538b:b0:392:e5b1:d833 with SMTP id 98e67ed59e1d1-39b261d5148mr44232726a91.13.1788887425070; Tue, 08 Sep 2026 10:10:25 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:24 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 06/18] wifi: nl80211/cfg80211: Indicate STA creation via SMD BSS Transition Date: Tue, 8 Sep 2026 22:39:34 +0530 Message-Id: <20260908-smd-v1-6-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: yWm8Err0f8PXKvWz9SvH8p2Dg-XAmEzx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXzXPPpjUrLaMV e4re5JSkwIPOpv6btqN4xJyslAPSArV4XZpriwRLoi0+ZdHVKYKU/liL10QzGpUkEQSafnnxnVk t6+2/lCKwEiNOlEQq1nyIyYQ0n10NGcU6OFf2fdYf359CpTYF1Gl1/vEqZTLDx66f22dKBT9CMj skTI5S71fQGsavR5oykN33rOBzj3/VhN8YsPqrZiJ7UdbktSSklTawUak8f1sdDg85eDS2MHyt0 xiXUKjtuAlZft9vzrAvHIlinmDpjZnppdXk18aBKPhWAgYvpa0ZowrLbVfNF0GsGCzkEoO2nm7P LWHU2aWkTsiagBq10MgBRNtddo3ukq1nWHulUgnDZxl4WX1RTOIGdPn/q8Q7q2Uo36ux4w7keV7 BHqE2zAENrbjjJadPv84DDTsE1s9yZIbt81ImGhyNZwxz82/S2H58At8Z36XGSfSKyaalpJI8Ri PCDhJtv6QWCRE4yCDJA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX6PUoH3fKbTAl i37CTa6B0gGQzUwwOWJ3KzYuzpCy2j2b+ph9HB+1CY0Q0ou1ZK7/FqegHJPIXCPhS8DLyXNpwt7 JytS84nrC4EhjioEJykQAMFZPru7uyY= X-Proofpoint-ORIG-GUID: yWm8Err0f8PXKvWz9SvH8p2Dg-XAmEzx X-Authority-Analysis: v=2.4 cv=X8hi7mTe c=1 sm=1 tr=0 ts=6aa04182 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=YW6yegcWvZZGXztGtDAA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 spamscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 impostorscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 From: Rohan Dutta When the peer STA is created via SMD BSS Transition Preparation on the target AP MLD, indicate that the STA is created as part of SMD procedure unlike STA creation using typical association. This indication helps the drivers and lower layers to prepare the STA for handling ST Execution and datapath switch once the ST procedure is completed. Signed-off-by: Rohan Dutta Signed-off-by: Pooventhiran G --- include/net/cfg80211.h | 2 ++ include/uapi/linux/nl80211.h | 7 +++++++ net/wireless/nl80211.c | 3 +++ 3 files changed, 12 insertions(+) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index bf33cf5366ef..75d0123fbb5d 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -1903,11 +1903,13 @@ struct cfg80211_ttlm_params { * @smd_sta: SMD-negotiated STA * @smd_identifier: SMD Identifier * @dl_data_fwd: MSDU forwarding supported + * @roam_sta: station was created via SMD BSS Transition procedure */ struct cfg80211_sta_smd_params { bool smd_sta; u8 smd_identifier[ETH_ALEN]; bool dl_data_fwd; + bool roam_sta; }; =20 /** diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index f1d8db31f17e..5e474fda2a49 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -3202,6 +3202,11 @@ enum nl80211_commands { * supports DL data forwarding within the SMD domain. * Used with %NL80211_CMD_NEW_STATION. * + * @NL80211_ATTR_SMD_ROAM_STA: Flag attribute indicating this station was + * created via SMD BSS Transition Preparation at the Target AP MLD (refer + * IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.6). + * This flag is carried in %NL80211_CMD_NEW_STATION. + * * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use @@ -3808,6 +3813,8 @@ enum nl80211_attrs { NL80211_ATTR_PEER_SMD_MAC_ADDR, NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING, =20 + NL80211_ATTR_SMD_ROAM_STA, + /* add attributes here, update the policy in nl80211.c */ =20 __NL80211_ATTR_AFTER_LAST, diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 0d20c2ab3d5e..7577eb31ff65 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1117,6 +1117,7 @@ static const struct nla_policy nl80211_policy[NUM_NL8= 0211_ATTR] =3D { [NL80211_ATTR_PEER_SMD_ENABLED] =3D { .type =3D NLA_FLAG }, [NL80211_ATTR_PEER_SMD_MAC_ADDR] =3D NLA_POLICY_ETH_ADDR, [NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING] =3D { .type =3D NLA_FLAG }, + [NL80211_ATTR_SMD_ROAM_STA] =3D { .type =3D NLA_FLAG }, }; =20 /* policy for the key attributes */ @@ -9289,6 +9290,8 @@ static int nl80211_set_station_smd(struct genl_info *= info, params->smd_params.dl_data_fwd =3D !!info->attrs[NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING]; =20 + params->smd_params.roam_sta =3D !!info->attrs[NL80211_ATTR_SMD_ROAM_STA]; + return 0; } =20 --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4854359650D for ; Tue, 8 Sep 2026 17:10:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887434; cv=none; b=OogUJQ7dBa2nv8iY5sk5uutluqjcwyn9HiQ1+vivZFeRHAol2X2mm0+NHLnLxLS0btvcQpr5NOnZbj32EADuCHqmeX12LaY/5xePVW+4zsh2fgskabOzJHHLlAsxcaGhr5JJt4MgFrjSdneOnNs+NeI/nCLxw//W9KPWwhCO6uc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887434; c=relaxed/simple; bh=XxXeGyH8LowR4EFnJMlxM2wbsxxbipviiWhjmsnKVcM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=OL9H8c5p8advarkmRAihoREUuqSftBnHOpskwNo2zJpSDuXGiLsyiC+WZHQFizOVnr1sLyOgHqQ50mnEP2l/4agQXOaBBZnhRN48gleyi9GmgpnNy1Se9U5zYL72YJ4NRVHEJGUeePVWl2sQ94fUSmrS2//Z5+jEPg/bqzSqXbE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=bcGV4iSh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ewiXhf1X; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="bcGV4iSh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ewiXhf1X" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdYhF3757049 for ; Tue, 8 Sep 2026 17:10:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= C4KjAE1JwpT6DGpnh/CZZfax3IJ/HuYkECxZMwDBCSw=; b=bcGV4iShr1WjK6WU k+FPPVCh5GtbwDvxe1TVs+NZd4wXStEB+u1NnGQQq3qDjqD4/kJr9fteRDpohbeg 3itsGYEIMFRlv4s7C9rsPZYCMN0S9wwCPd7Aq2CJLWBgOsr69ocDxFBQ6jgtRKgl CEDScjEXNTfPuHRcybvWm7QD7GUlgmIHTDcf0b4cCVeuxKfkoMp0//a4NTS99x9r SuM6ZMIRhD1ad8vcJKSq8jWUr4rNId003e7fu8KwuXiyi+MrZiAvDX4pHn6H9hLa 92vrbd9P9/ywhb7ZrjJx4eqgmF4IS7sZfNiLn4xdVdB2NhlhojErOzaz45ao3d0B +AXVXg== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcv7jy2q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:30 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3965ba1ba3eso5896812a91.2 for ; Tue, 08 Sep 2026 10:10:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887430; x=1789492230; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=C4KjAE1JwpT6DGpnh/CZZfax3IJ/HuYkECxZMwDBCSw=; b=ewiXhf1XsDC+dlUHhlrs9tN6fcY7SVB7754HpIiV1d2cnnD/Fr1bb6puCZ/zVSEE2q b3PORGac+UhdhpEj+loTFnawut/LYG0KfzMDe0tIf31bGzj5mPygz6vuX+mgRYYKfXkH GotR9YmuBBgml4UGevQ4Yy7Op8vnhp482GF/63dPx1GICWwOzK3GeU+sC1HIx66OjkCQ 96jMc088qRZ9LxsG0RPgIgh6hKgUl0NlAuevbx/YVgeQtXJrSM6cdStJik+cy4IAczBf KWw+wBoPsBBRZuYH32vb9nx1HTJXT7o34nyJ2yCmGHyWxr9wtyq+nc8rsyRJf30cd7l6 zC5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887430; x=1789492230; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=C4KjAE1JwpT6DGpnh/CZZfax3IJ/HuYkECxZMwDBCSw=; b=P+MFL41fhu+Qd4XmxK77F+kR0/ek0uaTsm0KyOd65MeOmng7F4utPaif81pivGLQ7F JzCGkla0cldeyU2yUzssYvIht/mpkB7YIEpLN8NnmW9DDYcDEmbhBJ9EaSvwlPcDZJYY 8hOxFhVLTdxLBCVaZ+QNc8Ult6TqSHFFi8oADD0aEj15KnKbJPgHWp03Sjuny3+Gz+Wq y1uqPB9rH18gBxn4GehnR8MX8y2fMI+uesCGR4ivezAm/zFDahtr4SetBLw78SIaq2CB brmJ9VpxnldmJCqUMPFtNc+m4OCykTkNI47v7wkPWBm+m2hfej3YZdT/Dp7il9VRXsnL Z+lA== X-Gm-Message-State: AFuF++lgzSBVlP4uKy8yiilcXcfxYBNl9worDVSWKOr37OPuYSz4mAKq 8CH7NdqT3XHXAZKeYS38am8CN8qjZiIz5/0s3Cys6Gukw4SOXXZAfBqvAARmT4bUN63nizvOPw/ ZxFvfn2iuNSgmab3rP4A7f3eTk9pCwqxyOTL42TNWt5y8PVi0piLzqNYJ9B4Yj8R6xg== X-Gm-Gg: AYBFou0fpfPjUy8XHRiJ+hbyHwfe3iKtMcNnqSscNtmNvl1BsRks+FYtmdFkh5ESq+H Sr2kl4CfUtLcLK7cKXdZ4NaHgyMmXJyOdE4VMtqgyZbi0P9UTwBY22Iv0bFnRjTAPf0jo4nPXqN 1tpUfDPpWMbvjzAeDN32r0ddxWgeRhy56FWgWHmaCKOQT25IPnJxv17NQopF/pc0srLkvI2K9jI mVeT1RP97F9wGEBE/xxfEKJUKGf7+4NrY2Jg+gcOd4tAz53HUpMfQpZKMwtEXZK1WIpBOZc8h/i aUW+2BH9hEZPIAqQTihErOOM1lSn+Tba0tXe2/J/6PPEFB4c8KCiqMEKnMF6PfGNEUciAF0HSjE jaa6TYWU8g8GY/v99UflfO9a3We0ofI4lxDd/Fd+N/+DHVOftErAGYra4bm4QFWJlvgmnC2bFS+ uhyt2hrQHnG0UaEvMRDZIB0g== X-Received: by 2002:a17:90b:4c4e:b0:399:1b64:e0d7 with SMTP id 98e67ed59e1d1-39b262aaf32mr46577635a91.19.1788887429860; Tue, 08 Sep 2026 10:10:29 -0700 (PDT) X-Received: by 2002:a17:90b:4c4e:b0:399:1b64:e0d7 with SMTP id 98e67ed59e1d1-39b262aaf32mr46577563a91.19.1788887429279; Tue, 08 Sep 2026 10:10:29 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:28 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 07/18] wifi: nl80211/mac80211: Add SMD BSS Transition sub-state STA flags Date: Tue, 8 Sep 2026 22:39:35 +0530 Message-Id: <20260908-smd-v1-7-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CMEamxrD c=1 sm=1 tr=0 ts=6aa04187 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=olGzuFvk815fMYXliRYA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX2GfXookni710 KQAgzeADumhTJc1aukAnWE3B1LLwG24H/TXqFD01pL2fPgDat1JTRX3/own7FvlGG4S92knDqGO evqR0RfvnmG/zVlhe/qPV3eS/prbeaM= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX91CC5ulSzvJv PduCXxyHmHdmyLtCjX2qJ08fvwJ/CE7HY/k06LXALdLDDTCy3x76U6r74zC/8UWkxpopzxehH3D tcifM5yozRqZ/SyMSf31kr7+b+1pj+QgOb8vw5I3fsn9MchLEiM7MPCU5AWe/eR7XKyWgMK+eKR 3HyydMHKA3q9MghKJUP05OnTaING/duQGgP8NAw7JciCqERMQ50Ai0qY1519yvngfj5bKDNl/0I 27aRUz/yLFgc9AscWhShJ+8cbI2CHDR47v7BkBPLoRaRI9LcEH6g71wKbgyEAFqUKgIkOjJxhR2 8yaguqI8e626uElL53HLO1X6vg2wejBDC3HsgF9+IwcuCm3XW3GhWc0vzXkTflX/AnIBVP04J7b Mp9jDfb4srbivDwCFqlKm0/XsflORXgtLkPYb5h379210K29iBA95hzx/Fggn9UeXi9vZUOfL45 3uhXi0+yB0SCCJ2gVFg== X-Proofpoint-ORIG-GUID: KSlAp7HcjvPbir5jZ94U3smLbO_4d0sd X-Proofpoint-GUID: KSlAp7HcjvPbir5jZ94U3smLbO_4d0sd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 malwarescore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 IEEE P802.11bn/D2.0, Aug 2026, subclause 11.3.1, defines three new MLD state sub-states (4a, 4b, 4c) that apply when a non-AP MLD and its associated SMD-ME are in state 4 and an SMD BSS Transition is in progress. Add the corresponding nl80211 STA flags: NL80211_STA_FLAG_SMD_PREP_TARGET -- State 4a: target AP MLD prepared; Class 3 frames blocked except ST execution request/response. NL80211_STA_FLAG_SMD_EXEC_CURRENT -- State 4b: ST execution active on current AP MLD; UL Class 3 data blocked. NL80211_STA_FLAG_SMD_DL_DRAIN -- State 4c: DL draining period; only control frames and UHR Reconfiguration Notify permitted on current AP MLD. Add three internal station flags to track the 802.11bn SMD BSS Transition sub-states (4a/4b/4c) in mac80211: WLAN_STA_SMD_PREP_TARGET - State 4a WLAN_STA_SMD_EXEC_CURRENT - State 4b WLAN_STA_SMD_DL_DRAIN - State 4c These are transient sub-states of WLAN_STA_AUTHORIZED with the SMD-ME. The station remains authenticated, associated, and RSNA-established throughout; only the frame-filtering rules change. At most one of the three may be set at a time; mutual exclusion is enforced in sta_apply_smd_state_flags(). Signed-off-by: Pooventhiran G --- include/uapi/linux/nl80211.h | 10 ++++++++ net/mac80211/cfg.c | 60 ++++++++++++++++++++++++++++++++++++++++= ++++ net/mac80211/debugfs_sta.c | 3 +++ net/mac80211/sta_info.h | 8 ++++++ net/wireless/nl80211.c | 18 ++++++++++--- 5 files changed, 95 insertions(+), 4 deletions(-) diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 5e474fda2a49..65c7eefe9db5 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -3965,6 +3965,13 @@ enum nl80211_iftype { * previously added station into associated state * @NL80211_STA_FLAG_SPP_AMSDU: station supports SPP A-MSDUs * @NL80211_STA_FLAG_SMD: station has negotiated SMD. + * @NL80211_STA_FLAG_SMD_PREP_TARGET: station is prepared at SMD target AP= MLD + * (State 4a). Class 3 frames blocked except ST execution req/resp. + * @NL80211_STA_FLAG_SMD_EXEC_CURRENT: current AP MLD is executing SMD BSS + * Transition (State 4b). Uplink Class 3 data blocked after exec-req Tx. + * @NL80211_STA_FLAG_SMD_DL_DRAIN: current AP MLD is in DL draining period + * (State 4c). Both directions restricted; only control and UHR Reconf + * Notify frames are permitted. * @NL80211_STA_FLAG_MAX: highest station flag number currently defined * @__NL80211_STA_FLAG_AFTER_LAST: internal use */ @@ -3979,6 +3986,9 @@ enum nl80211_sta_flags { NL80211_STA_FLAG_ASSOCIATED, NL80211_STA_FLAG_SPP_AMSDU, NL80211_STA_FLAG_SMD, + NL80211_STA_FLAG_SMD_PREP_TARGET, + NL80211_STA_FLAG_SMD_EXEC_CURRENT, + NL80211_STA_FLAG_SMD_DL_DRAIN, =20 /* keep last */ __NL80211_STA_FLAG_AFTER_LAST, diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 138b67f4bda4..69b3ac0b48f3 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2452,6 +2452,55 @@ static int sta_link_apply_parameters(struct ieee8021= 1_local *local, return 0; } =20 +static int sta_apply_smd_state_flags(struct sta_info *sta, + u32 mask, u32 set) +{ + bool smd_prep_target, smd_exec_current, smd_dl_drain; + u32 expected_mask =3D BIT(NL80211_STA_FLAG_SMD_PREP_TARGET) | + BIT(NL80211_STA_FLAG_SMD_EXEC_CURRENT) | + BIT(NL80211_STA_FLAG_SMD_DL_DRAIN); + u32 smd_flags; + + if (!(mask & expected_mask)) + return 0; + + smd_flags =3D mask & expected_mask & set; + if (WARN_ON(hweight32(smd_flags) > 1)) + return -EINVAL; + + smd_prep_target =3D + !!(smd_flags & BIT(NL80211_STA_FLAG_SMD_PREP_TARGET)); + smd_exec_current =3D + !!(smd_flags & BIT(NL80211_STA_FLAG_SMD_EXEC_CURRENT)); + smd_dl_drain =3D + !!(smd_flags & BIT(NL80211_STA_FLAG_SMD_DL_DRAIN)); + + if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED) && + (smd_exec_current || smd_dl_drain)) + return -EINVAL; + + if (smd_prep_target) { + clear_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); + clear_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); + set_sta_flag(sta, WLAN_STA_SMD_PREP_TARGET); + } else if (smd_exec_current) { + clear_sta_flag(sta, WLAN_STA_SMD_PREP_TARGET); + clear_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); + set_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); + } else if (smd_dl_drain) { + clear_sta_flag(sta, WLAN_STA_SMD_PREP_TARGET); + clear_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); + set_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); + } else { + /* all flags revert back to none being set */ + clear_sta_flag(sta, WLAN_STA_SMD_PREP_TARGET); + clear_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); + clear_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); + } + + return 0; +} + static int sta_apply_parameters(struct ieee80211_local *local, struct sta_info *sta, struct station_parameters *params) @@ -2538,6 +2587,17 @@ static int sta_apply_parameters(struct ieee80211_loc= al *local, if (params->smd_params.smd_sta) sta->sta.smd_params =3D params->smd_params; =20 + /* + * SMD BSS Transition sub-states (IEEE P802.11bn/D2.0, Aug 2026, + * subclause 11.3.1). + * Only meaningful for SMD-capable stations (WLAN_STA_SMD set). + */ + if (test_sta_flag(sta, WLAN_STA_SMD)) { + ret =3D sta_apply_smd_state_flags(sta, mask, set); + if (ret) + return ret; + } + /* mark TDLS channel switch support, if the AP allows it */ if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && !sdata->deflink.u.mgd.tdls_chan_switch_prohibited && diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c index d7e7c9c578e4..24c985687bd2 100644 --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c @@ -79,6 +79,9 @@ static const char * const sta_flag_names[] =3D { FLAG(USES_ENCRYPTION), FLAG(DECAP_OFFLOAD), FLAG(SMD), + FLAG(SMD_PREP_TARGET), + FLAG(SMD_EXEC_CURRENT), + FLAG(SMD_DL_DRAIN), #undef FLAG }; =20 diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 506aeb241a6d..89137b18a862 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h @@ -73,6 +73,11 @@ * so drop all packets without a key later. * @WLAN_STA_DECAP_OFFLOAD: This station uses rx decap offload * @WLAN_STA_SMD: this station is associated to an SMD-ME. + * @WLAN_STA_SMD_PREP_TARGET: this SMD station is prepared at the target A= P MLD. + * @WLAN_STA_SMD_EXEC_CURRENT: this SMD station has started execution at + * the current AP MLD. + * @WLAN_STA_SMD_DL_DRAIN: this SMD station has started draining at + * the current AP MLD. * * @NUM_WLAN_STA_FLAGS: number of defined flags */ @@ -106,6 +111,9 @@ enum ieee80211_sta_info_flags { WLAN_STA_USES_ENCRYPTION, WLAN_STA_DECAP_OFFLOAD, WLAN_STA_SMD, + WLAN_STA_SMD_PREP_TARGET, + WLAN_STA_SMD_EXEC_CURRENT, + WLAN_STA_SMD_DL_DRAIN, =20 NUM_WLAN_STA_FLAGS, }; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 7577eb31ff65..282d3c82dce8 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -7707,6 +7707,9 @@ static const struct nla_policy sta_flags_policy[NL802= 11_STA_FLAG_MAX + 1] =3D { [NL80211_STA_FLAG_AUTHENTICATED] =3D { .type =3D NLA_FLAG }, [NL80211_STA_FLAG_TDLS_PEER] =3D { .type =3D NLA_FLAG }, [NL80211_STA_FLAG_SMD] =3D { .type =3D NLA_FLAG }, + [NL80211_STA_FLAG_SMD_PREP_TARGET] =3D { .type =3D NLA_FLAG }, + [NL80211_STA_FLAG_SMD_EXEC_CURRENT] =3D { .type =3D NLA_FLAG }, + [NL80211_STA_FLAG_SMD_DL_DRAIN] =3D { .type =3D NLA_FLAG }, }; =20 static int parse_station_flags(struct genl_info *info, @@ -7773,7 +7776,11 @@ static int parse_station_flags(struct genl_info *inf= o, switch (iftype) { case NL80211_IFTYPE_AP: case NL80211_IFTYPE_AP_VLAN: - params->sta_flags_mask =3D BIT(NL80211_STA_FLAG_SMD); + params->sta_flags_mask =3D + BIT(NL80211_STA_FLAG_SMD) | + BIT(NL80211_STA_FLAG_SMD_PREP_TARGET) | + BIT(NL80211_STA_FLAG_SMD_EXEC_CURRENT) | + BIT(NL80211_STA_FLAG_SMD_DL_DRAIN); fallthrough; case NL80211_IFTYPE_P2P_GO: params->sta_flags_mask |=3D BIT(NL80211_STA_FLAG_AUTHORIZED) | @@ -8920,7 +8927,7 @@ int cfg80211_check_station_change(struct wiphy *wiphy, return -EINVAL; =20 /* When you run into this, adjust the code below for the new flag */ - BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 9); + BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 12); =20 switch (statype) { case CFG80211_STA_MESH_PEER_KERNEL: @@ -9015,7 +9022,10 @@ int cfg80211_check_station_change(struct wiphy *wiph= y, BIT(NL80211_STA_FLAG_WME) | BIT(NL80211_STA_FLAG_MFP) | BIT(NL80211_STA_FLAG_SPP_AMSDU) | - BIT(NL80211_STA_FLAG_SMD))) + BIT(NL80211_STA_FLAG_SMD) | + BIT(NL80211_STA_FLAG_SMD_PREP_TARGET) | + BIT(NL80211_STA_FLAG_SMD_EXEC_CURRENT) | + BIT(NL80211_STA_FLAG_SMD_DL_DRAIN))) return -EINVAL; =20 /* but authenticated/associated only if driver handles it */ @@ -9702,7 +9712,7 @@ static int nl80211_new_station(struct sk_buff *skb, s= truct genl_info *info) return -EINVAL; =20 /* When you run into this, adjust the code below for the new flag */ - BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 9); + BUILD_BUG_ON(NL80211_STA_FLAG_MAX !=3D 12); =20 switch (wdev->iftype) { case NL80211_IFTYPE_AP: --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E946592218 for ; Tue, 8 Sep 2026 17:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887439; cv=none; b=tfk/r40FjyDzEhWXhPkXN2o/IFtCG/lWgsuWcOwGLV9Rh3XVr13AB0wqAvs+CusZ3OWsarqC/qJ8WclozSGRiw4EYzwga/e+/pMMYRmEKJpXVcAWTsQ/eiPTRcNAhZD37wKZw2anIxA+pqBSCyYlYStTB/B6Xs1c1n7GuKS7ATM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887439; c=relaxed/simple; bh=0W1QH4oNYlUdeirmNfFD+jmPU+kApot3zeq7C9nGrDE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=ZnSNhOlFP6QYFOqk6um1r1YHYJj6I+a9eUSqsKQIwgCGRmLbtkmlDq/JEONBVvhgi110LM47rUuk/qTpE7mNVL9dzvxS83xg4bNyjKsWIHPm9OkbUwaamWgfmclDeo+rxaNLt3yuSWMttj6H/dId7hrsgPxECElc66Y5U2rI6XM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=exxCjGAj; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jYU+80em; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="exxCjGAj"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jYU+80em" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdZ29045458 for ; Tue, 8 Sep 2026 17:10:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= afmJcrxX+TSrqMPN9T48TbSokMooP/JVAehCZMO0dOc=; b=exxCjGAjKeOc0l+4 vjJp8a/qwoXOwO0uwLxyIKlX1DncXm4hgkl5C6QyaIxX/vIO2gcV21tioPQFxxaB ps13iKKaubgG6WNfdv21bLGHwdmzODVd83GpojZGNSfMK3K3UmpEknC94G8lfvHV pRVb0OZAtr7/AE2b3kzI2jg5PhwoSBojX1K4cwahD2Zuutk64Od2cy1Bg2EEUpia p2HBdaq2QNZ97z7vm4WyJZTx1R2bc75bUrcuj3/Z3mwqpDB4QT74Rkjwnv6DLXlA zT0W8UkC74B0C5zjlqnwArH5Sd9VVpZnyqVLuXXZ8YJMMw/txykMmo7q4K4nsd6P HOpQSA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjg8xsy6e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:36 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cc1c18c775eso5851339a12.0 for ; Tue, 08 Sep 2026 10:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887436; x=1789492236; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=afmJcrxX+TSrqMPN9T48TbSokMooP/JVAehCZMO0dOc=; b=jYU+80emdVPFrC/ZBA1K7KD14ES+o4V6zepsBzoS9EvThSCQFUhtxyP0/sWHGhLMoh +XOBec4sJmahGyYj2h0PdJRA2mZ71Xgu+N9Ed/2HS/u9viyaZsqb60doadeMvzhhgzGZ tatANjD6duSnS4PeW6w48NK4hYKDAtwMaCl3k4L9XnYr88YSHrmC7q9QZeFhc0io9gGV w0wPZuOiU2Tl0S6edebX01veAyp+rH5G68nBgjp2JDqUqZrdrVlGgtaB+EjBbZMKLDgd dyCrutwW20tlKfGt2pYjMm0RXPMAzlzk2HAMwaTO5JQ5ffOlUsbyNadScXNzmwnq9Gp6 1Irg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887436; x=1789492236; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=afmJcrxX+TSrqMPN9T48TbSokMooP/JVAehCZMO0dOc=; b=UXmaFTCXe2jGKqkWueavvQLo1ljVIFA+pHvVXhHhR94H8V1prAdt03ZbKkA3VCqCTd Tauogv56JRxo/9aTfS7G8u2NYP1wQwY7sQ3XnwJqfxwAJE5PLFZsCpv8qvs+CbN+PHrR 1B0zXZd+XqTYO6wGMewUcPiMRMR1SzKwge2n6fMRBRS+vVIfbeg84Obz01NKxGrPqZ/U C81Nfq6f5Wg4bANA6kVyj0ayNtswJ5iTUKLMUbKgVd7Stie1QN13u4zNHugn0ovd8LAS CKh7b/09W/tEr+DI/UreDJsf0BSTz12dHovg4yxhx1bXJfcI1pfeFZ/NZbSELEseHNzC gU/A== X-Gm-Message-State: AFuF++nUQGHirNteHaC+mea1WVXaHP2/3Klpe/PPb170IVRUQykHSZdE C+lLD9t1CNbIiCOqdSCBNwslkc5fT5ROPJ18ussuFdTacWTB5Ix2hru6phB7djKxXdSriFyvbi1 qR4p/wyfk5juUZJgjDHVdRnCgKB7mA/0ELjUw2olFd6O2C2uqwRocjPjxK7kChe+5ddx+XVbx7Q == X-Gm-Gg: AYBFou0ST+m7fW2GhIbp0LVPLvEDE1/aqpHuZ7N6GBOxHeABS7ib+fd5BBmmdBk5TBJ haAqiyB2m4y+Y/UZsvDUAscnhcn624QBrJKYgnScaUmHMFjwyyc9GFsT6LcoMj1hVs3e201M3KE LIq8/M0aWBRKLdCfENm0zKdIMdmZIidUshSqNO+9ri7ZLdStsndQOs1iaAJNPRCV9znYWxk4F8G kju34FgWxkvnpta1FNrpLdEa/aH3WkTE8aIRkZApa55UDw6leKGhE2dVyAqK7b0g9KKjUKMjMsk 5KfvvNfhpXd4PgQV8qfWh/cwvelERw/HaDO1dIcVuuaC+s4dyArokD7UQQyH7jcaLcz+WL+cBaF ftRzhNQ3Ca0z59gyOMJ9jiB+NZsZgCBA9/9t1t99shBkzs59unss009pjiSBcyznPzv87wqN+hM 5+lZ2b5R3rYIceJEqoU7lU0Q== X-Received: by 2002:a05:6300:6406:b0:3da:b8e7:fb18 with SMTP id adf61e73a8af0-3dab8e7fc1amr1119194637.26.1788887435411; Tue, 08 Sep 2026 10:10:35 -0700 (PDT) X-Received: by 2002:a05:6300:6406:b0:3da:b8e7:fb18 with SMTP id adf61e73a8af0-3dab8e7fc1amr1119167637.26.1788887434893; Tue, 08 Sep 2026 10:10:34 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:32 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 08/18] wifi: mac80211: Add driver_op for SMD substate changes Date: Tue, 8 Sep 2026 22:39:36 +0530 Message-Id: <20260908-smd-v1-8-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=J7GaKgnS c=1 sm=1 tr=0 ts=6aa0418c cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=uScroKfZLg1nAwDi7sIA:9 a=QEXdDO2ut3YA:10 a=O8hF6Hzn-FEA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: o7Xm_RGs2-uQDAKs0NvyUOYicvGdbmmA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXxv7BsGVCz302 IMEyTumIPyOzzrWwpOQaPbEmTTMOLSepjt1oRpEYyATgkPvuh8Yr44siyUfnR9PVuWqHAlUdbu0 nBYVFta/PuASmI8ObSWvBoOS08i8+97dVzRuO8fXPOJBxX/4iS4lUSRWyYhSjirveAcasdxqRef mkJ44l3Y1jDn/rn7OMOe4UBhn7Pkca1XuaA8ebiRWQYkm8UyBWX0PJkUdwqynl19be+GVqu4XJA rjj9eOwSjrKlTTvpmvBAX7SJaD4wnbibLyw1mcyGfxZUgKt5OqCUNA6ybT8o3JQAtW9HzMnkSia kVhR/olZA07w2VqmEH8TUj9lHygZtr40ljwlTBl8zNwGRfNedh7zv35aYLx5gsbozX8OYXxckR3 8tFve085xanaJwCvwm3aVEWpFYsTMAQiTNME7zt4D85DlgL/vxXbhDTT1BHlWPLqLEQfr6mENy+ KLbfwqlFmmE+xGKJ/sQ== X-Proofpoint-GUID: o7Xm_RGs2-uQDAKs0NvyUOYicvGdbmmA X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX7Z1lEKyk4oDK LAS7Q/o5SwKZ7MM4ZT8GHnVI3eW5SgIDUFrVIa9KJ3rAhWff8u5Um/loe6/jaFceQNAqE/W1isI 5FqcllRPS9/iWdIvnYdO1Bfx7iBjHn4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 During SMD BSS Transition, a non-AP MLD cycles through sub-states 4a, 4b, and 4c that impose different frame-filtering rules on the AP MLD. mac80211 tracks these sub-states in STA flags but has no mechanism to propagate the transitions to the driver, so hardware-level queue gating and frame-filtering cannot follow the SMD state machine. Add a new driver op that mac80211 calls on each sub-state transition. This lets drivers perform the necessary hardware queue and filtering adjustments at each phase of the SMD BSS Transition. Valid transition order: NONE -> PREP (ST preparation completed at the target AP MLD) NONE -> EXEC (ST execution in progress at the current AP MLD) EXEC -> DRAIN (DL drain period started at the current AP MLD) Suggested-by: Rohan Dutta Signed-off-by: Pooventhiran G --- include/net/mac80211.h | 26 +++++++++ net/mac80211/cfg.c | 59 ++++++++++++++----- net/mac80211/driver-ops.c | 24 ++++++++ net/mac80211/driver-ops.h | 6 ++ net/mac80211/sta_info.c | 140 ++++++++++++++++++++++++++++++++++++++++++= ++++ net/mac80211/sta_info.h | 9 +++ net/mac80211/trace.h | 33 +++++++++++ 7 files changed, 284 insertions(+), 13 deletions(-) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d8f5e5d8a021..9b5fa6d6281b 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -4077,6 +4077,24 @@ struct ieee80211_prep_tx_info { int link_id; }; =20 +/** + * enum ieee80211_sta_smd_state - SMD BSS Transition sub-state + * + * Tracks the 802.11bn SMD BSS Transition sub-state (IEEE P802.11bn/D2.0, + * Aug 2026, subclause 11.3.1) for a specific (non-AP MLD, AP MLD) associa= tion. + * + * @IEEE80211_STA_SMD_NONE: Plain State 4. No sub-state active. + * @IEEE80211_STA_SMD_PREP: State 4a. STA prepared at the target AP MLD + * @IEEE80211_STA_SMD_EXEC: State 4b. ST execution active at the current = AP MLD + * @IEEE80211_STA_SMD_DRAIN: State 4c. DL draining period at the current A= P MLD + */ +enum ieee80211_sta_smd_state { + IEEE80211_STA_SMD_NONE, + IEEE80211_STA_SMD_PREP, + IEEE80211_STA_SMD_EXEC, + IEEE80211_STA_SMD_DRAIN, +}; + /** * struct ieee80211_ops - callbacks from mac80211 to the driver * @@ -4743,6 +4761,9 @@ struct ieee80211_prep_tx_info { * @set_eml_op_mode: Configure eMLSR/eMLMR operation mode in the underlay * driver according to the parameter received in the EML Operating mode * notification frame. + * @sta_smd_state: Notifies low level driver about IEEE 802.11bn SMD subst= ate + * transition of a station. It must not fail while transitioning down. + * The callback can sleep. */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, @@ -5144,6 +5165,11 @@ struct ieee80211_ops { struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct ieee80211_eml_params *eml_params); + int (*sta_smd_state)(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, + struct ieee80211_sta *sta, + enum ieee80211_sta_smd_state old_state, + enum ieee80211_sta_smd_state new_state); }; =20 /** diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 69b3ac0b48f3..0ea8b610a771 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2459,7 +2459,9 @@ static int sta_apply_smd_state_flags(struct sta_info = *sta, u32 expected_mask =3D BIT(NL80211_STA_FLAG_SMD_PREP_TARGET) | BIT(NL80211_STA_FLAG_SMD_EXEC_CURRENT) | BIT(NL80211_STA_FLAG_SMD_DL_DRAIN); + enum ieee80211_sta_smd_state new_ss; u32 smd_flags; + int err; =20 if (!(mask & expected_mask)) return 0; @@ -2479,6 +2481,22 @@ static int sta_apply_smd_state_flags(struct sta_info= *sta, (smd_exec_current || smd_dl_drain)) return -EINVAL; =20 + if (smd_prep_target) + new_ss =3D IEEE80211_STA_SMD_PREP; + else if (smd_exec_current) + new_ss =3D IEEE80211_STA_SMD_EXEC; + else if (smd_dl_drain) + new_ss =3D IEEE80211_STA_SMD_DRAIN; + else + new_ss =3D IEEE80211_STA_SMD_NONE; + + if (new_ss =3D=3D sta->smd_state) + return 0; + + err =3D sta_info_move_smd_state(sta, new_ss, true); + if (err) + return err; + if (smd_prep_target) { clear_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); clear_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); @@ -2578,26 +2596,17 @@ static int sta_apply_parameters(struct ieee80211_lo= cal *local, sta->sta.spp_amsdu =3D set & BIT(NL80211_STA_FLAG_SPP_AMSDU); =20 if (mask & BIT(NL80211_STA_FLAG_SMD)) { - if (set & BIT(NL80211_STA_FLAG_SMD)) + if (set & BIT(NL80211_STA_FLAG_SMD)) { set_sta_flag(sta, WLAN_STA_SMD); - else if (test_sta_flag(sta, WLAN_STA_SMD)) + } else if (test_sta_flag(sta, WLAN_STA_SMD)) { + sta_info_reset_smd_state(sta, true); clear_sta_flag(sta, WLAN_STA_SMD); + } } =20 if (params->smd_params.smd_sta) sta->sta.smd_params =3D params->smd_params; =20 - /* - * SMD BSS Transition sub-states (IEEE P802.11bn/D2.0, Aug 2026, - * subclause 11.3.1). - * Only meaningful for SMD-capable stations (WLAN_STA_SMD set). - */ - if (test_sta_flag(sta, WLAN_STA_SMD)) { - ret =3D sta_apply_smd_state_flags(sta, mask, set); - if (ret) - return ret; - } - /* mark TDLS channel switch support, if the AP allows it */ if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && !sdata->deflink.u.mgd.tdls_chan_switch_prohibited && @@ -2699,6 +2708,17 @@ static int sta_apply_parameters(struct ieee80211_loc= al *local, return ret; } =20 + /* + * SMD BSS Transition sub-states (IEEE P802.11bn/D2.0, Aug 2026, + * subclause 11.3.1). + * Only meaningful for SMD-capable stations (WLAN_STA_SMD set). + */ + if (test_sta_flag(sta, WLAN_STA_SMD)) { + ret =3D sta_apply_smd_state_flags(sta, mask, set); + if (ret) + return ret; + } + /* Mark the STA as MLO if MLD MAC address is available */ if (params->link_sta_params.mld_mac) sta->sta.mlo =3D true; @@ -2783,6 +2803,19 @@ static int ieee80211_add_station(struct wiphy *wiphy= , struct wireless_dev *wdev, */ if (!err && sdata->vif.type =3D=3D NL80211_IFTYPE_NAN_DATA) ieee80211_nan_update_ndi_carrier(sta->sdata); + + /* + * SMD sub-state was set in sta_apply_parameters() before the station + * was inserted so drv_sta_smd_state() was skipped (WLAN_STA_INSERTED + * was not yet set). Walk the driver step-by-step to the target state. + */ + if (!err && test_sta_flag(sta, WLAN_STA_SMD) && + sta->smd_state !=3D IEEE80211_STA_SMD_NONE) { + err =3D sta_info_move_drv_smd_state(sta); + if (err) + WARN_ON(__sta_info_destroy(sta)); + } + return err; } =20 diff --git a/net/mac80211/driver-ops.c b/net/mac80211/driver-ops.c index 49753b73aba2..d77a5a80f06e 100644 --- a/net/mac80211/driver-ops.c +++ b/net/mac80211/driver-ops.c @@ -633,3 +633,27 @@ int drv_change_sta_links(struct ieee80211_local *local, =20 return 0; } + +int drv_sta_smd_state(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + enum ieee80211_sta_smd_state old_state, + enum ieee80211_sta_smd_state new_state) +{ + int ret =3D 0; + + might_sleep(); + lockdep_assert_wiphy(local->hw.wiphy); + + sdata =3D get_bss_sdata(sdata); + if (!check_sdata_in_driver(sdata)) + return -EIO; + + trace_drv_sta_smd_state(local, sdata, sta, old_state, new_state); + if (local->ops->sta_smd_state) + ret =3D local->ops->sta_smd_state(&local->hw, &sdata->vif, + sta, old_state, new_state); + trace_drv_return_int(local, ret); + + return ret; +} diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index f1c0b87fddd5..ce11a723ec36 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -1814,4 +1814,10 @@ drv_nan_peer_sched_changed(struct ieee80211_local *l= ocal, return ret; } =20 +int drv_sta_smd_state(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + enum ieee80211_sta_smd_state old_state, + enum ieee80211_sta_smd_state new_state); + #endif /* __MAC80211_DRIVER_OPS */ diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index fdf00cbf49d8..5aa6f5b481e3 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -701,6 +701,7 @@ __sta_info_alloc(struct ieee80211_sub_if_data *sdata, ieee80211_init_frag_cache(&sta->frags); =20 sta->sta_state =3D IEEE80211_STA_NONE; + sta->smd_state =3D IEEE80211_STA_SMD_NONE; =20 if (sdata->vif.type =3D=3D NL80211_IFTYPE_MESH_POINT) sta->amsdu_mesh_control =3D -1; @@ -1527,6 +1528,20 @@ static int _sta_info_move_state(struct sta_info *sta, WARN_ONCE(err, "Driver is not allowed to fail if the sta_state is transitioning down= the list: %d\n", err); + + /* revert SMD states if STA has transitioned down */ + if (new_state =3D=3D IEEE80211_STA_AUTH && + sta->sta_state =3D=3D IEEE80211_STA_ASSOC) { + if (test_sta_flag(sta, WLAN_STA_SMD) && + sta->smd_state =3D=3D IEEE80211_STA_SMD_PREP) + sta_info_reset_smd_state(sta, true); + } else if (new_state =3D=3D IEEE80211_STA_ASSOC && + sta->sta_state =3D=3D IEEE80211_STA_AUTHORIZED) { + if (test_sta_flag(sta, WLAN_STA_SMD) && + sta->smd_state !=3D IEEE80211_STA_SMD_NONE && + sta->smd_state !=3D IEEE80211_STA_SMD_PREP) + sta_info_reset_smd_state(sta, true); + } } =20 sta->sta_state =3D new_state; @@ -3883,3 +3898,128 @@ bool ieee80211_link_sta_update_rc_bw(struct ieee802= 11_link_data *link, =20 return true; } + +int sta_info_move_smd_state(struct sta_info *sta, + enum ieee80211_sta_smd_state new_ss, + bool notify) +{ + enum ieee80211_sta_smd_state old_ss =3D sta->smd_state; + struct ieee80211_local *local =3D sta->local; + bool notify_driver; + int err; + + might_sleep(); + + if (old_ss =3D=3D new_ss) + return 0; + + switch (new_ss) { + case IEEE80211_STA_SMD_NONE: + if (old_ss !=3D IEEE80211_STA_SMD_PREP && + old_ss !=3D IEEE80211_STA_SMD_EXEC && + old_ss !=3D IEEE80211_STA_SMD_DRAIN) + return -EINVAL; + break; + case IEEE80211_STA_SMD_EXEC: + if (old_ss !=3D IEEE80211_STA_SMD_NONE) + return -EINVAL; + break; + case IEEE80211_STA_SMD_DRAIN: + if (old_ss !=3D IEEE80211_STA_SMD_EXEC) + return -EINVAL; + break; + case IEEE80211_STA_SMD_PREP: + if (old_ss !=3D IEEE80211_STA_SMD_NONE) + return -EINVAL; + break; + default: + sdata_err(sta->sdata, "invalid smd state %d", new_ss); + return -EINVAL; + } + + sta_dbg(sta->sdata, "moving STA %pM SMD state %u -> %u\n", + sta->sta.addr, old_ss, new_ss); + + notify_driver =3D notify && test_sta_flag(sta, WLAN_STA_INSERTED); + + if (new_ss > old_ss && notify_driver) { + err =3D drv_sta_smd_state(local, sta->sdata, &sta->sta, old_ss, + new_ss); + if (err) + return err; + } + + if (new_ss < old_ss && notify_driver) { + err =3D drv_sta_smd_state(local, sta->sdata, &sta->sta, old_ss, + new_ss); + /* driver should not fail moving down SMD states */ + WARN_ONCE(err, + "Driver should not fail moving down SMD states: %d\n", + err); + } + + sta->smd_state =3D new_ss; + + return 0; +} + +void sta_info_reset_smd_state(struct sta_info *sta, bool notify) +{ + if (sta->smd_state =3D=3D IEEE80211_STA_SMD_NONE) + return; + + /* DRAIN -> NONE, EXEC -> NONE or PREP -> NONE */ + WARN_ON_ONCE(sta_info_move_smd_state(sta, IEEE80211_STA_SMD_NONE, + notify)); + + clear_sta_flag(sta, WLAN_STA_SMD_PREP_TARGET); + clear_sta_flag(sta, WLAN_STA_SMD_EXEC_CURRENT); + clear_sta_flag(sta, WLAN_STA_SMD_DL_DRAIN); +} + +int sta_info_move_drv_smd_state(struct sta_info *sta) +{ + enum ieee80211_sta_smd_state new_ss =3D sta->smd_state; + struct ieee80211_local *local =3D sta->local; + int err =3D 0; + + if (!test_sta_flag(sta, WLAN_STA_INSERTED)) + return 0; + + switch (new_ss) { + case IEEE80211_STA_SMD_PREP: + err =3D drv_sta_smd_state(local, sta->sdata, &sta->sta, + IEEE80211_STA_SMD_NONE, + IEEE80211_STA_SMD_PREP); + if (err) + goto rollback; + break; + case IEEE80211_STA_SMD_EXEC: + case IEEE80211_STA_SMD_DRAIN: + err =3D drv_sta_smd_state(local, sta->sdata, &sta->sta, + IEEE80211_STA_SMD_NONE, + IEEE80211_STA_SMD_EXEC); + if (err) + goto rollback; + + if (new_ss =3D=3D IEEE80211_STA_SMD_DRAIN) + err =3D drv_sta_smd_state(local, sta->sdata, &sta->sta, + IEEE80211_STA_SMD_EXEC, + IEEE80211_STA_SMD_DRAIN); + break; + default: + return -EINVAL; + } + + if (!err) + return 0; + + /* if EXEC -> DRAIN failed in the driver, notify EXEC -> NONE */ + WARN_ON_ONCE(drv_sta_smd_state(local, sta->sdata, &sta->sta, + IEEE80211_STA_SMD_EXEC, + IEEE80211_STA_SMD_NONE)); + +rollback: + sta_info_reset_smd_state(sta, false); + return err; +} diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 89137b18a862..bdc021675727 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h @@ -721,6 +721,7 @@ struct ieee80211_sta_removed_link_stats { * would be assigned to link[link_id] where link_id is the id assigned * by the AP. * @rem_link_stats: accumulated removed link stats + * @smd_state: Sub-state for STAs in SMD BSS Transition */ struct sta_info { /* General information, mostly static */ @@ -797,6 +798,8 @@ struct sta_info { struct link_sta_info __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS]; struct ieee80211_sta_removed_link_stats rem_link_stats; =20 + enum ieee80211_sta_smd_state smd_state; + /* keep last! */ struct ieee80211_sta sta; }; @@ -1169,4 +1172,10 @@ static inline u32 sta_stats_encode_rate(struct ieee8= 0211_rx_status *s) return r; } =20 +int sta_info_move_smd_state(struct sta_info *sta, + enum ieee80211_sta_smd_state new_ss, + bool notify); +void sta_info_reset_smd_state(struct sta_info *sta, bool notify); +int sta_info_move_drv_smd_state(struct sta_info *sta); + #endif /* STA_INFO_H */ diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h index 562a4964afa3..294a8a44a125 100644 --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h @@ -3403,6 +3403,39 @@ TRACE_EVENT(drv_nan_peer_sched_changed, ) ); =20 +TRACE_EVENT(drv_sta_smd_state, + TP_PROTO(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + enum ieee80211_sta_smd_state old_state, + enum ieee80211_sta_smd_state new_state), + + TP_ARGS(local, sdata, sta, old_state, new_state), + + TP_STRUCT__entry( + LOCAL_ENTRY + VIF_ENTRY + STA_ENTRY + __field(u32, old_state) + __field(u32, new_state) + ), + + TP_fast_assign( + LOCAL_ASSIGN; + VIF_ASSIGN; + STA_ASSIGN; + __entry->old_state =3D old_state; + __entry->new_state =3D new_state; + ), + + TP_printk( + LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT + " smd_state: %d->%d", + LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, + __entry->old_state, __entry->new_state + ) +); + #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ =20 #undef TRACE_INCLUDE_PATH --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8347B598C10 for ; Tue, 8 Sep 2026 17:10:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887446; cv=none; b=iUawyX3P5opU4U82cinzlcZQVUiR/jcEm+XofeRf27q92uNueWTKjVuUrwwlEOXlBP5J7BxRDaedDLQeEATDz527MlnuDcb/q44jwl567SRMSKHM7v9YdOLwy50bRSQTZ8Hi8HUZxySOrSuC0Dmf77w/Z/ENixHNUVXL5XVIRog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887446; c=relaxed/simple; bh=86w9hu+WJ1z3hy9Or+mlRGtKjgaxVht0KJsSe0k3fEg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=VHovQn4Q537q+gVlVmFTBVfFE7IHwKKuun56cgU46H7Df5yLGyB2WBl9vl5MdyKJ7Y+EXQ2iopsXgFBb3ZKHYhwO6uSWZJSUnvpk01n9oOF6dcth3YldSMCUJXKkIHayZ7CQrA8eewQFrJjWezAnWpcL00IytOxCRvIcEl0M/vo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=lDmBDhD3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Ijg5W9PL; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="lDmBDhD3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Ijg5W9PL" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688Fe2lf3614066 for ; Tue, 8 Sep 2026 17:10:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= gofo4g5PMnVYPHJH99bL1SwGrtDr+P/qsI5BTGGqohw=; b=lDmBDhD3x1HVS0Ea WZzEzbmWoiNAAEd5vM2fLL603eQUaD4k1DVPUtcjwUgRn9afPjQZl1tZ4D90TXJm Q4JdEGhBaYqLy62kcdkUvlFNkuZP0Snhp6Fa3a8h54Qz26mpEKP/NLms28/XiOgk yEcHVcvu/veKn4/2KPYmNQgvMWc0iSvh/OfbhHlQwcoo8esRqah5F9QeekzlCqdi UmhK4aoGhf9vyzWg7JcPbPJXq8x/bfJV/q5UXtSgvypGxEH4j1lombyZIbTsyS3O f3n3ZmLvfp9UqnaPz+N4PlEmGt6c2V4Th6pXutIWwxL4CBGmfL79tWygPqvIAaH5 W50shQ== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjagukdvu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:42 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cc132709c76so6600774a12.3 for ; Tue, 08 Sep 2026 10:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887441; x=1789492241; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gofo4g5PMnVYPHJH99bL1SwGrtDr+P/qsI5BTGGqohw=; b=Ijg5W9PLW1LdS9M4s9DaQhIu+91t5XluqW24cLlsihLVVbT0YBkgTounCu1b7VROlF r5vxtwz7KLDbCOt7BTN1zY0XnV6UZgnQywKkgVOURw6Kiflr2uRPNgAMLYZ+vA1lj66c ZPMvODOL+txQ/XXvvvxIyKmRruuCua59o3w5a9JLYFHTWqBg50xW0nW6f4wC/Q3gpHmp OpUvVqAPOR5SvzxWN/5Z3Gswh2CNfhWtxsk0pQkb6bDaJUvX3SwBXWldlvWrs+6sHDGu 4zuTKazY0J5vZi9YbuWbZBZfOPYGcaUaAyvSGv6WV30kje2jbyBHQu136QpdUEwSaeOR RRsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887441; x=1789492241; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gofo4g5PMnVYPHJH99bL1SwGrtDr+P/qsI5BTGGqohw=; b=LkcDsvErqbaHgW9W4rhfxBXPzT0GW538vk9C2CItoTHftK/4aJITFkw4Z0yPownqIg +GkKlWCnoyrWF1NV5U/jSi5KlD+qzXSK4wB/bCuwv4+vw0LeDtBConYM1ksnucMWxnAB VfBKhRdCPqaR26JSmFjit+nXGc+TzXfULVcwGTQXFGJeC6EFrhsDZLr8BaC17V3GokZi AoWJe0xY5b2spXtm02BNC2u30AgFFx5LzOr4zuFpx5zrD37V7cNQ+TSuPEPZst8BisYl werxjk6DLSjXrpAed/puMr+rfxUeql2p684wfhXhGyKMxiqGgWxKxLJnho6L9R3Qk+2D q9Tw== X-Gm-Message-State: AFuF++nCqUqmJaIQPxrCTdVT+L/mUOGkf1BQW7j33bYt1AocYY93ZVnf wtLvZWUjPDUE0xWmuOyexg8l+31/xPv7jSdLp38sQtnduIKJCNnpMibWldWyC288tkcBh/d6v+Z 95GhVy/avU+CVbP8pVTcylcMnOV3Ki/gI1bt2l+Q7ABfXYQSu0df6C5FgjloPcmuhFQ== X-Gm-Gg: AYBFou2Mr0JcgkuYcV4qoxjdYUGJF6H2eTKzCOGKXWIqTTra0Njc1gPWAnHyIK6Rtgj j2ZyJ2z8d4mgL/laL22jW5pdXajYBkS0WDpD+sLclR476MkHkY0wx1gNTSC/kY9AowGkuUepOJH Krxs7iHlvWUL9qbuaLN9aOq5Ve9JeeD3lhoTXy0spdhMMLalAYW/DiCWK2gIJdIdiyGrBZX+pC5 J2Qt6zUZCw9RfGUJS6W0c8Re5MqSpys1m8pYaGjpfLi7eBRdcnYjZ27Rsf9qEt1dsZBezTEtmFS mnhVmmPOHOwVZIKbwBtBEr4zcKuwQYsRSGCw8nXP+Kb4osdoZ6ZPTjtAtPTZlx1UByeg2nJm7bD KQ6bADenT6SKEGhYdAOTZCObMaFatxn4X76s19bfYzY3LrZCRczlwhdEzwTUd8kNJgXRsmnQlQq yI04rb3yTuZba8GuMmHmj4Eg== X-Received: by 2002:a05:6a21:2983:b0:3cc:8f53:26c0 with SMTP id adf61e73a8af0-3da3a03ccf1mr51872770637.17.1788887441229; Tue, 08 Sep 2026 10:10:41 -0700 (PDT) X-Received: by 2002:a05:6a21:2983:b0:3cc:8f53:26c0 with SMTP id adf61e73a8af0-3da3a03ccf1mr51872684637.17.1788887440767; Tue, 08 Sep 2026 10:10:40 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:38 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 09/18] wifi: mac80211: Send BlockAck policy in AMPDU action Date: Tue, 8 Sep 2026 22:39:37 +0530 Message-Id: <20260908-smd-v1-9-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=TqLWQjXh c=1 sm=1 tr=0 ts=6aa04192 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=poGJry9enlaRV4ryzAsA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-GUID: 85p1Pt9xdIvR0VMy6n2khgxDILtOp8QQ X-Proofpoint-ORIG-GUID: 85p1Pt9xdIvR0VMy6n2khgxDILtOp8QQ X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXyZybeHCRmeIr xPsbckBrS541bfeHl3Bvg+jthAmKcs/DZJLRJ6HzGnho7q9MSGlREXHXrhWv4saORwPx88UcrYs Auqg5q1fbn6BgQL31AAodAKea65UJfU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXz9XMuDCBjqDw ubDh9kKQ3B89utWDPYccZ/a6ULSHade0d1GIVTYnKR8vHUPF8Ys3Kepy+q7n1ucTx0wcgRNyWKZ 8Ulhly9/7OZNdOaLmKDq1S5hSL07FkyfMZY7bPQU132S5ECxoGPi33ix7S3sxUL1J7TlFxpU6MR wUgqm0hw7adQtQSVEMvYB6pzEsvptqpFL4nN9YE3lvp0/gmSyhulvNtNZ/NY1eGOZ+JLr7upqO+ 75RmcSgQVRuBwITwixdCz/uz5OPjoajf2cKKU+YBGs7USZnNgjymgs7jEJ1Wl+nD2FCBymzrg5e s0/QK2WayIRmVCzZMMsZy5pAVHt+kefhKTRPMrnTTRNBcrlfOS/1yAAn5uh5RhdqSiYEFKJSxhW ijjy5QtWVKiRnyAYwzMqSspLN2b2d0UzY/W9yIxHuJpE/uOylcaAJMOszyU901hF4PZPc5NQJPk kBsO8C2OvmNAQqwmKYg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 bulkscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 malwarescore=0 clxscore=1015 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 While sending AMPDU action hints to wireless drivers, mac80211 does not currently send the BlockAck policy extracted from ADDBA frames. Send the BlockAck policy as well so that drivers have complete information about the negotiation. Policy is valid only for IEEE80211_AMPDU_RX_START. Signed-off-by: Pooventhiran G --- include/net/mac80211.h | 15 +++++++++++++++ net/mac80211/agg-rx.c | 1 + net/mac80211/trace.h | 8 +++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 9b5fa6d6281b..32b9b7cd1685 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -3964,6 +3964,19 @@ enum ieee80211_ampdu_mlme_action { #define IEEE80211_AMPDU_TX_START_IMMEDIATE 1 #define IEEE80211_AMPDU_TX_START_DELAY_ADDBA 2 =20 +/** + * enum ieee80211_ba_policy - BlockAck Policy + * + * @IEEE80211_BLOCKACK_DELAYED: Block ACK sent to the BAR sender in next T= XOP + * @IEEE80211_BLOCKACK_IMMEDIATE: Block ACK sent to the BAR sender immedia= tely + * + * This field is valid only for %IEEE80211_AMPDU_RX_START. + */ +enum ieee80211_ba_policy { + IEEE80211_BLOCKACK_DELAYED, + IEEE80211_BLOCKACK_IMMEDIATE, +}; + /** * struct ieee80211_ampdu_params - AMPDU action parameters * @@ -3976,6 +3989,7 @@ enum ieee80211_ampdu_mlme_action { * @buf_size: reorder buffer size (number of subframes). Valid only when = the * action is set to %IEEE80211_AMPDU_RX_START or * %IEEE80211_AMPDU_TX_OPERATIONAL + * @policy: BlockAck policy of type &enum ieee80211_ba_policy * @amsdu: indicates the peer's ability to receive A-MSDU within A-MPDU. * valid when the action is set to %IEEE80211_AMPDU_TX_OPERATIONAL * @timeout: BA session timeout. Valid only when the action is set to @@ -3987,6 +4001,7 @@ struct ieee80211_ampdu_params { u16 tid; u16 ssn; u16 buf_size; + enum ieee80211_ba_policy policy; bool amsdu; u16 timeout; }; diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 9629e00069a1..2d67fd883146 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c @@ -289,6 +289,7 @@ void __ieee80211_start_rx_ba_session(struct sta_info *s= ta, .amsdu =3D false, .timeout =3D timeout, .ssn =3D start_seq_num, + .policy =3D ba_policy, }; int i, ret =3D -EOPNOTSUPP; u16 status =3D WLAN_STATUS_REQUEST_DECLINED; diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h index 294a8a44a125..63838a6d5d07 100644 --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h @@ -116,6 +116,7 @@ __field(u16, ssn) \ __field(u16, buf_size) \ __field(bool, amsdu) \ + __field(u8, policy) \ __field(u16, timeout) \ __field(u16, action) #define AMPDU_ACTION_ASSIGN STA_NAMED_ASSIGN(params->sta); \ @@ -123,12 +124,13 @@ __entry->ssn =3D params->ssn; \ __entry->buf_size =3D params->buf_size; \ __entry->amsdu =3D params->amsdu; \ + __entry->policy =3D params->policy; \ __entry->timeout =3D params->timeout; \ __entry->action =3D params->action; -#define AMPDU_ACTION_PR_FMT STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsd= u %d, timeout %d action %d" +#define AMPDU_ACTION_PR_FMT STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsd= u %d, policy=3D%u, timeout %d action %d" #define AMPDU_ACTION_PR_ARG STA_PR_ARG, __entry->tid, __entry->ssn, \ - __entry->buf_size, __entry->amsdu, __entry->timeout, \ - __entry->action + __entry->buf_size, __entry->amsdu, __entry->policy, \ + __entry->timeout, __entry->action =20 /* * Tracing for driver callbacks. --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72BA6599A2D for ; Tue, 8 Sep 2026 17:10:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887452; cv=none; b=IJkYtTgTWXygc6HekM0GbC5OLmDD8Y5hk6LQGXl5/xyWGTGpmQOpNmFJ4ZtKMyNY/jhlUJtIzVAzUQ/HIdgXFUyAsylddwefXY07hCyM4+jqSCxi3Hn4pEJu2xrf+GjJ7FBug3HRAoxCDE6ghFUWUX7F1JlUD63HZPzMB6T+zHY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887452; c=relaxed/simple; bh=3BIpCqgDAnBGrfpL4IV/b7aNMrM2UPJt17dMZbUsoWw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=T9a5sr4xeSLM2b0f9kVKY25ubyhNqmvlHGiavNU/fMMF93CFF/5psmipYZTk+wJhU14rVxJW8OpHBZHCGW07s7NaXBsflxl7/fPz3EDu0LjSlYGJ/p6+0WA+VkoGk5RGCPNAMyJuzcMLk6ZcnA7JjViqdSD0vvCE3tlNFUY8VMA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=FZzDf2+M; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=U9VG5wlt; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="FZzDf2+M"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="U9VG5wlt" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdefL045837 for ; Tue, 8 Sep 2026 17:10:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= pCsImhyIeDGFUN5AVZ441p15WIFo4hf5osqfn8vGVMw=; b=FZzDf2+Mkj4lexQU NGozUUASGz2jh064UfgZBVctEF+VTN0nUFP6GaBP8u/kHY9L/MxxZpedIEWEHppN ucv6pL4GOYE49DDEKMwUUBPzw5ohSFRftvRFRGWhW1kfoyhh8rK7PNdOGuxyxKTq sPdxn7VazJ4R6gdV5nofk+sNoTfnMmGaB01ioiaYTbHZ/1wNJ3BBBsGCgSuOcZqg 91vIk3O3QKaUi7xdkooG4F00I7X4lNcUjTf2uAZ3W7eXYfLafABMqzTci7DQHsLW XEIVCdOvXSiBTjSVk496gbREZo9SPlFk1DlzZwKZ/sIjNp/7/3WZn9wSHW7/GdX2 u9/4aQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjg8xsy83-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:49 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e1118e4abso7720294a91.0 for ; Tue, 08 Sep 2026 10:10:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887448; x=1789492248; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=pCsImhyIeDGFUN5AVZ441p15WIFo4hf5osqfn8vGVMw=; b=U9VG5wltD9wsBhMpX6Qlg4m+cKU29CD1ve9ZKQDAWgaYUbxSTze5DStXCPGy5KZASp BrY2opdZWvnfrBQ/fHGODNVVO2rNHv67BrNiGoJ17m4QOU8hjjit/t+kQEvYTbjZObtZ e0Dczgp9IVq1sO35/bc17ytSBSRBWjxkbJkWAQ/a080g6X7AlS7qbBuSpX9lIMHGqo1J h4V0KNjBFUpmQ15VXosJzEXW/MUZAMA/D7J2Ryxx26XpA3CY4FOPorCbp8wlS63tSn7U XwoaaH2u+cm/2wL0fFXBrTJk9RWjR5qY1GaxYYVsK4XrgASA2MIuc0TOqKHd0NOYum5C fmlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887448; x=1789492248; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pCsImhyIeDGFUN5AVZ441p15WIFo4hf5osqfn8vGVMw=; b=sc87QsVm12rNjHeuRHEqpcSlRbxOyaiKNERM3RZwkS5nDlEbiVeYTUZ4OkiSyRBY1v 0lThv89olceChgcMEsN0iZos+fvdjcyhnl+xm8AmyFP++oX2IjvOWmvT7bzFoOssSFJA JecOlg3YXf7hA3GR8MgV0enGiIRnEiuW0pjuM9ZBf0h8QzWtBz+6M31Nf8fZlOJkC/I8 yBhDnuttjC/PXlAC1ZJrtEwOyKL7pc3uzZHQ1kXwZs8vsq8jfJC00d0Lc872uyeYUTud W2n8J/UGX+iZqsito05PWmfkrcDSF6NkPSJhVKW6ZPvThWrghvY8WOLrnwpejAEJTwYs Wpww== X-Gm-Message-State: AFuF++kFT6/uaPVR0h5yws21h6yrvDgGTuEnkIMNVMoE4BkwGCP0M46I +3pdjmVj4w1u9UF9UgYXl/bJUeUOVI3Mvb36kSY6sUt9yw/oMGhBW6lyRFFmsrlDudjMWlT7k/3 XDfyHWStBwi6RQbVWcxHVAfr/TDHuDS/7Z+PpupizyFi78NKTFjlS3DoBEGd1TXk8vw== X-Gm-Gg: AYBFou3J2tGipcZyyeRe1uasIa4iF5lHvYoSdpD7mw6Brca1yj3v9BS5S2RJvhxDc7D /gZqLlPFZ1B11Htj1++rn4e4HFAJ7HzoMUBip0T5ZjBPAOPCB0lcUaaBlqZ0s7GK/uglHKnFhf/ ywo7x8KYCEi77gxP+eb2pZiKK2N4cBW6zhL6wZcEeFOAGn0s+ycQjxeVNC2WXbq+/k6jknAxYZv s55CCSiKOR1SjMY/zcf7+bMip3CE170/xpTdo9ZQsxddYzbh6y3wXSI2p0MXmTHdg/uxC9P+pa/ OwMRvdvMSxzIYfdeXn8n4oNpd02W2WP8mWCYXxpLhSpcqkllVW/33+3YzK0tREksITc1aBH0atj TO2cGaJwZ/qkAz+eHxVHXQKoNdJui0iY9Aibhn9iTH6sL4gkSRfUIKhL8FYs4TV6GKMAaGofoOq kG/CFtUaFs9NPHW1g6zdphjg== X-Received: by 2002:a17:90b:264c:b0:36b:bec8:94c5 with SMTP id 98e67ed59e1d1-39b2612f7dbmr44616557a91.10.1788887447348; Tue, 08 Sep 2026 10:10:47 -0700 (PDT) X-Received: by 2002:a17:90b:264c:b0:36b:bec8:94c5 with SMTP id 98e67ed59e1d1-39b2612f7dbmr44616272a91.10.1788887445127; Tue, 08 Sep 2026 10:10:45 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:44 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 10/18] wifi: mac80211: Define SMD BSS Transition context for transport Date: Tue, 8 Sep 2026 22:39:38 +0530 Message-Id: <20260908-smd-v1-10-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=J7GaKgnS c=1 sm=1 tr=0 ts=6aa04199 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=J9-iD1ZZfo0dXw_rko0A:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: uc_oJ8sgtYZbbpAxkJo44QK66i8dO3S4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX+j4dbTiHpci/ sV+yLqrkbwWvl8HAw52pBQgmPtQJVtkQDfmFMYtf0in8d5ZZD85Ut6PJhGX0oQMfqZC2s6P4MNR /acBEXtWhhhGiizHqC+DiP/vFbKhVSHKTipz9RLr7cIR58pP8wI+nVksqhMd3BdLfWpwklkHTbT axQ/KTrsbMNVXmJzTbsxCbgZwmI2kmFmYQRxKBSuBVSRMeeJQINBeHiTOiacPovRUq3K8uRxLPq XAefn3+Uo5tDJ5ALccL4VtB0tDvjG+xdWxGDpOAZ/tLy6Rdo1/8OBGs8Pgaa11P/Wgu0QvPiAIP 0cxhZDDAK1C8PIxhUll/UItUBW6h9NtfUYjEy+gooTM4lufdlBxRkLkoKmVn6gz/cnP3g2Et0jj 2PlrncioKYxho3D4QpiQ99fYWjTx8M3iitOgNNSgxaapxmVI1KySL9eNUX18W2SG9qlPtvcx3Oa Ts/LeZN6gnvXLxupYsw== X-Proofpoint-GUID: uc_oJ8sgtYZbbpAxkJo44QK66i8dO3S4 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX3ZfZlvWRK8Io G6X5h99qSoUdC2nzd1O23G+6nV1jbKoPqBi1aiANVSrk+AsBAq62qu/rfHDpMj0JYTFfw2KvfH1 Qtw/VIrS7ifAfaNG44AM27gspAy8snk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.9, defines the context data to be transported during SMD BSS Transition (ST) laid out in subclause 37.16. The station's context data is attached to the ST Preparation or Execution management frame using SKB extensions so that userspace receives the context along with the relevant frame. Define the context data - per-TID sequence numbers in downlink (DL) and uplink (UL) directions, packet number in DL, per-TID packet numbers in UL, and per-TID BlockAck session parameters in DL and UL, plus a variable-length driver context - to be used by the driver to attach the context to the frame SKB. Additionally, define a helper that attaches the SMD context to the SKB extension so that the initialization operations (container allocation, reference tracking, and context linking) are properly handled. Signed-off-by: Pooventhiran G --- include/linux/ieee80211-uhr.h | 86 +++++++++++++++++++++++++++++++++++++++= ++++ include/net/mac80211.h | 50 +++++++++++++++++++++++++ 2 files changed, 136 insertions(+) diff --git a/include/linux/ieee80211-uhr.h b/include/linux/ieee80211-uhr.h index c3f87d4c8bec..f904b1e65f10 100644 --- a/include/linux/ieee80211-uhr.h +++ b/include/linux/ieee80211-uhr.h @@ -649,6 +649,92 @@ struct ieee80211_uhr_mode_change_tuple { u8 variable[]; } __packed; =20 +/* + * Context information carried in SMD BSS Transition (refer IEEE P802.11bn= /D2.0, + * Aug 2026, subclause 37.16.9. + */ +#define IEEE80211_SMD_CTX_NUM_VALID_CTX 8 + +#define IEEE80211_SMD_CTX_VALID_DL_SN 0 +#define IEEE80211_SMD_CTX_VALID_UL_SN 1 +#define IEEE80211_SMD_CTX_VALID_PN 2 +#define IEEE80211_SMD_CTX_VALID_BA_PARAMS 3 +/* Positions 4 to 7 are reserved */ + +/* + * Data TIDs transported in the context, IEEE P802.11bn/D2.0, Aug 2026, + * subclause 9.4.2.364. + */ +#define IEEE80211_SMD_CTX_NUM_TIDS 8 + +#define IEEE80211_SMD_CTX_MAX_PN_LEN 16 + +/** + * struct ieee80211_smd_ctx_ba - BlockAck parameters for DL and UL + * + * @amsdu_supported: Peer's capability to support A-MSDU within A-MPDU. + * @ba_policy: BlockAck policy (0 =3D delayed BlockAck, 1 =3D immediate Bl= ockAck) + * @buffer_size: Reorder buffer size from ADDBA Request (10-bit, max 1023) + * @timeout: BlockAck session timeout + * @ext_no_frag: ADDBA Extension fragmentation support + * @extfrag_level: ADDBA Extension HE fragmentation level + * @ext_buffer_size: ADDBA Extension buffer size; combined with @buffer_si= ze as + * (@ext_buffer_size << 10 | @buffer_size) to get the full reorder + * buffer size + */ +struct ieee80211_smd_ctx_ba { + bool amsdu_supported; + u8 ba_policy; + u16 buffer_size; + u16 timeout; + bool ext_no_frag; + u8 extfrag_level; + u16 ext_buffer_size; +}; + +/** + * struct ieee80211_smd_ctx - IEEE 802.11bn SMD Roaming Context (refer + * IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.9) + * + * @valid_ctx_bmap: Bitmap indicating which context fields are valid; + * bit positions defined by IEEE80211_SMD_CTX_VALID_* constants + * @pn_len: Length of PN in bytes; varies by cipher type + * (e.g. CCMP (6), GCMP-256 (16)) + * @dl: Down-link context data + * @dl.valid_tid_bmap: valid DL TIDs for which context is present + * @dl.sn: DL SN per-TID to be assigned next + * @dl.pn: DL PN to be assigned next + * @dl.ba: DL BlockAck parameters per-TID for the BlockAck session + * @ul: Up-link context data + * @ul.valid_tid_bmap: valid UL TIDs for which context is present + * @ul.sn: UL SN per-TID to be checked next + * @ul.pn: UL PN per-TID to be checked next + * @ul.ba: UL BlockAck parameters per-TID for the BlockAck session + * @drv_ctx_size: Number of valid bytes in @drv_ctx. + * @drv_ctx: Variable-sized array of driver-specific context, counted by + * @drv_ctx_size. Opaque to the wireless core; interpreted by the drivers. + */ +struct ieee80211_smd_ctx { + DECLARE_BITMAP(valid_ctx_bmap, IEEE80211_SMD_CTX_NUM_VALID_CTX); + u8 pn_len; + + struct { + DECLARE_BITMAP(valid_tid_bmap, IEEE80211_SMD_CTX_NUM_TIDS); + u16 sn[IEEE80211_SMD_CTX_NUM_TIDS]; + u8 pn[IEEE80211_SMD_CTX_MAX_PN_LEN]; + struct ieee80211_smd_ctx_ba ba[IEEE80211_SMD_CTX_NUM_TIDS]; + } dl; + struct { + DECLARE_BITMAP(valid_tid_bmap, IEEE80211_SMD_CTX_NUM_TIDS); + u16 sn[IEEE80211_SMD_CTX_NUM_TIDS]; + u8 pn[IEEE80211_SMD_CTX_NUM_TIDS][IEEE80211_SMD_CTX_MAX_PN_LEN]; + struct ieee80211_smd_ctx_ba ba[IEEE80211_SMD_CTX_NUM_TIDS]; + } ul; + + size_t drv_ctx_size; + u8 drv_ctx[] ____cacheline_aligned __counted_by(drv_ctx_size); +}; + static inline int ieee80211_uhr_mode_change_tuple_size(const struct ieee80211_uhr_mode_chang= e_tuple *tuple) { diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 32b9b7cd1685..b4b1d3db9b19 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -8246,4 +8247,53 @@ bool ieee80211_vif_nan_started(struct ieee80211_vif = *vif); * Return: 0 if success and non-zero on error */ int ieee80211_encrypt_tx_skb(struct sk_buff *skb); + +/** + * ieee80211_skb_ext_add_uhr - attach or replace a UHR SMD context on + * SKB_EXT_WIRELESS + * @skb: the SKB to attach the extension to + * @ctx: the SMD context; must be a kmalloc-ed buffer by the caller + * + * Allocates a &struct wireless_skb_ext_smd_ctx container, sets @ctx to it= with + * @refcnt initialized to 1, and attaches it to @skb on SKB_EXT_WIRELESS. + * If SKB_EXT_WIRELESS is already active, the existing @container is relea= sed + * before the new one is attached. + * + * Ownership of @ctx transfers to @container on success - the core will + * kfree() both when the last reference is released. + * Upon error, @ctx ownership is not transferred from the caller; old @con= tainer + * may get freed. + * + * Drivers must use this helper to attach SKB_EXT_WIRELESS extension to + * properly handle clone and COW copies. + * + * Returns 0 on success; -ENOMEM on allocation failure. + */ +static inline int ieee80211_skb_ext_add_uhr(struct sk_buff *skb, + struct ieee80211_smd_ctx *ctx) +{ + struct wireless_skb_ext_smd_ctx *container; + struct wireless_skb_ext *ext; + + container =3D kzalloc_obj(*container, GFP_ATOMIC); + if (!container) + return -ENOMEM; + + refcount_set(&container->refcnt, 1); + container->smd_ctx =3D ctx; + + skb_ext_del(skb, SKB_EXT_WIRELESS); + + ext =3D skb_ext_add(skb, SKB_EXT_WIRELESS); + if (!ext) { + kfree(container); + return -ENOMEM; + } + + ext->uhr_smd_ctx =3D container; + ext->type =3D WIRELESS_SKB_EXT_UHR_SMD; + + return 0; +} + #endif /* MAC80211_H */ --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5A28599A2B for ; Tue, 8 Sep 2026 17:10:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887453; cv=none; b=toXHAK5pw2rHEm+Nu7d3rA0s0FQgTiLV2BWjJ6bp2eOXVjo7NoOVQF8XDygUUwFsH2lFlkcMEkfL70M3EVckDTfdJQGq+QQwkR9eAO//rk8xbc47ZRPobPQsrFCpBKZriOIiAPO9rG2Xti2VtR+GH+Ysg4ay/8fpogvtOrnrpl8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887453; c=relaxed/simple; bh=slxYMd9pIzQAMKVqHjrMfdvbnPLm31GqOFhQsu0FO7Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=W1wJuXJrTDQREdjYjju7DIPAx/4Jmtp9EItb9iZAXbOV1oX8vwcy2CN5pRmnejhzDPKIxbq/twhUJD9zYRCcGCpM5pnzE8UaDqP/lq+lzBqjNlpNlDHA1a6FKsWz56/+k60DMdFkE/zC+xUBkEk3BP6sjDiCS+uO+DYoZ82bTsM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=CSY/M17b; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gXHor+E4; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="CSY/M17b"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gXHor+E4" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdZ6e045444 for ; Tue, 8 Sep 2026 17:10:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= gYoBNxGLCxDZv4uAHMCNobIrbYmFXndZnMWIP9T37jE=; b=CSY/M17ba+6JAN7m qx3NtfOgCpD8hcuGCh/RO5fAabZDu9yP5NBAirlQ/4b26HSYwAgEy/+EsHgYyIXC f15jtG7LPIbMXrWdb2xScDbC5k+Fz1ziskjIyapnTdZbemz05lXbnvO8pZeuP0fe GpaV1VSy10hT8iL6btIMcHiKClqpg3p5NwDhjuOKukvLh6I858kM7B/nxBy7smRb 9OsW/A3Tqx5knVYpFIabbVEsl93EJLHXgtuuHh0hs7iUOqegKXfXHolr9M3Ixlf+ PSD0WdwKUT36xjPTDuw0zE041/cT2ByCXZ4ktlDy86eQkwJhBi1NRrjuXeFS6vdI 5palaw== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjg8xsy88-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:50 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc11b5dd54dso8736757a12.3 for ; Tue, 08 Sep 2026 10:10:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887450; x=1789492250; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gYoBNxGLCxDZv4uAHMCNobIrbYmFXndZnMWIP9T37jE=; b=gXHor+E4Iw8U37yF05rTH9bWGprzM47aWxpLIxYRDVA51BWfhN3DEe1Lkc1YeSw2aj fkaMSxmiRlVMrksfv5w5vGp0BJaLMoLFalJn5IG4ZXOeI1SQwphyPzxrSZdnmckXdui2 30PPRuzk37vqDjIDDva8W2Z/vKc+a54AJGXGkncUdbNy+QDSJj7AKCqdqWEQ5aM6LBr1 icIlV0bX6qfcfahxJGRqDE1GWx9lsCwvGEEdvLRgo5mecEeFyGR/T9HiF7KncWidFQi5 0U9qo8fQkVqU4n76h7gNW4NH3F14Ezb41K5555DAechdt1kxi4OVMXRT9IZG4gm9hAHH Wj5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887450; x=1789492250; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gYoBNxGLCxDZv4uAHMCNobIrbYmFXndZnMWIP9T37jE=; b=rIWLh/C8QAHD8AsjYl70Dd1orVTiweMq/db2vDXFW57wv2uRaJ7w67g4LmR0xO0Oq8 4M8ZnunjH73xw/uATEzLAo6Xu7Dy4yxh7iNugllrO3dlW//OGhh7DDBnO9AeMuasugB6 nCUbQM1bxVjvqJAHhKDvgGrWjVULFYD2kxUvwVq73lVCfxoGn5buEvB4bfGyIRTD0DMk eWYK2gINnC+zRwHOO3BuKTMf+G0ZTZz5Kmu4JIdn6vXGRU0SDKzF1NB3rmN0dcztWJAf Lza+Mq7JWmFdV4lXjVg2OtAZ/VwwmOtrqVwWMYfkKMgHuGwxK39lc4YHLo0gijO/tgg1 iSSw== X-Gm-Message-State: AFuF++me6PLEvy6tC/CO6zZTdYkIxadM2lGLlJGV73qT8Xfz5eW/ngUG eSIpNZsrKvgqUY2Dc94CQrNeC8789qrg9xqaf1X5yfBezpqRp5M/lsm+Dx/mcIOsoVtThN7fdWb B4Xru6E1qcq3X1D0oPFWnFO1e5y3DY7hG3SdYivszbTvSBNnyVk2ONcqxt3zi2PvTEQ== X-Gm-Gg: AYBFou2j7eD2sNC7ac2ZuT5HlTNX6f0J2+/TiFVFsJqS5Nd8DOAKI57eIZSDegLPkxd r0jFbHtSkEgWH0gcD0VngIgS9lGS5tK3b4MBJApKjpzi6qaK3tJ4YYV3y2trGfc3WBBevs0jDkC 2InPup42ugfuirfbGIWZyP4NKpVO/y2tdgJ7j2Qn5bZrJFCeqxaBdE580KMle6Lsc8nFiIP8KYI 1YgvwsxbmZZ0ZMUFWilmar4i+V7R0q5Dr4gDX4h3haEBGppjHvI2Bx46GgY+gl6GVFihWeCr8QF mfYJFXH588NZPl1E9YoEQMaUB1iHwH6emKFsFQuS4eQbl+pHiPQ+viSxT4IRd/2P0UoBlZPcHHu foM9JQaFk4327CrhyWukz2aaevvZXsKhCmkLvdFbMyEc18F/6/u118OSzjLu3FVKyiwMwqMRglg vQ3ZBTqVC26WUcjdACNCsX+g== X-Received: by 2002:a05:6a20:7343:b0:3c3:88a5:83e4 with SMTP id adf61e73a8af0-3da39ee2718mr43902285637.10.1788887449965; Tue, 08 Sep 2026 10:10:49 -0700 (PDT) X-Received: by 2002:a05:6a20:7343:b0:3c3:88a5:83e4 with SMTP id adf61e73a8af0-3da39ee2718mr43902199637.10.1788887449336; Tue, 08 Sep 2026 10:10:49 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:48 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 11/18] wifi: mac80211: Enable skb extensions along with mac80211 Date: Tue, 8 Sep 2026 22:39:39 +0530 Message-Id: <20260908-smd-v1-11-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=J7GaKgnS c=1 sm=1 tr=0 ts=6aa0419a cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=iJey_kD_w1PlP-9owF4A:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-ORIG-GUID: OQriPE0yjpmnQFivCS9lP8DsyY-nr1Bt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXzAhqxzADsekv h6C6vVtVA3adCpRMoEEE17/A/X4LEaIc5aL7eymnyPblrQQxXFOtOu5aZkn3cesTQkkhVglv831 JiJ4OR9i69J4RLsAQ9uNOKERV3/EtUCs9V/aqthcr8UIIbBuTebQW2AlVBr50VUws3pLTZz5zG4 5qeCNgE6ydZkpJM0sx1Uj4gkjPAXIqAojyedQCSVnlLh40vzOchTdH9C2Y3ZKsKV7a9ahmm5cWA YQFu9S8n5q1cfj/nflJpRxkOUvmp2YYeQjc9ZOKvsDZqLkxRQEDEx6EVr+CnJRB1KcpbDtstUJU tT4y9hVsl7fX8AQXlu5E3XdC/gi1A6W5//cM5gpnzwBikjEkyePQ+Gl5Gaw16r7mThkqXPCDwrX 2SN69yfCWd8Fq8zDY3qltAVlz7xXTMq7xRI8/sgzXVbCvidhCxzpp72ZpK8Vc/1pBrxgcRoByKf gDtRUnY8IjzLq7kkR9A== X-Proofpoint-GUID: OQriPE0yjpmnQFivCS9lP8DsyY-nr1Bt X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX1SjsZxF1wOWR d3khuiUPjnSxKh+6cOMfvnlmkdAsLKXTmxn0aYXUiIXd7t3QAknjWhr1SEJ+ZumRjFR1mLYXQ13 xexseR76rPT2EG4mv1zSJb0DmmsJxK8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 When mac80211 module is selected in build configs, enable SKB_EXTENSIONS as a dependency since mac80211 has started using SKB extensions with SMD as its first user. Signed-off-by: Pooventhiran G --- net/mac80211/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mac80211/Kconfig b/net/mac80211/Kconfig index d6bc295e23a1..10d28985a1ce 100644 --- a/net/mac80211/Kconfig +++ b/net/mac80211/Kconfig @@ -9,6 +9,7 @@ config MAC80211 select CRYPTO_CCM select CRYPTO_GCM select CRC32 + select SKB_EXTENSIONS help This option enables the hardware independent IEEE 802.11 networking stack. --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2394959B662 for ; Tue, 8 Sep 2026 17:10:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887458; cv=none; b=ETFjzcnsRY2bJRcSJ/20LVCBz7H+3+JrFTZCDZpcQniTOywgU87DM6qINiv87dlccA0Fy+2UDyStyX4GTG7p6V69D8Aho+gp6RQToA+03gL/qmLz5HqkP61nrjjoRcS+Ded2TmjzNDXfnuGPDmdYEHVWzaNdGXpP89Jx6uDe/gg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887458; c=relaxed/simple; bh=79ChjcWn9P3rnnuHKmMDzO/rpLHUhW4oLw8lkH+rZT0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=SY3p19Ss+W8yfkkvPDJW9oBKFQs2k01sMCSidMQSWdJHqJuXos69EtMWC/YiCX5i4eYxowzPyJG009sRvOEHXF1x/eHwiGvsjZiMM9emIMFbEANFtE0IQhAmWzMRE/RIQQlATnmMV9yDL1hQlkLjUucVOPYYmLG6/KbHe2tsuiE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Khn3Rjy/; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RPDoomkg; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Khn3Rjy/"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RPDoomkg" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdcD42737625 for ; Tue, 8 Sep 2026 17:10:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= OEZFudhXBWzoCl30tcULXwca6zIY1XEjQJyY0OKHCVQ=; b=Khn3Rjy/VasoDmRN rUQs+bK6kKu56PflOnJOaMDRQhx0Fm2upRgi16tC6SYf+/xzrH1ZJ8sfHeKX5r5F BBa01GjWkBp7W2WCRzdbG6XSeSQF/I5QwgPrc81jqxuHt8sfNm28rzw7UlDqoN0s 0/r1U5+XsG4fakgSD+WjeFQpCBDCi1oVYYZ0Z02/+rfI+obBl+woeDnQ701frZcQ 09W07kocvMLoFMjGYgTnMsWRXlc7SJpIKtnQFubHBjWUTgYkjSDidPGFgooxDvZ4 KO+YzeDr89vkHBgIDzBH7mGGQxPC5FLYdQp3PUc26Crf+z2WCupIunM7gO7YDzWq /STKfA== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjatjkdgn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:55 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc1b8088203so5324162a12.3 for ; Tue, 08 Sep 2026 10:10:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887454; x=1789492254; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=OEZFudhXBWzoCl30tcULXwca6zIY1XEjQJyY0OKHCVQ=; b=RPDoomkg0oFqdPOoHA1QGc6H2nfJnE9B947m4J5Q2mbb5YmHIFHjR1K9ZX93TdjGfV Sbl2JdqsHFO+kfkiqskTIJZXjP0hR4WWC/XG9pLm45zQZlKaiIIyQJHZ7CY+FMcmC71/ 75ou/wl0Jo6v9dt+Ag9ihlZzVo2u5qkGz5eJG3fIDaTUf4dzLjVLfJIsyKTiwjmd2Cns SyZSLfPvnwQ4Xqt3XoqWgfUfOWluKI271TY+8LU7tcgLI8DFPDUPH4p0poReCFM4ESvi y//JaG5ErR5+r+VQzPHx0XK21v92jEWkH5dB0Rj2HKNMoPOn1dEmxJ8oAZv+kXsTvgQq Omtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887454; x=1789492254; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OEZFudhXBWzoCl30tcULXwca6zIY1XEjQJyY0OKHCVQ=; b=tTndUWuaKGcKmgvpctdjKkc/a7pYp4OiuFgnlTZH4G0wlGgXhwsVxIE/Ddsc9tzoMI 1daohlmnxBQXD77mTXDwbxtbnzjEbLwYftegMi96AmCuWDWbpJWMnZ52hehoCH6Wk5tO KY8s1ogAhlqbj4Gol46YAhGpLb7jierRc9fFeOw7vtxDLzcSkSL1Afm/ikNp+NqrBpgK NPLYY0SGWuDqHnTOe1oGUloyWbibiwVwVuxqE8RPAZeIuBAkmGHijLnx6v5OfkQ+YMTV UdB2G3BJhANZFKH/p5geAkIvf9zj0KkReGFb8D9gTEX8wDajyk5TlahRhOqCtzku5jcI fzrQ== X-Gm-Message-State: AFuF++m5ybbWTcn6AahkTzXtYpNzkK9hxUnPeTK2fTQ1i3uS1kjtu1Ra mLJRp9d5tVWb5IwcY/7sXXF3a+Y4w22S4V2tQ5xYhTCYlM1Tj5EFmNMqflt8dA7MBqVJ/AxtzZQ pVJP4GHuZkrLO6Qnhg4QpeNxzKsa1NIdt/qL8W43ivmrwq7GUENuJg2UQ0xGRdPGANr9X0Fg8tg == X-Gm-Gg: AYBFou2Cqx8hKPJUOTfoCWU0siZH+1e/Z0P9j5hQLHmthGdv4CSaZPOaHZ7AQeibhPm yWqk9IZXqd37YVXKJtYCtg2S0WdZG2sCWeJRwWPuehB57aFMp0xJJJkMOVKUzPi7Bb1ek/kqJ7s JPdnujtM5xEBeFyyjjCpxO/S7PXr+w/TIMgOPlyoRJF7lGlLv8CUIulbFsb3ojGXSZ0+YO1cj2z TRTsWLP6bKSnN7cgInDqlhgF3O8CeXjOvFWgbtJqNeOhl+FLFDcQUrpGNUqoLteiiDhaqYOABcl 3PAjIzsNR/+x+j7ZlbvoDugN2903cCsXAChpoS6pJBQr+SKwuPhfkkz1lrMiKOHYkYuUSSPH6ET 0WyB/NwVIpxFEbyXEivJWdsjp3uU66716goFDbxWGKozSklGJDrnXq5BBf8m8SWRFHqm1swtcwJ zlkDMg0ENPo6d9yr64JimW3w== X-Received: by 2002:a05:6a20:4306:b0:3d0:9590:7148 with SMTP id adf61e73a8af0-3da3a11f7a1mr44331529637.17.1788887454196; Tue, 08 Sep 2026 10:10:54 -0700 (PDT) X-Received: by 2002:a05:6a20:4306:b0:3d0:9590:7148 with SMTP id adf61e73a8af0-3da3a11f7a1mr44331431637.17.1788887453622; Tue, 08 Sep 2026 10:10:53 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:52 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 12/18] wifi: nl80211: Define attributes to pack SMD BSS Transition context Date: Tue, 8 Sep 2026 22:39:40 +0530 Message-Id: <20260908-smd-v1-12-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX6m/WcAUXX/2C FiI8Pv/97mBLdGNLiLRzD/X+ivv3VTrxDsUsreL8BD1K8IE6l+PWbqrY1eGJaOrAr1WrKwWy7Z1 ECHY5iAym36gRpStH6k4wJuO2vAzZUk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXzTAk32Mbkik3 7GZuFojBHrJ2GmwfehMoBWL6TEkh0LG2QMddSVHHqQSbB4v/HlVzdIjs2knViqOq2OnTDtuARr/ 7rEVJZiS9BdI3ipBtLSCAvPPUdpnNZkzqQ074HEuSBegMLX4GpX3ycNZTai0VUWmuNC6tjzMkjX XMkF5D7U9Z1ME6rJeS/Ny3MRpIGp8Sr5p+2OO3MqpoMp/8yOCVAL21CXYuupncq0PDFHjOz/Dyv g5hi57oiXIdsw5y04wSJVvQ2Dsr6hsT4v95dqkIGqcu6eQfTvLQuJA5DiZsqoFwkQMziEJa0MRe G4gKv9DZJsbdX5iKk2T8H/D9m7U3l3Hjika5Ml8qGe4mLeYkOPcA7SgHBwu2ffwwm8zWzxvnGLY kZKfdTlAP2qjwCSHTBkWMTBn2OzxMKXcZF7qr8OB5QfnOSXnrTNP85jOy0/PBgO7uXak+sXHIgD BJT0e4rvA8dJGoqeNDQ== X-Proofpoint-ORIG-GUID: VJu6paNTeMnGmKs5FRdpH6srTD4MVcwp X-Authority-Analysis: v=2.4 cv=QrduG1yd c=1 sm=1 tr=0 ts=6aa0419f cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=dL9KhdaHfVATLDi8aJoA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: VJu6paNTeMnGmKs5FRdpH6srTD4MVcwp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 Define nl80211 attributes and policies required to pack SMD BSS Transition context along with NL80211_CMD_FRAME to be sent to userspace, and to set and get the context during roaming via current AP MLD and roaming via target AP MLD. Without these, userspace will not be able to transport the context to the target AP MLD, program the context on the target AP MLD TX and RX queues, nor fetch the context on behalf of the target AP MLD if the ST Execution frame is sent directly to the target. Suggested-by: Jouni Malinen Signed-off-by: Pooventhiran G --- include/uapi/linux/nl80211.h | 163 +++++++++++++++++++++++++++++++++++++++= ++++ net/wireless/nl80211.c | 44 ++++++++++++ 2 files changed, 207 insertions(+) diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 65c7eefe9db5..f41266181bf1 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -1427,6 +1427,18 @@ * @NL80211_CMD_STOP_PD: Stop the PD operation, identified by * its %NL80211_ATTR_WDEV interface. * + * @NL80211_CMD_SET_SMD_CTX: Set the SMD BSS Transition dynamic context fo= r a + * non-AP MLD sent from the current AP MLD on the target AP MLD managed by + * an SMD-ME. This command carries %NL80211_ATTR_MLD_ADDR, + * %NL80211_ATTR_SMD_CTX_TYPE and %NL80211_ATTR_SMD_CTX. + * @NL80211_CMD_GET_SMD_CTX: Get the SMD BSS Transition dynamic context fo= r a + * non-AP MLD associated to an AP MLD managed by an SMD-ME. This command + * carries %NL80211_ATTR_MLD_ADDR and %NL80211_ATTR_SMD_CTX_TYPE. + * @NL80211_CMD_SMD_CTX_EVENT: Event reporting the collected SMD context + * (requested via %NL80211_CMD_GET_SMD_CTX) to userspace. It carries + * %NL80211_ATTR_MLD_ADDR, %NL80211_ATTR_SMD_CTX_TYPE, and + * %NL80211_ATTR_SMD_CTX. + * * @NL80211_CMD_MAX: highest used command number * @__NL80211_CMD_AFTER_LAST: internal use */ @@ -1705,6 +1717,10 @@ enum nl80211_commands { NL80211_CMD_START_PD, NL80211_CMD_STOP_PD, =20 + NL80211_CMD_SET_SMD_CTX, + NL80211_CMD_GET_SMD_CTX, + NL80211_CMD_SMD_CTX_EVENT, + /* add new commands above here */ =20 /* used to define NL80211_CMD_MAX below */ @@ -3207,6 +3223,13 @@ enum nl80211_commands { * IEEE P802.11bn/D2.0, Aug 2026, subclause 37.16.6). * This flag is carried in %NL80211_CMD_NEW_STATION. * + * @NL80211_ATTR_SMD_CTX: Nested attribute associated with UHR SMD BSS + * Transition data. Used with %NL80211_CMD_SET_SMD_CTX and + * %NL80211_CMD_SMD_CTX_EVENT. See &enum nl80211_smd_ctx. + * @NL80211_ATTR_SMD_CTX_TYPE: u8 attribute specifying the type of SMD con= text. + * Used along with %NL80211_CMD_SET_SMD_CTX, %NL80211_CMD_GET_SMD_CTX, + * and %NL80211_CMD_SMD_CTX_EVENT. + * * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use @@ -3815,6 +3838,9 @@ enum nl80211_attrs { =20 NL80211_ATTR_SMD_ROAM_STA, =20 + NL80211_ATTR_SMD_CTX, + NL80211_ATTR_SMD_CTX_TYPE, + /* add attributes here, update the policy in nl80211.c */ =20 __NL80211_ATTR_AFTER_LAST, @@ -9247,4 +9273,141 @@ enum nl80211_smd_params_attrs { NL80211_SMD_PARAMS_ATTR_MAX =3D __NL80211_SMD_PARAMS_ATTR_LAST - 1 }; =20 +/** + * enum nl80211_smd_ctx_type - SMD Request Type values + * + * Used with %NL80211_ATTR_SMD_CTX_TYPE. + * + * @NL80211_SMD_CTX_TYPE_PREP: SMD BSS Transition (ST) Preparation. + * @NL80211_SMD_CTX_TYPE_EXEC: ST Execution. + * @NUM_SMD_CTX_TYPES: internal. + * @NL80211_SMD_CTX_TYPE_MAX: Max type of ST context. + */ +enum nl80211_smd_ctx_type { + NL80211_SMD_CTX_TYPE_PREP, + NL80211_SMD_CTX_TYPE_EXEC, + + NUM_SMD_CTX_TYPES, + NL80211_SMD_CTX_TYPE_MAX =3D NUM_SMD_CTX_TYPES - 1, +}; + +/** + * enum nl80211_smd_ctx_ba_param - SMD Block Ack Context attributes + * + * @__NL80211_SMD_CTX_BA_ATTR_INVALID: Invalid attribute. + * @NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE: Required (u16) BA buffer size. + * @NL80211_SMD_CTX_BA_ATTR_POLICY: Required (u8) BA policy. + * @NL80211_SMD_CTX_BA_ATTR_AMSDU_SUPPORT: Flag attribute to indicate + * AMSDU support. + * @NL80211_SMD_CTX_BA_ATTR_TIMEOUT: Required (u16) Block Ack timeout. + * @NL80211_SMD_CTX_BA_ATTR_EXT_NO_FRAG: Flag attribute to indicate + * fragmentation support. + * @NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL: Required (u8) HE fragmentation + * level. + * @NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE: Required (u16) extended buffer = size. + * @__NL80211_SMD_CTX_BA_ATTR_LAST: Last attribute, used internally. + * @NL80211_SMD_CTX_BA_ATTR_MAX: Max attribute. + * + * Used with %NL80211_SMD_CTX_DL_ATTR_BA_PARAMS and + * %NL80211_SMD_CTX_UL_ATTR_BA_PARAMS. + */ +enum nl80211_smd_ctx_ba_param { + __NL80211_SMD_CTX_BA_ATTR_INVALID, + NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE, + NL80211_SMD_CTX_BA_ATTR_POLICY, + NL80211_SMD_CTX_BA_ATTR_AMSDU_SUPPORT, + NL80211_SMD_CTX_BA_ATTR_TIMEOUT, + NL80211_SMD_CTX_BA_ATTR_EXT_NO_FRAG, + NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL, + NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE, + + __NL80211_SMD_CTX_BA_ATTR_LAST, + NL80211_SMD_CTX_BA_ATTR_MAX =3D __NL80211_SMD_CTX_BA_ATTR_LAST - 1 +}; + +/** + * enum nl80211_smd_ctx_dl - SMD Dynamic Context - DL direction + * + * @__NL80211_SMD_CTX_DL_ATTR_INVALID: Invalid attribute. + * @NL80211_SMD_CTX_DL_ATTR_VALID_TID_BITMAP: Optional (u8) TIDs included. + * @NL80211_SMD_CTX_DL_ATTR_SN: Optional (nested) next SN (u16) per TID to + * be assigned to DL individually addressed frames. + * @NL80211_SMD_CTX_DL_ATTR_PN: Optional (binary) starting PN (max 16 byte= s) for + * DL individually addressed frames. + * @NL80211_SMD_CTX_DL_ATTR_BA_PARAMS: Optional (nested) Block Ack paramet= ers, + * nested array of TIDs (uses &enum nl80211_smd_ctx_ba_param). + * @__NL80211_SMD_CTX_DL_ATTR_LAST: Last attribute, used internally. + * @NL80211_SMD_CTX_DL_ATTR_MAX: Max attribute. + * + * Used with %NL80211_SMD_CTX_ATTR_DL. + */ +enum nl80211_smd_ctx_dl { + __NL80211_SMD_CTX_DL_ATTR_INVALID, + NL80211_SMD_CTX_DL_ATTR_VALID_TID_BITMAP, + NL80211_SMD_CTX_DL_ATTR_SN, + NL80211_SMD_CTX_DL_ATTR_PN, + NL80211_SMD_CTX_DL_ATTR_BA_PARAMS, + + __NL80211_SMD_CTX_DL_ATTR_LAST, + NL80211_SMD_CTX_DL_ATTR_MAX =3D __NL80211_SMD_CTX_DL_ATTR_LAST - 1 +}; + +/** + * enum nl80211_smd_ctx_ul - SMD Dynamic Context - UL direction + * + * @__NL80211_SMD_CTX_UL_ATTR_INVALID: Invalid attribute. + * @NL80211_SMD_CTX_UL_ATTR_VALID_TID_BITMAP: Optional (u8) TIDs included. + * @NL80211_SMD_CTX_UL_ATTR_SN: Optional (nested) last SN received per TID + * for UL individually addressed frames. + * @NL80211_SMD_CTX_UL_ATTR_PN: Optional (nested) last PN received per TID + * for UL individually addressed frames. + * @NL80211_SMD_CTX_UL_ATTR_BA_PARAMS: Optional (nested) Block Ack paramet= ers + * (uses &enum nl80211_smd_ctx_ba_param). + * @__NL80211_SMD_CTX_UL_ATTR_LAST: Last attribute, used internally. + * @NL80211_SMD_CTX_UL_ATTR_MAX: Max attribute. + * + * Used with %NL80211_SMD_CTX_ATTR_UL. + */ +enum nl80211_smd_ctx_ul { + __NL80211_SMD_CTX_UL_ATTR_INVALID, + NL80211_SMD_CTX_UL_ATTR_VALID_TID_BITMAP, + NL80211_SMD_CTX_UL_ATTR_SN, + NL80211_SMD_CTX_UL_ATTR_PN, + NL80211_SMD_CTX_UL_ATTR_BA_PARAMS, + + __NL80211_SMD_CTX_UL_ATTR_LAST, + NL80211_SMD_CTX_UL_ATTR_MAX =3D __NL80211_SMD_CTX_UL_ATTR_LAST - 1 +}; + +/** + * enum nl80211_smd_ctx - SMD Context information + * + * Top-level container for SMD BSS Transition dynamic context. Carried in + * %NL80211_ATTR_SMD_CTX with %NL80211_CMD_SET_SMD_CTX (target AP MLD) or + * with %NL80211_CMD_FRAME (current AP MLD reporting context to userspace) + * and %NL80211_CMD_SMD_CTX_EVENT (current AP MLD reporting the requested + * context on behalf of the target AP MLD). + * + * @__NL80211_SMD_CTX_ATTR_INVALID: Invalid attribute. + * @NL80211_SMD_CTX_ATTR_DL: Optional (nested) DL parameters. + * See &enum nl80211_smd_ctx_dl. + * @NL80211_SMD_CTX_ATTR_UL: Optional (nested) UL parameters. + * See &enum nl80211_smd_ctx_ul. + * @NL80211_SMD_CTX_ATTR_DRV_DATA: Optional (binary) driver-specific blob. + * Passed through nl80211 as a blob; parsed only at the driver layer of + * the current AP MLD and target AP MLD. First 3 bytes shall be driver OUI + * for the driver to parse as required. + * @__NL80211_SMD_CTX_ATTR_LAST: Last attribute, used internally. + * @NL80211_SMD_CTX_ATTR_MAX: Max attribute. + */ +enum nl80211_smd_ctx { + __NL80211_SMD_CTX_ATTR_INVALID, + NL80211_SMD_CTX_ATTR_DL, + NL80211_SMD_CTX_ATTR_UL, + NL80211_SMD_CTX_ATTR_DRV_DATA, + + __NL80211_SMD_CTX_ATTR_LAST, + NL80211_SMD_CTX_ATTR_MAX =3D __NL80211_SMD_CTX_ATTR_LAST - 1 +}; + #endif /* __LINUX_NL80211_H */ diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 282d3c82dce8..d59f0eb40493 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -704,6 +704,47 @@ nl80211_smd_params_policy[NL80211_SMD_PARAMS_ATTR_MAX = + 1] =3D { [NL80211_SMD_PARAMS_ATTR_NEIGHBOR_PROBING] =3D { .type =3D NLA_FLAG }, }; =20 +static const struct nla_policy +nl80211_smd_ctx_ba_policy[NL80211_SMD_CTX_BA_ATTR_MAX + 1] =3D { + [NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE] =3D { .type =3D NLA_U16 }, + [NL80211_SMD_CTX_BA_ATTR_POLICY] =3D { .type =3D NLA_U8 }, + [NL80211_SMD_CTX_BA_ATTR_AMSDU_SUPPORT] =3D { .type =3D NLA_FLAG }, + [NL80211_SMD_CTX_BA_ATTR_TIMEOUT] =3D { .type =3D NLA_U16 }, + [NL80211_SMD_CTX_BA_ATTR_EXT_NO_FRAG] =3D { .type =3D NLA_FLAG }, + [NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL] =3D { .type =3D NLA_U8 }, + [NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE] =3D { .type =3D NLA_U16 }, +}; + +static const struct nla_policy +nl80211_smd_ctx_dl_policy[NL80211_SMD_CTX_DL_ATTR_MAX + 1] =3D { + [NL80211_SMD_CTX_DL_ATTR_VALID_TID_BITMAP] =3D { .type =3D NLA_U8 }, + [NL80211_SMD_CTX_DL_ATTR_SN] =3D { .type =3D NLA_NESTED }, + [NL80211_SMD_CTX_DL_ATTR_PN] =3D { .type =3D NLA_BINARY, + .len =3D IEEE80211_SMD_CTX_MAX_PN_LEN }, + [NL80211_SMD_CTX_DL_ATTR_BA_PARAMS] =3D + NLA_POLICY_NESTED_ARRAY(nl80211_smd_ctx_ba_policy), +}; + +static const struct nla_policy +nl80211_smd_ctx_ul_policy[NL80211_SMD_CTX_UL_ATTR_MAX + 1] =3D { + [NL80211_SMD_CTX_UL_ATTR_VALID_TID_BITMAP] =3D { .type =3D NLA_U8 }, + [NL80211_SMD_CTX_UL_ATTR_SN] =3D { .type =3D NLA_NESTED }, + [NL80211_SMD_CTX_UL_ATTR_PN] =3D { .type =3D NLA_NESTED }, + [NL80211_SMD_CTX_UL_ATTR_BA_PARAMS] =3D + NLA_POLICY_NESTED_ARRAY(nl80211_smd_ctx_ba_policy), +}; + +static const struct nla_policy +nl80211_smd_ctx_policy[NL80211_SMD_CTX_ATTR_MAX + 1] =3D { + [NL80211_SMD_CTX_ATTR_DL] =3D + NLA_POLICY_NESTED(nl80211_smd_ctx_dl_policy), + [NL80211_SMD_CTX_ATTR_UL] =3D + NLA_POLICY_NESTED(nl80211_smd_ctx_ul_policy), + [NL80211_SMD_CTX_ATTR_DRV_DATA] =3D + NLA_POLICY_RANGE(NLA_BINARY, + 3, IEEE80211_MAX_DATA_LEN), +}; + static const struct netlink_range_validation nl80211_punct_bitmap_range = =3D { .min =3D 0, .max =3D 0xffff, @@ -1118,6 +1159,9 @@ static const struct nla_policy nl80211_policy[NUM_NL8= 0211_ATTR] =3D { [NL80211_ATTR_PEER_SMD_MAC_ADDR] =3D NLA_POLICY_ETH_ADDR, [NL80211_ATTR_PEER_SMD_DL_DATA_FORWARDING] =3D { .type =3D NLA_FLAG }, [NL80211_ATTR_SMD_ROAM_STA] =3D { .type =3D NLA_FLAG }, + [NL80211_ATTR_SMD_CTX] =3D NLA_POLICY_NESTED(nl80211_smd_ctx_policy), + [NL80211_ATTR_SMD_CTX_TYPE] =3D + NLA_POLICY_MAX(NLA_U8, NL80211_SMD_CTX_TYPE_MAX), }; =20 /* policy for the key attributes */ --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D100759B686 for ; Tue, 8 Sep 2026 17:11:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887463; cv=none; b=L7t5YOitoRmUot+TG/5YfIY9tBW7R26pTsGNUjUPwRi4SHtXJ7HGO8g3OsBtWy1W1cbisTfpQ2jJ6eYcR5a4g1XPKKFTWLAffxBlOMMDq2vDicvGm4p7cih1zx3MBefJQoEsoxxLse3gpPFB8BiYBUJCghEeHf0P8IWNtfe8hrc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887463; c=relaxed/simple; bh=/xXrRGDv6Jszk0sj0UbOjDjGSuSuowHtjBK+vXW0/Zg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=ZDgXVizj4ETBvNJtNNbBJAJZbAKQXqhu06coo70fPyX4psAjhmNT5EOI3GcmyCTjp5NKnLgN+UCqj/uH1d8o+5Xdym6qMqkHAVFNu765pTEyUng1VAYpwEWw3tjnHYq2AQuG/SjaXUnb4YScxMXYvyjqmo+M0F4A8bGp9Ab06FY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=AZczlrHR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RlT71/t2; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="AZczlrHR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RlT71/t2" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdYYp3757074 for ; Tue, 8 Sep 2026 17:10:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 2FTgMhgLWmf0Jq8fB7caGXnFJscVEgzrr/HiqFpuFaU=; b=AZczlrHRn0oTuvm+ u9vjy/xyJi6Uxt8MLyUCkTP5Z3IcPfTj/QNTir7WU/x0d3FiRb/ntb0APho+hKW1 nMJt9RFViqU97eU6ORox5bhwO8vukjNi7X2JBXmg3y5W20/B8LlzrvJwDMV3+Rxc Q6yeFz740o06bCv8OdhV8mbwAWoYGNUdQ40kzvtocQ79JRd4bpoz+GWe5fMAtP0e O1F2SyswjBkGDLBK3xwJqjYLrUmW76ivPDSaAUk+6nbLtyuS/BbZKY5UeqPIEyjH 16ZcgPvylrThs0wlyupKqcm1Z4kRqJEAxgDaWrFosXsPJHpUqNsQSKxAIzm0g63D 6LatCA== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcv7jy53-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:10:59 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38ec0f510a9so8487772a91.2 for ; Tue, 08 Sep 2026 10:10:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887459; x=1789492259; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2FTgMhgLWmf0Jq8fB7caGXnFJscVEgzrr/HiqFpuFaU=; b=RlT71/t2JMB9Vcmu2WQJOMbJOjIfyYOPp6otm1lQEkkVMN1Awoe5kUbar4HWauDTum dQL3EDHQSHeh9riSn4nO0dpytFwfjdNgqHnQ6nP/b7WMI2ucFxW/D09ALT5tlZ43Gp6a 4mfZp8XLNgZ3EK7r6LLtuXzctaDtQkf8Rz0lleg3zSLDP3KY8lpit+4zRnmc6I6Wsf9p SuR5ir+CZrOuPRS7AB2VNSx2w2/OpyA7GkgvdO+rIlRwykNlujl0xKr24Qlnr5ASik4P xI/v0HqSurhQXH31rJg1ZFHP71HXsFcZf7Swp1cfLI/Fe+sJs5Iceuhm1cltDZ5J0G1g bzoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887459; x=1789492259; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2FTgMhgLWmf0Jq8fB7caGXnFJscVEgzrr/HiqFpuFaU=; b=gE/bc0Pg5lr0qrYp6rVLBoELbjSGOkHzvdooYhOXpNlYhe+VIuSSpUgRtxA2Gmw0Tv yMtAPo0ShdrFrgMRznXJtwT40f4yORIXW+y+bjlxczBfanA8ukzHxcefLau0hLEe70sX 3cJTEzFU2nr+Inu3yDNZKX5pXWLvJBXlacjW2iaUn5+bDZ91hjevF5rRr8Dk7aH2cd9H AbF/1BHI7Zr9/z4aOt8cPhAXVSDQ2Q42p5F9kQI5N3CIEFo66yUFImB8y3jkAATDtvxE UqoGbrn6p+tY81XHG8B8G1BTIb5UPKGoy7NAAol8gguGZLnVONu/OEuaNNwSTGY0kK1T SQjA== X-Gm-Message-State: AFuF++mn1/qB58e8K2h/d4THbAReb7MuUEy27zNNuQNZCBcX9Vr08gKJ /uVFiTC86d6en3u+XtsDtqpGsAdJjrc5ohk/Wz49Kpy+OJRy5R0A8adCyAHBgRlOIZT5yU18382 K6ZuQ9npAvbM3siJ+SkZjz2bDbF8ROCnJ5iOZxb0SHVEL4tA9jUsIaJfeRMlTcKrvew== X-Gm-Gg: AYBFou3rTvQJOyL52JtBcGOn2wcmLLHMxzDFfSkR68C3amthM310stZ+I4HjjyIyQxr 8tqYMTzvRbdZ6A2AbWWIODqfMKoGaRDm6Ve8qfZTgkXlQNNTyDUEbPtyYJ/w1sQFW5MvU9Sccji u5pAFLe79ZpFimGFjWLwm5mncRXTqWUzEvzb+O1W9OQw1fBgEmDPvLWuuthfD4PpMyhIJ4agV2+ gcjbSvjd4UV/m0koa4dB5XNryPReCaAQQxIXZSb57wASKOPR2nPdGJOdSTKTZ2KK1TmS25GP6gT 630TC1AsCdUkA3lSQA15HsbJpzrOxpuwV2PXkyDZSn23x6GAdde63Sz3bB1NTW0T431uT85qM9+ uqSWq/iwPrv2xlFVh7kLpU2AsAz57j7PLBMrgF3bLbo2IcWigQlzmXxfIbdCfepyfxRB9adHhrT OF2xfrUyjNFBvcq+JFP5BY/g== X-Received: by 2002:a17:90a:dfd0:b0:396:61f1:da5c with SMTP id 98e67ed59e1d1-39b260de667mr45062833a91.4.1788887458462; Tue, 08 Sep 2026 10:10:58 -0700 (PDT) X-Received: by 2002:a17:90a:dfd0:b0:396:61f1:da5c with SMTP id 98e67ed59e1d1-39b260de667mr45062771a91.4.1788887457864; Tue, 08 Sep 2026 10:10:57 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:10:57 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 13/18] wifi: cfg80211/mac80211: Handle UHR Link Reconfiguration frame Date: Tue, 8 Sep 2026 22:39:41 +0530 Message-Id: <20260908-smd-v1-13-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CMEamxrD c=1 sm=1 tr=0 ts=6aa041a3 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=LQFPhaWwRXareCLbuGQA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfXyYqISVCpxRWe dj3xOnE+DEvjPf4F1zJpEMhhgoJ6pYMny4Gdpqk4eE04pa2UTLG8zz6bzZpv4Nb+5cFnqwKqbpU yAQfSnJGLOwo6o7TO24/yzjDqMezkjE= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX0Fd6e9k4Mwk6 xJPDu+GYWLlfWANhTbwTHDIdKBxoUbR/EVqcCsPIHtPWRRpic/Mj978jpUJiH0NMN5tJJ9Pt8BP g3SODcR/VLz/yTrCySI+HIMFTqiQH4/fb3MmcjD6mDpAD1He76KebIyfcG7jWbEd5avIOlhh7GR OBavsNa9xvvtMGRDeEpw8n49KD0XzqFT/UM0GKhVEkYGRN0hoVB3cy/oCM/R0a1OpKiM7qvKYHw mAerfHO19gDnB1otFE9ZAtYNwTInE3FZVoyjsLrmCLyyZ3ob9JCek1XJiUuUrb4IR/Eztly/wVQ 0YGjvU1e//ks26Qmx/rVhgsFl3Aph+Aur0uzSJaIk7nj7RmgOU5655ws5OtQVsXTrQM0p/7NGFt 5ei2tvcAc1Q+RKSD4Tg3OU/JpJu2LPctgIH9wy7ekDVynA1wKn1WiNMh3c2pzbxD1I3DcwzJ7Ru KqVp97/0GeyN9IGL4sA== X-Proofpoint-ORIG-GUID: Y_drnEDa8WSEtmb71IaJf9BSlUPmM4sd X-Proofpoint-GUID: Y_drnEDa8WSEtmb71IaJf9BSlUPmM4sd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 malwarescore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 The UHR Link Reconfiguration Request frame triggers SMD BSS Transition on the current AP MLD. At the point where mac80211 forwards this frame to userspace via nl80211_send_mgmt(), the driver has already collected the STA's dynamic context (SN, PN, BlockAck state) and attached it to the SKB via the SKB_EXT_WIRELESS extension. But this information is not known by nl80211 to pack the context with the frame sent to userspace. Add handling for the UHR ST Preparation and Execution request frames in ieee80211_rx_h_userspace_mgmt() to pull the ieee80211_smd_ctx pointer from the SKB extension and store it in cfg80211_rx_info, so that nl80211_send_mgmt() can include it in the NL80211_CMD_FRAME event. Signed-off-by: Pooventhiran G --- include/linux/ieee80211-uhr.h | 59 +++++++++++++++++++++++++++++++++++++++= ++++ include/net/cfg80211.h | 13 ++++++++++ net/mac80211/rx.c | 22 ++++++++++++++++ 3 files changed, 94 insertions(+) diff --git a/include/linux/ieee80211-uhr.h b/include/linux/ieee80211-uhr.h index f904b1e65f10..cda8251a1a9a 100644 --- a/include/linux/ieee80211-uhr.h +++ b/include/linux/ieee80211-uhr.h @@ -743,6 +743,65 @@ ieee80211_uhr_mode_change_tuple_size(const struct ieee= 80211_uhr_mode_change_tupl IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_LENGTH); } =20 +/** + * ieee80211_is_uhr_link_reconf_req - check if frame is UHR Link Reconf Re= quest + * @skb: the SKB to check + * Return: whether or not the frame is a UHR Link Reconf Request frame + */ +static inline bool ieee80211_is_uhr_link_reconf_req(struct sk_buff *skb) +{ + struct ieee80211_mgmt *mgmt =3D (void *)skb->data; + u8 category, action; + + if (!ieee80211_is_action(mgmt->frame_control)) + return false; + + if (skb->len < IEEE80211_MIN_ACTION_SIZE(uhr_link_reconf_req)) + return false; + + category =3D mgmt->u.action.category; + action =3D mgmt->u.action.action_code; + + return category =3D=3D WLAN_CATEGORY_PROTECTED_UHR && + action =3D=3D IEEE80211_PROTECTED_UHR_ACTION_LINK_RECONFIG_REQUEST; +} + +/** + * ieee80211_is_st_prep_req - check if frame is ST Preparation Request + * @skb: the SKB to check + * Return: whether or not the frame is an ST Prep request frame + */ +static inline bool ieee80211_is_st_prep_req(struct sk_buff *skb) +{ + struct ieee80211_mgmt *mgmt =3D (void *)skb->data; + u8 type; + + if (!ieee80211_is_uhr_link_reconf_req(skb)) + return false; + + type =3D mgmt->u.action.uhr_link_reconf_req.type; + + return type =3D=3D IEEE80211_UHR_LINK_RECONFIG_REQUEST_ST_PREP; +} + +/** + * ieee80211_is_st_exec_req - check if frame is ST Execution Request + * @skb: the SKB to check + * Return: whether or not the frame is an ST Exec request frame + */ +static inline bool ieee80211_is_st_exec_req(struct sk_buff *skb) +{ + struct ieee80211_mgmt *mgmt =3D (void *)skb->data; + u8 type; + + if (!ieee80211_is_uhr_link_reconf_req(skb)) + return false; + + type =3D mgmt->u.action.uhr_link_reconf_req.type; + + return type =3D=3D IEEE80211_UHR_LINK_RECONFIG_REQUEST_ST_EXEC; +} + #define for_each_uhr_mode_change_tuple(data, len, tuple) \ for (tuple =3D (const void *)(data); \ (len) - ((const u8 *)tuple - (data)) >=3D sizeof(*tuple) && \ diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 75d0123fbb5d..7b0f328fec79 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -4887,6 +4887,17 @@ struct mgmt_frame_regs { u32 global_mcast_stypes, interface_mcast_stypes; }; =20 +/** + * struct cfg80211_smd_transition_info - SMD BSS Transition info + * + * @ctx: Dynamic context to be transferred as part of ST + * @type: Type of ST indication + */ +struct cfg80211_smd_transition_info { + struct ieee80211_smd_ctx *ctx; + enum nl80211_smd_ctx_type type; +}; + /** * struct cfg80211_ops - backend description for wireless configuration * @@ -9543,6 +9554,7 @@ void cfg80211_conn_failed(struct net_device *dev, con= st u8 *mac_addr, * @flags: flags, as defined in &enum nl80211_rxmgmt_flags * @rx_tstamp: Hardware timestamp of frame RX in nanoseconds * @ack_tstamp: Hardware timestamp of ack TX in nanoseconds + * @st_info: SMD BSS Transition data in skb extension */ struct cfg80211_rx_info { int freq; @@ -9554,6 +9566,7 @@ struct cfg80211_rx_info { u32 flags; u64 rx_tstamp; u64 ack_tstamp; + struct cfg80211_smd_transition_info st_info; }; =20 /** diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 40ed03a775ba..156a4c0d55ac 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -3993,6 +3993,24 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx) return RX_QUEUED; } =20 +static void +ieee80211_rx_h_userspace_mgmt_st_frame(struct cfg80211_rx_info *info, + struct sk_buff *skb) +{ + struct ieee80211_mgmt *mgmt =3D (void *)info->buf; + struct wireless_skb_ext *ext; + u8 type; + + type =3D mgmt->u.action.uhr_link_reconf_req.type; + + ext =3D skb_ext_find(skb, SKB_EXT_WIRELESS); + if (!ext || ext->type !=3D WIRELESS_SKB_EXT_UHR_SMD) + return; + + info->st_info.type =3D type; + info->st_info.ctx =3D ext->uhr_smd_ctx->smd_ctx; +} + static ieee80211_rx_result debug_noinline ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) { @@ -4003,6 +4021,7 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_dat= a *rx) .len =3D rx->skb->len, .link_id =3D rx->link_id, .have_link_id =3D rx->link_id >=3D 0, + .st_info.ctx =3D NULL, }; =20 /* skip known-bad action frames and return them in the next handler */ @@ -4024,6 +4043,9 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_dat= a *rx) ieee80211_is_ftm(rx->skb)) { info.rx_tstamp =3D ktime_to_ns(skb_hwtstamps(rx->skb)->hwtstamp); info.ack_tstamp =3D ktime_to_ns(status->ack_tx_hwtstamp); + } else if (ieee80211_is_st_prep_req(rx->skb) || + ieee80211_is_st_exec_req(rx->skb)) { + ieee80211_rx_h_userspace_mgmt_st_frame(&info, rx->skb); } =20 if (cfg80211_rx_mgmt_ext(&rx->sdata->wdev, &info)) { --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9398559B675 for ; Tue, 8 Sep 2026 17:11:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887466; cv=none; b=VoHTWMSb8aK9mF34oWYB/owahqoUDy4tdT9y2SR4Sa5DuceYlNef5anIawRimD4h06EQC0utFuQjGZr2xEnCjq1aQLoZk7tRjLvQImQVlE9NtjurZ9PRZ3dlIYV70yRJaKBhReY2QZR+iXNOCeJVcsGIzgbD1UPEjsXylIxtTys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887466; c=relaxed/simple; bh=9GUJmm0JnYOjtca2tQcxf9Y4BE+SaF+P3iTowK/ZOVM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=bJ4oTc+x4z1n/TajALBqKzqB7DBAt7sPZAqjq+IiaJ3/EVZwrK6l+9LxQJbOkCbxgHshf2bfz9u2NZ1Zj/1SosJFK+aYPDKtVaxZF3Vyj9s+7G/VoBqn4yq0JEnlPWGTBz9TAB/Dm0S1Qk1MNxQ8sZIlvDl+UEM2JQ2e+hPKDzg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Hd51RSQ5; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Z1MJAX2/; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Hd51RSQ5"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Z1MJAX2/" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688Fdvu43430781 for ; Tue, 8 Sep 2026 17:11:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= wVk15Adnij0xzN+GSJBRJZvYMNQ2RQbb8lQpb3qcGW8=; b=Hd51RSQ5ya6jaTND x3ROzanRiWP31EzHx9gi4OKxr6j+xQmGYhkmLTp4QhkNW0s4XAt82C1xtut1oZO+ liA9dNDoGpUWhOyANZvk8i3rtzbkWYsZgm1RyzteP95GQN949+oHk7CMguvEHr01 cSEQ/j79iN3NF+TRmzWd7qYvaIMDnbVccOVUaJPJ00naWCiSECAEXGigF/uROgYZ wUh1QbHwrzD9E66NzzQiMc5fmN/lzk1Q4WuIzACABzKz8zsxc8kJQINmGpFkJxp2 kSlUxWmjbqfTWe8KnBbBPueGRO8YHrMa6NJrrmEbhVS/MDFgbNrcU1HymQCDgQcN sj8VeQ== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjhkj1nb4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:11:03 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-853d0d87123so2347880b3a.1 for ; Tue, 08 Sep 2026 10:11:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887463; x=1789492263; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=wVk15Adnij0xzN+GSJBRJZvYMNQ2RQbb8lQpb3qcGW8=; b=Z1MJAX2/j0JEr6o3iB48e325gjXtz5/7x0zanbcp/PrvWvrEw9XiHOK7DlOWKLG72m p8uPiaHs72acR0uVI0dHsWriz95C1vMCBdD620yqLCHHySNjkIa2fjzxyUdrp1kmmDbG odHYPlFr9p6mmeKQrfNjZGRSIZjh+l2QrCSaeJ5qnKNAzu9sjPgrmFvR9N3QmefktgkY mHwomI+hE1G2aYV+zpWoYNIVPifujP221yKLpL5/f5qvDN82S9pPmv5C7gF7U3DNBxNF DXIyRI8d8pfJ1TV7nBIBkQ+itCeHLh4A+aZ0a60kRGhvIn++jfK08wj145ORXa+h9c4G nQSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887463; x=1789492263; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=wVk15Adnij0xzN+GSJBRJZvYMNQ2RQbb8lQpb3qcGW8=; b=YlHW7RLq7xlz81lVtklOrXkTSbJIhcKcxk4jz+wNW5819mgKIfUUyHxMz/LfSf9Ma4 Oc2Zc7TT4f1P9jTKYg69Z0mmWXnUWjWi2G5QgCCJCGyys8x3h7YKwI59YGJRVirrtYPA cxb0dUApDcKXWUV9xddEWZK55NsWOhGytwqK7NTRsQUXEcJV4mwNSgwLsivMVKImXZlh geFwEQ6PWo+GkfK3WNX/dUt7O6Fks2RQlG4km/B4iF+Eb2KuSMKZqzX4j0X2R170WdIM twIJExLmZXo0J1hsAXYzXbNHF8hDqgF5VOds12PomFn17pkuYEcoAGPh0ZDXyRnXoKMz hgoA== X-Gm-Message-State: AFuF++l50gBUu6rFXOS9/AIhtTmyF7GicxgB5mc3cG+5cwpAh5ZjUP2p tWz2BuemioJFy8YSrbzHd0iBgLZuRaKw/3XUL+Lcseo659mkSY9reGQZcCqy1HNDnFK5q4qyCWL 4dQFFQ/qdvXZoK8wKQNqX1DpulJ5xQDnutPubCwWrStj60Y7monU94979SKDsPeL212fYBZnfWg == X-Gm-Gg: AYBFou1pqiiifuGMKpmx5SsJvai9NFl91+SAIqY9KxHAII08UrHb8DnifJ3MM8xjoUV 2EE7mTu1ukiF8hmvfRuGEJ3ZSZeBgoLDP1cVzVQ8D1AywcumnqGGgjiml9F05drtvEl+7X+pC4B yiWq7QQg4YAKPvk5nKb0JW/KzW4++IwlLbgZkiFLE8/uU5KMTQ1Phww+1Se6lwUUYjNYsarwWxt BYzFFUlCOA6Vnki+z+HZkFa3cwwbs2qYVavYSpVculyDJ/Kef2ixszzaEsIpsHzLeDYeEW0qqlo qxHLCjsvBbu0GCZZ4jvwMqHelhlff6L8pPLygBw9Au8kLBrhgG/MgDjFi10jGsjc5f9FCfCW9d4 cEEwM8m76rJ1SQhblfHzDGbUl5LvJjUy2nD0DfPcgcAC7TQtKCxW6OWqTQjxGABNqVx+SUni+LK c8IHpZ/ykIxruSOsHMNVfo+g== X-Received: by 2002:a05:6a20:9151:b0:3d3:af44:ee12 with SMTP id adf61e73a8af0-3da3a2067e9mr45620749637.27.1788887462816; Tue, 08 Sep 2026 10:11:02 -0700 (PDT) X-Received: by 2002:a05:6a20:9151:b0:3d3:af44:ee12 with SMTP id adf61e73a8af0-3da3a2067e9mr45620700637.27.1788887462352; Tue, 08 Sep 2026 10:11:02 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.10.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:11:01 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 14/18] wifi: nl80211: Pack SMD dynamic context along with frame Date: Tue, 8 Sep 2026 22:39:42 +0530 Message-Id: <20260908-smd-v1-14-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX2t9FyI6DzOLK 3udkqTFsBsQqZ1Gd+zPiXfTUvLAk49cU2ahQZ7on/RscobnYwseTU2o6ffj6ZKgTeCfT6YImsJz FwfssDf2j/kj6i+OKyOly0P7ypkKASE= X-Proofpoint-GUID: Qev8ReLSc5pwtIgDl-Ib-MV0n5X0ha7A X-Authority-Analysis: v=2.4 cv=VYjH+lp9 c=1 sm=1 tr=0 ts=6aa041a7 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=bhEJrp4yiY6RaB6cu_EA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-ORIG-GUID: Qev8ReLSc5pwtIgDl-Ib-MV0n5X0ha7A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX8a/O64FjGvfe md8hTxtc6V66AoDQQ+4Dc/X1PBTD654qADzxWYx7JQXmee8IEOSQD2GdJx+8zkKFzrTKcyTAOBc puMPUY2Q9HnaN5OOrx+rhFnF6UKSY8IolymoWglTOY45TYaSIUPXLuWmoN8QrYXbob6M9qkFQGZ VsEfxVZnS/uymbRfp3TtMxQBs1uYPw+lVCPS9jyXDIcdIrM61zx/NEK6kGfBTk0IwvszkHs23ef O65zW2USUO8B5RaEksSqQP3PjUX9duwt9vBteySz+hKtvzkeQ7Xtrr+lVotiEMu8oWU+EY84jAl z/uMEOzCyzoTe8Gi9XJsNFK2LZ4kDYG8y+0YPzbSclxZ09L2UarohvwN2KeqClOJ0vKwhTcctfY kp1dtwwqFSs6gv4+WxNcrQBx4qy4u6i0torgJMxywjCLCg55loMQAhOiih3QG5wqNoqvR+3/bVB gggKJrsZJFQNNbj0I0Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 While packing the received management frame in nl80211_send_mgmt() to send to userspace, nest the SMD dynamic context along with the frame message. This shall be used by userspace to transport the context to the target AP MLD for programming the dynamic state of the STA session for seamless roaming as part of SMD BSS Transition. Suggested-by: Jouni Malinen Co-developed-by: Aditya Sathish Signed-off-by: Aditya Sathish Signed-off-by: Pooventhiran G --- net/wireless/nl80211.c | 269 +++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 268 insertions(+), 1 deletion(-) diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index d59f0eb40493..5065dc75b0bc 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -19568,6 +19568,265 @@ nl80211_epcs_cfg(struct sk_buff *skb, struct genl= _info *info) return rdev_set_epcs(rdev, dev, val); } =20 +static size_t _nl80211_smd_ctx_nl_ba_param_size(void) +{ + size_t n =3D 0; + + n +=3D nla_total_size(0); /* ba_params nest header */ + n +=3D n_dl_tids * (nla_total_size(0) + /* tid nest header */ + nla_total_size(sizeof(u16)) + /* buff_size */ + nla_total_size(sizeof(u8)) + /* policy */ + nla_total_size(0) + /* amsdu_support */ + nla_total_size(sizeof(u16)) + /* timeout */ + nla_total_size(0) + /* ext_no_frag */ + nla_total_size(sizeof(u8)) + /* ext_frag_lvl */ + nla_total_size(sizeof(u16))); /* ext_buff_size */ + + return n; +} + +static size_t +nl80211_smd_ctx_nl_size(struct cfg80211_smd_transition_info *st_info) +{ + const struct ieee80211_smd_ctx *ctx =3D st_info->ctx; + int n_dl_tids =3D 0, n_ul_tids =3D 0; + u8 pn_len =3D ctx->pn_len; + size_t n =3D 0; + + /* count valid TIDs */ + n_dl_tids =3D bitmap_weight(ctx->dl.valid_tid_bmap, + IEEE80211_SMD_CTX_NUM_TIDS); + n_ul_tids =3D bitmap_weight(ctx->ul.valid_tid_bmap, + IEEE80211_SMD_CTX_NUM_TIDS); + + n +=3D nla_total_size(sizeof(u8)); /* ST type */ + + /* outer NL80211_ATTR_SMD_CTX nest */ + n +=3D nla_total_size(0); /* nest header */ + + /* DL nest */ + n +=3D nla_total_size(0); /* DL nest header */ + + n +=3D nla_total_size(sizeof(u8)); /* valid_tid_bitmap */ + + if (test_bit(IEEE80211_SMD_CTX_VALID_DL_SN, ctx->valid_ctx_bmap)) { + n +=3D nla_total_size(0); /* DL SN nest header */ + n +=3D n_dl_tids * nla_total_size(sizeof(u16)); /* DL SN */ + } + + if (test_bit(IEEE80211_SMD_CTX_VALID_PN, ctx->valid_ctx_bmap)) + n +=3D nla_total_size(pn_len); /* DL PN */ + + if (test_bit(IEEE80211_SMD_CTX_VALID_BA_PARAMS, ctx->valid_ctx_bmap)) + n +=3D _nl80211_smd_ctx_nl_ba_param_size(); /* DL BA params */ + + /* UL nest */ + n +=3D nla_total_size(0); /* UL nest header */ + + n +=3D nla_total_size(sizeof(u8)); /* valid_tid_bitmap */ + + if (test_bit(IEEE80211_SMD_CTX_VALID_UL_SN, ctx->valid_ctx_bmap)) { + n +=3D nla_total_size(0); /* UL SN nest header */ + n +=3D n_ul_tids * nla_total_size(sizeof(u16)); /* UL SN */ + } + + if (test_bit(IEEE80211_SMD_CTX_VALID_PN, ctx->valid_ctx_bmap)) { + n +=3D nla_total_size(0); /* UL PN nest header */ + n +=3D n_ul_tids * nla_total_size(pn_len); /* UL PN */ + } + + if (test_bit(IEEE80211_SMD_CTX_VALID_BA_PARAMS, ctx->valid_ctx_bmap)) + n +=3D _nl80211_smd_ctx_nl_ba_param_size(); /* UL BA params */ + + if (ctx->drv_ctx_size) + n +=3D nla_total_size(ctx->drv_ctx_size); /* Driver data */ + + return n; +} + +static int +nl80211_put_smd_ctx_ba_params(struct sk_buff *msg, + const unsigned long *tid_bmap, + const struct ieee80211_smd_ctx_ba *ba_tids, + bool dl) +{ + u32 ba_params_attr =3D NL80211_SMD_CTX_DL_ATTR_BA_PARAMS; + struct nlattr *dl_ul_ba =3D NULL, *tid_ba =3D NULL; + u8 tid; + + if (!dl) + ba_params_attr =3D NL80211_SMD_CTX_UL_ATTR_BA_PARAMS; + + dl_ul_ba =3D nla_nest_start(msg, ba_params_attr); + if (!dl_ul_ba) + return -ENOBUFS; + + for_each_set_bit(tid, tid_bmap, IEEE80211_SMD_CTX_NUM_TIDS) { + const struct ieee80211_smd_ctx_ba *ba =3D &ba_tids[tid]; + + tid_ba =3D nla_nest_start(msg, tid + 1); + if (!tid_ba) + goto nla_fail; + + if (nla_put_u16(msg, NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE, + ba->buffer_size) || + nla_put_u8(msg, NL80211_SMD_CTX_BA_ATTR_POLICY, + ba->ba_policy) || + (ba->amsdu_supported && + nla_put_flag(msg, + NL80211_SMD_CTX_BA_ATTR_AMSDU_SUPPORT)) || + nla_put_u16(msg, NL80211_SMD_CTX_BA_ATTR_TIMEOUT, + ba->timeout) || + (ba->ext_no_frag && + nla_put_flag(msg, NL80211_SMD_CTX_BA_ATTR_EXT_NO_FRAG)) || + nla_put_u8(msg, NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL, + ba->extfrag_level) || + nla_put_u16(msg, NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE, + ba->ext_buffer_size)) { + nla_nest_cancel(msg, tid_ba); + goto nla_fail; + } + + nla_nest_end(msg, tid_ba); + } + + nla_nest_end(msg, dl_ul_ba); + return 0; + +nla_fail: + nla_nest_cancel(msg, dl_ul_ba); + return -ENOBUFS; +} + +static int nl80211_put_smd_ctx(struct sk_buff *msg, + struct cfg80211_smd_transition_info *st_info) +{ + struct nlattr *dl_sn =3D NULL, *ul_sn =3D NULL, *ul_pn =3D NULL; + struct nlattr *smd_ctx =3D NULL, *dl =3D NULL, *ul =3D NULL; + const struct ieee80211_smd_ctx *ctx; + u8 dl_tid_bmap =3D 0, ul_tid_bmap =3D 0; + u8 tid; + + /* ST Type */ + if (nla_put_u8(msg, NL80211_ATTR_SMD_CTX_TYPE, st_info->type)) + return -ENOBUFS; + + smd_ctx =3D nla_nest_start(msg, NL80211_ATTR_SMD_CTX); + if (!smd_ctx) + return -ENOBUFS; + + ctx =3D st_info->ctx; + + /* Build DL context */ + dl_tid_bmap =3D bitmap_read(ctx->dl.valid_tid_bmap, 0, + IEEE80211_SMD_CTX_NUM_TIDS); + + dl =3D nla_nest_start(msg, NL80211_SMD_CTX_ATTR_DL); + if (!dl) + goto nla_fail; + + if (nla_put_u8(msg, NL80211_SMD_CTX_DL_ATTR_VALID_TID_BITMAP, + dl_tid_bmap)) + goto nla_fail_dl; + + if (test_bit(IEEE80211_SMD_CTX_VALID_DL_SN, ctx->valid_ctx_bmap)) { + dl_sn =3D nla_nest_start(msg, NL80211_SMD_CTX_DL_ATTR_SN); + if (!dl_sn) + goto nla_fail_dl; + + for_each_set_bit(tid, ctx->dl.valid_tid_bmap, + IEEE80211_SMD_CTX_NUM_TIDS) { + if (nla_put_u16(msg, tid + 1, ctx->dl.sn[tid])) { + nla_nest_cancel(msg, dl_sn); + goto nla_fail_dl; + } + } + nla_nest_end(msg, dl_sn); + } + + if (test_bit(IEEE80211_SMD_CTX_VALID_PN, ctx->valid_ctx_bmap) && + nla_put(msg, NL80211_SMD_CTX_DL_ATTR_PN, ctx->pn_len, ctx->dl.pn)) + goto nla_fail_dl; + + if (test_bit(IEEE80211_SMD_CTX_VALID_BA_PARAMS, ctx->valid_ctx_bmap) && + nl80211_put_smd_ctx_ba_params(msg, ctx->dl.valid_tid_bmap, + ctx->dl.ba, true)) + goto nla_fail_dl; + + nla_nest_end(msg, dl); + + /* Build UL context */ + ul_tid_bmap =3D bitmap_read(ctx->ul.valid_tid_bmap, 0, + IEEE80211_SMD_CTX_NUM_TIDS); + + ul =3D nla_nest_start(msg, NL80211_SMD_CTX_ATTR_UL); + if (!ul) + goto nla_fail; + + if (nla_put_u8(msg, NL80211_SMD_CTX_UL_ATTR_VALID_TID_BITMAP, + ul_tid_bmap)) + goto nla_fail_ul; + + if (test_bit(IEEE80211_SMD_CTX_VALID_UL_SN, ctx->valid_ctx_bmap)) { + ul_sn =3D nla_nest_start(msg, NL80211_SMD_CTX_UL_ATTR_SN); + if (!ul_sn) + goto nla_fail_ul; + + for_each_set_bit(tid, ctx->ul.valid_tid_bmap, + IEEE80211_SMD_CTX_NUM_TIDS) { + if (nla_put_u16(msg, tid + 1, ctx->ul.sn[tid])) { + nla_nest_cancel(msg, ul_sn); + goto nla_fail_ul; + } + } + nla_nest_end(msg, ul_sn); + } + + if (ctx->pn_len && + test_bit(IEEE80211_SMD_CTX_VALID_PN, ctx->valid_ctx_bmap)) { + ul_pn =3D nla_nest_start(msg, NL80211_SMD_CTX_UL_ATTR_PN); + if (!ul_pn) + goto nla_fail_ul; + + for_each_set_bit(tid, ctx->ul.valid_tid_bmap, + IEEE80211_SMD_CTX_NUM_TIDS) { + if (nla_put(msg, tid + 1, ctx->pn_len, + ctx->ul.pn[tid])) { + nla_nest_cancel(msg, ul_pn); + goto nla_fail_ul; + } + } + nla_nest_end(msg, ul_pn); + } + + if (test_bit(IEEE80211_SMD_CTX_VALID_BA_PARAMS, ctx->valid_ctx_bmap) && + nl80211_put_smd_ctx_ba_params(msg, ctx->ul.valid_tid_bmap, + ctx->ul.ba, false)) + goto nla_fail_ul; + + nla_nest_end(msg, ul); + + /* Driver data blob */ + if (ctx->drv_ctx_size && + nla_put(msg, NL80211_SMD_CTX_ATTR_DRV_DATA, ctx->drv_ctx_size, + ctx->drv_ctx)) + goto nla_fail; + + nla_nest_end(msg, smd_ctx); + + return 0; + +nla_fail_ul: + nla_nest_cancel(msg, ul); + +nla_fail_dl: + nla_nest_cancel(msg, dl); + +nla_fail: + nla_nest_cancel(msg, smd_ctx); + return -EINVAL; +} + #define NL80211_FLAG_NEED_WIPHY 0x01 #define NL80211_FLAG_NEED_NETDEV 0x02 #define NL80211_FLAG_NEED_RTNL 0x04 @@ -22193,10 +22452,14 @@ int nl80211_send_mgmt(struct cfg80211_registered_= device *rdev, struct cfg80211_rx_info *info, gfp_t gfp) { struct net_device *netdev =3D wdev->netdev; + int st_roaming_data_len =3D 0; struct sk_buff *msg; void *hdr; =20 - msg =3D nlmsg_new(100 + info->len, gfp); + if (info->st_info.ctx) + st_roaming_data_len =3D nl80211_smd_ctx_nl_size(&info->st_info); + + msg =3D nlmsg_new(100 + info->len + st_roaming_data_len, gfp); if (!msg) return -ENOMEM; =20 @@ -22230,6 +22493,10 @@ int nl80211_send_mgmt(struct cfg80211_registered_d= evice *rdev, NL80211_ATTR_PAD))) goto nla_put_failure; =20 + if (st_roaming_data_len && + nl80211_put_smd_ctx(msg, &info->st_info)) + goto nla_put_failure; + genlmsg_end(msg, hdr); =20 return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3F3459C982 for ; Tue, 8 Sep 2026 17:11:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887472; cv=none; b=A1jYXXjCVcduicqPCCJNO+7zihw/d0KrDx8IrpzFKB6aF9AJvIMsSWu524LO9luMCTD2xsTg12bizSzmNYtCnOQFxok5GQTxiUl9LbUZbchtc8UPx3edOC62wzgj83Ap0Eq73EZTR5wRgMC2qlrrZGVdpIarqx2/AYpCBTmz3tU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887472; c=relaxed/simple; bh=koNnvwZa0vK3Gfgf+JGtHxqQbGSq5YiRRM9pn+/Ijsc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=U2Tok0IW67sfckhbjbnH0HUTSoWnuYKsGXF8pVnvfjPdTps5oCxleRQ/UVrBCdOPUE+tISECo7wQZ7u3ujE2DkBp2dEaLBkdQotleaJfDm6iN39iHaLLFg02yT0uy4y+vbB6zSC3puP/V6/BR0i4ZdlpV8Kck5sDvPSn8tKDciE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=bUPi/XLd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GRuqE2uG; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="bUPi/XLd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GRuqE2uG" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FeLeN3324735 for ; Tue, 8 Sep 2026 17:11:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= zLlnTeI0ddtuhwizLW1JQhzy8jPGbUL1WY3U9N/wbPI=; b=bUPi/XLdNxKaFwEH hvsr+6c5chz2ilZToWg5jm+r34nDWUwzg9dkj2eNkYtophBnEp7BkeMKzgzaq1dJ FOKH0L4xj9HCsRxgQ5dRpq/Ryd52w7Ff0JVtnXACL1/7Lp4a9IoW+4EVecm6hAdo ql6eZtg/c1u9Ot/KlRtNEf4zzVezfO3ejaENA9XKWOvaI0G/5NzYLqjGVlkE4z2O yMm39EWUc4dMKUdZ3EELDddsbNtekaoZm3P8aoq0GXt9QXdDTxS8AxYdYnOBo6e1 OatEOoCBT71pspK+uwxf1QTpwEp/CCuDwmmiPMNnQxzuH40FOwsTD503IZImTkIQ i9qi0A== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjf1cj9y7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:11:08 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-39aee9b4cf2so7562469a91.0 for ; Tue, 08 Sep 2026 10:11:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887467; x=1789492267; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=zLlnTeI0ddtuhwizLW1JQhzy8jPGbUL1WY3U9N/wbPI=; b=GRuqE2uGtt/6AudgC2dnq8TAUQn9uH9XHpP2TouZNVRawf/bIw4kSLAigAcq/rXvtm HWa2grzzVl1LECYYDZOHIn+GCGNTaSZqvH941Aw6kexnB6fB6DuhKiPJ6gpB3Bq2KM6b T3yHvpXNYG2x+Vy2sZRQ/g1dt/S+kbWslSz+S59BdMcugtflIl48WpirUl+aheeizmcE wFXpAAAljAgYj4hlKs72jUZtInOHuAi0wAmtW9s0aas80o6OZuwqdIQ8cv3jwVvkQhl/ jm407VwLxG5UJsEzMtFmjy0LbCULllTtYq1HdYmH4H6NZaWXWy98jSyYNIijeJR+9QQN YAbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887467; x=1789492267; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=zLlnTeI0ddtuhwizLW1JQhzy8jPGbUL1WY3U9N/wbPI=; b=szPiysThnby/EuIEEJsMCaouZkvWmu/X6/rNZbsFVSVAjJ/WV617wHobECREBko9U5 BE0w/Q1bebAMCN/eSJTHn3cxGrCPGVY3i0ZQoFkyLNP1VQp3ajtVBGbQ1S0CXvHQzC0Z dYGnuYtY6dkWYkdX4tnfbuCQn/56XaEf/byeSfOjVRHlqFqfoMHxjNYUBRW19WeU+6rY a808TKwlT0CEBx8wfDmw4Aujfnif5xQlqI0TRq9qMzsJ2nRPdukHqct5l3CeCwCZaliY Yps34m7YiVSUU/IM5PE3zwRImnZnD4Oj18aLXQj1zlArwA9W0Q7T8mwHVEVRTrwHbSBi 6Fmw== X-Gm-Message-State: AFuF++l/8dtfDfbxoJtkPQ585XdyzVLsJWwmI+RfB14G0i57DoEYQxCh xQc1mpSnu7OTWrdcvixVn0B0sdvJuQfct9Xthibd1vEvb/Znb66FsEDvPbdsKmeVxkfXrgSJDeU BS0+uZywT08KzG6tTD5Y8McDtuzjlwCHMxEQ6lNzxfQEpmN8cDzdg/InPj9+6Jo7StQ== X-Gm-Gg: AYBFou03W8Wh6hChULEXEWCE7Jy+Em3InVuG3pfnG7T1KHuynbEaoSQkBongYG08Cl7 JiFpS9tmcoeUAHonx7ftFnRzEa1oq2BwEGsuhC4fmxTWSFE2DczKsDL09i19J8uz0vqByUztIW6 5QqwLeSqeMEfvE7DcVeRGWKbHoW8eWFN94VFWQxJQXHOvqWCJqtIwIDrTifVYxfb0cOKdcnD74g UCPT4G2UjOZ9JjOnFNJjRUuPApndTkKNi1zkXXh814IJyOkp2qDucSNdlF6QCvfbCzXO9PN9QR4 BR8mU9BNiL/JkZrvMCRlz1m3BfZuB5QbZOhQ/z2QA7+eCCbigOcYygrJ+L+GYoQUKlfnzhV0gq/ CF6q6JfTN1nLYNGZ2aEAwabm9KbMGIaOyJE/PPUh74C2qaGCvB2riX1U4ZmkZ9ZEaF5/ieWhktF AAwi+X1/o9mg4s5E1wzKIo0Q== X-Received: by 2002:a17:90a:e7cb:b0:398:9bd4:d12 with SMTP id 98e67ed59e1d1-39b2624a3famr44207185a91.17.1788887467016; Tue, 08 Sep 2026 10:11:07 -0700 (PDT) X-Received: by 2002:a17:90a:e7cb:b0:398:9bd4:d12 with SMTP id 98e67ed59e1d1-39b2624a3famr44207104a91.17.1788887466434; Tue, 08 Sep 2026 10:11:06 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.11.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:11:05 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 15/18] wifi: nl80211/cfg80211: Add support for SMD context programming Date: Tue, 8 Sep 2026 22:39:43 +0530 Message-Id: <20260908-smd-v1-15-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=VN3tWdPX c=1 sm=1 tr=0 ts=6aa041ac cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=4KCYKawKnagZyZotmBEA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-ORIG-GUID: XeOF32EKC1TCr8ayHRBJyDAPEI7q-uMQ X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX7H+B0kNJW2y+ jQw2Y3oCRVa6S7cWmMgEqvc9gGTCu+UlNavrY6fUTZRito1/MSHu7vfuPgtDqA+GkCewfnBZZVA uaLVEFrTHz6+F/Nqy/Qoxn7WdBBoPoE= X-Proofpoint-GUID: XeOF32EKC1TCr8ayHRBJyDAPEI7q-uMQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX8Dg6T9DdFIer 5IJaLjC0vcT9aEoXb6wa7GIoTDqVZ0c0eq50rl7mdeoCcfvqWvjRH6FDULFT1h45oVqY9wgqfiR dr79Su9HbyIBkG0D/7uGsHOOS3DPTKvAWcbgIm0uvtMjDdxHrYrg5opWV1ZDkN9uh2upX6gch4h ei2ydbNRUGDaAKkvYzjOPzoe8x8pm2Gd08iJDtTcWnTMyZbkxMMrDCzSdHh8Ky7hq1DeYa9wQB4 oMit4ZlJiRYDOXaBfhkFEmnNI6SbMqmhtv00hEI12uKgaWgK9xHJNUeOj1BnvPzrfkPcxB7jMBw xsjmrFWePkZIL9oEGpN20revD9PaZrOVrdmz1kRciOutvkOH5U/4Cri9JEClM/4nfahQLbBvrm3 W9pmwPglOGvaauJa52zqA6ZYKWBexuLhqTFcmz7nzOlnQ14l4gabFAjUxUsZpPHjMFRh48Xedpo dOsQlb7qcjLGyCpBSmA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 On the target AP MLD to which the STA will be transitioning, the dynamic context collected and sent by the current AP MLD needs to be programmed on the TX and RX queues to enable seamless transition and reception. Such data include Sequence Number (SN), Packet Number (PN), BlockAck sessions, and any driver-specific data. Add nl80211 support to handle NL80211_CMD_SET_SMD_CTX, parse the SMD context attributes, and invoke the cfg80211 operation on the target AP MLD. Signed-off-by: Pooventhiran G --- include/net/cfg80211.h | 7 + net/wireless/nl80211.c | 332 ++++++++++++++++++++++++++++++++++++++++++++= ++++ net/wireless/rdev-ops.h | 14 ++ net/wireless/trace.h | 47 +++++++ 4 files changed, 400 insertions(+) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 7b0f328fec79..b68f5f6837be 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -5329,6 +5329,10 @@ struct cfg80211_smd_transition_info { * * @start_pd: Start the PD interface. * @stop_pd: Stop the PD interface. + * + * @set_smd_ctx: Set UHR SMD context data for the non-AP MLD. @st_info->ct= x is + * freed immediately after this call returns; drivers must copy + * @st_info->ctx if asynchronous processing is required. */ struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); @@ -5707,6 +5711,9 @@ struct cfg80211_ops { bool val); int (*start_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); + int (*set_smd_ctx)(struct wiphy *wiphy, struct wireless_dev *wdev, + const u8 *addr, + struct cfg80211_smd_transition_info *st_info); }; =20 /* diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 5065dc75b0bc..70b8697e5dac 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -19827,6 +19827,293 @@ static int nl80211_put_smd_ctx(struct sk_buff *ms= g, return -EINVAL; } =20 +static int +nl80211_parse_smd_ctx_ba_params(struct nlattr *tb, + struct ieee80211_smd_ctx_ba *ba_tids, + unsigned long *valid_ctx_bmap) +{ + struct nlattr *ba_tb[NL80211_SMD_CTX_BA_ATTR_MAX + 1]; + struct ieee80211_smd_ctx_ba *ba; + struct nlattr *ba_attr; + int n_tids =3D 0; + int rem, tid; + + if (!tb) + return 0; + + nla_for_each_nested(ba_attr, tb, rem) { + tid =3D nla_type(ba_attr) - 1; + if (tid < 0 || tid >=3D IEEE80211_SMD_CTX_NUM_TIDS) + return -EINVAL; + + if (nla_parse_nested(ba_tb, NL80211_SMD_CTX_BA_ATTR_MAX, + ba_attr, nl80211_smd_ctx_ba_policy, + NULL)) + return -EINVAL; + + ba =3D &ba_tids[tid]; + + if (ba_tb[NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE]) + ba->buffer_size =3D + nla_get_u16(ba_tb[NL80211_SMD_CTX_BA_ATTR_BUFF_SIZE]); + + if (ba_tb[NL80211_SMD_CTX_BA_ATTR_POLICY]) + ba->ba_policy =3D + nla_get_u8(ba_tb[NL80211_SMD_CTX_BA_ATTR_POLICY]); + + ba->amsdu_supported =3D + !!ba_tb[NL80211_SMD_CTX_BA_ATTR_AMSDU_SUPPORT]; + + if (ba_tb[NL80211_SMD_CTX_BA_ATTR_TIMEOUT]) + ba->timeout =3D + nla_get_u16(ba_tb[NL80211_SMD_CTX_BA_ATTR_TIMEOUT]); + + ba->ext_no_frag =3D !!ba_tb[NL80211_SMD_CTX_BA_ATTR_EXT_NO_FRAG]; + + if (ba_tb[NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL]) + ba->extfrag_level =3D + nla_get_u8(ba_tb[NL80211_SMD_CTX_BA_ATTR_EXT_FRAG_LEVEL]); + + if (ba_tb[NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE]) + ba->ext_buffer_size =3D + nla_get_u16(ba_tb[NL80211_SMD_CTX_BA_ATTR_EXT_BUFF_SIZE]); + + n_tids++; + } + + if (!n_tids) + return -EINVAL; + + set_bit(IEEE80211_SMD_CTX_VALID_BA_PARAMS, valid_ctx_bmap); + + return 0; +} + +static int nl80211_parse_smd_ctx(struct genl_info *info, + struct cfg80211_smd_transition_info *st_info) +{ + struct nlattr *dl_tb[NL80211_SMD_CTX_DL_ATTR_MAX + 1]; + struct nlattr *ul_tb[NL80211_SMD_CTX_UL_ATTR_MAX + 1]; + struct nlattr *tb[NL80211_SMD_CTX_ATTR_MAX + 1]; + struct ieee80211_smd_ctx *ctx; + struct nlattr *bmap_attr; + size_t drv_ctx_size =3D 0; + + st_info->type =3D nla_get_u8(info->attrs[NL80211_ATTR_SMD_CTX_TYPE]); + + if (nla_parse_nested(tb, NL80211_SMD_CTX_ATTR_MAX, + info->attrs[NL80211_ATTR_SMD_CTX], + nl80211_smd_ctx_policy, NULL)) { + GENL_SET_ERR_MSG(info, "failed to parse SMD context"); + return -EINVAL; + } + + if (tb[NL80211_SMD_CTX_ATTR_DRV_DATA]) + drv_ctx_size =3D nla_len(tb[NL80211_SMD_CTX_ATTR_DRV_DATA]); + + ctx =3D kzalloc(sizeof(*ctx) + drv_ctx_size, GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + st_info->ctx =3D ctx; + + /* DL Context */ + if (tb[NL80211_SMD_CTX_ATTR_DL]) { + struct nlattr *ba_attr; + + if (nla_parse_nested(dl_tb, NL80211_SMD_CTX_DL_ATTR_MAX, + tb[NL80211_SMD_CTX_ATTR_DL], + nl80211_smd_ctx_dl_policy, NULL)) { + GENL_SET_ERR_MSG(info, "failed to parse DL context"); + goto err_free_ctx; + } + + bmap_attr =3D dl_tb[NL80211_SMD_CTX_DL_ATTR_VALID_TID_BITMAP]; + if (bmap_attr) + bitmap_write(ctx->dl.valid_tid_bmap, + nla_get_u8(bmap_attr), + 0, IEEE80211_SMD_CTX_NUM_TIDS); + + if (dl_tb[NL80211_SMD_CTX_DL_ATTR_SN]) { + struct nlattr *sn_attr; + int n_tids =3D 0; + int rem, tid; + + nla_for_each_nested(sn_attr, + dl_tb[NL80211_SMD_CTX_DL_ATTR_SN], + rem) { + tid =3D nla_type(sn_attr) - 1; + if (tid < 0 || + tid >=3D IEEE80211_SMD_CTX_NUM_TIDS) { + GENL_SET_ERR_MSG(info, + "invalid DL SN tid"); + goto err_free_ctx; + } + + if (nla_len(sn_attr) !=3D sizeof(u16)) { + GENL_SET_ERR_MSG(info, + "invalid DL SN len"); + goto err_free_ctx; + } + + ctx->dl.sn[tid] =3D nla_get_u16(sn_attr); + n_tids++; + } + + if (!n_tids) { + GENL_SET_ERR_MSG(info, "empty DL SN nesting"); + goto err_free_ctx; + } + + set_bit(IEEE80211_SMD_CTX_VALID_DL_SN, + ctx->valid_ctx_bmap); + } + + if (dl_tb[NL80211_SMD_CTX_DL_ATTR_PN]) { + const u8 *pn_data =3D + nla_data(dl_tb[NL80211_SMD_CTX_DL_ATTR_PN]); + + ctx->pn_len =3D + nla_len(dl_tb[NL80211_SMD_CTX_DL_ATTR_PN]); + + memcpy(ctx->dl.pn, pn_data, ctx->pn_len); + set_bit(IEEE80211_SMD_CTX_VALID_PN, + ctx->valid_ctx_bmap); + } + + ba_attr =3D dl_tb[NL80211_SMD_CTX_DL_ATTR_BA_PARAMS]; + if (ba_attr && + nl80211_parse_smd_ctx_ba_params(ba_attr, ctx->dl.ba, + ctx->valid_ctx_bmap)) { + GENL_SET_ERR_MSG(info, + "failed to parse DL BlockAck params"); + goto err_free_ctx; + } + } + + /* UL Context */ + if (tb[NL80211_SMD_CTX_ATTR_UL]) { + struct nlattr *ba_attr; + + if (nla_parse_nested(ul_tb, NL80211_SMD_CTX_UL_ATTR_MAX, + tb[NL80211_SMD_CTX_ATTR_UL], + nl80211_smd_ctx_ul_policy, NULL)) { + GENL_SET_ERR_MSG(info, "failed to parse UL context"); + goto err_free_ctx; + } + + bmap_attr =3D ul_tb[NL80211_SMD_CTX_UL_ATTR_VALID_TID_BITMAP]; + if (bmap_attr) + bitmap_write(ctx->ul.valid_tid_bmap, + nla_get_u8(bmap_attr), + 0, IEEE80211_SMD_CTX_NUM_TIDS); + + if (ul_tb[NL80211_SMD_CTX_UL_ATTR_SN]) { + struct nlattr *sn_attr; + int n_tids =3D 0; + int rem, tid; + + nla_for_each_nested(sn_attr, + ul_tb[NL80211_SMD_CTX_UL_ATTR_SN], + rem) { + tid =3D nla_type(sn_attr) - 1; + if (tid < 0 || + tid >=3D IEEE80211_SMD_CTX_NUM_TIDS) { + GENL_SET_ERR_MSG(info, + "invalid UL SN tid"); + goto err_free_ctx; + } + + if (nla_len(sn_attr) !=3D sizeof(u16)) { + GENL_SET_ERR_MSG(info, + "invalid UL SN len"); + goto err_free_ctx; + } + + ctx->ul.sn[tid] =3D nla_get_u16(sn_attr); + n_tids++; + } + + if (!n_tids) { + GENL_SET_ERR_MSG(info, "empty UL SN nesting"); + goto err_free_ctx; + } + + set_bit(IEEE80211_SMD_CTX_VALID_UL_SN, + ctx->valid_ctx_bmap); + } + + if (ul_tb[NL80211_SMD_CTX_UL_ATTR_PN]) { + struct nlattr *pn_attr; + int n_tids =3D 0; + int rem, tid; + + nla_for_each_nested(pn_attr, + ul_tb[NL80211_SMD_CTX_UL_ATTR_PN], + rem) { + u8 pn_len; + + tid =3D nla_type(pn_attr) - 1; + if (tid < 0 || + tid >=3D IEEE80211_SMD_CTX_NUM_TIDS) { + GENL_SET_ERR_MSG(info, + "invalid UL PN tid"); + goto err_free_ctx; + } + + /* + * PN length must be the same for all DL and + * UL TIDs. + */ + pn_len =3D nla_len(pn_attr); + if (pn_len > IEEE80211_SMD_CTX_MAX_PN_LEN || + (ctx->pn_len && pn_len !=3D ctx->pn_len)) { + GENL_SET_ERR_MSG(info, + "invalid PN length"); + goto err_free_ctx; + } + ctx->pn_len =3D pn_len; + + memcpy(ctx->ul.pn[tid], nla_data(pn_attr), + ctx->pn_len); + n_tids++; + } + + if (!n_tids) { + GENL_SET_ERR_MSG(info, "empty UL PN nesting"); + goto err_free_ctx; + } + + set_bit(IEEE80211_SMD_CTX_VALID_PN, + ctx->valid_ctx_bmap); + } + + ba_attr =3D ul_tb[NL80211_SMD_CTX_UL_ATTR_BA_PARAMS]; + if (ba_attr && + nl80211_parse_smd_ctx_ba_params(ba_attr, ctx->ul.ba, + ctx->valid_ctx_bmap)) { + GENL_SET_ERR_MSG(info, + "failed to parse UL BlockAck params"); + goto err_free_ctx; + } + } + + /* Driver data */ + if (tb[NL80211_SMD_CTX_ATTR_DRV_DATA]) { + ctx->drv_ctx_size =3D drv_ctx_size; + memcpy(ctx->drv_ctx, + nla_data(tb[NL80211_SMD_CTX_ATTR_DRV_DATA]), + drv_ctx_size); + } + + return 0; + +err_free_ctx: + kfree(ctx); + st_info->ctx =3D NULL; + return -EINVAL; +} + #define NL80211_FLAG_NEED_WIPHY 0x01 #define NL80211_FLAG_NEED_NETDEV 0x02 #define NL80211_FLAG_NEED_RTNL 0x04 @@ -20168,6 +20455,44 @@ static int nl80211_set_sar_specs(struct sk_buff *s= kb, struct genl_info *info) return err; } =20 +static int nl80211_set_smd_ctx(struct sk_buff *skb, struct genl_info *info) +{ + struct cfg80211_registered_device *rdev =3D info->user_ptr[0]; + struct cfg80211_smd_transition_info st_info =3D {}; + struct net_device *dev =3D info->user_ptr[1]; + struct wireless_dev *wdev =3D dev->ieee80211_ptr; + const u8 *addr; + int err; + + if (!rdev->ops->set_smd_ctx) + return -EOPNOTSUPP; + + if (wdev->iftype !=3D NL80211_IFTYPE_AP && + wdev->iftype !=3D NL80211_IFTYPE_AP_VLAN) + return -EINVAL; + + if (!info->attrs[NL80211_ATTR_MLD_ADDR] || + !info->attrs[NL80211_ATTR_SMD_CTX] || + !info->attrs[NL80211_ATTR_SMD_CTX_TYPE]) { + GENL_SET_ERR_MSG(info, "required attributes are missing"); + return -EINVAL; + } + + addr =3D nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]); + + err =3D nl80211_parse_smd_ctx(info, &st_info); + if (err) + return err; + + /* + * Drivers must copy @ctx if processing is deferred after + * returning from this function. + */ + err =3D rdev_set_smd_ctx(rdev, wdev, addr, &st_info); + kfree(st_info.ctx); + return err; +} + #define SELECTOR(__sel, name, value) \ ((__sel) =3D=3D (value)) ? NL80211_IFL_SEL_##name : int __missing_selector(void); @@ -21069,6 +21394,13 @@ static const struct genl_small_ops nl80211_small_o= ps[] =3D { .flags =3D GENL_ADMIN_PERM, .internal_flags =3D IFLAGS(NL80211_FLAG_NEED_WDEV_UP), }, + { + .cmd =3D NL80211_CMD_SET_SMD_CTX, + .doit =3D nl80211_set_smd_ctx, + .flags =3D GENL_UNS_ADMIN_PERM, + .internal_flags =3D IFLAGS(NL80211_FLAG_NEED_NETDEV_UP | + NL80211_FLAG_CLEAR_SKB), + }, }; =20 static struct genl_family nl80211_fam __ro_after_init =3D { diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h index 46849fe8d0b3..d33a969606d7 100644 --- a/net/wireless/rdev-ops.h +++ b/net/wireless/rdev-ops.h @@ -1636,4 +1636,18 @@ rdev_set_epcs(struct cfg80211_registered_device *rde= v, return ret; } =20 +static inline int rdev_set_smd_ctx(struct cfg80211_registered_device *rdev, + struct wireless_dev *wdev, const u8 *addr, + struct cfg80211_smd_transition_info *st_info) +{ + int ret =3D -EOPNOTSUPP; + + trace_rdev_set_smd_ctx(&rdev->wiphy, wdev, addr, st_info); + if (rdev->ops->set_smd_ctx) + ret =3D rdev->ops->set_smd_ctx(&rdev->wiphy, wdev, addr, st_info); + trace_rdev_return_int(&rdev->wiphy, ret); + + return ret; +} + #endif /* __CFG80211_RDEV_OPS */ diff --git a/net/wireless/trace.h b/net/wireless/trace.h index 8c2a91b85c39..6234ceb9ebb1 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h @@ -4405,6 +4405,53 @@ TRACE_EVENT(cfg80211_nan_channel_evac, TP_printk(WDEV_PR_FMT ", " WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT, WDEV_PR_ARG, WIPHY_PR_ARG, CHAN_DEF_PR_ARG) ); + +TRACE_EVENT(rdev_set_smd_ctx, + TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *addr, + struct cfg80211_smd_transition_info *st_info), + + TP_ARGS(wiphy, wdev, addr, st_info), + + TP_STRUCT__entry( + WIPHY_ENTRY + WDEV_ENTRY + MAC_ENTRY(sta_addr) + __field(u8, st_type) + __field(unsigned int, num_tids) + __dynamic_array(unsigned long, tx_tid_bitmap, + BITS_TO_LONGS(IEEE80211_SMD_CTX_NUM_TIDS)) + __dynamic_array(unsigned long, rx_tid_bitmap, + BITS_TO_LONGS(IEEE80211_SMD_CTX_NUM_TIDS)) + ), + + TP_fast_assign( + struct ieee80211_smd_ctx *ctx =3D st_info->ctx; + unsigned long sz; + + WIPHY_ASSIGN; + WDEV_ASSIGN; + MAC_ASSIGN(sta_addr, addr); + __entry->st_type =3D st_info->type; + + __entry->num_tids =3D IEEE80211_SMD_CTX_NUM_TIDS; + sz =3D BITS_TO_LONGS(__entry->num_tids) * sizeof(unsigned long); + + memcpy(__get_dynamic_array(tx_tid_bitmap), + ctx->dl.valid_tid_bmap, sz); + memcpy(__get_dynamic_array(rx_tid_bitmap), + ctx->ul.valid_tid_bmap, sz); + ), + + TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT + ", sta=3D%pM, ST type=3D%u DL TIDs: %*pb, UL TIDs: %*pb", + WIPHY_PR_ARG, WDEV_PR_ARG, __entry->sta_addr, + __entry->st_type, + __entry->num_tids, + (unsigned long *)__get_dynamic_array(tx_tid_bitmap), + __entry->num_tids, + (unsigned long *)__get_dynamic_array(rx_tid_bitmap)) +); + #endif /* !__RDEV_OPS_TRACE || TRACE_HEADER_MULTI_READ */ =20 #undef TRACE_INCLUDE_PATH --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1EDF85908CB for ; Tue, 8 Sep 2026 17:11:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887477; cv=none; b=GRMLKt2iDttjBs1EqJbbqXCQpvLk+5xEnAu9ez4sI/zl2bHiGbqv4XdfdYNAU7la371C3ul92hUnPEZGObnpOh7TVgse9qc8wXI1Nf61yPG9h65qPSM71qwGD8Qkjp5eQrTlblDQPq/5V8eJQpQRSEu2UQb7dcrD8zchuchW44o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887477; c=relaxed/simple; bh=1uMWzUWflebLiT0iHAY0034lgOkn4kH51Nlr0m2TKN8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=SHFxfPsR7G1Bd0Nbwwl/WalNcPlAe34ip9E/x17qd0/OUtZ6jelcaexVTIlDAT2gJpsW7jQE5JcPRAetWn9NO8O/0kwC11jcXUatcvcI1+aNln+oRxb9w6nG6dbEeb6Gg7fcUdbZLMq39AUJ5ddLjAfHUlBGY7sDWi+RU7rA5WY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=L8cWA0Hy; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HklKwvh9; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="L8cWA0Hy"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HklKwvh9" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FdaU82899286 for ; Tue, 8 Sep 2026 17:11:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= DAgmn3n8oR+1sTJOd89f91uGu1zJpklwZxV7NMQTcT0=; b=L8cWA0HyxdfCcJDR ZME9ajAXc016Nj32Is24rfrMh1b4aitmlCc8c5V6CB6MAnahwn+RSqrE3h8CrOgU TUmvvvEsL770Xp0K3W82ZswhECsUtJnGTfq5ZPTikK8NidYuLw2Nc5HSSViQuylE ZXZnJUvtYt1L7Hr5IjhtobfhHu0iLzyDdlUtXw133dEdnhpoUZdw+wBC3i2cMvKJ kY5uZGACwXOcULCSOuNHvM3N2uPub+s0wMb3zDGTUgZQ1MhCe+JiPhqvVyMhhM1v ihZmDmS5xJKWR4v0ZRZcUiwhFkHUpBKPSOa6DFUlRnnK1JHkoDiWJTu3IEwezawF pJuH1g== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcvujvgq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:11:11 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38ec0f510a9so8488026a91.2 for ; Tue, 08 Sep 2026 10:11:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887471; x=1789492271; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=DAgmn3n8oR+1sTJOd89f91uGu1zJpklwZxV7NMQTcT0=; b=HklKwvh9lQesTQHqKE4Huya3ybjLVMcH2PlnQsJDTaQdAxHpkwjOGj/SxaqFWMGps7 LAGPXvXwiR8bycC9kYzBctTG4549dJLJMJNfvCEibDkiPDVxC2YxFBhDwRxqsqZf5ccm 5MIB6BLoQNDz41Cl8dRJIPaJkJyaus2nk91LorikqtW3gMLDZ10MqZOHku6yCWLWDoiP +JJIzS426iaxqf1ChGf8n1H0J4YAjZo4VY10CEh97+IBhsozCgdETAXMZzBWz/LvxivQ 0nSywvFsfTgS3PpNu8r2eAq2uPcZwSRd6CVNOrvfsQh5zuTG4Oiz6cHcv35zraYShzsJ xL1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887471; x=1789492271; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=DAgmn3n8oR+1sTJOd89f91uGu1zJpklwZxV7NMQTcT0=; b=FuuUFw2xeTKxoMifQcZ2/JBOv2Ys9J4EBdjrtTSzg6arz8crUR+ywnPhVMFAyc/0Oj Q+CyBfj4RQ4WaVVyWEYZxHJR3WsBgNY71jN9Y7Txt59y5Bq0KR/Sjly5JQgOLnNrlVj5 SIxE3OGGA8SSL7e9INRhoZZbvI+5BYtZ9PyErHT1TKbWt9IDBAFdWr3QP4w62hbJ52YQ faZKLEv/RhH5zn7Jq9MIbj5GpPYpHgcrRo1UCoYtG7RYoWXdP/w8mnz8mECxc3Y5SXKa 9TE50q3sWnUKDJgV3BYb0/h4re1YfIU4H82E1VpTU6+7B2MF0Jfw3sg3d4eTRsGNJz0y EO9A== X-Gm-Message-State: AFuF++mom0b6SO/HMNbHiZD42QBQriwkUMknUE8sO5VZpBGMsn2pJ+iR TCYo5MR5QicTKNe/CtK3mKs41D32YJYCRiLjiLHkkTM+5GouQlKV3rqSDzvmvZGtOu0R+5aUbcg YwjqUtYijLSO0O8ITRfvdlm/SXHZPPktydS6oBzavO/gQ9jcQVm77gx1dGxZ+4Sesjyu2byiiZQ == X-Gm-Gg: AYBFou3QkTzHSUdTc0jt4EudYZ1J8+GmhKX8x1XYwew10EnEqgEDFUIQl0BWga3Bges 5SKWIm4ZwYBE3L9CqIf/LkkN2xBGlvEI2OumeDC5QSvJCL1v2TVKUqb2udpj32+qWFze5aa3w9o B9nzt0cwGKDj2AtKd9o7YbO2JVE2xTNVlCPmQtA4cKHL4Rjji0nXbafRzg+MNK+tuiljByYxbwE D+HGPecitwbHikTGM1iq7PDhPgy2aBIzzSxc0qnjAxfN1L/zhePA6KPvGyy7Q047pgMwDDr5ZWV GbSD2fEk/KvQrTfU3r1Une9Fo5vQYxxLkJETlTjbWxwzR4J2yuOTlwDFhJhBOHMz732WzmFzJgF 2lOdLkTx45opVFxAA3Hcgk/KmhpWtYIXAdVdPtXvLcUBO0wByABKARbu5Vz83Ht4vkyJ2FEp8vr FuyIyozEqTqF4bteNsLdXD8A== X-Received: by 2002:a17:90a:dfd0:b0:396:61f1:da5c with SMTP id 98e67ed59e1d1-39b260de667mr45064326a91.4.1788887471116; Tue, 08 Sep 2026 10:11:11 -0700 (PDT) X-Received: by 2002:a17:90a:dfd0:b0:396:61f1:da5c with SMTP id 98e67ed59e1d1-39b260de667mr45064260a91.4.1788887470627; Tue, 08 Sep 2026 10:11:10 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.11.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:11:10 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 16/18] wifi: mac80211: Add mac80211 support to handle NL80211_CMD_SET_SMD_CTX Date: Tue, 8 Sep 2026 22:39:44 +0530 Message-Id: <20260908-smd-v1-16-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=ePkjSnp1 c=1 sm=1 tr=0 ts=6aa041af cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=zHDNONmbSdC_GOYWSZkA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-GUID: u4NkHXPYXliQVEENmLyNkVgRTyKoK1eh X-Proofpoint-ORIG-GUID: u4NkHXPYXliQVEENmLyNkVgRTyKoK1eh X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NiBTYWx0ZWRfX9ZPLM/F2lqPk AkeeS/A2imNBAUL1+KDHcMGepoi+41FuI/AdDu7UB2xLHL7klVxjt2dJmCEWR6pVqpF6eBkyFbS m+Dy6d51NWC3B52+BkEyKsnxTSlbk3vIZcA0PcO1qj0bxoRePgva+WiuOZNoR68h0d79Du3tz7f bzrAQ5sbwc6B7KYEMhEbwGVd19tC95PwjNuHJHvFMJ1dWT3OcnHtNo/s1wsMEFF2AhwAfJAs9ne GCMDLEgqjhGHehgM8FHcJ1fDM44/O3xfPfEr99/UB0VnPuIK2K1bVyht2gk/5YIUVJ1kQBZby3z APJGemoptxpKfqT+WxxvjRdw8eRXZ2NXoXUlZ7S4S70RVJINo9d/k3Yhp/nYTuGcTG2LmZLQmOW cw3ZGFF3x+Yao4bYOW6BRRjqbE5NZ3L32G1GojYCskuFUvcF9tHseBmUF44X7Qrg5pCP/JDX5+m rUK5A4fvFW7NPh7Ftdw== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NiBTYWx0ZWRfX5ONEjHwqdcDE jfSC9lOvJfWO/36EEIUPvbf4z/7sYID9zyg+nwgidxO3+i4YsY1UmuTTLhmg0XChPbmQFBhZl2p ZL76PmoRRISdYRIHy6Ua1Y9/1g3V4XQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080186 cfg80211 accepts NL80211_CMD_SET_SMD_CTX on the target AP MLD for userspace to be able to program the station's dynamic context on the TX and RX queues. Add mac80211 support to handle NL80211_CMD_SET_SMD_CTX in the driver and lower layers so that the context is installed and the target AP MLD is ready to continue data transfer with the non-AP MLD from where it may have left off at the current AP MLD. This enables the seamless roaming facilitation of the SMD BSS Transition procedure. Signed-off-by: Pooventhiran G --- include/net/mac80211.h | 5 +++++ net/mac80211/cfg.c | 24 +++++++++++++++++++++++ net/mac80211/driver-ops.h | 24 +++++++++++++++++++++++ net/mac80211/trace.h | 49 +++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 102 insertions(+) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index b4b1d3db9b19..e0e13f0ed31f 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -4780,6 +4780,8 @@ enum ieee80211_sta_smd_state { * @sta_smd_state: Notifies low level driver about IEEE 802.11bn SMD subst= ate * transition of a station. It must not fail while transitioning down. * The callback can sleep. + * @set_smd_ctx: Set the UHR SMD context for the non-AP MLD. This is used = on + * the target AP MLD side to program dynamic context. */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, @@ -5186,6 +5188,9 @@ struct ieee80211_ops { struct ieee80211_sta *sta, enum ieee80211_sta_smd_state old_state, enum ieee80211_sta_smd_state new_state); + int (*set_smd_ctx)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + struct ieee80211_sta *sta, + struct cfg80211_smd_transition_info *st_info); }; =20 /** diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 0ea8b610a771..268d5f42293a 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -6081,6 +6081,29 @@ ieee80211_set_peer_nan_sched(struct wiphy *wiphy, return ieee80211_nan_set_peer_sched(sdata, sched); } =20 +static int ieee80211_set_smd_ctx(struct wiphy *wiphy, struct wireless_dev = *wdev, + const u8 *addr, + struct cfg80211_smd_transition_info *st_info) +{ + struct ieee80211_local *local =3D wiphy_priv(wiphy); + struct ieee80211_sub_if_data *sdata; + struct sta_info *sta; + + lockdep_assert_wiphy(wiphy); + + sdata =3D IEEE80211_WDEV_TO_SUB_IF(wdev); + + if (sdata->vif.type !=3D NL80211_IFTYPE_AP && + sdata->vif.type !=3D NL80211_IFTYPE_AP_VLAN) + return -EOPNOTSUPP; + + sta =3D sta_info_get_bss(sdata, addr); + if (!sta || !sta->sta.smd_params.smd_sta) + return -EINVAL; + + return drv_set_smd_ctx(local, sdata, &sta->sta, st_info); +} + const struct cfg80211_ops mac80211_config_ops =3D { .add_virtual_intf =3D ieee80211_add_iface, .del_virtual_intf =3D ieee80211_del_iface, @@ -6199,4 +6222,5 @@ const struct cfg80211_ops mac80211_config_ops =3D { .set_epcs =3D ieee80211_set_epcs, .nan_set_local_sched =3D ieee80211_set_local_nan_sched, .nan_set_peer_sched =3D ieee80211_set_peer_nan_sched, + .set_smd_ctx =3D ieee80211_set_smd_ctx, }; diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index ce11a723ec36..e764dd394de2 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -1820,4 +1820,28 @@ int drv_sta_smd_state(struct ieee80211_local *local, enum ieee80211_sta_smd_state old_state, enum ieee80211_sta_smd_state new_state); =20 +static inline int drv_set_smd_ctx(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + struct cfg80211_smd_transition_info *st_info) +{ + int ret; + + if (!local->ops->set_smd_ctx) + return -EOPNOTSUPP; + + sdata =3D get_bss_sdata(sdata); + + lockdep_assert_wiphy(local->hw.wiphy); + + if (!check_sdata_in_driver(sdata)) + return -EIO; + + trace_drv_set_smd_ctx(local, sdata, sta, st_info); + ret =3D local->ops->set_smd_ctx(&local->hw, &sdata->vif, sta, st_info); + trace_drv_return_int(local, ret); + + return ret; +} + #endif /* __MAC80211_DRIVER_OPS */ diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h index 63838a6d5d07..7aba79e441cf 100644 --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h @@ -3438,6 +3438,55 @@ TRACE_EVENT(drv_sta_smd_state, ) ); =20 +TRACE_EVENT(drv_set_smd_ctx, + TP_PROTO(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + struct cfg80211_smd_transition_info *st_info), + + TP_ARGS(local, sdata, sta, st_info), + + TP_STRUCT__entry( + LOCAL_ENTRY + VIF_ENTRY + STA_ENTRY + __field(u8, st_type) + __field(unsigned int, num_tids) + __dynamic_array(unsigned long, dl_tid_bitmap, + BITS_TO_LONGS(IEEE80211_SMD_CTX_NUM_TIDS)) + __dynamic_array(unsigned long, ul_tid_bitmap, + BITS_TO_LONGS(IEEE80211_SMD_CTX_NUM_TIDS)) + ), + + TP_fast_assign( + struct ieee80211_smd_ctx *ctx =3D st_info->ctx; + unsigned long sz; + + LOCAL_ASSIGN; + VIF_ASSIGN; + STA_ASSIGN; + __entry->st_type =3D st_info->type; + + __entry->num_tids =3D IEEE80211_SMD_CTX_NUM_TIDS; + sz =3D BITS_TO_LONGS(__entry->num_tids) * sizeof(unsigned long); + + memcpy(__get_dynamic_array(dl_tid_bitmap), + ctx->dl.valid_tid_bmap, sz); + memcpy(__get_dynamic_array(ul_tid_bitmap), + ctx->ul.valid_tid_bmap, sz); + ), + + TP_printk(LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT + ", ST type=3D%u DL TIDs: %*pb, UL TIDs: %*pb", + LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, + __entry->st_type, + __entry->num_tids, + (unsigned long *)__get_dynamic_array(dl_tid_bitmap), + __entry->num_tids, + (unsigned long *)__get_dynamic_array(ul_tid_bitmap) + ) +); + #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ =20 #undef TRACE_INCLUDE_PATH --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4BD2459D62C for ; Tue, 8 Sep 2026 17:11:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887480; cv=none; b=a6m+YG8AHP4BDbmSUJ0KQapbNfCyToHNEXF5n2/uZT8zrc4LcaHB52A7z0tf9jHWQmiT5JdtQqBF2hOSpgeWmLoTyDE81OFzTf+4IZfgwcbrxZ5mLNBXYsCM3naOA3BkMrYgZlMI1IVuXtO/aK8b9TiYPN3irwoptuFsxFTqGG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887480; c=relaxed/simple; bh=DuVTL7SFSPGn50P5/cLnuDkfUI+vw4dP9jTarQNd3pQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=VA2PR/ajyEaA67lnVvDSwAQ9+/h+CIRtzKG4W2yP+WuvnubvTcxkIMhjvA2E698PLzEWgyzxH4UcFsPv08BKD6H98AzNywvtGPKfBP2JIKDPqTAfv1nuLHVh/s81jmo0B/uQBPXI/K7zZblhCM6ZEujHRExtAsSqz9CePwkrFsU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=h4kBYh7x; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YKfWqlyP; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="h4kBYh7x"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YKfWqlyP" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688FddPe2737653 for ; Tue, 8 Sep 2026 17:11:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= jUEQhFwlbsnMglV+/k9/p+xndCktKv3p9s//lWGSM5g=; b=h4kBYh7x4rlNQvKx UTdjpk1dTVc5cEh4CjnIr/QkGvl+gT3ZW7CBYUgaeXRrz6c29ZPozHY6Bq9yNlcQ lwPsYG0QzrKHWwBU2Yj/MuoGJxM/OC9ArJ/7VdAahjs6+xNGvu6TDU/pRt6uxb4h /KG+ln0mhBA6CFIl11/NOheY49nRBPluHvsWJK2OpluvVvjRe2d/7/omR/MMt6B/ 62gNZzJIJnPpU9I+Qejbs2TWiwGZGbVBMMMmfDMHDGqgsfYTabkzFB7teRscJezX vARVOTT2B9n8YOdRXv1DpCcAgOGaeRBxQxCpTH1tQo9fAqAaOAMGCTz+UNY72z4L nt0EfA== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjatjkdj0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:11:17 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38f5ac7416eso5990247a91.3 for ; Tue, 08 Sep 2026 10:11:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887477; x=1789492277; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=jUEQhFwlbsnMglV+/k9/p+xndCktKv3p9s//lWGSM5g=; b=YKfWqlyPCX+ssqCzT/o3fuklHu3g0DLkHu+PT6SzgExHAksE91Kb1yoA5goDmx8LWq e0BER++2Dkxw/3Aj9x0ePmp33CqPwsNAHjWdswzmPPjuvIPFd/XDdLJ7FwpbiaSQ0AnT Wcd9GPScsDSJrPRsAOUkp9v34Ut1hDWRJudJKZgclOFKoFDlc6OxJuCHAWnAk7FUEbLh 8LDUHTHZvMIySRwF0jSM8oCp2RJNKvrLwbm+2JqwvBSU0sZc7VQ50czi/nNsTycioXmb owBEA7Zyhim6qS1RHQScDHg65Fpjometnv9sSv22O500vnYQ+EROkLKPk7jHFndUFf46 kfAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887477; x=1789492277; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=jUEQhFwlbsnMglV+/k9/p+xndCktKv3p9s//lWGSM5g=; b=ibMtZRJ9NQOUZGkMxlbRjMiV9Xq2eLkcQ/g1wXzv/lmySet3DL+4oQBVbWgGwi70G2 sXmB3jHEkE30ZFuZB0XsOj5JcmV8r1U2tDJUjoXMlltCf8r0mAnZ9L39mbzP6MqYyD35 gV5oOQDZjDkR2+MebsvqLPLE6Fu5BwhLGAoc3tf469sXj5cAUafdc4Ef0OjL53C4yS7l UkrSQCuafxmNv5JHviaiEyoqFO1xMYjcrAm4hpHrGRQzqiQSam1P6j6+pMf5CN7gJHGD oijnvQCOQ28/iCYahRMZtYiBRcaUj1j/iivE2doXMFeG7ZHK5dNB141135TijuapknRS MxfQ== X-Gm-Message-State: AFuF++mp8RfJTsS7kPtI1+KbGwii66Iz0k6ju+WjgP4nBfNrlDysJdQG /u3QGiwEM7Y57YuhSZvkTTFUAzYP91n47KPjZ7KAml7sZPOv0Cr9DLQ1EUHWsZ8QI48rwByYQ9s 4UhR9+s1DrQk4SEN0xB+tlHKQ/9NUnlHEgqLYGY2yksON3BbQWf37ZSOzPPupqjh3lA== X-Gm-Gg: AYBFou2aUbC6P+WXv2GmjDVi03kw7BmecyKDSybrW5Ri8Pr0IYARMPQg4og96oHqjMz 9Y8SmQl2mRXmN/SB7CG96grnA81LI4FAD2dF7s2TZivMedxIcv3ATQtMhm8wO5OsmilzRsyW+MV Jcjf+15Sn7tgNzQe7LfDexKWK2n41eYlUT/KyN+gC9m1rf2llfR+EfrQW94Imuf8KaxotOaC1cS YXI+Xcy70ISyyo99u3sdzBViubfbR8gonQ/cx1z9WMz4nEEWRqLP4nLJo2YGD2FB0qZK0ZeZrc9 gThHlAb4Y7GoMIizI6p1InGhHVNc5qDyuecz6p1qQmPIYjPX7Lv7nfFBbSrAAdq/09XFQ8IGpac i5gTdXuaMYNEr3OWBKZOhIXiySGeBXviO0ZaixM7Qs50Kyg/ifiKbKDTd5K8wVlMeGwoQU2Pplc xlQF8JEhLafUqIYXSRjlJGdA== X-Received: by 2002:a17:90b:3d92:b0:398:bf7e:b267 with SMTP id 98e67ed59e1d1-39b2614df9dmr46647033a91.2.1788887475521; Tue, 08 Sep 2026 10:11:15 -0700 (PDT) X-Received: by 2002:a17:90b:3d92:b0:398:bf7e:b267 with SMTP id 98e67ed59e1d1-39b2614df9dmr46646945a91.2.1788887474859; Tue, 08 Sep 2026 10:11:14 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.11.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:11:14 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 17/18] wifi: nl80211/cfg80211: Add support for querying SMD context for target AP MLD Date: Tue, 8 Sep 2026 22:39:45 +0530 Message-Id: <20260908-smd-v1-17-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NiBTYWx0ZWRfXwfQMRLbJIdTy 69XdFhw+le47ZXf/J3lOyLsLOJqilRuYJFwmzilO/8FgwFatAbFjRLQzYTmfpwonbKfdWhTpVj9 vC5H25itxlEISf3qyyN/koIXJT8rCSA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NiBTYWx0ZWRfXwNxzTEU98XBu AL7ALhQ91xLhGIF20MufSDd8lrCukNbyAFfobRJVDJmiy+IqekmU/lELK44q7oMkd9Ox8q2H326 Qz6bZC0jeO7qTGHdi2OMQnXYbjgjSu/HBy7wqtkUMY5646JolrEpMHznD8y6pLvpOBiXbsP1a0c JB0ZSoshsON2pyPJYsYPn90ZE9R2F89/dm1yyVhxBZE8BPONJimO1tyz/e4W6S08v2WOKwnH+bQ iPeTzDVKqXZ01XKRbDOaKZT8PmhqS9vJESDWFulWhigqmF+3bADTK9XC6TdqTkoknUnI/67ZtFS uAZb/PeWgDAtQyWSJ1fnbemmJ1enrZvR/q03R8dztJLEEBrgFh78CXr+xt6wmHZP9TC2c/FR783 blFfSjRytiXjAERnndTFCt8fPMkouKi91E5ggsROesSwHLWFz6RcpjRM2NWsEN622zlIAxMUCYu OEJFwFPZGgB5YuQPXVw== X-Proofpoint-ORIG-GUID: fD8dB8Y9Ldkox9-SZWxkYmp6mbVh-jRQ X-Authority-Analysis: v=2.4 cv=QrduG1yd c=1 sm=1 tr=0 ts=6aa041b5 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=hdw18t4awISUpvPuE2cA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-GUID: fD8dB8Y9Ldkox9-SZWxkYmp6mbVh-jRQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080186 During SMD BSS Transition (ST), the non-AP MLD that has been prepared with a target AP MLD may send the ST Execution frame directly to the target AP MLD. In such scenarios, the target AP MLD should pull the context from the current AP MLD to program TX and RX queues. Add nl80211 support to handle NL80211_CMD_GET_SMD_CTX, which is sent by userspace of the current AP MLD on behalf of the target AP MLD. This command carries the context type to indicate to the drivers which context needs to be collected. Once the collection is complete, the context is sent back to userspace as an asynchronous multicast event using NL80211_CMD_SMD_CTX_EVENT with full context data carried in NL80211_ATTR_SMD_CTX. Signed-off-by: Pooventhiran G --- include/net/cfg80211.h | 53 ++++++++++++++++++ net/wireless/core.c | 25 +++++++++ net/wireless/mlme.c | 32 +++++++++++ net/wireless/nl80211.c | 143 ++++++++++++++++++++++++++++++++++++++++++++= ++-- net/wireless/nl80211.h | 9 +++ net/wireless/rdev-ops.h | 14 +++++ net/wireless/trace.h | 26 +++++++++ 7 files changed, 298 insertions(+), 4 deletions(-) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index b68f5f6837be..d72d1feb0ae3 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -4898,6 +4898,33 @@ struct cfg80211_smd_transition_info { enum nl80211_smd_ctx_type type; }; =20 +/** + * struct cfg80211_smd_get_ctx_pending - pending async GET_SMD_CTX request + * @list: linkage on wireless_dev::smd_get_ctx_pending_list + * @sta_addr: non-AP MLD address for which context was requested + */ +struct cfg80211_smd_get_ctx_pending { + struct list_head list; + u8 sta_addr[ETH_ALEN]; +}; + +/** + * cfg80211_get_smd_ctx_done - deliver async GET_SMD_CTX result to nl80211 + * @wdev: wireless device that handled the request + * @sta_addr: non-AP MLD address the context was collected for + * @st_info: SMD BSS Transition Info (@st_info or @st_info->ctx may be NUL= L to + * indicate failure) + * + * Called via ieee80211_get_smd_ctx_done after async driver context collec= tion + * completes. Finds the matching pending request and sends a multicast + * %NL80211_CMD_SMD_CTX_EVENT reply to userspace (MLME group). + * + * Return: None + */ +void cfg80211_get_smd_ctx_done(struct wireless_dev *wdev, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info); + /** * struct cfg80211_ops - backend description for wireless configuration * @@ -5333,6 +5360,8 @@ struct cfg80211_smd_transition_info { * @set_smd_ctx: Set UHR SMD context data for the non-AP MLD. @st_info->ct= x is * freed immediately after this call returns; drivers must copy * @st_info->ctx if asynchronous processing is required. + * + * @get_smd_ctx: Get UHR SMD context data for the non-AP MLD. */ struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); @@ -5714,6 +5743,9 @@ struct cfg80211_ops { int (*set_smd_ctx)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *addr, struct cfg80211_smd_transition_info *st_info); + int (*get_smd_ctx)(struct wiphy *wiphy, struct wireless_dev *wdev, + const u8 *addr, + enum nl80211_smd_ctx_type type); }; =20 /* @@ -7286,6 +7318,8 @@ enum ieee80211_ap_reg_power { * @links.cac_time_ms: CAC time in ms * @valid_links: bitmap describing what elements of @links are valid * @radio_mask: Bitmask of radios that this interface is allowed to operat= e on. + * @smd_get_ctx_lock: lock to protect pending get_smd_ctx requests. + * @smd_get_ctx_pending_list: list to track pending get_smd_ctx requests. */ struct wireless_dev { struct wiphy *wiphy; @@ -7405,6 +7439,10 @@ struct wireless_dev { } links[IEEE80211_MLD_MAX_NUM_LINKS]; u16 valid_links; =20 + /* protects @smd_get_ctx_pending_list */ + spinlock_t smd_get_ctx_lock; + struct list_head smd_get_ctx_pending_list; + u32 radio_mask; }; =20 @@ -11081,4 +11119,19 @@ void cfg80211_incumbent_signal_notify(struct wiphy= *wiphy, u32 signal_interference_bitmap, gfp_t gfp); =20 +/** + * cfg80211_free_pending_smd_ctx_req - Free remaining entries in the + * cfg80211_smd_get_ctx_pending list. + * @wdev: wdev that maintains the list + * @addr: if @addr is NULL, drain the entire list; otherwise, drain only t= he + * matching entries + * + * When the current AP MLD requests the station's context, those requests = are + * maintained in a pending list until drivers notify completion. In case t= he + * device is brought down or the station is removed prematurely, free up t= he + * remaining entries in the list. + */ +void cfg80211_free_pending_smd_ctx_req(struct wireless_dev *wdev, + const u8 *addr); + #endif /* __NET_CFG80211_H */ diff --git a/net/wireless/core.c b/net/wireless/core.c index d13310fef691..129af6ba5fda 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -1405,6 +1405,25 @@ void wiphy_rfkill_set_hw_state_reason(struct wiphy *= wiphy, bool blocked, } EXPORT_SYMBOL(wiphy_rfkill_set_hw_state_reason); =20 +void cfg80211_free_pending_smd_ctx_req(struct wireless_dev *wdev, + const u8 *addr) +{ + struct cfg80211_smd_get_ctx_pending *pending, *tmp; + + spin_lock_bh(&wdev->smd_get_ctx_lock); + list_for_each_entry_safe(pending, tmp, + &wdev->smd_get_ctx_pending_list, + list) { + if (!addr || ether_addr_equal(pending->sta_addr, addr)) { + list_del(&pending->list); + kfree(pending); + dev_put(wdev->netdev); + } + } + spin_unlock_bh(&wdev->smd_get_ctx_lock); +} +EXPORT_SYMBOL(cfg80211_free_pending_smd_ctx_req); + static void _cfg80211_unregister_wdev(struct wireless_dev *wdev, bool unregister_netdev) { @@ -1477,6 +1496,10 @@ static void _cfg80211_unregister_wdev(struct wireles= s_dev *wdev, } } =20 + if (wdev->iftype =3D=3D NL80211_IFTYPE_AP || + wdev->iftype =3D=3D NL80211_IFTYPE_AP_VLAN) + cfg80211_free_pending_smd_ctx_req(wdev, NULL); + wdev->connected =3D false; } =20 @@ -1619,6 +1642,8 @@ void cfg80211_init_wdev(struct wireless_dev *wdev) INIT_LIST_HEAD(&wdev->pmsr_list); spin_lock_init(&wdev->pmsr_lock); wiphy_work_init(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk); + spin_lock_init(&wdev->smd_get_ctx_lock); + INIT_LIST_HEAD(&wdev->smd_get_ctx_pending_list); =20 #ifdef CONFIG_CFG80211_WEXT wdev->wext.default_key =3D -1; diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index a0d1cde26f0c..fa60e391f9bc 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c @@ -1475,3 +1475,35 @@ void cfg80211_mlo_reconf_add_done(struct net_device = *dev, nl80211_mlo_reconf_add_done(dev, data); } EXPORT_SYMBOL(cfg80211_mlo_reconf_add_done); + +void cfg80211_get_smd_ctx_done(struct wireless_dev *wdev, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info) +{ + struct cfg80211_smd_get_ctx_pending *pending =3D NULL, *iter; + + spin_lock_bh(&wdev->smd_get_ctx_lock); + list_for_each_entry(iter, &wdev->smd_get_ctx_pending_list, list) { + if (ether_addr_equal(iter->sta_addr, sta_addr)) { + pending =3D iter; + list_del(&pending->list); + break; + } + } + spin_unlock_bh(&wdev->smd_get_ctx_lock); + + if (!pending) { + wiphy_err(wdev->wiphy, + "No pending SMD ctx req for %pM found in %s\n", + sta_addr, __func__); + return; + } + + nl80211_notify_get_smd_ctx_done(wdev, sta_addr, + (st_info && st_info->ctx) ? st_info : + NULL); + + dev_put(wdev->netdev); + kfree(pending); +} +EXPORT_SYMBOL(cfg80211_get_smd_ctx_done); diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 70b8697e5dac..47454ea2983b 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -19585,8 +19585,7 @@ static size_t _nl80211_smd_ctx_nl_ba_param_size(voi= d) return n; } =20 -static size_t -nl80211_smd_ctx_nl_size(struct cfg80211_smd_transition_info *st_info) +size_t nl80211_smd_ctx_nl_size(struct cfg80211_smd_transition_info *st_inf= o) { const struct ieee80211_smd_ctx *ctx =3D st_info->ctx; int n_dl_tids =3D 0, n_ul_tids =3D 0; @@ -19698,8 +19697,8 @@ nl80211_put_smd_ctx_ba_params(struct sk_buff *msg, return -ENOBUFS; } =20 -static int nl80211_put_smd_ctx(struct sk_buff *msg, - struct cfg80211_smd_transition_info *st_info) +int nl80211_put_smd_ctx(struct sk_buff *msg, + struct cfg80211_smd_transition_info *st_info) { struct nlattr *dl_sn =3D NULL, *ul_sn =3D NULL, *ul_pn =3D NULL; struct nlattr *smd_ctx =3D NULL, *dl =3D NULL, *ul =3D NULL; @@ -20493,6 +20492,95 @@ static int nl80211_set_smd_ctx(struct sk_buff *skb= , struct genl_info *info) return err; } =20 +static struct cfg80211_smd_get_ctx_pending * +__cfg80211_get_smd_sta_pending_ctx(struct wireless_dev *wdev, const u8 *ad= dr) +{ + struct cfg80211_smd_get_ctx_pending *pending =3D NULL, *tmp; + + lockdep_assert_held(&wdev->smd_get_ctx_lock); + + list_for_each_entry(tmp, &wdev->smd_get_ctx_pending_list, list) { + if (ether_addr_equal(tmp->sta_addr, addr)) { + pending =3D tmp; + break; + } + } + + return pending; +} + +static int nl80211_get_smd_ctx(struct sk_buff *skb, struct genl_info *info) +{ + struct cfg80211_registered_device *rdev =3D info->user_ptr[0]; + struct net_device *dev =3D info->user_ptr[1]; + struct wireless_dev *wdev =3D dev->ieee80211_ptr; + struct cfg80211_smd_get_ctx_pending *pending; + enum nl80211_smd_ctx_type type; + const u8 *addr =3D NULL; + int err; + + if (!rdev->ops->get_smd_ctx) + return -EOPNOTSUPP; + + if (wdev->iftype !=3D NL80211_IFTYPE_AP && + wdev->iftype !=3D NL80211_IFTYPE_AP_VLAN) + return -EINVAL; + + if (!info->attrs[NL80211_ATTR_MLD_ADDR] || + !info->attrs[NL80211_ATTR_SMD_CTX_TYPE]) { + GENL_SET_ERR_MSG(info, "required attributes are missing"); + return -EINVAL; + } + + addr =3D nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]); + type =3D nla_get_u8(info->attrs[NL80211_ATTR_SMD_CTX_TYPE]); + + spin_lock_bh(&wdev->smd_get_ctx_lock); + if (__cfg80211_get_smd_sta_pending_ctx(wdev, addr)) { + spin_unlock_bh(&wdev->smd_get_ctx_lock); + return -EBUSY; + } + /* + * Concurrent NL80211_CMD_GET_SMD_CTX commands are serialized by + * wiphy_lock in nl80211_pre_doit, so safe to unlock here. + */ + spin_unlock_bh(&wdev->smd_get_ctx_lock); + + pending =3D kzalloc_obj(*pending); + if (!pending) + return -ENOMEM; + + memcpy(pending->sta_addr, addr, ETH_ALEN); + + /* + * Take reference and add to the list before calling the driver to avoid + * race. Upon success, the reference is released in + * cfg80211_get_smd_ctx_done() or the list removal and drain path. + */ + dev_hold(wdev->netdev); + + spin_lock_bh(&wdev->smd_get_ctx_lock); + list_add_tail(&pending->list, &wdev->smd_get_ctx_pending_list); + spin_unlock_bh(&wdev->smd_get_ctx_lock); + + err =3D rdev_get_smd_ctx(rdev, wdev, addr, type); + if (err) { + /* revert upon failure */ + spin_lock_bh(&wdev->smd_get_ctx_lock); + pending =3D __cfg80211_get_smd_sta_pending_ctx(wdev, addr); + if (pending) { + list_del(&pending->list); + kfree(pending); + dev_put(wdev->netdev); + } + spin_unlock_bh(&wdev->smd_get_ctx_lock); + return err; + } + + /* Reply will arrive via cfg80211_get_smd_ctx_done() */ + return 0; +} + #define SELECTOR(__sel, name, value) \ ((__sel) =3D=3D (value)) ? NL80211_IFL_SEL_##name : int __missing_selector(void); @@ -21401,6 +21489,12 @@ static const struct genl_small_ops nl80211_small_o= ps[] =3D { .internal_flags =3D IFLAGS(NL80211_FLAG_NEED_NETDEV_UP | NL80211_FLAG_CLEAR_SKB), }, + { + .cmd =3D NL80211_CMD_GET_SMD_CTX, + .doit =3D nl80211_get_smd_ctx, + .flags =3D GENL_UNS_ADMIN_PERM, + .internal_flags =3D IFLAGS(NL80211_FLAG_NEED_NETDEV_UP), + }, }; =20 static struct genl_family nl80211_fam __ro_after_init =3D { @@ -24426,6 +24520,47 @@ void cfg80211_nan_channel_evac(struct wireless_dev= *wdev, } EXPORT_SYMBOL(cfg80211_nan_channel_evac); =20 +void +nl80211_notify_get_smd_ctx_done(struct wireless_dev *wdev, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info) +{ + struct cfg80211_registered_device *rdev =3D wiphy_to_rdev(wdev->wiphy); + struct net_device *dev =3D wdev->netdev; + size_t msg_len =3D NLMSG_DEFAULT_SIZE; + struct sk_buff *msg; + void *hdr; + + if (st_info && st_info->ctx) + msg_len =3D 100 + nl80211_smd_ctx_nl_size(st_info) + + nla_total_size(ETH_ALEN); /* MLD address */ + + msg =3D nlmsg_new(msg_len, GFP_ATOMIC); + if (!msg) + return; + + hdr =3D nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SMD_CTX_EVENT); + if (!hdr) + goto nla_put_failure; + + if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || + nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || + nla_put(msg, NL80211_ATTR_MLD_ADDR, ETH_ALEN, sta_addr)) + goto nla_put_failure; + + if (st_info && st_info->ctx && nl80211_put_smd_ctx(msg, st_info)) + goto nla_put_failure; + + genlmsg_end(msg, hdr); + + genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, + NL80211_MCGRP_MLME, GFP_ATOMIC); + return; + +nla_put_failure: + nlmsg_free(msg); +} + /* initialisation/exit functions */ =20 int __init nl80211_init(void) diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h index bdb065d14054..26e647dff866 100644 --- a/net/wireless/nl80211.h +++ b/net/wireless/nl80211.h @@ -129,4 +129,13 @@ int nl80211_pmsr_start(struct sk_buff *skb, struct gen= l_info *info); void nl80211_mlo_reconf_add_done(struct net_device *dev, struct cfg80211_mlo_reconf_done_data *data); =20 +void +nl80211_notify_get_smd_ctx_done(struct wireless_dev *wdev, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info); + +size_t nl80211_smd_ctx_nl_size(struct cfg80211_smd_transition_info *st_inf= o); +int nl80211_put_smd_ctx(struct sk_buff *msg, + struct cfg80211_smd_transition_info *st_info); + #endif /* __NET_WIRELESS_NL80211_H */ diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h index d33a969606d7..ab520560f604 100644 --- a/net/wireless/rdev-ops.h +++ b/net/wireless/rdev-ops.h @@ -1650,4 +1650,18 @@ static inline int rdev_set_smd_ctx(struct cfg80211_r= egistered_device *rdev, return ret; } =20 +static inline int rdev_get_smd_ctx(struct cfg80211_registered_device *rdev, + struct wireless_dev *wdev, const u8 *addr, + enum nl80211_smd_ctx_type type) +{ + int ret =3D -EOPNOTSUPP; + + trace_rdev_get_smd_ctx(&rdev->wiphy, wdev, addr, type); + if (rdev->ops->get_smd_ctx) + ret =3D rdev->ops->get_smd_ctx(&rdev->wiphy, wdev, addr, type); + trace_rdev_return_int(&rdev->wiphy, ret); + + return ret; +} + #endif /* __CFG80211_RDEV_OPS */ diff --git a/net/wireless/trace.h b/net/wireless/trace.h index 6234ceb9ebb1..a2662919b8f0 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h @@ -4452,6 +4452,32 @@ TRACE_EVENT(rdev_set_smd_ctx, (unsigned long *)__get_dynamic_array(rx_tid_bitmap)) ); =20 +TRACE_EVENT(rdev_get_smd_ctx, + TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *addr, + enum nl80211_smd_ctx_type type), + + TP_ARGS(wiphy, wdev, addr, type), + + TP_STRUCT__entry( + WIPHY_ENTRY + WDEV_ENTRY + MAC_ENTRY(sta_addr) + __field(u8, st_type) + ), + + TP_fast_assign( + WIPHY_ASSIGN; + WDEV_ASSIGN; + MAC_ASSIGN(sta_addr, addr); + __entry->st_type =3D type; + ), + + TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT + ", sta=3D%pM, ST type=3D%u", + WIPHY_PR_ARG, WDEV_PR_ARG, __entry->sta_addr, + __entry->st_type) +); + #endif /* !__RDEV_OPS_TRACE || TRACE_HEADER_MULTI_READ */ =20 #undef TRACE_INCLUDE_PATH --=20 2.34.1 From nobody Fri Sep 25 20:47:44 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6239F5947FF for ; Tue, 8 Sep 2026 17:11:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887484; cv=none; b=sZD8aVjcBT6ra10By9oPCXE+1f+6jr7ZtxprUaggOU1tVUZB/ORFefS8wh8uKHcU2AUe5lGQ8VwtQDSBi2ODAMmJ7Qyc455xOUF1fDbrazyolcX+e1B9pRmJuGYqES+gWrJnqZwi0YAxkm4qIv1gITkVlDULjz82qrf12fLxrbw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788887484; c=relaxed/simple; bh=FQBKNG1LQN+Or7ubGtjxhGSxqu1NLRi2ZcAg1jgnpUg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Vr875rdbndyA7+3YBEVECYe6kEbFssXlOuA6SjeYFZZF24k3DYHrWiWZSehX4hd9SJOWHK+apzjkkKYarugdPLYqmJmN+oSkHE1grXjtP7UgOFbRn3pQ/ZnDE0r0zVy8ff/63GbCzcyX7ptvML/OhB6webR4eoqRsqU6/uJF314= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=dL6dzzfA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LTnKnzRU; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="dL6dzzfA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LTnKnzRU" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 688Fdi3R3757633 for ; Tue, 8 Sep 2026 17:11:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= tJrfU3MojC9W8Hc4my3vk6BlrKJp8pREKh3Df4ly1FA=; b=dL6dzzfA1/3UOGHu lRKK87nUJ7FTy2n+c0YsbLF1tnsUGy0pbX7aTbb57yuKakuo9OBEGNTDhUuJ2kV4 DdjFf8eBCTYoiiABkLrifRIlYwcH3OV8PE+bRVsLkpaeSOPsibvz7BRRAbY9BjNP ZNIrE3yR2/ZJDzddNPZxTHReJq6/g+FOm0wUdOwR1xFZ0T1/f3jGR3oJmJpKd6Bk 8+70lXJb8o81s+RXcQY74r7HWnVxbLYpUSdwvc4Z52mBjRzxQhEeWMQ0kQjCQXpD TjTJiNsyCCQvs1G979Io3kqwdd4WSl4brDenEFlSn/PBhhw/divyVXu5b1/BUHHJ azwwHg== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gjcv7jy71-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 08 Sep 2026 17:11:20 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc1c62f0d60so6329609a12.1 for ; Tue, 08 Sep 2026 10:11:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788887480; x=1789492280; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tJrfU3MojC9W8Hc4my3vk6BlrKJp8pREKh3Df4ly1FA=; b=LTnKnzRUCYCmBwr84wZA3PKdWXzVNFLuDDjFzg7QwCRAwtLgRh19XxQCxGmiwt+p43 cqhEnGQet/h5Sc5HH153Z09WsMAh8RMCSz2vMkPxOO3wqWw2gepeXn2+1QEnVmRb7OCi q5mfWljleOEKKB1eeVmneZKv/c+1+GmlYXFQtJNXn3vPgajzunQBanArgXJr85TmRrQ7 scBHbtvEjo5qt5behS4CQiUQdhZKHOZ75Ap4zgHs0M2wWhxbg5HQTcbOVJplzj7vsfRh +Y3+kQJgeQt5n3XXx27ub7G7BuIAHljUih1swYqRRxH8dBorL/FqCFlahr+/Ikj8VXIV sR6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788887480; x=1789492280; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tJrfU3MojC9W8Hc4my3vk6BlrKJp8pREKh3Df4ly1FA=; b=DCbIhmlh6PJpSZ81bf+iOUHnKI1Xyef49qvk7sKBLvO+BkQPcSRQsRnPNdgnzTrMaQ O9cMYiHy8KGqtTG61hbmo+kPmVM8/6S9o7h1GkmqHYGPP+1LIoo/sAEsKsOI0qxdtNCN A/JU+ovBF8PpXgOf4tN9cWpQW7Asw68RVUUQvwOmn46sqkhapeWhlD2he4q6+bM+1IUL Ff42SDQgGsDhg/T1GQUy22W1ABgbL8cKM0Udp/iamk7Yv2byV8/1I5Es0sovPE93pho8 +nH0ZYixXkGHXC4HZWdJ0r5k4Hl0+0mneaMzErbG1yQ11UqI3boj994+YwGOR7ZM2RjP Iesg== X-Gm-Message-State: AFuF++k3AbprnC6UK/SRYCznD54W6l3oZcmVPEh1zLo0iO5HW8+5BjzU jzA3yPmEw0hJsKBfS2/5UuKtuiuldc1I2uffk8bgv9GFgfRUrPtStdOg1spfd0ai+OjNv5MHJBi y4AFgbqQT/Mfcas+XLwD7106zmD/dUWJ96qmaC5OPpY1BIgCv8h2DyqNHzYZEU4lr9Q== X-Gm-Gg: AYBFou1V8toA+divk2OO0f+6PNWN4sZ17NG+medKFS0MTF6W1Lx3AnNvA7QRGclvJz5 CZJctgm6Hb+YjJJa/PY2Ib4ervy3Q3WMC+zO8tvOm4vwhWwTFmWbD9NvKUeP+usbov3a2LhMibC F4OP2xBnToCjXZ2TYj4nV9OX2+DRlnICr0YOhMfFY9fv0ykGkGAMZsbDmYhVNmcNXI3/+nenmj+ JlMXvkJZQQYdN6mkkewUxDKcpHsfvVzvGQdVObJ4O+LY0HTS5RpVwYO7vHz8T1eVoUVHdR5sYv3 mp916BUBLVpwWPiH3fLaDQfOeAdjRchZmLV+5cYcoVh+me80kRsBFojBR7W3N7sp/wxGXrlmsrO WYaTtgdwrHoFiXqnr9OX0CqbZL+/t8IreC5hCRMQW9TKqhYCMGinqsk/39E3yeEZma/nbY5SxSE CsUKFl/U9HTIbkqMJD9HtPow== X-Received: by 2002:a05:6a20:c786:b0:3da:9f19:bf2 with SMTP id adf61e73a8af0-3dabb1e8e8dmr1278167637.18.1788887479618; Tue, 08 Sep 2026 10:11:19 -0700 (PDT) X-Received: by 2002:a05:6a20:c786:b0:3da:9f19:bf2 with SMTP id adf61e73a8af0-3dabb1e8e8dmr1278073637.18.1788887479002; Tue, 08 Sep 2026 10:11:19 -0700 (PDT) Received: from hu-pooventh-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33450e140d3sm31773675eec.4.2026.09.08.10.11.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 10:11:18 -0700 (PDT) From: Pooventhiran G To: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Johannes Berg Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, Pooventhiran G Subject: [PATCH RESEND wireless-next 18/18] wifi: mac80211: Add mac80211 support to handle NL80211_CMD_GET_SMD_CTX Date: Tue, 8 Sep 2026 22:39:46 +0530 Message-Id: <20260908-smd-v1-18-9fd2d876a1fb@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> References: <20260908-smd-v1-0-9fd2d876a1fb@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CMEamxrD c=1 sm=1 tr=0 ts=6aa041b8 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=c93CP5vvwBK-QZUl55wA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX8d8PbsgLoz1P rP8kaIwmjc/kP7n1oOabe7yUNchYlE14f+1eGWH/l20Nb0WCT2Qq1MUUqKxBbOt6ZQYAzpsA+mE elL4d1rPhx3jYUnxbHWhlS+dDB4GIjc= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA4MDE4NSBTYWx0ZWRfX0fk/4K3F/CUN FOVEgNqvZ8oZdzHtF4DJ4goAxAUfd5mc3Xc5BRtbbw1WjjfT7oL90NR07KMr/g1OsJvSAh4Cq/5 RZd27Zd8ZlRxvy/juTgrT1w3xadZqmaZTIdHFAFjLyEwhBSS6IS3bsOa30Q2ID1UjDdCoGNnop1 vOtHSXb+frqYWde+Xxk4Q11elHjvxGMbGNnogxWcSsoubMbQncUqLZcaIXKltg2vhAve/8M+dYK WRBXnAYz4QC7ehYWD3jzn3Es2W7ZKklAP2BU/BaSbpsBcIsNmyjdbip97+gV/gTFT6YYef4tljH CGGLOT9We7WjladyaB1sR+BOCg8OOWyZNxAMDYYG6JuRNdpGU2U1uydt+BXai/z6Uo8+uopiPas f8Bs/2lXfGtcIDUVXVPYZmq0gC0kScUm4AlxQoWgacpOjUn/xmYN1Qv0y8t/b78USJvM0j3XYkp q6a5ZDJCN7jYDaww1Rw== X-Proofpoint-ORIG-GUID: dAuwmfOpjIDziS-VmxbenpPuOugzwd8U X-Proofpoint-GUID: dAuwmfOpjIDziS-VmxbenpPuOugzwd8U X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 malwarescore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609080185 cfg80211 supports NL80211_CMD_GET_SMD_CTX from userspace on the current AP MLD to collect the station's context on the target AP MLD's behalf; this context is used by the target AP MLD to program its TX and RX queues to support seamless roaming of the non-AP MLD. Implement the get_smd_ctx cfg80211_op in mac80211 to invoke the driver to collect the requested station context. Because context collection is asynchronous, the driver signals completion later via ieee80211_get_smd_ctx_done(), which packs the collected context into NL80211_CMD_SMD_CTX_EVENT and delivers it to userspace as a multicast event. Signed-off-by: Pooventhiran G --- include/net/mac80211.h | 23 +++++++++++++++++++++++ net/mac80211/cfg.c | 34 ++++++++++++++++++++++++++++++++++ net/mac80211/driver-ops.h | 24 ++++++++++++++++++++++++ net/mac80211/sta_info.c | 6 ++++++ net/mac80211/trace.h | 27 +++++++++++++++++++++++++++ 5 files changed, 114 insertions(+) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index e0e13f0ed31f..f16112e41594 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -2528,6 +2528,21 @@ enum ieee80211_sta_state { IEEE80211_STA_AUTHORIZED, }; =20 +/** + * ieee80211_get_smd_ctx_done - Deliver async get_smd_ctx result to nl80211 + * @vif: virtual interface + * @sta_addr: non-AP MLD address the context was collected for + * @st_info: SMD BSS Transition Info (@st_info or @st_info->ctx may be NUL= L to + * indicate failure). @st_info is owned by the driver. + * + * Called by the driver after the %NL80211_CMD_GET_SMD_CTX context collect= ion + * is complete. mac80211 forwards the result to cfg80211 which finds the p= ending + * nl80211 request and sends reply to userspace. + */ +void ieee80211_get_smd_ctx_done(struct ieee80211_vif *vif, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info); + /** * enum ieee80211_sta_rx_bandwidth - station RX bandwidth * @IEEE80211_STA_RX_BW_20: station can only receive 20 MHz @@ -4782,6 +4797,11 @@ enum ieee80211_sta_smd_state { * The callback can sleep. * @set_smd_ctx: Set the UHR SMD context for the non-AP MLD. This is used = on * the target AP MLD side to program dynamic context. + * @get_smd_ctx: Get the UHR SMD context for the non-AP MLD. This is used = in + * the current AP MLD side on behalf of the target AP MLD to collect + * dynamic context, when the non-AP MLD sends ST Execute frame directly + * to the target. Since the response is asynchronous, the drivers that + * implement this should not store reference to @sta. */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, @@ -5191,6 +5211,9 @@ struct ieee80211_ops { int (*set_smd_ctx)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct cfg80211_smd_transition_info *st_info); + int (*get_smd_ctx)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + struct ieee80211_sta *sta, + enum nl80211_smd_ctx_type type); }; =20 /** diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 268d5f42293a..a33ce96a4752 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -6104,6 +6104,39 @@ static int ieee80211_set_smd_ctx(struct wiphy *wiphy= , struct wireless_dev *wdev, return drv_set_smd_ctx(local, sdata, &sta->sta, st_info); } =20 +static int ieee80211_get_smd_ctx(struct wiphy *wiphy, struct wireless_dev = *wdev, + const u8 *addr, + enum nl80211_smd_ctx_type type) +{ + struct ieee80211_local *local =3D wiphy_priv(wiphy); + struct ieee80211_sub_if_data *sdata; + struct sta_info *sta; + + lockdep_assert_wiphy(wiphy); + + sdata =3D IEEE80211_WDEV_TO_SUB_IF(wdev); + + if (sdata->vif.type !=3D NL80211_IFTYPE_AP && + sdata->vif.type !=3D NL80211_IFTYPE_AP_VLAN) + return -EOPNOTSUPP; + + sta =3D sta_info_get_bss(sdata, addr); + if (!sta || !sta->sta.smd_params.smd_sta) + return -EINVAL; + + return drv_get_smd_ctx(local, sdata, &sta->sta, type); +} + +void ieee80211_get_smd_ctx_done(struct ieee80211_vif *vif, + const u8 *sta_addr, + struct cfg80211_smd_transition_info *st_info) +{ + struct ieee80211_sub_if_data *sdata =3D vif_to_sdata(vif); + + cfg80211_get_smd_ctx_done(&sdata->wdev, sta_addr, st_info); +} +EXPORT_SYMBOL(ieee80211_get_smd_ctx_done); + const struct cfg80211_ops mac80211_config_ops =3D { .add_virtual_intf =3D ieee80211_add_iface, .del_virtual_intf =3D ieee80211_del_iface, @@ -6223,4 +6256,5 @@ const struct cfg80211_ops mac80211_config_ops =3D { .nan_set_local_sched =3D ieee80211_set_local_nan_sched, .nan_set_peer_sched =3D ieee80211_set_peer_nan_sched, .set_smd_ctx =3D ieee80211_set_smd_ctx, + .get_smd_ctx =3D ieee80211_get_smd_ctx, }; diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index e764dd394de2..0339ff71cd4a 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -1844,4 +1844,28 @@ static inline int drv_set_smd_ctx(struct ieee80211_l= ocal *local, return ret; } =20 +static inline int drv_get_smd_ctx(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + enum nl80211_smd_ctx_type type) +{ + int ret; + + if (!sdata || !local->ops->get_smd_ctx) + return -EOPNOTSUPP; + + sdata =3D get_bss_sdata(sdata); + + lockdep_assert_wiphy(local->hw.wiphy); + + if (!check_sdata_in_driver(sdata)) + return -EIO; + + trace_drv_get_smd_ctx(local, sdata, sta, type); + ret =3D local->ops->get_smd_ctx(&local->hw, &sdata->vif, sta, type); + trace_drv_return_int(local, ret); + + return ret; +} + #endif /* __MAC80211_DRIVER_OPS */ diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 5aa6f5b481e3..9ea0a8791289 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1312,6 +1312,7 @@ static int __must_check __sta_info_destroy_part1(stru= ct sta_info *sta) { struct ieee80211_local *local; struct ieee80211_sub_if_data *sdata; + struct wireless_dev *wdev; int ret, i; =20 might_sleep(); @@ -1321,6 +1322,7 @@ static int __must_check __sta_info_destroy_part1(stru= ct sta_info *sta) =20 local =3D sta->local; sdata =3D sta->sdata; + wdev =3D &sdata->wdev; =20 lockdep_assert_wiphy(local->hw.wiphy); =20 @@ -1390,6 +1392,10 @@ static int __must_check __sta_info_destroy_part1(str= uct sta_info *sta) rcu_access_pointer(sdata->u.vlan.sta) =3D=3D sta) RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); =20 + if (sdata->vif.type =3D=3D NL80211_IFTYPE_AP || + sdata->vif.type =3D=3D NL80211_IFTYPE_AP_VLAN) + cfg80211_free_pending_smd_ctx_req(wdev, sta->addr); + return 0; } =20 diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h index 7aba79e441cf..38ad5076232d 100644 --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h @@ -3487,6 +3487,33 @@ TRACE_EVENT(drv_set_smd_ctx, ) ); =20 +TRACE_EVENT(drv_get_smd_ctx, + TP_PROTO(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + struct ieee80211_sta *sta, + enum nl80211_smd_ctx_type type), + + TP_ARGS(local, sdata, sta, type), + + TP_STRUCT__entry( + LOCAL_ENTRY + VIF_ENTRY + STA_ENTRY + __field(u8, st_type) + ), + + TP_fast_assign( + LOCAL_ASSIGN; + VIF_ASSIGN; + STA_ASSIGN; + __entry->st_type =3D type; + ), + + TP_printk(LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT ", ST type=3D%u", + LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->st_type + ) +); + #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ =20 #undef TRACE_INCLUDE_PATH --=20 2.34.1