分类: LINUX
2008-01-31 23:23:02
chinaunix网友2008-08-14 14:21:51
博主你好,很高兴你能在百忙之中回答我的问题,而且说的这么详细 假如我现在有这样一个需求,我在 IP_FORWARD 中注册一个钩子,利用 conntrack 的特性这里得到的数据包应该已经是 defrag 过的,我要把数据包 IP 层后的 payload 部分扩展到 65535bytes,然后再放走(后面填充自己的内容,校验和自己重新计算),再利用 conntrack 的功能自动分片。 在 2.6.23 内核中,我可以利用 skb_copy_expand 做出一个符合我大小的数据包,之后填充正确的结构,kfree_skb 掉之前的,返回系统正确的 skb 指针。 在 2.6.24 以后的内容中该如何作呢?虽然可以用 skb_put 来增加尾部数据空间,但 tailroom 不够的话怎么办啊?
xiaosuo2008-08-14 08:59:07
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3db05fea51cdb162cfa8f69e9cfb9e228919d2a9 从上面的记录来看,是Herbert Xu做出的更改,原因是没人用了。 至于你的问题,给你看一段注释(include/linux/netfilter/x_tables.h): /* Returns verdict. Argument order changed since 2.6.9, as this must now handle non-linear skbs, using skb_copy_bits and skb_ip_make_writable. */ unsigned int (*target)(struct sk_buff *skb,
chinaunix网友2008-08-14 05:34:19
借这个改变也问个问题,请博主解答一下 2.6.24 改变了 netfilter 的 target 部分,调用时由 **pskb 变成了 *skb,这样的话如果想在 netfilter module 中 clone 一个包作处理,然后返回给系统自己制作的包,是不是就无法实现了? 2.6.24 为什么要作这样的改变决定呢?我查了很多资料都没找到答案