如何测试网络内核模块的tx_timeout操作?

时间:2014-11-18 11:11:25

标签: linux networking kernel driver watchdog

我对如何测试网络内核模块的操作tx_timeout有疑问。 例如,让我们从Linux设备驱动程序书的第14章中获取snull示例。

void snull_tx_timeout (struct net_device *dev)
{
    struct snull_priv *priv = (struct snull_priv *) dev->priv;

    PDEBUG("Transmit timeout at %ld, latency %ld\n", jiffies,
                    jiffies - dev->trans_start);
    priv->status = SNULL_TX_INTR;
    snull_interrupt(0, dev, NULL);
    priv->stats.tx_errors++;
    netif_wake_queue(dev);
    return;
}

及其初始化:

#ifdef HAVE_TX_TIMEOUT
dev->tx_timeout     = snull_tx_timeout;
dev->watchdog_timeo = timeout;
#endif

如何强制超时测试snull_tx_timeout()的实现?

我很高兴有任何建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

David Miller的

This email回答了这个问题。我使用其他网络设备驱动程序进行了测试,效果非常好。

测试tx_timeout的方法非常简单。如果您不将存储在缓冲区(或队列)中的软件包发送到硬件本身。因此,这些包将被累积,直到填充缓冲区或队列。可能无法存储(和发送)下一个数据包,在watchdog_timeo时间内抛出超时异常。