<div dir="ltr">2013/5/18 Adrian-Leonard Radu <span dir="ltr"><<a href="mailto:ady8radu@gmail.com" target="_blank">ady8radu@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Salut,<div><br></div><div>Am o nelamurire in legatura cu ce inseamna linear data si paged data in cadrul structurii sk_buff.</div><div><br></div><div>Din cate am inteles functia <i>sock_alloc_send_pskb(sk, hlen, dlen, nblock, err)</i> aloca un skb cu zona liniara de dimensiune hlen si zona paginata de dimensiune dlen. Din ce am inteles, portiunea unde vor fi scrise date efective va fi portiunea paginata. Nu am inteles daca zona paginata este cumva inclusa in zona liniara, deoarece <i>sock_alloc_send_pskb(sl, hlen, dlen ...) </i>apeleaza <span style>alloc_skb(hlen, GFP_KERNEL) ceea ce inseamna ca spatiul cuprins intre head si end va fi egal cu hlen (adica lungimea totala). Apoi nu inteleg de ce ar mai trebui actualizat skb->len.</span></div>
</div></blockquote><div><br></div><div style>Zona liniară și cea paginată sunt separate. Însă, pentru scopurile temei e necesară doar zona liniară. Atunci când copiezi datele din iovec în skb, ele sunt puse în zona liniară cu skb_copy_datagram_from_iovec().</div>
<div style><br></div><div style>Deci, vrei să ai zona liniară de dimensiune hlen + dlen.</div><div style><br></div><div style>După ce faci efectiv alocarea, trebuie să faci un skb_put() să actualizeze sfârșitul datelor și să rezervi loc pentru header-ul Ethernet cu skb_reserve().</div>
<div style><br></div><div style>Spor!</div></div></div></div>