From patchwork Fri Feb 23 15:14:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lorenzo@kernel.org" X-Patchwork-Id: 1903343 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Gind9URb; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=ru+xs/wS; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ThDBb4nZLz23l1 for ; Sat, 24 Feb 2024 02:16:55 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CeaX0rZvjExGIbVlIiKpI7B/QMIygYFBD07pI7tnIVM=; b=Gind9URbKOyhCk QOH1VGGEU+++/4CRZ/Tkq9l7SCosNn+V3XdaC0EkQ72dXl/NrA+uKwCurwYp82hj4AEQ5APF8dMyU fECbiFr0YAFHvFcGj5w3kCzpx8MkJUt6Pw8/+WuPC/sxJ9Y+IYUe6Q6zXt26l04mHqN4DJH7O2A0u y3C4MyJRC7WBxJCvMRChda8LKm+0QOiaGs2MGZh8lYT7EhsLMfkPj1K8donlBBwjTwOyhWchngF3a JQTYr4ccN/FpgaJ2M+sv90LmupJx03JnfDj46qbAzX3wXPMbCVPAPvJa/ypN7wCc4V+G8Kwuifx6j Z27WnOxQx85cndeB/U4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rdXHQ-00000009w2D-2PNL; Fri, 23 Feb 2024 15:16:04 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rdXGJ-00000009vr1-41v4 for hostap@lists.infradead.org; Fri, 23 Feb 2024 15:15:15 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id BE466CE2C94; Fri, 23 Feb 2024 15:14:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0CFDC43390; Fri, 23 Feb 2024 15:14:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708701286; bh=nnLzITL+JqY87dBJH8Y861oWZPONqLRQGhUzkDOAp2E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ru+xs/wSeSB4O1pCNPzm2kIVvnAINwbNFaqvVHeo9Xr+d13yXuQ3FV74MUzbEPwJ2 UNtUhHWN2tlg7hbmMHz0J9n8Tb+5BAcmIIX4hd+TWN62DL2cnswdhE4EEgE9VR9Lak Nqk+vWgKOsXhqxQQzvqJFVodV+tHd2jR66zFSZ5eKH46S1FREuTi9IZsRYIhXKyMqd QdjgxI0yRnkiKGV/9nb5UUQVRaps6McnK1H5p4g9VfFvHd8Nbskv+7e0dQxSFqIu25 HESeHRyu7+zfBKu1ZKwPJdLgfW9n5DcGYoknuuC8YNiVVGy10joBc1s58j9NJD2s8U KYPpjIJX0vwyQ== From: Lorenzo Bianconi To: hostap@lists.infradead.org Cc: j@w1.fi, lorenzo.bianconi@redhat.com, ryder.lee@mediatek.com, evelyn.tsai@mediatek.com, nbd@nbd.name Subject: [PATCH v2 3/3] hostapd: update TPE IE according to AFC Date: Fri, 23 Feb 2024 16:14:23 +0100 Message-ID: X-Mailer: git-send-email 2.43.2 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240223_071507_089895_443A9850 X-CRM114-Status: GOOD ( 17.00 ) X-Spam-Score: -2.6 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Update Transmit Power Envelope (TPE) IE according to the reply from AFC coordinator on UNII-5 or UNII-7 6GHz bands. Signed-off-by: Lorenzo Bianconi --- src/ap/hostapd.c | 39 +++++++++++++++++++++++++++++++++++++ src/ap/hostapd.h | 2 ++ src/ap/ieee802_11.c | 47 ++++++++++++++++++++++++++++------ [...] Content analysis details: (-2.6 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [145.40.73.55 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 T_SCC_BODY_TEXT_LINE No description available. -0.1 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Update Transmit Power Envelope (TPE) IE according to the reply from AFC coordinator on UNII-5 or UNII-7 6GHz bands. Signed-off-by: Lorenzo Bianconi --- src/ap/hostapd.c | 39 +++++++++++++++++++++++++++++++++++++ src/ap/hostapd.h | 2 ++ src/ap/ieee802_11.c | 47 ++++++++++++++++++++++++++++----------------- 3 files changed, 70 insertions(+), 18 deletions(-) diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index d0ea86811..1b21bf43c 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -4439,6 +4439,45 @@ struct hostapd_data * hostapd_mld_get_link_bss(struct hostapd_data *hapd, #endif /* CONFIG_IEEE80211BE */ +int hostap_afc_get_chan_max_eirp_power(struct hostapd_iface *iface, bool psd, + int *power) +{ +#ifdef CONFIG_AFC + int i; + + if (!he_reg_is_sp(iface->conf->he_6ghz_reg_pwr_type)) + return -EINVAL; + + if (!iface->afc.completed) + return -EINVAL; + + if (psd) { + for (i = 0; i < iface->afc.num_freq_range; i++) { + struct afc_freq_range_elem *f; + + f = &iface->afc.freq_range[i]; + if (iface->freq >= f->low_freq && + iface->freq <= f->high_freq) { + *power = 2 * f->max_psd; + return 0; + } + } + } else { + for (i = 0; i < iface->afc.num_chan_info; i++) { + struct afc_chan_info_elem *c; + + c = &iface->afc.chan_info_list[i]; + if (c->chan == iface->conf->channel) { + *power = 2 * c->power; + return 0; + } + } + } +#endif /* CONFIG_AFC */ + return -EINVAL; +} + + void hostap_afc_disable_channels(struct hostapd_iface *iface) { #ifdef CONFIG_AFC diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index 4b1feb1a8..721f8b6bb 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -703,6 +703,8 @@ struct hostapd_iface { }; /* hostapd.c */ +int hostap_afc_get_chan_max_eirp_power(struct hostapd_iface *iface, bool psd, + int *power); void hostap_afc_disable_channels(struct hostapd_iface *iface); int hostapd_afc_handle_request(struct hostapd_iface *iface); diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index 8b8c1f095..47982d0ec 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -7064,42 +7064,53 @@ u8 * hostapd_eid_txpower_envelope(struct hostapd_data *hapd, u8 *eid) */ if (is_6ghz_op_class(iconf->op_class)) { enum max_tx_pwr_interpretation tx_pwr_intrpn; + int err, max_eirp_psd, max_eirp_power; /* Same Maximum Transmit Power for all 20 MHz bands */ tx_pwr_count = 0; tx_pwr_intrpn = REGULATORY_CLIENT_EIRP_PSD; /* Default Transmit Power Envelope for Global Operating Class */ - if (hapd->iconf->reg_def_cli_eirp_psd != -1) - tx_pwr = hapd->iconf->reg_def_cli_eirp_psd; - else - tx_pwr = REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT * 2; + err = hostap_afc_get_chan_max_eirp_power(iface, true, + &max_eirp_psd); + if (err < 0) { + if (hapd->iconf->reg_def_cli_eirp_psd != -1) + max_eirp_psd = hapd->iconf->reg_def_cli_eirp_psd; + else + max_eirp_psd = REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT * 2; + } eid = hostapd_add_tpe_info(eid, tx_pwr_count, tx_pwr_intrpn, - REG_DEFAULT_CLIENT, tx_pwr); + REG_DEFAULT_CLIENT, max_eirp_psd); /* Indoor Access Point must include an additional TPE for * subordinate devices */ if (he_reg_is_indoor(iconf->he_6ghz_reg_pwr_type)) { - /* TODO: Extract PSD limits from channel data */ - if (hapd->iconf->reg_sub_cli_eirp_psd != -1) - tx_pwr = hapd->iconf->reg_sub_cli_eirp_psd; - else - tx_pwr = REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT * 2; + if (err < 0) { + /* non-AFC connection */ + if (hapd->iconf->reg_sub_cli_eirp_psd != -1) + max_eirp_psd = hapd->iconf->reg_sub_cli_eirp_psd; + else + max_eirp_psd = REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT * 2; + } eid = hostapd_add_tpe_info(eid, tx_pwr_count, tx_pwr_intrpn, REG_SUBORDINATE_CLIENT, - tx_pwr); + max_eirp_psd); } - if (iconf->reg_def_cli_eirp != -1 && - he_reg_is_sp(iconf->he_6ghz_reg_pwr_type)) - eid = hostapd_add_tpe_info( - eid, tx_pwr_count, REGULATORY_CLIENT_EIRP, - REG_DEFAULT_CLIENT, - hapd->iconf->reg_def_cli_eirp); + if (hostap_afc_get_chan_max_eirp_power(iface, false, + &max_eirp_power)) { + max_eirp_power = iconf->reg_def_cli_eirp; + if (max_eirp_power == -1 || + !he_reg_is_sp(iconf->he_6ghz_reg_pwr_type)) + return eid; + } - return eid; + return hostapd_add_tpe_info(eid, tx_pwr_count, + REGULATORY_CLIENT_EIRP, + REG_DEFAULT_CLIENT, + max_eirp_power); } #endif /* CONFIG_IEEE80211AX */