diff options
Diffstat (limited to 'target/linux/brcm-2.4')
7 files changed, 120 insertions, 71 deletions
diff --git a/target/linux/brcm-2.4/base-files/etc/preinit.arch b/target/linux/brcm-2.4/base-files/etc/preinit.arch deleted file mode 100755 index e62360e44c..0000000000 --- a/target/linux/brcm-2.4/base-files/etc/preinit.arch +++ /dev/null @@ -1,71 +0,0 @@ -. /etc/functions.sh - -failsafe() { - lock /tmp/.failsafe - failsafe_ip - - echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports - - set_state failsafe - [ -x "/usr/sbin/nvram" ] && { - [ "$(nvram get boot_wait)" != "on" ] && { - nvram set boot_wait=on - nvram commit - } - } - - netmsg 192.168.1.255 "Entering Failsafe!" - telnetd -l /bin/login.sh <> /dev/null 2>&1 - - ash --login -} - -mount none /proc -t proc - -insmod diag -set_state preinit -echo '/sbin/hotplug.failsafe' > /proc/sys/kernel/hotplug - -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;; -esac - -check_module () { - module="$1"; shift; params="$*" - - insmod "$module" "$params" - sleep 1 - grep "^$module" /proc/modules - return $? -} - -check_module tg3 -failsafe_ip - -insmod switch-core -check_module switch-robo || check_module switch-adm || { - check_module bcm57xx activate_gpio=0x4 && cpu_port="8u*" -} || rmmod switch-core - -[ -d /proc/switch/eth0 ] && { - echo 1 > /proc/switch/eth0/reset - - # 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/0/ports - netmsg 192.168.1.255 "Press reset now, to enter Failsafe!" - }; done -} || netmsg 192.168.1.255 "Press reset now, to enter Failsafe!" - -ifconfig $ifname 0.0.0.0 down - -sleep 2 - diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/03_init_hotplug_failsafe_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/03_init_hotplug_failsafe_brcm-2.4 new file mode 100644 index 0000000000..b0f4a4efa9 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/03_init_hotplug_failsafe_brcm-2.4 @@ -0,0 +1,9 @@ +#!/bin/sh + +init_hotplug_failsafe() { + echo '/sbin/hotplug.failsafe' > /proc/sys/kernel/hotplug +} + +boot_hook_add preinit_main init_hotplug_failsafe + + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/05_init_interfaces_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/05_init_interfaces_brcm-2.4 new file mode 100644 index 0000000000..81cf1f1380 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/05_init_interfaces_brcm-2.4 @@ -0,0 +1,38 @@ +#!/bin/sh + +set_preinit_iface() { + ifname=eth0 + + insmod diag + + # 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;; + esac +} + +check_module () { + module="$1"; shift; params="$*" + + insmod "$module" "$params" + sleep 1 + grep "^$module" /proc/modules + return $? +} + +init_iface() { + check_module tg3 + insmod switch-core + check_module switch-robo || check_module switch-adm || { + check_module bcm57xx activate_gpio=0x4 && cpu_port="8u*" + } || rmmod switch-core +} + +boot_hook_add preinit_main init_iface +boot_hook_add preinit_main set_preinit_iface + + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/05_set_failsafe_switch_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/05_set_failsafe_switch_brcm-2.4 new file mode 100644 index 0000000000..28e62e5b57 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/05_set_failsafe_switch_brcm-2.4 @@ -0,0 +1,15 @@ +#!/bin/sh + +failsafe_ip() { + [ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && { + ifconfig eth0 0.0.0.0 down + echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports + } + + [ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && { + ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up + } +} + +boot_hook_add failsafe failsafe_ip + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/15_mount_proc_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/15_mount_proc_brcm-2.4 new file mode 100644 index 0000000000..fd5add16a5 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/15_mount_proc_brcm-2.4 @@ -0,0 +1,6 @@ +#!/bin/sh + +do_mount_procfs() { + mount none /proc -t proc +} + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm-2.4 new file mode 100644 index 0000000000..5e8dc9f11f --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm-2.4 @@ -0,0 +1,38 @@ +. /etc/functions.sh + +port_net_echo() { + [ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null ] { + if [ "$pi_preinit_net_messages" = "y" ] || [ "$pi_failsafe_net_message" = "true"] && [ "$pi_preinit_no_failsafe_netmsg" != "y" ]; then + netmsg $pi_broadcast "$1" + } + } +} + +preinit_ip_deconfig() { + if [ -z "$pi_ifname" ]; then + ifconfig $ifname 0.0.0.0 down + else + grep "$pi_ifname" /proc/net/dev >/dev/null && { + ifconfig $pi_ifname 0.0.0.0 down + } + fi +} + +preinit_net_echo() { + preinit_ip + + [ -d /proc/switch/eth0 ] && [ "$pi_ifname" = "eth0" ] && { + echo 1 > /proc/switch/eth0/reset + + # 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/0/ports + port_net_echo $1 + }; done + } || port_net_echo $1 + + preinit_ip_deconfig +} + + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_set_boot_wait_brcm-2.4 b/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_set_boot_wait_brcm-2.4 new file mode 100644 index 0000000000..da721b8484 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_set_boot_wait_brcm-2.4 @@ -0,0 +1,14 @@ +#!/bin/sh + +. /etc/functions.sh + +set_boot_wait() { + [ -x "/usr/sbin/nvram" ] && { + [ "$(nvram get boot_wait)" != "on" ] && { + nvram set boot_wait=on + nvram commit + } + } +} + +boot_hook_add failsafe set_boot_wait |