parent
b0a535a6de
commit
6c4b1cc135
@ -0,0 +1,28 @@ |
||||
#!/bin/sh |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
|
||||
set_led() { |
||||
local led="$1" |
||||
local state="$2" |
||||
[ -f "/proc/diag/led/$1" ] && echo "$state" > "/proc/diag/led/$1" |
||||
} |
||||
|
||||
set_state() { |
||||
case "$1" in |
||||
preinit) |
||||
set_led dmz 1 |
||||
set_led diag 1 |
||||
set_led power 0 |
||||
;; |
||||
failsafe) |
||||
set_led diag f |
||||
set_led power f |
||||
set_led dmz f |
||||
;; |
||||
done) |
||||
set_led dmz 0 |
||||
set_led diag 0 |
||||
set_led power 1 |
||||
;; |
||||
esac |
||||
} |
@ -0,0 +1,15 @@ |
||||
#!/bin/sh /etc/rc.common |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
|
||||
START=95 |
||||
boot() { |
||||
[ -d /tmp/root ] && { |
||||
lock /tmp/.switch2jffs |
||||
firstboot switch2jffs |
||||
lock -u /tmp/.switch2jffs |
||||
} |
||||
|
||||
# set leds to normal state |
||||
. /etc/diag.sh |
||||
set_state done |
||||
} |
@ -1,13 +1,73 @@ |
||||
#!/bin/sh |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
|
||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin |
||||
mount none /proc -t proc |
||||
. /etc/functions.sh |
||||
. /etc/diag.sh |
||||
|
||||
failsafe() { |
||||
lock /tmp/.failsafe |
||||
|
||||
[ -f /etc/preinit.arch ] && . /etc/preinit.arch |
||||
[ -z "$FAILSAFE" ] || { |
||||
echo /bin/true > /proc/sys/kernel/hotplug |
||||
echo "0 1 2 3 4 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 <> /dev/null 2>&1 |
||||
|
||||
ash --login |
||||
lock -u /tmp/.failsafe |
||||
} |
||||
mount_root ${FAILSAFE:+failsafe} |
||||
|
||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin |
||||
mount none /proc -t proc |
||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) |
||||
mount none /tmp -t tmpfs -o size=$size |
||||
|
||||
insmod diag |
||||
set_state preinit |
||||
trap 'FAILSAFE=true' USR1 |
||||
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;; |
||||
esac |
||||
|
||||
insmod switch-core |
||||
insmod switch-robo || insmod switch-adm || rmmod switch-core |
||||
|
||||
ifconfig $ifname 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up |
||||
|
||||
[ -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 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!" |
||||
|
||||
sleep 2 |
||||
|
||||
eval ${FAILSAFE:+failsafe} |
||||
|
||||
lock -w /tmp/.failsafe |
||||
echo /sbin/hotplug > /proc/sys/kernel/hotplug |
||||
|
||||
ifconfig $ifname 0.0.0.0 down |
||||
|
||||
mount_root |
||||
exec /sbin/init |
||||
|
@ -0,0 +1,4 @@ |
||||
#!/bin/sh |
||||
case "$1" in |
||||
button) kill -USR1 1;; |
||||
esac |
Loading…
Reference in new issue