[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