blob: 9820e6778afac90fe5f315b1ac5355be5246c99a [file] [log] [blame]
developerce9e5092022-11-10 22:41:59 +08001diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
developer619eaa32023-08-29 13:33:51 +08002index a7472ee7..f06c889b 100644
developerce9e5092022-11-10 22:41:59 +08003--- a/package/kernel/mac80211/Makefile
4+++ b/package/kernel/mac80211/Makefile
developerad1f3172023-05-02 11:10:08 +08005@@ -20,6 +20,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 = \
developerad1f3172023-05-02 11:10:08 +080013@@ -72,6 +73,10 @@ 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 \
21
22 config-$(call config_package,cfg80211) += CFG80211
23 config-$(CONFIG_PACKAGE_CFG80211_TESTMODE) += NL80211_TESTMODE
developerad1f3172023-05-02 11:10:08 +080024@@ -297,6 +302,8 @@ define Build/Prepare
developer356ecec2022-11-14 10:25:04 +080025 mkdir -p $(PKG_BUILD_DIR)
26 $(PKG_UNPACK)
27 $(Build/Patch)
28+ $(CP) $(SOURCE_PATH)/net $(PKG_BUILD_DIR) 2>/dev/null || :
29+ $(CP) $(SOURCE_PATH)/include $(PKG_BUILD_DIR) 2>/dev/null || :
30 rm -rf \
31 $(PKG_BUILD_DIR)/include/linux/ssb \
32 $(PKG_BUILD_DIR)/include/linux/bcma \
developer20d67712022-03-02 14:09:32 +080033diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
developer75c99f42023-09-04 11:28:21 +080034index 39683376..3c7a88dd 100644
developer20d67712022-03-02 14:09:32 +080035--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
36+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
developer75c99f42023-09-04 11:28:21 +080037@@ -24,10 +24,11 @@ drv_mac80211_init_device_config() {
developer0ba09b62023-03-10 18:43:49 +080038
39 config_add_string path phy 'macaddr:macaddr'
40 config_add_string tx_burst
developer2c6592a2023-07-21 11:20:56 +080041+ config_add_int mbssid mu_onoff sr_enable sr_enhanced rnr
developer0ba09b62023-03-10 18:43:49 +080042 config_add_string distance
43 config_add_int beacon_int chanbw frag rts
44 config_add_int rxantenna txantenna antenna_gain txpower min_tx_power
developer75c99f42023-09-04 11:28:21 +080045- config_add_boolean noscan ht_coex acs_exclude_dfs background_radar
46+ config_add_boolean noscan ht_coex acs_exclude_dfs background_radar background_cert_mode
47 config_add_array ht_capab
48 config_add_array channels
49 config_add_array scan_list
developer24684862023-08-02 08:10:38 +080050@@ -50,7 +51,10 @@ drv_mac80211_init_device_config() {
developer785b6502023-04-19 18:31:11 +080051 he_spr_sr_control \
52 he_spr_psr_enabled \
53 he_bss_color_enabled \
54- he_twt_required
55+ he_twt_required \
56+ he_twt_responder \
57+ etxbfen \
58+ itxbfen
59 config_add_int \
60 beamformer_antennas \
61 beamformee_antennas \
developer24684862023-08-02 08:10:38 +080062@@ -137,13 +141,11 @@ mac80211_hostapd_setup_base() {
developer0ba09b62023-03-10 18:43:49 +080063 [ -n "$acs_exclude_dfs" ] && [ "$acs_exclude_dfs" -gt 0 ] &&
64 append base_cfg "acs_exclude_dfs=1" "$N"
65
66- json_get_vars noscan ht_coex min_tx_power:0 tx_burst
developer2c6592a2023-07-21 11:20:56 +080067+ json_get_vars noscan ht_coex min_tx_power:0 tx_burst mbssid mu_onoff rnr
developer2c4f7e82023-05-11 19:56:55 +080068+ json_get_vars etxbfen:1 itxbfen:0
developer8d77be32022-10-20 15:08:25 +080069 json_get_values ht_capab_list ht_capab
developer20d67712022-03-02 14:09:32 +080070 json_get_values channel_list channels
71
72- [ "$auto_channel" = 0 ] && [ -z "$channel_list" ] && \
73- channel_list="$channel"
74-
developer9b3248d2022-07-06 00:44:05 +080075 [ "$min_tx_power" -gt 0 ] && append base_cfg "min_tx_power=$min_tx_power"
developer20d67712022-03-02 14:09:32 +080076
developer9b3248d2022-07-06 00:44:05 +080077 set_default noscan 0
developer24684862023-08-02 08:10:38 +080078@@ -157,8 +159,8 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +080079 ieee80211n=1
80 ht_capab=
81 case "$htmode" in
82- VHT20|HT20|HE20) ;;
83- HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
84+ VHT20|HT20|HE20|EHT20) ;;
developerbe3cf972023-04-27 09:58:26 +080085+ HT40*|VHT40|VHT80|VHT160|HE40*|HE80|HE160|EHT40*|EHT80|EHT160|EHT320*)
developer785b6502023-04-19 18:31:11 +080086 case "$hwmode" in
87 a)
88 case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
developer24684862023-08-02 08:10:38 +080089@@ -168,8 +170,22 @@ mac80211_hostapd_setup_base() {
developerbe3cf972023-04-27 09:58:26 +080090 ;;
91 *)
92 case "$htmode" in
93- HT40+) ht_capab="[HT40+]";;
94- HT40-) ht_capab="[HT40-]";;
95+ HT40+|HE40+|EHT40+)
96+ if [ "$channel" -gt 9 ]; then
97+ echo "Could not set the center freq with this HT mode setting"
98+ return 1
99+ else
100+ ht_capab="[HT40+]"
101+ fi
102+ ;;
103+ HT40-|HE40-|EHT40-)
104+ if [ "$channel" -lt 5 ]; then
105+ echo "Could not set the center freq with this HT mode setting"
106+ return 1
107+ else
108+ ht_capab="[HT40-]"
109+ fi
110+ ;;
111 *)
112 if [ "$channel" -lt 7 ]; then
113 ht_capab="[HT40+]"
developer24684862023-08-02 08:10:38 +0800114@@ -202,7 +218,7 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800115 dsss_cck_40:1
116
117 ht_cap_mask=0
118- for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
119+ for cap in $(iw phy "$phy" info | grep 'Capabilities: 0x' | cut -d: -f2); do
120 ht_cap_mask="$(($ht_cap_mask | $cap))"
121 done
122
developer24684862023-08-02 08:10:38 +0800123@@ -233,8 +249,8 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800124
125 idx="$channel"
126 case "$htmode" in
127- VHT20|HE20) enable_ac=1;;
128- VHT40|HE40)
129+ VHT20|HE20|EHT20) enable_ac=1;;
130+ VHT40|HE40|EHT40)
131 case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
132 1) idx=$(($channel + 2));;
133 0) idx=$(($channel - 2));;
developer24684862023-08-02 08:10:38 +0800134@@ -242,7 +258,7 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800135 enable_ac=1
136 vht_center_seg0=$idx
137 ;;
138- VHT80|HE80)
139+ VHT80|HE80|EHT80)
140 case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in
141 1) idx=$(($channel + 6));;
142 2) idx=$(($channel + 2));;
developer24684862023-08-02 08:10:38 +0800143@@ -253,7 +269,7 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800144 vht_oper_chwidth=1
145 vht_center_seg0=$idx
146 ;;
147- VHT160|HE160)
148+ VHT160|HE160|EHT160)
149 if [ "$band" = "6g" ]; then
150 case "$channel" in
151 1|5|9|13|17|21|25|29) idx=15;;
developer75c99f42023-09-04 11:28:21 +0800152@@ -268,23 +284,58 @@ mac80211_hostapd_setup_base() {
developeradd8de62023-05-02 16:25:52 +0800153 case "$channel" in
154 36|40|44|48|52|56|60|64) idx=50;;
155 100|104|108|112|116|120|124|128) idx=114;;
156+ 149|153|157|161|165|169|173|177) idx=163;;
157 esac
158 fi
159 enable_ac=1
developer785b6502023-04-19 18:31:11 +0800160 vht_oper_chwidth=2
161 vht_center_seg0=$idx
162 ;;
163+ EHT320*)
164+ case "$channel" in
165+ 1|5|9|13|17|21|25|29) idx=31;;
166+ 33|37|41|45|49|53|57|61| \
167+ 65|69|73|77|81|85|89|93) idx=63;;
168+ 97|101|105|109|113|117|121|125| \
169+ 129|133|137|141|145|149|153|157) idx=127;;
170+ 161|165|169|173|177|181|185|189| \
171+ 193|197|201|205|209|213|217|221) idx=191;;
172+ esac
173+ if [[ "$htmode" = "EHT320-1" && "$channel" -ge "193" ]] ||
174+ [[ "$htmode" = "EHT320-2" && "$channel" -le "29" ]]; then
175+ echo "Could not set the center freq with this EHT setting"
176+ return 1
177+ elif [[ "$htmode" = "EHT320-1" && "$channel" -ge "33" ]]; then
178+ if [ "$channel" -gt $idx ]; then
179+ idx=$(($idx + 32))
180+ else
181+ idx=$(($idx - 32))
182+ fi
183+ fi
184+ vht_oper_chwidth=2
185+ if [ "$channel" -gt $idx ]; then
186+ vht_center_seg0=$(($idx + 16))
187+ else
188+ vht_center_seg0=$(($idx - 16))
189+ fi
190+ eht_oper_chwidth=9
191+ eht_oper_centr_freq_seg0_idx=$idx
192+ ;;
193 esac
194 [ "$band" = "5g" ] && {
developer75c99f42023-09-04 11:28:21 +0800195- json_get_vars background_radar:0
196+ json_get_vars \
197+ background_radar:0 \
198+ background_cert_mode:0 \
199
200 [ "$background_radar" -eq 1 ] && append base_cfg "enable_background_radar=1" "$N"
201+ [ "$background_cert_mode" -eq 1 ] && append base_cfg "background_radar_mode=1" "$N"
202 }
developer785b6502023-04-19 18:31:11 +0800203 [ "$band" = "6g" ] && {
204 op_class=
205 case "$htmode" in
206- HE20) op_class=131;;
207- HE*) op_class=$((132 + $vht_oper_chwidth))
208+ HE20|EHT20) op_class=131;;
209+ EHT320*) op_class=137;;
210+ HE*|EHT*) op_class=$((132 + $vht_oper_chwidth))
211 esac
212 [ -n "$op_class" ] && append base_cfg "op_class=$op_class" "$N"
213 }
developer75c99f42023-09-04 11:28:21 +0800214@@ -312,7 +363,6 @@ mac80211_hostapd_setup_base() {
developer8b04dfd2022-12-07 16:29:19 +0800215 vht_link_adapt:3 \
216 vht160:2
217
218- set_default tx_burst 2.0
219 append base_cfg "ieee80211ac=1" "$N"
220 vht_cap=0
221 for cap in $(iw phy "$phy" info | awk -F "[()]" '/VHT Capabilities/ { print $2 }'); do
developer75c99f42023-09-04 11:28:21 +0800222@@ -326,6 +376,12 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800223 [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc"
224 vht_cap="$(( ($vht_cap & ~(0x700)) | ($cap_rx_stbc << 8) ))"
225
226+ [ "$etxbfen" -eq 0 ] && {
227+ su_beamformer=0
228+ su_beamformee=0
229+ mu_beamformer=0
230+ }
231+
232 mac80211_add_capabilities vht_capab $vht_cap \
233 RXLDPC:0x10::$rxldpc \
234 SHORT-GI-80:0x20::$short_gi_80 \
developer75c99f42023-09-04 11:28:21 +0800235@@ -407,7 +463,7 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800236 # 802.11ax
237 enable_ax=0
238 case "$htmode" in
239- HE*) enable_ax=1 ;;
240+ HE*|EHT*) enable_ax=1 ;;
241 esac
242
243 if [ "$enable_ax" != "0" ]; then
developer75c99f42023-09-04 11:28:21 +0800244@@ -416,10 +472,11 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800245 he_su_beamformee:1 \
246 he_mu_beamformer:1 \
247 he_twt_required:0 \
248+ he_twt_responder \
249 he_spr_sr_control:3 \
250 he_spr_psr_enabled:0 \
251 he_spr_non_srg_obss_pd_max_offset:0 \
252- he_bss_color:128 \
253+ he_bss_color \
254 he_bss_color_enabled:1
255
256 he_phy_cap=$(iw phy "$phy" info | sed -n '/HE Iftypes: AP/,$p' | awk -F "[()]" '/HE PHY Capabilities/ { print $2 }' | head -1)
developer75c99f42023-09-04 11:28:21 +0800257@@ -433,6 +490,11 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800258 append base_cfg "he_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
259 }
260
261+ [ "$etxbfen" -eq 0 ] && {
262+ he_su_beamformer=0
263+ he_mu_beamformer=0
264+ }
265+
266 mac80211_add_he_capabilities \
267 he_su_beamformer:${he_phy_cap:6:2}:0x80:$he_su_beamformer \
268 he_su_beamformee:${he_phy_cap:8:2}:0x1:$he_su_beamformee \
developer75c99f42023-09-04 11:28:21 +0800269@@ -440,7 +502,14 @@ mac80211_hostapd_setup_base() {
developer785b6502023-04-19 18:31:11 +0800270 he_spr_psr_enabled:${he_phy_cap:14:2}:0x1:$he_spr_psr_enabled \
271 he_twt_required:${he_mac_cap:0:2}:0x6:$he_twt_required
272
273+ if [ -n "$he_twt_responder" ]; then
274+ append base_cfg "he_twt_responder=$he_twt_responder" "$N"
275+ fi
276 if [ "$he_bss_color_enabled" -gt 0 ]; then
developer830efa72023-05-18 19:32:48 +0800277+ if !([ "$he_bss_color" -gt 0 ] && [ "$he_bss_color" -le 64 ]); then
developer785b6502023-04-19 18:31:11 +0800278+ rand=$(head -n 1 /dev/urandom | tr -dc 0-9 | head -c 2)
279+ he_bss_color=$((rand % 63 + 1))
280+ fi
281 append base_cfg "he_bss_color=$he_bss_color" "$N"
282 [ "$he_spr_non_srg_obss_pd_max_offset" -gt 0 ] && { \
283 append base_cfg "he_spr_non_srg_obss_pd_max_offset=$he_spr_non_srg_obss_pd_max_offset" "$N"
developer75c99f42023-09-04 11:28:21 +0800284@@ -459,34 +528,69 @@ mac80211_hostapd_setup_base() {
developer619eaa32023-08-29 13:33:51 +0800285 append base_cfg "he_mu_edca_qos_info_q_ack=0" "$N"
286 append base_cfg "he_mu_edca_qos_info_queue_request=0" "$N"
287 append base_cfg "he_mu_edca_qos_info_txop_request=0" "$N"
288- append base_cfg "he_mu_edca_ac_be_aifsn=8" "$N"
289+ append base_cfg "he_mu_edca_ac_be_aifsn=0" "$N"
290 append base_cfg "he_mu_edca_ac_be_aci=0" "$N"
291 append base_cfg "he_mu_edca_ac_be_ecwmin=9" "$N"
292 append base_cfg "he_mu_edca_ac_be_ecwmax=10" "$N"
293 append base_cfg "he_mu_edca_ac_be_timer=255" "$N"
294- append base_cfg "he_mu_edca_ac_bk_aifsn=15" "$N"
295+ append base_cfg "he_mu_edca_ac_bk_aifsn=0" "$N"
296 append base_cfg "he_mu_edca_ac_bk_aci=1" "$N"
297 append base_cfg "he_mu_edca_ac_bk_ecwmin=9" "$N"
298 append base_cfg "he_mu_edca_ac_bk_ecwmax=10" "$N"
299 append base_cfg "he_mu_edca_ac_bk_timer=255" "$N"
300 append base_cfg "he_mu_edca_ac_vi_ecwmin=5" "$N"
301 append base_cfg "he_mu_edca_ac_vi_ecwmax=7" "$N"
302- append base_cfg "he_mu_edca_ac_vi_aifsn=5" "$N"
303+ append base_cfg "he_mu_edca_ac_vi_aifsn=0" "$N"
304 append base_cfg "he_mu_edca_ac_vi_aci=2" "$N"
305 append base_cfg "he_mu_edca_ac_vi_timer=255" "$N"
306- append base_cfg "he_mu_edca_ac_vo_aifsn=5" "$N"
307+ append base_cfg "he_mu_edca_ac_vo_aifsn=0" "$N"
308 append base_cfg "he_mu_edca_ac_vo_aci=3" "$N"
309 append base_cfg "he_mu_edca_ac_vo_ecwmin=5" "$N"
310 append base_cfg "he_mu_edca_ac_vo_ecwmax=7" "$N"
developer8b04dfd2022-12-07 16:29:19 +0800311 append base_cfg "he_mu_edca_ac_vo_timer=255" "$N"
312 fi
313
developer18015ad2023-07-13 13:18:19 +0800314+ set_default tx_burst 2
developer8b04dfd2022-12-07 16:29:19 +0800315+
developer785b6502023-04-19 18:31:11 +0800316+ # 802.11be
317+ enable_be=0
318+ case "$htmode" in
319+ EHT*) enable_be=1 ;;
320+ esac
321+
322+ if [ "$enable_be" != "0" ]; then
323+ append base_cfg "ieee80211be=1" "$N"
324+ if [ "$etxbfen" -eq 0 ]; then
325+ append base_cfg "eht_su_beamformee=1" "$N"
326+ else
327+ append base_cfg "eht_su_beamformer=1" "$N"
328+ append base_cfg "eht_su_beamformee=1" "$N"
329+ append base_cfg "eht_mu_beamformer=1" "$N"
330+ fi
331+ [ "$hwmode" = "a" ] && {
332+ case $htmode in
333+ EHT320*)
334+ append base_cfg "eht_oper_chwidth=$eht_oper_chwidth" "$N"
335+ append base_cfg "eht_oper_centr_freq_seg0_idx=$eht_oper_centr_freq_seg0_idx" "$N"
336+ ;;
337+ *)
338+ append base_cfg "eht_oper_chwidth=$vht_oper_chwidth" "$N"
339+ append base_cfg "eht_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
340+ ;;
341+ esac
342+ }
343+ fi
344+
developer8b04dfd2022-12-07 16:29:19 +0800345 hostapd_prepare_device_config "$hostapd_conf_file" nl80211
346 cat >> "$hostapd_conf_file" <<EOF
347 ${channel:+channel=$channel}
developer0ba09b62023-03-10 18:43:49 +0800348 ${channel_list:+chanlist=$channel_list}
349 ${hostapd_noscan:+noscan=1}
350 ${tx_burst:+tx_queue_data2_burst=$tx_burst}
351+${mbssid:+mbssid=$mbssid}
developer785b6502023-04-19 18:31:11 +0800352+${mu_onoff:+mu_onoff=$mu_onoff}
353+${itxbfen:+ibf_enable=$itxbfen}
developer2c6592a2023-07-21 11:20:56 +0800354+${rnr:+rnr=$rnr}
developer0ba09b62023-03-10 18:43:49 +0800355 $base_cfg
356
357 EOF
developer75c99f42023-09-04 11:28:21 +0800358@@ -512,7 +616,7 @@ mac80211_hostapd_setup_bss() {
developer093e1a32023-02-24 16:10:53 +0800359 append hostapd_cfg "wds_sta=1" "$N"
360 [ -n "$wds_bridge" ] && append hostapd_cfg "wds_bridge=$wds_bridge" "$N"
361 }
362- [ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
363+ [ "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
364
365 cat >> /var/run/hostapd-$phy.conf <<EOF
366 $hostapd_cfg
developer75c99f42023-09-04 11:28:21 +0800367@@ -522,6 +626,31 @@ ${max_listen_int:+max_listen_interval=$max_listen_int}
developer0ba09b62023-03-10 18:43:49 +0800368 EOF
369 }
370
371+mac80211_generate_mbssid_mac() {
372+ local phy="$1"
373+ local transmitted_bssid="$2"
developer1952bcd2023-06-20 20:14:37 +0800374+ local id="${mbssidx:-0}"
developer0ba09b62023-03-10 18:43:49 +0800375+
376+ local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)"
developer0ba09b62023-03-10 18:43:49 +0800377+
378+ if [ -z "$transmitted_bssid" ]; then
379+ transmitted_bssid=$ref
380+ fi
381+
382+ if [ $id -eq 0 ]; then
383+ echo "$transmitted_bssid"
384+ return
385+ fi
386+
387+ local oIFS="$IFS"; IFS=":"; set -- $transmitted_bssid; IFS="$oIFS"
388+
389+ # Calculate nontransmitted bssid
developer0ba09b62023-03-10 18:43:49 +0800390+ b6="0x$6"
391+ ref_b6=$(($b6 % $max_mbssid))
developer1952bcd2023-06-20 20:14:37 +0800392+ b6=$(($b6 - $ref_b6 + ($ref_b6 + $id) % $max_mbssid))
developer0ba09b62023-03-10 18:43:49 +0800393+ printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $b6
394+}
395+
396 mac80211_get_addr() {
397 local phy="$1"
398 local idx="$(($2 + 1))"
developer75c99f42023-09-04 11:28:21 +0800399@@ -684,7 +813,19 @@ mac80211_prepare_vif() {
developer24684862023-08-02 08:10:38 +0800400 set_default powersave 0
401 json_add_string _ifname "$ifname"
developer0ba09b62023-03-10 18:43:49 +0800402
403- if [ -z "$macaddr" ]; then
developerd2fbd572023-06-19 19:48:25 +0800404+ if [ "$mbssid" -gt 0 ] && [ "$mode" == "ap" ]; then
developer1952bcd2023-06-20 20:14:37 +0800405+ [ "$mbssidx" -eq 0 ] && {
406+ if [ -z $macaddr ]; then
407+ transmitted_bssid="$(mac80211_generate_mac $phy)"
408+ else
409+ # uci set mac address
410+ transmitted_bssid=$macaddr
411+ fi
412+ macidx="$(($macidx + 1))"
developer0ba09b62023-03-10 18:43:49 +0800413+ }
414+ macaddr="$(mac80211_generate_mbssid_mac $phy $transmitted_bssid)"
developer1952bcd2023-06-20 20:14:37 +0800415+ mbssidx="$(($mbssidx + 1))"
developer0ba09b62023-03-10 18:43:49 +0800416+ elif [ -z "$macaddr" ]; then
417 macaddr="$(mac80211_generate_mac $phy)"
418 macidx="$(($macidx + 1))"
419 elif [ "$macaddr" = 'random' ]; then
developer75c99f42023-09-04 11:28:21 +0800420@@ -948,6 +1089,14 @@ hostapd_set_config() {
developer24684862023-08-02 08:10:38 +0800421 }
422
423 ubus wait_for hostapd
424+
425+ # each phy sleeps different times to prevent for ubus race condition.
426+ if [ "$phy" = "phy1" ]; then
427+ sleep 1;
428+ elif [ "$phy" = "phy2" ]; then
429+ sleep 2;
430+ fi
431+
432 local hostapd_res="$(ubus call hostapd config_set "{ \"phy\": \"$phy\", \"config\":\"${hostapd_conf_file}\", \"prev_config\": \"${hostapd_conf_file}.prev\"}")"
433 ret="$?"
434 [ "$ret" != 0 -o -z "$hostapd_res" ] && {
developer75c99f42023-09-04 11:28:21 +0800435@@ -1024,6 +1173,9 @@ mac80211_setup_vif() {
developerf0de14b2022-12-14 23:07:34 +0800436
437 json_select ..
438 [ -n "$failed" ] || wireless_add_vif "$name" "$ifname"
439+
440+ echo "Setup SMP Affinity"
441+ /sbin/smp-mt76.sh
442 }
443
444 get_freq() {
developer75c99f42023-09-04 11:28:21 +0800445@@ -1075,6 +1227,10 @@ mac80211_reset_config() {
developer24684862023-08-02 08:10:38 +0800446 wdev_tool "$phy" '{}'
developer0ba09b62023-03-10 18:43:49 +0800447 }
448
449+mac80211_count_ap() {
450+ total_num_ap=$(($total_num_ap + 1))
451+}
452+
453 drv_mac80211_setup() {
454 json_select config
455 json_get_vars \
developer75c99f42023-09-04 11:28:21 +0800456@@ -1082,7 +1238,8 @@ drv_mac80211_setup() {
developer74503112023-06-29 17:34:49 +0800457 country chanbw distance \
458 txpower antenna_gain \
459 rxantenna txantenna \
460- frag rts beacon_int:100 htmode
461+ frag rts beacon_int:100 htmode \
462+ sr_enable sr_enhanced
463 json_get_values basic_rate_list basic_rate
464 json_get_values scan_list scan_list
465 json_select ..
developer75c99f42023-09-04 11:28:21 +0800466@@ -1117,6 +1274,7 @@ drv_mac80211_setup() {
developer24684862023-08-02 08:10:38 +0800467
developer1952bcd2023-06-20 20:14:37 +0800468 macidx=0
469 staidx=0
470+ mbssidx=0
471
472 [ -n "$chanbw" ] && {
473 for file in /sys/kernel/debug/ieee80211/$phy/ath9k*/chanbw /sys/kernel/debug/ieee80211/$phy/ath5k/bwmode; do
developer75c99f42023-09-04 11:28:21 +0800474@@ -1167,6 +1325,16 @@ drv_mac80211_setup() {
developer24684862023-08-02 08:10:38 +0800475
476 wpa_supplicant_init_config
developer0ba09b62023-03-10 18:43:49 +0800477
478+ total_num_ap=0
479+ max_mbssid=1
480+ for_each_interface "ap" mac80211_count_ap
481+ total_num_ap=$(($total_num_ap - 1))
482+ while [ $total_num_ap -gt 0 ]
483+ do
484+ total_num_ap=$(($total_num_ap >> 1))
485+ max_mbssid=$(($max_mbssid << 1))
486+ done
487+
488 mac80211_prepare_iw_htmode
developer24684862023-08-02 08:10:38 +0800489 active_ifnames=
490 for_each_interface "ap sta adhoc mesh monitor" mac80211_prepare_vif
developer75c99f42023-09-04 11:28:21 +0800491@@ -1175,6 +1343,9 @@ drv_mac80211_setup() {
developer24684862023-08-02 08:10:38 +0800492 [ -x /usr/sbin/wpa_supplicant ] && wpa_supplicant_set_config "$phy"
493 [ -x /usr/sbin/hostapd ] && hostapd_set_config "$phy"
developer74503112023-06-29 17:34:49 +0800494
495+ [ -n "$sr_enable" ] && echo "$sr_enable" > /sys/kernel/debug/ieee80211/$phy/mt76/sr_enable
496+ [ -n "$sr_enhanced" ] && echo "$sr_enhanced" > /sys/kernel/debug/ieee80211/$phy/mt76/sr_enhanced_enable
497+
developer24684862023-08-02 08:10:38 +0800498 [ -x /usr/sbin/wpa_supplicant ] && wpa_supplicant_start "$phy"
developer74503112023-06-29 17:34:49 +0800499
developer24684862023-08-02 08:10:38 +0800500 json_set_namespace wdev_uc prev
developer9b3248d2022-07-06 00:44:05 +0800501diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developer75c99f42023-09-04 11:28:21 +0800502index e24a2a63..da3ee8cc 100644
developere2597ba2022-06-24 13:09:16 +0800503--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
504+++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developer20ce7bd2023-05-20 13:25:14 +0800505@@ -60,6 +60,9 @@ BEGIN {
developer785b6502023-04-19 18:31:11 +0800506 if (vht && band != "1:") mode="VHT80"
507 if (he) mode="HE80"
508 if (he && band == "1:") mode="HE20"
developer20ce7bd2023-05-20 13:25:14 +0800509+ if (eht && band == "2:") mode="EHT160"
510+ if (eht && band == "4:") mode="EHT320"
developer785b6502023-04-19 18:31:11 +0800511+ if (eht && band == "1:") mode="EHT20"
512 sub("\\[", "", channel)
513 sub("\\]", "", channel)
514 bands = bands band channel ":" mode " "
developer20ce7bd2023-05-20 13:25:14 +0800515@@ -73,6 +76,7 @@ $1 == "Band" {
developer785b6502023-04-19 18:31:11 +0800516 vht = ""
517 ht = ""
518 he = ""
519+ eht = ""
520 }
521
522 $0 ~ "Capabilities:" {
developer20ce7bd2023-05-20 13:25:14 +0800523@@ -87,6 +91,18 @@ $0 ~ "HE Iftypes" {
developer785b6502023-04-19 18:31:11 +0800524 he=1
525 }
526
527+$0 ~ "EHT Iftypes" {
528+ eht=1
529+}
530+
developer20ce7bd2023-05-20 13:25:14 +0800531+$0 ~ / *HE MAC Capabilities \(0x000000000000\)/ {
532+ he=0
533+}
534+
535+$0 ~ / *EHT MAC Capabilities \(0x0000\)/ {
536+ eht=0
537+}
538+
developer785b6502023-04-19 18:31:11 +0800539 $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
540 channel = $4
541 }
developer75c99f42023-09-04 11:28:21 +0800542@@ -120,6 +136,25 @@ get_band_defaults() {
developere2597ba2022-06-24 13:09:16 +0800543 mode_band="$band"
544 channel="$chan"
545 htmode="$mode"
546+ if [ "$band" = "6g" ]
547+ then
548+ encryption=sae
549+ key=12345678
developer20ce7bd2023-05-20 13:25:14 +0800550+ sae_pwe=2
551+ ieee80211w=2
developeradbb45b2023-06-09 14:43:01 +0800552+ channel=37
553+ mbssid=1
developer75c99f42023-09-04 11:28:21 +0800554+ elif [ "$band" = "5g" ]
555+ then
556+ noscan=1
557+ encryption=none
558+ rnr=1
559+ background_radar=1
developere2597ba2022-06-24 13:09:16 +0800560+ else
developer659b07e2023-05-25 12:34:13 +0800561+ noscan=1
developere2597ba2022-06-24 13:09:16 +0800562+ encryption=none
developer2c6592a2023-07-21 11:20:56 +0800563+ rnr=1
developere2597ba2022-06-24 13:09:16 +0800564+ fi
565 done
566 }
567
developer75c99f42023-09-04 11:28:21 +0800568@@ -153,6 +188,10 @@ detect_mac80211() {
developer785b6502023-04-19 18:31:11 +0800569
570 json_load_file /etc/board.json
571
572+ # generate random bytes for macaddr
573+ rand=$(hexdump -C /dev/urandom | head -n 1 &)
574+ killall hexdump
575+
576 for _dev in /sys/class/ieee80211/*; do
577 [ -e "$_dev" ] || continue
578
developer75c99f42023-09-04 11:28:21 +0800579@@ -162,6 +201,14 @@ detect_mac80211() {
developere2597ba2022-06-24 13:09:16 +0800580 channel=""
581 htmode=""
582 ht_capab=""
583+ encryption=""
developer659b07e2023-05-25 12:34:13 +0800584+ noscan=""
developere2597ba2022-06-24 13:09:16 +0800585+ key=""
developer09257932023-05-09 13:41:30 +0800586+ sae_pwe=""
developer20ce7bd2023-05-20 13:25:14 +0800587+ ieee80211w=""
developeradbb45b2023-06-09 14:43:01 +0800588+ mbssid=""
developer2c6592a2023-07-21 11:20:56 +0800589+ rnr=""
developer75c99f42023-09-04 11:28:21 +0800590+ background_radar=""
developere2597ba2022-06-24 13:09:16 +0800591
592 get_band_defaults "$dev"
593
developer75c99f42023-09-04 11:28:21 +0800594@@ -196,6 +243,14 @@ detect_mac80211() {
developer785b6502023-04-19 18:31:11 +0800595 ;;
596 esac
597
developer212c0d82023-07-13 19:41:47 +0800598+ macaddr=""
developer1325ba72023-06-26 13:43:31 +0800599+ if (dmesg | grep -q "eeprom load fail"); then
developer1952bcd2023-06-20 20:14:37 +0800600+ for i in $(seq 2 3); do
601+ macaddr=${macaddr}:$(echo $rand | cut -d ' ' -f $i)
602+ done
603+ macaddr="00:0$(($devidx - 1)):55:66${macaddr}"
developer1952bcd2023-06-20 20:14:37 +0800604+ fi
developer785b6502023-04-19 18:31:11 +0800605+
606 uci -q batch <<-EOF
607 set wireless.${name}=wifi-device
608 set wireless.${name}.type=mac80211
developer75c99f42023-09-04 11:28:21 +0800609@@ -203,15 +258,43 @@ detect_mac80211() {
developer09257932023-05-09 13:41:30 +0800610 set wireless.${name}.channel=${channel}
611 set wireless.${name}.band=${mode_band}
612 set wireless.${name}.htmode=$htmode
613- set wireless.${name}.disabled=1
developer20ce7bd2023-05-20 13:25:14 +0800614+ set wireless.${name}.country='US'
developer659b07e2023-05-25 12:34:13 +0800615+ set wireless.${name}.noscan=${noscan}
developer09257932023-05-09 13:41:30 +0800616+ set wireless.${name}.disabled=0
developeradbb45b2023-06-09 14:43:01 +0800617+EOF
618+ [ -n "$mbssid" ] && {
619+ uci -q set wireless.${name}.mbssid=${mbssid}
620+ }
developer2c6592a2023-07-21 11:20:56 +0800621+ [ -n "$rnr" ] && {
622+ uci -q set wireless.${name}.rnr=${rnr}
623+ }
developer75c99f42023-09-04 11:28:21 +0800624+ [ -n "$background_radar" ] && {
625+ uci -q set wireless.${name}.background_radar=${background_radar}
626+ }
developer09257932023-05-09 13:41:30 +0800627
developeradbb45b2023-06-09 14:43:01 +0800628+ uci -q batch <<-EOF
developer09257932023-05-09 13:41:30 +0800629 set wireless.default_${name}=wifi-iface
630 set wireless.default_${name}.device=${name}
developer8d77be32022-10-20 15:08:25 +0800631 set wireless.default_${name}.network=lan
632 set wireless.default_${name}.mode=ap
developer09257932023-05-09 13:41:30 +0800633- set wireless.default_${name}.ssid=OpenWrt
developer8d77be32022-10-20 15:08:25 +0800634- set wireless.default_${name}.encryption=none
developer09257932023-05-09 13:41:30 +0800635+ set wireless.default_${name}.ssid=OpenWrt-${mode_band}
developer8d77be32022-10-20 15:08:25 +0800636+ set wireless.default_${name}.encryption=${encryption}
developere2597ba2022-06-24 13:09:16 +0800637 EOF
developer212c0d82023-07-13 19:41:47 +0800638+
639+ # calibrated board will use eeprom macaddress, not ramdom address
640+ [ -n "$macaddr" ] && {
641+ uci -q set wireless.default_${name}.macaddr=${macaddr}
642+ }
643+
developere2597ba2022-06-24 13:09:16 +0800644+ [ -n "$key" ] && {
developer8d77be32022-10-20 15:08:25 +0800645+ uci -q set wireless.default_${name}.key=${key}
developere2597ba2022-06-24 13:09:16 +0800646+ }
developer09257932023-05-09 13:41:30 +0800647+ [ -n "$sae_pwe" ] && {
648+ uci -q set wireless.default_${name}.sae_pwe=${sae_pwe}
649+ }
developer20ce7bd2023-05-20 13:25:14 +0800650+ [ -n "$ieee80211w" ] && {
651+ uci -q set wireless.default_${name}.ieee80211w=${ieee80211w}
652+ }
developere2597ba2022-06-24 13:09:16 +0800653 uci -q commit wireless
developer8d77be32022-10-20 15:08:25 +0800654 done
655 }
developer85839fe2023-02-23 10:32:51 +0800656diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
developer619eaa32023-08-29 13:33:51 +0800657index 65ae662c..6eab470d 100644
developer85839fe2023-02-23 10:32:51 +0800658--- a/package/network/services/hostapd/files/hostapd.sh
659+++ b/package/network/services/hostapd/files/hostapd.sh
developer74503112023-06-29 17:34:49 +0800660@@ -60,7 +60,14 @@ hostapd_append_wpa_key_mgmt() {
661 [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-EAP-SHA256"
662 ;;
663 sae)
664- append wpa_key_mgmt "SAE"
665+ case "$encryption" in
666+ *sae-ext*)
667+ append wpa_key_mgmt "SAE-EXT-KEY"
668+ ;;
669+ *)
670+ append wpa_key_mgmt "SAE"
671+ ;;
672+ esac
673 [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-SAE"
674 ;;
675 psk-sae)
676@@ -115,6 +122,7 @@ hostapd_common_add_device_config() {
677 config_add_int rts_threshold
678 config_add_int rssi_reject_assoc_rssi
679 config_add_int rssi_ignore_probe_request
680+ config_add_int rssi_reject_assoc_timeout
681 config_add_int maxassoc
682
683 config_add_string acs_chan_bias
684@@ -227,8 +235,10 @@ hostapd_prepare_device_config() {
685 hostapd_add_rate brlist "$br"
686 done
687
688+ json_get_vars rssi_reject_assoc_timeout
689 [ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N"
690 [ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N"
691+ [ -n "$rssi_reject_assoc_timeout" ] && append base_cfg "rssi_reject_assoc_timeout=$rssi_reject_assoc_timeout" "$N"
692 [ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N"
693 [ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N"
694 [ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
695@@ -379,6 +389,24 @@ hostapd_common_add_bss_config() {
developer82408892023-03-27 15:09:00 +0800696 config_add_string fils_dhcp
697
698 config_add_int ocv
699+
700+ config_add_int disable_eht
701+ config_add_int disable_he
702+ config_add_int disable_vht
703+ config_add_int disable_ht
developer813f5d72023-03-28 17:44:38 +0800704+
developerf166f542023-05-25 14:40:30 +0800705+ config_add_boolean beacon_prot interworking
developer74503112023-06-29 17:34:49 +0800706+
707+ config_add_int unsol_bcast_probe_resp_interval
708+ config_add_int fils_discovery_min_interval
709+ config_add_int fils_discovery_max_interval
710+ config_add_boolean rnr
711+
712+ config_add_array sae_groups
713+ config_add_array owe_groups
714+ config_add_array pairwise
715+ config_add_string group_cipher
716+
developer82408892023-03-27 15:09:00 +0800717 }
718
719 hostapd_set_vlan_file() {
developer74503112023-06-29 17:34:49 +0800720@@ -443,11 +471,11 @@ append_iw_nai_realm() {
developerf166f542023-05-25 14:40:30 +0800721 }
722
723 append_iw_venue_name() {
724- append bss_conf "venue_name=$1" "$N"
725+ [ -n "$1" ] && append bss_conf "venue_name=$1" "$N"
726 }
727
728 append_iw_venue_url() {
729- append bss_conf "venue_url=$1" "$N"
730+ [ -n "$1" ] && append bss_conf "venue_url=$1" "$N"
731 }
732
733 append_hs20_oper_friendly_name() {
developer74503112023-06-29 17:34:49 +0800734@@ -565,7 +593,8 @@ hostapd_set_bss_options() {
735 ppsk airtime_bss_weight airtime_bss_limit airtime_sta_weight \
736 multicast_to_unicast_all proxy_arp per_sta_vif \
737 eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \
738- vendor_elements fils ocv
739+ vendor_elements fils ocv unsol_bcast_probe_resp_interval fils_discovery_min_interval \
740+ fils_discovery_max_interval rnr group_cipher
741
742 set_default fils 0
743 set_default isolate 0
developer9097e5e2023-07-19 10:22:24 +0800744@@ -793,6 +822,35 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800745 local auth_algs="$((($auth_mode_shared << 1) | $auth_mode_open))"
746 append bss_conf "auth_algs=${auth_algs:-1}" "$N"
747 append bss_conf "wpa=$wpa" "$N"
748+
749+ json_get_values pairwise pairwise
developer9097e5e2023-07-19 10:22:24 +0800750+ if [ -n "$pairwise" ]; then
751+ case "$pairwise" in
752+ *tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip)
753+ wpa_cipher="CCMP TKIP"
754+ ;;
755+ *ccmp256)
756+ wpa_cipher="CCMP-256"
757+ ;;
758+ *aes|*ccmp)
759+ wpa_cipher="CCMP"
760+ ;;
761+ *tkip)
762+ wpa_cipher="TKIP"
763+ ;;
764+ *gcmp256)
765+ wpa_cipher="GCMP-256"
766+ ;;
767+ *gcmp)
768+ wpa_cipher="GCMP"
769+ ;;
770+ *)
771+ wpa_cipher=""
772+ ;;
773+ esac
774+ fi
developer74503112023-06-29 17:34:49 +0800775+ [ -n "$wpa_cipher" ] && wpa_pairwise="$wpa_cipher"
776+
777 [ -n "$wpa_pairwise" ] && append bss_conf "wpa_pairwise=$wpa_pairwise" "$N"
778
779 set_default wps_pushbutton 0
developer9097e5e2023-07-19 10:22:24 +0800780@@ -844,7 +902,7 @@ hostapd_set_bss_options() {
developerda723192023-05-22 19:46:10 +0800781 }
782
783 append bss_conf "ssid=$ssid" "$N"
784- [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=" "$N"
785+ [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=$network_bridge" "$N"
786 [ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
787 [ -n "$iapp_interface" ] && {
788 local ifname
developer9097e5e2023-07-19 10:22:24 +0800789@@ -957,6 +1015,8 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800790 fi
791
792 if [ "$wpa" -ge "2" ]; then
793+ json_get_values sae_groups sae_groups
794+ json_get_values owe_groups owe_groups
795 if [ -n "$network_bridge" -a "$rsn_preauth" = 1 ]; then
796 set_default auth_cache 1
797 append bss_conf "rsn_preauth=1" "$N"
developer9097e5e2023-07-19 10:22:24 +0800798@@ -975,17 +1035,42 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800799 append bss_conf "okc=$auth_cache" "$N"
800 [ "$auth_cache" = 0 -a "$fils" = 0 ] && append bss_conf "disable_pmksa_caching=1" "$N"
801
802+ [ -z "$group_cipher" ] && group_cipher="$wpa_cipher"
803+
804+ if [ -n "$sae_groups" -o -n "$owe_groups" ]; then
805+ case "$auth_type" in
806+ sae*)
807+ append bss_conf "sae_groups=$sae_groups" "$N"
808+ append bss_conf "group_cipher=$group_cipher" "$N"
809+ ;;
810+ owe)
811+ append bss_conf "owe_groups=$owe_groups" "$N"
812+ append bss_conf "group_cipher=$group_cipher" "$N"
813+ ;;
814+ esac
815+ fi
816+
developer813f5d72023-03-28 17:44:38 +0800817 # RSN -> allow management frame protection
818 case "$ieee80211w" in
819 [012])
820- json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout
821+ json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot
822 append bss_conf "ieee80211w=$ieee80211w" "$N"
823 [ "$ieee80211w" -gt "0" ] && {
developer74503112023-06-29 17:34:49 +0800824+ case "$group_cipher" in
825+ CCMP*)
826+ ieee80211w_mgmt_cipher="AES-128-CMAC"
827+ ;;
828+ GCMP-256)
829+ [[ "$encryption" != "*owe*" ]] && ieee80211w_mgmt_cipher="BIP-GMAC-256"
830+ ;;
831+ esac
developer813f5d72023-03-28 17:44:38 +0800832 if [ "$auth_type" = "eap192" ]; then
developer74503112023-06-29 17:34:49 +0800833 append bss_conf "group_mgmt_cipher=BIP-GMAC-256" "$N"
developer813f5d72023-03-28 17:44:38 +0800834 else
835 append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N"
836 fi
837+ [ -n "$beacon_prot" ] && \
838+ append bss_conf "beacon_prot=$beacon_prot" "$N"
839 [ -n "$ieee80211w_max_timeout" ] && \
840 append bss_conf "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N"
841 [ -n "$ieee80211w_retry_timeout" ] && \
developer9097e5e2023-07-19 10:22:24 +0800842@@ -1050,9 +1135,10 @@ hostapd_set_bss_options() {
developerf166f542023-05-25 14:40:30 +0800843 json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
844 json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3
845 json_get_vars iw_venue_name iw_venue_url
846+ json_get_vars interworking
847
848 set_default iw_enabled 0
849- if [ "$iw_enabled" = "1" ]; then
850+ if [ "$iw_enabled" = "1" ] || [ "$interworking" = "1" ]; then
851 append bss_conf "interworking=1" "$N"
852 set_default iw_internet 1
853 set_default iw_asra 0
developer9097e5e2023-07-19 10:22:24 +0800854@@ -1159,6 +1245,22 @@ hostapd_set_bss_options() {
developer74503112023-06-29 17:34:49 +0800855 append bss_conf "$val" "$N"
856 done
857
858+ if [ "$unsol_bcast_probe_resp_interval" -gt 0 ]; then
859+ append bss_conf "unsol_bcast_probe_resp_interval=$unsol_bcast_probe_resp_interval" "$N"
860+ fi
861+
862+ if [ -n "$fils_discovery_min_interval" ]; then
863+ append bss_conf "fils_discovery_min_interval=$fils_discovery_min_interval" "$N"
864+ fi
865+
866+ if [ -n "$fils_discovery_max_interval" ]; then
867+ append bss_conf "fils_discovery_max_interval=$fils_discovery_max_interval" "$N"
868+ fi
869+
870+ if [ -n "$rnr" ]; then
871+ append bss_conf "rnr=$rnr" "$N"
872+ fi
873+
developer5b3b7a92023-08-12 03:41:52 +0800874 append "$var" "$bss_conf" "$N"
875 return 0
876 }
877@@ -1246,6 +1348,7 @@ wpa_supplicant_prepare_interface() {
developer18015ad2023-07-13 13:18:19 +0800878 country_str="country=$country"
879 }
880
developer2cf3f4c2023-07-24 16:58:25 +0800881+ local tx_queue_data2_burst="tx_queue_data2_burst=0"
developer18015ad2023-07-13 13:18:19 +0800882 multiap_flag_file="${_config}.is_multiap"
883 if [ "$multi_ap" = "1" ]; then
884 touch "$multiap_flag_file"
developer5b3b7a92023-08-12 03:41:52 +0800885@@ -1257,6 +1360,7 @@ wpa_supplicant_prepare_interface() {
developer18015ad2023-07-13 13:18:19 +0800886 ${scan_list:+freq_list=$scan_list}
887 $ap_scan
888 $country_str
889+$tx_queue_data2_burst
890 EOF
891 return 0
892 }
developer5b3b7a92023-08-12 03:41:52 +0800893@@ -1528,12 +1632,38 @@ wpa_supplicant_add_network() {
developer74503112023-06-29 17:34:49 +0800894 ;;
895 esac
896
developerbb29b5e2023-07-25 20:41:04 +0800897- [ "$wpa_cipher" = GCMP ] && {
898- append network_data "pairwise=GCMP" "$N$T"
899- append network_data "group=GCMP" "$N$T"
900- }
developer74503112023-06-29 17:34:49 +0800901+ json_get_values pairwise pairwise
developer9097e5e2023-07-19 10:22:24 +0800902+ if [ -n "$pairwise" ]; then
903+ case "$pairwise" in
904+ *tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip)
905+ wpa_cipher="CCMP TKIP"
906+ ;;
907+ *ccmp256)
908+ wpa_cipher="CCMP-256"
909+ ;;
910+ *aes|*ccmp)
911+ wpa_cipher="CCMP"
912+ ;;
913+ *tkip)
914+ wpa_cipher="TKIP"
915+ ;;
916+ *gcmp256)
917+ wpa_cipher="GCMP-256"
918+ ;;
919+ *gcmp)
920+ wpa_cipher="GCMP"
921+ ;;
922+ *)
923+ wpa_cipher=""
924+ ;;
925+ esac
926+ fi
developer74503112023-06-29 17:34:49 +0800927+ [ -n "$wpa_cipher" ] && wpa_pairwise="$wpa_cipher"
developer74503112023-06-29 17:34:49 +0800928
929 [ "$mode" = mesh ] || {
930+ json_get_values sae_groups sae_groups
931+ json_get_values owe_groups owe_groups
932+
933 case "$wpa" in
934 1)
935 append network_data "proto=WPA" "$N$T"
developer5b3b7a92023-08-12 03:41:52 +0800936@@ -1543,12 +1673,48 @@ wpa_supplicant_add_network() {
developer74503112023-06-29 17:34:49 +0800937 ;;
938 esac
939
940+ [ -n "$wpa_pairwise" ] && append network_data "pairwise=$wpa_pairwise" "$N$T"
941+ [ -z "$group_cipher" ] && group_cipher="$wpa_cipher"
942+
943+ if [ -n "$sae_groups" -o -n "$owe_groups" ]; then
944+ case "$auth_type" in
945+ sae*)
946+ echo "sae_groups=$sae_groups" >> "$_config"
947+ append network_data "group=$group_cipher" "$N$T"
948+ ;;
949+ owe)
950+ append network_data "owe_group=$owe_groups" "$N$T"
951+ append network_data "group=$group_cipher" "$N$T"
952+ ;;
953+ esac
954+ fi
955+
956+ # RSN -> allow management frame protection
957 case "$ieee80211w" in
958 [012])
959- [ "$wpa" -ge 2 ] && append network_data "ieee80211w=$ieee80211w" "$N$T"
960+ json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot
961+ append network_data "ieee80211w=$ieee80211w" "$N$T"
962+ [ "$ieee80211w" -gt "0" ] && {
963+ case "$group_cipher" in
964+ CCMP*)
965+ ieee80211w_mgmt_cipher="AES-128-CMAC"
966+ ;;
967+ GCMP-256)
968+ [[ "$encryption" != "*owe*" ]] && ieee80211w_mgmt_cipher="BIP-GMAC-256"
969+ ;;
970+ esac
971+ if [ "$auth_type" = "eap192" ]; then
972+ append network_data "group_mgmt=BIP-GMAC-256" "$N$T"
973+ else
974+ append network_data "group_mgmt=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N$T"
975+ fi
976+ [ -n "$beacon_prot" ] && \
977+ append network_data "beacon_prot=$beacon_prot" "$N$T"
978+ }
979 ;;
980 esac
981 }
982+
983 [ -n "$bssid" ] && append network_data "bssid=$bssid" "$N$T"
984 [ -n "$beacon_int" ] && append network_data "beacon_int=$beacon_int" "$N$T"
985
developer5b3b7a92023-08-12 03:41:52 +0800986@@ -1559,6 +1725,20 @@ wpa_supplicant_add_network() {
developer82408892023-03-27 15:09:00 +0800987 [ -n "$bssid_blacklist" ] && append network_data "bssid_blacklist=$bssid_blacklist" "$N$T"
988 [ -n "$bssid_whitelist" ] && append network_data "bssid_whitelist=$bssid_whitelist" "$N$T"
989
990+ local disable_eht
991+ local disable_he
992+ local disable_vht
993+ local disable_ht
994+ json_get_vars disable_eht
995+ json_get_vars disable_he
996+ json_get_vars disable_vht
997+ json_get_vars disable_ht
998+
999+ [ -n "$disable_eht" ] && append network_data "disable_eht=$disable_eht" "$N$T"
1000+ [ -n "$disable_he" ] && append network_data "disable_he=$disable_he" "$N$T"
1001+ [ -n "$disable_vht" ] && append network_data "disable_vht=$disable_vht" "$N$T"
1002+ [ -n "$disable_ht" ] && append network_data "disable_ht=$disable_ht" "$N$T"
1003+
1004 [ -n "$basic_rate" ] && {
1005 local br rate_list=
1006 for br in $basic_rate; do
developer5b3b7a92023-08-12 03:41:52 +08001007@@ -1573,6 +1753,11 @@ wpa_supplicant_add_network() {
developer85839fe2023-02-23 10:32:51 +08001008 append network_data "mcast_rate=$mc_rate" "$N$T"
1009 }
1010
1011+ if [ "$auth_type" = "sae" ]; then
1012+ json_get_vars sae_pwe sae_pwe
1013+ [ -n "$sae_pwe" ] && echo "sae_pwe=$sae_pwe" >> "$_config"
1014+ fi
1015+
1016 if [ "$key_mgmt" = "WPS" ]; then
1017 echo "wps_cred_processing=1" >> "$_config"
1018 else