X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/8b99a957f2d8e712fdea90564f127f65040d36cd..7f9cbfdbd66ac6b0cd8862795bb7eb149605b349:/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 58fa1be49..74105c666 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}" } @@ -53,8 +53,10 @@ enable_mac80211() { local first=1 for vif in $vifs; do + ifconfig "$ifname" down 2>/dev/null 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 @@ -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