X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fmac80211%2Ffiles%2Flib%2Fwifi%2Fmac80211.sh;h=dea57223bc7a2a5471f7c63cfe224addfb664ed3;hb=c40f46fd8f7b3252ee65c686fcb5ce2f56a6edfe;hp=742c1bb4462b802634605ef4921f740663a6e01b;hpb=62f5437361794947288be41699510ed2ab2f1fc5;p=openwrt%2Fsvn-archive%2Farchive.git diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 742c1bb446..dea57223bc 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -77,9 +77,11 @@ enable_mac80211() { config_get vifs "$device" vifs config_get txpower "$device" txpower config_get country "$device" country + config_get distance "$device" distance find_mac80211_phy "$device" || return 0 config_get phy "$device" phy local i=0 + local macidx=0 fixed="" [ -n "$country" ] && iw reg set "$country" @@ -87,6 +89,8 @@ enable_mac80211() { fixed=1 } + [ -n "$distance" ] && iw phy "$phy" set distance "$distance" + export channel fixed # convert channel to frequency local freq="$(get_freq "$phy" "${fixed:+$channel}")" @@ -144,12 +148,13 @@ enable_mac80211() { config_get vif_mac "$vif" macaddr [ -n "$vif_mac" ] || { - if [ "$i" -gt 0 ]; then - offset="$(( 2 + $i * 4 ))" + if [ "$macidx" -gt 0 ]; then + offset="$(( 2 + $macidx * 4 ))" else offset="0" fi vif_mac="$( printf %02x $((0x$mac_1 + $offset)) ):$mac_2" + macidx="$(($macidx + 1))" } ifconfig "$ifname" hw ether "$vif_mac" @@ -176,20 +181,30 @@ enable_mac80211() { # configured to handle the wep connection if [ ! "$mode" = "ap" ]; then case "$enc" in - wep) + *wep*) config_get keymgmt "$vif" keymgmt - if [ -n "$keymgmt" ]; then - for idx in 1 2 3 4; do - local zidx - zidx=$(($idx - 1)) - config_get key "$vif" "key${idx}" - if [ -n "$key" ]; then - append keystring "${zidx}:${key} " - fi - done + if [ -z "$keymgmt" ]; then + config_get key "$vif" key + key="${key:-1}" + case "$key" in + [1234]) + for idx in 1 2 3 4; do + local zidx + zidx=$(($idx - 1)) + config_get ckey "$vif" "key${idx}" + if [ -n "$ckey" ]; then + [ $idx -eq $key ] && zidx="d:${zidx}" + append keystring "${zidx}:$(prepare_key_wep "$ckey")" + fi + done + ;; + *) + keystring="d:0:$(prepare_key_wep "$key")" + ;; + esac fi ;; - *wpa*|*psk*) + *psk*|*wpa*) config_get key "$vif" key ;; esac @@ -241,10 +256,10 @@ enable_mac80211() { sta|mesh) config_get bssid "$vif" bssid case "$enc" in - wep) - if [ -n "$keymgmt" ]; then + *wep*) + if [ -z "$keymgmt" ]; then [ -n "$keystring" ] && - iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key "$keystring" + iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key $keystring else if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then wpa_supplicant_setup_vif "$vif" wext || { @@ -304,7 +319,7 @@ detect_mac80211() { mode_band="g" channel="5" ht_cap=0 - for cap in $(iw phy "$dev" info | grep 'HT capabilities' | cut -d: -f2); do + for cap in $(iw phy "$dev" info | grep 'Capabilities:' | cut -d: -f2); do ht_cap="$(($ht_cap | $cap))" done ht_capab="";