summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcp/dhcpcd
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dhcp/dhcpcd')
-rw-r--r--src/lib/dhcp/dhcpcd20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/lib/dhcp/dhcpcd b/src/lib/dhcp/dhcpcd
index b85b668..5dba10a 100644
--- a/src/lib/dhcp/dhcpcd
+++ b/src/lib/dhcp/dhcpcd
@@ -1,25 +1,31 @@
type dhcpcd &> /dev/null || return
dhcpcd_start() {
- if [[ $1 != "4" ]]; then
- report_error "Using 'dhcpcd' for IPv6 is currently not possible in netctl"
+ local options
+ case $1 in
+ 4) options="$DhcpcdOptions -L";;
+ 6) options=$DhcpcdOptions6;;
+ *) return 1;;
+ esac
+ if [[ $2 == "noaddr" ]]; then
+ report_error "Using 'dhcpcd' for configuration without address assignment is unsupported"
return 1
fi
# If using own dns, tell dhcpcd to NOT replace resolv.conf
- [[ $DNS ]] && DhcpcdOptions+=" -C resolv.conf"
- do_debug do_readable dhcpcd -4qL -t "${TimeoutDHCP:-30}" $DhcpcdOptions "$Interface"
+ [[ $DNS ]] && options+=" -C resolv.conf"
+ do_debug do_readable dhcpcd -$1 -q -t "${TimeoutDHCP:-30}" $options "$Interface"
# The first array value of PIPESTATUS is the exit status of dhcpcd
if (( PIPESTATUS != 0 )); then
- report_error "DHCP IP lease attempt failed on interface '$Interface'"
+ report_error "DHCP IPv$1 lease attempt failed on interface '$Interface'"
return 1
fi
}
dhcpcd_stop() {
local stop="-x"
- if [[ -f "/run/dhcpcd-$Interface.pid" ]]; then
+ if [[ -f "/run/dhcpcd-$Interface-$1.pid" ]]; then
is_yes "${DHCPReleaseOnStop:-no}" && stop="-k"
- do_debug dhcpcd -q $stop "$Interface" > /dev/null
+ do_debug dhcpcd -$1 -q $stop "$Interface" > /dev/null
fi
}