#!/bin/sh

# Don't do anything special if computer is already booted
if [ $$ -ne 1 ]
then
	exec /sbin/init.orig $*
	echo "FATAL ERROR: exec /sbin/init.orig failed" >&2
	exit 1
fi

# Don't do anything special if root is rw (ie master system).
if touch /test-rw
then
	rm /test-rw
	echo "WARNING: master system installed" >&2
	exec /sbin/init.orig $*
	echo "FATAL ERROR: exec /sbin/init.orig failed" >&2
	exit 1
fi
# Try and find configuration file
if [ -f /etc/diskless-image/config ]
then
  # mount /var/log/ksymoops as tmpfs
  mount -t tmpfs -o nr_inodes=24576,size=2M none /var/log/ksymoops
  # mount mnt as tmpfs for scanpartitions-knoppix
  mount -t tmpfs -o nr_inodes=24576,size=2M none /mnt
  # Get IP address, need to mount /proc first
  mount -n none /proc -t proc
  # create /dev in tmpfs
  mount -t tmpfs -o nr_inodes=24576,size=2M none /dev
  if [ -f /etc/diskless-image/dev.tgz ]; then
    cd /dev
    tar xzmf /etc/diskless-image/dev.tgz
    chmod 666 dsp*
    chmod 666 mixer*
	chmod 666 video*
	chmod 666 vbi*
    cd /
  else 
    mount -t proc proc /proc
    cp /sbin/MAKEDEV /dev
    cd /dev
    ./MAKEDEV generic
    cd /
    umount /proc
  fi
  #marked by Blake, Kuo-Lien Huang to detect multiple network cards
  #IP=`ifconfig | grep -A1 eth0 | grep -v eth0 | sed 's/^.*inet addr:\([0-9\.]\+\).*$/\1/'`
  NETDEVICES="$(cat /proc/net/dev | awk -F: '/eth.:|tr.:/{print $1}')"
  for DEVICE in $NETDEVICES
  do
    IP=`ifconfig | grep -A1 $DEVICE | grep -v $DEVICE | grep "inet" | sed 's/^.*inet addr:\([0-9\.]\+\).*$/\1/'`
    echo "Client IP address is $IP [$DEVICE]"
    if [ "$IP" != "" ]; then

      #NETWORK=`echo $IP | awk -F. '{print $1"."$2"."$3".0"; }'`
      NETMASK=`ifconfig $DEVICE | grep "Mask:" | awk '{ print $4; }' | cut -d: -f2`
      NETWORK=`/usr/bin/netmask -n $IP/$NETMASK | cut -d/ -f1 | awk '{print $1}'`
      if [ "$NETWORK" = "" ]; then 
        NETWORK=`echo $IP | awk -F. '{print $1"."$2"."$3".0"; }'`
      fi

      # public ip alias
      if [ -e /etc/diskless-image/public_ip.$NETWORK ]; then
        PUBLIC_IP=`grep "$IP" /etc/diskless-image/public_ip.$NETWORK | awk '{ print $2" netmask "$3; }'`
        PUBLIC_GW=`grep "$IP" /etc/diskless-image/public_ip.$NETWORK | awk '{ print $4; }'`
        if [ "$PUBLIC_IP" = "" ]; then
          PUBLIC_IP=`grep -i "$HWADDR" /etc/diskless-image/public_ip.$NETWORK | awk '{ print $2" netmask "$3; }'`
          PUBLIC_GW=`grep -i "$HWADDR" /etc/diskless-image/public_ip.$NETWORK | awk '{ print $4; }'`
        fi
        
        if [ "$PUBLIC_IP" != "" ]; then
          ifconfig $DEVICE:1 $PUBLIC_IP
          GW=`route -n | grep -e "^0\.0\.0\.0" | awk '{ print $2; }'`
          route del default gw $GW
          route add default gw $PUBLIC_GW dev $DEVICE
        fi
      fi

      exec /sbin/$NETWORK/init $*
      echo "WARRNING: exec /sbin/$NETWORK/init failed" >&2
    fi
  done
fi

echo "WARRNING: DRBL setup incomplete or network failed" >&2
exec /sbin/init.orig $*
echo "FATAL ERROR: exec /sbin/init.orig failed" >&2

