RK:网络共存、Shell脚本

Platform: RK3288
OS: Android 5.1
Kernel: 3.10 

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

 2.1.网络共存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--- 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.网络优先等级

1
2
3
4
5
6
7
8
9
10
11
12
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  以太网检测脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/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模块信号图

 

4G保活

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/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

  

   

posted @   CrushGirl  阅读(776)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示