diff options
author | Jouke Witteveen <j.witteveen@gmail.com> | 2014-02-27 12:48:12 +0100 |
---|---|---|
committer | Jouke Witteveen <j.witteveen@gmail.com> | 2014-02-27 13:48:48 +0100 |
commit | bcca0a027786c0d23f3f70c9f21b3332f41786e1 (patch) | |
tree | 5fbd7b516753e23e2a8785d9730c2a86f692ca38 | |
parent | 05959bbbae46724d9abe1c32ca69eaaf2ca20722 (diff) | |
download | netctl-bcca0a027786c0d23f3f70c9f21b3332f41786e1.tar.gz netctl-bcca0a027786c0d23f3f70c9f21b3332f41786e1.tar.xz |
Add option to bypass Duplicate Address Detection
After several requests, here is SkipDAD to bypass Duplicate Address
Detection.
-rw-r--r-- | docs/netctl.profile.5.txt | 12 | ||||
-rw-r--r-- | src/lib/connections/ethernet | 4 | ||||
-rw-r--r-- | src/lib/ip | 12 |
3 files changed, 18 insertions, 10 deletions
diff --git a/docs/netctl.profile.5.txt b/docs/netctl.profile.5.txt index 74bbc6d..dfc13bb 100644 --- a/docs/netctl.profile.5.txt +++ b/docs/netctl.profile.5.txt @@ -180,16 +180,16 @@ network. In particular, these connection types are +ethernet+, Maximum time, in seconds, to wait for IPv6's Duplicate Address Detection to succeed. Defaults to `++3++'. +'SkipDAD=':: + Whether or not to bypass Duplicate Address Detection altogether. + Defaults to `++no++'. + OPTIONS FOR `ethernet' CONNECTIONS ---------------------------------- Next to the *ip options*, the following are understood for connections of the `ethernet' type: -'SkipNoCarrier=':: - Whether or not the absence of a carrier (plugged-in cable) is - acceptable. Defaults to `++no++'. - 'Auth8021X=':: Set to `++yes++' to use 802.1x authentication. @@ -209,6 +209,10 @@ of the `ethernet' type: Maximum time, in seconds, to wait for 802.1x authentication to succeed. Defaults to `++15++'. +'SkipNoCarrier=':: + Whether or not the absence of a carrier (plugged-in cable) is + acceptable. Defaults to `++no++'. + OPTIONS FOR `wireless' CONNECTIONS ---------------------------------- diff --git a/src/lib/connections/ethernet b/src/lib/connections/ethernet index 3db69a0..ce00dc3 100644 --- a/src/lib/connections/ethernet +++ b/src/lib/connections/ethernet @@ -19,7 +19,9 @@ ethernet_up() { return 1 fi - if ! is_yes "${SkipNoCarrier:-no}"; then + if is_yes "${SkipNoCarrier:-no}"; then + SkipDAD=yes + else # Some cards are plain slow to come up. Don't fail immediately. if ! timeout_wait "${TimeoutCarrier:-5}" '(( $(< "/sys/class/net/$Interface/carrier") ))'; then report_error "No connection found on interface '$Interface' (timeout)" @@ -117,7 +117,7 @@ ip_set() { ;; stateless|static) for addr in "${Address6[@]}"; do - if ! do_debug ip -6 addr add $addr dev "$Interface"; then + 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 @@ -125,10 +125,12 @@ ip_set() { esac if [[ $IP6 ]]; then - # Wait for Duplicate Address Detection to finish - if ! timeout_wait "${TimeoutDAD:-3}" '[[ -z "$(ip -6 addr show dev "$Interface" tentative)" ]]'; then - report_error "Duplicate Address Detection is taking too long on interface '$Interface'" - return 1 + 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 + report_error "Duplicate Address Detection is taking too long on interface '$Interface'" + return 1 + fi fi # Add static IPv6 routes after DAD has finished |