在netfilter钩子中分割数据包

时间:2017-06-20 17:07:13

标签: linux-kernel netfilter

我正在编写一个netfilter挂钩,它会在数据包中添加一个填充,这样就可以增加数据包的大小。我希望padding与数据包的每个片段一起发生。因此,当钩子看到数据包大小超出MTU时,它应首先对数据包进行分段并将填充添加到每个片段。在netfilter钩子中执行此操作的最佳方法是什么?我试着调用ip_fragment(),但我无法给它一个正确的输出函数。

static int ip_fragment(struct sock *sk, struct sk_buff *skb,
                       unsigned int mtu,
                       int (*output)(struct sock *, struct sk_buff *));

我尝试了ip_output()函数,但它不起作用,因为它不是导出的符号。此外,我不确定这是否合法。

另一个问题是代码在钩子本身碎片化数据包并最终调用okfn()。我不想重新实现碎片代码,所以有更好的方法吗?

我还要尝试的另一种方法是,将数据包路由到具有较低MTU的命名空间中的接口,最后当它挂钩时,它已经具有正确的MTU。

tap0(MTU:1450)--->[veth0...namespaceX|def.namespace...veth1]----->eth0(MTU:1500)

是否有更简单有效的方法?

0 个答案:

没有答案