#! /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/ip link show dev $DEVICE | sed -ne 's/.*[[:space:]]\(..:..:..:..:..:..\)[[:space:]].*/\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
IPX_INTERFACE=ipx_interface

case "$ACTION" in

'start')
    [ -n "$VERBOSE" -a -n "$INFO" ] && echo "$INFO"
    start_fn $DEVICE
    ;;

'stop')
    if [ -r "$NAMEFILE" ] ; then rm $NAMEFILE ; fi
    stop_fn $DEVICE
    ;;

'check')
    is_true $NO_CHECK && exit 0
    /sbin/ip link show dev $DEVICE | grep -q UP || 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')
    ;;

'suspend'|'resume')
    ;;

*)
    usage
    ;;

esac

exit 0
