diff options
author | P. J. McDermott <pj@pehjota.net> | 2014-08-06 10:42:01 (EDT) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2014-08-06 10:42:01 (EDT) |
commit | 96a68750a1ba9791291a94db2f73d1c3b3ffdf20 (patch) | |
tree | d65925bb2b17ee2764ff2736ac2930a1c4d764a3 /src.etc/network/if-up.d/dhcpd | |
parent | 565110e81cafa811f2e354360ace081d7784c5f8 (diff) |
Add networking hooks for udhcpd
Diffstat (limited to 'src.etc/network/if-up.d/dhcpd')
-rw-r--r-- | src.etc/network/if-up.d/dhcpd | 56 |
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 |