我修改了获得ndo_start_xmit
作为输入的虚拟网络设备的传输功能(struct sk_buff skb_one
)。
在传输流程中的某一点,我生成第二个 我想到了两种不同的方法。一个是队列 使用此方法,它在 第二种方法是使用 使用这种方法, 是否有可能实现这两个目标?struct sk_buff skb_second
。这个应该经过相同的流程skb_one
,因此它应该由我当前所在的虚拟设备发送。此外,它应该在 skb_one
之后发送。< / p>
skb_one
在: skb_second->next = skb_one->next;
skb_second->prev = skb_one;
skb_one->next = skb_frag;
skb_one
之后发送,但它不会通过虚拟网络设备的传输流。dev_queue_xmit(skb_second);
skb_second
会再次“传输”传输流,但会在skb_one
之前发送。
答案 0 :(得分:1)
dev_queue_xmit
最终会尝试获取该设备的xmit_lock
,但它会因为ndo_start_xmit
你已经拥有它而失败。
因此,在 NET_TX_SOFTIRQ
发出并skb_one
返回后,该框架将排队等候ndo_start_xmit
。
我错过了什么吗?