TIPS/LinuxKernel/skbのコピーとsk_buff構造体

Last-modified: 2007-09-14 (金) 01:04:52

コピー

skbのコピー関係は

  • skb_clone()
  • skb_copy()
  • pskb_copy()
  • ip_fragment()

の4箇所で発生する

skb_clone()

  • sk_buffの部分だけをコピーし、データバッファはshareする
  • skb_cloned()でクローンされているか(データバッファが共有か)を判断できる
  • sk_buffのコピーは関数内で直接行われる

skb_copy()

  • sk_buffの部分とデータバッファの全領域をコピーする
  • データバッファはfragmentされている場合は1つのバッファに結合する
  • sk_buffのコピーにはcopy_skb_header()を利用する

pskb_copy()

  • sk_buffの部分とデータバッファをコピーする
  • データバッファはfragmentされている場合先頭のみコピーし、他の領域はコピー元と先でshareする
  • sk_buffのコピーにはcopy_skb_header()を利用する

ip_fragment()

  • (FWパケット時)はsk_buff+データバッファをalloc+コピーしていく
  • sk_buffのコピーにはip_copy_metadata()を利用する