| 1 | #!/bin/sh |
| 2 | # Copyright (C) 2006-2010 OpenWrt.org |
| 3 | |
| 4 | setup_switch_hw() { |
| 5 | local dev="$1" |
| 6 | local enable reset evlan |
| 7 | |
| 8 | config_get_bool enable "$dev" enable 1 |
| 9 | config_get_bool evlan "$dev" enable_vlan 1 |
| 10 | config_get_bool reset "$dev" reset 1 |
| 11 | |
| 12 | local proc="/proc/switch/$dev" |
| 13 | [ -d "$proc" ] && { |
| 14 | echo "$reset" > "$proc/reset" |
| 15 | echo "$evlan" > "$proc/enable_vlan" |
| 16 | [ -f "$proc/enable" ] && echo "$enable" > "$proc/enable" |
| 17 | } |
| 18 | |
| 19 | local vlan |
| 20 | for vlan in `seq 0 15`; do |
| 21 | proc="/proc/switch/$dev/vlan/$vlan/ports" |
| 22 | [ -f "$proc" ] && echo "" > "$proc" |
| 23 | done |
| 24 | } |
| 25 | |
| 26 | setup_switch_vlan() { |
| 27 | local s="$1" |
| 28 | local dev vlan ports |
| 29 | |
| 30 | config_get dev "$s" device |
| 31 | config_get vlan "$s" vlan |
| 32 | config_get ports "$s" ports |
| 33 | |
| 34 | [ -n "$dev" ] && [ -n "$vlan" ] && { |
| 35 | ports="${ports%\*}" |
| 36 | |
| 37 | [ "$_vlan_pvid_set" = 1 ] || { |
| 38 | ports="$ports*" |
| 39 | _vlan_pvid_set=1 |
| 40 | } |
| 41 | |
| 42 | local proc="/proc/switch/$dev/vlan/$vlan/ports" |
| 43 | [ -f "$proc" ] && echo "$ports" > "$proc" |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | setup_switch() { |
| 48 | _vlan_pvid_set=0 |
| 49 | config_load network |
| 50 | config_foreach setup_switch_hw switch |
| 51 | config_foreach setup_switch_vlan switch_vlan |
| 52 | } |
| 53 | |