tag 630519 patch
thanks

Hi Andrew,

I'd like to see it too that Linux could get rid of net-tools completely.

The attached patch splits the script for the classless-routes into two:
* one for linux that uses iproute's ip command
* one for freebsd that continues to use /sbin/route
and only includes the one matching the OS into the package.

Please consider including it into the next release of isc-dhcp in Debian.

Thanks in advance
PEter

-- 
Peter Marschall
pe...@adpm.de
From 90b8c6fee9f7727e93a5ebe84e11abec92f42bad Mon Sep 17 00:00:00 2001
From: Peter Marschall <pe...@adpm.de>
Date: Sat, 8 Jan 2011 22:45:12 +0100
Subject: [PATCH] rfc3442-classless-routes: split by OS and convert to iproute2

* split rfc3442-classless-routes into a variant for kfreebsd & linux
* convert the linux variant to iproute2
* update rules to install the correct variant per OS

Signed-off-by: Peter Marschall <pe...@adpm.de>
---
 debian/rfc3442-classless-routes          |   59 ------------------------------
 debian/rfc3442-classless-routes.kfreebsd |   59 ++++++++++++++++++++++++++++++
 debian/rfc3442-classless-routes.linux    |   57 +++++++++++++++++++++++++++++
 debian/rules                             |    3 +-
 4 files changed, 118 insertions(+), 60 deletions(-)
 delete mode 100644 debian/rfc3442-classless-routes
 create mode 100644 debian/rfc3442-classless-routes.kfreebsd
 create mode 100644 debian/rfc3442-classless-routes.linux

