- 论坛徽章:
- 0
|
本帖最后由 honkiko 于 2012-05-21 15:05 编辑
回复 17# markdong_007
你使用了pkt_gen发包吗? pkt_gen直接调 dev->netdev_ops->ndo_start_xmit()
还有一个可能,一个skb调用一次dev_queue_xmit, 会被加入到tx queue。然后在__qdisc_run()里面会循环调用sch_direct_xmit()。 关键在这个sch_direct_xmit函数里面:
如果dev_hard_start_xmit()的返回值不是NETDEV_TX_OK (而是NETDEV_TX_LOCKED或NETDEV_TX_BUSY), 会调用dev_requeue_skb()把这个skb重新加入tx queue,然后下次还会走到dev_hard_start_xmit()。
所以,如果你的ndo_start_xmit经常返回NETDEV_TX_LOCKED或NETDEV_TX_BUSY的话,就会造成两个counter的不一致。
你可以在rtl8139_start_xmit函数里专门加一个发送失败(NETDEV_TX_LOCKED或NETDEV_TX_BUSY)的counter, 然后看看这个counter的值,是不是就是dev_queue_xmit跟rtl8139_start_xmit调用次数之间的差别。 |
|