[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