# DHCP client script to add static routes offerred by DHCP server as per RFC3442
# For Debian GNU/Linux, put this file under /etc/dhcp3/dhclient-exit-hooks.d/
# Theppitak Karoonboonyanan <thep@linux.thai.net>

HexToDec() {
  hex=`echo $1 | sed 's/\(.\)/\U\1/g'`
  echo "ibase=16; $hex" | bc
}

if [ "x$new_unknown_121" != "x" ]; then
  i=1
  while true; do
    # read mask bits count
    bits=`echo $new_unknown_121 | cut -d':' -f$i`
    if [ "x$bits" = "x" ]; then
      return 0
    fi
    i=`expr $i + 1`

    # read network address
    bits=`HexToDec $bits`
    bytes=`expr $bits / 8`
    n=0
    net_addr=
    while [ $bytes -gt 0 ]; do
      b=`echo $new_unknown_121 | cut -d':' -f$i`
      if [ "x$b" = "x" ]; then
        return 1
      fi
      b=`HexToDec $b`
      net_addr="${net_addr}.$b"
      i=`expr $i + 1`
      n=`expr $n + 1`
      bytes=`expr $bytes - 1`
    done
    while [ $n -lt 4 ]; do
      net_addr="${net_addr}.0"
      n=`expr $n + 1`
    done
    net_addr=`echo $net_addr | sed -e 's/^.//'`

    # read router address
    n=0
    router_addr=
    while [ $n -lt 4 ]; do
      b=`echo $new_unknown_121 | cut -d':' -f$i`
      if [ "x$b" = "x" ]; then
        return 1
      fi
      b=`HexToDec $b`
      router_addr="${router_addr}.$b"
      i=`expr $i + 1`
      n=`expr $n + 1`
    done
    router_addr=`echo $router_addr | sed -e 's/^.//'`

    route add -net $net_addr/$bits gw $router_addr
  done
fi
