1

フィールドlast_rxと構造体trans_startの値を取得する必要がありnet_deviceます...しかし、何らかの理由dev->last_rxで常に0(trans_start有効な値を持っています)...これはなぜですか?この値を与える別のフィールドはありますか?

これがスニペットです

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を使用してカーネルモジュールを作成しています

4

3 に答える 3

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);
}
于 2012-06-22T17:54:42.073 に答える
0

これらのドキュメントによると、last_rx現在は使用されていないため、ドライバーがその値を更新していない可能性があります。

于 2012-06-22T16:42:35.330 に答える
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

于 2013-01-15T15:10:11.163 に答える