什么是 ethtool,它对可用的以太网 NIC 很重要。我可以将它从设备驱动程序中删除并仍然能够使用网络吗

What is ethtool and is it important for usable ethernet NIC. Can I remove it from device driver and still able to use network

我正在研究 realtek 设备驱动程序并遇到了像 ethtool_ops 这样的 ethtool 操作,操作对象中包含许多操作。以下是代码

        static const struct ethtool_ops rtl8169_ethtool_ops = {
                .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
                                 ETHTOOL_COALESCE_MAX_FRAMES,
                .get_drvinfo        = rtl8169_get_drvinfo,
                .get_regs_len       = rtl8169_get_regs_len,
                .get_link       = ethtool_op_get_link,
                .get_coalesce       = rtl_get_coalesce,
                .set_coalesce       = rtl_set_coalesce,
                .get_regs       = rtl8169_get_regs,
                .get_wol        = rtl8169_get_wol,
                .set_wol        = rtl8169_set_wol,
                .get_strings        = rtl8169_get_strings,
                .get_sset_count     = rtl8169_get_sset_count,
                .get_ethtool_stats  = rtl8169_get_ethtool_stats,
                .get_ts_info        = ethtool_op_get_ts_info,
                .nway_reset     = phy_ethtool_nway_reset,
                .get_eee        = rtl8169_get_eee,
                .set_eee        = rtl8169_set_eee,
                .get_link_ksettings = phy_ethtool_get_link_ksettings,
                .set_link_ksettings = phy_ethtool_set_link_ksettings,
                };

这些操作是什么

例如,提到了 eee,所以我对它与更高级别的层(如 ip 或 tcp)的匹配功能很感兴趣。

这些是什么:上面列表中的 coalescewolstatsksettingsts_infoeee。我相信它们与 OSI 模型的物理层有关,但如果你能告诉我它们实现了哪些更高级别的功能。对于每个这些功能匹配高级简要信息将是伟大的

例如 wol 类似于

Wake-on-LAN is an Ethernet or Token Ring computer networking standard that allows a computer to be turned on or awakened by a network message. > The message is usually sent to the target computer by a program executed > on a device connected to the same local area network, such as a smartphone. Wikipedia

而 Coalese 是

Packet coalescing is the grouping of packets as a way of limiting the number of receive interrupts and, as a result, lowering the amount of processing required.

请给我一些有关这些功能的内核 api 技术信息。谢谢

长话短说,ethtool 是一种显示和调整通用 NIC/driver 参数(标识、接收和传输队列的数量、接收和传输卸载等)的方法用户空间应用程序。一方面,内核 API 连接了 NIC 驱动程序(特别是通过 struct ethtool_ops)。另一方面,有一个名为 SIOCETHTOOLioctl 命令用户空间应用程序 可以使用它向 内核端并获得响应。

存在列举SIOCETHTOOL具体命令的子标识符,对应struct ethtool_ops的方法。从你的问题来看,应该解释的是struct ethtool_ops

我建议你看看include/linux/ethtool.h。在 struct ethtool_ops 的定义之前有一个注释部分。特别是:

 * @get_wol: Report whether Wake-on-Lan is enabled
 * @set_wol: Turn Wake-on-Lan on or off.  Returns a negative error code
 * @get_coalesce: Get interrupt coalescing parameters.  Returns a negative
 *  error code or zero.
 * @set_coalesce: Set interrupt coalescing parameters.  Supported coalescing
 *  types should be set in @supported_coalesce_params.
 *  Returns a negative error code or zero.
 * @get_ts_info: Get the time stamping and PTP hardware clock capabilities.
 *  Drivers supporting transmit time stamps in software should set this to
 *  ethtool_op_get_ts_info().
 * @get_eee: Get Energy-Efficient (EEE) supported and status.
 * @set_eee: Set EEE status (enable/disable) as well as LPI timers.

对于 WoL 功能和中断合并,这些简短的评论与您的​​问题中的解释基本一致。头文件中的其余注释也很有用。您可以参考他们以获得要点。

从用户空间的角度看一下 ethtool 机制可能也会派上用场。最常用的用户空间应用程序使用ethtool机制也被命名为ethtool;它在流行的发行版(Debian,Ubuntu,随你便)中作为一个包提供。这是包的 man 页面,其中包含有用的信息。例如:

ethtool -c|--show-coalesce devname

ethtool -C|--coalesce devname [adaptive-rx on|off]
      [adaptive-tx on|off] [rx-usecs N] [rx-frames N]
      [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N]
      [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N]
      [stats-block-usecs N] [pkt-rate-low N] [rx-usecs-low N]
      [rx-frames-low N] [tx-usecs-low N] [tx-frames-low N]
      [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N]
      [tx-usecs-high N] [tx-frames-high N] [sample-interval N]
-c --show-coalesce
      Queries the specified network device for coalescing
      information.

-C --coalesce
      Changes the coalescing settings of the specified network
      device.

总而言之,ethtoolcommands/methods的意思,大家可以多看几处。这些命令(以及它们所服务的功能)不一定与 OSI 模型的物理层有关。有些可能超出了 OSI 模型的范围(如设备标识);有些可能对应于更高级别的 OSI 模型,例如,对数据包卸载的控制,如 TCP 分段卸载 RSS接收方缩放),等等。如果需要,可以单独讨论特定功能。