struct ethtool_ops详解

郗鹏
2023-12-01

【get_settings】

【set_settings】

supported: SUPPORTED_10baseT_Half系列

advertising: ADVERTISED_10baseT_Half系列

speed: SPEED_10系列低16位

duplex: DUPLEX_HALF系列

port: PORT_TP系列

phy_address: PHY芯片的物理地址(0-31)

transceiver: XCVR_INTERNAL系列

autoneg: AUTONEG_DISABLE系列

mdio_support:ETH_MDIO_SUPPORTS_C22或者ETH_MDIO_SUPPORTS_C45

maxtxpkt:

maxrxpkt:

speed_hi:SPEED_10系列高16位,由于该值不是用位图来表示,所以可能超过16位

eth_tp_mdix: ETH_TP_MDI_INVALID系列

eth_tp_mdix_ctrl: ETH_TP_MDI_INVALID系列

lp_advertising:ADVERTISED_10baseT_Half系列,对端PHY芯片的能力

【get_drvinfo】

driver: 驱动的名字

version: 驱动的版本号

fw_version:有些复杂的EMAC有固件,此处提供其固件版本

bus_info: EMAC所挂载的总线信息,比如PCI,则提供pci_name(pci_dev)

其他成员现在已废弃

【get_regs_len】

返回寄存器空间的大小

【get_regs】

struct ethtool_regs中的version填写硬件的版本信息,dump的寄存器内容放在最后一个指针指向的内存空间

【get_wol】

【set_wol】

wolinfo->supported:WAKE_PHY系列,设备的wol能力

wolinfo->wolopts: WAKE_PHY系列,当前的wol设置

wolinfo->sopass: 唤醒密码,某些网卡提供此功能

【get_msglevel】

【set_msglevel】

获取和设置消息打印级别

【nway_reset】

重新进行PHY的自协商操作

【get_link】

获取PHY链路状态,一般直接调用ethtool_op_get_link()

【get_eeprom_len】

获取网卡固件大小

【get_eeprom】

根据struct ethtool_eeprom提供的参数从EEPROM中提取固件信息(包括读取位置offset以及读取长度len),同时返回EEPROM固件的幻术eeprom->magic;

【set_eeprom】

最后一个参数指针提供eeprom数据位置,struct ethtool_eeprom提供保存位置offset以及保存长度len,同时需要验证提供的eeprom->magic是否正确;

【get_coalesce】

【set_coalesce】

rx_coalesce_usecs: 一个包抵达后多久产生接收中断(以us为单位)

rx_max_coalesced_frames:产生接收中断前能接收到包的最大数量

rx_coalesce_usecs_irq:一个包抵达到接收中断服务程序处理完成之间的时间延时(以us为单位)?

rx_max_coalesced_frames_irq:中断服务程序处理过程中接收到包的最大数量?

tx_coalesce_usecs:包发送之后多久产生传输中断

tx_max_coalesced_frames:产生传输中断前所发送的数据包的最大数量

tx_coalesce_usecs_irq:

tx_max_coalesced_frames_irq:

stats_block_coalesce_usecs:内存中数据包统计区块刷新时间间隔

use_adaptive_rx_coalesce:允许自适应接收聚合

use_adaptive_tx_coalesce:允许自适应发送聚合

pkt_rate_low:数据包处理的低速门限(包数/秒)

rx_coalesce_usecs_low:当数据包处理速率低于低速门限时,一个数据包达到后多久才能产生接收中断

rx_max_coalesced_frames_low:当数据包处理速率低于低速门限时,产生接收中断前能接收到包的最大数量

tx_coalesce_usecs_low:当数据包处理速率低于低速门限时,包发送之后多久产生传输中断

tx_max_coalesced_frames_low:当数据包处理速率低于低速门限时,产生传输中断前所发送的数据包的最大数量

pkt_rate_high:数据包处理的高速门限(包数/秒)

