| diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| index 5aaba9a..54a5d88 100644 |
| --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| @@ -160,8 +160,8 @@ mac80211_hostapd_setup_base() { |
| ieee80211n=1 |
| ht_capab= |
| case "$htmode" in |
| - VHT20|HT20|HE20) ;; |
| - HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160) |
| + VHT20|HT20|HE20|EHT20) ;; |
| + HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160|EHT40|EHT80|EHT160|EHT320*) |
| case "$hwmode" in |
| a) |
| case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in |
| @@ -205,7 +205,7 @@ mac80211_hostapd_setup_base() { |
| dsss_cck_40:1 |
| |
| ht_cap_mask=0 |
| - for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do |
| + for cap in $(iw phy "$phy" info | grep 'Capabilities: 0x' | cut -d: -f2); do |
| ht_cap_mask="$(($ht_cap_mask | $cap))" |
| done |
| |
| @@ -236,8 +236,8 @@ mac80211_hostapd_setup_base() { |
| |
| idx="$channel" |
| case "$htmode" in |
| - VHT20|HE20) enable_ac=1;; |
| - VHT40|HE40) |
| + VHT20|HE20|EHT20) enable_ac=1;; |
| + VHT40|HE40|EHT40) |
| case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in |
| 1) idx=$(($channel + 2));; |
| 0) idx=$(($channel - 2));; |
| @@ -245,7 +245,7 @@ mac80211_hostapd_setup_base() { |
| enable_ac=1 |
| vht_center_seg0=$idx |
| ;; |
| - VHT80|HE80) |
| + VHT80|HE80|EHT80) |
| case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in |
| 1) idx=$(($channel + 6));; |
| 2) idx=$(($channel + 2));; |
| @@ -256,7 +256,7 @@ mac80211_hostapd_setup_base() { |
| vht_oper_chwidth=1 |
| vht_center_seg0=$idx |
| ;; |
| - VHT160|HE160) |
| + VHT160|HE160|EHT160) |
| if [ "$band" = "6g" ]; then |
| case "$channel" in |
| 1|5|9|13|17|21|25|29) idx=15;; |
| @@ -277,6 +277,36 @@ mac80211_hostapd_setup_base() { |
| vht_oper_chwidth=2 |
| vht_center_seg0=$idx |
| ;; |
| + EHT320*) |
| + case "$channel" in |
| + 1|5|9|13|17|21|25|29) idx=31;; |
| + 33|37|41|45|49|53|57|61| \ |
| + 65|69|73|77|81|85|89|93) idx=63;; |
| + 97|101|105|109|113|117|121|125| \ |
| + 129|133|137|141|145|149|153|157) idx=127;; |
| + 161|165|169|173|177|181|185|189| \ |
| + 193|197|201|205|209|213|217|221) idx=191;; |
| + esac |
| + if [[ "$htmode" = "EHT320-1" && "$channel" -ge "193" ]] || |
| + [[ "$htmode" = "EHT320-2" && "$channel" -le "29" ]]; then |
| + echo "Could not set the center freq with this EHT setting" |
| + return 1 |
| + elif [[ "$htmode" = "EHT320-1" && "$channel" -ge "33" ]]; then |
| + if [ "$channel" -gt $idx ]; then |
| + idx=$(($idx + 32)) |
| + else |
| + idx=$(($idx - 32)) |
| + fi |
| + fi |
| + vht_oper_chwidth=2 |
| + if [ "$channel" -gt $idx ]; then |
| + vht_center_seg0=$(($idx + 16)) |
| + else |
| + vht_center_seg0=$(($idx - 16)) |
| + fi |
| + eht_oper_chwidth=9 |
| + eht_oper_centr_freq_seg0_idx=$idx |
| + ;; |
| esac |
| [ "$band" = "5g" ] && { |
| json_get_vars background_radar:0 |
| @@ -286,8 +316,9 @@ mac80211_hostapd_setup_base() { |
| [ "$band" = "6g" ] && { |
| op_class= |
| case "$htmode" in |
| - HE20) op_class=131;; |
| - HE*) op_class=$((132 + $vht_oper_chwidth)) |
| + HE20|EHT20) op_class=131;; |
| + EHT320*) op_class=137;; |
| + HE*|EHT*) op_class=$((132 + $vht_oper_chwidth)) |
| esac |
| [ -n "$op_class" ] && append base_cfg "op_class=$op_class" "$N" |
| } |
| @@ -410,7 +441,7 @@ mac80211_hostapd_setup_base() { |
| # 802.11ax |
| enable_ax=0 |
| case "$htmode" in |
| - HE*) enable_ax=1 ;; |
| + HE*|EHT*) enable_ax=1 ;; |
| esac |
| |
| if [ "$enable_ax" != "0" ]; then |
| @@ -484,6 +515,31 @@ mac80211_hostapd_setup_base() { |
| append base_cfg "he_mu_edca_ac_vo_timer=255" "$N" |
| fi |
| |
| + # 802.11be |
| + enable_be=0 |
| + case "$htmode" in |
| + EHT*) enable_be=1 ;; |
| + esac |
| + |
| + if [ "$enable_be" != "0" ]; then |
| + append base_cfg "ieee80211be=1" "$N" |
| + append base_cfg "eht_su_beamformer=1" "$N" |
| + append base_cfg "eht_su_beamformee=1" "$N" |
| + append base_cfg "eht_mu_beamformer=1" "$N" |
| + [ "$hwmode" = "a" ] && { |
| + case $htmode in |
| + EHT320*) |
| + append base_cfg "eht_oper_chwidth=$eht_oper_chwidth" "$N" |
| + append base_cfg "eht_oper_centr_freq_seg0_idx=$eht_oper_centr_freq_seg0_idx" "$N" |
| + ;; |
| + *) |
| + append base_cfg "eht_oper_chwidth=$vht_oper_chwidth" "$N" |
| + append base_cfg "eht_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N" |
| + ;; |
| + esac |
| + } |
| + fi |
| + |
| hostapd_prepare_device_config "$hostapd_conf_file" nl80211 |
| cat >> "$hostapd_conf_file" <<EOF |
| ${channel:+channel=$channel} |
| diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| index 10a3f8b..80cd298 100644 |
| --- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| +++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| @@ -60,6 +60,8 @@ BEGIN { |
| if (vht && band != "1:") mode="VHT80" |
| if (he) mode="HE80" |
| if (he && band == "1:") mode="HE20" |
| + if (eht) mode="EHT80" |
| + if (eht && band == "1:") mode="EHT20" |
| sub("\\[", "", channel) |
| sub("\\]", "", channel) |
| bands = bands band channel ":" mode " " |
| @@ -73,6 +75,7 @@ $1 == "Band" { |
| vht = "" |
| ht = "" |
| he = "" |
| + eht = "" |
| } |
| |
| $0 ~ "Capabilities:" { |
| @@ -87,6 +90,10 @@ $0 ~ "HE Iftypes" { |
| he=1 |
| } |
| |
| +$0 ~ "EHT Iftypes" { |
| + eht=1 |
| +} |
| + |
| $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel { |
| channel = $4 |
| } |
| @@ -160,6 +167,10 @@ detect_mac80211() { |
| |
| json_load_file /etc/board.json |
| |
| + # generate random bytes for macaddr |
| + rand=$(hexdump -C /dev/urandom | head -n 1 &) |
| + killall hexdump |
| + |
| for _dev in /sys/class/ieee80211/*; do |
| [ -e "$_dev" ] || continue |
| |
| @@ -205,6 +216,11 @@ detect_mac80211() { |
| ;; |
| esac |
| |
| + macaddr="" |
| + for i in $(seq 2 3); do |
| + macaddr=${macaddr}:$(echo $rand | cut -d ' ' -f $i) |
| + done |
| + |
| uci -q batch <<-EOF |
| set wireless.${name}=wifi-device |
| set wireless.${name}.type=mac80211 |
| @@ -221,6 +237,8 @@ detect_mac80211() { |
| set wireless.default_${name}.ssid=OpenWrt |
| set wireless.default_${name}.encryption=${encryption} |
| |
| + set wireless.default_${name}.macaddr=00:0$(($devidx - 1)):55:66${macaddr} |
| + |
| EOF |
| [ -n "$key" ] && { |
| uci -q set wireless.default_${name}.key=${key} |