[so2] [Tema 5] Membrii utili din packet_sock

Dan Filimon dangeorge.filimon at gmail.com
Mon May 13 21:20:29 EEST 2013


2013/5/13 Dan Filimon <dangeorge.filimon at gmail.com>

> 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...
>
> Deci, în af_packet.c avem:
>
>  191struct packet_sock {
>  192        /* struct sock has to be the first member of packet_sock */
>  193        struct sock             sk; // DA
>  194        struct tpacket_stats    stats; // oarecum
>  195        struct packet_ring_buffer       rx_ring;
>  196        struct packet_ring_buffer       tx_ring;
>  197        int                     copy_thresh;
>  198        spinlock_t              bind_lock; // DA
>  199        struct mutex            pg_vec_lock;
>  200        unsigned int            running:1,      /* prot_hook is
> attached*/ // DA
>  201                                auxdata:1,
>  202                                origdev:1, // DA
>  203                                has_vnet_hdr:1;
>  204        int                     ifindex;        /* bound device
>   */ // DA
>  205        __be16                  num; // DA
>  206        struct packet_mclist    *mclist;
>  207        atomic_t                mapped;
>  208        enum tpacket_versions   tp_version;
>  209        unsigned int            tp_hdrlen;
>  210        unsigned int            tp_reserve;
>  211        unsigned int            tp_loss:1;
>  212        unsigned int            tp_tstamp;
>  213        struct packet_type      prot_hook
> ____cacheline_aligned_in_smp; // DA
>  214};
>
> 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())
> .
>
> 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ă.
>
> 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...
>
> Nu mi-e clar de ce-mi trebuie un lock la bind, dar trebuie să fac bind și
> deci bind_lock pare important. :)
>
> 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?).
>
> 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.
> pg_vec_lock e legat de inele, deci nu.
> auxdata, n-am idee ce e, deci nu ...
> etc.
>
> Deci, întrebarea ar fi, folosind algoritmul de decizie:
> Dacă (cred că) știu ce face, îl includ, altfel nu, ratez ceva? :)
>
> Mulțumesc!
>

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... (?)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130513/60a0aaa5/attachment.html>


More information about the so2 mailing list