config_get channel "$device" channel
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"
[ "$channel" = "auto" -o "$channel" = "0" ] || {
fixed=1
}
+ [ -n "$distance" ] && iw phy "$phy" set distance "$distance"
+
export channel fixed
# convert channel to frequency
local freq="$(get_freq "$phy" "${fixed:+$channel}")"
;;
sta)
local wdsflag
- [ "$wds" -gt 0 ] && wdsflag="wds on"
+ [ "$wds" -gt 0 ] && wdsflag="4addr on"
iw phy "$phy" interface add "$ifname" type managed $wdsflag
config_get_bool powersave "$vif" powersave 0
[ "$powersave" -gt 0 ] && powersave="on" || powersave="off"
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 $(($mac_1 + $offset)) ):$mac_2"
+ vif_mac="$( printf %02x $((0x$mac_1 + $offset)) ):$mac_2"
+ macidx="$(($macidx + 1))"
}
ifconfig "$ifname" hw ether "$vif_mac"
# configured to handle the wep connection
if [ ! "$mode" = "ap" ]; then
case "$enc" in
- wep)
+ *wep*)
config_get keymgmt "$vif" keymgmt
- if [ -e "$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*|*wpa*)
config_get key "$vif" key
;;
esac
config_get rts "$vif" rts
if [ -n "$rts" ]; then
- iw phy "$phy" set rts "${frag%%.*}"
+ iw phy "$phy" set rts "${rts%%.*}"
fi
ifconfig "$ifname" up
sta|mesh)
config_get bssid "$vif" bssid
case "$enc" in
- wep)
- if [ -e "$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 || {
fi
fi
;;
- wpa*|psk*)
+ *wpa*|*psk*)
config_get key "$vif" key
if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
wpa_supplicant_setup_vif "$vif" wext || {
check_device() {
config_get phy "$1" phy
[ -z "$phy" ] && {
- find_mac80211_phy "$1" || return 0
+ find_mac80211_phy "$1" >/dev/null || return 0
config_get phy "$1" phy
}
[ "$phy" = "$dev" ] && found=1
devidx=0
config_load wireless
while :; do
- config_get type "wifi$devidx" type
+ config_get type "radio$devidx" type
[ -n "$type" ] || break
devidx=$(($devidx + 1))
done
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="";
iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a"; channel="36"; }
cat <<EOF
-config wifi-device wifi$devidx
+config wifi-device radio$devidx
option type mac80211
option channel ${channel}
option macaddr $(cat /sys/class/ieee80211/${dev}/macaddress)
$ht_capab
config wifi-iface
- option device wifi$devidx
+ option device radio$devidx
option network lan
option mode ap
option ssid OpenWrt