[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/Script/scripts/config-udhcpd.sh b/ap/app/Script/scripts/config-udhcpd.sh
new file mode 100644
index 0000000..dfbd2c1
--- /dev/null
+++ b/ap/app/Script/scripts/config-udhcpd.sh
@@ -0,0 +1,271 @@
+#!/bin/sh
+#
+# $Id: config-udhcpd.sh,v 1.10 2010-06-18 06:33:21 steven Exp $
+#
+# usage: see function usage()
+
+path_sh=`nv get path_sh`
+. $path_sh/global.sh
+
+dhcp_type=$1
+
+usage () {
+  echo "usage: config-udhcpd.sh [option]..."
+  echo "options:"
+  echo "  -h              : print this help"
+  echo "  -s ipaddr       : set ipaddr as start of the IP lease block"
+  echo "  -e ipaddr       : set ipaddr as end of the IP lease block"
+  echo "  -i ifc          : set ifc as the interface that udhcpd will use"
+  echo "  -d dns1 [dns2]  : set dns1 and dns2 as DNS"
+  echo "  -m mask         : set mask as subnet netmask"
+  echo "  -g gateway      : set gateway as router's IP address"
+  echo "  -t time         : set time seconds as the IP life time"
+  echo "  -r [sleep_time] : run dhcp server"
+  echo "  -k              : kill the running dhcp server"
+  echo "  -S [mac ipaddr] : statically assign IP to given MAC address"
+
+  exit
+}
+
+config () {
+  case "$1" in
+    "-s")
+      sed -e '/start/d' $fname > $fbak
+      echo "start $2" >> $fbak ;;
+    "-e")
+      sed -e '/end/d' $fname > $fbak
+      echo "end $2" >> $fbak ;;
+    "-i")
+      sed -e '/interface/d' $fname > $fbak
+      echo "interface $2" >> $fbak ;;
+	"-p")
+      sed -e '/pidfile/d' $fname > $fbak
+      echo "pidfile $2" >> $fbak ;;
+	"-l")
+      sed -e '/lease_file/d' $fname > $fbak
+      echo "lease_file $2" >> $fbak ;;
+    "-d")
+      sed -e '/option *dns/d' $fname > $fbak
+      echo "option dns $2 $3" >> $fbak ;;
+    "-m")
+      sed -e '/option *subnet/d' $fname > $fbak
+      echo "option subnet $2" >> $fbak ;;
+    "-g")
+      sed -e '/option *router/d' $fname > $fbak
+      echo "option router $2" >> $fbak ;;
+    "-t")
+      sed -e '/option *lease/d' $fname > $fbak
+      echo "option lease $2" >> $fbak ;;
+    "-S")
+      if [ "$2" = "" ]; then
+        sed -e '/static_lease/d' $fname > $fbak
+      elif [ "$3" = "" ]; then
+	echo "insufficient arguments.."
+	usage
+      else
+        sed -e "/$2/d" $fname > $fbak
+        echo "static_lease $2 $3" >> $fbak
+		cat $fbak > $fname
+		rm -f $fbak
+		sed -e "/$2/d" $fname_static > $fbak_static
+        echo "$2 $3" >> $fbak_static
+		cat $fbak_static > $fname_static
+		rm -f $fbak_static
+	return
+      fi
+      ;;
+    "-x")
+      sed -e '/static_netmask/d' $fname > $fbak
+      echo "static_netmask $2" >> $fbak ;;
+    "-y")
+      sed -e '/static_router/d' $fname > $fbak
+      echo "static_router $2" >> $fbak ;;
+	"-D")
+      sed -e "/$2/d" $fname > $fbak 
+	  sed -e "/$2/d" $fname_static > $fbak_static 
+	  cat $fbak_static > $fname_static
+      rm -f $fbak_static;;
+	"-E")
+      while read LINE
+	  do
+		echo "static_lease $LINE" >> $fbak
+	  done < $fname_static ;;
+    *) return;;
+  esac
+  cat $fbak > $fname
+  rm -f $fbak
+  return
+}
+
+#  arg1:  phy address.
+link_down()
+{
+	# get original register value
+	get_mii=`mii_mgr -g -p $1 -r 0`
+	orig=`echo $get_mii | sed 's/^.....................//'`
+
+	# stupid hex value calculation.
+	pre=`echo $orig | sed 's/...$//'`
+	post=`echo $orig | sed 's/^..//'` 
+	num_hex=`echo $orig | sed 's/^.//' | sed 's/..$//'`
+	case $num_hex in
+		"0")	rep="8"	;;
+		"1")	rep="9"	;;
+		"2")	rep="a"	;;
+		"3")	rep="b"	;;
+		"4")	rep="c"	;;
+		"5")	rep="d"	;;
+		"6")	rep="e"	;;
+		"7")	rep="f"	;;
+		# The power is already down
+		*)		echo "Port$1 is down. Skip.";return;;
+	esac
+	new=$pre$rep$post
+	# power down
+	mii_mgr -s -p $1 -r 0 -v $new 2>>$test_log
+	if [ $? -ne 0 ];then
+	    echo "Error: mii_mgr -s -p $1 -r 0 -v $new" >> $test_log
+	fi
+}
+
+link_up()
+{
+	# get original register value
+	get_mii=`mii_mgr -g -p $1 -r 0`
+	orig=`echo $get_mii | sed 's/^.....................//'`
+
+	# stupid hex value calculation.
+	pre=`echo $orig | sed 's/...$//'`
+	post=`echo $orig | sed 's/^..//'` 
+	num_hex=`echo $orig | sed 's/^.//' | sed 's/..$//'`
+	case $num_hex in
+		"8")	rep="0"	;;
+		"9")	rep="1"	;;
+		"a")	rep="2"	;;
+		"b")	rep="3"	;;
+		"c")	rep="4"	;;
+		"d")	rep="5"	;;
+		"e")	rep="6"	;;
+		"f")	rep="7"	;;
+		# The power is already up
+		*)		echo "Port$1 is up. Skip.";return;;
+	esac
+	new=$pre$rep$post
+	# power up
+	mii_mgr -s -p $1 -r 0 -v $new 2>>$test_log
+	if [ $? -ne 0 ];then
+	    echo "Error: mii_mgr -s -p $1 -r 0 -v $new" >> $test_log
+	fi
+}
+
+reset_all_phys()
+{
+	sleep_time=$1
+
+	if [ "x$CONFIG_RAETH_ROUTER" != "xy" -a "x$CONFIG_RT_3052_ESW" != "xy" ]; then
+		return
+	fi
+
+	opmode=`nvram_get 2860 OperationMode`
+
+	#skip WAN port
+	if [ "x$opmode" != "x1" ]; then #no wan port
+		link_down 0
+		link_down 4
+	elif [ "x$CONFIG_WAN_AT_P4" = "xy" ]; then #wan port at port4
+		link_down 0
+	elif [ "x$CONFIG_WAN_AT_P0" = "xy" ]; then #wan port at port0
+		link_down 4
+	fi
+	link_down 1
+	link_down 2
+	link_down 3
+
+	#force Windows clients to renew IP and update DNS server
+	sleep $sleep_time
+
+	#skip WAN port
+	if [ "x$opmode" != "x1" ]; then #no wan port
+		link_up 0
+		link_up 4
+	elif  [ "x$CONFIG_WAN_AT_P4" = "xy" ]; then #wan port at port4
+		link_up 0
+	elif [ "x$CONFIG_WAN_AT_P0" = "xy" ]; then #wan port at port0
+		link_up 4
+	fi
+	link_up 1
+	link_up 2
+	link_up 3
+}
+
+# argv 1 is empty
+if [ "$1" = "" ]; then
+  usage
+fi
+
+# argv 2 is empty
+if [ "$2" = "" ]; then
+  if [ "$1" != "-r" -a "$1" != "-k" -a "$1" != "-S" ]; then
+      usage
+  fi
+fi
+
+
+if [ "x$1" == "xlan" ]; then
+    fname=$path_conf"/udhcpd.conf"
+    fbak=$path_conf"/udhcpd.conf_bak"
+    pidfile=$path_conf"/udhcpd.pid"
+    leases=$path_conf"/udhcpd.leases"
+else
+    fname=$path_conf"/udhcpd"$1".conf"
+    fbak=$path_conf"/udhcpd"$1".conf_bak"
+    pidfile=$path_conf"/udhcpd"$1".pid"
+    leases=$path_conf"/udhcpd"$1".leases"
+fi
+fname_static=$path_conf"/static_macip_file"
+fbak_static=$path_conf"/static_macip_file_bak"
+touch $fname  
+	
+case "$2" in
+  
+  "-r")
+    
+    if [ -e ${pidfile} ]; then
+      kill `cat $pidfile`
+    fi
+    rm -f $pidfile
+    touch $leases
+	sed '/^lease_file /d' $fname > $fbak
+	cat $fbak > $fname
+    echo "lease_file $leases" >> $fname
+    linenum=`cat $fname|wc -l`
+    if [ $linenum -ne 9 -a "$dhcp_type" == "lan" ]; then
+        . $path_sh/user-config-udhcpd.sh
+    fi
+    udhcpd -f $fname &
+	reset_all_phys $3
+		;;
+  "-h") usage;;
+  "-p") config "$2" "$3";;
+  "-l") config "$2" "$3";;
+  "-s") config "$2" "$3";;
+  "-e") config "$2" "$3";;
+  "-i") config "$2" "$3";;
+  "-d") config "$2" "$3" "$4";;
+  "-m") config "$2" "$3";;
+  "-g") config "$2" "$3";;
+  "-t") config "$2" "$3";;
+  "-S") config "$2" "$3" "$4";;
+  "-D") config "$2" "$3";;
+  "-E") config "$2";;
+  "-k")
+    if [ -e ${pidfile} ]; then
+      kill `cat $pidfile`
+    fi
+    rm -f $pidfile ;;
+  "-x") config "$2" "$3";;
+  "-y") config "$2" "$3";;
+  *) usage;;
+esac
+
+