我对如何测试网络内核模块的操作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()
的实现?
我很高兴有任何建议。
谢谢!
答案 0 :(得分:1)
This email回答了这个问题。我使用其他网络设备驱动程序进行了测试,效果非常好。
测试tx_timeout
的方法非常简单。如果您不将存储在缓冲区(或队列)中的软件包发送到硬件本身。因此,这些包将被累积,直到填充缓冲区或队列。可能无法存储(和发送)下一个数据包,在watchdog_timeo
时间内抛出超时异常。