netifd: improve /sbin/ifup wifi hack, make it work properly with -a. fold /etc/init...
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 23 May 2012 21:49:28 +0000 (21:49 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 23 May 2012 21:49:28 +0000 (21:49 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31850 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/netifd/files/etc/init.d/netifd [deleted file]
package/netifd/files/etc/init.d/network
package/netifd/files/sbin/ifup

diff --git a/package/netifd/files/etc/init.d/netifd b/package/netifd/files/etc/init.d/netifd
deleted file mode 100755 (executable)
index 840083b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=20
-
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
-
-start() {
-       stop
-       [ -e /proc/sys/kernel/core_pattern ] && {
-               ulimit -c unlimited
-               echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
-       }
-       service_start /sbin/netifd
-       sleep 1
-}
-
-restart() {
-       ifdown -a
-       sleep 1
-       stop
-       start
-}
-
-stop() {
-       service_stop /sbin/netifd
-}
-
-reload() {
-       ubus call network reload
-}
index 9ef2506..078a285 100755 (executable)
@@ -1,23 +1,43 @@
 #!/bin/sh /etc/rc.common
-START=40
+
+START=20
 STOP=90
 
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
 start() {
+       stop
+       [ -e /proc/sys/kernel/core_pattern ] && {
+               ulimit -c unlimited
+               echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
+       }
+       service_start /sbin/netifd
+
        setup_switch() { return 0; }
 
        include /lib/network
        setup_switch
 
-       ifup -a
-       grep -qs config /etc/config/wireless && {
-               /sbin/wifi up
-       }
+       sleep 1
 }
 
 restart() {
+       ifdown -a
+       sleep 1
        start
+       wifi
+}
+
+shutdown() {
+       ifdown -a
+       stop
 }
 
 stop() {
-       /sbin/ifdown -a
+       service_stop /sbin/netifd
+}
+
+reload() {
+       ubus call network reload
 }
index a3ff10e..e17b67d 100755 (executable)
@@ -1,10 +1,7 @@
 #!/bin/sh
 
-case "$0" in
-       *ifdown) modes=down;;
-       *ifup) modes="down up";;
-       *) echo "Invalid command: $0";;
-esac
+ifup_all=
+setup_wifi=
 
 if_call() {
        local interface="$1"
@@ -13,34 +10,66 @@ if_call() {
        done
 }
 
+case "$0" in
+       *ifdown) modes=down;;
+       *ifup)
+               modes="down up"
+               setup_wifi=1
+       ;;
+       *) echo "Invalid command: $0";;
+esac
+
+while :; do
+       case "$1" in
+               -a)
+                       ifup_all=1
+                       shift
+               ;;
+               -w)
+                       setup_wifi=
+                       shift
+               ;;
+               *)
+                       break
+               ;;
+       esac
+done
+
 [ "$modes" = "down up" ] && ubus call network reload
-[[ "$1" == "-a" ]] && {
+if [ -n "$ifup_all" ]; then
        for interface in `ubus -S list 'network.interface.*'`; do
                if_call "$interface"
        done
+       [ -n "$setup_wifi" ] && /sbin/wifi up
        exit
-}
+else
+       ubus -S list "network.interface.$1" > /dev/null || {
+               echo "Interface $1 not found"
+               exit
+       }
+       if_call "network.interface.$1"
+fi
 
-ubus -S list "network.interface.$1" > /dev/null || {
-       echo "Interface $1 not found"
-       exit
-}
-if_call "network.interface.$1"
-
-grep -sq ^config /etc/config/wireless && {
-       local wdev
-       for wdev in $(
-               find_radio() {
-                       local wdev wnet
-                       config_get wdev "$1" device
-                       config_get wnet "$1" network
-                       [ -n "$wdev" ] && [ "$wnet" = "$2" ] && echo "$wdev"
-               }
-
-               source /lib/functions.sh
-               config_load wireless
-               config_foreach find_radio wifi-iface "$1" | sort -u
-       ); do
-               /sbin/wifi up "$wdev"
+if [ -n "$setup_wifi" ] && grep -q config /etc/config/wireless; then
+       . /etc/functions.sh
+
+       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
+       }
+
+       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