2012-04-01 11 views
0

私はipパケットを作成し、それを必要な宛先に送信するカーネルモジュールを作成しています。私はで宣言されたip_forward()関数を使用しています。私は、コードをコンパイルしようとすると、私はエラーを取得:カーネルモジュール経由でipパケットを送信する

"ip_forward" undefined!

+0

ヘッダファイルが宣言されています......どの関数によってあなたのIPパケットを送信していますか....... – karan421

+0

net/ip.hで宣言され、/ net/ipv4で定義されています/ip_forward.c – sax0406

答えて

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; if(ip_queue_xmit(skb、fl)> = 0) printk(KERN_EMERG "Packet transmitted"); else printk(KERN_EMERG "Error"); – sax0406

+0

あなたはデバッグする必要があります。しかし、 'struct flowi * fl = NULL; fl-> u.ip4.saddr = 123456'はNULLポインタの逆参照で確実にクラッシュします。 – ugoren