From 4892bac89bd22f065d8d91beb7e0b4b2002b7b5b Mon Sep 17 00:00:00 2001 From: Jouke Witteveen Date: Tue, 6 Jan 2015 18:53:54 +0100 Subject: Start DHCPv6 after DAD (FS#43183) We need our link-local address to not be tentative. After DHCPv6 we do not need to do DAD again, as it is part of DHCPv6 per RFT 3315, section 18.1.8. --- src/lib/ip | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/ip b/src/lib/ip index b7847a2..f0dec69 100644 --- a/src/lib/ip +++ b/src/lib/ip @@ -45,7 +45,7 @@ ip_set() { # Load ipv6 module if necessary case "$IP6" in - dhcp*|stateless|static) + dhcp|dhcp-noaddr|stateless|static) [[ -d "/proc/sys/net/ipv6" ]] || modprobe ipv6 sysctl -q -w "net.ipv6.conf.$interface_sysctl.disable_ipv6=0" [[ $IP6 == "static" ]] @@ -100,20 +100,15 @@ ip_set() { fi fi - case "$IP6" in - dhcp|dhcp-noaddr) - dhcp_call "${DHCP6Client:-dhclient}" start 6 ${IP6:5} || return - ;; - stateless|static) - for addr in "${Address6[@]}"; do - if ! do_debug ip -6 addr add $addr $(is_yes "${SkipDAD:-no}" && printf nodad) dev "$Interface"; then - report_error "Could not add address '$addr' to interface '$Interface'" - fi - done - ;; - esac - if [[ $IP6 ]]; then + if [[ $IP6 == @(stateless|static) ]]; then + for addr in "${Address6[@]}"; do + if ! do_debug ip -6 addr add $addr $(is_yes "${SkipDAD:-no}" && printf nodad) dev "$Interface"; then + report_error "Could not add address '$addr' to interface '$Interface'" + fi + done + fi + if ! is_yes "${SkipDAD:-no}"; then # Wait for Duplicate Address Detection to finish if ! timeout_wait "${TimeoutDAD:-3}" '[[ -z "$(ip -6 addr show dev "$Interface" tentative)" ]]'; then @@ -122,6 +117,11 @@ ip_set() { fi fi + # Start a DHCPv6 client after DAD has finished for the link-local address + if [[ $IP6 == @(dhcp|dhcp-noaddr) ]]; then + dhcp_call "${DHCP6Client:-dhclient}" start 6 ${IP6:5} || return + fi + # Add static IPv6 routes after DAD has finished for route in "${Routes6[@]}"; do if ! do_debug ip -6 route add $route dev "$Interface"; then -- cgit v1.2.3-24-g4f1b