@ -23,6 +23,20 @@ drv_mac80211_init_device_config() {
config_add_int rxantenna txantenna antenna_gain txpower distance
config_add_int rxantenna txantenna antenna_gain txpower distance
config_add_boolean noscan
config_add_boolean noscan
config_add_array ht_capab
config_add_array ht_capab
config_add_boolean \
rxldpc \
short_gi_80 \
short_gi_160 \
tx_stbc_2by1 \
su_beamformer \
su_beamformee \
mu_beamformer \
mu_beamformee \
vht_txop_ps \
htc_vht \
rx_antenna_pattern \
tx_antenna_pattern
config_add_int vht_max_mpdu vht_max_rx_stbc vht_link_adapt vht160
}
}
drv_mac80211_init_iface_config( ) {
drv_mac80211_init_iface_config( ) {
@ -55,12 +69,164 @@ mac80211_hostapd_setup_base() {
append base_cfg "ieee80211n=1" " $N "
append base_cfg "ieee80211n=1" " $N "
ht_capab =
ht_capab =
[ -n " $htmode " ] && ht_capab = " [ $htmode ] "
case " $htmode " in
HT20| HT40-| HT40+) ht_capab = " [ $htmode ] " ; ;
VHT40| VHT80| VHT160)
case " $channel " in
36| 44| 52| 60| 100| 108| 116| 124| 132| 140| 149| 157) ht_capab = "[HT40+]" ; ;
40| 48| 56| 64| 104| 112| 120| 128| 136| 144| 153| 161) ht_capab = "[HT40-]" ; ;
esac
; ;
esac
for cap in $ht_capab_list ; do
for cap in $ht_capab_list ; do
ht_capab = " $ht_capab [ $cap ] "
ht_capab = " $ht_capab [ $cap ] "
done
done
[ -n " $ht_capab " ] && append base_cfg " ht_capab= $ht_capab " " $N "
[ -n " $ht_capab " ] && append base_cfg " ht_capab= $ht_capab " " $N "
# 802.11ac
enable_ac = 0
idx = " $channel "
case " $htmode " in
VHT40)
case " $channel " in
36| 40) idx = 38; ;
44| 48) idx = 42; ;
52| 56) idx = 54; ;
60| 64) idx = 58; ;
100| 104) idx = 102; ;
108| 112) idx = 110; ;
116| 120) idx = 118; ;
124| 128) idx = 126; ;
132| 136) idx = 134; ;
140| 144) idx = 142; ;
149| 153) idx = 151; ;
157| 161) idx = 159; ;
esac
enable_ac = 1
append base_cfg "vht_oper_chwidth=0" " $N "
append base_cfg " vht_oper_centr_freq_seg0_idx= $idx " " $N "
; ;
VHT80)
case " $channel " in
36| 40| 44| 48) idx = 42; ;
52| 56| 60| 64) idx = 58; ;
100| 104| 108| 112) idx = 106; ;
116| 120| 124| 128) idx = 122; ;
132| 136| 140| 144) idx = 138; ;
149| 153| 157| 161) idx = 155; ;
esac
enable_ac = 1
append base_cfg "vht_oper_chwidth=1" " $N "
append base_cfg " vht_oper_centr_freq_seg0_idx= $idx " " $N "
; ;
VHT160)
case " $channel " in
36| 40| 44| 48| 52| 56| 60| 64) idx = 50; ;
100| 104| 108| 112| 116| 120| 124| 128) idx = 114; ;
esac
enable_ac = 1
append base_cfg "vht_oper_chwidth=2" " $N "
append base_cfg " vht_oper_centr_freq_seg0_idx= $idx " " $N "
; ;
esac
if [ " $enable_ac " != "0" ] ; then
json_get_vars \
rxldpc:1 \
short_gi_80:1 \
short_gi_160:1 \
tx_stbc_2by1:1 \
su_beamformer:1 \
su_beamformee:1 \
mu_beamformer:1 \
mu_beamformee:1 \
vht_txop_ps:1 \
htc_vht:1 \
rx_antenna_pattern:1 \
tx_antenna_pattern:1 \
vht_max_mpdu:11454 \
vht_max_rx_stbc:4 \
vht_link_adapt:3 \
vht160:2
append base_cfg "ieee80211ac=1" " $N "
vht_capab = ""
vht_cap = 0
for cap in $( iw phy " $phy " info | awk -F "[()]" '/VHT Capabilities/ { print $2 }' ) ; do
vht_cap = " $(( $vht_cap | $cap )) "
done
# boolean
[ " $(( ( $vht_cap & 16 ) * $rxldpc )) " -eq 16 ] && \
vht_capab = " $vht_capab [RXLDPC] "
[ " $(( ( $vht_cap & 32 ) * $short_gi_80 )) " -eq 32 ] && \
vht_capab = " $vht_capab [SHORT-GI-80] "
[ " $(( ( $vht_cap & 64 ) * $short_gi_160 )) " -eq 64 ] && \
vht_capab = " $vht_capab [SHORT-GI-160] "
[ " $(( ( $vht_cap & 128 ) * $tx_stbc_2by1 )) " -eq 128 ] && \
vht_capab = " $vht_capab [TX-STBC-2BY1] "
[ " $(( ( $vht_cap & 2048 ) * $su_beamformer )) " -eq 2048 ] && \
vht_capab = " $vht_capab [SU-BEAMFORMER] "
[ " $(( ( $vht_cap & 4096 ) * $su_beamformee )) " -eq 4096 ] && \
vht_capab = " $vht_capab [SU-BEAMFORMEE] "
[ " $(( ( $vht_cap & 524288 ) * $mu_beamformer )) " -eq 524288 ] && \
vht_capab = " $vht_capab [MU-BEAMFORMER] "
[ " $(( ( $vht_cap & 1048576 ) * $mu_beamformee )) " -eq 1048576 ] && \
vht_capab = " $vht_capab [MU-BEAMFORMEE] "
[ " $(( ( $vht_cap & 2097152 ) * $vht_txop_ps )) " -eq 2097152 ] && \
vht_capab = " $vht_capab [VHT-TXOP-PS] "
[ " $(( ( $vht_cap & 4194304 ) * $htc_vht )) " -eq 4194304 ] && \
vht_capab = " $vht_capab [HTC-VHT] "
[ " $(( ( $vht_cap & 268435456 ) * $rx_antenna_pattern )) " -eq 268435456 ] && \
vht_capab = " $vht_capab [RX-ANTENNA-PATTERN] "
[ " $(( ( $vht_cap & 536870912 ) * $tx_antenna_pattern )) " -eq 536870912 ] && \
vht_capab = " $vht_capab [TX-ANTENNA-PATTERN] "
# supported Channel widths
vht160_hw = 0
[ " $(( $vht_cap & 12 )) " -eq 4 -a 1 -le " $vht160 " ] && \
vht160_hw = 1
[ " $(( $vht_cap & 12 )) " -eq 8 -a 2 -le " $vht160 " ] && \
vht160_hw = 2
[ " $vht160_hw " = 1 ] && vht_capab = " $vht_capab [VHT160] "
[ " $vht160_hw " = 2 ] && vht_capab = " $vht_capab [VHT160-80PLUS80] "
# maximum MPDU length
vht_max_mpdu_hw = 3895
[ " $(( $vht_cap & 3 )) " -ge 1 -a 7991 -le " $vht_max_mpdu " ] && \
vht_max_mpdu_hw = 7991
[ " $(( $vht_cap & 3 )) " -ge 2 -a 11454 -le " $vht_max_mpdu " ] && \
vht_max_mpdu_hw = 11454
[ " $vht_max_mpdu_hw " != 3895 ] && \
vht_capab = " $vht_capab [MAX-MPDU- $vht_max_mpdu_hw ] "
# support for the reception of PPDUs using STBC
vht_max_rx_stbc_hw = 0
[ " $(( $vht_cap & 1792 )) " -ge 256 -a 1 -le " $vht_max_rx_stbc " ] && \
vht_max_rx_stbc_hw = 1
[ " $(( $vht_cap & 1792 )) " -ge 512 -a 2 -le " $vht_max_rx_stbc " ] && \
vht_max_rx_stbc_hw = 2
[ " $(( $vht_cap & 1792 )) " -ge 768 -a 3 -le " $vht_max_rx_stbc " ] && \
vht_max_rx_stbc_hw = 3
[ " $(( $vht_cap & 1792 )) " -ge 1024 -a 4 -le " $vht_max_rx_stbc " ] && \
vht_max_rx_stbc_hw = 4
[ " $vht_max_rx_stbc_hw " = 1 ] && vht_capab = " $vht_capab [RX-STBC-1] "
[ " $vht_max_rx_stbc_hw " = 2 ] && vht_capab = " $vht_capab [RX-STBC-12] "
[ " $vht_max_rx_stbc_hw " = 3 ] && vht_capab = " $vht_capab [RX-STBC-123] "
[ " $vht_max_rx_stbc_hw " = 4 ] && vht_capab = " $vht_capab [RX-STBC-1234] "
# whether or not the STA supports link adaptation using VHT variant
vht_link_adapt_hw = 0
[ " $(( $vht_cap & 201326592 )) " -ge 134217728 -a 2 -le " $vht_link_adapt " ] && \
vht_link_adapt_hw = 2
[ " $(( $vht_cap & 201326592 )) " -ge 201326592 -a 3 -le " $vht_link_adapt " ] && \
vht_link_adapt_hw = 3
[ " $vht_link_adapt_hw " != 0 ] && \
vht_capab = " $vht_capab [VHT-LINK-ADAPT- $vht_link_adapt_hw ] "
[ -n " $vht_capab " ] && append base_cfg " vht_capab= $vht_capab " " $N "
fi
}
}
hostapd_prepare_device_config " $hostapd_conf_file " nl80211
hostapd_prepare_device_config " $hostapd_conf_file " nl80211