Android16 打开热点和有线网后,关闭有线网出现ifconfig网络节点卡死解决

Android16 打开热点和有线网后,关闭有线网出现ifconfig网络节点卡死解决

文章目录

一、前言

Android16 在有些方案上,打开热点+打开有线网,并且两个节点都获取到ip的情况;

如果这时候关闭有线网,不管是使用上层接口,还是ifconfig eth0 down都是会导致网络节点卡死。

后续会出现:串口ifconfig卡死,app应用获取网络信息的界面卡死(五秒后ANR)

串口卡死如下图所示:

这个问题之前Android13 是有遇到过的,是问供应商分析解决的。

Android16 也遇到了,虽然解决过程不太一样,但是参考价值很大。

有兴趣的,收藏看看。

二、解决

这个解决方法是咨询供应商解决的。

内核目录:release\common\common16-6.12\XXX\stmmac_main.c

复制代码
	ret = stmmac_tc_init(priv, priv);
	if (!ret) {
		//ndev->hw_features |= NETIF_F_HW_TC; //把这行注释掉就可以了。
	}

这个文件是内核里面的,如果内核和系统分开的代码是搜不到的。

如果内核代码和系统代码是一起的,可以在release根目录搜索一下文件,

比如311D2 Android16:

复制代码
SY-3000-A311D2-AN16-GM-EDLA-IFPD/release$ find . -name stmmac_main.c
./common/common16-6.12/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/out/bazel/output_user_root/732ac6fbc8e9cd33c335a93a5d0c1eeb/sandbox/sandbox_stash/KernelHeaders/64/execroot/_main/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/out/bazel/output_user_root/732ac6fbc8e9cd33c335a93a5d0c1eeb/sandbox/sandbox_stash/KernelUapiHeaders/36/execroot/_main/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/common_drivers/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
SY-3000-A311D2-AN16-GM-EDLA-IFPD/release$     

排除out目录的文件,剩下的是这两个文件;

复制代码
./common/common16-6.12/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/common_drivers/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

之前Android13 在内核源码修改 common/drivers 下的stmmac_main.c文件就可以了;

但是在Android16 需要两个stmmac_main.c 都修改才有用;

具体原因无法进一步进行分析,因为我对内核的代码逻辑也是半窍不通。

之前311D2 Android13的代码,内核是分开的,只能内核底层开发人员进行编译处理。

不同方案和不同Android版本的代码估计都是有差异的,这个问题估计就是内核异常。

三、其他

1、小结

打开热点后和有线网后,关闭有线网会导致网络节点卡死,这个问题估计是资源占用有关。

关闭有线网后,不去释放正在占用的资源,就能规避解决;

解决方法是:在内核的 stmmac_main.c 文件中不设置 NETIF_F_HW_TC 属性。

有些方案安装上面的修改是有可能无法解决的,这个可以进一步咨询供应商。

2、相关思考

注释掉这里代码的作用是啥?

复制代码
	ret = stmmac_tc_init(priv, priv);
	if (!ret) {
		//ndev->hw_features |= NETIF_F_HW_TC; //把这行注释掉就可以了。
	}

这个我是看不懂的,只能AI看看了,这里把大概的理解搞下来看看:

复制代码
1. 第一行:ret = stmmac_tc_init(priv, priv); //驱动的硬件 TC 初始化函数
关键背景:TC 是什么?
TC(Traffic Control,流量控制)是 Linux 网络子系统的核心功能,
负责:流量调度、速率限制、队列管理、流量分类
2、后续逻辑判断
if (!ret) {  // 若硬件 TC 初始化成功(ret=0)
    ndev->hw_features |= NETIF_F_HW_TC;  // 向内核声明该网卡支持硬件 TC
}

开启支持硬件TC有什么好处:

复制代码
启用网卡的硬件流量控制(TC)加速功能,并向 Linux 内核注册该特性,最终实现:
提升网络性能:
	硬件直接处理流量调度 / 限速,不占用 CPU 资源,适合高带宽、低延迟场景(如视频通话、文件传输);
支持 QoS(服务质量):
	通过硬件级优先级调度,确保关键业务(如语音、控制信令)的数据包优先转发;
降低系统负载:
	避免内核通过软件 TC 处理大量数据包,减少 CPU 开销,提升系统整体响应速度。

所以注释了开启硬件TC,并不会造成很大影响,只会多使用一些cpu控制网络数据的流量。

3、之前也有打开网络共享后关闭有线网异常

不确定是否和这个TC加速有关。

复制代码
grep -nr "ndev->hw_features |= NETIF_F_HW_TC"

内核源码可以过滤这个内容看看其他文件还有什么是相关的。这个是瞎说的,需要自己验证。

相关推荐
网安小白的进阶之路6 小时前
B模块 安全通信网络 第一门课 园区网实现与安全-1
网络·安全
dragoooon348 小时前
[Linux网络——Lesson2.socket套接字 && 简易UDP网络程序]
linux·网络·udp
独行soc8 小时前
2025年渗透测试面试题总结-254(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
i_am_a_div_日积月累_8 小时前
websocket设置和断开机制
网络·websocket·网络协议
Eric_Makabaka8 小时前
计算机网络重要知识点
java·网络·计算机网络
武汉唯众智创9 小时前
网络安全教学升级!基于深度强化学习的动态对抗网络安全防护教学方案全解析
网络·人工智能·安全·web安全·生成对抗网络·网络安全
a123560mh9 小时前
服务器操作系统常见的系统参数调优方法
linux·服务器·网络·kylin
Jennifer33K10 小时前
WebSocket!!
网络·websocket·网络协议
一位搞嵌入式的 genius11 小时前
TLS协议深度解析:新一代网络安全传输标准
网络·计算机网络·安全·web安全·网络通信·tls协议
拾忆,想起13 小时前
Dubbo服务上线无法调用?一站式排查指南来了
服务器·网络·网络协议·tcp/ip·dubbo