brcm47xx: fix switch handling

This fixes some problems with the switch handling

 * It now send the messages again to indicate a button for failsafe mode should be pressed
 * it does not leak packages between wan and lan any more
 * the switch works again in normal mode

The Ethernet connection has to be up when the switch driver switch-robo 
is insmoded therefor we just do it again.
Explicitly set enable_vlan to prevent leaking packages.

This should close #13869, #13868 and #13716


git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37286 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Hauke Mehrtens 2013-07-14 13:19:58 +00:00
parent 5c482f63ea
commit 652844194b
4 changed files with 36 additions and 35 deletions

View File

@ -11,7 +11,17 @@ set_preinit_iface() {
"ASUS (unknown, BCM4702)") ifname=eth1;;
"Sitecom WL-105b") ifname=eth1;;
esac
# The interface has to be up to configure the switch
ifconfig $ifname 0.0.0.0 up
[ -f /lib/modules/`uname -r`/switch-robo.ko ] && {
rmmod switch-robo
insmod switch-robo
}
[ -f /lib/modules/`uname -r`/switch-adm.ko ] && {
rmmod switch-adm
insmod switch-adm
}
}
init_iface() {

View File

@ -2,13 +2,17 @@
failsafe_ip() {
[ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && {
ifconfig eth0 0.0.0.0 down
# The switch will connect all ports, The switch will leak
# packages from wan to lan and vice versa in failsafe mode
echo 1 > /proc/switch/eth0/reset
echo 1 > /proc/switch/eth0/enable
echo 0 > /proc/switch/eth0/enable_vlan
echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/1/ports
}
[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
}
}
}
boot_hook_add failsafe failsafe_ip

View File

@ -1,37 +1,34 @@
#!/bin/sh
port_net_echo() {
[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
if [ "$pi_preinit_net_messages" = "y" ] || [ "$pi_failsafe_net_message" = "true" ] && [ "$pi_preinit_no_failsafe_netmsg" != "y" ]; then
netmsg $pi_broadcast "$1"
fi
}
}
preinit_ip_deconfig() {
if [ -z "$pi_ifname" ]; then
ifconfig $ifname 0.0.0.0 down
else
grep -q "$pi_ifname" /proc/net/dev && {
ifconfig $pi_ifname 0.0.0.0 down
}
fi
}
preinit_net_echo() {
preinit_net_echo_send() {
preinit_ip
[ -d /proc/switch/eth0 ] && [ "$pi_ifname" = "eth0" ] && {
echo 1 > /proc/switch/eth0/reset
echo 1 > /proc/switch/eth0/enable
echo 1 > /proc/switch/eth0/enable_vlan
# this would be easier if we blasted the message across all ports
# but we don't want packets leaking across interfaces
for port in $(seq 0 4); do {
echo "$port ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/1/ports
port_net_echo $1
sleep 1
netmsg $pi_broadcast "$1"
}; done
echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/1/ports
} || port_net_echo $1
} || netmsg $pi_broadcast "$1"
}
preinit_net_echo() {
[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
{
[ "$pi_preinit_net_messages" = "y" ] || {
[ "$pi_failsafe_net_message" = "true" ] &&
[ "$pi_preinit_no_failsafe_netmsg" != "y" ]
}
} && preinit_net_echo_send $1
}
}

View File

@ -1,10 +0,0 @@
#!/bin/sh
indicate_failsafe() {
preinit_net_echo() {
port_net_echo $1
}
echo "- failsafe -"
preinit_net_echo "Entering Failsafe!\n"
indicate_failsafe_led
}