rx_coalesce_usecs_high:当数据包处理速率高于高速门限时,一个数据包达到后多久才能产生接收中断

rx_max_coalesced_frames_high:当数据包处理速率高于高速门限时,产生接收中断前能接收到包的最大数量

tx_coalesce_usecs_high:当数据包处理速率高于高速门限时,包发送之后多久产生传输中断

tx_max_coalesced_frames_high:当数据包处理速率高于高速门限时,产生传输中断前所发送的数据包的最大数量

rate_sample_interval:聚合包速率采样间隔(以秒为单位)

【get_ringparam】

rx_max_pending:允许用户设置的接收缓存环实体的最大数量

rx_mini_max_pending:允许用户设置的接收缓存环实体的最小数量

rx_jumbo_max_pending:允许用户设置的用于jumbo帧接收的缓存环最大数量

tx_max_pending:允许用户设置的传输缓存环实体的最大数量

【set_ringparam】

rx_pending:实际用户设定值

rx_mini_pending:实际用户设定值

rx_jumbo_pending:实际用户设定值

tx_pending:实际用户设定值

注意当缓存环改变后,需要重新初始化网卡硬件和软件数据结构

【get_pauseparam】

epause->autoneg:当前网卡是否允许自协商

如果epause->autoneg非0,则epause->rx_pause和epause->tx_pause作为自协商的参数传递给对端;

如果epause->autoneg为0,则epause->rx_pause和epause->tx_pause强制硬件是否使用pause功能;

【set_pauseparam】

根据ethtool_pauseparam参数重新初始化网卡能力

【self_test】

根据ethtool_test->flag要求进行在线和或者离线自测试,包括读写内存、固件存储器、寄存去、PHY测试、回环测试等,测试结果标记到ethtool_test->flag中,返回的测试内容放到最后一个指针指向的内存空间;

参考enum ethtool_test_flags定义

【get_strings】

根据enum ethtool_stringset的要求返回描述符,只需关注ETH_SS_TEST和ETH_SS_STATS

【get_sset_count】

根据enum ethtool_stringset 的要求返回单元数量,对应于【get_strings】

【set_phys_id】

设置PHY芯片的指示方式

ETHTOOL_ID_ACTIVE:硬件需要自动指示链路状态LED

ETHTOOL_ID_ON:明确要求PHY点亮指示链路状态LED

ETHTOOL_ID_OFF:明确要求PHY熄灭指示链路状态LED

ETHTOOL_ID_INACTIVE:取消硬件自动指示链路状态LED功能

【get_ethtool_stats】

返回网卡的统计计数

【begin】

在所有其他ethtool操作之前先调用的函数

【complete】

在所有其他ethtool操作之后调用的函数

【get_priv_flags】

报告驱动特定的特征,是指dev_hw_feather?还没有驱动用到它

【set_priv_flags】

设置驱动特定的特征,还没有驱动用到它

【get_rxnfc】

【set_rxnfc】

struct ethtool_rxnfc成员说明:

cmd:ETHTOOL_GRXFH、ETHTOOL_SRXFH、ETHTOOL_GRXRINGS、ETHTOOL_GRXCLSRLCNT、ETHTOOL_GRXCLSRULE、ETHTOOL_GRXCLSRLALL、ETHTOOL_SRXCLSRLDEL、ETHTOOL_SRXCLSRLINS

flow_type:TCP_V4_FLOW系列

fs:网络流分类规则

rule_cnt:受影响的规则数量

rule_locs:用过的规则位置数组

data:命令相关的数据

ETHTOOL_GRXFH(得到接收流HASH配置信息)和ETHTOOL_SRXFH(设置接收流HASH配置信息)

设置阶段:data表示流hash字段掩码

ETHTOOL_GRXRINGS(得到可用的接收环或者队列数量)

返回阶段:data返回接收环或者接收队列的数量

ETHTOOL_GRXCLSRLCNT(得到接收分类规则数量)

