ethtool设置网卡速率后网卡状态变成down

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ethtool设置网卡速率后网卡状态变成down相关的知识,希望对你有一定的参考价值。

您好,在设置网卡速率后,网卡状态变成down的原因可能是由于网卡的驱动程序有问题,或者网卡的设置不正确。此外,网络环境可能存在问题,也可能是网卡本身的问题。因此,在设置网卡速率后,建议您检查网卡的驱动程序是否正确,检查网卡的设置是否正确,检查网络环境是否正常,以及检查网卡本身是否有问题。如果以上检查都没有问题,建议您重新安装网卡驱动程序,或者重新安装操作系统,以解决网卡状态变成down的问题。 参考技术A 的情况

可能的原因有以下几种:

1. 网卡驱动问题,比如网卡驱动版本不支持设置的速率。

2. 硬件原因,比如网卡的硬件不支持设置的速率,或者是由于硬件的限制而不能达到设置的速率。

3. 其他因素,比如网络环境,路由器等问题都可能导致网卡状态变成down。
参考技术B 在接口 down 掉后执行 ethtool 就获取不到任何信息了,这个问题有点奇怪。

根据我的经验,ethtool_ops 是在驱动 probe 的时候注册的,注册之后一直可以调用,除非它没有实现相应的接口。但是在这里明显不是没有实现的问题,毕竟接口在 up 的情况下 ethtool 能够正常获取信息。难不成这个驱动在 ndo_stop 函数中会重置 ethtool_ops,然后在 ndo_open 中重新注册吗?

问题的根本原因在哪里?
有了上面的猜想,我阅读了下接口 up、down 调用的驱动底层函数,没有发现与 ethtool_ops 相关的设定,搜索代码也没有搜出来,只搜出来在 probe 函数中设定 ethtool_ops 的代码。

这让我感到非常的不解,一段时间后我重新阅读 stmmac 驱动的代码,终于发现了问题的根本原因。

ethtool_ops 中的 begin 函数
我之前有阅读过 ethtool 执行过程中的代码,对于 ethtool 调用 ioctl 操作网卡的过程还算熟悉,但是我没有意识到 ethtool_ops 中 begin 函数的作用。

内核在 dev_ethtool 函数中分发 ethtool 的不同子命令,在分发子命令之前会调用 begin 函数(如果存在的话),如果 begin 函数返回值小于 0 ,dev_ethtool 函数将直接返回,子命令不会得到执行。

相关代码如下:

/* The main entry point in this file. Called from net/core/dev_ioctl.c */
int dev_ethtool(struct net *net, struct ifreq *ifr)
············
if (dev->ethtool_ops->begin)
rc = dev->ethtool_ops->begin(dev);
if (rc < 0)
return rc;

old_features = dev->features;

switch (ethcmd)
登录后复制

上述代码中

以上是关于ethtool设置网卡速率后网卡状态变成down的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎么看网卡的速度

linux 网卡状态命令mii-tool 和 ethtool

linux查看网卡信息 命令

Linux 系统网络设置问题汇总

使用ethtool工具来查看网卡是否工作

linux如何判断网络是百兆还是千兆