rk3399 android以太网和wifi共存

Android 9

1.修改 frameworks/base/core/java/android/net/NetworkFactory.java

evalRequest 方法 注释两行

private void evalRequest(NetworkRequestInfo n) {if (VDBG) log("evalRequest");if (n.requested == false && n.score < mScore &&n.request.networkCapabilities.satisfiedByNetworkCapabilities(mCapabilityFilter) && acceptRequest(n.request, n.score)) {if (VDBG) log("  needNetworkFor");needNetworkFor(n.request, n.score);n.requested = true;Log.d(TAG, "needNetworkFor");} else if (n.requested == true &&(n.score > mScore || n.request.networkCapabilities.satisfiedByNetworkCapabilities(mCapabilityFilter) == false || acceptRequest(n.request, n.score) == false)) {if (VDBG) log("  releaseNetworkFor");Log.d(TAG, "releaseNetworkFor");//releaseNetworkFor(n.request);//注释//n.requested = false;//注释} else {if (VDBG) log("  done");}}

2.修改frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java文件修改 NETWORK_SCORE=30 降低优先级

这样以太网和wifi都能连接成功

Android 12 

frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetNetworkFactory.java

需要修改下面的得分

private static final SparseArray<TransportInfo> sTransports = new SparseArray();static {// LowpanInterfaceTracker.NETWORK_SCOREsTransports.put(NetworkCapabilities.TRANSPORT_LOWPAN,new TransportInfo(ConnectivityManager.TYPE_NONE, 30));// WifiAwareDataPathStateManager.NETWORK_FACTORY_SCORE_AVAILsTransports.put(NetworkCapabilities.TRANSPORT_WIFI_AWARE,new TransportInfo(ConnectivityManager.TYPE_NONE, 1));// EthernetNetworkFactory.NETWORK_SCOREsTransports.put(NetworkCapabilities.TRANSPORT_ETHERNET,new TransportInfo(ConnectivityManager.TYPE_ETHERNET, 70));// BluetoothTetheringNetworkFactory.NETWORK_SCOREsTransports.put(NetworkCapabilities.TRANSPORT_BLUETOOTH,new TransportInfo(ConnectivityManager.TYPE_BLUETOOTH, 69));// WifiNetworkFactory.SCORE_FILTER / NetworkAgent.WIFI_BASE_SCOREsTransports.put(NetworkCapabilities.TRANSPORT_WIFI,new TransportInfo(ConnectivityManager.TYPE_WIFI, 60));// TelephonyNetworkFactory.TELEPHONY_NETWORK_SCOREsTransports.put(NetworkCapabilities.TRANSPORT_CELLULAR,new TransportInfo(ConnectivityManager.TYPE_MOBILE, 50));}

frameworks\libs\net\common\device\android\net\NetworkFactoryLegacyImpl.java

原因是updateAgent变了

Android 9

private void updateAgent() {if (mNetworkAgent == null) return;if (DBG) {Log.i(TAG, "Updating mNetworkAgent with: " +mCapabilities + ", " +mNetworkInfo + ", " +mLinkProperties);}mNetworkAgent.sendNetworkCapabilities(mCapabilities);mNetworkAgent.sendNetworkInfo(mNetworkInfo);mNetworkAgent.sendLinkProperties(mLinkProperties);// never set the network score below 0.mNetworkAgent.sendNetworkScore(mLinkUp? NETWORK_SCORE : 0);}

Android12

private void updateAgent() {if (mNetworkAgent == null) return;if (DBG) {Log.i(TAG, "Updating mNetworkAgent with: " +mCapabilities + ", " +mLinkProperties);}mNetworkAgent.sendNetworkCapabilities(mCapabilities);mNetworkAgent.sendLinkProperties(mLinkProperties);// As a note, getNetworkScore() is fairly expensive to calculate. This is fine for now// since the agent isn't updated frequently. Consider caching the score in the future if// agent updating is required more oftenmNetworkAgent.sendNetworkScore(getNetworkScore());}
/*** Determines the network score based on the transport associated with the interface.* Ethernet interfaces could propagate a transport types forward. Since we can't* get more information about the statuses of the interfaces on the other end of the local* interface, we'll best-effort assign the score as the base score of the assigned transport* when the link is up. When the link is down, the score is set to zero.** This function is called with the purpose of assigning and updating the network score of* the member NetworkAgent.*/private int getNetworkScore() {// never set the network score below 0.if (!mLinkUp) {return 0;}int[] transportTypes = mCapabilities.getTransportTypes();if (transportTypes.length < 1) {Log.w(TAG, "Network interface '" + mLinkProperties.getInterfaceName() + "' has no "+ "transport type associated with it. Score set to zero");return 0;}TransportInfo transportInfo = sTransports.get(transportTypes[0], /* if dne */ null);if (transportInfo != null) {return transportInfo.mScore;}return 0;}

所谓共存就是让两个网络同时使用,如果想让哪个网络作为外网,则该网络优先级要高于内网的网络,即可达到外网用来上网的需求,那么要想共存,就必须到从低优先级网络切换到优先级高的网络时,不要做断开操作,即可达到,两个网络同时存在的需求,做到以上两点,我们便满足了2个网络同时存在,且使用优先级高的外网上网

到了android12已经废弃了这种直接的打分机制,使用了policy机制,具体可参考
packages/modules/Connectivity/service/src/com/android/server/connectivity/NetworkRanker.java
但由于这种评分机制涉及的条件比较多,对于我们做网络共存这个需求来说更加复杂,
对此android开发者也给我么预留了以前的评分方案,只要我们简单的将
USE_POLICY_RANKING = false; 即可

 /*** Find the best network satisfying this request among the list of passed networks.*/@Nullablepublic NetworkAgentInfo getBestNetwork(@NonNull final NetworkRequest request,@NonNull final Collection<NetworkAgentInfo> nais,@Nullable final NetworkAgentInfo currentSatisfier) {final ArrayList<NetworkAgentInfo> candidates = filter(nais, nai -> nai.satisfies(request));if (candidates.size() == 1) return candidates.get(0); // Only one potential satisfierif (candidates.size() <= 0) return null; // No network can satisfy this requestif (USE_POLICY_RANKING) {return getBestNetworkByPolicy(candidates, currentSatisfier);} else {return getBestNetworkByLegacyInt(candidates);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中UView中 u-form表单在v-for循环下如何进行表单校验

1、数据data格式 注&#xff1a;rule绑定的tableFromRule中要和表单tableFrom下面放置一个同名数组&#xff0c;确保u-form能找到 tableFrom: {tableData: [//数据详情列表]},tableFromRule: {//校验tableData: [//数据详情列表]},formRules:{localation:[{required: true,mes…

深入剖析HTTP和HTTPS代理在爬虫中的应用价值

在当今信息时代&#xff0c;数据是无处不在且极其宝贵的资源。对于从互联网上获取大量结构化或非结构化数据的需求而言&#xff0c;网络爬虫成为一种强有力的工具。然而&#xff0c;在实际操作过程中&#xff0c;我们常常会面临许多挑战和限制。   其中一个主要问题就是目标网…

微信小程序开发---网络数据请求

目录 一、小程序中网络数据请求的限制 二、发起get请求 三、发起post请求 一、小程序中网络数据请求的限制 具体有两个限制&#xff1a; &#xff08;1&#xff09;只能请求HTTPS类型的接口 &#xff08;2&#xff09;必须将接口的域名添加到信任列表中&#xff0c;在调试的时…

k8s 入门到实战--部署应用到 k8s

k8s 入门到实战 01.png 本文提供视频版&#xff1a; 背景 最近这这段时间更新了一些 k8s 相关的博客和视频&#xff0c;也收到了一些反馈&#xff1b;大概分为这几类&#xff1a; 公司已经经历过服务化改造了&#xff0c;但还未接触过云原生。公司部分应用进行了云原生改造&…

第 2 章 线性表 (线性表的静态单链表存储结构(一个数组只生成一个静态链表)实现)

1. 背景说明 A { c, b, e, g, f, d }B { a, b, n, f } 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_RET(ret) if (ret ! RET_OK) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n&…

Java网络编程( 一 )数据如何在网络上传输

数据如何在网络上传输 网络发展背景发送端和接收端网络协议分层封装 & 分用封装&#xff1a;分用&#xff1a; 传输补充&#xff08;数据链路层&#xff08;以太网&#xff09;&#xff09;&#xff1a;ARP协议 网络发展背景 单机阶段—>局域网阶段—>广域网阶段—&…

【区块链】DeFi是什么?大白话科普文

对于一些没有玩过区块链、或者说没有真金白银的体验过这个虚拟世界的小伙伴来说,这篇文章可以帮你了解 DeFi。致力于帮你在这个线上走出这一步。 当然这不是理财建议。 文章目录 前言什么是去中心化金融?有哪些 DeFi 项目DeFi由哪几部分构成?热门DeFi项目有哪些?前言 Def…

tomcat安装、部署JSPGOU项目、Tomcat多实例

安装 官网找包 Apache Tomcat - Welcome! tomcat 8 准备运行环境 安装tomcat catalina.sh 服务脚本管理文件 server.xml 主配置文件 修改8009&#xff08;删除注释&#xff09; 启动tomcat 访问 为了避免每次进入绝对路径启动tomcat 法二&#xff1a; 三&#xff1a;部署…

Docker 的分层文件系统

1 分层文件系统 UnionFS 联合文件系统 bootfs&#xff1a;boot file systemrootfs&#xff1a;root file system 分层文件系统 Docker镜像都是只读的&#xff0c;当容器启动时&#xff0c;一个新的可写层被加到镜像的顶部&#xff0c;这一层就是我们通常说的容器层&#xf…

手写Spring:第11章-容器事件和事件监听器

文章目录 一、目标&#xff1a;容器事件和事件监听器二、设计&#xff1a;容器事件和事件监听器三、实现&#xff1a;容器事件和事件监听器3.1 工程结构3.2 容器事件和事件监听器类图3.3 定义和实现事件3.3.1 定义事件抽象类3.3.2 定义应用上下文事件实现类3.3.3 上下文刷新事件…

汇川PLC学习Day1:跑马灯程序编写

汇川PLC学习Day1&#xff1a;跑马灯程序编写 一、 软件安装 进入官网下载软件 二、 使用帮助 三、 新建工程与功能代码实现 CtrlN 寻找内带输出模块的CPU并设置好工程名字与保存路径&#xff0c;语言选择想熟悉的类型 工程建立后&#xff0c;PLC_PRG即为用户编写程序文件…

如何优化网站SEO(提高排名和流量的3个小知识)

百度百科SEO简介&#xff1a;搜索引擎优化&#xff08;SearchEngineOptimization&#xff09;是指通过对网站内部结构、外部链接以及页面内容等进行调整&#xff0c;从而使其在搜索引擎中排名更靠前&#xff0c;从而带来更多的流量和曝光。SEO是数字营销中的重要一环&#xff0…

合并区间【贪心算法】

合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 class Solution {public int[][] merge(int[…

TCP Header都有啥?

分析&回答 源端口号&#xff08;Source Port&#xff09; &#xff1a;16位&#xff0c;标识主机上发起传送的应用程序&#xff1b; 目的端口&#xff08;Destonation Port&#xff09; &#xff1a;16位&#xff0c;标识主机上传送要到达的应用程序。 源端&#xff0c;目…

Jabbi的Rust学习日记(二)

特征&#xff1a; 就目前我学习到的rust知识来看&#xff0c;我认为rust有以下几个特征&#xff1a; 链式调用表达式强类型 use 使用use导入包&#xff0c;我觉得rust的导包和python的很像 main main函数是rust可执行程序最先执行的代码&#xff0c;可以说是程序的入口&…

mysql 8.0.34 部署问题记录

1. 安装包问题 mysql 社区版下载时需要下载与操作系统版本匹配的安装包&#xff0c;本次遇到的问题是现在的安装包与操作系统不匹配&#xff0c;安装时提示了依赖包未有安装&#xff0c;开发组直接使用nodeps 强行安装&#xff0c;导致安装后数据库有莫名问题&#xff0c;一直…

安全测试 —— 你了解WEB安全测试吗?

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

Docker镜像解析获取Dockerfile文件

01、概述 当涉及到容器镜像的安全时&#xff0c;特别是在出现镜像投毒引发的安全事件时&#xff0c;追溯镜像的来源和解析Dockerfile文件是应急事件处理的关键步骤。在这篇博客中&#xff0c;我们将探讨如何从镜像解析获取Dockerfile文件&#xff0c;这对容器安全至关重要。 02…

【数学建模】2023数学建模国赛C题完整思路和代码解析

C题第一问代码和求解结果已完成&#xff0c;第一问数据量有点大&#xff0c;经过编程整理出来了单品销售额的汇总数据、将附件2中的单品编码替换为分类编码&#xff0c;整理出了蔬菜各品类随着时间变化的销售量&#xff0c;并做出了这些疏菜品类的皮尔森相关系数的热力图&#…

力扣110 补9.7

110.平衡二叉树 用了2个函数&#xff0c;思路好想的。 class Solution { public boolean isBalanced(TreeNode root) { dfs(root); if(x>1) return false; else return true; } int x0; int dfs(TreeNode root){//…