From 90781679276669b7b29aed4806098528b84808e3 Mon Sep 17 00:00:00 2001 From: "dyoung@redhat.com" Date: Wed, 12 Dec 2012 12:23:24 +0800 Subject: [PATCH] Wait for link ready before use the interface Some network driver will take long time to initialize. We have an example in a HP machine which take about one minute for this. The callback such as "ip link set up" will fail, afterwards setup for network will also fail. Fix this by add a new function wait_for_if_link, wait the link ready before use it. Signed-off-by: Dave Young --- modules.d/40network/net-lib.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index 142aa687b..d9a241b48 100644 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -323,6 +323,19 @@ parse_ifname_opts() { } +# some network driver need long time to initialize, wait before it's ready. +wait_for_if_link() { + local cnt=0 + local li + while [ $cnt -lt 600 ]; do + li=$(ip -o link show dev $1 2>/dev/null) + [ -n "$li" ] && return 0 + sleep 0.1 + cnt=$(($cnt+1)) + done + return 1 +} + wait_for_if_up() { local cnt=0 local li @@ -347,6 +360,8 @@ wait_for_route_ok() { } linkup() { - ip link set $1 up 2>/dev/null && wait_for_if_up $1 2>/dev/null + wait_for_if_link $1 2>/dev/null\ + && ip link set $1 up 2>/dev/null\ + && wait_for_if_up $1 2>/dev/null } -- 2.47.3