From: Harald Hoyer Date: Thu, 30 Jun 2016 09:10:35 +0000 (+0200) Subject: network: differ between ipv6 local and global tentative X-Git-Tag: 045~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=811a070d6ccc26b43aa93c030d1fc2c39cac559b;p=thirdparty%2Fdracut.git network: differ between ipv6 local and global tentative For dhcpv6, only a non-tentative scope local address is needed. (cherry picked from commit 42dd8928a81ba5ec244a5634813285ab6f342480) --- diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh index 3d9af99f2..68fe0575d 100755 --- a/modules.d/40network/dhclient-script.sh +++ b/modules.d/40network/dhclient-script.sh @@ -158,7 +158,7 @@ case $reason in PREINIT6) echo "dhcp: PREINIT6 $netif up" linkup $netif - wait_for_ipv6_dad $netif + wait_for_ipv6_dad_link $netif ;; BOUND) diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index 129f8b25a..b86721bce 100755 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -646,16 +646,34 @@ wait_for_route_ok() { return 1 } +wait_for_ipv6_dad_link() { + local cnt=0 + local timeout="$(getargs rd.net.timeout.ipv6dad=)" + timeout=${timeout:-50} + timeout=$(($timeout*10)) + + while [ $cnt -lt $timeout ]; do + [ -z "$(ip -6 addr show dev "$1" scope link tentative)" ] \ + && return 0 + [ -n "$(ip -6 addr show dev "$1" scope link dadfailed)" ] \ + && return 1 + sleep 0.1 + cnt=$(($cnt+1)) + done + return 1 +} + wait_for_ipv6_dad() { local cnt=0 - local li local timeout="$(getargs rd.net.timeout.ipv6dad=)" timeout=${timeout:-50} timeout=$(($timeout*10)) while [ $cnt -lt $timeout ]; do - li=$(ip -6 addr show dev $1 scope link) - strstr "$li" "tentative" || return 0 + [ -z "$(ip -6 addr show dev "$1" tentative)" ] \ + && return 0 + [ -n "$(ip -6 addr show dev "$1" dadfailed)" ] \ + && return 1 sleep 0.1 cnt=$(($cnt+1)) done