返回阶段:rule_cnt返回定义规则的数量,data不为0时返回规则表的大小+RX_CLS_LOC_SPECIAL?

ETHTOOL_GRXCLSRULE(得到接收分类规则)

设置阶段:fs字段的location成员指示已存在规则的位置;

返回阶段:fs在返回时包含规则

ETHTOOL_GRXCLSRLALL(得到所有的接收分类规则)

设置阶段:rule_cnt为登记薄上的rule_locs指定用户缓冲区的阵列大小;

返回阶段:data返回规则表的大小,rule_cnt返回定义规则的数量,rule_locs返回定义规则的位置,驱动必须使用第二个传递参数来get_rxnfc() ,而不能用rule_locs

ETHTOOL_SRXCLSRLINS(插入接收分类规则)

设置阶段:fs指定要增加或者更新的规则,fs.location指定使用的位置或者一个特殊位置(RX_CLS_LOC_SPECIAL标记设置时);

返回阶段:fs.location返回实际规则的位置

RX_CLS_LOC_ANY:选择任何位置

RX_CLS_LOC_FIRST:选择第一个合适的位置(最大优先级)

RX_CLS_LOC_LAST:选择最后一个合适的位置(最小优先级)

其他标记暂未定义,驱动应返回-EINVAL

ETHTOOL_SRXCLSRLDEL(删除接收分类规则)

fs.location指定登记薄上已存在规则的位置

【flash_device】

写Flash映像到网卡设备的flash中,配合request_firmware函数拷贝映像数据到内核空间,再写到Flash中

【reset】

复位设备的部分功能

【get_rxfh_indir_size】

获取接收流HASH间接表的大小

【get_rxfh_indir】

获取接收流HASH间接表的内容

【set_rxfh_indir】

设置接收流HASH间接表的内容

关于rxfh_indir的功能,请参考《Introduction to Receive Side Scaling》

【get_channels】

【set_channels】

channel->max_rx:支持的最大接收队列数量

channel->max_tx:支持的最大发送队列数量

channel->rx_count:实际使用的接收队列数量

channel->tx_count:实际使用的发送队列数量

channel->max_other:支持的最大其他队列数量

channel->max_combined:支持的最大组合队列数量

channel->other_count:实际使用的其他队列数量

channel->combined_count:实际使用的组合队列数量

【get_dump_flag】

获取固件版本dump->version,dump标记dump->flag,dump长度dump->len

【get_dump_data】

获取dump数据

【set_dump】

设置dump私有标志

【get_ts_info】

获取时间戳、PTP硬件时钟能力

驱动不支持硬件传输时间戳功能时应调用ethtool_op_get_ts_info
info->so_timestamping设置为SOF_TIMESTAMPING_TX_HARDWARE系列

info->tx_types设置为enum hwtstamp_tx_types

info->rx_filters设置为enum hwtstamp_rx_filters

info->phc_index设置为ptp设备的索引号

【get_module_info】

返回被包含在插入光模块中的EEPROM的大小和类型

modinfo->type设置ETH_MODULE_SFF_8079系列

modinfo->eeprom_len设置为ETH_MODULE_SFF_8079_LEN系列

【get_module_eeprom】

获取插入光模块所带EEPROM内容,struct ethtool_eeprom指定检查的幻术、读取偏移、读取长度

【get_eee】

【set_eee】

eee:Energy-Efficient Ethernet

struct ethtool_eee字段分析:

supported:SUPPORTED_10baseT_Half系列

advertised:ADVERTISED_10baseT_Half系列

lp_advertised:ADVERTISED_10baseT_Half系列,对端的能力

eee_active:eee自协商结果

eee_enabled:是否启用eee模式

tx_lpi_enabled:是否允许向网卡设备周期性发送LPI信号以使其进入sleep模式

tx_lpi_timer:在发送LPI信号前的延时时间
————————————————
版权声明:本文为CSDN博主「43259260」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011955950/article/details/19030267

 类似资料: