From nobody Wed Feb 26 19:31:52 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 4Z34NT1lPdz5nkpx; Wed, 26 Feb 2025 19:31:53 +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 4Z34NS6jXdz3djf; Wed, 26 Feb 2025 19:31:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740598312; 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=XJn9thu+DglhMzH0Xu2L5D7MUfaZi1q+3qWBJS6PHVk=; b=orfz03ZqSoERVxJp9AHCpg2AypXRdC1iKo4VNSVDUb6hVqxTsaB6yrnFnyTT8UiFw6dDtK qJIKo4N9PGY2QYq09CaOEH2Xwz+ptDM4vbe4j58aCnrzlwDkGWr3toCTmNqmo2rJGnAsGE z9WkifW6whquC6BDfvXYbO4gqXewiP7KrKRI1L0aGA/L0pSV6qHXkROWtB+S8o/A1cXoG2 gRSbxOnMdXvAwKHP9BvGHk9/xPPMJZCflkdDthz4XexBL2ZvF1/ffFK1XulU3yrD1VlLLP 2D7WSE8xkbBdKoQW8OFlMRFEWWcTQ5eni44se8ZcLdlrkKoCLWXdKDS2F26rOA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740598312; a=rsa-sha256; cv=none; b=pTjA0v6ohzjCf5Hjfg/3ShfocdcdJoYqNzuRhtPwci3rlB+2NxETyKgA+OA8C+CC2LFKnC FfO1JFmNIcpf0Ocbltu67AN/UMusuBDl+nrFxlAUrnv/amN2FdP+dfM/6ibmVE+X4hw0M1 VducpAtaF1IHEmtcrOHyw+3+WR2Spk3VxLHSuyMSijxXWa6crwHAO2nWuJbzavtMNfiKFz 5ezUw/EyivRQTEkC2ZTLCcyyeqJlYjtYYO3UzHFEJ7llCjC+L57deeirP9VdzQNsRv85jw 6+T53qUp6SUR1IcViqTFdi8gaHx+qoYXXhf5LN0SmM49aFN8KOeyiiKgiNG+SA== 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=1740598312; 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=XJn9thu+DglhMzH0Xu2L5D7MUfaZi1q+3qWBJS6PHVk=; b=cmggJlsqi0vdI3MRMC65R8ruCngnM8kkqlEsDb5BnMQTlrw4G8nngNvR2BhOxL25kOQhdZ pU1Wz83zcAp+xkxuRFr0xqdMUzjFcthRl3+zaE7gGurt6sTx0D6HokU6Q8E/kXOavXGw8C VwAkeog4jlLiscozGSHOnZWBfXzSYbYUULgfV928pc5PaDotHUW4xJt/BKPWBvVbk1DBTB m+nYZbt2KdkNiLhmetcEWgorWiYCHT7FNjjqbF6XYXbiRbUxCYHD+91PezxP1hsYq+RhPK Bwiu8+YD6WxdOsrz6Rr+9+B/VsZk1RahZA5PTeCJpSlIVkaMKkJeCYf9td9Ikg== 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 4Z34NS62mmz1PYn; Wed, 26 Feb 2025 19:31:52 +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 51QJVq34018999; Wed, 26 Feb 2025 19:31:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51QJVqb8018996; Wed, 26 Feb 2025 19:31:52 GMT (envelope-from git) Date: Wed, 26 Feb 2025 19:31:52 GMT Message-Id: <202502261931.51QJVqb8018996@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: e274a23c0d3d - main - net80211: migrate ieee80211_rate2media() to use ieee80211_node_txrate 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: e274a23c0d3d3c8e9796158029f36e60edf61831 Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=e274a23c0d3d3c8e9796158029f36e60edf61831 commit e274a23c0d3d3c8e9796158029f36e60edf61831 Author: Adrian Chadd AuthorDate: 2025-01-17 02:35:10 +0000 Commit: Adrian Chadd CommitDate: 2025-02-26 19:31:27 +0000 net80211: migrate ieee80211_rate2media() to use ieee80211_node_txrate This is one of the two obvious left-over dot11rate lookups that trigger a debug print. (The other is get_sta_info()). * Change ieee80211_rate2media() to use the passed in ieee80211_node_txrate and use the rate type field to see if it's legacy/ht or vht. * .. and (I hope!) actually handle the VHT rate correctly. * Change the callers of ieee80211_rate2media() to use the new static initialisers. For the one spot in ieee80211_ht.c which uses the HT initialiser, it should just be a straight up mechanical change that correctly sets the HT MCS rate. For the rest of them in ieee80211.c, they're doing table initialisation for the media types / rates, and it's currently very focused on legacy rates. So just leave that all as-is for now with a mechanical change. Differential Revision: https://reviews.freebsd.org/D48615 --- sys/net80211/ieee80211.c | 56 ++++++++++++++++++++++++++++---------------- sys/net80211/ieee80211_ht.c | 5 +++- sys/net80211/ieee80211_var.h | 3 ++- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index eb796462d3d1..9d036f298ed3 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -1949,6 +1949,7 @@ ieee80211_media_setup(struct ieee80211com *ic, enum ieee80211_phymode mode; const struct ieee80211_rateset *rs; struct ieee80211_rateset allrates; + struct ieee80211_node_txrate tn; /* * Fill in media characteristics. @@ -1968,7 +1969,8 @@ ieee80211_media_setup(struct ieee80211com *ic, rs = &ic->ic_sup_rates[mode]; for (i = 0; i < rs->rs_nrates; i++) { rate = rs->rs_rates[i]; - mword = ieee80211_rate2media(ic, rate, mode); + tn = IEEE80211_NODE_TXRATE_INIT_LEGACY(rate); + mword = ieee80211_rate2media(ic, &tn, mode); if (mword == 0) continue; addmedia(media, caps, addsta, mode, mword); @@ -1990,8 +1992,8 @@ ieee80211_media_setup(struct ieee80211com *ic, } } for (i = 0; i < allrates.rs_nrates; i++) { - mword = ieee80211_rate2media(ic, allrates.rs_rates[i], - IEEE80211_MODE_AUTO); + tn = IEEE80211_NODE_TXRATE_INIT_LEGACY(allrates.rs_rates[i]); + mword = ieee80211_rate2media(ic, &tn, IEEE80211_MODE_AUTO); if (mword == 0) continue; /* NB: remove media options from mword */ @@ -2071,6 +2073,7 @@ ieee80211_announce(struct ieee80211com *ic) int i, rate, mword; enum ieee80211_phymode mode; const struct ieee80211_rateset *rs; + struct ieee80211_node_txrate tn; /* NB: skip AUTO since it has no rates */ for (mode = IEEE80211_MODE_AUTO+1; mode < IEEE80211_MODE_11NA; mode++) { @@ -2079,7 +2082,8 @@ ieee80211_announce(struct ieee80211com *ic) ic_printf(ic, "%s rates: ", ieee80211_phymode_name[mode]); rs = &ic->ic_sup_rates[mode]; for (i = 0; i < rs->rs_nrates; i++) { - mword = ieee80211_rate2media(ic, rs->rs_rates[i], mode); + tn = IEEE80211_NODE_TXRATE_INIT_LEGACY(rs->rs_rates[i]); + mword = ieee80211_rate2media(ic, &tn, mode); if (mword == 0) continue; rate = ieee80211_media2rate(mword); @@ -2278,6 +2282,7 @@ ieee80211_media_status(struct ifnet *ifp, struct ifmediareq *imr) struct ieee80211vap *vap = ifp->if_softc; struct ieee80211com *ic = vap->iv_ic; enum ieee80211_phymode mode; + struct ieee80211_node_txrate tn; imr->ifm_status = IFM_AVALID; /* @@ -2299,14 +2304,15 @@ ieee80211_media_status(struct ifnet *ifp, struct ifmediareq *imr) /* * A fixed rate is set, report that. */ - imr->ifm_active |= ieee80211_rate2media(ic, - vap->iv_txparms[mode].ucastrate, mode); + tn = IEEE80211_NODE_TXRATE_INIT_LEGACY( + vap->iv_txparms[mode].ucastrate); + imr->ifm_active |= ieee80211_rate2media(ic, &tn, mode); } else if (vap->iv_opmode == IEEE80211_M_STA) { /* * In station mode report the current transmit rate. */ - imr->ifm_active |= ieee80211_rate2media(ic, - ieee80211_node_get_txrate_dot11rate(vap->iv_bss), mode); + ieee80211_node_get_txrate(vap->iv_bss, &tn); + imr->ifm_active |= ieee80211_rate2media(ic, &tn, mode); } else imr->ifm_active |= IFM_AUTO; if (imr->ifm_status & IFM_ACTIVE) @@ -2399,7 +2405,8 @@ findmedia(const struct ratemedia rates[], int n, u_int match) * or an MCS index. */ int -ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode mode) +ieee80211_rate2media(struct ieee80211com *ic, + const struct ieee80211_node_txrate *tr, enum ieee80211_phymode mode) { static const struct ratemedia rates[] = { { 2 | IFM_IEEE80211_FH, IFM_IEEE80211_FH1 }, @@ -2530,35 +2537,44 @@ ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode m { 11, IFM_IEEE80211_VHT }, #endif }; - int m; + int m, rate; /* * Check 11ac/11n rates first for match as an MCS. */ if (mode == IEEE80211_MODE_VHT_5GHZ) { - if (rate & IFM_IEEE80211_VHT) { - rate &= ~IFM_IEEE80211_VHT; - m = findmedia(vhtrates, nitems(vhtrates), rate); + if (tr->type == IEEE80211_NODE_TXRATE_VHT) { + m = findmedia(vhtrates, nitems(vhtrates), tr->mcs); if (m != IFM_AUTO) return (m | IFM_IEEE80211_VHT); } } else if (mode == IEEE80211_MODE_11NA) { - if (rate & IEEE80211_RATE_MCS) { - rate &= ~IEEE80211_RATE_MCS; - m = findmedia(htrates, nitems(htrates), rate); + /* NB: 12 is ambiguous, it will be treated as an MCS */ + if (tr->type == IEEE80211_NODE_TXRATE_HT) { + m = findmedia(htrates, nitems(htrates), + tr->dot11rate & ~IEEE80211_RATE_MCS); if (m != IFM_AUTO) return m | IFM_IEEE80211_11NA; } } else if (mode == IEEE80211_MODE_11NG) { /* NB: 12 is ambiguous, it will be treated as an MCS */ - if (rate & IEEE80211_RATE_MCS) { - rate &= ~IEEE80211_RATE_MCS; - m = findmedia(htrates, nitems(htrates), rate); + if (tr->type == IEEE80211_NODE_TXRATE_HT) { + m = findmedia(htrates, nitems(htrates), + tr->dot11rate & ~IEEE80211_RATE_MCS); if (m != IFM_AUTO) return m | IFM_IEEE80211_11NG; } } - rate &= IEEE80211_RATE_VAL; + + /* + * At this point it needs to be a dot11rate (legacy/HT) for the + * rest of the logic to work. + */ + if ((tr->type != IEEE80211_NODE_TXRATE_LEGACY) && + (tr->type != IEEE80211_NODE_TXRATE_HT)) + return (IFM_AUTO); + rate = tr->dot11rate & IEEE80211_RATE_VAL; + switch (mode) { case IEEE80211_MODE_11A: case IEEE80211_MODE_HALF: /* XXX good 'nuf */ diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index 9e047244cc3b..08912dc8fca2 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -317,9 +317,12 @@ static int ht_getrate(struct ieee80211com *ic, int index, enum ieee80211_phymode mode, int ratetype) { + struct ieee80211_node_txrate tr; int mword, rate; - mword = ieee80211_rate2media(ic, index | IEEE80211_RATE_MCS, mode); + tr = IEEE80211_NODE_TXRATE_INIT_HT(index); + + mword = ieee80211_rate2media(ic, &tr, mode); if (IFM_SUBTYPE(mword) != IFM_IEEE80211_MCS) return (0); switch (ratetype) { diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index 5a0d017bd590..4f3ed5e4a3d8 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -794,7 +794,8 @@ void ieee80211_iterate_coms(ieee80211_com_iter_func *, void *); int ieee80211_media_change(struct ifnet *); void ieee80211_media_status(struct ifnet *, struct ifmediareq *); int ieee80211_ioctl(struct ifnet *, u_long, caddr_t); -int ieee80211_rate2media(struct ieee80211com *, int, +int ieee80211_rate2media(struct ieee80211com *, + const struct ieee80211_node_txrate *, enum ieee80211_phymode); int ieee80211_media2rate(int); int ieee80211_mhz2ieee(u_int, u_int);