home *** CD-ROM | disk | FTP | other *** search
- #! /bin/bash
- #
- # network 1.56 1999/10/18 21:12:03 (David Hinds)
- #
- # Initialize or shutdown a PCMCIA ethernet adapter
- #
- # This script should be invoked with two arguments. The first is the
- # action to be taken, either "start", "stop", or "restart". The
- # second is the network interface name.
- #
- # The script passes an extended device address to 'network.opts' in
- # the ADDRESS variable, to retrieve device-specific configuration
- # options. The address format is "scheme,socket,instance,hwaddr"
- # where "scheme" is the current PCMCIA device configuration scheme,
- # "socket" is the socket number, "instance" is used to number multiple
- # interfaces in a single socket, and "hwaddr" is the card's hardware
- # ethernet address.
- #
-
- if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi
-
- # Get device attributes
- get_info $DEVICE
- HWADDR=`/sbin/ifconfig $DEVICE | sed -n -e 's/.*addr \([^ ]*\) */\1/p'`
-
- # Load site-specific settings
- ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR"
- start_fn () { return; }
- stop_fn () { return; }
- . $0.opts
-
- RESOLV=/etc/resolv.conf
-
- case "$ACTION" in
-
- 'start')
-
- test "$IF_PORT" && /sbin/ifport $DEVICE $IF_PORT
-
- if is_true $PUMP ; then
- /sbin/pump -i $DEVICE
- elif is_true $BOOTP ; then
- /sbin/ifconfig $DEVICE up 0.0.0.0
- /sbin/route add default dev $DEVICE
- eval `/sbin/bootpc --bootfile '' --returniffail \
- --timeoutwait 10 --dev $DEVICE`
- /sbin/route del default
- /sbin/ifconfig $DEVICE down
- if [ "$GATEWAYS" ] ; then
- set - $GATEWAYS ; GATEWAY=$1
- fi
- elif is_true $DHCP ; then
- /sbin/ifconfig $DEVICE up 0.0.0.0
- /sbin/route add default dev $DEVICE
- if /sbin/dhcpcd -V 2>&1 | grep -q DHCP ; then
- /sbin/dhcpcd $DEVICE >/dev/null 2>&1 || exit 1
- else
- # Jump through hoops for lame 0.70-era dhcpcd
- L=/var/run/dhcp-lock-$DEVICE
- /bin/echo "#!/bin/sh\nrm $L" > $L ; chmod +x $L
- /sbin/dhcpcd -c $L $DEVICE >/dev/null 2>&1
- for t in 0 1 2 3 4 5 6 7 8 9 ; do
- sleep 2 ; if [ ! -e $L ] ; then break ; fi
- done
- rm -f $L
- if [ -e /etc/dhcpc/resolv.conf ] ; then
- echo "# $DEVICE begin" > $RESOLV.N
- cat /etc/dhcpc/resolv.conf >> $RESOLV.N
- echo "# $DEVICE end" >> $RESOLV.N
- cat $RESOLV >> $RESOLV.N ; mv $RESOLV.N $RESOLV
- fi
- fi
- fi
-
- if is_true $DHCLIENT ; then
- /sbin/dhclient $DEVICE
- fi
-
- if [ "$IPADDR" ] ; then
-
- # Basic network setup
- BC=${BROADCAST:+broadcast $BROADCAST}
- /sbin/ifconfig $DEVICE up $IPADDR netmask $NETMASK $BC
-
- if [ "$NETWORK" ] ; then
- /sbin/ifuser $DEVICE $NETWORK || \
- /sbin/route add -net $NETWORK netmask $NETMASK dev $DEVICE
- elif [ "$GATEWAY" ] ; then
- /sbin/ifuser $DEVICE $GATEWAY || \
- /sbin/route add $GATEWAY $DEVICE
- fi
-
- test "$GATEWAY" && /sbin/route add default gw $GATEWAY metric 1
-
- # Update DNS stuff
- if [ "$DOMAIN$SEARCH$DNSSRVS$DNS_1$DNS_2$DNS_3" ] ; then
- echo "# $DEVICE begin" > $RESOLV.N
- test "$DOMAIN" && echo "domain $DOMAIN" >> $RESOLV.N
- test "$SEARCH" && echo "search $SEARCH" >> $RESOLV.N
- for DNS in ${DNSSRVS:-$DNS_1 $DNS_2 $DNS_3} ; do
- echo "nameserver $DNS" >> $RESOLV.N
- done
- echo "# $DEVICE end" >> $RESOLV.N
- sed -e "/# $DEVICE begin/,/# $DEVICE end/d" $RESOLV >> $RESOLV.N
- mv $RESOLV.N $RESOLV
- fi
-
- # Handle NFS mounts
- if [ "$MOUNTS" ] ; then
- for MT in $MOUNTS ; do mount -v $MT ; done
- fi
-
- fi
-
- if [ "$IPX_NETNUM" ] ; then
- ipx_interface add $DEVICE $IPX_FRAME $IPX_NETNUM
- fi
-
- if test -x /sbin/ipmasq && istrue "$IPMASQ" ; then
- /sbin/ipmasq
- fi
-
- start_fn $DEVICE
- ;;
-
- 'stop')
-
- stop_fn $DEVICE
-
- if is_true $PUMP || is_true $BOOTP || is_true $DHCP || is_true $DHCLIENT || [ "$IPADDR" ] ; then
-
- # Shut down all NFS mounts on this interface
- nfsstop ()
- {
- local HOST MT
- if read HOST MT ; then
- nfsstop
- if /sbin/ifuser $DEVICE $HOST ; then
- fuser -s -k -m $MT
- umount -v $MT
- fi
- fi
- }
- mount -t nfs | sed -e 's/:.* on \(.*\) type .*/ \1/' | nfsstop
-
- test "$IPX_NETNUM" && ipx_interface del $DEVICE $IPX_FRAME
-
- # Remove nameservers
- if fgrep -q "# $DEVICE begin" $RESOLV ; then
- sed -e "/# $DEVICE begin/,/# $DEVICE end/d" $RESOLV > $RESOLV.N
- mv $RESOLV.N $RESOLV
- fi
-
- if is_true $PUMP ; then
- pump -r -i $DEVICE
- elif is_true $DHCP ; then
- kill -TERM `cat /var/run/dhcpcd-$DEVICE.pid`
- sleep 2
- /sbin/dhcpcd -V 2>&1 | grep -q DHCP || \
- rm -f /var/run/dhcpcd-$DEVICE.pid
- fi
-
- if is_true $DHCLIENT ; then
- kill -TERM `cat /var/run/dhclient.pid`
- rm -f /var/run/dhcpcd-$DEVICE.pid
- fi
- fi
-
- /sbin/ifconfig $DEVICE down
- ;;
-
- 'check')
- /sbin/ifconfig $DEVICE | grep -q RUNNING || exit 0
-
- # Check for any in-use NFS mounts
- nfscheck ()
- {
- while read HOST MT ; do
- /sbin/ifuser $DEVICE $HOST && fuser -sm $MT && exit 1
- done
- }
- mount -t nfs | sed -e 's/:.* on \(.*\) type .*/ \1/' | nfscheck
-
- # Check for active TCP or UDP connections
- getdests ()
- {
- IFS=" :" ; read A ; read A
- while read A B C D E HOST PORT STATE ; do
- if [ "$STATE" != "FIN_WAIT1" -a "$STATE" != "FIN_WAIT2" \
- -a "$STATE" != "CLOSE_WAIT" -a "$STATE" != "TIME_WAIT" \
- -a "$HOST" != "127.0.0.1" -a "$HOST" != "0.0.0.0" \
- -a "$PORT" != "*" ] ; then
- echo $HOST
- fi
- done
- }
- DESTS=`netstat -ntuw | getdests`
- /sbin/ifuser $DEVICE $DESTS && exit 1
- ;;
-
- 'cksum')
- chk_simple "$3,$SOCKET,$INSTANCE,$HWADDR" || exit 1
- ;;
-
- 'restart')
- test "$IPADDR" && /sbin/ifconfig $DEVICE down up
- ;;
-
- 'suspend'|'resume')
- ;;
-
- *)
- usage
- ;;
-
- esac
-
- exit 0
-