aboutsummaryrefslogtreecommitdiffstats
path: root/package/switch/files/switch.sh
blob: 2563d410e522ba0eca83804480d89313ab147ff9 (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
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org

setup_switch_hw() {
	local dev="$1"
	local enable reset evlan

	config_get_bool enable "$dev" enable 1
	config_get_bool evlan  "$dev" enable_vlan 1
	config_get_bool reset  "$dev" reset 1

	local proc="/proc/switch/$dev"
	[ -d "$proc" ] && {
		ifconfig "$dev" up
		echo "$reset"  > "$proc/reset"
		echo "$evlan"  > "$proc/enable_vlan"
		[ -f "$proc/enable" ] && echo "$enable" > "$proc/enable"
	}

	local vlan
	for vlan in `seq 0 15`; do
		proc="/proc/switch/$dev/vlan/$vlan/ports"
		[ -f "$proc" ] && echo "" > "$proc"
	done
}

setup_switch_vlan() {
	local s="$1"
	local dev vlan ports

	config_get dev   "$s" device
	config_get vlan  "$s" vlan
	config_get ports "$s" ports

	[ -n "$dev" ] && [ -n "$vlan" ] && {
		ports="${ports%\*}"

		[ "$_vlan_pvid_set" = 1 ] || {
			ports="$ports*"
			_vlan_pvid_set=1
		}

		local proc="/proc/switch/$dev/vlan/$vlan/ports"
		[ -f "$proc" ] && echo "$ports" > "$proc"
	}
}

setup_switch() {
	_vlan_pvid_set=0
	config_load network
	config_foreach setup_switch_hw switch
	config_foreach setup_switch_vlan switch_vlan
}