免费注册 查看新帖 |

Chinaunix

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

请问 NF_IP_LOCAL_OUT [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-23 08:59 |只看该作者 |倒序浏览
err = nf_hook(PF_INET, NF_IP_LOCAL_OUT, &skb, NULL,
                              skb->dst->dev, dst_output);
                if (unlikely(err != 1))
                        break;

遇到上面的代码 , 最后它使用unlikely判断err《》1, , nf_hook在什么情况下能返回1呢?这种情况出现的几率大?

论坛徽章:
0
2 [报告]
发表于 2009-09-23 09:21 |只看该作者
修改下问题:

NF_HOOK和nf_hook有什么区别 对okfn nf_hook是如何处理的?

论坛徽章:
0
3 [报告]
发表于 2009-09-23 09:24 |只看该作者
是不是nf_hook不会执行okfn也就是上面的dst_output

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2009-09-23 10:07 |只看该作者
原帖由 Arthur_ 于 2009-9-23 09:24 发表
是不是nf_hook不会执行okfn也就是上面的dst_output


执行完对应hook点上所有hook函数,并且都返回NF_ACCEPT, 就可以执行okfn了

论坛徽章:
0
5 [报告]
发表于 2009-09-23 11:01 |只看该作者
可是 :

static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb,
                          struct net_device *indev, struct net_device *outdev,
                          int (*okfn)(struct sk_buff *))
{
        return nf_hook_thresh(pf, hook, pskb, indev, outdev, okfn, INT_MIN, 1);
}


static inline int nf_hook_thresh(int pf, unsigned int hook,
                                 struct sk_buff **pskb,
                                 struct net_device *indev,
                                 struct net_device *outdev,
                                 int (*okfn)(struct sk_buff *), int thresh,
                                 int cond)
{
        if (!cond)
                return 1;
#ifndef CONFIG_NETFILTER_DEBUG
        if (list_empty(&nf_hooks[pf][hook]))
                return 1;
#endif
        return nf_hook_slow(pf, hook, pskb, indev, outdev, okfn, thresh);
}


其中nf_hook_slow也不会执行okfn

我感觉 小写的nf_hook只是执行hook函数并不会执行okfn

论坛徽章:
0
6 [报告]
发表于 2009-09-23 12:09 |只看该作者
究竟大写的NF_HOOK和小写的nf_hook有啥区别啥啥啥

[ 本帖最后由 Arthur_ 于 2009-9-23 12:18 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-09-23 12:29 |只看该作者
我自己 总结下: 小写的nf_hook不会执行okfn.


nf_hook作用如下: 仅仅重新执行一次该hook点的hook练。

nf_hook只在XFRM代码中有见。 使用它是因为报文经过封装(tunnelmode)esp/ah处理后,报文的3,4层内容发生了变化(相当新的报文),所以要nf_reset然后再次执行一次该点的hook

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2009-09-23 14:16 |只看该作者
说一下内核版本吧。我这里2.6.18的
我这里看到的是这样的:
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \
        NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN)

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2009-09-23 14:17 |只看该作者
NF_HOOK_THRESH宏有定义如下,最后要判断一下,进一步好调用okfn
#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;})

论坛徽章:
0
10 [报告]
发表于 2009-09-23 15:47 |只看该作者
一般都是用NF_HOOK的,nf_hook是底层函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP