#!/bin/bash

###################################### DEFINITIONS ##########################################
# Defining paths and programs
RMMOD=/sbin/rmmod
INSMOD=/sbin/insmod
RTNET=/usr/local/rtnet/sbin/rtnet
DRIVERPATH=/lib/modules/2.6.15/kernel/drivers/net
RTAIPATH=/RTAI-3.3-cv/modules
IFCONFIG=/sbin/ifconfig
ROUTE=/sbin/route
IFUP=/sbin/ifup
IFDOWN=/sbin/ifdown

# Modules to load
MODULES="rtai_rtdm"
ULOADMODULES=
MODEXT=".ko"

# Network set-up
RT_DEVICE="eth0"
UL_DEVICE="eth1"

# Shutdown in progress?
SHUTDOWN=

###############################################################
#                                                             #
# Clean(): shuts down RTnet, unloads the loaded RTAI          #
# modules and re-loads the unloaded modules                   #
#                                                             #
###############################################################
function Clean() {
  if [ -z "$SHUTDOWN" ] ; then
    SHUTDOWN="1"
    echo "Shutting down RTnet..."
    $RTNET stop

    if [ -n "$ULOADMODULES" ] ; then
      for MODULE in $ULOADMODULES ; do
	echo "Unloading module $MODULE"
        $RMMOD -f $MODULE
      done
    fi

    if [ -n "$ARGS" ] ; then
      for ARG in $ARGS ; do
        echo "loading module $ARG"
        $INSMOD $DRIVERPATH/$ARG$MODEXT
      done
    fi

    echo "Starting normal network"
    $IFUP $UL_DEVICE
    $IFUP $RT_DEVICE
  fi
}

###################################### ACTUAL WORK ##########################################

# Trapping a CTRL-C and an exit from shell, to make sure rtnet will shut-down and the old situation is restored
trap 'Clean; exit 1' 2 EXIT

# Shutting down the network
$IFDOWN $UL_DEVICE
$IFDOWN $RT_DEVICE

# Numerating the arguments
ARGS=
if [ -n "$1" ] ; then
  while ARG=$1 ; ! [ -z "$ARG" ] ; do
    ARGS="$ARGS $ARG"
    shift
  done
fi

# Removing the NIC drivers
if [ -n "$ARGS" ] ; then
  for ARG in $ARGS ; do
    echo "removing module $ARG"
  $RMMOD $ARG
  done
fi

# Inserting the RTAI modules
for MODULE in $MODULES ; do
  $INSMOD $RTAIPATH/$MODULE$MODEXT
  ULOADMODULES="$MODULE $ULOADMODULES"
done

# Starting RTnet
echo "Starting RTnet..."
$RTNET start

# Trapping enter for a shutdown
echo -n "Press Enter to shut down RTnet "
read input;

# Enter pressed, cleaning up
Clean
echo "Shutdown done"

exit 1