[backfire] base-files: backport r29587
[openwrt-10.03/.git] / package / base-files / files / sbin / ifup
index 81ec2c08908a8f168b0ce1d396525af292a40c48..5f8d80dc2ddf16319d22ceaf59d668f81b6f7658 100755 (executable)
@@ -1,11 +1,51 @@
 #!/bin/sh
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2011 OpenWrt.org
 
-/sbin/ifdown "$@"
+/sbin/ifdown "$@"
 
-config_get iftype "$1" type
-config_get ifname "$1" device
+. /etc/functions.sh
+[ $# = 0 ] && { echo "  $0 <group>"; exit; }
+
+setup_wifi=1
+
+case "$1" in
+       "-a")
+               [ -e "/tmp/resolv.conf.auto" ] && rm /tmp/resolv.conf.auto
+               config_cb() {
+                       [ interface != "$1" -o -z "$2" ] || eval "$0 -w $2"
+               }
+               config_load network
+               exit 0
+       ;;
+       "-w") setup_wifi=0; shift ;;
+esac
+
+if [ $setup_wifi -gt 0 ] && grep -q config /etc/config/wireless; then
+       find_related_radios() {
+               local wdev wnet
+               config_get wdev "$1" device
+               config_get wnet "$1" network
+
+               if [ -n "$wdev" ] && [ "$wnet" = "$network" ]; then
+                       append radio_devs "$wdev" "$N"
+               fi
+       }
 
-for dev in $ifname; do
+       local radio_devs
+       local network="$1"
+       config_load wireless
+       config_foreach find_related_radios wifi-iface
+
+       local dev
+       for dev in $(echo "$radio_devs" | sort -u); do
+               /sbin/wifi up "$dev"
+       done
+fi
+
+include /lib/network
+scan_interfaces
+
+config_get ifname "$1" device
+for dev in ${ifname:-$1}; do
        setup_interface "$dev" "$1"
 done