2012-06-22 255 views
1

我需要在net_device結構中得到last_rxtrans_start字段的值...但由於某種原因,dev->last_rx始終爲0(trans_start有一個有效值)...爲什麼會這樣?是否有另一個字段提供此值?爲什麼last_rx總是0?

這裏有一個片斷

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

while (dev) 
{ 

     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); 
} 

我使用的是Linux內核2.6.35

回答

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); 
} 
0

these docs寫一個內核模塊,last_rx是當前未使用的,所以它可能是驅動程序未更新該值。

+0

也有另一種方式來獲得價值? –

0

簡短回答您的問題是更新驅動程序。驅動程序負責更新值。在上面提到的文檔中,它指出該值未被使用,並且內核未使用該值,但還有其他的東西會使用它。如果您想要使用綁定驅動程序使用arp輪詢,那麼它是必需的。

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

無符號長trans_start;

unsigned long last_rx;

持有jiffies價值的字段。驅動程序負責分別在傳輸開始和接收數據包時更新這些值。網絡子系統使用trans_start值檢測發射機鎖定。 last_rx目前尚未使用,但驅動程序仍應保留此字段以備將來使用。


看到引用在這裏bonding驅動last_rx: http://www.kernel.org/doc/Documentation/networking/bonding.txt

相關問題