mac80211: fix interface startup order for AP+STA (patch by yann lopez)
authorFelix Fietkau <nbd@openwrt.org>
Sun, 28 Feb 2010 17:06:53 +0000 (17:06 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 28 Feb 2010 17:06:53 +0000 (17:06 +0000)
SVN-Revision: 19912

package/mac80211/files/lib/wifi/mac80211.sh

index 257277a2805e587bc14253c70be2faeefd3eecb2..f127b285662c521b67e6e637003a6e49f740aa63 100644 (file)
@@ -318,29 +318,6 @@ enable_mac80211() {
                if [ -n "$rts" ]; then
                        iw phy "$phy" set rts "${rts%%.*}"
                fi
-
-               ifconfig "$ifname" up
-
-               if [ ! "$mode" = "ap" ]; then
-                       mac80211_start_vif "$vif" "$ifname"
-
-                       case "$mode" in
-                               adhoc)
-                                       config_get bssid "$vif" bssid
-                                       iw dev "$ifname" ibss join "$ssid" $freq ${fixed:+fixed-freq} $bssid
-                               ;;
-                               sta)
-                                       if eval "type wpa_supplicant_setup_vif" 2>/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
-               fi
        done
 
        local start_hostapd=
@@ -366,6 +343,36 @@ enable_mac80211() {
                [ "$mode" = "ap" ] || continue
                mac80211_start_vif "$vif" "$ifname"
        done
+
+       for vif in $vifs; do
+               config_get mode "$vif" mode
+               config_get ifname "$vif" ifname
+               [ ! "$mode" = "ap" ] || continue
+               ifconfig "$ifname" up
+
+               if [ ! "$mode" = "ap" ]; then
+                       mac80211_start_vif "$vif" "$ifname"
+
+                       case "$mode" in
+                               adhoc)
+                                       config_get bssid "$vif" bssid
+                                       config_get bssid "$vif" ssid
+                                       iw dev "$ifname" ibss join "$ssid" $freq ${fixed:+fixed-freq} $bssid
+                               ;;
+                               sta)
+                                       if eval "type wpa_supplicant_setup_vif" 2>/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
+               fi
+       done
+
 }