<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2013/5/13 Dan Filimon <span dir="ltr"><<a href="mailto:dangeorge.filimon@gmail.com" target="_blank">dangeorge.filimon@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Mă apucasem să "preiau" :) membri din packet_sock și să adaptez funcțiile din acel modul însă am realizat că nu înțeleg la ce folosesc o parte din membrii și aș vrea să nu elimin părți importante doar pentru că eu nu știu ce fac...<div>
<br></div><div>Deci, în af_packet.c avem:<br><br></div><div><div> 191struct packet_sock {</div><div> 192 /* struct sock has to be the first member of packet_sock */</div><div> 193 struct sock sk; // DA</div>
<div> 194 struct tpacket_stats stats; // oarecum</div><div> 195 struct packet_ring_buffer rx_ring;</div><div> 196 struct packet_ring_buffer tx_ring;</div><div> 197 int copy_thresh;</div>
<div> 198 spinlock_t bind_lock; // DA</div><div> 199 struct mutex pg_vec_lock;</div><div> 200 unsigned int running:1, /* prot_hook is attached*/ // DA</div><div>
201 auxdata:1,</div><div> 202 origdev:1, // DA</div><div> 203 has_vnet_hdr:1;</div><div> 204 int ifindex; /* bound device */ // DA</div>
<div> 205 __be16 num; // DA</div><div> 206 struct packet_mclist *mclist;</div><div> 207 atomic_t mapped;</div><div> 208 enum tpacket_versions tp_version;</div>
<div> 209 unsigned int tp_hdrlen;</div><div> 210 unsigned int tp_reserve;</div><div> 211 unsigned int tp_loss:1;</div><div> 212 unsigned int tp_tstamp;</div>
<div> 213 struct packet_type prot_hook ____cacheline_aligned_in_smp; // DA</div><div> 214};</div><div><br></div><div>Sunt sigur că-mi trebuie sk (structura sock din socket), și prot_hook (aici e structura pe care o adaug la lista de protocoale cu dec_add_pack()) .</div>
<div><br></div><div>Apoi, stats pare util ca idee, dar cred că trebuie s-o înlocuiesc cu o structură proprie care strânge statisticile de care am nevoie la temă.</div><div><br></div><div>ifindex e indicele care identifică interfața, deci am nevoie de asta și num e folosit ca să identifice protoclul de nivel 2 și de-asta parte util...</div>
<div><br></div><div>Nu mi-e clar de ce-mi trebuie un lock la bind, dar trebuie să fac bind și deci bind_lock pare important. :)</div><div><br></div><div>Apoi, running folosesc să văd dacă socketul e încă pornit (asta am înțeles din cititul codului) și origdev îmi spune de unde să iau indice interfeței (... right?).</div>
<div><br></div><div>Inelele de transmisie și recepție am văzut că sunt folosite pentru a strânge mai multe pachete din userspace care să fie procesate printr-un singur syscall... deci nu.</div><div>pg_vec_lock e legat de inele, deci nu.</div>
<div>auxdata, n-am idee ce e, deci nu ...</div><div>etc.</div><div><br></div><div>Deci, întrebarea ar fi, folosind algoritmul de decizie:</div><div>Dacă (cred că) știu ce face, îl includ, altfel nu, ratez ceva? :)</div>
<div><br>Mulțumesc!</div></div></div></blockquote><div><br></div>Mai codând, observ că de fapt protocolul este mereu 0, deci num ar fi 0 și cred c-aș putea să renunț și la acest câmp... (?) </div><br></div></div>