X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fkernel%2Fmac80211%2Ffiles%2Flib%2Fnetifd%2Fwireless%2Fmac80211.sh;h=fb2f928751a8c7dd282022d64be784cfcca4663b;hb=9af27e4d4947ba748a3c446ad30f8fc330144d1d;hp=751fd329330057be33387af7a7bb82459017cf17;hpb=0eb0fa120a1090e1409b07e20b19d0a004aa5543;p=15.05%2Fopenwrt.git diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index 751fd32933..fb2f928751 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -21,7 +21,7 @@ drv_mac80211_init_device_config() { config_add_string hwmode config_add_int beacon_int chanbw frag rts config_add_int rxantenna txantenna antenna_gain txpower distance - config_add_boolean noscan + config_add_boolean noscan ht_coex config_add_array ht_capab config_add_boolean \ rxldpc \ @@ -36,7 +36,14 @@ drv_mac80211_init_device_config() { htc_vht \ rx_antenna_pattern \ tx_antenna_pattern - config_add_int vht_max_mpdu vht_max_rx_stbc vht_link_adapt vht160 + config_add_int vht_max_a_mpdu_len_exp vht_max_mpdu vht_link_adapt vht160 rx_stbc tx_stbc + config_add_boolean \ + ldpc \ + greenfield \ + short_gi_20 \ + short_gi_40 \ + max_amsdu \ + dsss_cck_40 } drv_mac80211_init_iface_config() { @@ -47,7 +54,8 @@ drv_mac80211_init_iface_config() { config_add_boolean wds powersave config_add_int maxassoc config_add_int max_listen_int - config_add_int dtim_interval + config_add_int dtim_period + config_add_int start_disabled # mesh config_add_string mesh_id @@ -82,7 +90,7 @@ mac80211_hostapd_setup_base() { [ "$auto_channel" -gt 0 ] && channel=acs_survey - json_get_vars noscan htmode + json_get_vars noscan ht_coex json_get_values ht_capab_list ht_capab ieee80211n=1 @@ -119,13 +127,17 @@ mac80211_hostapd_setup_base() { [ -n "$ieee80211n" ] && { append base_cfg "ieee80211n=1" "$N" + set_default ht_coex 0 + append base_cfg "ht_coex=$ht_coex" "$N" + json_get_vars \ ldpc:1 \ - greenfield:1 \ + greenfield:0 \ short_gi_20:1 \ short_gi_40:1 \ tx_stbc:1 \ rx_stbc:3 \ + max_amsdu:1 \ dsss_cck_40:1 ht_cap_mask=0 @@ -142,13 +154,15 @@ mac80211_hostapd_setup_base() { GF:0x10::$greenfield \ SHORT-GI-20:0x20::$short_gi_20 \ SHORT-GI-40:0x40::$short_gi_40 \ - TX-STBC:0x80::$max_tx_stbc \ + TX-STBC:0x80::$tx_stbc \ RX-STBC1:0x300:0x100:1 \ RX-STBC12:0x300:0x200:1 \ RX-STBC123:0x300:0x300:1 \ + MAX-AMSDU-7935:0x800::$max_amsdu \ DSSS_CCK-40:0x1000::$dsss_cck_40 - [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab$ht_capab_flags" "$N" + ht_capab="$ht_capab$ht_capab_flags" + [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab" "$N" } # 802.11ac @@ -201,8 +215,10 @@ mac80211_hostapd_setup_base() { htc_vht:1 \ rx_antenna_pattern:1 \ tx_antenna_pattern:1 \ + vht_max_a_mpdu_len_exp:7 \ vht_max_mpdu:11454 \ rx_stbc:4 \ + tx_stbc:4 \ vht_link_adapt:3 \ vht160:2 @@ -251,6 +267,24 @@ mac80211_hostapd_setup_base() { vht_max_mpdu_hw=11454 [ "$vht_max_mpdu_hw" != 3895 ] && \ vht_capab="$vht_capab[MAX-MPDU-$vht_max_mpdu_hw]" + + # maximum A-MPDU length exponent + vht_max_a_mpdu_len_exp_hw=0 + [ "$(($vht_cap & 58720256))" -ge 8388608 -a 1 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=1 + [ "$(($vht_cap & 58720256))" -ge 16777216 -a 2 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=2 + [ "$(($vht_cap & 58720256))" -ge 25165824 -a 3 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=3 + [ "$(($vht_cap & 58720256))" -ge 33554432 -a 4 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=4 + [ "$(($vht_cap & 58720256))" -ge 41943040 -a 5 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=5 + [ "$(($vht_cap & 58720256))" -ge 50331648 -a 6 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=6 + [ "$(($vht_cap & 58720256))" -ge 58720256 -a 7 -le "$vht_max_a_mpdu_len_exp" ] && \ + vht_max_a_mpdu_len_exp_hw=7 + vht_capab="$vht_capab[MAX-A-MPDU-LEN-EXP$vht_max_a_mpdu_len_exp_hw]" # whether or not the STA supports link adaptation using VHT variant vht_link_adapt_hw=0 @@ -284,12 +318,13 @@ mac80211_hostapd_setup_bss() { append hostapd_cfg "$type=$ifname" "$N" hostapd_set_bss_options hostapd_cfg "$vif" || return 1 - json_get_vars wds dtim_period max_listen_int + json_get_vars wds dtim_period max_listen_int start_disabled set_default wds 0 + set_default start_disabled 0 [ "$wds" -gt 0 ] && append hostapd_cfg "wds_sta=1" "$N" - [ "$staidx" -gt 0 ] && append hostapd_cfg "start_disabled=1" "$N" + [ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N" cat >> /var/run/hostapd-$phy.conf </dev/null); do @@ -393,17 +450,12 @@ mac80211_prepare_vif() { mac80211_hostapd_setup_bss "$phy" "$ifname" "$macaddr" "$type" || return [ -n "$hostapd_ctrl" ] || { - iw phy "$phy" interface add "$ifname" type managed + iw phy "$phy" interface add "$ifname" type __ap hostapd_ctrl="${hostapd_ctrl:-/var/run/hostapd/$ifname}" } ;; mesh) - json_get_vars key mesh_id - if [ -n "$key" ]; then - iw phy "$phy" interface add "$ifname" type mp - else - iw phy "$phy" interface add "$ifname" type mp mesh_id "$mesh_id" - fi + iw phy "$phy" interface add "$ifname" type mp ;; monitor) iw phy "$phy" interface add "$ifname" type monitor @@ -441,11 +493,46 @@ mac80211_setup_supplicant() { wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl} } +mac80211_setup_adhoc_htmode() { + case "$htmode" in + VHT20|HT20) ibss_htmode=HT20;; + HT40*|VHT40|VHT80|VHT160) + case "$hwmode" in + a) + case "$(( ($channel / 4) % 2 ))" in + 1) ibss_htmode="HT40+" ;; + 0) ibss_htmode="HT40-";; + esac + ;; + *) + case "$htmode" in + HT40+) ibss_htmode="HT40+";; + HT40-) ibss_htmode="HT40-";; + *) + if [ "$channel" -lt 7 ]; then + ibss_htmode="HT40+" + else + ibss_htmode="HT40-" + fi + ;; + esac + ;; + esac + [ "$auto_channel" -gt 0 ] && ibss_htmode="HT40+" + ;; + NONE|NOHT) + ibss_htmode="NOHT" + ;; + *) ibss_htmode="" ;; + esac + +} + mac80211_setup_adhoc() { json_get_vars bssid ssid key mcast_rate keyspec= - [ "$auth_type" == "wep" ] && { + [ "$auth_type" = "wep" ] && { set_default key 1 case "$key" in [1234]) @@ -468,13 +555,13 @@ mac80211_setup_adhoc() { brstr= for br in $basic_rate_list; do - hostapd_add_rate brstr "$br" + wpa_supplicant_add_rate brstr "$br" done mcval= - [ -n "$mcast_rate" ] && hostapd_add_rate mcval "$mcast_rate" + [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" - iw dev "$ifname" ibss join "$ssid" $freq $htmode fixed-freq $bssid \ + iw dev "$ifname" ibss join "$ssid" $freq $ibss_htmode fixed-freq $bssid \ ${beacon_int:+beacon-interval $beacon_int} \ ${brstr:+basic-rates $brstr} \ ${mcval:+mcast-rate $mcval} \ @@ -504,26 +591,33 @@ mac80211_setup_vif() { case "$mode" in mesh) - for var in $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING; do - json_get_var mp_val "$var" - [ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$var" "$mp_val" - done - - # authsae + # authsae or wpa_supplicant json_get_vars key if [ -n "$key" ]; then if [ -e "/lib/wifi/authsae.sh" ]; then . /lib/wifi/authsae.sh authsae_start_interface || failed=1 else - wireless_setup_vif_failed AUTHSAE_NOT_INSTALLED - json_select .. - return + wireless_vif_parse_encryption + mac80211_setup_supplicant || failed=1 fi + else + json_get_vars mesh_id mcast_rate + + mcval= + [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" + + iw dev "$ifname" mesh join "$mesh_id" ${mcval:+mcast-rate $mcval} fi + + for var in $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING; do + json_get_var mp_val "$var" + [ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$var" "$mp_val" + done ;; adhoc) wireless_vif_parse_encryption + mac80211_setup_adhoc_htmode if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then mac80211_setup_supplicant || failed=1 else @@ -565,7 +659,7 @@ drv_mac80211_setup() { country chanbw distance \ txpower antenna_gain \ rxantenna txantenna \ - frag rts beacon_int + frag rts beacon_int htmode json_get_values basic_rate_list basic_rate json_select ..