1#!/bin/sh 2 3make_resolv_conf() { 4 if [ x"$new_domain_name_servers" != x ]; then 5 cat /dev/null > /etc/resolv.conf.dhclient 6 if [ x"$new_domain_search" != x ]; then 7 echo search $new_domain_search >> /etc/resolv.conf.dhclient 8 elif [ x"$new_domain_name" != x ]; then 9 # Note that the DHCP 'Domain Name Option' is really just a domain 10 # name, and that this practice of using the domain name option as 11 # a search path is both nonstandard and deprecated. 12 echo search $new_domain_name >> /etc/resolv.conf.dhclient 13 fi 14 for nameserver in $new_domain_name_servers; do 15 echo nameserver $nameserver >>/etc/resolv.conf.dhclient 16 done 17 18 mv /etc/resolv.conf.dhclient /etc/resolv.conf 19 fi 20} 21 22# Must be used on exit. Invokes the local dhcp client exit hooks, if any. 23exit_with_hooks() { 24 exit_status=$1 25 if [ -f /etc/dhclient-exit-hooks ]; then 26 . /etc/dhclient-exit-hooks 27 fi 28# probably should do something with exit status of the local script 29 exit $exit_status 30} 31 32# Invoke the local dhcp client enter hooks, if they exist. 33if [ -f /etc/dhclient-enter-hooks ]; then 34 exit_status=0 35 . /etc/dhclient-enter-hooks 36 # allow the local script to abort processing of this state 37 # local script must set exit_status variable to nonzero. 38 if [ $exit_status -ne 0 ]; then 39 exit $exit_status 40 fi 41fi 42 43if [ x$new_broadcast_address != x ]; then 44 new_broadcast_arg="broadcast $new_broadcast_address" 45fi 46if [ x$old_broadcast_address != x ]; then 47 old_broadcast_arg="broadcast $old_broadcast_address" 48fi 49if [ x$new_subnet_mask != x ]; then 50 new_netmask_arg="netmask $new_subnet_mask" 51fi 52if [ x$old_subnet_mask != x ]; then 53 old_netmask_arg="netmask $old_subnet_mask" 54fi 55if [ x$alias_subnet_mask != x ]; then 56 alias_subnet_arg="netmask $alias_subnet_mask" 57fi 58 if [ x$new_interface_mtu != x ]; then 59 mtu_arg="mtu $new_interface_mtu" 60 fi 61if [ x$IF_METRIC != x ]; then 62 metric_arg="metric $IF_METRIC" 63fi 64 65ifconfig=/sbin/ifconfig 66 67release=`uname -r` 68release=`expr $release : '\(.*\)\..*'` 69relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'` 70relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'` 71 72if [ x$reason = xMEDIUM ]; then 73 eval "$ifconfig $interface $medium" 74 $ifconfig $interface 75 sleep 1 76 exit_with_hooks 0 77fi 78 79if [ x$reason = xPREINIT ]; then 80 if [ x$alias_ip_address != x ]; then 81 $ifconfig ${interface}:1 0 down > /dev/null 2>&1 82 route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 83 fi 84 if [ $relmajor -gt 5 ] || ( [ $relmajor -eq 5 ] && [ $relminor -ge 5 ] ) 85 then 86 # Turn the interface on 87 $ifconfig $interface plumb 88 $ifconfig $interface up 89 else 90 $ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ 91 broadcast 255.255.255.255 up 92 fi 93 exit_with_hooks 0 94fi 95 96if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then 97 exit_with_hooks 0; 98fi 99 100if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ 101 [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then 102 current_hostname=`hostname` 103 if [ x$current_hostname = x ] || \ 104 [ x$current_hostname = x$old_host_name ]; then 105 if [ x$current_hostname = x ] || \ 106 [ x$new_host_name != x$old_host_name ]; then 107 hostname $new_host_name 108 fi 109 fi 110 111 if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ 112 [ x$alias_ip_address != x$old_ip_address ]; then 113 $ifconfig ${interface}:1 inet 0 down > /dev/null 2>&1 114 route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 115 fi 116 if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then 117 $ifconfig ${interface} inet 0 down 118 route delete $old_ip_address 127.1 >/dev/null 2>&1 119 for router in $old_routers; do 120 route delete default $router >/dev/null 2>&1 121 done 122 fi 123 if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ 124 [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then 125 eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ 126 $new_broadcast_arg $mtu_arg $metric_arg $medium" 127 route add $new_ip_address 127.1 1 >/dev/null 2>&1 128 for router in $new_routers; do 129 route add default $router 1 >/dev/null 2>&1 130 done 131 else 132 # we haven't changed the address, have we changed other options 133 # that we wish to update? 134 if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then 135 # if we've changed routers delete the old and add the new. 136 $LOGGER "New Routers: $new_routers" 137 for router in $old_routers; do 138 route delete default $router >/dev/null 2>&1 139 done 140 for router in $new_routers; do 141 route add default $router 1 >/dev/null 2>&1 142 done 143 fi 144 fi 145 if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; 146 then 147 $ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg 148 route add $alias_ip_address 127.0.0.1 1 149 fi 150 make_resolv_conf 151 exit_with_hooks 0 152fi 153 154if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ 155 || [ x$reason = xSTOP ]; then 156 if [ x$alias_ip_address != x ]; then 157 $ifconfig ${interface}:1 0 down > /dev/null 2>&1 158 route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 159 fi 160 if [ x$old_ip_address != x ]; then 161 $ifconfig $interface inet 0 down 162 route delete $old_ip_address 127.1 >/dev/null 2>&1 163 for router in $old_routers; do 164 route delete default $router >/dev/null 2>&1 165 done 166 fi 167 if [ x$alias_ip_address != x ]; then 168 $ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg 169 route add $alias_ip_address 127.0.0.1 1 170 fi 171 exit_with_hooks 0 172fi 173 174if [ x$reason = xTIMEOUT ]; then 175 if [ x$alias_ip_address != x ]; then 176 $ifconfig ${interface}:1 0 down > /dev/null 2>&1 177 route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 178 fi 179 eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ 180 $new_broadcast_arg $mtu_arg $metric_arg $medium" 181 sleep 1 182 set $new_routers 183 if ping -s -n -I 1 $1 64 1; then 184 if [ x$new_ip_address != x$alias_ip_address ] && \ 185 [ x$alias_ip_address != x ]; then 186 $ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg 187 route add $alias_ip_address 127.0.0.1 1 188 fi 189 route add $new_ip_address 127.1 1 >/dev/null 2>&1 190 for router in $new_routers; do 191 route add default $router 1 >/dev/null 2>&1 192 done 193 make_resolv_conf 194 exit_with_hooks 0 195 fi 196 $ifconfig $interface inet 0 down 197 for router in $old_routers; do 198 route delete default $router >/dev/null 2>&1 199 done 200 exit_with_hooks 1 201fi 202 203exit_with_hooks 0 204