From 95718ecbd752625f99479df8e8b6214c2cd22040 Mon Sep 17 00:00:00 2001 From: nbd Date: Wed, 23 May 2012 21:49:28 +0000 Subject: netifd: improve /sbin/ifup wifi hack, make it work properly with -a. fold /etc/init.d/netifd into /etc/init.d/network git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31850 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/netifd/files/etc/init.d/netifd | 31 ------------ package/netifd/files/etc/init.d/network | 32 +++++++++--- package/netifd/files/sbin/ifup | 87 ++++++++++++++++++++++----------- 3 files changed, 84 insertions(+), 66 deletions(-) delete mode 100755 package/netifd/files/etc/init.d/netifd diff --git a/package/netifd/files/etc/init.d/netifd b/package/netifd/files/etc/init.d/netifd deleted file mode 100755 index 840083b61f..0000000000 --- a/package/netifd/files/etc/init.d/netifd +++ /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 -} diff --git a/package/netifd/files/etc/init.d/network b/package/netifd/files/etc/init.d/network index 9ef2506dea..078a285957 100755 --- a/package/netifd/files/etc/init.d/network +++ b/package/netifd/files/etc/init.d/network @@ -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 } diff --git a/package/netifd/files/sbin/ifup b/package/netifd/files/sbin/ifup index a3ff10ec5a..e17b67de5c 100755 --- a/package/netifd/files/sbin/ifup +++ b/package/netifd/files/sbin/ifup @@ -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 -- cgit v1.2.3