On 2014-01-31 17:58, Sven Eckelmann wrote:
> From: Matti Laakso <[email protected]>
>
> This patch introduces 802.11ac support to base-files, mac80211 and hostapd.
> The
> split of VHT160 in two 80 MHz bands is not yet supported, since it requires an
> additional user supplied parameter for the channel of the second band.
>
> Signed-off-by: Matti Laakso <[email protected]>
> Signed-off-by: Simon Wunderlich <[email protected]>
> [[email protected]: Rebased patch, merged htmode and vhtmode,
> removed special hwmode, fixed hostapd integration]
> Signed-off-by: Sven Eckelmann <[email protected]>
> ---
> v4: Use autoconfig for HT40-/+ when VHT is activated as reported by Matti
> Laakso
>
> .../mac80211/files/lib/netifd/wireless/mac80211.sh | 67
> +++++++++++++++++++++-
> package/kernel/mac80211/files/lib/wifi/mac80211.sh | 41 ++++++++++++-
> .../services/hostapd/files/hostapd-full.config | 3 +
> .../services/hostapd/files/hostapd-mini.config | 3 +
> 4 files changed, 112 insertions(+), 2 deletions(-)
>
> diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
> b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
> index 1896fe0..bb5298d 100644
> --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
> +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
> @@ -23,6 +23,7 @@ drv_mac80211_init_device_config() {
> config_add_int rxantenna txantenna antenna_gain txpower
> config_add_boolean noscan
> config_add_array ht_capab
> + config_add_array vht_capab
> }
>
> drv_mac80211_init_iface_config() {
> @@ -55,12 +56,76 @@ mac80211_hostapd_setup_base() {
> append base_cfg "ieee80211n=1" "$N"
>
> 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
> ht_capab="$ht_capab[$cap]"
> done
>
> [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab" "$N"
> +
> + # 802.11ac
> + enable_ac=0
> + json_get_values vht_capab_list vht_capab
> + 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
> + append base_cfg "ieee80211ac=1" "$N"
> + for cap in $vht_capab_list; do
> + vht_capab="$vht_capab[$cap]"
> + done
> + [ -n "$vht_capab" ] && append base_cfg
> "vht_capab=$vht_capab" "$N"
> + fi
> }
>
> hostapd_prepare_device_config "$hostapd_conf_file" nl80211
> diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> index e33b09a..f46c23d 100644
> --- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> +++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> @@ -69,6 +69,8 @@ detect_mac80211() {
> mode_11n=""
> mode_band="g"
> channel="11"
> + htmode=""
> +
> ht_cap=0
> for cap in $(iw phy "$dev" info | grep 'Capabilities:' | cut
> -d: -f2); do
> ht_cap="$(($ht_cap | $cap))"
> @@ -76,7 +78,7 @@ detect_mac80211() {
> ht_capab="";
> [ "$ht_cap" -gt 0 ] && {
> mode_11n="n"
> - append ht_capab " option htmode HT20" "$N"
> + htmode="HT20"
>
> list=" list ht_capab"
> [ "$(($ht_cap & 1))" -eq 1 ] && append ht_capab "$list
> LDPC" "$N"
> @@ -89,8 +91,45 @@ detect_mac80211() {
> [ "$(($ht_cap & 768))" -eq 768 ] && append ht_capab
> "$list RX-STBC123" "$N"
> [ "$(($ht_cap & 4096))" -eq 4096 ] && append ht_capab
> "$list DSSS_CCK-40" "$N"
> }
> +
> iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a";
> channel="36"; }
>
> + vht_cap=0
> + for cap in $(iw phy "$dev" info | awk -F "[()]" '/VHT
> Capabilities/ { print $2 }'); do
> + vht_cap="$(($vht_cap | $cap))"
> + done
> + [ "$vht_cap" -gt 0 ] && {
> + mode_band="a";
> + channel="36"
> + htmode="VHT80"
> +
> + list=" list vht_capab"
> + [ "$(($vht_cap & 3))" -eq 1 ] && append ht_capab "$list
> MAX-MPDU-7991" "$N"
> + [ "$(($vht_cap & 3))" -eq 2 ] && append ht_capab "$list
> MAX-MPDU-11454" "$N"
> + [ "$(($vht_cap & 12))" -eq 4 ] && append ht_capab
> "$list VHT160" "$N"
> + [ "$(($vht_cap & 12))" -eq 8 ] && append ht_capab
> "$list VHT160-80PLUS80" "$N"
> + [ "$(($vht_cap & 16))" -eq 16 ] && append ht_capab
> "$list RXLDPC" "$N"
> + [ "$(($vht_cap & 32))" -eq 32 ] && append ht_capab
> "$list SHORT-GI-80" "$N"
> + [ "$(($vht_cap & 64))" -eq 64 ] && append ht_capab
> "$list SHORT-GI-160" "$N"
> + [ "$(($vht_cap & 128))" -eq 128 ] && append ht_capab
> "$list TX-STBC-2BY1" "$N"
> + [ "$(($vht_cap & 1792))" -eq 256 ] && append ht_capab
> "$list RX-STBC-1" "$N"
> + [ "$(($vht_cap & 1792))" -eq 512 ] && append ht_capab
> "$list RX-STBC-12" "$N"
> + [ "$(($vht_cap & 1792))" -eq 768 ] && append ht_capab
> "$list RX-STBC-123" "$N"
> + [ "$(($vht_cap & 1792))" -eq 1024 ] && append ht_capab
> "$list RX-STBC-1234" "$N"
> + [ "$(($vht_cap & 2048))" -eq 2048 ] && append ht_capab
> "$list SU-BEAMFORMER" "$N"
> + [ "$(($vht_cap & 4096))" -eq 4096 ] && append ht_capab
> "$list SU-BEAMFORMEE" "$N"
> + [ "$(($vht_cap & 524288))" -eq 524288 ] && append
> ht_capab "$list MU-BEAMFORMER" "$N"
> + [ "$(($vht_cap & 1048576))" -eq 1048576 ] && append
> ht_capab "$list MU-BEAMFORMEE" "$N"
> + [ "$(($vht_cap & 2097152))" -eq 2097152 ] && append
> ht_capab "$list VHT-TXOP-PS" "$N"
> + [ "$(($vht_cap & 4194304))" -eq 4194304 ] && append
> ht_capab "$list HTC-VHT" "$N"
> + [ "$(($vht_cap & 201326592))" -eq 134217728 ] && append
> ht_capab "$list VHT-LINK-ADAPT2" "$N"
> + [ "$(($vht_cap & 201326592))" -eq 201326592 ] && append
> ht_capab "$list VHT-LINK-ADAPT3" "$N"
> + [ "$(($vht_cap & 268435456))" -eq 268435456 ] && append
> ht_capab "$list RX-ANTENNA-PATTERN" "$N"
> + [ "$(($vht_cap & 536870912))" -eq 536870912 ] && append
> ht_capab "$list TX-ANTENNA-PATTERN" "$N"
> + }
> +
> + [ -n $htmode ] && append ht_capab " option htmode
> $htmode" "$N"
> +
> if [ -x /usr/bin/readlink ]; then
> path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
> path="${path##/sys/devices/}"
Please leave the ht_capab additions out of the generated config. You can
move this code to the netifd script after the processing of the json
ht_capab array, and rework it to look something like this:
# config options code
config_add_boolean \
max_mpdu_7991 \
max_mpdu_11454 [...]
# setup code
json_get_vars \
max_mpdu_7991:1 \
max_mpdu_11454:1 [...]
[ "$((($vht_cap & 3) * $max_mpdu_7991))" -eq 1 ] && \
ht_capab="$ht_capab[MAX-MPDU-7991]"
[ "$((($vht_cap & 3) * $max_mpdu_11454))" -eq 2 ] && \
ht_capab="$ht_capab[MAX-MPDU-11454]"
[...]
That way we don't introduce extra obsolete config data in the first
place, and you guys don't have to wait for me (or somebody else) to
rework the other ht_capab code.
- Felix
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel