blob: f08cfd70299472595a9bd30c5e5a2748eadf319d [file] [log] [blame]
developer98f3c3c2022-11-10 22:41:59 +08001diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
developer2b3ebe22023-05-25 14:40:30 +08002index a7472ee779..f06c889b0a 100644
developer98f3c3c2022-11-10 22:41:59 +08003--- a/package/kernel/mac80211/Makefile
4+++ b/package/kernel/mac80211/Makefile
developer528f1a92023-05-02 11:10:08 +08005@@ -20,6 +20,7 @@ PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
developer98f3c3c2022-11-10 22:41:59 +08006 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
7 PKG_BUILD_PARALLEL:=1
developer293afb52022-11-14 10:25:04 +08008
developer98f3c3c2022-11-10 22:41:59 +08009+SOURCE_PATH:=./src
10 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
developer293afb52022-11-14 10:25:04 +080011
developer98f3c3c2022-11-10 22:41:59 +080012 PKG_DRIVERS = \
developer528f1a92023-05-02 11:10:08 +080013@@ -72,6 +73,10 @@ config-y:= \
developer9ead8ed2022-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
developer528f1a92023-05-02 11:10:08 +080024@@ -297,6 +302,8 @@ define Build/Prepare
developer293afb52022-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 \
developer8ac97122022-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
developer2b3ebe22023-05-25 14:40:30 +080034index 5aaba9af26..2ea3e7c955 100644
developer8ac97122022-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
developer0ef73a62023-03-10 18:43:49 +080037@@ -27,6 +27,7 @@ drv_mac80211_init_device_config() {
38
39 config_add_string path phy 'macaddr:macaddr'
40 config_add_string tx_burst
developerf18436f2023-04-19 18:31:11 +080041+ config_add_int mbssid mu_onoff
developer0ef73a62023-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
developerf18436f2023-04-19 18:31:11 +080045@@ -53,7 +54,10 @@ drv_mac80211_init_device_config() {
46 he_spr_sr_control \
47 he_spr_psr_enabled \
48 he_bss_color_enabled \
49- he_twt_required
50+ he_twt_required \
51+ he_twt_responder \
52+ etxbfen \
53+ itxbfen
54 config_add_int \
55 beamformer_antennas \
56 beamformee_antennas \
57@@ -140,13 +144,11 @@ mac80211_hostapd_setup_base() {
developer0ef73a62023-03-10 18:43:49 +080058 [ -n "$acs_exclude_dfs" ] && [ "$acs_exclude_dfs" -gt 0 ] &&
59 append base_cfg "acs_exclude_dfs=1" "$N"
60
61- json_get_vars noscan ht_coex min_tx_power:0 tx_burst
developerf18436f2023-04-19 18:31:11 +080062+ json_get_vars noscan ht_coex min_tx_power:0 tx_burst mbssid mu_onoff
developerdf6f55c2023-05-11 19:56:55 +080063+ json_get_vars etxbfen:1 itxbfen:0
developer5f5952d2022-10-20 15:08:25 +080064 json_get_values ht_capab_list ht_capab
developer8ac97122022-03-02 14:09:32 +080065 json_get_values channel_list channels
66
67- [ "$auto_channel" = 0 ] && [ -z "$channel_list" ] && \
68- channel_list="$channel"
69-
developerd3c708b2022-07-06 00:44:05 +080070 [ "$min_tx_power" -gt 0 ] && append base_cfg "min_tx_power=$min_tx_power"
developer8ac97122022-03-02 14:09:32 +080071
developerd3c708b2022-07-06 00:44:05 +080072 set_default noscan 0
developerf18436f2023-04-19 18:31:11 +080073@@ -160,8 +162,8 @@ mac80211_hostapd_setup_base() {
74 ieee80211n=1
75 ht_capab=
76 case "$htmode" in
77- VHT20|HT20|HE20) ;;
78- HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
79+ VHT20|HT20|HE20|EHT20) ;;
developera6e711f2023-04-27 09:58:26 +080080+ HT40*|VHT40|VHT80|VHT160|HE40*|HE80|HE160|EHT40*|EHT80|EHT160|EHT320*)
developerf18436f2023-04-19 18:31:11 +080081 case "$hwmode" in
82 a)
83 case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
developera6e711f2023-04-27 09:58:26 +080084@@ -171,8 +173,22 @@ mac80211_hostapd_setup_base() {
85 ;;
86 *)
87 case "$htmode" in
88- HT40+) ht_capab="[HT40+]";;
89- HT40-) ht_capab="[HT40-]";;
90+ HT40+|HE40+|EHT40+)
91+ if [ "$channel" -gt 9 ]; then
92+ echo "Could not set the center freq with this HT mode setting"
93+ return 1
94+ else
95+ ht_capab="[HT40+]"
96+ fi
97+ ;;
98+ HT40-|HE40-|EHT40-)
99+ if [ "$channel" -lt 5 ]; then
100+ echo "Could not set the center freq with this HT mode setting"
101+ return 1
102+ else
103+ ht_capab="[HT40-]"
104+ fi
105+ ;;
106 *)
107 if [ "$channel" -lt 7 ]; then
108 ht_capab="[HT40+]"
109@@ -205,7 +221,7 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800110 dsss_cck_40:1
111
112 ht_cap_mask=0
113- for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
114+ for cap in $(iw phy "$phy" info | grep 'Capabilities: 0x' | cut -d: -f2); do
115 ht_cap_mask="$(($ht_cap_mask | $cap))"
116 done
117
developera6e711f2023-04-27 09:58:26 +0800118@@ -236,8 +252,8 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800119
120 idx="$channel"
121 case "$htmode" in
122- VHT20|HE20) enable_ac=1;;
123- VHT40|HE40)
124+ VHT20|HE20|EHT20) enable_ac=1;;
125+ VHT40|HE40|EHT40)
126 case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
127 1) idx=$(($channel + 2));;
128 0) idx=$(($channel - 2));;
developera6e711f2023-04-27 09:58:26 +0800129@@ -245,7 +261,7 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800130 enable_ac=1
131 vht_center_seg0=$idx
132 ;;
133- VHT80|HE80)
134+ VHT80|HE80|EHT80)
135 case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in
136 1) idx=$(($channel + 6));;
137 2) idx=$(($channel + 2));;
developera6e711f2023-04-27 09:58:26 +0800138@@ -256,7 +272,7 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800139 vht_oper_chwidth=1
140 vht_center_seg0=$idx
141 ;;
142- VHT160|HE160)
143+ VHT160|HE160|EHT160)
144 if [ "$band" = "6g" ]; then
145 case "$channel" in
146 1|5|9|13|17|21|25|29) idx=15;;
developerd6cf5892023-05-02 16:25:52 +0800147@@ -271,12 +287,43 @@ mac80211_hostapd_setup_base() {
148 case "$channel" in
149 36|40|44|48|52|56|60|64) idx=50;;
150 100|104|108|112|116|120|124|128) idx=114;;
151+ 149|153|157|161|165|169|173|177) idx=163;;
152 esac
153 fi
154 enable_ac=1
developerf18436f2023-04-19 18:31:11 +0800155 vht_oper_chwidth=2
156 vht_center_seg0=$idx
157 ;;
158+ EHT320*)
159+ case "$channel" in
160+ 1|5|9|13|17|21|25|29) idx=31;;
161+ 33|37|41|45|49|53|57|61| \
162+ 65|69|73|77|81|85|89|93) idx=63;;
163+ 97|101|105|109|113|117|121|125| \
164+ 129|133|137|141|145|149|153|157) idx=127;;
165+ 161|165|169|173|177|181|185|189| \
166+ 193|197|201|205|209|213|217|221) idx=191;;
167+ esac
168+ if [[ "$htmode" = "EHT320-1" && "$channel" -ge "193" ]] ||
169+ [[ "$htmode" = "EHT320-2" && "$channel" -le "29" ]]; then
170+ echo "Could not set the center freq with this EHT setting"
171+ return 1
172+ elif [[ "$htmode" = "EHT320-1" && "$channel" -ge "33" ]]; then
173+ if [ "$channel" -gt $idx ]; then
174+ idx=$(($idx + 32))
175+ else
176+ idx=$(($idx - 32))
177+ fi
178+ fi
179+ vht_oper_chwidth=2
180+ if [ "$channel" -gt $idx ]; then
181+ vht_center_seg0=$(($idx + 16))
182+ else
183+ vht_center_seg0=$(($idx - 16))
184+ fi
185+ eht_oper_chwidth=9
186+ eht_oper_centr_freq_seg0_idx=$idx
187+ ;;
188 esac
189 [ "$band" = "5g" ] && {
190 json_get_vars background_radar:0
developerd6cf5892023-05-02 16:25:52 +0800191@@ -286,8 +333,9 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800192 [ "$band" = "6g" ] && {
193 op_class=
194 case "$htmode" in
195- HE20) op_class=131;;
196- HE*) op_class=$((132 + $vht_oper_chwidth))
197+ HE20|EHT20) op_class=131;;
198+ EHT320*) op_class=137;;
199+ HE*|EHT*) op_class=$((132 + $vht_oper_chwidth))
200 esac
201 [ -n "$op_class" ] && append base_cfg "op_class=$op_class" "$N"
202 }
developerd6cf5892023-05-02 16:25:52 +0800203@@ -315,7 +363,6 @@ mac80211_hostapd_setup_base() {
developer5af19352022-12-07 16:29:19 +0800204 vht_link_adapt:3 \
205 vht160:2
206
207- set_default tx_burst 2.0
208 append base_cfg "ieee80211ac=1" "$N"
209 vht_cap=0
210 for cap in $(iw phy "$phy" info | awk -F "[()]" '/VHT Capabilities/ { print $2 }'); do
developerd6cf5892023-05-02 16:25:52 +0800211@@ -329,6 +376,12 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800212 [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc"
213 vht_cap="$(( ($vht_cap & ~(0x700)) | ($cap_rx_stbc << 8) ))"
214
215+ [ "$etxbfen" -eq 0 ] && {
216+ su_beamformer=0
217+ su_beamformee=0
218+ mu_beamformer=0
219+ }
220+
221 mac80211_add_capabilities vht_capab $vht_cap \
222 RXLDPC:0x10::$rxldpc \
223 SHORT-GI-80:0x20::$short_gi_80 \
developerd6cf5892023-05-02 16:25:52 +0800224@@ -410,7 +463,7 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800225 # 802.11ax
226 enable_ax=0
227 case "$htmode" in
228- HE*) enable_ax=1 ;;
229+ HE*|EHT*) enable_ax=1 ;;
230 esac
231
232 if [ "$enable_ax" != "0" ]; then
developerd6cf5892023-05-02 16:25:52 +0800233@@ -419,10 +472,11 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800234 he_su_beamformee:1 \
235 he_mu_beamformer:1 \
236 he_twt_required:0 \
237+ he_twt_responder \
238 he_spr_sr_control:3 \
239 he_spr_psr_enabled:0 \
240 he_spr_non_srg_obss_pd_max_offset:0 \
241- he_bss_color:128 \
242+ he_bss_color \
243 he_bss_color_enabled:1
244
245 he_phy_cap=$(iw phy "$phy" info | sed -n '/HE Iftypes: AP/,$p' | awk -F "[()]" '/HE PHY Capabilities/ { print $2 }' | head -1)
developerd6cf5892023-05-02 16:25:52 +0800246@@ -436,6 +490,11 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800247 append base_cfg "he_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
248 }
249
250+ [ "$etxbfen" -eq 0 ] && {
251+ he_su_beamformer=0
252+ he_mu_beamformer=0
253+ }
254+
255 mac80211_add_he_capabilities \
256 he_su_beamformer:${he_phy_cap:6:2}:0x80:$he_su_beamformer \
257 he_su_beamformee:${he_phy_cap:8:2}:0x1:$he_su_beamformee \
developerd6cf5892023-05-02 16:25:52 +0800258@@ -443,7 +502,14 @@ mac80211_hostapd_setup_base() {
developerf18436f2023-04-19 18:31:11 +0800259 he_spr_psr_enabled:${he_phy_cap:14:2}:0x1:$he_spr_psr_enabled \
260 he_twt_required:${he_mac_cap:0:2}:0x6:$he_twt_required
261
262+ if [ -n "$he_twt_responder" ]; then
263+ append base_cfg "he_twt_responder=$he_twt_responder" "$N"
264+ fi
265 if [ "$he_bss_color_enabled" -gt 0 ]; then
developer1a7bd0c2023-05-18 19:32:48 +0800266+ if !([ "$he_bss_color" -gt 0 ] && [ "$he_bss_color" -le 64 ]); then
developerf18436f2023-04-19 18:31:11 +0800267+ rand=$(head -n 1 /dev/urandom | tr -dc 0-9 | head -c 2)
268+ he_bss_color=$((rand % 63 + 1))
269+ fi
270 append base_cfg "he_bss_color=$he_bss_color" "$N"
271 [ "$he_spr_non_srg_obss_pd_max_offset" -gt 0 ] && { \
272 append base_cfg "he_spr_non_srg_obss_pd_max_offset=$he_spr_non_srg_obss_pd_max_offset" "$N"
developerd6cf5892023-05-02 16:25:52 +0800273@@ -484,12 +550,46 @@ mac80211_hostapd_setup_base() {
developer5af19352022-12-07 16:29:19 +0800274 append base_cfg "he_mu_edca_ac_vo_timer=255" "$N"
275 fi
276
developer0d061762022-12-15 17:33:43 +0800277+ set_default tx_burst 5.9
developer5af19352022-12-07 16:29:19 +0800278+
developerf18436f2023-04-19 18:31:11 +0800279+ # 802.11be
280+ enable_be=0
281+ case "$htmode" in
282+ EHT*) enable_be=1 ;;
283+ esac
284+
285+ if [ "$enable_be" != "0" ]; then
286+ append base_cfg "ieee80211be=1" "$N"
287+ if [ "$etxbfen" -eq 0 ]; then
288+ append base_cfg "eht_su_beamformee=1" "$N"
289+ else
290+ append base_cfg "eht_su_beamformer=1" "$N"
291+ append base_cfg "eht_su_beamformee=1" "$N"
292+ append base_cfg "eht_mu_beamformer=1" "$N"
293+ fi
294+ [ "$hwmode" = "a" ] && {
295+ case $htmode in
296+ EHT320*)
297+ append base_cfg "eht_oper_chwidth=$eht_oper_chwidth" "$N"
298+ append base_cfg "eht_oper_centr_freq_seg0_idx=$eht_oper_centr_freq_seg0_idx" "$N"
299+ ;;
300+ *)
301+ append base_cfg "eht_oper_chwidth=$vht_oper_chwidth" "$N"
302+ append base_cfg "eht_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
303+ ;;
304+ esac
305+ }
306+ fi
307+
developer5af19352022-12-07 16:29:19 +0800308 hostapd_prepare_device_config "$hostapd_conf_file" nl80211
309 cat >> "$hostapd_conf_file" <<EOF
310 ${channel:+channel=$channel}
developer0ef73a62023-03-10 18:43:49 +0800311 ${channel_list:+chanlist=$channel_list}
312 ${hostapd_noscan:+noscan=1}
313 ${tx_burst:+tx_queue_data2_burst=$tx_burst}
314+${mbssid:+mbssid=$mbssid}
developerf18436f2023-04-19 18:31:11 +0800315+${mu_onoff:+mu_onoff=$mu_onoff}
316+${itxbfen:+ibf_enable=$itxbfen}
developer0ef73a62023-03-10 18:43:49 +0800317 $base_cfg
318
319 EOF
developerd6cf5892023-05-02 16:25:52 +0800320@@ -517,7 +617,7 @@ mac80211_hostapd_setup_bss() {
developer8ce78562023-02-24 16:10:53 +0800321 append hostapd_cfg "wds_sta=1" "$N"
322 [ -n "$wds_bridge" ] && append hostapd_cfg "wds_bridge=$wds_bridge" "$N"
323 }
324- [ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
325+ [ "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
326
327 cat >> /var/run/hostapd-$phy.conf <<EOF
328 $hostapd_cfg
developerd6cf5892023-05-02 16:25:52 +0800329@@ -527,6 +627,34 @@ ${max_listen_int:+max_listen_interval=$max_listen_int}
developer0ef73a62023-03-10 18:43:49 +0800330 EOF
331 }
332
333+mac80211_generate_mbssid_mac() {
334+ local phy="$1"
335+ local transmitted_bssid="$2"
336+ local id="${macidx:-0}"
337+
338+ local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)"
339+ local mask="$(cat /sys/class/ieee80211/${phy}/address_mask)"
340+
341+ if [ -z "$transmitted_bssid" ]; then
342+ transmitted_bssid=$ref
343+ fi
344+
345+ if [ $id -eq 0 ]; then
346+ echo "$transmitted_bssid"
347+ return
348+ fi
349+
350+ local oIFS="$IFS"; IFS=":"; set -- $transmitted_bssid; IFS="$oIFS"
351+
352+ # Calculate nontransmitted bssid
353+ macidx=$(($id + 1))
354+ mbssid_idx=$(($macidx - 1))
355+ b6="0x$6"
356+ ref_b6=$(($b6 % $max_mbssid))
357+ b6=$(($b6 - $ref_b6 + ($ref_b6 + $mbssid_idx) % $max_mbssid))
358+ printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $b6
359+}
360+
361 mac80211_get_addr() {
362 local phy="$1"
363 local idx="$(($2 + 1))"
developerd6cf5892023-05-02 16:25:52 +0800364@@ -757,7 +885,13 @@ mac80211_prepare_vif() {
developer0ef73a62023-03-10 18:43:49 +0800365
366 json_select ..
367
368- if [ -z "$macaddr" ]; then
369+ if [ "$mbssid" -gt 0 ]; then
370+ [ "$macidx" -eq 0 ] && {
371+ transmitted_bssid=$macaddr
372+ }
373+ macaddr="$(mac80211_generate_mbssid_mac $phy $transmitted_bssid)"
374+ macidx="$(($macidx + 1))"
375+ elif [ -z "$macaddr" ]; then
376 macaddr="$(mac80211_generate_mac $phy)"
377 macidx="$(($macidx + 1))"
378 elif [ "$macaddr" = 'random' ]; then
developerd6cf5892023-05-02 16:25:52 +0800379@@ -1058,6 +1192,9 @@ mac80211_setup_vif() {
developerb95b0fd2022-12-14 23:07:34 +0800380
381 json_select ..
382 [ -n "$failed" ] || wireless_add_vif "$name" "$ifname"
383+
384+ echo "Setup SMP Affinity"
385+ /sbin/smp-mt76.sh
386 }
387
388 get_freq() {
developerd6cf5892023-05-02 16:25:52 +0800389@@ -1122,6 +1259,10 @@ drv_mac80211_cleanup() {
developer0ef73a62023-03-10 18:43:49 +0800390 hostapd_common_cleanup
391 }
392
393+mac80211_count_ap() {
394+ total_num_ap=$(($total_num_ap + 1))
395+}
396+
397 drv_mac80211_setup() {
398 json_select config
399 json_get_vars \
developerd6cf5892023-05-02 16:25:52 +0800400@@ -1219,6 +1360,16 @@ drv_mac80211_setup() {
developer0ef73a62023-03-10 18:43:49 +0800401 for_each_interface "sta adhoc mesh" mac80211_set_noscan
402 [ -n "$has_ap" ] && mac80211_hostapd_setup_base "$phy"
403
404+ total_num_ap=0
405+ max_mbssid=1
406+ for_each_interface "ap" mac80211_count_ap
407+ total_num_ap=$(($total_num_ap - 1))
408+ while [ $total_num_ap -gt 0 ]
409+ do
410+ total_num_ap=$(($total_num_ap >> 1))
411+ max_mbssid=$(($max_mbssid << 1))
412+ done
413+
414 mac80211_prepare_iw_htmode
415 for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif
416 NEWAPLIST=
developer528f1a92023-05-02 11:10:08 +0800417@@ -1251,6 +1402,14 @@ drv_mac80211_setup() {
418 if [ "$no_reload" != "0" ]; then
419 add_ap=1
420 ubus wait_for hostapd
421+
422+ # each phy sleeps different times to prevent for ubus race condition.
423+ if [ "$phy" = "phy1" ]; then
424+ sleep 1;
425+ elif [ "$phy" = "phy2" ]; then
426+ sleep 2;
427+ fi
428+
429 local hostapd_res="$(ubus call hostapd config_add "{\"iface\":\"$primary_ap\", \"config\":\"${hostapd_conf_file}\"}")"
430 ret="$?"
431 [ "$ret" != 0 -o -z "$hostapd_res" ] && {
developerd3c708b2022-07-06 00:44:05 +0800432diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developer2b3ebe22023-05-25 14:40:30 +0800433index e24a2a634e..f68516211e 100644
developer92f0d542022-06-24 13:09:16 +0800434--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
435+++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
developerdb28f7d2023-05-20 13:25:14 +0800436@@ -60,6 +60,9 @@ BEGIN {
developerf18436f2023-04-19 18:31:11 +0800437 if (vht && band != "1:") mode="VHT80"
438 if (he) mode="HE80"
439 if (he && band == "1:") mode="HE20"
developerdb28f7d2023-05-20 13:25:14 +0800440+ if (eht && band == "2:") mode="EHT160"
441+ if (eht && band == "4:") mode="EHT320"
developerf18436f2023-04-19 18:31:11 +0800442+ if (eht && band == "1:") mode="EHT20"
443 sub("\\[", "", channel)
444 sub("\\]", "", channel)
445 bands = bands band channel ":" mode " "
developerdb28f7d2023-05-20 13:25:14 +0800446@@ -73,6 +76,7 @@ $1 == "Band" {
developerf18436f2023-04-19 18:31:11 +0800447 vht = ""
448 ht = ""
449 he = ""
450+ eht = ""
451 }
452
453 $0 ~ "Capabilities:" {
developerdb28f7d2023-05-20 13:25:14 +0800454@@ -87,6 +91,18 @@ $0 ~ "HE Iftypes" {
developerf18436f2023-04-19 18:31:11 +0800455 he=1
456 }
457
458+$0 ~ "EHT Iftypes" {
459+ eht=1
460+}
461+
developerdb28f7d2023-05-20 13:25:14 +0800462+$0 ~ / *HE MAC Capabilities \(0x000000000000\)/ {
463+ he=0
464+}
465+
466+$0 ~ / *EHT MAC Capabilities \(0x0000\)/ {
467+ eht=0
468+}
469+
developerf18436f2023-04-19 18:31:11 +0800470 $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
471 channel = $4
472 }
developer5ec71a12023-05-25 12:34:13 +0800473@@ -120,6 +136,16 @@ get_band_defaults() {
developer92f0d542022-06-24 13:09:16 +0800474 mode_band="$band"
475 channel="$chan"
476 htmode="$mode"
477+ if [ "$band" = "6g" ]
478+ then
479+ encryption=sae
480+ key=12345678
developerdb28f7d2023-05-20 13:25:14 +0800481+ sae_pwe=2
482+ ieee80211w=2
developer92f0d542022-06-24 13:09:16 +0800483+ else
developer5ec71a12023-05-25 12:34:13 +0800484+ noscan=1
developer92f0d542022-06-24 13:09:16 +0800485+ encryption=none
486+ fi
487 done
488 }
489
developer5ec71a12023-05-25 12:34:13 +0800490@@ -153,6 +179,10 @@ detect_mac80211() {
developerf18436f2023-04-19 18:31:11 +0800491
492 json_load_file /etc/board.json
493
494+ # generate random bytes for macaddr
495+ rand=$(hexdump -C /dev/urandom | head -n 1 &)
496+ killall hexdump
497+
498 for _dev in /sys/class/ieee80211/*; do
499 [ -e "$_dev" ] || continue
500
developer5ec71a12023-05-25 12:34:13 +0800501@@ -162,6 +192,11 @@ detect_mac80211() {
developer92f0d542022-06-24 13:09:16 +0800502 channel=""
503 htmode=""
504 ht_capab=""
505+ encryption=""
developer5ec71a12023-05-25 12:34:13 +0800506+ noscan=""
developer92f0d542022-06-24 13:09:16 +0800507+ key=""
developer6b36db22023-05-09 13:41:30 +0800508+ sae_pwe=""
developerdb28f7d2023-05-20 13:25:14 +0800509+ ieee80211w=""
developer92f0d542022-06-24 13:09:16 +0800510
511 get_band_defaults "$dev"
512
developer5ec71a12023-05-25 12:34:13 +0800513@@ -196,6 +231,11 @@ detect_mac80211() {
developerf18436f2023-04-19 18:31:11 +0800514 ;;
515 esac
516
517+ macaddr=""
518+ for i in $(seq 2 3); do
519+ macaddr=${macaddr}:$(echo $rand | cut -d ' ' -f $i)
520+ done
521+
522 uci -q batch <<-EOF
523 set wireless.${name}=wifi-device
524 set wireless.${name}.type=mac80211
developer5ec71a12023-05-25 12:34:13 +0800525@@ -203,15 +243,29 @@ detect_mac80211() {
developer6b36db22023-05-09 13:41:30 +0800526 set wireless.${name}.channel=${channel}
527 set wireless.${name}.band=${mode_band}
528 set wireless.${name}.htmode=$htmode
529- set wireless.${name}.disabled=1
developerdb28f7d2023-05-20 13:25:14 +0800530+ set wireless.${name}.country='US'
developer5ec71a12023-05-25 12:34:13 +0800531+ set wireless.${name}.noscan=${noscan}
developer6b36db22023-05-09 13:41:30 +0800532+ set wireless.${name}.disabled=0
533
534 set wireless.default_${name}=wifi-iface
535 set wireless.default_${name}.device=${name}
developer5f5952d2022-10-20 15:08:25 +0800536 set wireless.default_${name}.network=lan
537 set wireless.default_${name}.mode=ap
developer6b36db22023-05-09 13:41:30 +0800538- set wireless.default_${name}.ssid=OpenWrt
developer5f5952d2022-10-20 15:08:25 +0800539- set wireless.default_${name}.encryption=none
developer6b36db22023-05-09 13:41:30 +0800540+ set wireless.default_${name}.ssid=OpenWrt-${mode_band}
developer5f5952d2022-10-20 15:08:25 +0800541+ set wireless.default_${name}.encryption=${encryption}
542+
developerf18436f2023-04-19 18:31:11 +0800543+ set wireless.default_${name}.macaddr=00:0$(($devidx - 1)):55:66${macaddr}
544+
developer92f0d542022-06-24 13:09:16 +0800545 EOF
546+ [ -n "$key" ] && {
developer5f5952d2022-10-20 15:08:25 +0800547+ uci -q set wireless.default_${name}.key=${key}
developer92f0d542022-06-24 13:09:16 +0800548+ }
developer6b36db22023-05-09 13:41:30 +0800549+ [ -n "$sae_pwe" ] && {
550+ uci -q set wireless.default_${name}.sae_pwe=${sae_pwe}
551+ }
developerdb28f7d2023-05-20 13:25:14 +0800552+ [ -n "$ieee80211w" ] && {
553+ uci -q set wireless.default_${name}.ieee80211w=${ieee80211w}
554+ }
developer92f0d542022-06-24 13:09:16 +0800555 uci -q commit wireless
developer5f5952d2022-10-20 15:08:25 +0800556 done
557 }
developerf16b9162023-02-23 10:32:51 +0800558diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
developer2b3ebe22023-05-25 14:40:30 +0800559index 28bd210623..0f914a4dfd 100644
developerf16b9162023-02-23 10:32:51 +0800560--- a/package/network/services/hostapd/files/hostapd.sh
561+++ b/package/network/services/hostapd/files/hostapd.sh
developerc96c3f22023-03-28 17:44:38 +0800562@@ -376,6 +376,13 @@ hostapd_common_add_bss_config() {
developer132779d2023-03-27 15:09:00 +0800563 config_add_string fils_dhcp
564
565 config_add_int ocv
566+
567+ config_add_int disable_eht
568+ config_add_int disable_he
569+ config_add_int disable_vht
570+ config_add_int disable_ht
developerc96c3f22023-03-28 17:44:38 +0800571+
developer2b3ebe22023-05-25 14:40:30 +0800572+ config_add_boolean beacon_prot interworking
developer132779d2023-03-27 15:09:00 +0800573 }
574
575 hostapd_set_vlan_file() {
developer2b3ebe22023-05-25 14:40:30 +0800576@@ -440,11 +447,11 @@ append_iw_nai_realm() {
577 }
578
579 append_iw_venue_name() {
580- append bss_conf "venue_name=$1" "$N"
581+ [ -n "$1" ] && append bss_conf "venue_name=$1" "$N"
582 }
583
584 append_iw_venue_url() {
585- append bss_conf "venue_url=$1" "$N"
586+ [ -n "$1" ] && append bss_conf "venue_url=$1" "$N"
587 }
588
589 append_hs20_oper_friendly_name() {
developere1c4f2a2023-05-22 19:46:10 +0800590@@ -841,7 +848,7 @@ hostapd_set_bss_options() {
591 }
592
593 append bss_conf "ssid=$ssid" "$N"
594- [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=" "$N"
595+ [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=$network_bridge" "$N"
596 [ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
597 [ -n "$iapp_interface" ] && {
598 local ifname
developerc96c3f22023-03-28 17:44:38 +0800599@@ -975,7 +982,7 @@ hostapd_set_bss_options() {
600 # RSN -> allow management frame protection
601 case "$ieee80211w" in
602 [012])
603- json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout
604+ json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot
605 append bss_conf "ieee80211w=$ieee80211w" "$N"
606 [ "$ieee80211w" -gt "0" ] && {
607 if [ "$auth_type" = "eap192" ]; then
608@@ -983,6 +990,8 @@ hostapd_set_bss_options() {
609 else
610 append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N"
611 fi
612+ [ -n "$beacon_prot" ] && \
613+ append bss_conf "beacon_prot=$beacon_prot" "$N"
614 [ -n "$ieee80211w_max_timeout" ] && \
615 append bss_conf "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N"
616 [ -n "$ieee80211w_retry_timeout" ] && \
developer2b3ebe22023-05-25 14:40:30 +0800617@@ -1047,9 +1056,10 @@ hostapd_set_bss_options() {
618 json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
619 json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3
620 json_get_vars iw_venue_name iw_venue_url
621+ json_get_vars interworking
622
623 set_default iw_enabled 0
624- if [ "$iw_enabled" = "1" ]; then
625+ if [ "$iw_enabled" = "1" ] || [ "$interworking" = "1" ]; then
626 append bss_conf "interworking=1" "$N"
627 set_default iw_internet 1
628 set_default iw_asra 0
629@@ -1559,6 +1569,20 @@ wpa_supplicant_add_network() {
developer132779d2023-03-27 15:09:00 +0800630 [ -n "$bssid_blacklist" ] && append network_data "bssid_blacklist=$bssid_blacklist" "$N$T"
631 [ -n "$bssid_whitelist" ] && append network_data "bssid_whitelist=$bssid_whitelist" "$N$T"
632
633+ local disable_eht
634+ local disable_he
635+ local disable_vht
636+ local disable_ht
637+ json_get_vars disable_eht
638+ json_get_vars disable_he
639+ json_get_vars disable_vht
640+ json_get_vars disable_ht
641+
642+ [ -n "$disable_eht" ] && append network_data "disable_eht=$disable_eht" "$N$T"
643+ [ -n "$disable_he" ] && append network_data "disable_he=$disable_he" "$N$T"
644+ [ -n "$disable_vht" ] && append network_data "disable_vht=$disable_vht" "$N$T"
645+ [ -n "$disable_ht" ] && append network_data "disable_ht=$disable_ht" "$N$T"
646+
647 [ -n "$basic_rate" ] && {
648 local br rate_list=
649 for br in $basic_rate; do
developer2b3ebe22023-05-25 14:40:30 +0800650@@ -1573,6 +1597,11 @@ wpa_supplicant_add_network() {
developerf16b9162023-02-23 10:32:51 +0800651 append network_data "mcast_rate=$mc_rate" "$N$T"
652 }
653
654+ if [ "$auth_type" = "sae" ]; then
655+ json_get_vars sae_pwe sae_pwe
656+ [ -n "$sae_pwe" ] && echo "sae_pwe=$sae_pwe" >> "$_config"
657+ fi
658+
659 if [ "$key_mgmt" = "WPS" ]; then
660 echo "wps_cred_processing=1" >> "$_config"
661 else
developer5ec71a12023-05-25 12:34:13 +0800662