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