Author: ken Date: 2008-12-30 14:25:33 -0700 (Tue, 30 Dec 2008) New Revision: 2031
Added: trunk/dhcp/dhcp-3.1.2-iproute2-1.patch Log: roll the patch forward for 3.1.2 Copied: trunk/dhcp/dhcp-3.1.2-iproute2-1.patch (from rev 2030, trunk/dhcp/dhcp-3.0.6-iproute2-1.patch) =================================================================== --- trunk/dhcp/dhcp-3.1.2-iproute2-1.patch (rev 0) +++ trunk/dhcp/dhcp-3.1.2-iproute2-1.patch 2008-12-30 21:25:33 UTC (rev 2031) @@ -0,0 +1,231 @@ +Submitted By: DJ Lucas (dj at linuxfromscratch dot org) +Date: 2005-06-18 +Initial Package Version: 3.0.2 +Origin: Jim Gifford, Bruce Dubbs, DJ Lucas +Updated: Bruce Dubbs 2007-01-17 (Adjust offsets) +Description: Fixes client script to use iproute2 (added flush to previous + unversioned patches) +Upstream Status: Not submitted + +--- dhcp-3.0.2-orig/client/scripts/linux.phase1 2007-01-14 12:05:54.000000000 -0600 ++++ dhcp-3.0.2/client/scripts/linux 2007-01-14 12:06:05.000000000 -0600 +@@ -1,26 +1,15 @@ + #!/bin/bash + # dhclient-script for Linux. Dan Halbert, March, 1997. + # Updated for Linux 2.[12] by Brian J. Murrell, January 1999. +-# No guarantees about this. I'm a novice at the details of Linux +-# networking. ++ ++# Updated to iproute2 by Jim Gifford ([email protected]) + + # Notes: + + # 0. This script is based on the netbsd script supplied with dhcp-970306. +- +-# 1. ifconfig down apparently deletes all relevant routes and flushes +-# the arp cache, so this doesn't need to be done explicitly. +- +-# 2. The alias address handling here has not been tested AT ALL. +-# I'm just going by the doc of modern Linux ip aliasing, which uses +-# notations like eth0:0, eth0:1, for each alias. +- +-# 3. I have to calculate the network address, and calculate the broadcast +-# address if it is not supplied. This might be much more easily done +-# by the dhclient C code, and passed on. +- +-# 4. TIMEOUT not tested. ping has a flag I don't know, and I'm suspicious +-# of the $1 in its args. ++# 1. This script was modified to work with iproute2 ++# 2. cidr_convert based on a script by Kevin Fleming ([email protected]) ++# 3. Updated to delete addresses when taking an interface down ([email protected]) + + make_resolv_conf() { + if [ x"$new_domain_name_servers" != x ]; then +@@ -42,6 +31,30 @@ + fi + } + ++dec2binary() ++{ ++ local n=$1 ++ local ret="" ++ while [ $n != 0 ]; do ++ ret=$[$n%2]$ret ++ n=$[$n>>1] ++ done ++ echo $ret ++} ++ ++mask_to_binary() ++{ ++ echo `dec2binary $1``dec2binary $2``dec2binary $3``dec2binary $4` ++} ++ ++cidr_convert() ++{ ++ netmask=$1 ++ local mask=`mask_to_binary ${netmask//./ }` ++ mask=${mask%%0*} ++ cidr=${#mask} ++} ++ + # Must be used on exit. Invokes the local dhcp client exit hooks, if any. + exit_with_hooks() { + exit_status=$1 +@@ -63,11 +76,6 @@ + fi + fi + +-release=`uname -r` +-release=`expr $release : '\(.*\)\..*'` +-relminor=`echo $release |sed -e 's/[0-9]*\.\([0-9][0-9]*\)\(\..*\)*$/\1/'` +-relmajor=`echo $release |sed -e 's/\([0-9][0-9]*\)\..*$/\1/'` +- + if [ x$new_broadcast_address != x ]; then + new_broadcast_arg="broadcast $new_broadcast_address" + fi +@@ -75,13 +83,12 @@ + old_broadcast_arg="broadcast $old_broadcast_address" + fi + if [ x$new_subnet_mask != x ]; then +- new_subnet_arg="netmask $new_subnet_mask" ++ cidr_convert $new_subnet_mask ++ new_subnet_arg="$cidr" + fi + if [ x$old_subnet_mask != x ]; then +- old_subnet_arg="netmask $old_subnet_mask" +-fi +-if [ x$alias_subnet_mask != x ]; then +- alias_subnet_arg="netmask $alias_subnet_mask" ++ cidr_convert $old_subnet_mask ++ old_subnet_arg="$cidr" + fi + + if [ x$reason = xMEDIUM ]; then +@@ -92,17 +99,10 @@ + if [ x$reason = xPREINIT ]; then + if [ x$alias_ip_address != x ]; then + # Bring down alias interface. Its routes will disappear too. +- ifconfig $interface:0- inet 0 +- fi +- if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ) +- then +- ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ +- broadcast 255.255.255.255 up +- # Add route to make broadcast work. Do not omit netmask. +- route add default dev $interface netmask 0.0.0.0 +- else +- ifconfig $interface 0 up ++ ip link set $interface down ++ ip addr del $alias_ip_address dev $interface + fi ++ ip link set $interface up + + # We need to give the kernel some time to get the interface up. + sleep 1 +@@ -125,83 +125,51 @@ + fi + fi + +- if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ +- [ x$alias_ip_address != x$old_ip_address ]; then +- # Possible new alias. Remove old alias. +- ifconfig $interface:0- inet 0 +- fi + if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then +- # IP address changed. Bringing down the interface will delete all routes, ++ # IP address changed. Bring down the interface, delete all routes, + # and clear the ARP cache. +- ifconfig $interface inet 0 down +- ++ ip link set $interface down ++ ip addr flush dev $interface + fi + if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ + [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then + +- ifconfig $interface inet $new_ip_address $new_subnet_arg \ +- $new_broadcast_arg ++ ip link set $interface up ++ ip addr add $new_ip_address/$new_subnet_arg $new_broadcast_arg \ ++ label $interface dev $interface + # Add a network route to the computed network address. +- if [ $relmajor -lt 2 ] || \ +- ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then +- route add -net $new_network_number $new_subnet_arg dev $interface +- fi + for router in $new_routers; do +- route add default gw $router ++ ip route add default via $router + done + fi +- if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; +- then +- ifconfig $interface:0- inet 0 +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address $interface:0 +- fi + make_resolv_conf + exit_with_hooks 0 + fi + + if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ + || [ x$reason = xSTOP ]; then +- if [ x$alias_ip_address != x ]; then +- # Turn off alias interface. +- ifconfig $interface:0- inet 0 +- fi + if [ x$old_ip_address != x ]; then +- # Shut down interface, which will delete routes and clear arp cache. +- ifconfig $interface inet 0 down +- fi +- if [ x$alias_ip_address != x ]; then +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address $interface:0 ++ # Shut down interface, delete routes, and clear arp cache. ++ ip link set $interface down ++ ip addr flush dev $interface + fi + exit_with_hooks 0 + fi + + if [ x$reason = xTIMEOUT ]; then +- if [ x$alias_ip_address != x ]; then +- ifconfig $interface:0- inet 0 +- fi +- ifconfig $interface inet $new_ip_address $new_subnet_arg \ +- $new_broadcast_arg ++ ip link set $interface up ++ ip addr set $new_ip_address/$new_subnet_arg $new_broadcast_arg \ ++ label $interface dev $interface + set $new_routers +- ############## what is -w in ping? +- if ping -q -c 1 $1; then +- if [ x$new_ip_address != x$alias_ip_address ] && \ +- [ x$alias_ip_address != x ]; then +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address dev $interface:0 +- fi +- if [ $relmajor -lt 2 ] || \ +- ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then +- route add -net $new_network_number +- fi +- for router in $new_routers; do +- route add default gw $router +- done +- make_resolv_conf +- exit_with_hooks 0 +- fi +- ifconfig $interface inet 0 down ++ ++ for router in $new_routers; do ++ ip route add default via $router ++ done ++ ++ make_resolv_conf ++ exit_with_hooks 0 ++ ip link set $interface down ++ ip addr flush dev $interface + exit_with_hooks 1 + fi + -- http://linuxfromscratch.org/mailman/listinfo/patches FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page
