में sk_buff पैकेट के सभी पेलोड को संसाधित करने का सही तरीका क्या है, मैं वर्तमान में एक एटीएम encapsulation परत डीबग करने की कोशिश कर रहा हूं जो ईथरनेट के शीर्ष पर चलता है। मूल रूप से एटीएम कोशिकाएं ईथरनेट हेडर के बाद व्यवस्थित होती हैं। हालांकि मुझे संदेह है कि ड्राइवर sk_buffs के लिए बेवकूफ दृष्टिकोण टूट गया है।लिनक्स
चालक आँख बंद करके मानता है कि skb-> डेटा के माध्यम से लेकिन virtio_net.c के लिए कर्नेल कोड को देख दोहराया जा सकता है: page_to_skb मैं निम्नलिखित व्यवहार देखें: पर आगे फिर
memcpy(hdr, p, hdr_len);
len -= hdr_len;
p += offset;
copy = len;
if (copy > skb_tailroom(skb))
copy = skb_tailroom(skb);
memcpy(skb_put(skb, copy), p, copy);
:
while (len) {
set_skb_frag(skb, page, offset, &len);
page = (struct page *)page->private;
offset = 0;
}
जो दिखाता है कि बफर को केवल पहले भाग को स्कैब-> डेटा से सीधे पहुंचने के साथ खंडित किया गया है।
अंतर्निहित डेटा प्राप्त करने के लिए मुझे क्या उपयोग करना चाहिए। आदर्श रूप से मैं एक पुनर्विक्रय बफर में रखे टुकड़ों को याद करने से पहले ईथरनेट पैकेट में मनमाने ढंग से ऑफसेट पर कुछ बाइट्स देखना चाहता हूं। ऐसा करने के लिए मुझे क्या उपयोग करना चाहिए?