RK:网络共存、Shell脚本


Platform: RK3288
OS: Android 5.1
Kernel: 3.10 

1.1.需求:a.以太网、4G网络共存,以太网可使用内外网    b.自动切网络
1.2.调试命令:网络连接 adb shell dumpsys connectivity 查看网络优先等级                   

 2.1.网络共存

--- a/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
+++ b/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
@@ -159,6 +159,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
     private static final boolean SAMPLE_DBG = false;
 
     private static final boolean LOGD_RULES = false;
+	private static final boolean LOGD_BLOCKED_NETWORKINFO = true;
+	private static final boolean ENABLE_NETWORK_COEXIST = true;
 
     // TODO: create better separation between radio types and network types
 
@@ -4039,7 +4041,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
             loge("Dead network still had at least " + nr);
             break;
         }
-        nai.asyncChannel.disconnect();
+        if (ENABLE_NETWORK_COEXIST) { 
+            log("Gatsby  gatsby Skip teardownUnneededNetwork: " + nai.name()); 
+        } else { 
+            nai.asyncChannel.disconnect(); 
+        } 
+
     }
 
     private void handleLingerComplete(NetworkAgentInfo oldNetwork) {

 2.2.网络优先等级

diff --git a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
index ab9c16a..2670e15 100755
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -82,7 +82,7 @@ import java.lang.Exception;
 class EthernetNetworkFactory {
     private static final String NETWORK_TYPE = "Ethernet";
     private static final String TAG = "EthernetNetworkFactory";
-    private static final int NETWORK_SCORE = 150;
+    private static final int NETWORK_SCORE = 30;
     private static final boolean DBG = true;
     private static final boolean VDBG = false;

3.1.network_control.sh  以太网检测脚本

#!/system/bin/sh

#ECHO="/system/bin/log -t policy_route"
ECHO=echo

iface_wlan=wlan0
iface_ethernet=eth0

#脚本得到gataway
#gataway =$(ip route show table eth0 | grep "default" | busybox awk '{print $3}')



#####################################################
##
##
##          思路
##   		| 判断是否插入网线
##		  |
##		  |有IP地址,ping DNS ok, 证明外网是通的
## eth0 UP|有IP地址,ping 3 times DNS fail, 证明外网线断开,down/up eth0
##		  |无IP地址,等待20s 获取IP地址,若还没有,可以上层出问题 down/up eth0
##
##
## eth0 down 不考虑这种情况
##
##
#####################################################
count_succ=0
count_fail=0
dwup_times=0

while [ 1 ]
do
	IF_DNUP=0
	ip=0
	iswireinsert=$(cat /sys/class/net/eth0/carrier)
	#$ECHO "#####################iswireinsert=$iswireinsert###############################"
	IF_DNUP=$(busybox ifconfig eth0 | grep "UP" | busybox awk '{print $1}')
	ip=$(busybox ifconfig eth0 | grep 'inet addr' | busybox sed 's/^.*addr://g' | busybox sed 's/Bcast.*//g')
	#$ECHO "#####################IF_DNUP=$IF_DNUP ip=$ip###############################"
    if [ "$iswireinsert" == "1" ]; then
    	
		    if [ "$IF_DNUP" == "UP" ]; then
		
						if [ "$ip" != "" ]; then
						
							#ping -c 3 -I $iface_ethernet 8.8.8.8
							ping -c 3 -I $iface_ethernet www.baidu.com
				        
							if [ "$?" == "0" ] ; then
								#count_succ=`busybox expr $count_succ + 1`
								#$ECHO "ping success $count_succ times"
								#$ECHO "ping success"
								count_fail=0
							else
								count_fail=`busybox expr $count_fail + 1`
								#$ECHO "ping fail $count_fail times"
								if [ "$count_fail" -eq 3 ]; then
									busybox ifconfig eth0 down
									sleep 1
									busybox ifconfig eth0 up
									sleep 15
									dwup_times=`busybox expr $dwup_times + 1`
									count_fail=0
								fi
							fi
						else
							#$ECHO "Link up, no ip address, wait for 15s"
							
							if [ "$ip" == "" ]; then
								#$ECHO "LinkDownUp to obain ip $ip"
								busybox ifconfig eth0 down
								sleep 1
								busybox ifconfig eth0 up
								sleep 15
							fi
						fi

				else
		        $ECHO "eth0 not LinkUp or The wire is not connected" 
		  	fi
  
  	else
        $ECHO "The wire is not insert" 
  	fi
	
	#$ECHO "DownUp_times = $dwup_times" 
    
  sleep 10

done
exit 0

3.2.network_check.sh 网络切换机制

当 以太网能 ping通外网 情况下,关闭4G模块上网功能  4G模块信号图标不显示
当 以太网不能 ping通外网  ping 的通 内网 情况下 ,开启4G模块上网功能 4G模块信号图

#!/system/bin/sh

#ECHO="/system/bin/log -t policy_route"
ECHO=echo

iface_wlan=wlan0
iface_ethernet=eth0
iface_ppp=ppp0

#脚本得到gataway
#gataway =$(ip route show table eth0 | grep "default" | busybox awk '{print $3}')



#####################################################
##
##
##          思路
##   		| 判断是否插入网线
##		  |
##		  |有IP地址,ping DNS ok, 证明外网是通的
## eth0 UP|有IP地址,ping 3 times DNS fail, 证明外网线断开,down/up eth0
##		  |无IP地址,等待20s 获取IP地址,若还没有,可以上层出问题 down/up eth0
##
##
## eth0 down 不考虑这种情况
##
##
#####################################################
count_succ=0
count_fail=0
dwup_times=0

while [ 1 ]
do
	IF_DNUP=0
	ip=0
	iswireinsert=$(cat /sys/class/net/eth0/carrier)
	#$ECHO "#####################iswireinsert=$iswireinsert###############################"
	IF_DNUP=$(busybox ifconfig eth0 | grep "UP" | busybox awk '{print $1}')
	ip=$(busybox ifconfig eth0 | grep 'inet addr' | busybox sed 's/^.*addr://g' | busybox sed 's/Bcast.*//g')
	#$ECHO "#####################IF_DNUP=$IF_DNUP ip=$ip###############################"
    if [ "$iswireinsert" == "1" ]; then
    	
		    if [ "$IF_DNUP" == "UP" ]; then
		
						if [ "$ip" != "" ]; then
						        
							ping -c 3 -I $iface_ethernet 8.8.8.8
							#ping -c 3 -I $iface_ethernet www.baidu.com
				        
							if [ "$?" == "0" ] ; then
								count_succ=`busybox expr $count_succ + 1`
								$ECHO "ping success $count_succ times"
								#$ECHO "ping success"
								
 								if ping -c 1 -I $iface_ppp www.baidu.com > /dev/null; then
	                                                           echo "$iface_ppp Ping is successful."
								   stop ril-daemon   
				 				fi								
								count_fail=0
							else
								count_fail=`busybox expr $count_fail + 1`
								$ECHO "ping fail $count_fail times"
								if [ "$count_fail" -eq 1 ]; then
									stop ril-daemon
									sleep 1
									start ril-daemon

								fi
							fi
						else
							#$ECHO "Link up, no ip address, wait for 15s"
							
							if [ "$ip" == "" ]; then
								$ECHO "LinkDownUp to obain ip $ip"
								#busybox ifconfig eth0 down
								#sleep 1
								#busybox ifconfig eth0 up
								#sleep 15
							fi
						fi

				else
		        $ECHO "eth0 not LinkUp or The wire is not connected" 
		  	fi
  
  	else
        $ECHO "The wire is not insert" 
  	fi
	
	#$ECHO "DownUp_times = $dwup_times" 
    
  sleep 10

done
exit 0

4G保活

#!/system/bin/sh

ECHO=echo
iface_ppp0=ppp0
model_power_class="/sys/class/xh_custom/xh_custom_gpio/device/xh_3g_power"
model_power_up=1
model_power_down=0
#####################################################
##
##
##      思路
##   		| 开机ping 外网DNS  2分钟轮询一次   轮询超过15次 模块重新上电 重新加载ril服务  重新加载ril服务超过24次则reboot机器
##
#####################################################

count_fail=0
ril_count=0

while [ 1 ]
do
	#ping -c 3 -I $iface_ppp0 8.8.8.8
ppp0_exits=`netcfg | grep ppp0 | busybox awk '{print $1}'`
	
if [ x$ppp0_exits == x$iface_ppp0 ];then
	
	ping -c 3 -I $iface_ppp0 www.baidu.com
    
	if [ "$?" == "0" ] ; then
		count_fail=0
		ril_count=0
	else
		count_fail=`busybox expr $count_fail + 1`
		$ECHO "ping fail $count_fail times"
		
		if [ "$ril_count" -eq 24 ]; then
			reboot
		fi 
		
		if [ "$count_fail" -eq 30 ]; then
			$ECHO  "$model_power_down" > "$model_power_class"
			sleep 5
			$ECHO  "$model_power_up" > "$model_power_class"
			sleep 5
			busybox pkill -f /system/bin/pppd	
			sleep 5
			stop ril-daemon
			sleep 5
			start ril-daemon
			sleep 180
			ril_count=`busybox expr $ril_count + 1`
			$ECHO "ril_count start $ril_count times"
			count_fail=0
		fi
	fi
fi
 
  sleep 120

done
exit 0

相关