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模块信号图
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 94 95 96 97 | #!/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保活
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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】