免费注册 查看新帖 |

Chinaunix

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

netfilter中hook返回值NF_REPEAT和NF_STOLEN [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-12 15:33 |只看该作者 |倒序浏览
初次接触netfilter源码, 对这两个返回值的理解不大明白.故向各位大虾请教.

1. NF_REPEAT:
netfilter.c中
static unsigned int nf_iterate(struct list_head *head,
                               struct sk_buff **skb,
                               int hook,
                               const struct net_device *indev,
                               const struct net_device *outdev,
                               struct list_head **i,
                               int (*okfn)(struct sk_buff *))
{
        for (*i = (*i)->next; *i != head; *i = (*i)->next) {
                struct nf_hook_ops *elem = (struct nf_hook_ops *)*i;
                switch (elem->hook(hook, skb, indev, outdev, okfn)) {
                case NF_QUEUE:
                        return NF_QUEUE;

                case NF_STOLEN:
                        return NF_STOLEN;          

                case NF_DROP:
                        return NF_DROP;

                case NF_REPEAT:
                        *i = (*i)->prev;
                        break;

#ifdef CONFIG_NETFILTER_DEBUG
                case NF_ACCEPT:
                        break;

                default:
                        NFDEBUG("Evil return from %p(%u).\n",
                                elem->hook, hook);
#endif
                }
        }
        return NF_ACCEPT;
}

问题1:当前结点的hook如果返回NF_REPEAT,则回到上一个结点继续处理,而如果上一个结点的返回值是一个非法值,则不会break,又回到返回NF_REPEAT的结点,死循环?
问题2:体现在用户空间(iptables)中, NF_REPEAT会由哪个target触发?或者由什么条件触发hook返回该值?

2.NF_STOLEN:
在网上搜索时,看到某些解释是: NF_STOLEN 忘掉该数据包   NF_DROP 丢弃该数据包
在内核源码中grep它的使用时, 类似以下代码
if (ret != NF_DROP && ret != NF_STOLEN
            && ((*pskb)->nh.iph->saddr != saddr
                || (*pskb)->nh.iph->daddr != daddr))
                return ip_route_me_harder(pskb) == 0 ? ret : NF_DROP;

我并未看出NF_STOLEN和NF_DROP有何不同, 都是不对数据包进行处理,那么
问题1. 在内核空间中NF_STOLEN和NF_DROP有何区别?
问题2. 在用户空间, NF_STOLEN会由什么条件触发HOOK返回该值?

论坛徽章:
0
2 [报告]
发表于 2008-06-12 15:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2008-06-13 11:13 |只看该作者
发错地方了, 应该发到程序开发区的内核源码区中. 但是移动不了.

论坛徽章:
0
4 [报告]
发表于 2008-06-14 18:06 |只看该作者
NF_DROP是丢弃该数据包,不在向上层传递
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP