80 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
ifup_all=
 | 
						|
setup_wifi=
 | 
						|
 | 
						|
if_call() {
 | 
						|
	local interface="$1"
 | 
						|
	for mode in $modes; do
 | 
						|
		ubus call $interface $mode
 | 
						|
	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
 | 
						|
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
 | 
						|
 | 
						|
if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then
 | 
						|
	. /lib/functions.sh
 | 
						|
 | 
						|
	find_related_radios() {
 | 
						|
		local wdev wnet
 | 
						|
		config_get wdev "$1" device
 | 
						|
		config_get wnet "$1" network
 | 
						|
 | 
						|
		if [ -n "$wdev" ]; then
 | 
						|
			for wnet in $wnet; do
 | 
						|
				if [ "$wnet" = "$network" ]; then
 | 
						|
					append radio_devs "$wdev" "$N"
 | 
						|
				fi
 | 
						|
			done
 | 
						|
		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
 |