免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 14710 | 回复: 0
打印 上一主题 下一主题

关于ptype_all和pypte_base中的pt_prev的说明[转] [复制链接]

论坛徽章:
0
1 [报告]
发表于 2013-06-21 10:44 |显示全部楼层
我认为这个理解是不正确的。

首先我很怀疑linux内核设计者是不是会为了节省一个atomic_dec_and_test,而破坏代码的逻辑结构。

我认为:使用pt_prev是为了提升自定义packet_type的优先级,使之位于某些特殊处理之前执行,而内核默认的packet_type处理将位于这些特殊处理之后。

1.由于dev_add_pack的头插方式,导致循环ptype_all和ptype_base结束之后,pt_prev将指向内核默认的packet_type,例如:对于ptype_all ,默认是AF_PACKET;

2.在最后的pt_prev->fun(也就是内核默认处理)执行之前,可以附加特殊操作,例如:2.4.21中的handle_diverter(netif_receive_skb,net\core\dev.c:1498),和2.6.34中的VLAN处理(netif_receive_skb,net\core\dev.c:2574);

3.由于添加特殊处理的位置位于for循环之后和最后pt_prev之前,导致内核默认的packet_type将位于这些处理之后执行,而其他模块自定义的packet_type将位于这些处理之前执行(提升了优先级);

4.所有packet_type处理的都是采取pt_prev的方式,可能就是为了给添加这些特殊处理留下空间。

至于最后一段缺少atomic_inc(&skb->users);的处理片段,只是追求额外福利罢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP