Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2288207
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2009-01-07 09:36:34

NF_HOOK()宏在2.6中和2.4相比作了稍许变化:
2.6.17.11的定义:
#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh)        \
({int __ret;               \
if ((__ret=nf_hook_thresh(pf, hook, &(skb), indev, outdev, okfn, thresh, 1)) == 1)\
 __ret = (okfn)(skb);             \
__ret;})

#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \
 NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN)

2.4.26的定义:
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn)   \
(list_empty(&nf_hooks[(pf)][(hook)])     \
 ? (okfn)(skb)        \
 : nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn)))

一个主要差别就是在2.6的nf_hook_thresh()函数中不再调用okfn(),而是等nf_hook_thresh()函数执行成功后再单独调用okfn(),函数参数中的okfn()已经只是个摆设而已; 而在2.4中, 在nf_hook_slow()函数中如果该skb允许通过的话会主动调用okfn()。

此外2.6中的NF动作增加了NF_STOP,功能和NF_ACCEPT类似但强于NF_ACCEPT,一旦挂接链表中某个hook节点返回NF_STOP,该skb包就立即结束检查而接受,不再进入链表中后续的hook节点,而NF_ACCEPT则还需要进入后续hook点检查。
 
阅读(904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~