Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1635719
  • 博文数量: 511
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-06 14:19
文章分类

全部博文(511)

文章存档

2016年(11)

2015年(61)

2014年(257)

2013年(63)

2012年(119)

分类: LINUX

2014-05-17 23:01:47

作者:gfree.wind@gmail.com
博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net
 
 
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
======================================================================================================
在前一篇文章中,学习了一个hook例子,ipv4_conntrack_defrag。并且看到前面遗留的一个netfilter规则的判断结果NF_STOLEN。

今天就看一下这个NF_STOLEN是什么意思。在前面的博文中,
  1.     /* Gather fragments. */
  2.     if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
  3.         enum ip_defrag_users user = nf_ct_defrag_user(hooknum, skb);
  4.         if (nf_ct_ipv4_gather_frags(skb, user))
  5.             return NF_STOLEN;
  6.     }
当nf_ct_ipv4_gather_frags返回不为0时,该规则的返回结果为NF_STOLEN。
跟踪nf_ct_ipv4_gather_frags->ip_defrag->ip_frag_queue->ip_frag_reasm。

得到结果,只有当IP分片重组成功时,nf_ct_ipv4_gather_frags才会返回为0。也就是说,当IP分片重组不成功,即IP分片被kernel分片模块缓存时,该函数返回为NF_STOLEN。

而当hook函数返回NF_STOLEN时,根据前面的博文,nf_iterate就会直接返回这个NF_STOLEN。

这样就明确了NF_STOLEN的含义:如字面意思所示,它意味着netfilter“偷”走了这个skb,原调用不应继续处理该skb,而由netfilter负责这个skb的维护。


到此,对netfilter的基本架构应该比较清楚了——我指的是我自己。这几篇文章也主要是学习了,我自己比较感兴趣的地方。如果还有朋友能提出其它有意思的地方,我会继续学习的。


谢谢。
阅读(860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~