[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