mac80211: fix center freq selection for 6 GHz
authorFelix Fietkau <nbd@nbd.name>
Tue, 25 May 2021 08:57:01 +0000 (10:57 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 26 May 2021 09:48:14 +0000 (11:48 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index 8771f12d2fe58de8a2043fbb616c94d68a4ec3fc..4c3ea508315217a1b7c7ed35200cbdfb62e28dc2 100644 (file)
@@ -194,12 +194,14 @@ mac80211_hostapd_setup_base() {
        enable_ac=0
        vht_oper_chwidth=0
        vht_center_seg0=
+       chan_ofs=0
+       [ "$band" = "6g" ] && chan_ofs=1
 
        idx="$channel"
        case "$htmode" in
                VHT20|HE20) enable_ac=1;;
                VHT40|HE40)
-                       case "$(( ($channel / 4) % 2 ))" in
+                       case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
                                1) idx=$(($channel + 2));;
                                0) idx=$(($channel - 2));;
                        esac
@@ -207,7 +209,7 @@ mac80211_hostapd_setup_base() {
                        vht_center_seg0=$idx
                ;;
                VHT80|HE80)
-                       case "$(( ($channel / 4) % 4 ))" in
+                       case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in
                                1) idx=$(($channel + 6));;
                                2) idx=$(($channel + 2));;
                                3) idx=$(($channel - 2));;
@@ -218,10 +220,22 @@ mac80211_hostapd_setup_base() {
                        vht_center_seg0=$idx
                ;;
                VHT160|HE160)
-                       case "$channel" in
-                               36|40|44|48|52|56|60|64) idx=50;;
-                               100|104|108|112|116|120|124|128) idx=114;;
-                       esac
+                       if [ "$band" = "6g" ]; then
+                               case "$channel" in
+                                       1|5|9|13|17|21|25|29) idx=15;;
+                                       33|37|41|45|49|53|57|61) idx=47;;
+                                       65|69|73|77|81|85|89|93) idx=79;;
+                                       97|101|105|109|113|117|121|125) idx=111;;
+                                       129|133|137|141|145|149|153|157) idx=143;;
+                                       161|165|169|173|177|181|185|189) idx=175;;
+                                       193|197|201|205|209|213|217|221) idx=207;;
+                               esac
+                       else
+                               case "$channel" in
+                                       36|40|44|48|52|56|60|64) idx=50;;
+                                       100|104|108|112|116|120|124|128) idx=114;;
+                               esac
+                       fi
                        enable_ac=1
                        vht_oper_chwidth=2
                        vht_center_seg0=$idx