2

Linux カーネル 3.3.2 で仮想ネットデバイス ドライバーを作成しようとしています。ドライバーの一部の機能では、パケットを送信するときにルート情報が必要になるため、関数 skb_dst(struct sk_buff *) を使用して dst_entry ポインターを取得します。しかし、何をしても、ping を実行すると、いつでもskb_dst() は常に NULL を返します。理由はわかりませんが、このバグには 1 週間以上も悩まされました。誰でも私を助けることができますか?

4

3 に答える 3

2

その理由がわかりました!これは、kernel:IFF_XMIT_DST_RELEASEにフラグが追加されたためです。フラグが に設定された状態で仮想デバイスが割り当てられた場合0、カーネルは をデバイスに送信するときにルーティング情報をドロップしsk_buffます。Kristof Provost の返信に感謝し、質問が遅くなって申し訳ありません。

于 2012-11-29T11:49:26.267 に答える
1

Ping は RAW ソケットを使用します。それらはおそらくルーティング インフラストラクチャの一部をバイパスします。

raw_send_hdrincてみるraw_sendmsgnet/ipv4/raw.c

于 2012-05-23T07:00:12.470 に答える