From e8fd996c7253b33da5be99e8a05d793b97899fe2 Mon Sep 17 00:00:00 2001 From: Philip Prindeville Date: Mon, 17 Aug 2020 20:07:41 -0600 Subject: [PATCH] isc-dhcp: add support for RFC-3442 classless IPv4 routes Signed-off-by: Philip Prindeville --- net/isc-dhcp/Makefile | 2 +- net/isc-dhcp/files/dhcpd.init | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) mode change 100644 => 100755 net/isc-dhcp/files/dhcpd.init diff --git a/net/isc-dhcp/Makefile b/net/isc-dhcp/Makefile index abed03e2d..5f0f75652 100644 --- a/net/isc-dhcp/Makefile +++ b/net/isc-dhcp/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=isc-dhcp UPSTREAM_NAME:=dhcp PKG_VERSION:=4.4.1 -PKG_RELEASE:=7 +PKG_RELEASE:=8 PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE diff --git a/net/isc-dhcp/files/dhcpd.init b/net/isc-dhcp/files/dhcpd.init old mode 100644 new mode 100755 index 33e45ad88..2a1111697 --- 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