good02xaut的笔记 https://bbs.21ic.com/?183157 [收藏] [复制] [RSS]

日志

ethtool和网卡驱动

已有 2828 次阅读2007-8-8 22:52 |个人分类:netdriver|系统分类:嵌入式系统

ethtool提供了linux下配置网卡的方法。当然,使用ethtool配置网卡参数时,要求内核驱动必须提供了ethtool接口!给个参考例子:

1000M网卡驱动tg3.c

static const struct ethtool_ops tg3_ethtool_ops = {
 .get_settings  = tg3_get_settings,
 .set_settings  = tg3_set_settings,
 .get_drvinfo  = tg3_get_drvinfo,
 .get_regs_len  = tg3_get_regs_len,
 .get_regs  = tg3_get_regs,
 .get_wol  = tg3_get_wol,
 .set_wol  = tg3_set_wol,
 .get_msglevel  = tg3_get_msglevel,
 .set_msglevel  = tg3_set_msglevel,
 .nway_reset  = tg3_nway_reset,
 .get_link  = ethtool_op_get_link,
 .get_eeprom_len  = tg3_get_eeprom_len,
 .get_eeprom  = tg3_get_eeprom,
 .set_eeprom  = tg3_set_eeprom,
 .get_ringparam  = tg3_get_ringparam,
 .set_ringparam  = tg3_set_ringparam,
 .get_pauseparam  = tg3_get_pauseparam,
 .set_pauseparam  = tg3_set_pauseparam,
 .get_rx_csum  = tg3_get_rx_csum,
 .set_rx_csum  = tg3_set_rx_csum,
 .get_tx_csum  = ethtool_op_get_tx_csum,
 .set_tx_csum  = tg3_set_tx_csum,
 .get_sg   = ethtool_op_get_sg,
 .set_sg   = ethtool_op_set_sg,
 .get_tso  = ethtool_op_get_tso,
 .set_tso  = tg3_set_tso,
 .self_test_count = tg3_get_test_count,
 .self_test  = tg3_self_test,
 .get_strings  = tg3_get_strings,
 .phys_id  = tg3_phys_id,
 .get_stats_count = tg3_get_stats_count,
 .get_ethtool_stats = tg3_get_ethtool_stats,
 .get_coalesce  = tg3_get_coalesce,
 .set_coalesce  = tg3_set_coalesce,
 .get_perm_addr  = ethtool_op_get_perm_addr,
};

100M网卡RTL8139驱动8139too.c

static const struct ethtool_ops rtl8139_ethtool_ops = {
 .get_drvinfo  = rtl8139_get_drvinfo,
 .get_settings  = rtl8139_get_settings,
 .set_settings  = rtl8139_set_settings,
 .get_regs_len  = rtl8139_get_regs_len,
 .get_regs  = rtl8139_get_regs,
 .nway_reset  = rtl8139_nway_reset,
 .get_link  = rtl8139_get_link,
 .get_msglevel  = rtl8139_get_msglevel,
 .set_msglevel  = rtl8139_set_msglevel,
 .get_wol  = rtl8139_get_wol,
 .set_wol  = rtl8139_set_wol,
 .get_strings  = rtl8139_get_strings,
 .get_stats_count = rtl8139_get_stats_count,
 .get_ethtool_stats = rtl8139_get_ethtool_stats,
 .get_perm_addr  = ethtool_op_get_perm_addr,
};

若要linux网卡驱动提供ethtool接口,必须首先分析ethtool.h里的数据结构。

由于ethtool对应的都是硬件操作,代码实现比较容易。

 

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)