Skip to contentSkip to conversation

Alternative way to wait interfaces on bootup

PATCH New Jérôme Pouiller 3 participants 6 messages Oct 29, 2015 – Nov 2, 2015

lore
Share & tools
lore
#0 lore raw

v3 cover Alternative way to wait interfaces on bootup

v3:
- '&&' in brackets is not supported by busybox sh

v2:
- Squash patches 2 and 3
- Remove blank lines
- Do not print anything if interface already exist
- Change displayed information

Notice I did not handled case where IFACE=--all. Indeed IF_WAIT_DELAY is not set in this case won't be set (and none of scripts provided by ifupdown/ifupdown-extra packages have special handling for '--all'.)

I don't print any explicit error message in case failure. Indeed, ifupdown/run-parts already print messages and I believe "Waiting for interface dummy0 to appear... timeout!" is explicit enough.

J?r?me Pouiller (2):
Revert "package/initscripts: S40network: wait for network interfaces
to appear"
skeleton: optionally wait for network interfaces to appear

 package/initscripts/init.d/S40network              | 29 ----------------------
 package/skeleton/skeleton.mk                       |  1 +
 system/skeleton/etc/network/if-pre-up.d/wait_iface | 21 ++++++++++++++++
 3 files changed, 22 insertions(+), 29 deletions(-)
 create mode 100755 system/skeleton/etc/network/if-pre-up.d/wait_iface
Signature · 1 line
2.1.4
#1 lore raw

PATCH v3 1/2 Revert "package/initscripts: S40network: wait for network interfaces to appear"

This reverts commit 49964858f45d2243c513e6d362e992ad89ec7a45. It is going to be replaced with an ifup hook in next patch.

---
 package/initscripts/init.d/S40network | 29 -----------------------------
 1 file changed, 29 deletions(-)
package/initscripts/init.d/S40network +0 -29
index a8d7c5d..7b11d8b 100755
@@ -6,37 +6,8 @@
 # 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
 	;;
Signature · 1 line
2.1.4
#2 lore raw

PATCH v3 1/2 Revert "package/initscripts: S40network: wait for network interfaces to appear"

J?r?me, All,

On 2015-10-29 10:00 +0100, J?r?me Pouiller spake thusly:

Quoted 4 lines

This reverts commit 49964858f45d2243c513e6d362e992ad89ec7a45. It is going to be replaced with an ifup hook in next patch.

It's not very often I ACK a patch removing my own code! Hehe! :-)

Regards,
Yann E. MORIN.

Quoted 53 lines
---
 package/initscripts/init.d/S40network | 29 -----------------------------
 1 file changed, 29 deletions(-)
package/initscripts/init.d/S40network +0 -29
index a8d7c5d..7b11d8b 100755
@@ -6,37 +6,8 @@
 # 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
 	;;
Signature · 6 lines
2.1.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

PATCH v3 1/2 Revert "package/initscripts: S40network: wait for network interfaces to appear"

In reply to Jérôme Pouiller

Dear J?r?me Pouiller,

Quoted 7 lines · J?r?me Pouiller

This reverts commit 49964858f45d2243c513e6d362e992ad89ec7a45. It is going to be replaced with an ifup hook in next patch.

---
 package/initscripts/init.d/S40network | 29 -----------------------------
 1 file changed, 29 deletions(-)

Both patches applied, thanks a lot!

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#4 lore raw

PATCH v3 2/2 skeleton: optionally wait for network interfaces to appear

In reply to Jérôme Pouiller

This patch has same purpose than 49964858f45d2243c513e6d362e992ad89ec7a45:

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.

However, wait-delay hook is enabled only if wait-delay property appears in /etc/network/interfaces. This patch enable it automaticaly when interface is configured through DHCP at bootup. But, if user choose to write /etc/network/interface himself, he have to explicitly set wait-delay.

