[so2] [Tema 5] Membrii utili din packet_sock

Vlad Dogaru ddvlad at herebedragons.ro
Tue May 14 10:54:26 EEST 2013


On Mon, May 13, 2013 at 07:30:28PM +0300, Dan Filimon wrote:
> 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...

Sugerez o abordare alternativă:  înțelege ce înseamnă un sock, apoi
pornește de la un stp_sock care conține doar un struct sock sk.  Pe
măsură ce codezi, adaugă câmpuri la structură când ai nevoie de ele.
Recomandarea de a vă inspira din af_packet e mai mult pentru a înțelege
ce fac funcțiile și cum le hook-uiți în kernel, dar e destul de
error-prone cum ai pornit tu -- posibil să ajungi cu membri nefolosiți.

> 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ă.

Nu ai nevoie de statistici per-socket;  poți folosi variabile globale
sau per-cpu.  E chiar recomandat, pentru că, din moment ce per-socket
stats nu sunt un use case, e ineficient să parcurgi toată lista de
sockeți când se face cat /proc/*stats.

> 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...

Yup, pretty much.

> Nu mi-e clar de ce-mi trebuie un lock la bind, dar trebuie să fac bind și
> deci bind_lock pare important. :)

I think you can get away with a global bind lock.

Hope this helps,
Vlad


More information about the so2 mailing list