diff --git a/debian/rfc3442-classless-routes b/debian/rfc3442-classless-routes
deleted file mode 100644
index 6e14946..0000000
--- a/debian/rfc3442-classless-routes
+++ /dev/null
@@ -1,59 +0,0 @@
-# set classless routes based on the format specified in RFC3442
-# e.g.:
-#   new_rfc3442_classless_static_routes='24 192 168 10 192 168 1 1 8 10 10 17 66 41'
-# specifies the routes:
-#   192.168.10.0/24 via 192.168.1.1
-#   10.0.0.0/8 via 10.10.17.66.41
-
-RUN="yes"
-
-
-if [ "$RUN" = "yes" ]; then
-	if [ -n "$new_rfc3442_classless_static_routes" ]; then
-		if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then
-
-			set -- $new_rfc3442_classless_static_routes
-
-			while [ $# -gt 0 ]; do
-				net_length=$1
-
-				case $net_length in
-					32|31|30|29|28|27|26|25)
-						net_address="${2}.${3}.${4}.${5}"
-						gateway="${6}.${7}.${8}.${9}"
-						shift 9
-						;;
-					24|23|22|21|20|19|18|17)
-						net_address="${2}.${3}.${4}.0"
-						gateway="${5}.${6}.${7}.${8}"
-						shift 8
-						;;
-					16|15|14|13|12|11|10|9)
-						net_address="${2}.${3}.0.0"
-						gateway="${4}.${5}.${6}.${7}"
-						shift 7
-						;;
-					8|7|6|5|4|3|2|1)
-						net_address="${2}.0.0.0"
-						gateway="${3}.${4}.${5}.${6}"
-						shift 6
-						;;
-					0)	# default route
-						net_address="0.0.0.0"
-						gateway="${2}.${3}.${4}.${5}"
-						shift 5
-						;;
-					*)	# error
-						return 1
-						;;
-				esac
-
-				if [ "$net_length" -eq 32 ]; then
-					/sbin/route add -host "${net_address}" gw "${gateway}"
-				else
-					/sbin/route add -net "${net_address}/${net_length}" gw "${gateway}"
-				fi
-			done
-		fi
-	fi
-fi
diff --git a/debian/rfc3442-classless-routes.kfreebsd b/debian/rfc3442-classless-routes.kfreebsd
new file mode 100644
index 0000000..6e14946
--- /dev/null
+++ b/debian/rfc3442-classless-routes.kfreebsd
@@ -0,0 +1,59 @@
+# set classless routes based on the format specified in RFC3442
+# e.g.:
+#   new_rfc3442_classless_static_routes='24 192 168 10 192 168 1 1 8 10 10 17 66 41'
+# specifies the routes:
+#   192.168.10.0/24 via 192.168.1.1
+#   10.0.0.0/8 via 10.10.17.66.41
+
+RUN="yes"
+
+
+if [ "$RUN" = "yes" ]; then
+	if [ -n "$new_rfc3442_classless_static_routes" ]; then
+		if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then
+
+			set -- $new_rfc3442_classless_static_routes
+
+			while [ $# -gt 0 ]; do
+				net_length=$1
+
+				case $net_length in
+					32|31|30|29|28|27|26|25)
+						net_address="${2}.${3}.${4}.${5}"
+						gateway="${6}.${7}.${8}.${9}"
+						shift 9
+						;;
+					24|23|22|21|20|19|18|17)
+						net_address="${2}.${3}.${4}.0"
+						gateway="${5}.${6}.${7}.${8}"
+						shift 8
+						;;
+					16|15|14|13|12|11|10|9)
+						net_address="${2}.${3}.0.0"
+						gateway="${4}.${5}.${6}.${7}"
+						shift 7
+						;;
+					8|7|6|5|4|3|2|1)
+						net_address="${2}.0.0.0"
+						gateway="${3}.${4}.${5}.${6}"
+						shift 6
+						;;
+					0)	# default route
+						net_address="0.0.0.0"
+						gateway="${2}.${3}.${4}.${5}"
+						shift 5
+						;;
+					*)	# error
+						return 1
+						;;
+				esac
+
+				if [ "$net_length" -eq 32 ]; then
+					/sbin/route add -host "${net_address}" gw "${gateway}"
+				else
+					/sbin/route add -net "${net_address}/${net_length}" gw "${gateway}"
+				fi
+			done
+		fi
+	fi
+fi
diff --git a/debian/rfc3442-classless-routes.linux b/debian/rfc3442-classless-routes.linux
new file mode 100644
index 0000000..18ce0c3
--- /dev/null
+++ b/debian/rfc3442-classless-routes.linux
@@ -0,0 +1,57 @@
+# set classless routes based on the format specified in RFC3442
+# e.g.:
+#   new_rfc3442_classless_static_routes='24 192 168 10 192 168 1 1 8 10 10 17 66 41'
+# specifies the routes:
+#   192.168.10.0/24 via 192.168.1.1
+#   10.0.0.0/8 via 10.10.17.66.41
+
+RUN="yes"
+
+
+if [ "$RUN" = "yes" ]; then
+	if [ -n "$new_rfc3442_classless_static_routes" ]; then
+		if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then
+
+			set -- $new_rfc3442_classless_static_routes
+
+			while [ $# -gt 0 ]; do
+				net_length=$1
+
+				case $net_length in
+					32|31|30|29|28|27|26|25)
+						net_address="${2}.${3}.${4}.${5}"
+						gateway="${6}.${7}.${8}.${9}"
+						shift 9
+						;;
+					24|23|22|21|20|19|18|17)
+						net_address="${2}.${3}.${4}.0"
+						gateway="${5}.${6}.${7}.${8}"
+						shift 8
+						;;
+					16|15|14|13|12|11|10|9)
+						net_address="${2}.${3}.0.0"
+						gateway="${4}.${5}.${6}.${7}"
+						shift 7
+						;;
+					8|7|6|5|4|3|2|1)
+						net_address="${2}.0.0.0"
+						gateway="${3}.${4}.${5}.${6}"
+						shift 6
+						;;
+					0)	# default route
+						net_address="0.0.0.0"
+						gateway="${2}.${3}.${4}.${5}"
+						shift 5
+						;;
+					*)	# error
+						return 1
+						;;
+				esac
+
+				# set route (ip detects host routes automatically)
+				ip -4 route add "${net_address}/${net_length}" \
+					via "${gateway}" dev "${interface}" >/dev/null 2>&1
+			done
+		fi
+	fi
+fi
diff --git a/debian/rules b/debian/rules
index 71cbea9..847cbe9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -134,11 +134,12 @@ install-stamp: build-stamp
 
 	cp debian/debug-enter debian/isc-dhcp-client/etc/dhcp/dhclient-enter-hooks.d/debug
 	cp debian/debug-exit debian/isc-dhcp-client/etc/dhcp/dhclient-exit-hooks.d/debug
-	cp debian/rfc3442-classless-routes debian/isc-dhcp-client/etc/dhcp/dhclient-exit-hooks.d
 
 	dh_install
 
 	cp debian/dhclient-script.$(DEB_HOST_ARCH_OS) `pwd`/debian/isc-dhcp-client/sbin/dhclient-script
+	cp debian/rfc3442-classless-routes.$(DEB_HOST_ARCH_OS) \
+		`pwd`/debian/isc-dhcp-client/etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes
 
 	# Install Linux specific documentation
 ifeq ($(DEB_HOST_ARCH_OS), linux)
-- 
1.7.5.3

Reply via email to