2012-04-01 90 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