---
 package/skeleton/skeleton.mk                       |  1 +
 system/skeleton/etc/network/if-pre-up.d/wait_iface | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)
 create mode 100755 system/skeleton/etc/network/if-pre-up.d/wait_iface
package/skeleton/skeleton.mk +1 -0
index 920d3b4..d1b797d 100644
@@ -89,6 +89,7 @@ define SET_NETWORK_DHCP
 		echo ;                                               \
 		echo "auto $(NETWORK_DHCP_IFACE)";                   \
 		echo "iface $(NETWORK_DHCP_IFACE) inet dhcp";        \
+		echo "	wait-delay 15";                              \
 	) >> $(TARGET_DIR)/etc/network/interfaces
 endef
 endif
system/skeleton/etc/network/if-pre-up.d/wait_iface new file +21 -0
new file mode 100755
index 0000000..ebccff2
@@ -0,0 +1,21 @@
+#!/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. IF_WAIT_DELAY is in seconds.
+
+if [ "${IF_WAIT_DELAY}" -a ! -e "/sys/class/net/${IFACE}" ]; then
+    printf "Waiting for interface %s to appear" "${IFACE}"
+    while [ ${IF_WAIT_DELAY} -gt 0 ]; do
+        if [ -e "/sys/class/net/${IFACE}" ]; then
+            printf "\n"
+            exit 0
+        fi
+        sleep 1
+        printf "."
+        : $((IF_WAIT_DELAY -= 1))
+    done
+    printf " timeout!\n"
+    exit 1
+fi
+
Signature · 1 line
2.1.4
#5 lore raw

PATCH 1/1 fs/ext2: add options for extra space and extra inodes

J?r?me, All,

On 2015-10-29 10:00 +0100, J?r?me Pouiller spake thusly:

Quoted 10 lines

This patch has same purpose than 49964858f45d2243c513e6d362e992ad89ec7a45:

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.

Quoted 7 lines

However, wait-delay hook is enabled only if wait-delay property appears in /etc/network/interfaces. This patch enable it automaticaly when interface is configured through DHCP at bootup. But, if user choose to write /etc/network/interface himself, he have to explicitly set wait-delay.

I hope I'll have time to do a run test later tonight... However, I am far from my RPis tonight (the whole week, in fact) but I'll try to sneak downstairs to grab one... :-]

Regards,
Yann E. MORIN.

Quoted 48 lines
---
 package/skeleton/skeleton.mk                       |  1 +
 system/skeleton/etc/network/if-pre-up.d/wait_iface | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)
 create mode 100755 system/skeleton/etc/network/if-pre-up.d/wait_iface
package/skeleton/skeleton.mk +1 -0
index 920d3b4..d1b797d 100644
@@ -89,6 +89,7 @@ define SET_NETWORK_DHCP
 		echo ;                                               \
 		echo "auto $(NETWORK_DHCP_IFACE)";                   \
 		echo "iface $(NETWORK_DHCP_IFACE) inet dhcp";        \
+		echo "	wait-delay 15";                              \
 	) >> $(TARGET_DIR)/etc/network/interfaces
 endef
 endif
system/skeleton/etc/network/if-pre-up.d/wait_iface new file +21 -0
new file mode 100755
index 0000000..ebccff2
@@ -0,0 +1,21 @@
+#!/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. IF_WAIT_DELAY is in seconds.
+
+if [ "${IF_WAIT_DELAY}" -a ! -e "/sys/class/net/${IFACE}" ]; then
+    printf "Waiting for interface %s to appear" "${IFACE}"
+    while [ ${IF_WAIT_DELAY} -gt 0 ]; do
+        if [ -e "/sys/class/net/${IFACE}" ]; then
+            printf "\n"
+            exit 0
+        fi
+        sleep 1
+        printf "."
+        : $((IF_WAIT_DELAY -= 1))
+    done
+    printf " timeout!\n"
+    exit 1
+fi
+
Signature · 1 line
2.1.4
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'