[Team2013] c constructor attribute

Ionut Nicu ionut.nicu at mindbit.ro
Fri Apr 12 13:47:10 EEST 2013


Buna Andreea,

On Fri, 2013-04-12 at 12:44 +0300, Andreea-Cristina Hodea wrote:
> Salut Ionut,
> 
> 
> Asa m-am gandit si eu si asa am implementat pana acum (inca nu am
> comis), dar cu o exceptie: sw_init nu primeste un pointer la
> switch_operations. Eu m-am gandit ca va accesa switch_operations prin,
> de exemplu, lisa_ctx.sw_ops.functie, unde lisa_ctx este initializat cu
> sintaxa de C99 in lisa.c si exportat prin lisa.h. Nu am un motiv bun
> pentru asta decat ca daca sw_init va fi constructor nu stiu cine ii va
> da ca argument sw_ops.
> 
Da, ai dreptate, mi-a scapat asta. E ok sa le accesezi prin lisa_ctx.

Tocmai discutam cu Radu de chestia asta si trebuie sa ai grija pentru ca
acest constructor va fi apelat de fiecare data cand pornesti un proces
de swcli (sau orice alt proces ce se leaga dinamic cu biblioteca aia).

Ar trebui ca adaugarea vlan-urilor default sa se intample doar pe cazul
cand segmentul de shared memory nu exista deja (mm->init != 0).

Daca tot modifici, cred ca ar fi bine sa scoti din shared_init()
initializarile protocol specific (pentru if_tags, cdp, rstp) si sa le
apelezi din sw_init(). In shared_init() ar trebui sa se faca doar
mm_create() si pe cazul in care mm->init != 0 sa se faca doar memset-ul
cu 0.
> 
> Pentru lisa, sw_init ar trebui sa faca chiar si mai putin decat
> vlan_add, fiindca exista sw_vdb_init in kernel. Astfel, sw_init
> trebuie sa faca doar shared_set_vlan_desc(vlan_uri_default,
> descrieri_default).


Cred ca solutia ar fi sa nu se mai creeze vlan-urile default din modulul
de kernel lisa. Astfel poti sa ai fix acceasi implementare de sw_init()
in userspace pentru toate back-endurile.

> Zi faina,
> Andreea

Ionut.
> 
> 
> 2013/4/12 Ionut Nicu <ionut.nicu at mindbit.ro>
>         Buna Andreea,
>         
>         Cred ca ai dreptate. Ar trebui sa existe o functie de
>         initializare a
>         switch-ului sw_init (sau cum vreti voi sa o botezati) care sa
>         fie comuna
>         tuturor backend-urilor, pentru ca nu face nimic specific
>         vreunui
>         back-end. Prin "comuna tuturor backend-urilor" eu inteleg ca
>         nu ar
>         trebui sa fie membru in structura switch_operations.
>         
>         Functia asta ar tb sa fie adnotata cu attribute constructor si
>         sa
>         primeasca ca parametru un pointer catre switch_operations
>         pentru a putea
>         accesa metodele specifice back-endului curent pentru crearea
>         de
>         vlan-uri). Ar trebui sa apeleze shared_init() pentru crearea
>         segmentului
>         de memorie shared, apoi folosind pointer-ul la
>         switch_operations sa
>         creeze vlan-urile default.
>         
>         E ok pt voi abordarea asta?
>         
>         Ionut.
>         
>         On Wed, 2013-04-10 at 20:10 +0300, Andreea-Cristina Hodea
>         wrote:
>         > Salut,
>         >
>         >
>         > Cred ca pana la urma nu e ok sa adaugam vlan-urile default
>         din
>         > shared_init. Am scris de ce aici[1], asa ca as propune ca
>         sw_api sa
>         > aiba o functie init cu atributul constructor, fie ea
>         sw_init, care
>         > (poate printre altele) sa adauge vlan-urile default. In LiSA
>         > Middleware asta ar insemna sa apeleze lisa_ctx.vlan_add
>         pentru fiecare
>         > vlan default.
>         >
>         >
>         > Ceea ce nu stiu, insa, este ce se intampla daca o alta
>         implementare a
>         > API-ului omite sa implementeze sw_init? La incarcarea
>         bibliotecii
>         > dinamice primesc eroare sau raman cu vlan-urile default
>         lipsa? Am mai
>         > citit cate ceva despre acest atribut aici[2].
>         >
>         >
>         > [1] https://github.com/lisa-project/lisa-user/issues/10
>         > [2]
>         http://stackoverflow.com/questions/2053029/how-exactly-does-attribute-constructor-work
>         >
>         >
>         > Andreea
>         
>         > _______________________________________________
>         > Team2013 mailing list
>         > Team2013 at lisa.mindbit.ro
>         > http://lisa.mindbit.ro/mailman/listinfo/team2013
>         
>         
>         _______________________________________________
>         Team2013 mailing list
>         Team2013 at lisa.mindbit.ro
>         http://lisa.mindbit.ro/mailman/listinfo/team2013
> 
> 
> _______________________________________________
> Team2013 mailing list
> Team2013 at lisa.mindbit.ro
> http://lisa.mindbit.ro/mailman/listinfo/team2013




More information about the Team2013 mailing list