home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / etc / pcmcia / network < prev    next >
Text File  |  1999-10-31  |  6KB  |  219 lines

  1. #! /bin/bash
  2. #
  3. # network 1.56 1999/10/18 21:12:03 (David Hinds)
  4. #
  5. # Initialize or shutdown a PCMCIA ethernet adapter
  6. #
  7. # This script should be invoked with two arguments.  The first is the
  8. # action to be taken, either "start", "stop", or "restart".  The
  9. # second is the network interface name.
  10. #
  11. # The script passes an extended device address to 'network.opts' in
  12. # the ADDRESS variable, to retrieve device-specific configuration
  13. # options.  The address format is "scheme,socket,instance,hwaddr"
  14. # where "scheme" is the current PCMCIA device configuration scheme,
  15. # "socket" is the socket number, "instance" is used to number multiple
  16. # interfaces in a single socket, and "hwaddr" is the card's hardware
  17. # ethernet address.
  18. #
  19.  
  20. if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi
  21.  
  22. # Get device attributes
  23. get_info $DEVICE
  24. HWADDR=`/sbin/ifconfig $DEVICE | sed -n -e 's/.*addr \([^ ]*\) */\1/p'`
  25.  
  26. # Load site-specific settings
  27. ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR"
  28. start_fn () { return; }
  29. stop_fn () { return; }
  30. . $0.opts
  31.  
  32. RESOLV=/etc/resolv.conf
  33.  
  34. case "$ACTION" in
  35.  
  36. 'start')
  37.  
  38.     test "$IF_PORT" && /sbin/ifport $DEVICE $IF_PORT
  39.  
  40.     if is_true $PUMP ; then
  41.     /sbin/pump -i $DEVICE
  42.     elif is_true $BOOTP ; then
  43.     /sbin/ifconfig $DEVICE up 0.0.0.0
  44.     /sbin/route add default dev $DEVICE
  45.     eval `/sbin/bootpc --bootfile '' --returniffail \
  46.         --timeoutwait 10 --dev $DEVICE`
  47.     /sbin/route del default
  48.     /sbin/ifconfig $DEVICE down
  49.     if [ "$GATEWAYS" ] ; then
  50.         set - $GATEWAYS ; GATEWAY=$1
  51.     fi
  52.     elif is_true $DHCP ; then
  53.     /sbin/ifconfig $DEVICE up 0.0.0.0
  54.     /sbin/route add default dev $DEVICE
  55.     if /sbin/dhcpcd -V 2>&1 | grep -q DHCP ; then
  56.         /sbin/dhcpcd $DEVICE >/dev/null 2>&1 || exit 1
  57.     else
  58.         # Jump through hoops for lame 0.70-era dhcpcd
  59.         L=/var/run/dhcp-lock-$DEVICE
  60.         /bin/echo "#!/bin/sh\nrm $L" > $L ; chmod +x $L
  61.         /sbin/dhcpcd -c $L $DEVICE >/dev/null 2>&1
  62.         for t in 0 1 2 3 4 5 6 7 8 9 ; do
  63.         sleep 2 ; if [ ! -e $L ] ; then break ; fi
  64.         done
  65.         rm -f $L
  66.         if [ -e /etc/dhcpc/resolv.conf ] ; then
  67.         echo "# $DEVICE begin" > $RESOLV.N
  68.         cat /etc/dhcpc/resolv.conf >> $RESOLV.N
  69.         echo "# $DEVICE end" >> $RESOLV.N
  70.         cat $RESOLV >> $RESOLV.N ; mv $RESOLV.N $RESOLV
  71.         fi
  72.     fi
  73.     fi
  74.  
  75.     if is_true $DHCLIENT ; then
  76.     /sbin/dhclient $DEVICE
  77.     fi
  78.  
  79.     if [ "$IPADDR" ] ; then
  80.  
  81.     # Basic network setup
  82.     BC=${BROADCAST:+broadcast $BROADCAST}
  83.     /sbin/ifconfig $DEVICE up $IPADDR netmask $NETMASK $BC
  84.  
  85.     if [ "$NETWORK" ] ; then
  86.         /sbin/ifuser $DEVICE $NETWORK || \
  87.         /sbin/route add -net $NETWORK netmask $NETMASK dev $DEVICE
  88.     elif [ "$GATEWAY" ] ; then
  89.         /sbin/ifuser $DEVICE $GATEWAY || \
  90.         /sbin/route add $GATEWAY $DEVICE
  91.     fi
  92.  
  93.     test "$GATEWAY" && /sbin/route add default gw $GATEWAY metric 1
  94.  
  95.     # Update DNS stuff
  96.     if [ "$DOMAIN$SEARCH$DNSSRVS$DNS_1$DNS_2$DNS_3" ] ; then
  97.         echo "# $DEVICE begin" > $RESOLV.N
  98.         test "$DOMAIN" && echo "domain $DOMAIN" >> $RESOLV.N
  99.         test "$SEARCH" && echo "search $SEARCH" >> $RESOLV.N
  100.         for DNS in ${DNSSRVS:-$DNS_1 $DNS_2 $DNS_3} ; do
  101.         echo "nameserver $DNS" >> $RESOLV.N
  102.         done
  103.         echo "# $DEVICE end" >> $RESOLV.N
  104.         sed -e "/# $DEVICE begin/,/# $DEVICE end/d" $RESOLV >> $RESOLV.N
  105.         mv $RESOLV.N $RESOLV
  106.     fi
  107.  
  108.     # Handle NFS mounts
  109.     if [ "$MOUNTS" ] ; then
  110.         for MT in $MOUNTS ; do mount -v $MT ; done
  111.     fi
  112.  
  113.     fi
  114.  
  115.     if [ "$IPX_NETNUM" ] ; then
  116.     ipx_interface add $DEVICE $IPX_FRAME $IPX_NETNUM
  117.     fi
  118.  
  119.     if test -x /sbin/ipmasq && istrue "$IPMASQ" ; then
  120.     /sbin/ipmasq
  121.     fi
  122.  
  123.     start_fn $DEVICE
  124.     ;;
  125.  
  126. 'stop')
  127.  
  128.     stop_fn $DEVICE
  129.  
  130.     if is_true $PUMP || is_true $BOOTP || is_true $DHCP || is_true $DHCLIENT || [ "$IPADDR" ] ; then
  131.  
  132.     # Shut down all NFS mounts on this interface
  133.     nfsstop ()
  134.     {
  135.         local HOST MT
  136.         if read HOST MT ; then
  137.         nfsstop
  138.         if /sbin/ifuser $DEVICE $HOST ; then
  139.             fuser -s -k -m $MT
  140.             umount -v $MT
  141.         fi
  142.         fi
  143.     }
  144.     mount -t nfs | sed -e 's/:.* on \(.*\) type .*/ \1/' | nfsstop
  145.  
  146.     test "$IPX_NETNUM" && ipx_interface del $DEVICE $IPX_FRAME
  147.  
  148.     # Remove nameservers
  149.     if fgrep -q "# $DEVICE begin" $RESOLV ; then
  150.         sed -e "/# $DEVICE begin/,/# $DEVICE end/d"    $RESOLV > $RESOLV.N
  151.         mv $RESOLV.N $RESOLV
  152.     fi
  153.  
  154.     if is_true $PUMP ; then
  155.         pump -r -i $DEVICE
  156.     elif is_true $DHCP ; then
  157.         kill -TERM `cat /var/run/dhcpcd-$DEVICE.pid`
  158.         sleep 2
  159.         /sbin/dhcpcd -V 2>&1 | grep -q DHCP || \
  160.         rm -f /var/run/dhcpcd-$DEVICE.pid
  161.     fi
  162.  
  163.         if is_true $DHCLIENT ; then
  164.         kill -TERM `cat /var/run/dhclient.pid`
  165.         rm -f /var/run/dhcpcd-$DEVICE.pid
  166.         fi
  167.     fi
  168.  
  169.     /sbin/ifconfig $DEVICE down
  170.     ;;
  171.  
  172. 'check')
  173.     /sbin/ifconfig $DEVICE | grep -q RUNNING || exit 0
  174.  
  175.     # Check for any in-use NFS mounts
  176.     nfscheck ()
  177.     {
  178.     while read HOST MT ; do
  179.         /sbin/ifuser $DEVICE $HOST && fuser -sm $MT && exit 1
  180.     done
  181.     }
  182.     mount -t nfs | sed -e 's/:.* on \(.*\) type .*/ \1/' | nfscheck
  183.  
  184.     # Check for active TCP or UDP connections
  185.     getdests ()
  186.     {
  187.         IFS=" :" ; read A ; read A
  188.     while read A B C D E HOST PORT STATE ; do
  189.         if [ "$STATE" != "FIN_WAIT1" -a "$STATE" != "FIN_WAIT2" \
  190.         -a "$STATE" != "CLOSE_WAIT" -a "$STATE" != "TIME_WAIT" \
  191.         -a "$HOST" != "127.0.0.1" -a "$HOST" != "0.0.0.0" \
  192.         -a "$PORT" != "*" ] ; then
  193.         echo $HOST
  194.         fi
  195.     done
  196.     }
  197.     DESTS=`netstat -ntuw | getdests`
  198.     /sbin/ifuser $DEVICE $DESTS && exit 1
  199.     ;;
  200.  
  201. 'cksum')
  202.     chk_simple "$3,$SOCKET,$INSTANCE,$HWADDR" || exit 1
  203.     ;;
  204.  
  205. 'restart')
  206.     test "$IPADDR" && /sbin/ifconfig $DEVICE down up
  207.     ;;
  208.  
  209. 'suspend'|'resume')
  210.     ;;
  211.  
  212. *)
  213.     usage
  214.     ;;
  215.  
  216. esac
  217.  
  218. exit 0
  219.