Index: iwconfig.sh =================================================================== --- iwconfig.sh (revision 2182) +++ iwconfig.sh (working copy) @@ -347,7 +347,7 @@ # so we can fail gracefully without even trying to connect iwconfig_associate() { local iface="$1" mode="${2:-managed}" - local mac="$3" wep_required="$4" freq="$5" w="(WEP Disabled)" + local mac="$3" wep_required="$4" freq="$5" chan="$6" w="(WEP Disabled)" local dessid="${ESSID//\\\\/\\\\}" key= iwconfig_set_mode "${iface}" "${mode}" @@ -378,7 +378,12 @@ [[ ${key} != "off" ]] && w=$(iwconfig_get_wep_status "${iface}") fi - [[ -n ${freq} ]] && iwconfig "${iface}" freq "${freq}" + # Only use channel or frequency + if [[ -n ${chan} ]] ; then + iwconfig "${iface}" channel "${chan}" + elif [[ -n ${freq} ]] ; then + iwconfig "${iface}" freq "${freq}" + fi [[ -n ${mac} ]] && iwconfig "${iface}" ap "${mac}" if ! iwconfig "${iface}" essid "${ESSID}" ; then @@ -453,7 +458,7 @@ [[ -z ${!x} || ${!x} -gt 0 ]] && sleep "${!x:-1}" local error=true i=-1 line= - local -a mac=() essid=() enc=() qual=() mode=() + local -a mac=() essid=() enc=() qual=() mode=() freq=() chan=() while read line; do error=false @@ -476,7 +481,12 @@ ;; *Frequency:*) freq[i]="${line#*:}" + freq[i]="${freq[i]%% *}" ;; + *Channel:*) + chan[i]="${line#*:}" + chan[i]="${chan[i]%% *}" + ;; *Quality*) qual[i]="${line#*:}" qual[i]="${qual[i]%/*}" @@ -533,6 +543,7 @@ unset mode[y] unset enc[y] unset freq[y] + unset chan[y] fi done done @@ -542,6 +553,7 @@ mode=( "${mode[@]}" ) enc=( "${enc[@]}" ) freq=( "${freq[@]}" ) + chan=( "${chan[@]}" ) for (( i=0; i<${#mac[@]}; i++ )); do # Don't like ad-hoc nodes by default @@ -557,6 +569,7 @@ mode_APs[i]="${mode[${sortline[x]}]}" enc_APs[i]="${enc[${sortline[x]}]}" freq_APs[i]="${freq[${sortline[x]}]}" + chan_APs[i]="${chan[${sortline[x]}]}" done return 0 @@ -629,6 +642,7 @@ unset mac_APs[i] unset enc_APs[i] unset freq_APs[i] + unset chan_APs[i] done # We need to squash our arrays so indexes work again @@ -637,6 +651,7 @@ mac_APs=( "${mac_APs[@]}" ) enc_APs=( "${enc_APs[@]}" ) freq_APs=( "${freq_APs[@]}" ) + chan_APs=( "${chan_APs[@]}" ) } # bool iwconfig_force_preferred(char *iface) @@ -679,7 +694,7 @@ if [[ ${essid} == "${essid_APs[i]}" ]]; then ESSID="${essid}" iwconfig_associate "${iface}" "${mode_APs[i]}" "${mac_APs[i]}" \ - "${enc_APs[i]}" "${freq_APs[i]}" && return 0 + "${enc_APs[i]}" "${freq_APs[i]}" "${chan_APs[i]}" && return 0 break fi done @@ -706,7 +721,7 @@ if ! ${has_preferred} ; then ESSID="${essid_APs[i]}" iwconfig_associate "${iface}" "${mode_APs[i]}" "${mac_APs[i]}" \ - "${enc_APs[i]}" "${freq_APs[i]}" && return 0 + "${enc_APs[i]}" "${freq_APs[i]}" "${chan_APs[i]}" && return 0 fi done @@ -751,12 +766,14 @@ unset mac_APs[j] unset enc_APs[j] unset freq_APs[j] + unset chan_APs[j] # We need to squash our arrays so that indexes work essid_APs=( "${essid_APs[@]}" ) mode_APs=( "${mode_APs[@]}" ) mac_APs=( "${mac_APs[@]}" ) enc_APs=( "${enc_APs[@]}" ) freq_APs=( "${freq_APs[@]}" ) + chan_APs=( "${chan_APs[@]}" ) break fi done @@ -780,7 +797,8 @@ # variables for the ESSID iwconfig_configure() { local iface="$1" e= x= ifvar=$(bash_variable "$1") - local -a essid_APs=() mac_APs=() mode_APs=() enc_APs=() freq_APs=() + local -a essid_APs=() mac_APs=() mode_APs=() + local -a enc_APs=() freq_APs=() chan_APs=() ESSID="essid_${ifvar}" ESSID="${!ESSID}"