#!/bin/sh

usage()
{
	echo "Usage :"
	echo "  start_radvd 1"
	echo "  start_radvd 2 <ipv6 prefix>"
	echo ""
}

if [ "$1" = "" ]; then
    usage
	exit 1
fi

killall radvd

lan_inf=$(uci -q -P /var/state get network.lan.ifname)
lo_inf=$(uci -q -P /var/state get network.loopback.device)

if [ "$1" = "1" ]; then
  conf_path="/etc/dhcp6/dhcp6c_radvd.conf"
  
  if [ -f $conf_path ]; then
    radvd -C $conf_path -m stderr_syslog -p /var/run/radvd.pid
  else
    echo "Fail to start radvd, because $conf_path isn't exist."
  fi
  
  # configure lan interface's global ipv6 address
  addr_path="/etc/dhcp6/dhcp6c_pf"
  if [ -f $addr_path ]; then
    pf_file=/etc/dhcp6/dhcp6c_pf	
	lo_addr=$(cat $pf_file | grep -m 1 "$lo_inf-addr" | awk '{print $2}') 
    lan_addr=$(cat $pf_file | grep -m 1 "$lan_inf-addr" | awk '{print $2}')
	ifconfig $lo_inf $lo_addr
    ifconfig $lan_inf $lan_addr
	
	#remove lan's ipv6 global address
    lan_ipv6=$(uci get ipv6.lan.global_addr)
    if [ $lan_ipv6 ]; then
      ifconfig $lan_inf del $lan_ipv6/64 
    fi   
  else
    # set routing only
	if [ -f $conf_path ]; then 
      old_ip6_prefix=$(cat $conf_path | grep -m 1 [p]refix | awk '{print $2}')
      ip -6 route add $old_ip6_prefix dev $lan_inf
	  #ip -6 route show dev $lan_inf | grep $old_ip6_prefix
	else
	  echo "Fail to configure routing, because $conf_path isn't exist."
	fi
  fi
elif [ "$1" = "2" ]; then
  ip6_prefix=$2
  ra_conf_file=/etc/dhcp6/tmp_radvd.conf
  tmp_file=/tmp/tmp_ip6_prefix
  echo $ip6_prefix > $tmp_file
  new_ip6_prefix=$(cat $tmp_file | awk 'FS="/" {print $1 "/64"}' )
  rm $tmp_file
  
  # generate radvd config
  echo "interface $lan_inf"  > $ra_conf_file
  echo "{" >> $ra_conf_file
  echo "   AdvSendAdvert on;"  >> $ra_conf_file
  echo "   AdvDefaultLifetime 1800;"  >> $ra_conf_file
  echo "" >> $ra_conf_file
  echo "   prefix $new_ip6_prefix"  >> $ra_conf_file
  echo "   {"  >> $ra_conf_file
  echo "     AdvOnLink on;"  >> $ra_conf_file
  echo "     AdvAutonomous on;"  >> $ra_conf_file
  echo "   };"  >> $ra_conf_file
  echo "};"  >> $ra_conf_file
  
  # start radvd
  radvd -C $ra_conf_file -m stderr_syslog -p /var/run/radvd.pid
  
  # set routing
  ip -6 route add $new_ip6_prefix dev $lan_inf
  #ip -6 route show dev $lan_inf | grep $new_ip6_prefix
  
fi