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