aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net/dhclientv6.sh')
-rw-r--r--net/dhclientv6.sh82
1 files changed, 82 insertions, 0 deletions
diff --git a/net/dhclientv6.sh b/net/dhclientv6.sh
new file mode 100644
index 0000000..f87ed4d
--- /dev/null
+++ b/net/dhclientv6.sh
@@ -0,0 +1,82 @@
+# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
+# Released under the 2-clause BSD license.
+
+dhclientv6_depend()
+{
+ after interface
+ program start /sbin/dhclient
+ provide dhcpv6
+}
+
+_config_vars="$_config_vars dhcp dhclient dhcpv6 dhclientv6"
+
+dhclientv6_start()
+{
+ local args= opt= opts= pidfile="/var/run/dhclientv6-${IFACE}.pid"
+ local sendhost=true dconf=
+
+ # Get our options
+ # These options only work in Gentoo, and maybe RedHat
+ eval args=\$dhclientv6_${IFVAR}
+ [ -z "${args}" ] && eval args=\$dhclient_${IFVAR}
+ eval opts=\$dhcpv6_${IFVAR}
+ [ -z "${opts}" ] && opts=${dhcpv6}
+ [ -z "${opts}" ] && eval opts=\$dhcp_${IFVAR}
+ [ -z "${opts}" ] && opts=${dhcp}
+
+ for opt in ${opts}; do
+ case "${opt}" in
+ nodns) args="${args} -e PEER_DNS=no";;
+ nontp) args="${args} -e PEER_NTP=no";;
+ nogateway) args="${args} -e PEER_ROUTERS=no";;
+ nosendhost) sendhost=false;;
+ esac
+ done
+
+ # Add our route metric
+ [ "${metric:-0}" != "0" ] && args="${args} -e IF_METRIC=${metric}"
+
+ if ${sendhost}; then
+ local hname="$(hostname)"
+ if [ "${hname}" != "(none)" -a "${hname}" != "localhost" ]; then
+ dhconf="${dhconf} interface \"${IFACE}\" {"
+ dhconf="${dhconf} send fqdn.fqdn \"${hname}\";"
+ dhconf="${dhconf} send fqdn.encoded on;"
+ dhconf="${dhconf} send fqdn.server-update on;"
+ dhconf="${dhconf} send fqdn.no-client-update on;"
+ dhconf="${dhconf}}"
+ fi
+ fi
+
+ # Bring up DHCP for this interface
+ ebegin "Running dhclient -6"
+ echo "${dhconf}" | start-stop-daemon --start --exec /sbin/dhclient \
+ --pidfile "${pidfile}" \
+ -- -6 ${args} -q -1 -pf "${pidfile}" "${IFACE}"
+ eend $? || return 1
+
+ _show_address6
+ return 0
+}
+
+dhclientv6_stop()
+{
+ local pidfile="/var/run/dhclientv6-${IFACE}.pid" opts=
+ [ ! -f "${pidfile}" ] && return 0
+
+ # Get our options
+ if [ -x /sbin/dhclient ]; then
+ eval opts=\$dhcp_${IFVAR}
+ [ -z "${opts}" ] && opts=${dhcp}
+ fi
+
+ ebegin "Stopping dhclient -6 on ${IFACE}"
+ case " ${opts} " in
+ *" release "*) dhclient -6 -q -r -pf "${pidfile}" "${IFACE}";;
+ *)
+ start-stop-daemon --stop --quiet \
+ --exec /sbin/dhclient --pidfile "${pidfile}"
+ ;;
+ esac
+ eend $?
+}