[so2] [Tema 5] Membrii utili din packet_sock

Dan Filimon dangeorge.filimon at gmail.com
Mon May 13 19:30:28 EEST 2013


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!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130513/ba8a65af/attachment-0001.html>


More information about the so2 mailing list