可能是:
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 的链路状态,而不是电缆插入插座的物理状况。(这可能无法找出。)
通过快速搜索,我认为你已经找到答案了。打开界面,等待它找到链接,如果有的话(这可能需要几秒钟),然后检查 、ethtool
或carrier
和/或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->flag
ioctl(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
,但在一般情况下这仍然无济于事。