aboutsummaryrefslogtreecommitdiffstats
path: root/package/netifd
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-05-23 21:49:28 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-05-23 21:49:28 +0000
commitb86652832e9bfe8e0d2697f18266778afb9f90c3 (patch)
tree3d83e833d18786a526ec054f42fbfc813859fdcf /package/netifd
parent267b414b4c4ee4155b554761ddde42245fb384a0 (diff)
downloadupstream-b86652832e9bfe8e0d2697f18266778afb9f90c3.tar.gz
upstream-b86652832e9bfe8e0d2697f18266778afb9f90c3.tar.bz2
upstream-b86652832e9bfe8e0d2697f18266778afb9f90c3.zip
netifd: improve /sbin/ifup wifi hack, make it work properly with -a. fold /etc/init.d/netifd into /etc/init.d/network
SVN-Revision: 31850
Diffstat (limited to 'package/netifd')
-rwxr-xr-xpackage/netifd/files/etc/init.d/netifd31
-rwxr-xr-xpackage/netifd/files/etc/init.d/network32
-rwxr-xr-xpackage/netifd/files/sbin/ifup87
3 files changed, 84 insertions, 66 deletions
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