rewrite failsafe mechaism
authorMike Baker <mbm@openwrt.org>
Mon, 30 Oct 2006 09:42:29 +0000 (09:42 +0000)
committerMike Baker <mbm@openwrt.org>
Mon, 30 Oct 2006 09:42:29 +0000 (09:42 +0000)
SVN-Revision: 5338

openwrt/package/base-files/default/etc/functions.sh
openwrt/package/base-files/default/etc/init.d/rcS
openwrt/package/base-files/default/etc/preinit
openwrt/package/base-files/default/sbin/hotplug.failsafe
openwrt/package/base-files/default/sbin/mount_root

index 60ead7f13a0d7adda990cc498ddd44aa3076596c..fd0bc64711195c519db7790d82864c266889a2c4 100755 (executable)
@@ -185,10 +185,9 @@ set_state() {
                        set_led power 0
                ;;
                failsafe)
-                       set_led diag 0 && led=diag
-                       set_led power 1 && led=power
-                       set_led dmz 0 && led=dmz
-                       while :; do { set_led "$led" $(((X=(X+1)%8)%2)); sleep $((X==0)); } done &
+                       set_led diag f
+                       set_led power f
+                       set_led dmz f
                ;;
                done)
                        set_led dmz 0
index 9e3285915ddb4d7025d6ca0f291c800e78f4cc0e..d93c81224c4c768bdd839ed22119eff2b1c20380 100755 (executable)
@@ -1,12 +1,9 @@
 #!/bin/sh
-${FAILSAFE:+exit}
-
 syslog_ip=$(nvram get log_ipaddr)
 eval $(ipcalc "$syslog_ip")
 [ "$syslog_ip" = "$IP" ] || syslog_ip=""
 syslogd -C 16 ${syslog_ip:+-L -R $syslog_ip}
 klogd
-#${FAILSAFE:+telnetd -l /bin/login; ifup lan; exit}
 for i in /etc/init.d/S*; do
   $i start 2>&1
 done | logger -s -p 6 -t '' &
index 029f7c2b71fb108db9e4c5783339bf51955ae583..a89ff31c6f63b105787e3ce355a1cafcab4319ea 100755 (executable)
@@ -3,7 +3,11 @@
 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
+echo /sbin/hotplug.failsafe > /proc/sys/kernel/hotplug
 set_state preinit
 
 ifname=eth0
@@ -30,33 +34,22 @@ 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
-netmsg 192.168.1.0 "(dummy message)" # b44 eats the first packet
 netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
 
-echo /sbin/hotplug.failsafe > /proc/sys/kernel/hotplug
-if sleep 2; then
-       ifconfig $ifname 0.0.0.0
-
-       # revert to the boot loader's vlan config
-       # required for at least WRT54G v1.1
-       [ -d /proc/switch/eth0 ] && {
-               echo "$v0p" > /proc/switch/eth0/vlan/0/ports
-               echo "$v1p" > /proc/switch/eth0/vlan/1/ports
-               echo "$v2p" > /proc/switch/eth0/vlan/2/ports
-       }
-else
-       # sleep was interrupted by a hotplug event - enter failsafe mode
-       set_state failsafe
-       export FAILSAFE=true
-       [ "$(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
-fi
+sleep 2
+lock -w /tmp/.failsafe
 echo /sbin/hotplug > /proc/sys/kernel/hotplug
 
-mount_root ${FAILSAFE:+failsafe}
+ifconfig $ifname 0.0.0.0 down
+
+# revert to the boot loader's vlan config
+# required for at least WRT54G v1.1
+[ -d /proc/switch/eth0 ] && {
+       echo "$v0p" > /proc/switch/eth0/vlan/0/ports
+       echo "$v1p" > /proc/switch/eth0/vlan/1/ports
+       echo "$v2p" > /proc/switch/eth0/vlan/2/ports
+}
+
+mount_root
 
 exec /sbin/init
index f2091e0a480eef696189bc6bd5c4a76720f4c8c8..867e7662630ddf4531e6d4d05493a398e780b5ae 100755 (executable)
@@ -1,3 +1,14 @@
 #!/bin/sh
-# trigger for failsafe mode
-[ "$1" = "button" ] && killall sleep
+[ "$1" = "button" -a "$ACTION" = "pressed" ] && {
+       lock /tmp/.failsafe
+
+       . /etc/functions.sh
+       set_state failsafe
+       [ "$(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
+}
index 6c2ef6ed5864bcd6507b1deb6ac009e69b810e19..9d336863c9c3d447e660c2ea0b6e491c0e1bf4d5 100755 (executable)
@@ -5,9 +5,6 @@ is_dirty() {
        return $(hexdump -v /dev/mtdblock/1 -s $OFFSET -n 1 -e '"%d"')
 }
 
-size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo)
-mount none /tmp -t tmpfs -o size=$size
-
 if [ "$1" != "failsafe" -a "$(nvram get no_root_swap)" != 1 ]; then 
        mtd unlock linux
        mount | grep jffs2 >&-