isc-dhcp: support generic DHCP options
Allow specifying NTP servers, search domains, etc. by the administrator directly specifying DHCP options (per interface, i.e. per pool). Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
This commit is contained in:
parent
05ca13e17c
commit
a0cd1691c3
1 changed files with 39 additions and 1 deletions
|
@ -120,7 +120,44 @@ static_hosts() {
|
||||||
config_foreach static_host_add host "$@"
|
config_foreach static_host_add host "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typeof() {
|
||||||
|
echo "$1" | awk '
|
||||||
|
/^\d+\.\d+\.\d+\.d+$/ { print "ip\n"; next; }
|
||||||
|
/^(true|false)$/ { print "bool\n"; next; }
|
||||||
|
/^\d+$/ { print "integer\n"; next; }
|
||||||
|
/^"[^"]*"$/ { print "string\n"; next; }
|
||||||
|
{ print "other\n"; next; }
|
||||||
|
'
|
||||||
|
}
|
||||||
|
|
||||||
|
append_dhcp_options() {
|
||||||
|
local tuple="$1"
|
||||||
|
|
||||||
|
# strip redundant "option:" prefix
|
||||||
|
tuple="${tuple#option:}"
|
||||||
|
|
||||||
|
local tag="${tuple%%,*}"
|
||||||
|
local values="${tuple#$tag,}"
|
||||||
|
|
||||||
|
local formatted value
|
||||||
|
local IFS=$', \n'
|
||||||
|
for value in $values; do
|
||||||
|
# detect type of $value and quote if necessary
|
||||||
|
case $(typeof "$value") in
|
||||||
|
ip|bool|integer|string)
|
||||||
|
;;
|
||||||
|
other)
|
||||||
|
value="\"$value\""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
formatted="$formatted${formatted:+, }$value"
|
||||||
|
done
|
||||||
|
echo " option $tag $formatted;"
|
||||||
|
}
|
||||||
|
|
||||||
gen_dhcp_subnet() {
|
gen_dhcp_subnet() {
|
||||||
|
local cfg="$1"
|
||||||
|
|
||||||
echo "subnet $NETWORK netmask $NETMASK {"
|
echo "subnet $NETWORK netmask $NETMASK {"
|
||||||
echo " range $START $END;"
|
echo " range $START $END;"
|
||||||
echo " option subnet-mask $netmask;"
|
echo " option subnet-mask $netmask;"
|
||||||
|
@ -140,6 +177,7 @@ gen_dhcp_subnet() {
|
||||||
fi
|
fi
|
||||||
echo " option routers $gateway;"
|
echo " option routers $gateway;"
|
||||||
echo " option domain-name-servers $DNS;"
|
echo " option domain-name-servers $DNS;"
|
||||||
|
config_list_foreach "$cfg" "dhcp_option" append_dhcp_options
|
||||||
echo "}"
|
echo "}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +231,7 @@ dhcpd_add() {
|
||||||
gateway="$IP"
|
gateway="$IP"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gen_dhcp_subnet >> $config_file
|
gen_dhcp_subnet "$cfg" >> $config_file
|
||||||
}
|
}
|
||||||
|
|
||||||
general_config() {
|
general_config() {
|
||||||
|
|
Loading…
Reference in a new issue