From f0eca0a556c0d1429b66bb144fec60e335e52b3c Mon Sep 17 00:00:00 2001 From: hauke Date: Sun, 12 Jan 2014 18:56:15 +0000 Subject: [PATCH] brcm47xx: fix network failsafe indication Remove the code used on the old switch driver. The Ethernet drive is loaded as a module and needs some time to get up therefor we added some wait function. Signed-off-by: Hauke Mehrtens git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39254 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../lib/preinit/05_init_interfaces_brcm | 35 ++++------------ .../lib/preinit/05_set_failsafe_switch_brcm | 18 --------- .../lib/preinit/15_set_preinit_interface_brcm | 40 +++++-------------- 3 files changed, 18 insertions(+), 75 deletions(-) delete mode 100644 target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm diff --git a/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm b/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm index 76382e5cee..4b0d0eb674 100644 --- a/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm +++ b/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm @@ -1,37 +1,16 @@ #!/bin/sh -set_preinit_iface() { +preinit_iface() { ifname=eth0 # hardware specific overrides - case "$(cat /proc/diag/model)" in - "Linksys WAP54G V1") ifname=eth1;; - "ASUS WL-HDD") ifname=eth1;; - "ASUS WL-300g") ifname=eth1;; - "ASUS (unknown, BCM4702)") ifname=eth1;; - "Sitecom WL-105b") ifname=eth1;; + case "$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)" in + "Asus WLHDD") ifname=eth1;; + "Asus WL300G") 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 - } + local try=0; + while [ $((try++)) -le 5 ] && [ ! -f /sys/class/net/$ifname/operstate ]; do sleep 1; done } -init_iface() { - [ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && { - case "$(cat /proc/switch/eth0/cpuport)" in - "5") cpu_port="5u*";; - "8") cpu_port="8u*";; - esac - } -} - -boot_hook_add preinit_main set_preinit_iface -boot_hook_add preinit_main init_iface +boot_hook_add preinit_main preinit_iface diff --git a/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm b/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm deleted file mode 100644 index 7e030acfff..0000000000 --- a/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -failsafe_ip() { - [ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && { - # 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 diff --git a/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm b/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm index bc749398f5..aab50bf1a9 100644 --- a/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm +++ b/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm @@ -1,34 +1,16 @@ #!/bin/sh -preinit_net_echo_send() { - preinit_ip +preinit_ip() { + # if the preinit interface isn't specified and ifname is set in + # preinit.arch use that interface + if [ -z "$pi_ifname" ]; then + pi_ifname=$ifname + fi - [ -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 - sleep 1 - - netmsg $pi_broadcast "$1" - }; done - - } || 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 - } + ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up + + local try=0; + while [ $((try++)) -le 5 ] && [ ! $(cat /sys/class/net/$pi_ifname/operstate) == "up" ]; do sleep 1; done + } } -- 2.30.2