4

カーネルモジュールの開発は初めてです。実際のデバイスがなくてもループバックモードで動作する疑似ネットワークドライバーを開発しようとしています。私の目標は、次の設定を使用することです。

iperf -s -u.........iperf -c 192.168.1.1 -p 5001 -u

====== .............. ===========

| ... if0 .... | ............. | ........ if1 ......... |

====== .............. ===========

 |              |
/|\            \|/
 |              |
  ---------------

ドライバーから2つのインターフェースを登録しました。次に、if1から受信したUDPパケットを変更して、if0で受信したように表示されるようにしました。ただし、すべてのudpifのudpポートをリッスンしているiperfサーバーアプリケーションには到達しません。しかし、if0でwiresharkを介してパケットをスニッフィングすると、パケットはif0で受信されているように見えます。しかし、何らかの理由で、ネットワークスタックを通過していません。

手がかりはありますか?ipチェックサムとudpチェックサムの両方が再計算および検証されました(wiresharkを使用)。netif_rxを使用して、他のインターフェイスハンドル(if0ハンドル)にパケットを示しています。

ネットワーク操作には、5つの関数ptrコールバック{open、close、xmit_start、get_stats&config}しか使用していません。また、チェックサムはUNNECESSARYに設定されています。NO_ARPを示すIFフラグが設定されています。

編集:IPアドレス出力

eth1:mtu 1500 qdisc

pfifo_fast状態UPqlen1000リンク/エーテル00:e0:ff:00:00:e0 brd

ff:ff:ff:ff:ff:ff inet 192.168.1.1/24brd192.168.1.255スコープglobaeth1valid_lft

永遠にpreferred_lft永遠に4:

eth2:mtu 1500 qdisc pfifo_fast

状態UPqlen1000リンク/エーテル00:e0:ff:40:00:e0 brd ff:ff:ff:ff:ff:ff

inet 192.168.2.1/24brd192.168.2.255スコープグローバルeth2valid_lft

永遠にpreferred_lft永遠に

4

1 に答える 1

0

わかりました。わかりました。

考えないのはばかげています。ルーティングの問題により、パケットがドロップされました。

受信IFで受信されたパケットは、IFと同じネットワークを持っている必要があります。

したがって、IFに192.168.1.1/24がある場合、ルーティングシステムは192.168.1.X/24から発信されたパケットのみを受け入れます。

シングルIFループバックを試してみるまで気づきませんでした。なぜそれが起こったのか誰かが説明できますか?

于 2012-11-27T14:22:42.420 に答える