<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 style>Deci, în af_packet.c avem:<br><br></div><div style><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 style>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 style><br></div><div style>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 style><br></div><div style>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 style><br></div><div style>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 style><br></div><div style>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 style><br></div><div style>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 style>pg_vec_lock e legat de inele, deci nu.</div>

<div style>auxdata, n-am idee ce e, deci nu ...</div><div style>etc.</div><div style><br></div><div style>Deci, întrebarea ar fi, folosind algoritmul de decizie:</div><div style>Dacă (cred că) știu ce face, îl includ, altfel nu, ratez ceva? :)</div>

<div style><br>Mulțumesc!</div></div></div>