3

複数のキューで skb バフをキューに入れたいです。そこで、クローンオプションを使用することを考えました。ここで私の質問は、クローン化されたskb で kfree_skb を実行した場合、元の skb を解放するか、それとも参照を 1 つ削除するかです。

ありがとう!

4

2 に答える 2

2

skb のクローンが作成されると、クローン化された sk_buff に新しいメモリが割り当てられ、クローンのすべてのstruct sk_buffメンバーがクローンに対してプライベートになります。ただし、データ、つまりパケットは、元の SKB とそのクローンの間で共有されます。したがって、sk_buff構造のみが新しいメモリにコピーされます。元の skb を解放すると、dataref カウントがゼロの場合、データが失われます。ここでデータはあなたのパケットです。

skb の解放時にデータを失いたくない場合は、skb_copy代わりにskb_clone:skb_copyを使用して、sk_buff とパケットの両方を新しいメモリ領域にコピーします。

編集: いくつかの修正を加えて以前の返信を編集します。

于 2013-11-12T17:13:40.573 に答える