sk_buff दो स्थानों पर है जहां वह अगले विखंडन डाटा स्टोर कर सकते हैं:अंतर
skb_shinfo(head)->frag_list
skb_shinfo(head)->frags[]
मई कोई इन दो तरीके विखंडन को संभालने के लिए बीच के मतभेदों को समझाएं।
धन्यवाद और शुभकामनाएँ!
sk_buff दो स्थानों पर है जहां वह अगले विखंडन डाटा स्टोर कर सकते हैं:अंतर
skb_shinfo(head)->frag_list
skb_shinfo(head)->frags[]
मई कोई इन दो तरीके विखंडन को संभालने के लिए बीच के मतभेदों को समझाएं।
धन्यवाद और शुभकामनाएँ!
दोनों अलग-अलग मामलों के लिए उपयोग किए जाते हैं।
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 है आईपी टुकड़े के लिए
कर्नेल 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()
देखें।
बहुत धन्यवाद @bjxt! आपकी व्याख्या बहुत स्पष्ट है। अब मुझे पता है कि वे कितने अलग हैं –