]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
network: IPv6 status, wait for tentative flag to be cleared
authorHarald Hoyer <harald@redhat.com>
Thu, 27 Feb 2014 11:11:20 +0000 (12:11 +0100)
committerHarald Hoyer <harald@redhat.com>
Thu, 27 Feb 2014 11:13:18 +0000 (12:13 +0100)
also do not arping the IPv6 address.

modules.d/40network/ifup.sh
modules.d/40network/net-lib.sh

index 33ec81d1e4ba28811e7f8b4f53505ec98221b402..e439106890a821d71178be2b83167f3bf3cc24c5 100755 (executable)
@@ -136,6 +136,7 @@ do_static() {
     if strstr $ip '*:*:*'; then
         # note no ip addr flush for ipv6
         ip addr add $ip/$mask ${srv:+peer $srv} dev $netif
+        wait_for_ipv6_dad $netif
     else
         ip addr flush dev $netif
         ip addr add $ip/$mask ${srv:+peer $srv} brd + dev $netif
index 4e1b0192f7874ef93952aab92e7209a1600afc89..a5867118ccd3dc4e7b96ac5e31a0eb9a6faa4b47 100755 (executable)
@@ -123,8 +123,8 @@ setup_net() {
         read layer2 < /sys/class/net/$netif/device/layer2
     fi
 
-    if [ "$layer2" != "0" ] && [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then
-        info "Resolving $dest via ARP on $netif failed"
+    if [ "$layer2" != "0" ] && [ -n "$dest" ] && ! strstr "$dest" ":"; then
+        arping -q -f -w 60 -I $netif $dest || info "Resolving $dest via ARP on $netif failed"
     fi
     unset layer2
 
@@ -451,6 +451,18 @@ wait_for_route_ok() {
     return 1
 }
 
+wait_for_ipv6_dad() {
+    local cnt=0
+    local li
+    while [ $cnt -lt 500 ]; do
+        li=$(ip -6 addr show dev $1)
+        strstr "$li" "tentative" || return 0
+        sleep 0.1
+        cnt=$(($cnt+1))
+    done
+    return 1
+}
+
 wait_for_ipv6_auto() {
     local cnt=0
     local li