Chinaunix首页 | 论坛 | 博客
  • 博客访问: 957443
  • 博文数量: 376
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-13 08:42
文章分类

全部博文(376)

文章存档

2014年(11)

2013年(88)

2012年(260)

2011年(17)

分类:

2012-10-22 15:14:52

原文地址:ethtool和网卡驱动 作者:三点水兽

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对应的都是硬件操作,代码实现比较容易。

阅读(1968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~