Fark

2012-04-06 21 views
5

sk_buff sonraki parçalanma verilerini saklayabilir iki yer vardır:Fark

skb_shinfo(head)->frag_list 
skb_shinfo(head)->frags[] 

birisi parçalanması işlemek için bu iki yolu arasındaki farkları açıklayınız olabilir.

Teşekkür ve Saygılarımızla!

cevap

4

Her ikisi de farklı durumlar için kullanılır.

frag []

cihazınız I/O ve bunu vb verilerin birleştirilmesi yapmak istiyorum dağınık toplamak destekler .. Eğer 2 fragmanı dek ile başlayan frag [] yapısını doldurabilirsiniz nth fragmanı. İlk parça her zaman veri ve kuyruk işaretçiler tarafından belirtilir. Fragmanların geri kalanı frags [] yapısında doldurulur. Dağılım toplamasını kullanmazsanız, bu değişken boştur.

frag_list

Bu IP parçacıkları listesidir. Bu ip_push_pending_frames sırasında doldurulur. [] frag_list olan

i dağınık toplamak için/vardır o tamponlar sizin sk_buffs ip_push_pending_frames sonra

sk_buff0->next = sk_buff1 
sk_buff1->next = sk_buff2 
... 
sk_buffn-1->next = sk_buffn 

sk_buff0->frag_list = sk_buff1 
sk_buff1->next = sk_buff2 
... 
sk_buffn-1->next = sk_buffn 

Basitçe

frag koymak adlandırılan bu müdürlüğünce olan Say ip parçaları için

+0

Çok teşekkürler Bjxt! açıklamanız çok açık. Şimdi ne kadar farklı olduklarını biliyorum. –

2

kernel 3.1 NIC __ip_append_data skb_shinfo kullanıcı alanı verileri kopyalar SG/Ç (baş) destekliyorsa> frag []

- -> frag, aksi takdirde bu işlevi bir liste yapacak (baş) 7

skb_shinfo kullanıcı alanı verileriyle dolu skbs ve skb> sk_write_queue içinde sıraya alınacaktır.

skb_shinfo (baş) -> frag_list

Bu üye IP parçacıkları kullanılır. SK-> sk_write_queue ve frag_list işlemek için çek ip_fragment() kuyruğa skbs ile frag_list doldurulmasına ilişkin kontrol ip_push_pending_frames()->ip_finish_skb().