Ethtool 结构元素以及它们是什么。它们上定义了哪些设置和信息

Ethtool Structs elements and what are they. What settings and info defined on them

我正在阅读来自 Intel E1000E 和 Realtek r1869 驱动程序的驱动程序代码。我为两者都安装了设备,

目前正在学习ethtool_ops。我知道 Ethtool 可以成为

Long story short, ethtool is a means to display and adjust generic NIC/driver parameters
(identification, the number of receive and transmit queues, receive and transmit offloads, you > name it) in a userspace application

但是如果你看一下结构 ethtool_ops 并不是所有的东西都是 crystal 清楚的

下面是一个 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,
        };

我不明白的是此页面上的一些信息,例如显示正在执行的设置。但是,当您查看结构时, much 毫无意义 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/monitoring-and-tuning-the-rx-ring-buffer_configuring-and-managing-networking

https://linoxide.com/linux-how-to/ethtool-command-with-examples/

所以我想知道如果我必须使用 ethtool 用户空间应用程序执行以下操作怎么办。那么哪个ethtool_ops函数处理这个

  1. 显示丢弃的数据包数量:为此,我在 RealTek 的 r8169 驱动程序中有 .get_ethtool_stats = rtl8169_get_ethtool_stats,。如果我错误地认为此信息由内核堆栈管理,请纠正我。

  2. 增加 RX 环形缓冲区以降低高丢包率。我不知道结构 ethtool_ops 的哪个成员处理这个

  3. 在最新的MAC和GMAC嵌入式设备中,可以通过'PAUSE'参数启用全双工流控制。

  4. 设置双工模式

  5. 哪些函数处理程序传输卸载,如用于分组发送的传输分段卸载

  6. TCP 分段卸载。

还有什么是结构中的ksettings操作

  1. 使用 ethtool -h 检查哪个命令负责相应的操作
  2. 查看 ethtool 源代码如何处理命令
  3. 在内核端签入net/ethtool/

一般提示:基本上没有网络驱动程序实现所有 ethtool 功能。