123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #! /bin/sh
- #
- # network 1.87 2004/07/17 04:48:37 (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
- if [ -d /var/lib/pcmcia ] ; then
- NAMEFILE=/var/lib/pcmcia/nameif.${SOCKET}.${INSTANCE}
- else
- NAMEFILE=/var/run/nameif.${SOCKET}.${INSTANCE}
- fi
- if [ -r "$NAMEFILE" -a "$ACTION" != "start" ] ; then
- DEVICE=`cat $NAMEFILE`
- fi
- HWADDR=`/sbin/ifconfig $DEVICE | sed -ne 's/.*\(..:..:..:..:..:..\).*/\1/p'`
- # Load site-specific settings
- ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR"
- start_fn () { return; }
- stop_fn () { return; }
- . $0.opts
- if [ "$ACTION" = "start" ] ; then
- if [ -r "$NAMEFILE" ] ; then rm $NAMEFILE ; fi
- if [ -n "$NAMEIF" ] ; then
- log /sbin/nameif $NAMEIF $HWADDR || exit 1
- echo $NAMEIF > $NAMEFILE ; DEVICE=$NAMEIF
- fi
- fi
- RESOLV=/etc/resolv.conf
- # Now, run the specific script for Wireless LAN interfaces
- # Note : we need the wireless parameters to be set up before IP parameters,
- # so that we can perform DHCP over the Wireless link if needed. Jean II
- O_INFO=$INFO ; INFO=
- if [ -x ./wireless ] ; then
- . ./wireless
- else
- . /etc/pcmcia/wireless
- fi
- INFO=$O_INFO
- bootp_setup ()
- {
- if match `uname -r` "2.[2-9].*" ; then
- log /sbin/ifconfig $DEVICE up
- else
- log /sbin/ifconfig $DEVICE up 0.0.0.0
- log /sbin/route add default dev $DEVICE netmask 0.0.0.0
- fi
- }
- case "$ACTION" in
- 'start')
- [ -n "$VERBOSE" -a -n "$INFO" ] && echo "$INFO"
- [ -n "$IF_PORT" ] && /sbin/ifport $DEVICE $IF_PORT
- if is_true $PUMP ; then
- log "/sbin/pump -i $DEVICE > /dev/null" || exit 1
- elif is_true $BOOTP ; then
- bootp_setup
- if [ -x /sbin/bootpc ] ; then
- eval `/sbin/bootpc --bootfile '' --returniffail \
- --timeoutwait 10 --dev $DEVICE`
- log /sbin/ifconfig $DEVICE down
- if [ -n "$GATEWAYS" ] ; then
- set - $GATEWAYS ; GATEWAY=$1
- fi
- elif [ -x /sbin/pump ] ; then
- log "/sbin/pump -i $DEVICE > /dev/null" || exit 1
- else
- exit 1
- fi
- elif is_true $DHCP ; then
- bootp_setup
- HN=${DHCP_HOSTNAME:+-h $DHCP_HOSTNAME}
- if [ -x /sbin/dhcpcd ] ; then
- # This is a version check: I know it looks weird
- if /sbin/dhcpcd -XYZZY 2>&1 | grep -q DHCP ; then
- log "/sbin/dhcpcd -d $HN $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
- log "/sbin/dhcpcd $HN -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
- chmod og+r $RESOLV.N
- cat /etc/dhcpc/resolv.conf >> $RESOLV.N
- echo "# $DEVICE end" >> $RESOLV.N
- cat $RESOLV >> $RESOLV.N ; mv $RESOLV.N $RESOLV
- fi
- fi
- elif [ -x /sbin/dhclient ] ; then
- log "/sbin/dhclient $DEVICE >/dev/null 2>&1" || exit 1
- elif [ -x /sbin/pump ] ; then
- log "/sbin/pump $HN -i $DEVICE > /dev/null" || exit 1
- else
- exit 1
- fi
- fi
- if [ -n "$IPADDR" ] ; then
- # Basic network setup
- NM=${NETMASK:+netmask $NETMASK}
- BC=${BROADCAST:+broadcast $BROADCAST}
- MTU=${MTU:+mtu $MTU}
- log /sbin/ifconfig $DEVICE up $IPADDR $NM $BC $MTU
- if [ -n "$NETWORK" ] ; then
- /sbin/ifuser $DEVICE $NETWORK || \
- log /sbin/route add -net $NETWORK $NM dev $DEVICE
- elif [ -n "$GATEWAY" ] ; then
- /sbin/ifuser $DEVICE $GATEWAY || \
- log /sbin/route add $GATEWAY $DEVICE
- fi
- [ -n "$GATEWAY" ] && /sbin/route add default gw $GATEWAY metric 1
- fi
-
- # Update DNS stuff
- if [ -n "$DOMAIN$SEARCH$DNSSRVS$DNS_1$DNS_2$DNS_3" ] ; then
- echo "# $DEVICE begin" > $RESOLV.N
- chmod og+r $RESOLV.N
- [ -n "$DOMAIN" ] && echo "domain $DOMAIN" >> $RESOLV.N
- [ -n "$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 [ -n "$MOUNTS" ] ; then
- for MT in $MOUNTS ; do log mount -v $MT ; done
- fi
- if [ -n "$IPX_NETNUM" ] ; then
- log ipx_interface add $DEVICE $IPX_FRAME $IPX_NETNUM
- fi
- start_fn $DEVICE
- ;;
- 'stop')
- if [ -r "$NAMEFILE" ] ; then rm $NAMEFILE ; fi
- stop_fn $DEVICE
- if is_true $PUMP || is_true $BOOTP || is_true $DHCP || \
- [ -n "$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
- do_fuser -k -m $MT > /dev/null
- log umount -f -v $MT
- fi
- fi
- }
- mount -t nfs | sed -e 's/:.* on \(.*\) type .*/ \1/' | nfsstop
- [ -n "$IPX_NETNUM" ] && ipx_interface del $DEVICE $IPX_FRAME
- if is_true $PUMP ; then
- log pump -r -i $DEVICE
- elif is_true $DHCP ; then
- if [ -x /sbin/dhcpcd ] ; then
- PID=`cat /var/run/dhcpcd-$DEVICE.pid 2>/dev/null`
- if [ -n "$PID" ] ; then
- kill -TERM $PID
- sleep 2
- fi
- /sbin/dhcpcd -XYZZY 2>&1 | grep -q DHCP || \
- rm -f /var/run/dhcpcd-$DEVICE.pid
- elif [ -x /sbin/dhclient ] ; then
- PID=`cat /var/run/dhclient.pid 2>/dev/null`
- if [ -n "$PID" ] ; then kill -TERM $PID ; fi
- elif [ -x /sbin/pump ] ; then
- log /sbin/pump -r -i $DEVICE
- fi
- fi
- fi
- # Remove nameservers
- if grep -q "# $DEVICE begin" $RESOLV ; then
- sed -e "/# $DEVICE begin/,/# $DEVICE end/d" $RESOLV > $RESOLV.N
- mv $RESOLV.N $RESOLV
- fi
- log /sbin/ifconfig $DEVICE down
- ;;
- 'check')
- is_true $NO_CHECK && exit 0
- /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 && do_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 "$STATE" != "CLOSE" -a "$PORT" != "*" ] ; then\
- echo $HOST
- fi
- done
- }
- DESTS=`netstat -ntuw | getdests`
- /sbin/ifuser $DEVICE $DESTS && exit 1
- ;;
- 'cksum')
- if [ $WIRELESS = 1 ] ; then exit 1 ; fi
- chk_simple "$NEW_SCHEME,$SOCKET,$INSTANCE,$HWADDR" || exit 1
- ;;
- 'restart')
- [ -n "$IPADDR" ] && /sbin/ifconfig $DEVICE down up
- ;;
- 'suspend'|'resume')
- ;;
- *)
- usage
- ;;
- esac
- exit 0
|