答案 0 :(得分:0)
在8139驱动程序的函数** rtl8139_start_xmit()**中,首先检查skb-> data的长度是否大于TX_BUF_SIZE,即MAX_ETH_FRAME_SIZE。如果它大于TX_BUF_SIZE,则驱动程序丢弃该数据包。
if (likely(len < TX_BUF_SIZE)) {
if (len < ETH_ZLEN)
memset(tp->tx_buf[entry], 0, ETH_ZLEN);
skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
dev_kfree_skb(skb);
} else {
dev_kfree_skb(skb);
tp->stats.tx_dropped++;
return 0;
}
通常,如果您尝试发送的数据包大于MAX_ETH_FRAME_SIZE,则协议堆栈的IP层将对数据包进行分段,就像您说“中断XXX”一样。但是当数据包发送给驱动程序时,它不会再被打破。