From 49964858f45d2243c513e6d362e992ad89ec7a45 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sat, 3 Oct 2015 14:31:45 +0100 Subject: [PATCH] package/initscripts: S40network: wait for network interfaces to appear On some machines, the network interface is slow to appear. For example, on the Raspberry Pi, the network interface eth0 is an ethernet-over-USB, and our standard boot process is too fast, so our network startup script is called before the USB bus is compeltely enumerated, thus it can't configure eth0. Closes #8116. [Peter: move to S40network, handle multiple interfaces] Signed-off-by: "Yann E. MORIN" Signed-off-by: Peter Korsgaard --- package/initscripts/init.d/S40network | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/package/initscripts/init.d/S40network b/package/initscripts/init.d/S40network index 7b11d8b902..a8d7c5df78 100755 --- a/package/initscripts/init.d/S40network +++ b/package/initscripts/init.d/S40network @@ -6,8 +6,37 @@ # Debian ifupdown needs the /run/network lock directory mkdir -p /run/network +# In case we have a slow-to-appear interface (e.g. eth-over-USB), +# and we need to configure it, wait until it appears, but not too +# long either. WAIT_DELAY is in seconds. +WAIT_DELAY=15 + +wait_for_interfaces() { + IFACES=$(awk '/^auto/ { print $2 }' /etc/network/interfaces) + [ -n "$IFACES" ] || return + + printf "Waiting for network interfaces to appear" + + for i in $(seq $WAIT_DELAY); do + for IFACE in $IFACES; do + if [ ! -e "/sys/class/net/$IFACE" ]; then + printf "." + sleep 1 + continue 2 + fi + done + + printf " ok\n"; return + done + + printf " timeout\n" + exit 1 +} + case "$1" in start) + wait_for_interfaces + echo "Starting network..." /sbin/ifup -a ;;