<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>