home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3.4.17 [SPARC, PA-RISC] / nextstep33_risc.iso / private / etc / rc.net < prev    next >
Text File  |  1993-04-08  |  4KB  |  154 lines

  1. #!/bin/sh
  2. #
  3. #  /etc/rc.net
  4. #
  5. #  Configure all known interfaces according to the rules in /etc/iftab
  6. #
  7. #  Copyright (C) 1992 by NeXT Computer, Inc.  All rights reserved.
  8. #
  9. #  Usage: rc.net [-d] [-h] [interface...]
  10. #
  11.  
  12. iftab=/etc/iftab
  13.  
  14. #
  15. #  Let ^C's interrupt the commands run hereunder (eg, ifconfig), not
  16. #  the shell script itself.
  17. #
  18. trap "true" 2
  19.  
  20. #
  21. #  Handle command options
  22. #
  23. while [ -n "$1" ]; do
  24.     case "$1" in
  25.     -d) DEBUG=-YES-; shift;;
  26.     -h) SETHOSTNAME=-YES-; shift;;
  27.     *) iflist="$*"; break;;
  28.     esac
  29. done
  30.  
  31. #
  32. #  Debug versions of actual configuration commands
  33. #
  34.  
  35. docmd() {
  36.     if [ "$DEBUG" = -YES- ]; then
  37.     echo "#" "$@"
  38.     else
  39.     "$@"
  40.     fi
  41. }
  42.  
  43. #
  44. #  A procedure to use /etc/hostconfig to configure a given interface
  45. #
  46. #  Usage: hostconfig <interface>
  47. #
  48. hostconfig() {
  49.     if [ -n "$INETADDR" -a "$INETADDR" != -NO- ]; then
  50.     cmd="ifconfig $1 inet $INETADDR"
  51.     if [ -n "$IPNETMASK" ]; then
  52.         cmd="$cmd netmask $IPNETMASK"
  53.     fi
  54.     if [ -n "$IPBROADCAST" -a "$IPBROADCAST" != -AUTOMATIC- ]; then
  55.         cmd="$cmd broadcast $IPBROADCAST"
  56.     fi
  57.     cmd="$cmd -trailers up"
  58.     docmd $cmd
  59.     fi
  60. }
  61.  
  62. #
  63. #  Read /etc/hostconfig for backwards compatibility
  64. #
  65. if [ -f /etc/hostconfig ]; then
  66.   . /etc/hostconfig
  67. fi
  68.  
  69. #
  70. #  Ask ifconfig for all available interface names if none were given
  71. #  on the command line.
  72. #
  73. if [ -z "$iflist" ]; then
  74.     iflist="`ifconfig -a | awk -F: '/^[a-z]/ {print $1}'`"
  75. fi
  76.  
  77. #
  78. #  Make sure that lo0 is done last, so that it never becomes the
  79. #  primary interface (unless it is the only one we have)
  80. #
  81. iflist=`echo $iflist | awk '{
  82.     for (i = 1; i <= NF; i++)
  83.         if ($i == "lo0")
  84.         lo0="lo0";
  85.         else
  86.         print $i;
  87.      print lo0;}'`
  88. primif=`echo $iflist | awk '{print $1}'`
  89.  
  90. #
  91. #  Go for it -- configure each interface in our list
  92. #
  93. if [ -s $iftab ]; then
  94.     # Look for matching config information in /etc/iftab
  95.     for if in $iflist; do
  96.     (while read name af args; do
  97.         # Special hack for primary interface
  98.         if [ "X$name" = "X-1-" -a $if = $primif ]; then
  99.         name=$if
  100.         fi
  101.         # Skip '#' comments while trying to match on each device pattern
  102.         case $if in
  103.         \#*) ;;
  104.         $name)
  105.             # Found a matching interface; have we done this address
  106.             # family before?  (Check by inspecting a shell variable
  107.             # formed by the device name and the address family, for
  108.             # example: $en0_inet)
  109.             eval done=\${$if\_$af}
  110.             if [ -z "$done" ]; then
  111.             # A "!" escape will allow us to put any configuration
  112.             # command in iftab.  The config command may make use
  113.             # of the shell variables $if and $af to get the name
  114.             # of the current interface and address family.
  115.             case "$args" in
  116.                 -HOSTCONFIG-) hostconfig $if;;
  117.                 !*) eval docmd `echo $args | sed 's/^!//'`;;
  118.                 *)  docmd ifconfig $if $af $args;;
  119.             esac
  120.             eval $if\_$af=DONE
  121.             fi;;
  122.         esac
  123.     done) < $iftab
  124.     done
  125. else
  126.     # More backwards compatibility -- if we don't have an /etc/iftab,
  127.     # try using the stuff in /etc/hostconfig instead.
  128.     hostconfig en0
  129.     # Make sure that the loopback interface gets initialized
  130.     docmd ifconfig lo0 inet -AUTOMATIC- netmask -AUTOMATIC-
  131. fi
  132.  
  133. #
  134. #  Set the hostname if we're asked to do so.
  135. #
  136. if [ "$SETHOSTNAME" = -YES- ]; then
  137.     if [ -z "$HOSTNAME" ]; then
  138.     HOSTNAME=-AUTOMATIC-
  139.     fi
  140.     if [ "$HOSTNAME" != -NO- ]; then
  141.     echo "Setting hostname to $HOSTNAME"
  142.     docmd hostname $HOSTNAME
  143.     fi
  144. fi
  145.  
  146. #
  147. #  Finally, let nmserver know the fruits of our network configuration endeavor.
  148. #
  149. pid=`ps cax | egrep nmserver | awk '{print $1;}'`
  150. if [ -n "$pid" ]; then
  151.     echo "Reinitializing nmserver's network portion"
  152.     docmd kill -USR2 $pid
  153. fi
  154.