blob: e96669a411ddb0f4ac1c8bb385be41df978ac74c [file] [log] [blame]
#!/bin/sh
# Make sure link is up for at least 30 seconds.
wait_for_link_up() {
DOWN=true
while [ "$DOWN" = "true" ]; do
LINK_STATE=$(cat /sys/class/net/lan0/operstate)
if [ "$LINK_STATE" = "up" ]; then
DOWN=false
for N in $(seq 1 30); do
sleep 1
LINK_STATE=$(cat /sys/class/net/lan0/operstate)
if [ "$LINK_STATE" = "down" ]; then
DOWN=true
break
fi
done
else
sleep 1
fi
done
}
# Tx_packets is always 0 if link was never up.
# Reboot if no TX packet after link is up for 30 seconds;
# assume ethernet controller is stuck.
reboot_if_no_tx() {
TX_PACKETS=$(cat /sys/class/net/lan0/statistics/tx_packets)
echo "lan0: TX packets = ${TX_PACKETS}" > /dev/kmsg
if [ "${TX_PACKETS}" = "0" ]; then
echo "lan0: TX broken, reboot to recover" > /dev/kmsg
reboot
fi
}
wait_for_link_up
reboot_if_no_tx