ethtool 在 Linux 中的实现框架和应用(4)

root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: 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 auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on Supports Wake-on: g Wake-on: g Link detected: yes

实例 2,关闭网卡的自动协商并且查看修改结果。

清单 7,关闭网卡的自动协商并且查看修改结果

root@IMMV2-DEV4:~# ethtool -s eth4 autoneg off root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised auto-negotiation: No Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off Supports Wake-on: g Wake-on: g Link detected: yes

实例 3,关闭网卡的自动协商并且修改网卡的速率为 10Mb/s

清单 8,关闭网卡的自动协商并修改网卡速率为 10Mb/s

root@IMMV2-DEV4:~# ethtool -s eth4 autoneg off speed 10 root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised auto-negotiation: No Speed: 10Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off Supports Wake-on: g Wake-on: g Link detected: yes

ethtool 的其它功能可以根据其帮助信息规定的语法来实现,这里就不一一列举。

扩展 ethtool

根据 NIC 的一些特性,可以扩展 ethtool 来完成对网卡特殊功能的支持,一个典型的扩展应用就是增加 ethtool 对 SideBand 的支持功能,有关 SideBand 的介绍可以参考 IBM developerWorks 《浅谈 NCSI 及其在 Linux 上的实现

》。图 6 是一个通过添加自定义的 cmd 和对应的实现函数来完成 SideBand 的 select_channel,enable_channel 及 disable_channel 等功能的框图。以 select_channel 为例,可以通过如下的步骤来实现。

图 6, 扩展 ethtool 的 sideband 管理功能

图 6, 扩展 ethtool 的 sideband 管理功能

ethtool 的在用户空间和内核空间同时添加命令字 ETHTOOL_SELCHANNEL;

在 ethtool.ops 中添加与 ETHTOOL_SELCHANNEL 相对应的执行函数 ethtool_select_channel;

在 dev_ethtool 函数中实现 ethtool_select_channel() 功能,这个函数的功能是利用协议栈的包发送接口向 NIC 的 mac 层发送包装后的 NCSI 命令协议包,并且接受相应的回应 , 类似的对于 ethtool_enable_channel(),ethtool_disable_channel 都可以按照相同的方法来扩展,可以看出 ethtool 框架的扩展性是很好的,有利于开发人员根据实际需要来量身定制。

总结

ethtool 是一个 Linux 下功能强大的网络管理工具,本文首先介绍了这个工具的实现原理和方法,重点介绍了 IEEE802.3.22 中的 MII 管理寄存器和 MDIO/MDC 标准以及 Linux 网络驱动程序中对 ethtool 的支持,然后实例说明了利用这个工具管理网卡的方法,最后介绍了在 ethtool 框架上扩展 SideBand 管理的实例,可以作为广大开发人员的一个参考。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15830.html