Alternative way to wait interfaces on bootup
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
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
@@ -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
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.Signed-off-by J?r?me Pouiller <[email protected]>
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@@ -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. | '------------------------------^-------^------------------^--------------------'
PATCH v3 1/2 Revert "package/initscripts: S40network: wait for network interfaces to appear"
In reply to Jérôme PouillerDear 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.Signed-off-by J?r?me Pouiller <[email protected]>--- 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
PATCH v3 2/2 skeleton: optionally wait for network interfaces to appear
In reply to Jérôme PouillerThis 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
@@ -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
@@ -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
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/interfacehimself, he have to explicitly set wait-delay.Signed-off-by J?r?me Pouiller <[email protected]>
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_ifacepackage/skeleton/skeleton.mk +1
-0@@ -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 endifsystem/skeleton/etc/network/if-pre-up.d/wait_iface new file +21
-0@@ -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. | '------------------------------^-------^------------------^--------------------'