blob: e70eb3a1a70664d2dc20d604034ad96b13c2d093 [file] [log] [blame]
developerce9e5092022-11-10 22:41:59 +08001diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
developer5ad89862023-08-24 08:17:27 +08002index 8ecbe30..44af0c7 100644
developerce9e5092022-11-10 22:41:59 +08003--- a/package/kernel/mac80211/Makefile
4+++ b/package/kernel/mac80211/Makefile
developer5ad89862023-08-24 08:17:27 +08005@@ -19,6 +19,7 @@ PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
developerce9e5092022-11-10 22:41:59 +08006 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
7 PKG_BUILD_PARALLEL:=1
developer356ecec2022-11-14 10:25:04 +08008
developerce9e5092022-11-10 22:41:59 +08009+SOURCE_PATH:=./src
10 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
developer356ecec2022-11-14 10:25:04 +080011
developerce9e5092022-11-10 22:41:59 +080012 PKG_DRIVERS = \
developer5ad89862023-08-24 08:17:27 +080013@@ -71,6 +72,11 @@ config-y:= \
developer6ec8e342022-11-21 18:47:15 +080014 WLAN_VENDOR_ST \
15 WLAN_VENDOR_TI \
16 WLAN_VENDOR_ZYDAS \
17+ MAC80211_DEBUG_MENU \
18+ MAC80211_MLME_DEBUG \
19+ MAC80211_STA_DEBUG \
20+ MAC80211_HT_DEBUG \
developer5ad89862023-08-24 08:17:27 +080021+ MAC80211_PS_DEBUG \
developer6ec8e342022-11-21 18:47:15 +080022
23 config-$(call config_package,cfg80211) += CFG80211
24 config-$(CONFIG_PACKAGE_CFG80211_TESTMODE) += NL80211_TESTMODE
developer5ad89862023-08-24 08:17:27 +080025@@ -296,6 +302,8 @@ define Build/Prepare
developer356ecec2022-11-14 10:25:04 +080026 mkdir -p $(PKG_BUILD_DIR)
27 $(PKG_UNPACK)
28 $(Build/Patch)
29+ $(CP) $(SOURCE_PATH)/net $(PKG_BUILD_DIR) 2>/dev/null || :
30+ $(CP) $(SOURCE_PATH)/include $(PKG_BUILD_DIR) 2>/dev/null || :
31 rm -rf \
32 $(PKG_BUILD_DIR)/include/linux/ssb \
33 $(PKG_BUILD_DIR)/include/linux/bcma \
developer20d67712022-03-02 14:09:32 +080034diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
developerd469bb92024-03-01 08:59:08 +080035index ed28052..797ea8d 100644
developer20d67712022-03-02 14:09:32 +080036--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
37+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
developer0ba09b62023-03-10 18:43:49 +080038@@ -27,6 +27,7 @@ drv_mac80211_init_device_config() {
39
40 config_add_string path phy 'macaddr:macaddr'
41 config_add_string tx_burst
developer61604c82023-09-04 14:43:31 +080042+ config_add_int mbssid mu_onoff sr_enable sr_enhanced rnr obss_interval
developer0ba09b62023-03-10 18:43:49 +080043 config_add_string distance
44 config_add_int beacon_int chanbw frag rts
45 config_add_int rxantenna txantenna antenna_gain txpower min_tx_power
developeree85b6b2023-12-22 18:33:35 +080046@@ -53,7 +54,12 @@ drv_mac80211_init_device_config() {
developer785b6502023-04-19 18:31:11 +080047 he_spr_sr_control \
48 he_spr_psr_enabled \
49 he_bss_color_enabled \
50- he_twt_required
51+ he_twt_required \
52+ he_twt_responder \
53+ etxbfen \
developeree85b6b2023-12-22 18:33:35 +080054+ itxbfen \
55+ lpi_enable \
56+ beacon_dup
developer785b6502023-04-19 18:31:11 +080057 config_add_int \
58 beamformer_antennas \
59 beamformee_antennas \
developeree85b6b2023-12-22 18:33:35 +080060@@ -64,7 +70,8 @@ drv_mac80211_init_device_config() {
61 rx_stbc \
62 tx_stbc \
63 he_bss_color \
64- he_spr_non_srg_obss_pd_max_offset
65+ he_spr_non_srg_obss_pd_max_offset \
66+ sku_idx
67 config_add_boolean \
68 ldpc \
69 greenfield \
70@@ -140,13 +147,11 @@ mac80211_hostapd_setup_base() {
developer0ba09b62023-03-10 18:43:49 +080071 [ -n "$acs_exclude_dfs" ] && [ "$acs_exclude_dfs" -gt 0 ] &&
72 append base_cfg "acs_exclude_dfs=1" "$N"
73
74- json_get_vars noscan ht_coex min_tx_power:0 tx_burst
developer61604c82023-09-04 14:43:31 +080075+ json_get_vars noscan ht_coex min_tx_power:0 tx_burst mbssid mu_onoff rnr obss_interval
developeree85b6b2023-12-22 18:33:35 +080076+ json_get_vars etxbfen:1 itxbfen:0 lpi_enable:0 sku_idx:0 beacon_dup:1
developer8d77be32022-10-20 15:08:25 +080077 json_get_values ht_capab_list ht_capab
developer20d67712022-03-02 14:09:32 +080078 json_get_values channel_list channels
79
80- [ "$auto_channel" = 0 ] && [ -z "$channel_list" ] && \
81- channel_list="$channel"
82-
developer9b3248d2022-07-06 00:44:05 +080083 [ "$min_tx_power" -gt 0 ] && append base_cfg "min_tx_power=$min_tx_power"
developer20d67712022-03-02 14:09:32 +080084
developer9b3248d2022-07-06 00:44:05 +080085 set_default noscan 0
developerd469bb92024-03-01 08:59:08 +080086@@ -161,20 +166,41 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +080087 ht_capab=
88 case "$htmode" in
developerd469bb92024-03-01 08:59:08 +080089 VHT20|HT20|HE20) ;;
developer785b6502023-04-19 18:31:11 +080090- HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
developerd469bb92024-03-01 08:59:08 +080091+ HT40*|VHT40|VHT80|VHT160|HE40*|HE80|HE160)
developer785b6502023-04-19 18:31:11 +080092 case "$hwmode" in
93 a)
94 case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
developerda1bac72023-09-19 10:32:47 +080095 1) ht_capab="[HT40+]";;
96 0) ht_capab="[HT40-]";;
97 esac
98+ case "$htmode" in
developerd469bb92024-03-01 08:59:08 +080099+ HT40-|HE40-)
developerda1bac72023-09-19 10:32:47 +0800100+ if [ "$auto_channel" -gt 0 ]; then
101+ ht_capab="[HT40-]"
102+ fi
103+ ;;
104+ esac
developerbe3cf972023-04-27 09:58:26 +0800105 ;;
106 *)
107 case "$htmode" in
108- HT40+) ht_capab="[HT40+]";;
109- HT40-) ht_capab="[HT40-]";;
developerd469bb92024-03-01 08:59:08 +0800110+ HT40+|HE40+)
developerbe3cf972023-04-27 09:58:26 +0800111+ if [ "$channel" -gt 9 ]; then
112+ echo "Could not set the center freq with this HT mode setting"
113+ return 1
114+ else
115+ ht_capab="[HT40+]"
116+ fi
117+ ;;
developerd469bb92024-03-01 08:59:08 +0800118+ HT40-|HE40-)
developerda1bac72023-09-19 10:32:47 +0800119+ if [ "$channel" -lt 5 -a "$auto_channel" -eq 0 ]; then
developerbe3cf972023-04-27 09:58:26 +0800120+ echo "Could not set the center freq with this HT mode setting"
121+ return 1
122+ else
123+ ht_capab="[HT40-]"
124+ fi
125+ ;;
126 *)
developerda1bac72023-09-19 10:32:47 +0800127- if [ "$channel" -lt 7 ]; then
128+ if [ "$channel" -lt 7 -o "$auto_channel" -gt 0 ]; then
developerbe3cf972023-04-27 09:58:26 +0800129 ht_capab="[HT40+]"
developerda1bac72023-09-19 10:32:47 +0800130 else
131 ht_capab="[HT40-]"
developeree85b6b2023-12-22 18:33:35 +0800132@@ -183,7 +209,6 @@ mac80211_hostapd_setup_base() {
developerda1bac72023-09-19 10:32:47 +0800133 esac
134 ;;
135 esac
136- [ "$auto_channel" -gt 0 ] && ht_capab="[HT40+]"
137 ;;
138 *) ieee80211n= ;;
139 esac
developeree85b6b2023-12-22 18:33:35 +0800140@@ -193,6 +218,10 @@ mac80211_hostapd_setup_base() {
developer61604c82023-09-04 14:43:31 +0800141
142 set_default ht_coex 0
143 append base_cfg "ht_coex=$ht_coex" "$N"
144+ [ "$ht_coex" -eq 1 ] && {
145+ set_default obss_interval 300
146+ append base_cfg "obss_interval=$obss_interval" "$N"
147+ }
148
149 json_get_vars \
150 ldpc:1 \
developeree85b6b2023-12-22 18:33:35 +0800151@@ -205,7 +234,7 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800152 dsss_cck_40:1
153
154 ht_cap_mask=0
155- for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
156+ for cap in $(iw phy "$phy" info | grep 'Capabilities: 0x' | cut -d: -f2); do
157 ht_cap_mask="$(($ht_cap_mask | $cap))"
158 done
159
developerd469bb92024-03-01 08:59:08 +0800160@@ -271,6 +300,7 @@ mac80211_hostapd_setup_base() {
developeradd8de62023-05-02 16:25:52 +0800161 case "$channel" in
162 36|40|44|48|52|56|60|64) idx=50;;
163 100|104|108|112|116|120|124|128) idx=114;;
164+ 149|153|157|161|165|169|173|177) idx=163;;
165 esac
166 fi
167 enable_ac=1
developerd469bb92024-03-01 08:59:08 +0800168@@ -315,7 +345,6 @@ mac80211_hostapd_setup_base() {
developer8b04dfd2022-12-07 16:29:19 +0800169 vht_link_adapt:3 \
170 vht160:2
171
172- set_default tx_burst 2.0
173 append base_cfg "ieee80211ac=1" "$N"
174 vht_cap=0
175 for cap in $(iw phy "$phy" info | awk -F "[()]" '/VHT Capabilities/ { print $2 }'); do
developerd469bb92024-03-01 08:59:08 +0800176@@ -329,6 +358,12 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800177 [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc"
178 vht_cap="$(( ($vht_cap & ~(0x700)) | ($cap_rx_stbc << 8) ))"
179
180+ [ "$etxbfen" -eq 0 ] && {
181+ su_beamformer=0
182+ su_beamformee=0
183+ mu_beamformer=0
184+ }
185+
186 mac80211_add_capabilities vht_capab $vht_cap \
187 RXLDPC:0x10::$rxldpc \
188 SHORT-GI-80:0x20::$short_gi_80 \
developerd469bb92024-03-01 08:59:08 +0800189@@ -419,10 +454,11 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800190 he_su_beamformee:1 \
191 he_mu_beamformer:1 \
192 he_twt_required:0 \
193+ he_twt_responder \
194 he_spr_sr_control:3 \
195 he_spr_psr_enabled:0 \
196 he_spr_non_srg_obss_pd_max_offset:0 \
197- he_bss_color:128 \
198+ he_bss_color \
199 he_bss_color_enabled:1
200
201 he_phy_cap=$(iw phy "$phy" info | sed -n '/HE Iftypes: AP/,$p' | awk -F "[()]" '/HE PHY Capabilities/ { print $2 }' | head -1)
developerd469bb92024-03-01 08:59:08 +0800202@@ -436,6 +472,11 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800203 append base_cfg "he_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
204 }
205
206+ [ "$etxbfen" -eq 0 ] && {
207+ he_su_beamformer=0
208+ he_mu_beamformer=0
209+ }
210+
211 mac80211_add_he_capabilities \
212 he_su_beamformer:${he_phy_cap:6:2}:0x80:$he_su_beamformer \
213 he_su_beamformee:${he_phy_cap:8:2}:0x1:$he_su_beamformee \
developerd469bb92024-03-01 08:59:08 +0800214@@ -443,7 +484,14 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800215 he_spr_psr_enabled:${he_phy_cap:14:2}:0x1:$he_spr_psr_enabled \
216 he_twt_required:${he_mac_cap:0:2}:0x6:$he_twt_required
217
218+ if [ -n "$he_twt_responder" ]; then
219+ append base_cfg "he_twt_responder=$he_twt_responder" "$N"
220+ fi
221 if [ "$he_bss_color_enabled" -gt 0 ]; then
developer830efa72023-05-18 19:32:48 +0800222+ if !([ "$he_bss_color" -gt 0 ] && [ "$he_bss_color" -le 64 ]); then
developer785b6502023-04-19 18:31:11 +0800223+ rand=$(head -n 1 /dev/urandom | tr -dc 0-9 | head -c 2)
224+ he_bss_color=$((rand % 63 + 1))
225+ fi
226 append base_cfg "he_bss_color=$he_bss_color" "$N"
227 [ "$he_spr_non_srg_obss_pd_max_offset" -gt 0 ] && { \
228 append base_cfg "he_spr_non_srg_obss_pd_max_offset=$he_spr_non_srg_obss_pd_max_offset" "$N"
developerd469bb92024-03-01 08:59:08 +0800229@@ -484,12 +532,21 @@ mac80211_hostapd_setup_base() {
developer8b04dfd2022-12-07 16:29:19 +0800230 append base_cfg "he_mu_edca_ac_vo_timer=255" "$N"
231 fi
232
developer18015ad2023-07-13 13:18:19 +0800233+ set_default tx_burst 2
developer8b04dfd2022-12-07 16:29:19 +0800234+
235 hostapd_prepare_device_config "$hostapd_conf_file" nl80211
236 cat >> "$hostapd_conf_file" <<EOF
237 ${channel:+channel=$channel}
developer0ba09b62023-03-10 18:43:49 +0800238 ${channel_list:+chanlist=$channel_list}
239 ${hostapd_noscan:+noscan=1}
240 ${tx_burst:+tx_queue_data2_burst=$tx_burst}
241+${mbssid:+mbssid=$mbssid}
developer785b6502023-04-19 18:31:11 +0800242+${mu_onoff:+mu_onoff=$mu_onoff}
243+${itxbfen:+ibf_enable=$itxbfen}
developeree85b6b2023-12-22 18:33:35 +0800244+${lpi_enable:+lpi_enable=$lpi_enable}
245+${sku_idx:+sku_idx=$sku_idx}
246+${beacon_dup:+beacon_dup=$beacon_dup}
developer2c6592a2023-07-21 11:20:56 +0800247+${rnr:+rnr=$rnr}
developer0ba09b62023-03-10 18:43:49 +0800248 $base_cfg
249
250 EOF
developerd469bb92024-03-01 08:59:08 +0800251@@ -517,7 +574,7 @@ mac80211_hostapd_setup_bss() {
developer093e1a32023-02-24 16:10:53 +0800252 append hostapd_cfg "wds_sta=1" "$N"
253 [ -n "$wds_bridge" ] && append hostapd_cfg "wds_bridge=$wds_bridge" "$N"
254 }
255- [ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
256+ [ "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
257
258 cat >> /var/run/hostapd-$phy.conf <<EOF
259 $hostapd_cfg
developerd469bb92024-03-01 08:59:08 +0800260@@ -527,6 +584,31 @@ ${max_listen_int:+max_listen_interval=$max_listen_int}
developer0ba09b62023-03-10 18:43:49 +0800261 EOF
262 }
263
264+mac80211_generate_mbssid_mac() {
265+ local phy="$1"
266+ local transmitted_bssid="$2"
developer1952bcd2023-06-20 20:14:37 +0800267+ local id="${mbssidx:-0}"
developer0ba09b62023-03-10 18:43:49 +0800268+
269+ local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)"
developer0ba09b62023-03-10 18:43:49 +0800270+
271+ if [ -z "$transmitted_bssid" ]; then
272+ transmitted_bssid=$ref
273+ fi
274+
275+ if [ $id -eq 0 ]; then
276+ echo "$transmitted_bssid"
277+ return
278+ fi
279+
280+ local oIFS="$IFS"; IFS=":"; set -- $transmitted_bssid; IFS="$oIFS"
281+
282+ # Calculate nontransmitted bssid
developer0ba09b62023-03-10 18:43:49 +0800283+ b6="0x$6"
284+ ref_b6=$(($b6 % $max_mbssid))
developer1952bcd2023-06-20 20:14:37 +0800285+ b6=$(($b6 - $ref_b6 + ($ref_b6 + $id) % $max_mbssid))
developer0ba09b62023-03-10 18:43:49 +0800286+ printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $b6
287+}
288+
289 mac80211_get_addr() {
290 local phy="$1"
291 local idx="$(($2 + 1))"
developerd469bb92024-03-01 08:59:08 +0800292@@ -757,7 +839,19 @@ mac80211_prepare_vif() {
developer0ba09b62023-03-10 18:43:49 +0800293
294 json_select ..
295
296- if [ -z "$macaddr" ]; then
developerd2fbd572023-06-19 19:48:25 +0800297+ if [ "$mbssid" -gt 0 ] && [ "$mode" == "ap" ]; then
developer1952bcd2023-06-20 20:14:37 +0800298+ [ "$mbssidx" -eq 0 ] && {
299+ if [ -z $macaddr ]; then
300+ transmitted_bssid="$(mac80211_generate_mac $phy)"
301+ else
302+ # uci set mac address
303+ transmitted_bssid=$macaddr
304+ fi
305+ macidx="$(($macidx + 1))"
developer0ba09b62023-03-10 18:43:49 +0800306+ }
307+ macaddr="$(mac80211_generate_mbssid_mac $phy $transmitted_bssid)"
developer1952bcd2023-06-20 20:14:37 +0800308+ mbssidx="$(($mbssidx + 1))"
developer0ba09b62023-03-10 18:43:49 +0800309+ elif [ -z "$macaddr" ]; then
310 macaddr="$(mac80211_generate_mac $phy)"
311 macidx="$(($macidx + 1))"
312 elif [ "$macaddr" = 'random' ]; then
developerd469bb92024-03-01 08:59:08 +0800313@@ -1058,6 +1152,9 @@ mac80211_setup_vif() {
developerf0de14b2022-12-14 23:07:34 +0800314
315 json_select ..
316 [ -n "$failed" ] || wireless_add_vif "$name" "$ifname"
317+
318+ echo "Setup SMP Affinity"
319+ /sbin/smp-mt76.sh
320 }
321
322 get_freq() {
developerd469bb92024-03-01 08:59:08 +0800323@@ -1122,6 +1219,25 @@ drv_mac80211_cleanup() {
developer0ba09b62023-03-10 18:43:49 +0800324 hostapd_common_cleanup
325 }
326
327+mac80211_count_ap() {
328+ total_num_ap=$(($total_num_ap + 1))
329+}
330+
developer6cfee682023-11-27 19:34:42 +0800331+country_consistent_check() {
332+ local i
333+ inconsistent_country=0
334+ country_list="$(cat /etc/config/wireless | grep country | cut -d ' ' -f3 | tr -s "'\n" ' ')"
335+ for i in $country_list
336+ do
337+ ret="$(echo $country_list | awk '{print ($2 == "" || $1 == $2)}')"
338+ [ $ret = '0' ] && {
339+ inconsistent_country=1
340+ return
341+ }
342+ country_list="$(echo $country_list | sed -r 's/[A-Z]{2}( )*//')"
343+ done
344+}
345+
developer0ba09b62023-03-10 18:43:49 +0800346 drv_mac80211_setup() {
347 json_select config
348 json_get_vars \
developerd469bb92024-03-01 08:59:08 +0800349@@ -1129,7 +1245,8 @@ drv_mac80211_setup() {
developer74503112023-06-29 17:34:49 +0800350 country chanbw distance \
351 txpower antenna_gain \
352 rxantenna txantenna \
353- frag rts beacon_int:100 htmode
354+ frag rts beacon_int:100 htmode \
355+ sr_enable sr_enhanced
356 json_get_values basic_rate_list basic_rate
357 json_get_values scan_list scan_list
358 json_select ..
developerd469bb92024-03-01 08:59:08 +0800359@@ -1180,6 +1297,7 @@ drv_mac80211_setup() {
developer1952bcd2023-06-20 20:14:37 +0800360 no_ap=1
361 macidx=0
362 staidx=0
363+ mbssidx=0
364
365 [ -n "$chanbw" ] && {
366 for file in /sys/kernel/debug/ieee80211/$phy/ath9k*/chanbw /sys/kernel/debug/ieee80211/$phy/ath5k/bwmode; do
developerd469bb92024-03-01 08:59:08 +0800367@@ -1219,6 +1337,16 @@ drv_mac80211_setup() {
developer0ba09b62023-03-10 18:43:49 +0800368 for_each_interface "sta adhoc mesh" mac80211_set_noscan
369 [ -n "$has_ap" ] && mac80211_hostapd_setup_base "$phy"
370
371+ total_num_ap=0
372+ max_mbssid=1
373+ for_each_interface "ap" mac80211_count_ap
374+ total_num_ap=$(($total_num_ap - 1))
375+ while [ $total_num_ap -gt 0 ]
376+ do
377+ total_num_ap=$(($total_num_ap >> 1))
378+ max_mbssid=$(($max_mbssid << 1))
379+ done
380+
381 mac80211_prepare_iw_htmode
382 for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif
383 NEWAPLIST=
developerd469bb92024-03-01 08:59:08 +0800384@@ -1249,8 +1377,22 @@ drv_mac80211_setup() {
developer6cfee682023-11-27 19:34:42 +0800385 }
386 fi
developerad1f3172023-05-02 11:10:08 +0800387 if [ "$no_reload" != "0" ]; then
developer6cfee682023-11-27 19:34:42 +0800388+ country_consistent_check
389+ if [ "$inconsistent_country" == "1" ]; then
390+ echo "ERROR: Please use the same country for all the radios."
391+ wireless_setup_failed HOSTAPD_START_FAILED
392+ return
393+ fi
developerad1f3172023-05-02 11:10:08 +0800394 add_ap=1
395 ubus wait_for hostapd
396+
397+ # each phy sleeps different times to prevent for ubus race condition.
398+ if [ "$phy" = "phy1" ]; then
399+ sleep 1;
400+ elif [ "$phy" = "phy2" ]; then
401+ sleep 2;
402+ fi
403+
404 local hostapd_res="$(ubus call hostapd config_add "{\"iface\":\"$primary_ap\", \"config\":\"${hostapd_conf_file}\"}")"
405 ret="$?"
406 [ "$ret" != 0 -o -z "$hostapd_res" ] && {
developerd469bb92024-03-01 08:59:08 +0800407@@ -1266,6 +1408,9 @@ drv_mac80211_setup() {
developer74503112023-06-29 17:34:49 +0800408 [ "${add_ap}" = 1 ] && sleep 1
409 for_each_interface "ap" mac80211_setup_vif
410
411+ [ -n "$sr_enable" ] && echo "$sr_enable" > /sys/kernel/debug/ieee80211/$phy/mt76/sr_enable
412+ [ -n "$sr_enhanced" ] && echo "$sr_enhanced" > /sys/kernel/debug/ieee80211/$phy/mt76/sr_enhanced_enable
413+
414 NEWSPLIST=
415 NEWUMLIST=
416
developer9b3248d2022-07-06 00:44:05 +0800417diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developerd469bb92024-03-01 08:59:08 +0800418index 3ecd932..0ce1fc1 100644
developere2597ba2022-06-24 13:09:16 +0800419--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
420+++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developerd469bb92024-03-01 08:59:08 +0800421@@ -46,8 +46,13 @@ check_mac80211_device() {
422
423
424 __get_band_defaults() {
425+ local mt7915=0
426 local phy="$1"
427
428+ if (lspci | grep -q "7915"); then
429+ mt7915=1
430+ fi
431+
432 ( iw phy "$phy" info; echo ) | awk '
433 BEGIN {
434 bands = ""
435@@ -58,12 +63,12 @@ BEGIN {
436 mode="NOHT"
437 if (ht) mode="HT20"
developer785b6502023-04-19 18:31:11 +0800438 if (vht && band != "1:") mode="VHT80"
developerd469bb92024-03-01 08:59:08 +0800439- if (he) mode="HE80"
440+ if (he) mode="HE160"
441+ if (he && mt7915) mode="HE80"
442+ if (he && (lspci | grep -q "7915")); then
443+ mode="HE80"
444+ fi
developer785b6502023-04-19 18:31:11 +0800445 if (he && band == "1:") mode="HE20"
developerd469bb92024-03-01 08:59:08 +0800446- sub("\\[", "", channel)
447- sub("\\]", "", channel)
448- bands = bands band channel ":" mode " "
449- }
450 band=""
developer785b6502023-04-19 18:31:11 +0800451 }
452
developerd469bb92024-03-01 08:59:08 +0800453@@ -87,6 +92,11 @@ $0 ~ "HE Iftypes" {
developer785b6502023-04-19 18:31:11 +0800454 he=1
455 }
456
developer20ce7bd2023-05-20 13:25:14 +0800457+$0 ~ / *HE MAC Capabilities \(0x000000000000\)/ {
458+ he=0
459+}
460+
developer20ce7bd2023-05-20 13:25:14 +0800461+
developer785b6502023-04-19 18:31:11 +0800462 $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
463 channel = $4
464 }
developerd469bb92024-03-01 08:59:08 +0800465@@ -120,6 +130,20 @@ get_band_defaults() {
developere2597ba2022-06-24 13:09:16 +0800466 mode_band="$band"
467 channel="$chan"
468 htmode="$mode"
469+ if [ "$band" = "6g" ]
470+ then
471+ encryption=sae
472+ key=12345678
developer20ce7bd2023-05-20 13:25:14 +0800473+ sae_pwe=2
474+ ieee80211w=2
developeradbb45b2023-06-09 14:43:01 +0800475+ channel=37
476+ mbssid=1
developerf7aff422023-11-14 11:11:34 +0800477+ mbo=1
developere2597ba2022-06-24 13:09:16 +0800478+ else
developer659b07e2023-05-25 12:34:13 +0800479+ noscan=1
developere2597ba2022-06-24 13:09:16 +0800480+ encryption=none
developer2c6592a2023-07-21 11:20:56 +0800481+ rnr=1
developere2597ba2022-06-24 13:09:16 +0800482+ fi
483 done
484 }
485
developerd469bb92024-03-01 08:59:08 +0800486@@ -153,6 +177,10 @@ detect_mac80211() {
developer785b6502023-04-19 18:31:11 +0800487
488 json_load_file /etc/board.json
489
490+ # generate random bytes for macaddr
491+ rand=$(hexdump -C /dev/urandom | head -n 1 &)
492+ killall hexdump
493+
494 for _dev in /sys/class/ieee80211/*; do
495 [ -e "$_dev" ] || continue
496
developerd469bb92024-03-01 08:59:08 +0800497@@ -162,6 +190,13 @@ detect_mac80211() {
developere2597ba2022-06-24 13:09:16 +0800498 channel=""
499 htmode=""
500 ht_capab=""
501+ encryption=""
developer659b07e2023-05-25 12:34:13 +0800502+ noscan=""
developere2597ba2022-06-24 13:09:16 +0800503+ key=""
developer09257932023-05-09 13:41:30 +0800504+ sae_pwe=""
developer20ce7bd2023-05-20 13:25:14 +0800505+ ieee80211w=""
developeradbb45b2023-06-09 14:43:01 +0800506+ mbssid=""
developer2c6592a2023-07-21 11:20:56 +0800507+ rnr=""
developere2597ba2022-06-24 13:09:16 +0800508
509 get_band_defaults "$dev"
510
developerd469bb92024-03-01 08:59:08 +0800511@@ -192,6 +227,14 @@ detect_mac80211() {
developer785b6502023-04-19 18:31:11 +0800512 ;;
513 esac
514
developer212c0d82023-07-13 19:41:47 +0800515+ macaddr=""
developer1325ba72023-06-26 13:43:31 +0800516+ if (dmesg | grep -q "eeprom load fail"); then
developer1952bcd2023-06-20 20:14:37 +0800517+ for i in $(seq 2 3); do
518+ macaddr=${macaddr}:$(echo $rand | cut -d ' ' -f $i)
519+ done
520+ macaddr="00:0$(($devidx - 1)):55:66${macaddr}"
developer1952bcd2023-06-20 20:14:37 +0800521+ fi
developer785b6502023-04-19 18:31:11 +0800522+
523 uci -q batch <<-EOF
524 set wireless.${name}=wifi-device
525 set wireless.${name}.type=mac80211
developerd469bb92024-03-01 08:59:08 +0800526@@ -199,15 +242,43 @@ detect_mac80211() {
developer09257932023-05-09 13:41:30 +0800527 set wireless.${name}.channel=${channel}
528 set wireless.${name}.band=${mode_band}
529 set wireless.${name}.htmode=$htmode
530- set wireless.${name}.disabled=1
developer20ce7bd2023-05-20 13:25:14 +0800531+ set wireless.${name}.country='US'
developer659b07e2023-05-25 12:34:13 +0800532+ set wireless.${name}.noscan=${noscan}
developer09257932023-05-09 13:41:30 +0800533+ set wireless.${name}.disabled=0
developeradbb45b2023-06-09 14:43:01 +0800534+EOF
535+ [ -n "$mbssid" ] && {
536+ uci -q set wireless.${name}.mbssid=${mbssid}
537+ }
developer2c6592a2023-07-21 11:20:56 +0800538+ [ -n "$rnr" ] && {
539+ uci -q set wireless.${name}.rnr=${rnr}
540+ }
developer09257932023-05-09 13:41:30 +0800541
developeradbb45b2023-06-09 14:43:01 +0800542+ uci -q batch <<-EOF
developer09257932023-05-09 13:41:30 +0800543 set wireless.default_${name}=wifi-iface
544 set wireless.default_${name}.device=${name}
developer8d77be32022-10-20 15:08:25 +0800545 set wireless.default_${name}.network=lan
546 set wireless.default_${name}.mode=ap
developer09257932023-05-09 13:41:30 +0800547- set wireless.default_${name}.ssid=OpenWrt
developer8d77be32022-10-20 15:08:25 +0800548- set wireless.default_${name}.encryption=none
developer09257932023-05-09 13:41:30 +0800549+ set wireless.default_${name}.ssid=OpenWrt-${mode_band}
developer8d77be32022-10-20 15:08:25 +0800550+ set wireless.default_${name}.encryption=${encryption}
developere2597ba2022-06-24 13:09:16 +0800551 EOF
developer212c0d82023-07-13 19:41:47 +0800552+
553+ # calibrated board will use eeprom macaddress, not ramdom address
554+ [ -n "$macaddr" ] && {
555+ uci -q set wireless.default_${name}.macaddr=${macaddr}
556+ }
557+
developere2597ba2022-06-24 13:09:16 +0800558+ [ -n "$key" ] && {
developer8d77be32022-10-20 15:08:25 +0800559+ uci -q set wireless.default_${name}.key=${key}
developere2597ba2022-06-24 13:09:16 +0800560+ }
developer09257932023-05-09 13:41:30 +0800561+ [ -n "$sae_pwe" ] && {
562+ uci -q set wireless.default_${name}.sae_pwe=${sae_pwe}
563+ }
developer20ce7bd2023-05-20 13:25:14 +0800564+ [ -n "$ieee80211w" ] && {
565+ uci -q set wireless.default_${name}.ieee80211w=${ieee80211w}
566+ }
developerf7aff422023-11-14 11:11:34 +0800567+ [ -n "$mbo" ] && {
568+ uci -q set wireless.default_${name}.mbo=${mbo}
569+ }
developere2597ba2022-06-24 13:09:16 +0800570 uci -q commit wireless
developer8d77be32022-10-20 15:08:25 +0800571 done
572 }
developer85839fe2023-02-23 10:32:51 +0800573diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
developerd469bb92024-03-01 08:59:08 +0800574index 28bd210..723d387 100644
developer85839fe2023-02-23 10:32:51 +0800575--- a/package/network/services/hostapd/files/hostapd.sh
576+++ b/package/network/services/hostapd/files/hostapd.sh
developer74503112023-06-29 17:34:49 +0800577@@ -60,7 +60,14 @@ hostapd_append_wpa_key_mgmt() {
578 [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-EAP-SHA256"
579 ;;
580 sae)
581- append wpa_key_mgmt "SAE"
582+ case "$encryption" in
583+ *sae-ext*)
584+ append wpa_key_mgmt "SAE-EXT-KEY"
585+ ;;
586+ *)
587+ append wpa_key_mgmt "SAE"
588+ ;;
589+ esac
590 [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-SAE"
591 ;;
592 psk-sae)
593@@ -115,6 +122,7 @@ hostapd_common_add_device_config() {
594 config_add_int rts_threshold
595 config_add_int rssi_reject_assoc_rssi
596 config_add_int rssi_ignore_probe_request
597+ config_add_int rssi_reject_assoc_timeout
598 config_add_int maxassoc
599
600 config_add_string acs_chan_bias
developer5ad89862023-08-24 08:17:27 +0800601@@ -225,8 +233,10 @@ hostapd_prepare_device_config() {
developer74503112023-06-29 17:34:49 +0800602 hostapd_add_rate brlist "$br"
603 done
604
605+ json_get_vars rssi_reject_assoc_timeout
606 [ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N"
607 [ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N"
608+ [ -n "$rssi_reject_assoc_timeout" ] && append base_cfg "rssi_reject_assoc_timeout=$rssi_reject_assoc_timeout" "$N"
609 [ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N"
610 [ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N"
611 [ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
developerd469bb92024-03-01 08:59:08 +0800612@@ -376,6 +386,24 @@ hostapd_common_add_bss_config() {
developer82408892023-03-27 15:09:00 +0800613 config_add_string fils_dhcp
614
615 config_add_int ocv
616+
developer82408892023-03-27 15:09:00 +0800617+ config_add_int disable_he
618+ config_add_int disable_vht
619+ config_add_int disable_ht
developer813f5d72023-03-28 17:44:38 +0800620+
developerf166f542023-05-25 14:40:30 +0800621+ config_add_boolean beacon_prot interworking
developer74503112023-06-29 17:34:49 +0800622+
623+ config_add_int unsol_bcast_probe_resp_interval
624+ config_add_int fils_discovery_min_interval
625+ config_add_int fils_discovery_max_interval
626+ config_add_boolean rnr
627+
628+ config_add_array sae_groups
629+ config_add_array owe_groups
630+ config_add_array pairwise
631+ config_add_string group_cipher
developer875fbb72023-12-13 15:49:01 +0800632+ config_add_string group_mgmt_cipher
developer74503112023-06-29 17:34:49 +0800633+
developer82408892023-03-27 15:09:00 +0800634 }
635
636 hostapd_set_vlan_file() {
developerd469bb92024-03-01 08:59:08 +0800637@@ -440,11 +468,11 @@ append_iw_nai_realm() {
developerf166f542023-05-25 14:40:30 +0800638 }
639
640 append_iw_venue_name() {
641- append bss_conf "venue_name=$1" "$N"
642+ [ -n "$1" ] && append bss_conf "venue_name=$1" "$N"
643 }
644
645 append_iw_venue_url() {
646- append bss_conf "venue_url=$1" "$N"
647+ [ -n "$1" ] && append bss_conf "venue_url=$1" "$N"
648 }
649
650 append_hs20_oper_friendly_name() {
developerd469bb92024-03-01 08:59:08 +0800651@@ -562,7 +590,8 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800652 ppsk airtime_bss_weight airtime_bss_limit airtime_sta_weight \
653 multicast_to_unicast_all proxy_arp per_sta_vif \
654 eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \
655- vendor_elements fils ocv
656+ vendor_elements fils ocv unsol_bcast_probe_resp_interval fils_discovery_min_interval \
developer875fbb72023-12-13 15:49:01 +0800657+ fils_discovery_max_interval rnr group_cipher group_mgmt_cipher
developer74503112023-06-29 17:34:49 +0800658
659 set_default fils 0
660 set_default isolate 0
developerd469bb92024-03-01 08:59:08 +0800661@@ -790,6 +819,36 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800662 local auth_algs="$((($auth_mode_shared << 1) | $auth_mode_open))"
663 append bss_conf "auth_algs=${auth_algs:-1}" "$N"
664 append bss_conf "wpa=$wpa" "$N"
665+
666+ json_get_values pairwise pairwise
developer945ed992023-10-25 15:01:32 +0800667+ json_get_vars group_cipher
developer9097e5e2023-07-19 10:22:24 +0800668+ if [ -n "$pairwise" ]; then
669+ case "$pairwise" in
670+ *tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip)
671+ wpa_cipher="CCMP TKIP"
672+ ;;
673+ *ccmp256)
674+ wpa_cipher="CCMP-256"
675+ ;;
676+ *aes|*ccmp)
677+ wpa_cipher="CCMP"
678+ ;;
679+ *tkip)
680+ wpa_cipher="TKIP"
681+ ;;
682+ *gcmp256)
683+ wpa_cipher="GCMP-256"
684+ ;;
685+ *gcmp)
686+ wpa_cipher="GCMP"
687+ ;;
688+ *)
689+ wpa_cipher=""
690+ ;;
691+ esac
692+ fi
developer74503112023-06-29 17:34:49 +0800693+ [ -n "$wpa_cipher" ] && wpa_pairwise="$wpa_cipher"
694+
695 [ -n "$wpa_pairwise" ] && append bss_conf "wpa_pairwise=$wpa_pairwise" "$N"
696
697 set_default wps_pushbutton 0
developerd469bb92024-03-01 08:59:08 +0800698@@ -841,7 +900,7 @@ hostapd_set_bss_options() {
developerda723192023-05-22 19:46:10 +0800699 }
700
701 append bss_conf "ssid=$ssid" "$N"
702- [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=" "$N"
703+ [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=$network_bridge" "$N"
704 [ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
705 [ -n "$iapp_interface" ] && {
706 local ifname
developerd469bb92024-03-01 08:59:08 +0800707@@ -954,6 +1013,8 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800708 fi
709
710 if [ "$wpa" -ge "2" ]; then
711+ json_get_values sae_groups sae_groups
712+ json_get_values owe_groups owe_groups
713 if [ -n "$network_bridge" -a "$rsn_preauth" = 1 ]; then
714 set_default auth_cache 1
715 append bss_conf "rsn_preauth=1" "$N"
developerd469bb92024-03-01 08:59:08 +0800716@@ -972,17 +1033,52 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800717 append bss_conf "okc=$auth_cache" "$N"
718 [ "$auth_cache" = 0 -a "$fils" = 0 ] && append bss_conf "disable_pmksa_caching=1" "$N"
719
720+ [ -z "$group_cipher" ] && group_cipher="$wpa_cipher"
721+
722+ if [ -n "$sae_groups" -o -n "$owe_groups" ]; then
723+ case "$auth_type" in
724+ sae*)
725+ append bss_conf "sae_groups=$sae_groups" "$N"
726+ append bss_conf "group_cipher=$group_cipher" "$N"
727+ ;;
728+ owe)
729+ append bss_conf "owe_groups=$owe_groups" "$N"
730+ append bss_conf "group_cipher=$group_cipher" "$N"
731+ ;;
732+ esac
733+ fi
734+
developer813f5d72023-03-28 17:44:38 +0800735 # RSN -> allow management frame protection
736 case "$ieee80211w" in
737 [012])
738- json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout
739+ json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot
740 append bss_conf "ieee80211w=$ieee80211w" "$N"
741 [ "$ieee80211w" -gt "0" ] && {
developer875fbb72023-12-13 15:49:01 +0800742+ if [ -z "$group_mgmt_cipher" ]; then
743+ case "$group_cipher" in
744+ CCMP-256)
745+ ieee80211w_mgmt_cipher="BIP-CMAC-256"
746+ ;;
747+ CCMP)
748+ ieee80211w_mgmt_cipher="AES-128-CMAC"
749+ ;;
750+ GCMP-256)
751+ ieee80211w_mgmt_cipher="BIP-GMAC-256"
752+ ;;
753+ GCMP)
754+ ieee80211w_mgmt_cipher="BIP-GMAC-128"
755+ ;;
756+ esac
757+ else
758+ ieee80211w_mgmt_cipher="$group_mgmt_cipher"
759+ fi
developer813f5d72023-03-28 17:44:38 +0800760 if [ "$auth_type" = "eap192" ]; then
developer74503112023-06-29 17:34:49 +0800761 append bss_conf "group_mgmt_cipher=BIP-GMAC-256" "$N"
developer813f5d72023-03-28 17:44:38 +0800762 else
763 append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N"
764 fi
765+ [ -n "$beacon_prot" ] && \
766+ append bss_conf "beacon_prot=$beacon_prot" "$N"
767 [ -n "$ieee80211w_max_timeout" ] && \
768 append bss_conf "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N"
769 [ -n "$ieee80211w_retry_timeout" ] && \
developerd469bb92024-03-01 08:59:08 +0800770@@ -1047,9 +1143,10 @@ hostapd_set_bss_options() {
developerf166f542023-05-25 14:40:30 +0800771 json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
772 json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3
773 json_get_vars iw_venue_name iw_venue_url
774+ json_get_vars interworking
775
776 set_default iw_enabled 0
777- if [ "$iw_enabled" = "1" ]; then
778+ if [ "$iw_enabled" = "1" ] || [ "$interworking" = "1" ]; then
779 append bss_conf "interworking=1" "$N"
780 set_default iw_internet 1
781 set_default iw_asra 0
developerd469bb92024-03-01 08:59:08 +0800782@@ -1156,6 +1253,22 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800783 append bss_conf "$val" "$N"
784 done
785
786+ if [ "$unsol_bcast_probe_resp_interval" -gt 0 ]; then
787+ append bss_conf "unsol_bcast_probe_resp_interval=$unsol_bcast_probe_resp_interval" "$N"
788+ fi
789+
790+ if [ -n "$fils_discovery_min_interval" ]; then
791+ append bss_conf "fils_discovery_min_interval=$fils_discovery_min_interval" "$N"
792+ fi
793+
794+ if [ -n "$fils_discovery_max_interval" ]; then
795+ append bss_conf "fils_discovery_max_interval=$fils_discovery_max_interval" "$N"
796+ fi
797+
798+ if [ -n "$rnr" ]; then
799+ append bss_conf "rnr=$rnr" "$N"
800+ fi
801+
802 bss_md5sum="$(echo $bss_conf | md5sum | cut -d" " -f1)"
803 append bss_conf "config_id=$bss_md5sum" "$N"
804
developerd469bb92024-03-01 08:59:08 +0800805@@ -1246,6 +1359,7 @@ wpa_supplicant_prepare_interface() {
developer18015ad2023-07-13 13:18:19 +0800806 country_str="country=$country"
807 }
808
developer2cf3f4c2023-07-24 16:58:25 +0800809+ local tx_queue_data2_burst="tx_queue_data2_burst=0"
developer18015ad2023-07-13 13:18:19 +0800810 multiap_flag_file="${_config}.is_multiap"
811 if [ "$multi_ap" = "1" ]; then
812 touch "$multiap_flag_file"
developerd469bb92024-03-01 08:59:08 +0800813@@ -1257,6 +1371,7 @@ wpa_supplicant_prepare_interface() {
developer18015ad2023-07-13 13:18:19 +0800814 ${scan_list:+freq_list=$scan_list}
815 $ap_scan
816 $country_str
817+$tx_queue_data2_burst
818 EOF
819 return 0
820 }
developerd469bb92024-03-01 08:59:08 +0800821@@ -1528,12 +1643,39 @@ wpa_supplicant_add_network() {
developer74503112023-06-29 17:34:49 +0800822 ;;
823 esac
824
developerbb29b5e2023-07-25 20:41:04 +0800825- [ "$wpa_cipher" = GCMP ] && {
826- append network_data "pairwise=GCMP" "$N$T"
827- append network_data "group=GCMP" "$N$T"
828- }
developer74503112023-06-29 17:34:49 +0800829+ json_get_values pairwise pairwise
developer875fbb72023-12-13 15:49:01 +0800830+ json_get_vars group_cipher group_mgmt_cipher
developer9097e5e2023-07-19 10:22:24 +0800831+ if [ -n "$pairwise" ]; then
832+ case "$pairwise" in
833+ *tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip)
834+ wpa_cipher="CCMP TKIP"
835+ ;;
836+ *ccmp256)
837+ wpa_cipher="CCMP-256"
838+ ;;
839+ *aes|*ccmp)
840+ wpa_cipher="CCMP"
841+ ;;
842+ *tkip)
843+ wpa_cipher="TKIP"
844+ ;;
845+ *gcmp256)
846+ wpa_cipher="GCMP-256"
847+ ;;
848+ *gcmp)
849+ wpa_cipher="GCMP"
850+ ;;
851+ *)
852+ wpa_cipher=""
853+ ;;
854+ esac
855+ fi
developer74503112023-06-29 17:34:49 +0800856+ [ -n "$wpa_cipher" ] && wpa_pairwise="$wpa_cipher"
developer74503112023-06-29 17:34:49 +0800857
858 [ "$mode" = mesh ] || {
859+ json_get_values sae_groups sae_groups
860+ json_get_values owe_groups owe_groups
861+
862 case "$wpa" in
863 1)
864 append network_data "proto=WPA" "$N$T"
developerd469bb92024-03-01 08:59:08 +0800865@@ -1543,12 +1685,58 @@ wpa_supplicant_add_network() {
developer74503112023-06-29 17:34:49 +0800866 ;;
867 esac
868
869+ [ -n "$wpa_pairwise" ] && append network_data "pairwise=$wpa_pairwise" "$N$T"
870+ [ -z "$group_cipher" ] && group_cipher="$wpa_cipher"
871+
872+ if [ -n "$sae_groups" -o -n "$owe_groups" ]; then
873+ case "$auth_type" in
874+ sae*)
875+ echo "sae_groups=$sae_groups" >> "$_config"
876+ append network_data "group=$group_cipher" "$N$T"
877+ ;;
878+ owe)
879+ append network_data "owe_group=$owe_groups" "$N$T"
880+ append network_data "group=$group_cipher" "$N$T"
881+ ;;
882+ esac
883+ fi
884+
885+ # RSN -> allow management frame protection
886 case "$ieee80211w" in
887 [012])
888- [ "$wpa" -ge 2 ] && append network_data "ieee80211w=$ieee80211w" "$N$T"
889+ json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot
890+ append network_data "ieee80211w=$ieee80211w" "$N$T"
891+ [ "$ieee80211w" -gt "0" ] && {
developer875fbb72023-12-13 15:49:01 +0800892+ if [ -z "$group_mgmt_cipher" ]; then
893+ case "$group_cipher" in
894+ CCMP-256)
895+ ieee80211w_mgmt_cipher="BIP-CMAC-256"
896+ ;;
897+ CCMP)
898+ ieee80211w_mgmt_cipher="AES-128-CMAC"
899+ ;;
900+ GCMP-256)
901+ ieee80211w_mgmt_cipher="BIP-GMAC-256"
902+ ;;
903+ GCMP)
904+ ieee80211w_mgmt_cipher="BIP-GMAC-128"
905+ ;;
906+ esac
907+ else
908+ ieee80211w_mgmt_cipher="$group_mgmt_cipher"
909+ fi
developer74503112023-06-29 17:34:49 +0800910+ if [ "$auth_type" = "eap192" ]; then
911+ append network_data "group_mgmt=BIP-GMAC-256" "$N$T"
912+ else
913+ append network_data "group_mgmt=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N$T"
914+ fi
915+ [ -n "$beacon_prot" ] && \
916+ append network_data "beacon_prot=$beacon_prot" "$N$T"
917+ }
918 ;;
919 esac
920 }
921+
922 [ -n "$bssid" ] && append network_data "bssid=$bssid" "$N$T"
923 [ -n "$beacon_int" ] && append network_data "beacon_int=$beacon_int" "$N$T"
924
developerd469bb92024-03-01 08:59:08 +0800925@@ -1559,6 +1747,17 @@ wpa_supplicant_add_network() {
developer82408892023-03-27 15:09:00 +0800926 [ -n "$bssid_blacklist" ] && append network_data "bssid_blacklist=$bssid_blacklist" "$N$T"
927 [ -n "$bssid_whitelist" ] && append network_data "bssid_whitelist=$bssid_whitelist" "$N$T"
928
developer82408892023-03-27 15:09:00 +0800929+ local disable_he
930+ local disable_vht
931+ local disable_ht
developer82408892023-03-27 15:09:00 +0800932+ json_get_vars disable_he
933+ json_get_vars disable_vht
934+ json_get_vars disable_ht
935+
developer82408892023-03-27 15:09:00 +0800936+ [ -n "$disable_he" ] && append network_data "disable_he=$disable_he" "$N$T"
937+ [ -n "$disable_vht" ] && append network_data "disable_vht=$disable_vht" "$N$T"
938+ [ -n "$disable_ht" ] && append network_data "disable_ht=$disable_ht" "$N$T"
939+
940 [ -n "$basic_rate" ] && {
941 local br rate_list=
942 for br in $basic_rate; do
developerd469bb92024-03-01 08:59:08 +0800943@@ -1573,6 +1772,11 @@ wpa_supplicant_add_network() {
developer85839fe2023-02-23 10:32:51 +0800944 append network_data "mcast_rate=$mc_rate" "$N$T"
945 }
946
947+ if [ "$auth_type" = "sae" ]; then
948+ json_get_vars sae_pwe sae_pwe
949+ [ -n "$sae_pwe" ] && echo "sae_pwe=$sae_pwe" >> "$_config"
950+ fi
951+
952 if [ "$key_mgmt" = "WPS" ]; then
953 echo "wps_cred_processing=1" >> "$_config"
954 else
developerd469bb92024-03-01 08:59:08 +0800955