X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/2cde6994a90e96364de93d03942f9c2930780133..427c7ab18ca8544d37c467de44de0199414dd6f3:/package/mac80211/files/lib/wifi/mac80211.sh diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 39a7034ab..3f85864ec 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -13,14 +13,14 @@ scan_mac80211() { config_get mode "$vif" mode case "$mode" in - adhoc|sta|ap) + adhoc|sta|ap|monitor) append $mode "$vif" ;; *) echo "$device($vif): Invalid mode, ignored."; continue;; esac done - config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }" + config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor}" } @@ -29,7 +29,7 @@ disable_mac80211() ( set_wifi_down "$device" # kill all running hostapd and wpa_supplicant processes that - # are running on atheros vifs + # are running on atheros/mac80211 vifs for pid in `pidof hostapd wpa_supplicant`; do grep wlan /proc/$pid/cmdline >/dev/null && \ kill $pid @@ -53,8 +53,10 @@ enable_mac80211() { local first=1 for vif in $vifs; do + ifconfig "$ifname" down config_get ifname "$vif" ifname config_get enc "$vif" encryption + config_get eap_type "$vif" eap_type config_get mode "$vif" mode config_get ifname "$vif" ifname @@ -66,11 +68,20 @@ enable_mac80211() { [ "$first" = 1 ] && { # only need to change freq band and channel on the first vif - iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null - ifconfig "$ifname" up + iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null + if [ "$mode" = adhoc ]; then + iwlist "$ifname" scan >/dev/null 2>/dev/null + sleep 1 + iwconfig "$ifname" mode ad-hoc >/dev/null 2>/dev/null + fi sleep 1 - iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null + iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null } + if [ "$mode" = sta ]; then + iwconfig "$ifname" mode managed >/dev/null 2>/dev/null + else + iwconfig "$ifname" mode $mode >/dev/null 2>/dev/null + fi wpa= case "$enc" in @@ -131,8 +142,8 @@ enable_mac80211() { case "$mode" in ap) if eval "type hostapd_setup_vif" 2>/dev/null >/dev/null; then - hostapd_setup_vif "$vif" devicescape || { - echo "enable_atheros($device): Failed to set up wpa for interface $ifname" >&2 + hostapd_setup_vif "$vif" nl80211 || { + echo "enable_mac80211($device): Failed to set up wpa for interface $ifname" >&2 # make sure this wifi interface won't accidentally stay open without encryption ifconfig "$ifname" down continue @@ -140,30 +151,14 @@ enable_mac80211() { fi ;; sta) - case "$enc" in - PSK|psk|PSK2|psk2) - case "$enc" in - PSK|psk) - proto='proto=WPA';; - PSK2|psk2) - proto='proto=RSN';; - esac - cat > /var/run/wpa_supplicant-$ifname.conf </dev/null >/dev/null; then + wpa_supplicant_setup_vif "$vif" wext || { + echo "enable_mac80211($device): Failed to set up wpa_supplicant for interface $ifname" >&2 + # make sure this wifi interface won't accidentally stay open without encryption + ifconfig "$ifname" down + continue + } + fi ;; esac first=0