为什么last_rx总是0?

时间:2012-06-22 13:03:18

标签: c linux-kernel

我需要在last_rx结构中获取字段trans_startnet_device的值...但由于某种原因,dev->last_rx始终为0({{1}有一个有效的值)...这是为什么?是否有其他字段可以提供此值?

这是一个片段

trans_start

我正在使用linux内核2.6.35编写内核模块

3 个答案:

答案 0 :(得分:1)

我简单地说 dev->last_rx = jiffies; 它工作了! :d

struct net_device *dev;
dev = first_net_device(&init_net);

while (dev)
{

        dev->last_rx = jiffies;
        printk(KERN_ALERT "last received time is %li\n", dev->last_rx );
        printk(KERN_ALERT "last transmit time is %li\n", dev->trans_start );
        dev = next_net_device(dev);
}

答案 1 :(得分:0)

these docslast_rx当前未使用,因此驱动程序可能无法更新该值。

答案 2 :(得分:0)

简短回答您的问题是更新驱动程序。驱动程序负责更新值。在上面提到的文档中,它声明值是未使用的并且内核未使用它,但还有其他东西会使用它。如果要将arp轮询与绑定驱动程序一起使用,则需要它。

来自http://www.makelinux.net/ldd3/chp-17-sect-3

unsigned long trans_start;

unsigned long last_rx;

包含jiffies值的字段。驱动程序负责分别在传输开始和接收数据包时更新这些值。联网子系统使用trans_start值来检测发送器锁定。 last_rx目前尚未使用,但驱动程序仍应保留此字段以备将来使用。


在此处查看绑定驱动程序中对last_rx的引用: http://www.kernel.org/doc/Documentation/networking/bonding.txt