什么是 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)的匹配功能很感兴趣。
这些是什么:上面列表中的 coalesce
、wol
、stats
、ksettings
、ts_info
和 eee
。我相信它们与 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
)。另一方面,有一个名为 SIOCETHTOOL
的 ioctl 命令,用户空间应用程序 可以使用它向 内核端并获得响应。
存在列举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.
总而言之,ethtool
commands/methods的意思,大家可以多看几处。这些命令(以及它们所服务的功能)不一定与 OSI 模型的物理层有关。有些可能超出了 OSI 模型的范围(如设备标识);有些可能对应于更高级别的 OSI 模型,例如,对数据包卸载的控制,如 TCP 分段卸载 、RSS(接收方缩放),等等。如果需要,可以单独讨论特定功能。
我正在研究 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)的匹配功能很感兴趣。
这些是什么:上面列表中的 coalesce
、wol
、stats
、ksettings
、ts_info
和 eee
。我相信它们与 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
)。另一方面,有一个名为 SIOCETHTOOL
的 ioctl 命令,用户空间应用程序 可以使用它向 内核端并获得响应。
存在列举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.
总而言之,ethtool
commands/methods的意思,大家可以多看几处。这些命令(以及它们所服务的功能)不一定与 OSI 模型的物理层有关。有些可能超出了 OSI 模型的范围(如设备标识);有些可能对应于更高级别的 OSI 模型,例如,对数据包卸载的控制,如 TCP 分段卸载 、RSS(接收方缩放),等等。如果需要,可以单独讨论特定功能。