summaryrefslogtreecommitdiffstats
path: root/src.etc/network/if-up.d/dhcpd
diff options
context:
space:
mode:
Diffstat (limited to 'src.etc/network/if-up.d/dhcpd')
-rw-r--r--src.etc/network/if-up.d/dhcpd56
1 files changed, 56 insertions, 0 deletions
diff --git a/src.etc/network/if-up.d/dhcpd b/src.etc/network/if-up.d/dhcpd
new file mode 100644
index 0000000..5fcc18e
--- /dev/null
+++ b/src.etc/network/if-up.d/dhcpd
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+. /etc/network/functions
+
+set -eu
+
+address=
+subnet=
+gateway=
+
+dhcpd_opts_start_cb()
+{
+ exec 3>"/var/run/udhcpd.${IFACE}.conf"
+ printf 'interface %s\n' "${IFACE}" >&3
+ printf 'pidfile /var/run/udhcpd.%s.pid\n' "${IFACE}" >&3
+ printf 'lease_file /var/lib/misc/udhcpd.%s.leases\n' "${IFACE}" >&3
+}
+
+dhcpd_opt_cb()
+{
+ local key="${1}"
+ shift 1
+ local val="${*}"
+
+ case "${key}" in
+ dhcpd-*)
+ key="$(printf '%s\n' "${key#dhcpd-}" | tr '-' '_')"
+ printf '%s %s\n' "${key}" "${val}" >&3
+ ;;
+ address)
+ address="${val}"
+ ;;
+ subnet)
+ subnet="${val}"
+ ;;
+ gateway)
+ gateway="${val}"
+ ;;
+ esac
+}
+
+dhcpd_opts_end_cb()
+{
+ printf 'option subnet %s\n' "${subnet}" >&3
+ if [ "x${gateway}" != 'x' ]; then
+ printf 'option router %s\n' "${gateway}" >&3
+ else
+ printf 'option router %s\n' "${address}" >&3
+ fi
+ sed 's/nameserver/option dns/' /etc/resolv.conf >&3
+ exec &3>-
+
+ udhcpd -S "/var/run/udhcpd.${IFACE}.conf"
+}
+
+get_iface_opts dhcpd_opts_start_cb dhcpd_opt_cb dhcpd_opts_end_cb