summaryrefslogtreecommitdiffstats
path: root/package/network/config/netifd/files/sbin/ifup
blob: e6dbb3541778626e170044338093a64a9e4e0186 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/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