From nobody Wed Feb 26 19:31:47 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 4Z34NM4y89z5nl4j; Wed, 26 Feb 2025 19:31:47 +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 4Z34NM25zXz3dc5; Wed, 26 Feb 2025 19:31:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740598307; 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=oDvP8aL56FvIDrRi3fh52p82raU38XdfNqb4Hk33rlw=; b=oaN2v6JPySKvJ9NMvsxoed2ijoeAhs7uiyZD6+5ATskshTZyFQioJTITj7/GM6oDGdIahZ ykx0l2KiX6LfSXCsG7Otc9OX3RUFM4YCI33fw9uFFhPUrCZVJKUW7t+wb0dtbIF4S2yqzu 44SFTrB6yR/knbxDxgl2GSV1xMGs5KjAR25epPkIauZQV7bxYpVreSjbe/IZoduVtQEPzl Pft+0cg+g35Rw3RfA+EP9afiQZlc3HzuDD1lI4R3S2KCswL8shtArAyoG2ZqNf1GWTzXHe DjZf2YzkjsIsXUjpN11WY8HtvKdcIP3bwHnqpY32y7hw/x0QTeOY8/HHgGNtYw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740598307; a=rsa-sha256; cv=none; b=sebjhtjh3yzp4L9V4kVzEhgr9hscCTIDrYDacE0N04nlxbykZgCYq5iGzu8OJE8ctX9y4n KbvWeC1LzlUBnsuZKhd6VVZDDXQyTG22R3FIUCMmlT0luP508ZhU3W8e4B3h0vn7qqFRGF jru+XnbRlGP1dVH1WzuloJ3YQxB7yK64pPGEwal4XAeFBxEOKdrCa74iQdGMH1XzWTpkZk bJ7aIyKa2Rf5poJXATMZmnZNAgfcpPdqr/1yZ0fwtnJIejh7ef260RW2u642yvGQSo4jJB EzQz6+8wFmLizgFjCI34G59JClAhiGNw88i2lWbPTiWUcMyggGUQYgm0xE/VZw== 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=1740598307; 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=oDvP8aL56FvIDrRi3fh52p82raU38XdfNqb4Hk33rlw=; b=ssgynmVrXXhL5VMnK3Cd/JFue0wrzw6mWVPnAZcl+sYSh9sHJNThl1BG2x1YPxsfFYksGP vfUyy6P8HsdHm9Ai6KiT50jDSaGUliQpjFRPS4KtHI+5fZ32i3BnSWpNdySTuqvWz41ehj mvkNtSfmSRpJKDnesfJXQgJEFl/+Q+EEetBALufqz5r69pQShM1u2Dou6Cbu6n4KZNvOUm Kd2ObfmXNi2tGJySVt9BK2/PxLjSOHBdi8DeEc9URJyalmtj8OEcEKzVjLvBlFT2MzzUI2 uTTNF3dTD0Fy9075Jj4Zn3n4dLK+CuDLH+QxOzUX1f9jfKYYgZMLMe4AVswq6Q== 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 4Z34NM1Msbz1Pgj; Wed, 26 Feb 2025 19:31:47 +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 51QJVl6L018821; Wed, 26 Feb 2025 19:31:47 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51QJVl8d018818; Wed, 26 Feb 2025 19:31:47 GMT (envelope-from git) Date: Wed, 26 Feb 2025 19:31:47 GMT Message-Id: <202502261931.51QJVl8d018818@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: 078acac88264 - main - net80211: refactor amrr_node_init() into HT and legacy paths 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: 078acac882642ac5c88409d2f3e9d04acdcc63cc Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=078acac882642ac5c88409d2f3e9d04acdcc63cc commit 078acac882642ac5c88409d2f3e9d04acdcc63cc Author: Adrian Chadd AuthorDate: 2025-01-04 02:53:01 +0000 Commit: Adrian Chadd CommitDate: 2025-02-26 19:31:24 +0000 net80211: refactor amrr_node_init() into HT and legacy paths Refactor amrr_node_init() into HT and legacy paths, clean up the printing to be a bit clearer about the selected rates. This is precursor work to setting VHT rates in ni->ni_txrate . Differential Revision: https://reviews.freebsd.org/D48429 --- sys/net80211/ieee80211_amrr.c | 121 +++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 48 deletions(-) diff --git a/sys/net80211/ieee80211_amrr.c b/sys/net80211/ieee80211_amrr.c index 20e90026bfe9..352f8df3a03e 100644 --- a/sys/net80211/ieee80211_amrr.c +++ b/sys/net80211/ieee80211_amrr.c @@ -138,14 +138,79 @@ amrr_deinit(struct ieee80211vap *vap) nrefs--; /* XXX locking */ } +static void +amrr_node_init_ht(struct ieee80211_node *ni) +{ + const struct ieee80211_rateset *rs; + struct ieee80211_amrr_node *amn = ni->ni_rctls; + uint8_t rate; /* dot11rate */ + + rs = (struct ieee80211_rateset *) &ni->ni_htrates; + /* Initial rate - lowest */ + rate = rs->rs_rates[0]; + + /* Pick something low that's likely to succeed */ + for (amn->amn_rix = rs->rs_nrates - 1; amn->amn_rix > 0; + amn->amn_rix--) { + /* 11n - stop at MCS4 */ + if ((rs->rs_rates[amn->amn_rix] & 0x1f) < 4) + break; + } + rate = rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL; + + /* Ensure the MCS bit is set */ + rate |= IEEE80211_RATE_MCS; + + /* Assign initial rate from the rateset */ + ieee80211_node_set_txrate_dot11rate(ni, rate); + + /* XXX TODO: we really need a rate-to-string method */ + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "AMRR: nrates=%d, initial rate MCS %d", + rs->rs_nrates, + (rate & IEEE80211_RATE_VAL)); +} + +static void +amrr_node_init_legacy(struct ieee80211_node *ni) +{ + const struct ieee80211_rateset *rs; + struct ieee80211_amrr_node *amn = ni->ni_rctls; + uint8_t rate; /* dot11rate */ + + rs = &ni->ni_rates; + /* Initial rate - lowest */ + rate = rs->rs_rates[0]; + + /* Clear the basic rate flag if it's not 11n */ + rate &= IEEE80211_RATE_VAL; + + /* Pick something low that's likely to succeed */ + for (amn->amn_rix = rs->rs_nrates - 1; amn->amn_rix > 0; + amn->amn_rix--) { + /* legacy - anything < 36mbit, stop searching */ + if ((rs->rs_rates[amn->amn_rix] & + IEEE80211_RATE_VAL) <= 72) + break; + } + rate = rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL; + + /* Assign initial rate from the rateset */ + ieee80211_node_set_txrate_dot11rate(ni, rate); + + /* XXX TODO: we really need a rate-to-string method */ + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "AMRR: nrates=%d, initial rate %d Mb", + rs->rs_nrates, + (rate & IEEE80211_RATE_VAL) / 2); +} + static void amrr_node_init(struct ieee80211_node *ni) { - const struct ieee80211_rateset *rs = NULL; struct ieee80211vap *vap = ni->ni_vap; struct ieee80211_amrr *amrr = vap->iv_rs; struct ieee80211_amrr_node *amn; - uint8_t rate; if (!amrr) { if_printf(vap->iv_ifp, "ratectl structure was not allocated, " @@ -163,60 +228,20 @@ amrr_node_init(struct ieee80211_node *ni) } } else amn = ni->ni_rctls; + + /* Common state */ amn->amn_amrr = amrr; amn->amn_success = 0; amn->amn_recovery = 0; amn->amn_txcnt = amn->amn_retrycnt = 0; amn->amn_success_threshold = amrr->amrr_min_success_threshold; + amn->amn_ticks = ticks; /* 11n or not? Pick the right rateset */ - if (ieee80211_ht_check_tx_ht(ni)) { - /* XXX ew */ - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: 11n node", __func__); - rs = (struct ieee80211_rateset *) &ni->ni_htrates; - } else { - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "%s: non-11n node", __func__); - rs = &ni->ni_rates; - } - - /* Initial rate - lowest */ - rate = rs->rs_rates[0]; - - /* XXX clear the basic rate flag if it's not 11n */ - if (! ieee80211_ht_check_tx_ht(ni)) - rate &= IEEE80211_RATE_VAL; - - /* pick initial rate from the rateset - HT or otherwise */ - /* Pick something low that's likely to succeed */ - for (amn->amn_rix = rs->rs_nrates - 1; amn->amn_rix > 0; - amn->amn_rix--) { - /* legacy - anything < 36mbit, stop searching */ - /* 11n - stop at MCS4 */ - if (ieee80211_ht_check_tx_ht(ni)) { - if ((rs->rs_rates[amn->amn_rix] & 0x1f) < 4) - break; - } else if ((rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL) <= 72) - break; - } - rate = rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL; - - /* if the rate is an 11n rate, ensure the MCS bit is set */ if (ieee80211_ht_check_tx_ht(ni)) - rate |= IEEE80211_RATE_MCS; - - /* Assign initial rate from the rateset */ - ieee80211_node_set_txrate_dot11rate(ni, rate); - amn->amn_ticks = ticks; - - /* XXX TODO: we really need a rate-to-string method */ - /* XXX TODO: non-11n rate should be divided by two.. */ - IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, - "AMRR: nrates=%d, initial rate %s%d", - rs->rs_nrates, - ieee80211_ht_check_tx_ht(ni) ? "MCS " : "", - rate & IEEE80211_RATE_VAL); + amrr_node_init_ht(ni); + else + amrr_node_init_legacy(ni); } static void