2012-04-06 19 views
5

sk_buff दो स्थानों पर है जहां वह अगले विखंडन डाटा स्टोर कर सकते हैं:अंतर

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

मई कोई इन दो तरीके विखंडन को संभालने के लिए बीच के मतभेदों को समझाएं।

धन्यवाद और शुभकामनाएँ!

उत्तर

4

दोनों अलग-अलग मामलों के लिए उपयोग किए जाते हैं।

frags []

अपने डिवाइस बिखराव-इकट्ठा आई/ओ, और आप इसे डेटा आदि के संयोजन क्या करना चाहते हैं का समर्थन करता है जब .. आप 2 टुकड़ा तक के साथ शुरू frags [] संरचना को पॉप्युलेट कर सकते हैं nth खंड। पहला खंड हमेशा डेटा और पूंछ पॉइंटर्स द्वारा निर्दिष्ट किया जाता है। शेष टुकड़े फ्रैग [] संरचना में भरे हुए हैं। यदि आप स्कैटर इकट्ठा नहीं करते हैं, तो यह चर खाली है।

frag_list

यह IP टुकड़े की सूची है। यह ip_push_pending_frames के दौरान भर जाएगा। अपने sk_buffs इस व्यवस्था

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

ip_push_pending_frames बाद

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

सीधे शब्दों में

frags डाल कहा जाता है में हैं कहो [] मैं बिखराव-इकट्ठा के लिए कर रहे हैं/ओ बफ़र्स

frag_list है आईपी ​​टुकड़े के लिए

+0

बहुत धन्यवाद @bjxt! आपकी व्याख्या बहुत स्पष्ट है। अब मुझे पता है कि वे कितने अलग हैं –

2

कर्नेल 3.1 7

skb_shinfo (सिर) -> frags []

अपने एनआईसी एसजी आई/ओ __ip_append_data skb_shinfo करने के लिए उपयोगकर्ता अंतरिक्ष डेटा की प्रतिलिपि जाएगा (सिर) का समर्थन करता है -> frags, अन्यथा इस समारोह की सूची बनाएगा उपयोगकर्ता स्पेस डेटा से भरे skbs के और skbs> sk_write_queue में सभी skbs कतारबद्ध किया जाएगा।

skb_shinfo (सिर) -> frag_list

इस सदस्य आईपी टुकड़े द्वारा प्रयोग किया जाता है। sk-> sk_write_queue और में queued skbs के साथ frag_list को पॉप्युलेट करने के लिए ip_push_pending_frames()->ip_finish_skb() को देखें, frag_list को संसाधित करने के लिए ip_fragment() देखें।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^