桥设备处理数据包时的一个疑问?
时间:2010-08-07
来源:互联网
本帖最后由 cuTlh 于 2010-08-07 19:15 编辑
在netif_receive_skb交给桥设备后,handle_bridge为什么还要调用deliver_skb去deliver给上层?
复制代码
看Kendo的一篇文章说是“pt_prev用于在共享SKB的时候提高效率”,抱歉原文找不到了 http://blog.csdn.net/zhaodm/archive/2006/12/25/1460041.aspx
但是这个skb既被上层协议处理函数使用,又被桥的处理函数(br_handle_frame)使用,不会有问题吗? 并且也没看懂怎么提高效率了?
在netif_receive_skb交给桥设备后,handle_bridge为什么还要调用deliver_skb去deliver给上层?
- static inline struct sk_buff *handle_bridge(struct sk_buff *skb,
- struct packet_type **pt_prev, int *ret,
- struct net_device *orig_dev)
- {
- struct net_bridge_port *port;
-
- if (skb->pkt_type == PACKET_LOOPBACK ||
- (port = rcu_dereference(skb->dev->br_port)) == NULL)
- return skb;
-
- if (*pt_prev) {
- *ret = deliver_skb(skb, *pt_prev, orig_dev);
- *pt_prev = NULL;
- }
-
- return br_handle_frame_hook(port, skb);
- }
但是这个skb既被上层协议处理函数使用,又被桥的处理函数(br_handle_frame)使用,不会有问题吗? 并且也没看懂怎么提高效率了?
作者: cuTlh 发布时间: 2010-08-07
这里pt_prev是在之前的
list_for_each_entry_rcu(ptype, &ptype_all, list) {
if (!ptype->dev || ptype->dev == skb->dev) {
if (pt_prev)
ret = deliver_skb(skb, pt_prev, orig_dev);
pt_prev = ptype;
}
}
list_for_each_entry_rcu(ptype, &ptype_all, list) {
if (!ptype->dev || ptype->dev == skb->dev) {
if (pt_prev)
ret = deliver_skb(skb, pt_prev, orig_dev);
pt_prev = ptype;
}
}
作者: linuxxtz 发布时间: 2010-08-07
遍历ptype_all中找到的ptype,而ptype_all是可以接受所有包的,如PACKET截包。
if (*pt_prev) {
*ret = deliver_skb(skb, *pt_prev, orig_dev);
*pt_prev = NULL;
}
这里是如果有这种情况需处理,就会把包上交给这种协议。
if (*pt_prev) {
*ret = deliver_skb(skb, *pt_prev, orig_dev);
*pt_prev = NULL;
}
这里是如果有这种情况需处理,就会把包上交给这种协议。
作者: linuxxtz 发布时间: 2010-08-07
回复 linuxxtz
噢,是的,您说的对!在br_handle_frame处理的时候会检查这个数据包是不是共享的,如果是的话就会clone数据buffer,然后再由桥模块进行处理。
复制代码
同样,在macvlan_handle_frame_hook点也是这样做的。谢谢!
噢,是的,您说的对!在br_handle_frame处理的时候会检查这个数据包是不是共享的,如果是的话就会clone数据buffer,然后再由桥模块进行处理。
- skb = skb_share_check(skb, GFP_ATOMIC);
- if (!skb)
- return NULL;
作者: cuTlh 发布时间: 2010-08-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28