diff options
Diffstat (limited to 'package/netifd')
| -rwxr-xr-x | package/netifd/files/etc/init.d/netifd | 31 | ||||
| -rwxr-xr-x | package/netifd/files/etc/init.d/network | 32 | ||||
| -rwxr-xr-x | package/netifd/files/sbin/ifup | 87 | 
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 840083b61..000000000 --- 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 9ef2506de..078a28595 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 a3ff10ec5..e17b67de5 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 | 
