summaryrefslogtreecommitdiffstats
path: root/package/netifd/files/sbin/ifup
blob: a3ff10ec5ada24c3a44db83ef38526d6f1d4b489 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh

case "$0" in
	*ifdown) modes=down;;
	*ifup) modes="down up";;
	*) echo "Invalid command: $0";;
esac

if_call() {
	local interface="$1"
	for mode in $modes; do
		ubus call $interface $mode
	done
}

[ "$modes" = "down up" ] && ubus call network reload
[[ "$1" == "-a" ]] && {
	for interface in `ubus -S list 'network.interface.*'`; do
		if_call "$interface"
	done
	exit
}

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"
	done
}