2012-04-01 55 views
0

我正在写一个内核模块,它创建一个ip包并将其发送到所需的目的地。我正在使用在<net/ip.h>中声明的函数ip_forward()。当我尝试编译代码,我得到一个错误:通过内核模块发送ip包

"ip_forward" undefined!

+0

其中头文件被声明......你用哪个函数发送你的ip包........ – karan421 2012-04-01 08:06:13

+0

它在net/ip.h中声明并在/ net/ipv4中定义/ip_forward.c – sax0406 2012-04-02 06:16:54

回答

1

ip_forward不外传(无EXPORT_SYMBOL),所以你不能从内核模块中使用它。

它也是IP堆栈的内部函数,并不意味着直接调用它。它可能有各种各样的假设,这会给你带来麻烦。

也许试试ip_queue_xmit,虽然我不是100%确定它是可用的。

+0

编译的ip_queue_xmit没有任何错误。但是,当我尝试插入模块时,系统挂起,我必须重新启动。我正在调用该函数,如下所示: struct flowi * fl = NULL; FL-> u.ip4.saddr = 123456; fl-> u.ip4.daddr = 234567;如果(ip_queue_xmit(skb,fl)> = 0) printk(KERN_EMERG“Packet transmit”);其他 printk(KERN_EMERG“Error”); – sax0406 2012-04-04 03:57:35

+0

你需要调试......但是序列'struct flowi * fl = NULL; fl-> u.ip4.saddr = 123456'肯定会在NULL指针解引用时崩溃。 – ugoren 2012-04-04 06:33:58