Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] package/skeleton: add a startup script to wait for slow network interfaces
@ 2015-10-03 13:31 Yann E. MORIN
  2015-10-03 13:51 ` Arnout Vandecappelle
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Yann E. MORIN @ 2015-10-03 13:31 UTC (permalink / raw)
  To: buildroot

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.

If Buildroot is configured to do a DHCP on an interface, install a
startup script, just before S40network, that waits for that interface.

Since Buildroot can only be configured to run DHCP on a single interface,
we do not need a script that waits for more than one interface.

Closes #8116.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/skeleton/S39wait-for-network-if | 43 +++++++++++++++++++++++++++++++++
 package/skeleton/skeleton.mk            |  2 ++
 2 files changed, 45 insertions(+)
 create mode 100644 package/skeleton/S39wait-for-network-if

diff --git a/package/skeleton/S39wait-for-network-if b/package/skeleton/S39wait-for-network-if
new file mode 100644
index 0000000..010026e
--- /dev/null
+++ b/package/skeleton/S39wait-for-network-if
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# 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_IF() {
+    IF="$(sed -r -e '/^auto lo/d;' \
+                 -e '/^auto (.+)$/!d;' \
+                 -e 's//\1/;' \
+                 /etc/network/interfaces
+         )"
+    if [ -z "${IF}" -o -e "/sys/class/net/${IF}" ]; then
+        return 0
+    fi
+    printf "Waiting for interface %s to appear" "${IF}"
+    wait=${WAIT_DELAY}
+    while [ ${wait} -gt 0 ]; do
+        if [ -e "/sys/class/net/${IF}" ]; then
+            printf " yes\n"
+            return 0
+        fi
+        sleep 1
+        printf "."
+        : $((wait--))
+    done
+    printf " no.\n"
+    return 1
+}
+
+case "$1" in
+  start)
+	wait_for_IF
+	;;
+  stop)
+	;;
+  restart)
+	"$0" start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+esac
diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mk
index 48e7085..733b86f 100644
--- a/package/skeleton/skeleton.mk
+++ b/package/skeleton/skeleton.mk
@@ -76,6 +76,8 @@ define SET_NETWORK_DHCP
 		echo "auto $(NETWORK_DHCP_IFACE)";                   \
 		echo "iface $(NETWORK_DHCP_IFACE) inet dhcp";        \
 	) >> $(TARGET_DIR)/etc/network/interfaces
+	$(INSTALL) -D -m 0755 package/skeleton/S39wait-for-network-if \
+		$(TARGET_DIR)/etc/init.d/S39wait-for-network-if
 endef
 endif
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2015-10-19 10:22 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-03 13:31 [Buildroot] [PATCH] package/skeleton: add a startup script to wait for slow network interfaces Yann E. MORIN
2015-10-03 13:51 ` Arnout Vandecappelle
2015-10-03 13:59 ` Peter Korsgaard
2015-10-03 14:01   ` Peter Korsgaard
2015-10-16  9:42   ` Peter Korsgaard
2015-10-03 15:47 ` Thomas Petazzoni
2015-10-03 18:29   ` Maxime Hadjinlian
2015-10-03 18:43     ` Arnout Vandecappelle
2015-10-03 18:46       ` Maxime Hadjinlian
2015-10-04  8:23   ` Peter Korsgaard
2015-10-19  8:47 ` Jérôme Pouiller
2015-10-19 10:15   ` Peter Korsgaard
2015-10-19 10:22     ` Jérôme Pouiller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox