- 论坛徽章:
- 1
|
回复 11# jiufei19
关于我提出的这个问题,这两天我仔细思考了下代码,发现了loopback这个特殊场景,似乎可以解释我的疑问。
loopback环回设备接口由于是把数据报发给本机,所以其发送数据报函数比较特殊,它把skb稍加处理后,又转回给协议栈的数据报接收函数netif_rx。其发送函数的函数名是loopback_xmit,我们简单看看其定义:
135 static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
136 {
137 struct pcpu_lstats *lb_stats;
138
139 skb_orphan(skb);
...
162 netif_rx(skb);
163
164 return 0;
165 }
很显然,loopback_xmit最后会直接调用netif_rx函数,由于之前本地经过ip_fragment函数处理后的所有分段对应的skb都会携带IPSKB_FRAG_COMPLETE这个标记,因此这些skb在loopback设备发送后直接通过netif_rx返回给协议栈,那么这些返回的skb一定都有此标记。
|
|