From nobody Wed Feb 26 19:31:44 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Z34NL1lcKz5nksT; Wed, 26 Feb 2025 19:31:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z34NK2djDz3d5y; Wed, 26 Feb 2025 19:31:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740598305; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BIvViSubOXdXcUHNhCySB9O291kV0SEMGEECIM1GLw4=; b=rU5IA5VTD0aUd+qiKaWunbqymp+2zoeUDyt8tVGPu03cTBAvZkreqQBkpwgJmPuTIa0gDS ztjXWJlAgU6JlZaqSIR5LwDOjv2ANwowFu/pp7o7IK7Uc7BWoZ3o6I8tuTSetRH6vmAhUR I2jcpNn/2aXTOv9Mh9sjwPDHq6cr2MMqF4CMNnYqJcs7mLcz+Ua1v6AzoWlQTWg7suhZ+2 SYIRur5hnG7AXnVqv4wNs58Qg8jTM6qQlwv+tTdv5KTluA4zGmUGeI6J9zHncnnk6Z08xo 0bB2Qif5y+/UtJEEC1/PdowXLS40NR0u54ePXpRkuC5UpNemI26mZJivhoenvQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740598305; a=rsa-sha256; cv=none; b=hWxSM+wlaTQb0NkcYDbR2F5MHHVXniUYyPqlcX3q9K8Q3qjdlxf2f+C9QSDRuFknPk6Qo0 iCXBTE57K096hG3iOQPBIR794Uob06kKfP4PtCP8frHs5kL/UeEIczliBJt/CiUTFN+R71 SvuuZVUMD7Kn3fxQczSSBqO72FPfDZs0ADkbkcpu2dsyGtOz+oPklo4NzNDCtGrgHVtLPU MlCAPjMryuntgxjjD9dr+G1RvRIBSKnd53dDfenmHkr2HEbaI9337FvtQT0kUDpRaq5olr khEPd51lUEfRWENeg/5+qnWAVi84XkYe0irEGNg+m2ZJ/aqZRcOn8UO1aKPHGg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740598305; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BIvViSubOXdXcUHNhCySB9O291kV0SEMGEECIM1GLw4=; b=LsqYkPHpNh5UuFrGjyxEj5Q6HBSClVjQAFaMaKUuSYuxom/CglLLdbxCgQzSIty/dQK1Gn LU7AVaWL2eDO2281dMlGnulgcKYxkZW3pTHb8QUd6wonPX57mNv7BKtr3vsdE1r9uzjl0w Tg5W7QHorxo90ltxb4nlRKZuwYc/qHyLLq//FIK2nw8wcWUePpslY/FihmwuqgMnGuIkXP oDguyYXb4hZQVkFG9efybs2o9m4ic7fPmsx26/8ppw3Ei8JHc1fucCtrgaJB57hduEBTj3 hpdlJwoDxPdouhsa/PP4BQkbsl9pQj/r8T31m6IrqpkJox18hdOLWsJ0Ngq2rg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z34NK0ST7z1P70; Wed, 26 Feb 2025 19:31:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51QJVi8Q017800; Wed, 26 Feb 2025 19:31:44 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51QJVi5i017797; Wed, 26 Feb 2025 19:31:44 GMT (envelope-from git) Date: Wed, 26 Feb 2025 19:31:44 GMT Message-Id: <202502261931.51QJVi5i017797@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: 7b0e3c5b2b74 - main - net80211: add ieee80211_vht_node_check_tx_valid_mcs() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7b0e3c5b2b74f6e249d2820dbac6e420338bd226 Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=7b0e3c5b2b74f6e249d2820dbac6e420338bd226 commit 7b0e3c5b2b74f6e249d2820dbac6e420338bd226 Author: Adrian Chadd AuthorDate: 2025-01-23 02:18:07 +0000 Commit: Adrian Chadd CommitDate: 2025-02-26 19:31:02 +0000 net80211: add ieee80211_vht_node_check_tx_valid_mcs() Introduce ieee80211_vht_node_check_tx_valid_mcs(), which takes the node, bandwidth, NSS and MCS and validates whether that is possible to TX to the given node. Differential Revision: https://reviews.freebsd.org/D48610 Reviewed by: bz, thj --- sys/net80211/ieee80211_vht.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ sys/net80211/ieee80211_vht.h | 2 ++ 2 files changed, 51 insertions(+) diff --git a/sys/net80211/ieee80211_vht.c b/sys/net80211/ieee80211_vht.c index e704e0cbd176..703447945845 100644 --- a/sys/net80211/ieee80211_vht.c +++ b/sys/net80211/ieee80211_vht.c @@ -1061,3 +1061,52 @@ ieee80211_vht_check_tx_bw(const struct ieee80211_node *ni, return (false); } } + +/** + * @brief Check if the given VHT bw/nss/mcs combination is valid + * for the give node. + * + * This checks whether the given VHT bw/nss/mcs is valid based on + * the negotiated rate mask in the node. + * + * @param ni struct ieee80211_node node to check + * @param bw channel bandwidth to check + * @param nss NSS + * @param mcs MCS + * @returns True if this combination is available, false otherwise. + */ +bool +ieee80211_vht_node_check_tx_valid_mcs(const struct ieee80211_node *ni, + enum ieee80211_sta_rx_bw bw, uint8_t nss, uint8_t mcs) +{ + uint8_t mc; + + /* Validate arguments */ + if (nss < 1 || nss > 8) + return (false); + if (mcs > 9) + return (false); + + /* Check our choice of rate is actually valid */ + if (!ieee80211_phy_vht_validate_mcs(bw, nss, mcs)) + return (false); + + /* + * Next, check if the MCS rate is available for the + * given NSS. + */ + mc = ni->ni_vht_tx_map >> (2*(nss-1)) & 0x3; + switch (mc) { + case IEEE80211_VHT_MCS_NOT_SUPPORTED: + /* Not supported at this NSS */ + return (false); + case IEEE80211_VHT_MCS_SUPPORT_0_9: + return (mcs <= 9); + case IEEE80211_VHT_MCS_SUPPORT_0_8: + return (mcs <= 8); + case IEEE80211_VHT_MCS_SUPPORT_0_7: + return (mcs <= 7); + default: + return (false); + } +} diff --git a/sys/net80211/ieee80211_vht.h b/sys/net80211/ieee80211_vht.h index a61804a43059..2964de63c343 100644 --- a/sys/net80211/ieee80211_vht.h +++ b/sys/net80211/ieee80211_vht.h @@ -67,5 +67,7 @@ void ieee80211_vht_get_vhtinfo_ie(struct ieee80211_node *ni, bool ieee80211_vht_check_tx_vht(const struct ieee80211_node *); bool ieee80211_vht_check_tx_bw(const struct ieee80211_node *, enum ieee80211_sta_rx_bw); +bool ieee80211_vht_node_check_tx_valid_mcs(const struct ieee80211_node *, + enum ieee80211_sta_rx_bw bw, uint8_t, uint8_t); #endif /* _NET80211_IEEE80211_VHT_H_ */