#!/bin/bash
# dhclient-script for Linux. Dan Halbert, March, 1997.
# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
# No guarantees about this. I'm a novice at the details of Linux
# networking.

# Notes:

# 0. This script is based on the netbsd script supplied with dhcp-970306.

# 1. ifconfig down apparently deletes all relevant routes and flushes
# the arp cache, so this doesn't need to be done explicitly.

# 2. The alias address handling here has not been tested AT ALL.
# I'm just going by the doc of modern Linux ip aliasing, which uses
# notations like eth0:0, eth0:1, for each alias.

# 3. I have to calculate the network address, and calculate the broadcast
# address if it is not supplied. This might be much more easily done
# by the dhclient C code, and passed on.

# 4. TIMEOUT not tested. ping has a flag I don't know, and I'm suspicious
# of the $1 in its args.

# 'ip' just looks too weird.  /sbin/ip looks less weird.
ip=/sbin/ip

make_dhclient_info(){

    cat /dev/null > /etc/dhclient/dhclient6-eth0.info.dhclient6
    chmod 644 /etc/dhclient/dhclient6-eth0.info.dhclient6
	echo IPV6ADDR=$new_ip6_address >>/etc/dhclient/dhclient6-eth0.info.dhclient6
	echo IPV6NETMASK=$new_ip6_prefixlen >>/etc/dhclient/dhclient6-eth0.info.dhclient6

	mv /etc/dhclient/dhclient6-eth0.info.dhclient6 /etc/dhclient/dhclient6-eth0.info
}

# Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
exit_with_hooks() {
  exit_status=$1
  if [ -f /etc/dhclient-exit-hooks ]; then
    . /etc/dhclient-exit-hooks
  fi
  exit $exit_status
}

# Invoke the local dhcp client enter hooks, if they exist.
if [ -f /etc/dhclient-enter-hooks ]; then
  exit_status=0
  . /etc/dhclient-enter-hooks
  # allow the local script to abort processing of this state
  # local script must set exit_status variable to nonzero.
  if [ $exit_status -ne 0 ]; then
    exit $exit_status
  fi
fi

###
### DHCPv4 Handlers
###

if [ x$new_ip_address != x ]; then
   new_ipaddr_arg="ipaddr $new_ip_address"
fi

if [ x$new_subnet_mask != x ]; then
  new_subnet_arg="mask $new_subnet_mask"
fi

if [ x$new_routers != x ]; then
  new_router_arg="gateway $new_routers"
fi

echo "Inside dhclient script"
echo $client
echo $interface
echo $new_ip_address

if [ x$client != x ] ; then
   new_client_name=$client
else  
   new_client_name="PIZZA"
fi

echo $new_client_name
 
if [ x$reason = xPREINIT ] ; then
  echo "PREINIT"
fi

if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
   [ x$reason = xREBIND ] || [ x$reason = xREBOOT ] ; then
   if [ x$reason = xBOUND ] ; then
      if [ x${new_ip_address} = x ] ; then
		echo "BOUND"
      fi

      echo "BOUND"
   /fabos/libexec/dhclient_bridge v4 add $new_client_name \
	$new_ipaddr_arg $new_subnet_arg $new_router_arg

   fi

   if [ x$reason = xREBIND ] || [ x$reason = xREBOOT ] ; then
      if [ x${new_ip_address} = x ] ; then
         echo "RENEW or REBIND"
      fi

      echo "RENEW or REBIND"
   /fabos/libexec/dhclient_bridge v4 add $new_client_name \
	$new_ipaddr_arg $new_subnet_arg $new_router_arg 

   fi

fi

if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
   || [ x$reason = xSTOP ]; then
   if [ x${old_ip_address} = x ] ; then
      echo "EXPIRE or RELEASE or STOP"
   fi

   /fabos/libexec/dhclient_bridge v4 del $new_client_name \
       $new_ip_address $new_subnet_mask
fi

# todo Have not handled timeout..

###
### DHCPv6 Handlers
###

if [ x$reason = xPREINIT6 ] ; then
  echo "PREINIT6"			
fi

if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then
    echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix}

fi

if [ x$reason = xBOUND6 ] ; then
  if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then
  echo "BOUND6"			
  fi

  make_dhclient_info	
  echo "BOUND6"
  /fabos/libexec/dhclient_bridge add /etc/dhclient/dhclient6-eth0.info
fi

if [ x$reason = xRENEW6 ] || [ x$reason = xREBIND6 ] ; then
  if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then
  echo "RENEW6 or REBIND6"			
  fi

  make_dhclient_info
  echo "RENEW6 or REBIND6"			
  /fabos/libexec/dhclient_bridge add /etc/dhclient/dhclient6-eth0.info

fi

if [ x$reason = xDEPREF6 ] ; then
  if [ x${new_ip6_prefixlen} = x ] ; then
  echo "DEPREF6"			
  fi

  make_dhclient_info
  /fabos/libexec/dhclient_bridge dep /etc/dhclient/dhclient6-eth0.info
fi

if [ x$reason = xEXPIRE6 -o x$reason = xRELEASE6 -o x$reason = xSTOP6 ] ; then
  if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then
   echo "EXPIRE or RELEASE or STOP"
  fi

  
  /fabos/libexec/dhclient_bridge del /etc/dhclient/dhclient6-eth0.info

fi

