#! /bin/sh

. "`dirname $0`/rcdefs"

MKIP="`dirname $0`/mkip"

case "`${BIN_UNAME} -r`" in
    0.* | 1.* | 2.0.*)
        route="y"
        ;;
    *)
        route="n"
        ;;
esac

case "$1" in
  start)
    while read dev bflag netaddr netbits gateway module
    do
      case "${dev}" in
      \#* | "") 
        continue
        ;; 
      *)   
        Print -n "Setting up network interface ${dev}... "

        # We could also rely on kerneld/kmod and config.modules but that would
        # mean putting config information into a file outside of our control.
        [ "${module}" != "none" ] && ModuleInsert ${module}

        network=`${MKIP} -n ${netaddr} ${netbits}`
	if [ ${gateway} != "none" ]
	then
		gwnetwork=`${MKIP} -n ${gateway} ${netbits}`
	else
		gwnetwork=${network}
	fi
	netmask=`${MKIP} -m ${netaddr} ${netbits}`
	broadcast=`${MKIP} -b ${netaddr} ${netbits}`

	if [ ${gwnetwork} = ${network} ]
	then
		${BIN_IFCONFIG} ${dev} ${netaddr} netmask ${netmask} \
			broadcast ${broadcast} up
		[ $route = "y" ] && ${BIN_ROUTE} add -net ${network} netmask ${netmask} dev ${dev}

		# If you run dhcpd you need this.
		[ "${bflag}" = "yes" ] && ${BIN_ROUTE} add \
			255.255.255.255 dev ${dev}

		[ "${gateway}" != "none" ] && ${BIN_ROUTE} add \
			default gw ${gateway}
	else
		${BIN_ROUTE} add -net ${network} netmask ${netmask} \
			gw ${gateway}
	fi
        Print "done."
        ;; 
      esac 
    done < "`dirname $0`/Networks"
    ;;
  stop)
    while read dev bflag netaddr netbits gateway module
    do
      case "${dev}" in
      \#* | "") 
        continue
        ;; 
      *)   
        Print -n "Shutting down network interface ${dev}... "
        network=`${MKIP} -n ${netaddr} ${netbits}`
	if [ ${gateway} != "none" ]
	then
		gwnetwork=`${MKIP} -n ${gateway} ${netbits}`
	else
		gwnetwork=${network}
	fi
	# If removing an interface destroys all its routes then the following
	# aren't necessary.
        #[ "${bflag}" = "yes" ] && ${BIN_ROUTE} del 255.255.255.255 dev ${dev}
        #[ $route = "y" ] && ${BIN_ROUTE} del -net ${network} dev ${dev}
	if [ ${gwnetwork} = ${network} ]
	then
		${BIN_IFCONFIG} ${dev} ${netaddr} down
	fi
        [ "${module}" != "none" ] && ModuleRemove ${module}
        Print "done."
        ;; 
      esac 
    done < "`dirname $0`/Networks"
    ;;
  *)
    Usage "$0"
    exit 1
esac

exit 0
