[LiSA-Devel] Intrebari
Ionut Nicu
ionut.nicu at ines.ro
Wed Apr 15 00:16:37 EEST 2009
Salut,
Faur Andrei wrote:
> 2009/4/13 Radu Rendec <radu.rendec at ines.ro>:
>
> Am creat un tutorial in wiki, practic e cam tot ce am discutat pe mailing
> list pana acum + bucati luate din codul sursa. In tutorial nu am explicat
> si _de ce_ lucrurile trebuie facute asa deoarece, sincer, inca nu inteleg prea
> bine codul sursa din LiSA ca sa dau explicatii corecte. Chiar si asa, oricine
> vine si are de lucrat in userspace, poate sa faca modificarile respective si
> daca nu mai are treaba in kernel, poate uita de ele.
>
Cool. Intreaba unde mai ai nelamuriri si le putem clarifica eu si Radu.
Existau niste poze cu arhitectura high level a proiectului + altele cu
explicatii pentru anumite componente. Poate ar fi util ajunga si astea
undeva pe wiki ...
> Am dat si un exemplu in partea de userspace, care e de fapt o prelucrare
> a programului test_sock deja existent. Codul respectiv (sender si receiver)
> as dori sa se afle permanent in sursele LiSA in directorul test astfel incat
> daca vine cineva si citeste tutorialul, sa il poata rula direct. (Pentru asta
> presupun ca trebuie sa fac un push cu git?)
>
E ok programelul. O singura observatie pana acum... Nu cred ca mai e
necesar for-ul:
for (i = 0; i < 255; i++)
buf[i] = i;
Ca sa poti sa impingi chestii upstream sugestia e sa lucrezi cam asa:
1. git clone la mirror-ul de pe ixlabs.cs.pub.ro
2. din branch-ul master iti creezi un branch propriu. Presupunand ca
esti deja pe master:
git checkout -b lisa-rstp
3. modifici ce vrei si dai git commit -s la modificari in repository-ul
tau local. Ca stil de mesaje de commit ar fi:
Scurta descriere de 1 linie a commit-ului
[blank line]
Descriere mai detaliata (dar nici romane :-) ... )
4. Cand ai de impins chestii in afara (prin branch-ul lisa-rstp):
git push ssh://user@ixlabs.cs.pub.ro/lisa.git lisa-rstp
> In legatura cu partea de RSTP.
> Eu va trebui sa tin in kernel, in structura net_switch_port un camp care imi
> va zice starea portului (Listening, Blocking, etc.). Nu sunt sigur cum as putea
> face comunicatia dintre userspace si kernel, astfel incat sa am acces la acel
> camp. Din cate imi dau seama, la un nivel ridicat, proiectul consta in
> schimbul de mesaje intre switchuri si modificarea starilor porturilor pe baza
> acelor mesaje. Cum logica programului pe baza careia voi lua decizii se va afla
> in intregime in userspace, cum fac accesul in kernel? Din cate imi dau seama
> o modalitate ar fi prin implementarea unei comenzi ioctl care sa faca
> treaba asta.
>
Da, comunicatia intre user space si kernel space o facem prin ioctl-uri
momentan.
[High level] Va trebui sa :
- definesti starile (un enum?) si sa faci un ioctl pentru modificarea
starii portului din user space (din daemon-ul de rstp).
- pe partea de Rx in engine-ul de switching va trebui sa ne uitam la
starea portului inainte sa facem forwarding.
In mare cam asta ar fi design-ul pe care il vrem: partea de control
(protocoale precum stp, lacp) in user space. Engine-ul de switching va
forwarda pachetele de control (stp, lacp) catre user space prin switch
sockets, iar user space-ul va interpreta protocolul (probabil vaor
exista niste state machine-uri pe acolo) si vor trimite comenzi (ioctl)
catre modulele din kernel.
In cazul lacp-ului ma gandesc ca ar fi interesant daca pentru
aggregation am folosi modulul de bond deja existent.
Bafta,
Ionut.
More information about the LiSA-Devel
mailing list