#! /bin/sh
#--------------------------------------------------------------
#To extract route data from DHCP option
#--------------------------------------------------------------
function set_static_routes()

{
while [ $# -ge 2 ] ;
  do
  # Inserting the route
  ip route add $1/32 via $2 dev $interface
  shift;
  shift;
  done
}

function set_classless_static_route()

{
while [ $# -gt 0 ] ;
  do
  prefix=$1;			#network prefix
  case $prefix in
    32|31|30|29|28|27|26|25		)
      dest=$2.$3.$4.$5
      gateway=$6.$7.$8.$9
      shift 9
      ;;
    24|23|22|21|20|19|18|17		)
      dest=$2.$3.$4.0
      gateway=$5.$6.$7.$8
      shift 8
      ;;
    16|15|14|13|12|11|10|9		)
      dest=$2.$3.0.0
      gateway=$4.$5.$6.$7
      shift 7
      ;;
    8|7|6|5|4|3|2|1			)
      dest=$2.0.0.0
      gateway=$3.$4.$5.$6
      shift 6
      ;;
    0					)
      dest=default
      gateway=$2.$3.$4.$5
      shift 6
      ;;
    *					)		#error
      echo "\"$1\", Unexpected DHCP classless network prefix value (fatal)"
      return 1
      ;;
    esac
  if [ "$gateway" != "0.0.0.0" ]; then
    via_arg="via $gateway" 
    fi
  ip route add $dest/$prefix $via_arg dev $interface
  done
}

case "$reason" in
  "BOUND"	)
    set_static_routes $new_static_routes
    set_classless_static_route $new_rfc3442_classless_static_routes
    set_classless_static_route $new_ms_classless_static_routes
    ;;
  "BOUND6"				|		\
  "REBIND6"				|		\
  "PREINIT6"				|		\
  "RELEASE6"				|		\
  "PREINIT"				|		\
  "RELEASE"				)		\
    ;;
  *		)
    echo "Unexpected reason (code=<$reason> bug?)"
    ;;
  esac
  




