diff options
author | Philip Prindeville <philipp@redfish-solutions.com> | 2020-08-17 20:07:41 -0600 |
---|---|---|
committer | Philip Prindeville <philipp@redfish-solutions.com> | 2020-08-28 19:30:42 -0600 |
commit | e8fd996c7253b33da5be99e8a05d793b97899fe2 (patch) | |
tree | 41ebfd4e390336c274c163959d8d21b660f56d8b /net/isc-dhcp/files/dhcpd.init | |
parent | 41d9951575fe890fb91f1e3defa1dd0011dc3815 (diff) |
isc-dhcp: add support for RFC-3442 classless IPv4 routes
Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
Diffstat (limited to 'net/isc-dhcp/files/dhcpd.init')
-rwxr-xr-x[-rw-r--r--] | net/isc-dhcp/files/dhcpd.init | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/net/isc-dhcp/files/dhcpd.init b/net/isc-dhcp/files/dhcpd.init index 33e45ad88..2a1111697 100644..100755 --- a/net/isc-dhcp/files/dhcpd.init +++ b/net/isc-dhcp/files/dhcpd.init @@ -131,6 +131,36 @@ typeof() { ' } +explode() { + local arg="$1" + + echo "$arg" | sed -e 's/\./, /g' +} + +append_routes() { + local tuple tuples="$1" + local string= + + local IFS=',' + for tuple in $tuples; do + local network prefix router save octets compacted + + save="${tuple% *}" + router="${tuple#${save} }" + + network="${save%/[0-9]*}" + prefix="${save##${network}}" + prefix="${prefix:1}" + + octets=$((($prefix + 7) / 8)) + compacted="$(echo "$network" | cut -d. -f1-$octets)" + + string="${string:+, }$(explode "$prefix.$compacted.$router")" + done + + echo " option classless-ipv4-route $string;" +} + append_dhcp_options() { local tuple="$1" @@ -178,6 +208,7 @@ gen_dhcp_subnet() { fi echo " option routers $gateway;" echo " option domain-name-servers $DNS;" + config_list_foreach "$cfg" "routes" append_routes config_list_foreach "$cfg" "dhcp_option" append_dhcp_options echo "}" } @@ -264,6 +295,8 @@ general_config() { [ -n "$domain" ] && echo "option domain-name \"$domain\";" + echo -e "\n# additional codes\noption classless-ipv4-route code 121 = array of { unsigned integer 8 };\n" + rm -f /tmp/resolv.conf echo "# This file is generated by the DHCPD service" > /tmp/resolv.conf [ -n "$domain" ] && echo "domain $domain" >> /tmp/resolv.conf |