#!/bin/sh # # /etc/rc.net # # Configure all known interfaces according to the rules in /etc/iftab # # Copyright (C) 1992 by NeXT Computer, Inc. All rights reserved. # # Usage: rc.net [-d] [-h] [interface...] # iftab=/etc/iftab # # Let ^C's interrupt the commands run hereunder (eg, ifconfig), not # the shell script itself. # trap "true" 2 # # Handle command options # while [ -n "$1" ]; do case "$1" in -d) DEBUG=-YES-; shift;; -h) SETHOSTNAME=-YES-; shift;; *) iflist="$*"; break;; esac done # # Debug versions of actual configuration commands # docmd() { if [ "$DEBUG" = -YES- ]; then echo "#" "$@" else "$@" fi } # # A procedure to use /etc/hostconfig to configure a given interface # # Usage: hostconfig # hostconfig() { if [ -n "$INETADDR" -a "$INETADDR" != -NO- ]; then cmd="ifconfig $1 inet $INETADDR" if [ -n "$IPNETMASK" ]; then cmd="$cmd netmask $IPNETMASK" fi if [ -n "$IPBROADCAST" -a "$IPBROADCAST" != -AUTOMATIC- ]; then cmd="$cmd broadcast $IPBROADCAST" fi cmd="$cmd -trailers up" docmd $cmd fi } # # Read /etc/hostconfig for backwards compatibility # if [ -f /etc/hostconfig ]; then . /etc/hostconfig fi # # Ask ifconfig for all available interface names if none were given # on the command line. # if [ -z "$iflist" ]; then iflist="`ifconfig -a | awk -F: '/^[a-z]/ {print $1}'`" fi # # Make sure that lo0 is done last, so that it never becomes the # primary interface (unless it is the only one we have) # iflist=`echo $iflist | awk '{ for (i = 1; i <= NF; i++) if ($i == "lo0") lo0="lo0"; else print $i; print lo0;}'` primif=`echo $iflist | awk '{print $1}'` # # Go for it -- configure each interface in our list # if [ -s $iftab ]; then # Look for matching config information in /etc/iftab for if in $iflist; do (while read name af args; do # Special hack for primary interface if [ "X$name" = "X-1-" -a $if = $primif ]; then name=$if fi # Skip '#' comments while trying to match on each device pattern case $if in \#*) ;; $name) # Found a matching interface; have we done this address # family before? (Check by inspecting a shell variable # formed by the device name and the address family, for # example: $en0_inet) eval done=\${$if\_$af} if [ -z "$done" ]; then # A "!" escape will allow us to put any configuration # command in iftab. The config command may make use # of the shell variables $if and $af to get the name # of the current interface and address family. case "$args" in -HOSTCONFIG-) hostconfig $if;; !*) eval docmd `echo $args | sed 's/^!//'`;; *) docmd ifconfig $if $af $args;; esac eval $if\_$af=DONE fi;; esac done) < $iftab done else # More backwards compatibility -- if we don't have an /etc/iftab, # try using the stuff in /etc/hostconfig instead. hostconfig en0 # Make sure that the loopback interface gets initialized docmd ifconfig lo0 inet -AUTOMATIC- netmask -AUTOMATIC- fi # # Set the hostname if we're asked to do so. # if [ "$SETHOSTNAME" = -YES- ]; then if [ -z "$HOSTNAME" ]; then HOSTNAME=-AUTOMATIC- fi if [ "$HOSTNAME" != -NO- ]; then echo "Setting hostname to $HOSTNAME" docmd hostname $HOSTNAME fi fi # # Finally, let nmserver know the fruits of our network configuration endeavor. # pid=`ps cax | egrep nmserver | awk '{print $1;}'` if [ -n "$pid" ]; then echo "Reinitializing nmserver's network portion" docmd kill -USR2 $pid fi