zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/app/Script/scripts/wan_ipv6_config.sh b/ap/app/Script/scripts/wan_ipv6_config.sh
new file mode 100755
index 0000000..9098fab
--- /dev/null
+++ b/ap/app/Script/scripts/wan_ipv6_config.sh
@@ -0,0 +1,292 @@
+#!/bin/sh 
+
+path_sh=`nv get path_sh`
+. $path_sh/global.sh
+
+echo "input param is $1"
+echo "Info: wan_ipv6_config.sh $1 start" >> $test_log
+
+wan_addr_temp=`nv get $wan_if"ipv6_wan_ipaddr"`
+wan_addr=`echo $wan_addr_temp | sed 's/\/64//'`
+
+is_chinamobile_pd_diff=`nv get pd_chinamobile_enable`
+pd_chinamobile=`nv get pd_chinamobile`
+#prefix_len=`nv get pd_len_chinamobile`
+prefix_len=`nv get $wan_if"_ipv6_prefix_len"`
+
+b_dhcpv6stateEnabled=`nv get dhcpv6stateEnabled`
+b_dhcpv6statelessEnabled=`nv get dhcpv6statelessEnabled`
+b_dhcpv6statePdEnabled=`nv get dhcpv6statePdEnabled`
+
+############# »ñȡĬÈÏÍø¿ÚÃûÏà¹ØÐÅÏ¢ ############
+get_default_wan_info()
+{
+    wan_if_name=$1
+    wan_if=$defwan6_if
+    wan_addr=`nv get $wan_if"_ipv6_ip"`
+	def_cid=`nv get default_cid`
+	
+    if [ "$1" == "pswan" ]; then
+        ipaddr_type=`nv get "pdp_act_type"$def_cid`
+    elif [ "$1" == "ethwan" ]; then
+        ipaddr_type=`nv get eth_act_type`
+    elif [ "$1" == "wifiwan" ]; then
+        ipaddr_type=`nv get wifi_act_type`
+    fi
+
+    #ÐèÒªÓõ½Ïà¹ØÅäÖÃÎļþ
+    dhcp6s_conf=$path_conf/dhcp6s_$wan_if.conf
+    radvd_conf=$path_conf/radvd_$wan_if.conf
+	radvd_pidfile=$path_tmp/radvd_$wan_if.pid
+    ndp_log=$path_conf/ndp_$wan_if.log
+
+    echo "test: default_wan_if_info = $wan_if, wan_addr:$wan_addr"
+}
+
+#############linkup  dhcpserver set############
+linkup_add_dns_to_dhcp6s_radvd_conf()
+{
+    # ipv6 dns set
+    ipv6_dns_mode=`nv get $wan_if_name"_ipv6_dns_mode"`
+    echo "ipv6_dns_mode:$ipv6_dns_mode"
+    echo "the input param  is $1"
+    
+    ipv6_prefer_dns=""
+    ipv6_standby_dns=""
+    if [ "-$ipv6_dns_mode" = "-auto" ];then
+     
+          ipv6_pridns_auto=`nv get $wan_if"_ipv6_pridns_auto"`
+          ipv6_secdns_auto=`nv get $wan_if"_ipv6_secdns_auto"`
+          
+            if [ -n "$ipv6_pridns_auto" ] && [ "-$ipv6_pridns_auto" != "-::" ] && [ "-$ipv6_pridns_auto" != "-::0" ];then
+                ipv6_prefer_dns=$ipv6_pridns_auto
+            fi
+            
+            if [ -n "$ipv6_secdns_auto" ] && [ "-$ipv6_secdns_auto" != "-::" ] && [ "-$ipv6_secdns_auto" != "-::0" ];then
+                ipv6_standby_dns=$ipv6_secdns_auto
+            fi
+
+    elif [ "-$ipv6_dns_mode" = "-manual" ];then
+            #¶ÔÓÚÊÖ¶¯DNS£¬Ò³ÃæÖ»ÄÜÉèÖõ½pswan¿Ú£¬ËùÒÔ¶ÔÓÚÊÖ¶¯dns£¬²»¹ÜºÎÖÖģʽ£¬ÔÝʱ¶¼È¡ÓÃpswanµÄÊÖ¶¯dnsµØÖ·
+            ipv6_pridns_manual=`nv get $pswan_if_name"_ipv6_pridns_manual"`
+            ipv6_secdns_manual=`nv get $pswan_if_name"_ipv6_secdns_manual"`
+            
+            if [ -n "$ipv6_pridns_manual" ] && [ "-$ipv6_pridns_manual" != "-::" ] && [ "-$ipv6_pridns_manual" != "-::0" ];then
+                ipv6_prefer_dns=$ipv6_pridns_manual
+            fi
+            
+            if [ -n "$ipv6_secdns_manual" ] && [ "-$ipv6_secdns_manual" != "-::" ] && [ "-$ipv6_secdns_manual" != "-::0" ];then
+                ipv6_standby_dns=$ipv6_secdns_manual
+            fi
+            
+      fi
+
+    if [ "-$ipv6_prefer_dns" == "-" -a "-$ipv6_standby_dns" == "-" ]; then
+        return
+    else
+        if [ -n "$1" ] && [ "$1" == "dhcp6s" ] ;then
+            echo -e "\toption dns_servers $ipv6_prefer_dns $ipv6_standby_dns;" >> $dhcp6s_conf
+        elif [ -n "$1" ] && [ "$1" == "radvd" ] ;then
+            # del last line
+            sed -i '$d' $radvd_conf
+            echo -e "\tRDNSS $ipv6_prefer_dns $ipv6_standby_dns\n\t{" >> $radvd_conf
+            echo -e "\t\tAdvRDNSSPreference 15;" >> $radvd_conf
+            echo -e "\t\tAdvRDNSSOpen on;" >> $radvd_conf
+            echo -e "\t};\n};" >> $radvd_conf
+        fi
+    fi
+}
+
+linkup_dhcpv6_server_set()
+{
+    dhcp6s_kill
+    rm -fr $dhcp6s_conf
+
+    if [ "-$is_chinamobile_pd_diff" = "-1" ] ; then
+        nv set pd_chinamobile=""
+        nv set pd_len_chinamobile=""
+        dhcp6c -dDf -z $wan_if &
+        for i in a b c d e; do
+          #sleep 1;
+          pd_chinamobile=`nv get pd_chinamobile`
+          if [ "-$pd_chinamobile" == "-" ]; then
+            echo "no pd get";
+          else
+            echo "pd get";
+            break;
+          fi
+        done
+        pd_chinamobile=`nv get pd_chinamobile`
+        prefix_len=`nv get pd_len_chinamobile`
+        if [ "-$pd_chinamobile" == "-" ]; then
+            dhcp6c_kill
+            prefix_len="64"
+        else
+          wan_addr=$pd_chinamobile
+          # here br0 is bind by dhcp6c, need to kill then run dhcp6s£¬need to fix
+          dhcp6c_kill
+          #sleep 1
+        fi
+    else
+        if [ "-$prefix_len" == "-" ]; then
+            prefix_len=64
+        fi
+        echo "not chinamobile"
+    fi
+    
+    ipv6_addr_conver "$wan_addr" "$wan_if"
+    dhcpv6_start=`nv get $wan_if"_dhcpv6_start"`
+    dhcpv6_end=`nv get $wan_if"_dhcpv6_end"`
+    prefix_info_temp=`nv get $wan_if"_ipv6_prefix_info"`
+    echo -e "interface br0 {" > $dhcp6s_conf
+    #dhcpv6 pd
+    if [ "-$b_dhcpv6statePdEnabled" = "-1" ];then
+        echo -e "\tserver-preference 255;\n\trenew-time 6000;" >> $dhcp6s_conf
+        echo -e "\trebind-time 9000;\n\tprefer-life-time 1300;" >> $dhcp6s_conf
+        echo -e "\tvalid-life-time 2000;\n\tallow rapid-commit;" >> $dhcp6s_conf
+        echo -e "\tlink br0 {\n\t\tallow unicast;\n\t\tsend unicast;" >> $dhcp6s_conf
+        echo -e "\t\tprefix $prefix_info_temp:/$prefix_len;\n\t};" >> $dhcp6s_conf
+        linkup_add_dns_to_dhcp6s_radvd_conf dhcp6s
+        echo -e "};" >> $dhcp6s_conf
+        dhcp6s -dDf -c $dhcp6s_conf $lan_if &
+        return
+    fi
+    #set up dhcpv6 addr pool
+    if [ "-$b_dhcpv6stateEnabled" = "-1" ];then
+        echo -e "\tserver-preference 255;\n\trenew-time 6000;" >> $dhcp6s_conf
+        echo -e "\trebind-time 9000;\n\tprefer-life-time 1300;" >> $dhcp6s_conf
+        echo -e "\tvalid-life-time 2000;\n\tallow rapid-commit;" >> $dhcp6s_conf
+        echo -e "\tlink br0 {\n\t\tallow unicast;\n\t\tsend unicast;" >> $dhcp6s_conf
+        echo -e "\t\tpool {\n\t\t\trange $dhcpv6_start to $dhcpv6_end/$prefix_len;" >> $dhcp6s_conf
+        echo -e "\t\t};\n\t};" >> $dhcp6s_conf
+        linkup_add_dns_to_dhcp6s_radvd_conf dhcp6s
+        echo -e "};" >> $dhcp6s_conf
+        dhcp6s -dDf -c $dhcp6s_conf $lan_if &
+    else
+        #slaac with dhcp statelessset dns info
+        if [ "-$b_dhcpv6statelessEnabled" = "-1" ];then
+            echo -e "\tlink br0 {\n\t};" >> $dhcp6s_conf
+            linkup_add_dns_to_dhcp6s_radvd_conf dhcp6s
+            echo -e "};" >> $dhcp6s_conf
+            dhcp6s -dDf -c $dhcp6s_conf $lan_if &
+        fi
+    fi
+}
+
+#############linkup  radvd set############
+linkup_radvd_set() 
+{
+    echo  "enter linkup_radvd_set "
+
+    if [ "-$is_chinamobile_pd_diff" = "-1" ] ; then
+        pd_chinamobile=`nv get pd_chinamobile`
+        prefix_len=`nv get pd_len_chinamobile`
+        if [ "-$pd_chinamobile" == "-" ]; then
+            prefix_len="64"
+        else
+            wan_addr=$pd_chinamobile
+        fi
+    else
+        if [ "-$prefix_len" == "-" ]; then
+            prefix_len=64
+        fi
+        echo "not chinamobile"
+    fi
+    
+    rm -rf $radvd_conf
+    #wangming delete
+    if [ "-$b_dhcpv6stateEnabled" = "-1" -o "-$b_dhcpv6statePdEnabled" = "-1"];then
+        echo -e "interface br0\n{\n\tAdvSendAdvert on;" > $radvd_conf
+        echo -e "\tAdvManagedFlag on;\n};" >> $radvd_conf
+        radvd_kill
+		rm -rf $radvd_pidfile
+        radvd -d 3 -C $radvd_conf -p $radvd_pidfile &
+        echo  "leave linkup_radvd_set "
+        return
+    fi
+    
+    cp $path_ro/radvd_template.conf $radvd_conf
+	
+	sed  -i -e 's/#ipv6_wan_addr#\/64/#ipv6_wan_addr#\/#prefix_len#/g' $radvd_conf
+    sed  -i -e s/#ipv6_wan_addr#/$wan_addr/g $radvd_conf 
+    sed  -i -e s/#prefix_len#/$prefix_len/g $radvd_conf
+    sed  -i -e s/#adv_switch#/on/g $radvd_conf 
+
+    echo "copy radvd_template.conf"
+    echo "wan_addr:$wan_addr"
+    echo "prefix_len:$prefix_len"
+
+#slaac with dns info
+    if [ "-$b_dhcpv6statelessEnabled" = "-1" ];then
+        echo "use dhcpv6stateless for dns"
+    else
+        sed -i -e 's/AdvOtherConfigFlag on;/AdvOtherConfigFlag off;/g' $radvd_conf
+        linkup_add_dns_to_dhcp6s_radvd_conf radvd
+    fi
+
+    radvd_kill
+    #sleep 1
+	rm -rf $radvd_pidfile
+    radvd -d 3 -C $radvd_conf -p $radvd_pidfile &
+
+    echo  "leave linkup_radvd_set "
+}
+
+#############linkup resolve config set############
+linkup_route_set() 
+{
+    default_gw_addr_temp=`nv get $wan_if"_ipv6_gw"`
+    echo "ipv6_wan_default_gw = $default_gw_addr_temp"
+
+    echo 0 > /proc/sys/net/ipv6/conf/all/forwarding 
+
+    if [ -n "$default_gw_addr_temp" -a "-$default_gw_addr_temp" != "-::" ] ; then
+        ip -6 route add default via $default_gw_addr_temp dev $defwan6_rel
+    else
+        ip -6 route add default dev $defwan6_rel
+    fi
+    
+    nv set ipv6_br0_addr="::"
+    
+    ipv6_addr_conver "$wan_addr" "$wan_if"
+    
+    ipv6_br0_addr_tmp=`nv get ipv6_br0_addr`
+    echo "ipv6_br0_addr_tmp = $ipv6_br0_addr_tmp"
+    
+    ip -6 addr add  $ipv6_br0_addr_tmp/64 dev br0    
+    
+    #enable ipv6 packet forwarding
+    #sleep 3
+    echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+
+    #enable ipv6 neigh discovery proxy
+    echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
+    
+    ndp_kill
+    zte_ndp -a -s br0 -d "$wan_if" -l $ndp_log &
+    xlat_enable=`nv get xlat_enable`
+    if [ "-$xlat_enable" == "-1" ];then
+	route_info=`route|grep default`
+	if [ "$route_info" == "" ];then
+		xlat_prefix=`nv get xlat_prefix`
+		#chmod 777 /dev/net/tun
+		if [ "$xlat_prefix" == "" ];then
+			clatd -i $defwan6_if &
+		else
+			clatd -i $defwan6_if -p $xlat_prefix &
+		fi		
+		echo 1 > /proc/sys/net/ipv4/ip_forward
+		iptables -t nat -A POSTROUTING -o v4-$defwan6_if -j MASQUERADE
+		sleep 1
+		ip route add default dev v4-$defwan6_if
+	fi
+    fi
+}
+
+############ipv6 shell entry#################
+get_default_wan_info $1
+linkup_route_set 
+linkup_dhcpv6_server_set
+linkup_radvd_set
+#linkup_resolve_config_set #ÓÉzte_router¶ÔIPv4£¬IPv6ͳ¼Æ½øÐÐdnsµÄÏà¹Ø²Ù×÷
+