diff options
-rw-r--r-- | package/switch/files/switch.sh | 55 | ||||
-rwxr-xr-x | target/linux/brcm-2.4/base-files/etc/init.d/netconfig | 18 |
2 files changed, 44 insertions, 29 deletions
diff --git a/package/switch/files/switch.sh b/package/switch/files/switch.sh index a787a8cf38..14bacadc5d 100644 --- a/package/switch/files/switch.sh +++ b/package/switch/files/switch.sh @@ -1,33 +1,38 @@ #!/bin/sh -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2009 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" ] && { + echo "$reset" > "$proc/reset" + echo "$evlan" > "$proc/enable_vlan" + echo "$enable" > "$proc/enable" + } +} setup_switch_vlan() { - DIR="/proc/switch/$CONFIG_SECTION/vlan/$1" - [ -d "$DIR" ] || return 0 - - config_get ports "$CONFIG_SECTION" "vlan$1" - echo "$ports" > "$DIR/ports" + 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" ] && { + local proc="/proc/switch/$dev/vlan/$vlan/ports" + [ -f "$proc" ] && echo "$ports" > "$proc" + } } setup_switch() { - config_cb() { - case "$1" in - switch) - [ -n "$2" -a -d "/proc/switch/$2" ] && { - echo 1 > "/proc/switch/$2/reset" - echo 1 > "/proc/switch/$2/enable" - echo 1 > "/proc/switch/$2/enable_vlan" - option_cb() { - case "$1" in - vlan*) setup_switch_vlan "${1##vlan}";; - esac - } - } - ;; - *) - option_cb() { return 0; } - ;; - esac - } config_load network + config_foreach setup_switch_hw switch + config_foreach setup_switch_vlan switch_vlan } diff --git a/target/linux/brcm-2.4/base-files/etc/init.d/netconfig b/target/linux/brcm-2.4/base-files/etc/init.d/netconfig index 09c7c286fc..4d66962f98 100755 --- a/target/linux/brcm-2.4/base-files/etc/init.d/netconfig +++ b/target/linux/brcm-2.4/base-files/etc/init.d/netconfig @@ -20,6 +20,16 @@ start() { if (c[name] != "") print " option " cfgname " \"" c[name] "\"" } + function vlan(id, name) { + if (c[name] != "") { + print "config switch_vlan eth0_" id + print " option device \"eth0\"" + print " option vlan " id + print " option ports \"" c[name] "\"" + print "" + } + } + function macinc(mac, maca, i, result) { split(mac, maca, ":") for (i = 1; i <= 6; i++) maca[i] = "0x" maca[i] @@ -165,10 +175,10 @@ start() { if (c["vlan0ports"] || c["vlan1ports"]) { print "#### VLAN configuration " print "config switch eth0" - p("vlan0", "vlan0ports") - p("vlan1", "vlan1ports") - print "" - print "" + print " option enable 1" + print "" + vlan(0, "vlan0ports") + vlan(1, "vlan1ports") } print "#### Loopback configuration" print "config interface loopback" |