コピー
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()を利用する