是否可能是直到配置绑定后才检测到链接?

是否可能是直到配置绑定后才检测到链接?

可能是:

ethtool ethx | grep detected

如果在 OS(Linux)端尚未配置 bond0,是否会显示“未检测到链接”?

ethtool 没有显示物理状态吗?

答案1

Ethtool 仅适用于物理以太网适配器。这意味着 bond0、tun0 和任何其他非物理网络设备的网络设备均无法与 ethtool 配合使用。

$ ethtool <eth?>

例如:

$ ethtool eth0

提供:

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes

答案2

我假设您想找到 NIC 的链路状态,而不是电缆插入插座的物理状况。(这可能无法找出。)

通过快速搜索,我认为你已经找到答案了。打开界面,等待它找到链接,如果有的话(这可能需要几秒钟),然后检查 、ethtoolcarrier和/或operstate中的输出/sys/class/net/$NIC/

ifconfig somenic up似乎发出了以下两个ioctl调用:

ioctl(4, SIOCGIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_BROADCAST|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0

也就是说,它设置了IFF_UP。基于这里,该设置实际上会导致设备初始化:

然后它通过(套接字 I/O 控制设置接口标志)设置IFF_UP位来打开接口。dev->flagioctl(SIOCSIFFLAGS)

但是,后一个命令(ioctl(SIOCSIFFLAGS))调用设备的打开方法。

就实际代码而言,驱动程序必须执行许多与字符和块驱动程序相同的任务。open 请求所需的任何系统资源并通知接口启动;

有类似的评论e1000e驱动源

/**
 * e1000e_open - Called when a network interface is made active
 * @netdev: network interface device structure
 *
 * Returns 0 on success, negative value on failure
 *                                                                                                                                                                           * The open entry point is called when a network interface is made
 * active by the system (IFF_UP).  At this point all resources needed
 * for transmit and receive operations are allocated, the interrupt
 * handler is registered with the OS, the watchdog timer is started,
 * and the stack is notified that the interface is ready.
 **/
int e1000e_open(struct net_device *netdev)  

这意味着没有办法有意义地找到未连接的网卡的链接状态向上,因为硬件甚至还没有被初始化。


当然,至少从理论上讲,一些驱动程序可能会表现不同,并在任何人设置之前初始化硬件IFF_UP,但在一般情况下这仍然无济于事。

相关内容