Home | History | Annotate | Line # | Download | only in scripts
solaris revision 1.1
      1 #!/bin/sh  
      2 
      3 make_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.
     23 exit_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.
     33 if [ -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
     41 fi
     42 
     43 if [ x$new_broadcast_address != x ]; then
     44   new_broadcast_arg="broadcast $new_broadcast_address"
     45 fi
     46 if [ x$old_broadcast_address != x ]; then
     47   old_broadcast_arg="broadcast $old_broadcast_address"
     48 fi
     49 if [ x$new_subnet_mask != x ]; then
     50   new_netmask_arg="netmask $new_subnet_mask"
     51 fi
     52 if [ x$old_subnet_mask != x ]; then
     53   old_netmask_arg="netmask $old_subnet_mask"
     54 fi
     55 if [ x$alias_subnet_mask != x ]; then
     56   alias_subnet_arg="netmask $alias_subnet_mask"
     57 fi
     58  if [ x$new_interface_mtu != x ]; then
     59    mtu_arg="mtu $new_interface_mtu"
     60  fi
     61 if [ x$IF_METRIC != x ]; then
     62   metric_arg="metric $IF_METRIC"
     63 fi
     64 
     65 ifconfig=/sbin/ifconfig
     66 
     67 release=`uname -r`
     68 release=`expr $release : '\(.*\)\..*'`
     69 relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'`
     70 relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'`
     71 
     72 if [ x$reason = xMEDIUM ]; then
     73   eval "$ifconfig $interface $medium"
     74   $ifconfig $interface
     75   sleep 1
     76   exit_with_hooks 0
     77 fi
     78 
     79 if [ 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
     94 fi
     95 
     96 if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
     97   exit_with_hooks 0;
     98 fi
     99   
    100 if [ 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
    152 fi
    153 
    154 if [ 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
    172 fi
    173 
    174 if [ 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
    201 fi
    202 
    203 exit_with_hooks 0
    204