Linux カーネル 3.3.2 で仮想ネットデバイス ドライバーを作成しようとしています。ドライバーの一部の機能では、パケットを送信するときにルート情報が必要になるため、関数 skb_dst(struct sk_buff *) を使用して dst_entry ポインターを取得します。しかし、何をしても、ping を実行すると、いつでもskb_dst() は常に NULL を返します。理由はわかりませんが、このバグには 1 週間以上も悩まされました。誰でも私を助けることができますか?
質問する
725 次
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_sendmsg
net/ipv4/raw.c
于 2012-05-23T07:00:12.470 に答える