From patchwork Mon Feb 15 10:19:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1440436 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=mjRwL0g/; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (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) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DfKrv2m64z9rx8 for ; Mon, 15 Feb 2021 21:21:35 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=z6JiRXOAhAcrGvqgHDfi4tVxMXgHZy/LyEnoVydxrS4=; b=mjRwL0g/PaRe4Y6f6hg/ajysdR 9+g2N+2SQib9fIOUPZ+mUi05+wtDvErsODiurnopRgGDlVB3PmYQtkqHk/E7akpwwgndwFHUytMuw mRcVuPftSsDptV/k7A6DLoALJsrlZ+shCDFoYRGC00PNC47zY78lOXl2wR5mqwnUWtYiW3awwbjeB MB3iYzBB1GJdll6s4Z1bhP1u0b+CKDbyzfFsiz/0vAhsBjjV1rYCFIutZ52WpiLbQG7A5mOiM+6xv GrBXIBt6jK+hvKPUKurXSqXbanL39HpbkGXz9fEqk8K1u/RAoEv/eWYvAvGJj7dBdNrVDMGRjS7fF InIf9Pdw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayc-0002fI-Os; Mon, 15 Feb 2021 10:19:34 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayZ-0002dm-Gq for openwrt-devel@lists.openwrt.org; Mon, 15 Feb 2021 10:19:32 +0000 Received: from [149.224.91.220] (helo=localhost.localdomain) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1lBayV-0002oW-5T; Mon, 15 Feb 2021 11:19:27 +0100 From: John Crispin To: openwrt-devel@lists.openwrt.org Subject: [PATCH 1/4] hostapd: add rts_threshold support Date: Mon, 15 Feb 2021 11:19:18 +0100 Message-Id: <20210215101921.3371799-1-john@phrozen.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210215_051931_816768_6DFCA831 X-CRM114-Status: GOOD ( 11.46 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org Signed-off-by: John Crispin --- package/network/services/hostapd/files/hostapd.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index 45a49b8faa..fb9629170c 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -333,6 +333,8 @@ hostapd_common_add_bss_config() { config_add_boolean multicast_to_unicast per_sta_vif config_add_array hostapd_bss_options + + config_add_int rts_threshold } hostapd_set_vlan_file() { @@ -482,7 +484,7 @@ hostapd_set_bss_options() { bss_load_update_period chan_util_avg_period sae_require_mfp \ multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key skip_inactivity_poll \ airtime_bss_weight airtime_bss_limit airtime_sta_weight \ - multicast_to_unicast per_sta_vif + multicast_to_unicast per_sta_vif rts_threshold set_default isolate 0 set_default maxassoc 0 @@ -503,6 +505,7 @@ hostapd_set_bss_options() { set_default multi_ap 0 set_default airtime_bss_weight 0 set_default airtime_bss_limit 0 + set_default rts_threshold -1 append bss_conf "ctrl_interface=/var/run/hostapd" if [ "$isolate" -gt 0 ]; then @@ -529,6 +532,7 @@ hostapd_set_bss_options() { append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N" append bss_conf "utf8_ssid=$utf8_ssid" "$N" append bss_conf "multi_ap=$multi_ap" "$N" + append bss_conf "rts_threshold=$rts_threshold" "$N" [ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N" From patchwork Mon Feb 15 10:19:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1440437 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=KSx8RVhv; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (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) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DfKrv4d61z9sBy for ; Mon, 15 Feb 2021 21:21:35 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=M4VxmenVLCScokTm2ZS6zDoh66MdQ4qxvJtJvqR4FGg=; b=KSx8RVhvjJXqCorXNw20qY52u qAq0W7eJAXtt4S0LlPd7QsCbCR/ovYcE5tEsKw5YUwvsyv1St4+Y7ofDej2Ev9kSqbQbYaOpBpL5I tstAUz0ROaB9q0igcaShszWLJTBcgDjVUe+Qfr1LEr8bs8rs2PJui+WIuv6Km3sRwdDcTybtM2l6s uJggZPiSas8kMZU0oM37RU734fJp3CYpeu3FiqebvPCigTk9KDMdTbNNu+TB3ZJf2XHo2UFQV1uq4 tp+3JHROTqKFbZ3EjwSvyNBiN7Jk2zOfdywh5Fy+F4IIC2yeRU758FJFtCAqLCgB7qLLbdEGvU2mr Igxh5oQqg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayg-0002ft-I5; Mon, 15 Feb 2021 10:19:38 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayZ-0002dq-HN for openwrt-devel@lists.openwrt.org; Mon, 15 Feb 2021 10:19:33 +0000 Received: from [149.224.91.220] (helo=localhost.localdomain) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1lBayV-0002oW-Lh; Mon, 15 Feb 2021 11:19:27 +0100 From: John Crispin To: openwrt-devel@lists.openwrt.org Subject: [PATCH 2/4] hostapd: add additional radius options Date: Mon, 15 Feb 2021 11:19:19 +0100 Message-Id: <20210215101921.3371799-2-john@phrozen.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210215101921.3371799-1-john@phrozen.org> References: <20210215101921.3371799-1-john@phrozen.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210215_051931_858829_77920698 X-CRM114-Status: GOOD ( 12.53 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org - add functionality to configure RADIUS NAS-Id and Operator-Name - sdd functionality to configure RADIUS accounting interval - enable RADIUS "Chargeable User Identity" Signed-off-by: John Crispin --- .../network/services/hostapd/files/hostapd.sh | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index fb9629170c..1ded08a6f6 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -335,6 +335,9 @@ hostapd_common_add_bss_config() { config_add_array hostapd_bss_options config_add_int rts_threshold + config_add_boolean request_cui + config_add_array radius_auth_req_attr + config_add_array radius_acct_req_attr } hostapd_set_vlan_file() { @@ -462,6 +465,14 @@ append_airtime_sta_weight() { [ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N" } +append_radius_acct_req_attr() { + [ -n "$1" ] && append bss_conf "radius_acct_req_attr=$1" "$N" +} + +append_radius_auth_req_attr() { + [ -n "$1" ] && append bss_conf "radius_auth_req_attr=$1" "$N" +} + hostapd_set_bss_options() { local var="$1" local phy="$2" @@ -551,6 +562,7 @@ hostapd_set_bss_options() { append bss_conf "acct_server_shared_secret=$acct_secret" "$N" [ -n "$acct_interval" ] && \ append bss_conf "radius_acct_interim_interval=$acct_interval" "$N" + json_for_each_item append_radius_acct_req_attr radius_acct_req_attr } case "$auth_type" in @@ -605,7 +617,7 @@ hostapd_set_bss_options() { auth_server auth_secret auth_port \ dae_client dae_secret dae_port \ ownip radius_client_addr \ - eap_reauth_period + eap_reauth_period request_cui # radius can provide VLAN ID for clients vlan_possible=1 @@ -617,7 +629,7 @@ hostapd_set_bss_options() { set_default auth_port 1812 set_default dae_port 3799 - + set_default request_cui 0 append bss_conf "auth_server_addr=$auth_server" "$N" append bss_conf "auth_server_port=$auth_port" "$N" @@ -636,6 +648,8 @@ hostapd_set_bss_options() { append bss_conf "ieee8021x=1" "$N" [ "$eapol_version" -ge "1" -a "$eapol_version" -le "2" ] && append bss_conf "eapol_version=$eapol_version" "$N" + [ "$request_cui" -gt 0 ] && append bss_conf "radius_request_cui=$request_cui" "$N" + json_for_each_item append_radius_auth_req_attr radius_auth_req_attr ;; wep) local wep_keyidx=0 From patchwork Mon Feb 15 10:19:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1440438 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=aKEsfe9e; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (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) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DfKrx6K46z9rx8 for ; Mon, 15 Feb 2021 21:21:37 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=K1rs80gU/b2oXYBPqMhMC1Pi5cW19h5YoBi3XMEE9Dw=; b=aKEsfe9efU5SUxry+Ydgu1GDz VM6ta4lVEJHUmjvbpGh0QXO4Q/MwNLnD2Z+7zDbrgMx1KqDVoQ1HElKFc4k7MyvwHO396skFLi6lr bJiA29dGEcBTr1p8ds4EtworQdTLfm2sskT64qHcdTQESJKW09BP09APijkJ3FSw495ibL20NZC+R 1GgMwXvWY1rP8SkGTHmQFXLNEOT4911e+Jl6pS4Ua7GMSH18VeFrDHCL9JRiVjS0O89tqrr4q2LAq OLVVchYmDURakmyLGZrysGHVHgPEwmLg/LYqcsshkuHMVXXRc6UNUWHNvpLmhJlULZ1coPnuiJ9vq ZFLodew/w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBaye-0002fR-W4; Mon, 15 Feb 2021 10:19:37 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayZ-0002do-Fl for openwrt-devel@lists.openwrt.org; Mon, 15 Feb 2021 10:19:32 +0000 Received: from [149.224.91.220] (helo=localhost.localdomain) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1lBayV-0002oW-RE; Mon, 15 Feb 2021 11:19:27 +0100 From: John Crispin To: openwrt-devel@lists.openwrt.org Subject: [PATCH 3/4] hostapd: add HE support Date: Mon, 15 Feb 2021 11:19:20 +0100 Message-Id: <20210215101921.3371799-3-john@phrozen.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210215101921.3371799-1-john@phrozen.org> References: <20210215101921.3371799-1-john@phrozen.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210215_051931_679169_FFB26433 X-CRM114-Status: GOOD ( 11.38 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org Signed-off-by: John Crispin --- .../network/services/hostapd/files/hostapd.sh | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index 1ded08a6f6..3842aa2b34 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -105,6 +105,8 @@ hostapd_common_add_device_config() { config_add_int airtime_mode + config_add_boolean multiple_bssid rnr_beacon he_co_locate ema + hostapd_add_log_config } @@ -115,7 +117,8 @@ hostapd_prepare_device_config() { local base_cfg= json_get_vars country country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ - acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density + acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \ + multiple_bssid he_co_locate rnr_beacon ema hostapd_set_log_options base_cfg @@ -125,6 +128,10 @@ hostapd_prepare_device_config() { set_default legacy_rates 0 set_default airtime_mode 0 set_default cell_density 0 + set_default multiple_bssid 0 + set_default rnr_beacon 0 + set_default he_co_locate 0 + set_default ema 0 [ -n "$country" ] && { append base_cfg "country_code=$country" "$N" @@ -211,6 +218,10 @@ hostapd_prepare_device_config() { append base_cfg "beacon_int=$beacon_int" "$N" append base_cfg "dtim_period=$dtim_period" "$N" [ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N" + [ "$multiple_bssid" -gt 0 ] && append base_cfg "multiple_bssid=$multiple_bssid" "$N" + [ "$rnr_beacon" -gt 0 ] && append base_cfg "rnr_beacon=$rnr_beacon" "$N" + [ "$ema" -gt 0 ] && append base_cfg "ema=$ema" "$N" + [ "$he_co_locate" -gt 0 ] && append base_cfg "he_co_locate=$he_co_locate" "$N" json_get_values opts hostapd_options for val in $opts; do @@ -1097,9 +1108,9 @@ wpa_supplicant_set_fixed_freq() { VHT*) append network_data "vht=1" "$N$T";; esac case "$htmode" in - VHT80) append network_data "max_oper_chwidth=1" "$N$T";; - VHT160) append network_data "max_oper_chwidth=2" "$N$T";; - VHT20|VHT40) append network_data "max_oper_chwidth=0" "$N$T";; + VHT80|HE80) append network_data "max_oper_chwidth=1" "$N$T";; + VHT160|HE160) append network_data "max_oper_chwidth=2" "$N$T";; + VHT20|HE20|VHT40|HE40) append network_data "max_oper_chwidth=0" "$N$T";; *) append network_data "disable_vht=1" "$N$T";; esac } From patchwork Mon Feb 15 10:19:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1440439 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=xqFc7Fc7; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (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) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DfKry53VBz9rx8 for ; Mon, 15 Feb 2021 21:21:38 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=4v5eLUflhCwGHNrZW3c1diAvPFOigQRzKgYPVJmXZtI=; b=xqFc7Fc761Hgx74PphCGwGWfw FD7ENJczajj02pab7dBrAr0Fqd5cW/m+BnVa5Cu1n8NKP4K0CTQ+QzITmBiDXdlXznySp6F97oQxj yQ1HC6uEEX5vpXjydVBW446pYnCyCYvCk6Xfrt+pBDwtczS9OC2lMKM65379IyJ9Vqpp3R2xM9Hco AZ9/Aa4LHcjyyxmKO53u6YmnvMe5nxERPb3s0ZW3QlTUDC8zXwwhr0K5CXBkP5ETmzKG+JAfXT84d cV9sNwQSU1msvRQDKAJBPedLO743zs2mE5/XtNQymtqzAY+7rqNkP7PpXL+0e4cxQjk4eY0NQpM1H WH8etRwoQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayh-0002gB-MT; Mon, 15 Feb 2021 10:19:39 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lBayZ-0002dn-GI for openwrt-devel@lists.openwrt.org; Mon, 15 Feb 2021 10:19:33 +0000 Received: from [149.224.91.220] (helo=localhost.localdomain) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1lBayW-0002oW-07; Mon, 15 Feb 2021 11:19:28 +0100 From: John Crispin To: openwrt-devel@lists.openwrt.org Subject: [PATCH 4/4] mac80211: add AX support Date: Mon, 15 Feb 2021 11:19:21 +0100 Message-Id: <20210215101921.3371799-4-john@phrozen.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210215101921.3371799-1-john@phrozen.org> References: <20210215101921.3371799-1-john@phrozen.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210215_051931_842734_6268277F X-CRM114-Status: GOOD ( 13.92 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org Signed-off-by: John Crispin --- .../files/lib/netifd/wireless/mac80211.sh | 193 +++++++++++++++++- .../mac80211/files/lib/wifi/mac80211.sh | 19 +- 2 files changed, 195 insertions(+), 17 deletions(-) diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index 92c56afd24..b717770d5e 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -56,6 +56,13 @@ drv_mac80211_init_device_config() { short_gi_40 \ max_amsdu \ dsss_cck_40 + config_add_int \ + he_su_beamformer \ + he_su_beamformee \ + he_mu_beamformer \ + he_bss_color \ + he_spr_sr_control \ + he_spr_non_srg_obss_pd_max_offset } drv_mac80211_init_iface_config() { @@ -69,6 +76,7 @@ drv_mac80211_init_iface_config() { config_add_int max_listen_int config_add_int dtim_period config_add_int start_disabled + config_add_int he_twt_required he_spr_sr_control # mesh config_add_string mesh_id @@ -96,6 +104,77 @@ mac80211_add_capabilities() { export -n -- "$__var=$__out" } +mac80211_add_he_capabilities() { + local __out= oifs + + oifs="$IFS" + IFS=: + for capab in "$@"; do + set -- $capab + [ "$(($4))" -gt 0 ] || continue + [ "$(((0x$2) & $3))" -gt 0 ] || continue + append base_cfg "$1=1" "$N" + done + IFS="$oifs" +} + +mac80211_get_seg0() { + local ht_mode="$1" + local seg0=0 + + case "$ht_mode" in + 40) + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + case "$(( ($channel / 4) % 2 ))" in + 1) seg0=$(($channel - 2));; + 0) seg0=$(($channel + 2));; + esac + elif [ $freq != 5935 ]; then + case "$(( ($channel / 4) % 2 ))" in + 1) seg0=$(($channel + 2));; + 0) seg0=$(($channel - 2));; + esac + fi + ;; + 80) + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + case "$(( ($channel / 4) % 4 ))" in + 0) seg0=$(($channel + 6));; + 1) seg0=$(($channel + 2));; + 2) seg0=$(($channel - 2));; + 3) seg0=$(($channel - 6));; + esac + elif [ $freq != 5935 ]; then + case "$(( ($channel / 4) % 4 ))" in + 1) seg0=$(($channel + 6));; + 2) seg0=$(($channel + 2));; + 3) seg0=$(($channel - 2));; + 0) seg0=$(($channel - 6));; + esac + fi + ;; + 160) + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + case "$channel" in + 1|5|9|13|17|21|25|29) seg0=15;; + 33|37|41|45|49|53|57|61) seg0=47;; + 65|69|73|77|81|85|89|93) seg0=79;; + 97|101|105|109|113|117|121|125) seg0=111;; + 129|133|137|141|145|149|153|157) seg0=143;; + 161|165|169|173|177|181|185|189) seg0=175;; + 193|197|201|205|209|213|217|221) seg0=207;; + esac + elif [ $freq != 5935 ]; then + case "$channel" in + 36|40|44|48|52|56|60|64) seg0=50;; + 100|104|108|112|116|120|124|128) seg0=114;; + esac + fi + ;; + esac + printf "$seg0" +} + mac80211_hostapd_setup_base() { local phy="$1" @@ -333,20 +412,105 @@ mac80211_hostapd_setup_base() { # 802.11ax enable_ax=0 case "$htmode" in - HE*) enable_ax=1 ;; + HE20) enable_ax=1 + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + append base_cfg "op_class=131" "$N" + fi + ;; + HE40) + enable_ax=1 + idx="$(mac80211_get_seg0 "40")" + if [ $freq -ge 5180 ] && [ $freq != 5935 ]; then + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + append base_cfg "op_class=132" "$N" + fi + append base_cfg "he_oper_chwidth=0" "$N" + append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" + fi + ;; + HE80) + enable_ax=1 + idx="$(mac80211_get_seg0 "80")" + if [ $freq != 5935 ]; then + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + append base_cfg "op_class=133" "$N" + fi + append base_cfg "he_oper_chwidth=1" "$N" + append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" + fi + ;; + HE160) + enable_ax=1 + idx="$(mac80211_get_seg0 "160")" + if [ $freq != 5935 ]; then + if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then + append base_cfg "op_class=134" "$N" + fi + append base_cfg "he_oper_chwidth=2" "$N" + append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" + fi + ;; esac if [ "$enable_ax" != "0" ]; then + json_get_vars \ + he_su_beamformer:1 \ + he_su_beamformee:0 \ + he_mu_beamformer:1 \ + he_twt_required:0 \ + he_spr_sr_control:0 \ + he_spr_non_srg_obss_pd_max_offset:1 \ + he_bss_color:64 + append base_cfg "ieee80211ax=1" "$N" + append base_cfg "he_bss_color=$he_bss_color" "$N" [ "$hwmode" = "a" ] && { append base_cfg "he_oper_chwidth=$vht_oper_chwidth" "$N" append base_cfg "he_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N" } + he_phy_cap=$(iw phy "$phy" info | awk -F "[()]" '/HE PHY Capabilities/ { print $2 }' | head -1) + he_phy_cap=${he_phy_cap:2} + he_mac_cap=$(iw phy "$phy" info | awk -F "[()]" '/HE MAC Capabilities/ { print $2 }' | head -1) + he_mac_cap=${he_mac_cap:2} + + mac80211_add_he_capabilities \ + he_su_beamformer:${he_phy_cap:6:2}:0x80:$he_su_beamformer \ + he_su_beamformee:${he_phy_cap:8:2}:0x1:$he_su_beamformee \ + he_mu_beamformer:${he_phy_cap:8:2}:0x2:$he_mu_beamformer \ + he_spr_sr_control:${he_phy_cap:14:2}:0x1:$he_spr_sr_control \ + he_twt_required:${he_mac_cap:0:2}:0x6:$he_twt_required + + [ "$he_spr_sr_control" != "0" ] && { + append base_cfg "he_spr_sr_control=$he_spr_sr_control" "$N" + append base_cfg "he_spr_non_srg_obss_pd_max_offset=$he_spr_non_srg_obss_pd_max_offset" "$N" + } + append base_cfg "he_default_pe_duration=4" "$N" append base_cfg "he_rts_threshold=1023" "$N" - append base_cfg "he_su_beamformer=1" "$N" - append base_cfg "he_su_beamformee=1" "$N" - append base_cfg "he_mu_beamformer=1" "$N" + append base_cfg "he_mu_edca_qos_info_param_count=0" "$N" + append base_cfg "he_mu_edca_qos_info_q_ack=0" "$N" + append base_cfg "he_mu_edca_qos_info_queue_request=0" "$N" + append base_cfg "he_mu_edca_qos_info_txop_request=0" "$N" + append base_cfg "he_mu_edca_ac_be_aifsn=8" "$N" + append base_cfg "he_mu_edca_ac_be_aci=0" "$N" + append base_cfg "he_mu_edca_ac_be_ecwmin=9" "$N" + append base_cfg "he_mu_edca_ac_be_ecwmax=10" "$N" + append base_cfg "he_mu_edca_ac_be_timer=255" "$N" + append base_cfg "he_mu_edca_ac_bk_aifsn=15" "$N" + append base_cfg "he_mu_edca_ac_bk_aci=1" "$N" + append base_cfg "he_mu_edca_ac_bk_ecwmin=9" "$N" + append base_cfg "he_mu_edca_ac_bk_ecwmax=10" "$N" + append base_cfg "he_mu_edca_ac_bk_timer=255" "$N" + append base_cfg "he_mu_edca_ac_vi_ecwmin=5" "$N" + append base_cfg "he_mu_edca_ac_vi_ecwmax=7" "$N" + append base_cfg "he_mu_edca_ac_vi_aifsn=5" "$N" + append base_cfg "he_mu_edca_ac_vi_aci=2" "$N" + append base_cfg "he_mu_edca_ac_vi_timer=255" "$N" + append base_cfg "he_mu_edca_ac_vo_aifsn=5" "$N" + append base_cfg "he_mu_edca_ac_vo_aci=3" "$N" + append base_cfg "he_mu_edca_ac_vo_ecwmin=5" "$N" + append base_cfg "he_mu_edca_ac_vo_ecwmax=7" "$N" + append base_cfg "he_mu_edca_ac_vo_timer=255" "$N" fi hostapd_prepare_device_config "$hostapd_conf_file" nl80211 @@ -401,6 +565,7 @@ mac80211_get_addr() { mac80211_generate_mac() { local phy="$1" + local multiple_bssid="$2" local id="${macidx:-0}" local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)" @@ -425,6 +590,11 @@ mac80211_generate_mac() { local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS" + [ "$multiple_bssid" -eq 1 ] && { + printf "02:%s:%s:%s:%s:%02x" $b1 $2 $3 $4 $5 $macidx + return + } + macidx=$(($id + 1)) [ "$((0x$mask1))" -gt 0 ] && { b1="0x$1" @@ -533,6 +703,7 @@ mac80211_iw_interface_add() { } mac80211_prepare_vif() { + local multiple_bssid=$1 json_select config json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file @@ -546,7 +717,7 @@ mac80211_prepare_vif() { json_select .. [ -n "$macaddr" ] || { - macaddr="$(mac80211_generate_mac $phy)" + macaddr="$(mac80211_generate_mac $phy $multiple_bssid)" macidx="$(($macidx + 1))" } @@ -687,8 +858,9 @@ mac80211_setup_supplicant_noctl() { mac80211_prepare_iw_htmode() { case "$htmode" in - VHT20|HT20) iw_htmode=HT20;; - HT40*|VHT40|VHT160) + VHT20|HT20|HE20) iw_htmode=HT20;; + HT40*|VHT40|VHT160|\ + HE40|HE40|HE160) case "$hwmode" in a) case "$(( ($channel / 4) % 2 ))" in @@ -712,7 +884,7 @@ mac80211_prepare_iw_htmode() { esac [ "$auto_channel" -gt 0 ] && iw_htmode="HT40+" ;; - VHT80) + VHT80|HE80) iw_htmode="80MHZ" ;; NONE|NOHT) @@ -896,7 +1068,8 @@ drv_mac80211_setup() { country chanbw distance \ txpower antenna_gain \ rxantenna txantenna \ - frag rts beacon_int:100 htmode + frag rts beacon_int:100 htmode \ + multiple_bssid:0 json_get_values basic_rate_list basic_rate json_get_values scan_list scan_list json_select .. @@ -991,7 +1164,7 @@ drv_mac80211_setup() { mac80211_prepare_iw_htmode for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif NEWAPLIST= - for_each_interface "ap" mac80211_prepare_vif + for_each_interface "ap" mac80211_prepare_vif ${multiple_bssid} NEW_MD5=$(test -e "${hostapd_conf_file}" && md5sum ${hostapd_conf_file}) OLD_MD5=$(uci -q -P /var/state get wireless._${phy}.md5) if [ "${NEWAPLIST}" != "${OLDAPLIST}" ]; then diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh index 3e99f06693..e7b3aa82c3 100644 --- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh +++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh @@ -80,18 +80,23 @@ detect_mac80211() { htmode="" ht_capab="" - iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20 + iw phy "$dev" info | grep -q 'Capabilities:' && { + htmode=HT20 + iw phy "$dev" info | grep -q 'HE.*Capabilities' && htmode="HE20" + } - iw phy "$dev" info | grep -q '\* 5... MHz \[' && { + iw phy "$dev" info | grep -q '5180 MHz' && { mode_band="a" - channel=$(iw phy "$dev" info | grep '\* 5... MHz \[' | grep '(disabled)' -v -m 1 | sed 's/[^[]*\[\|\].*//g') + channel="36" + iw phy "$dev" info | grep -q '5180 MHz.*disabled' && channel=149 iw phy "$dev" info | grep -q 'VHT Capabilities' && htmode="VHT80" + iw phy "$dev" info | grep -q 'HE.*Capabilities' && htmode="HE80" } - iw phy "$dev" info | grep -q '\* 5.... MHz \[' && { - mode_band="ad" - channel=$(iw phy "$dev" info | grep '\* 5.... MHz \[' | grep '(disabled)' -v -m 1 | sed 's/[^[]*\[\|\|\].*//g') - iw phy "$dev" info | grep -q 'Capabilities:' && htmode="HT20" + iw phy "$dev" info | grep -q '5955 MHz' && { + mode_band="a" + channel="1" + htmode="HE80" } [ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"