[LiSA-Devel] Intrebari

Andrei Faur da3drus at gmail.com
Mon Apr 13 14:24:17 EEST 2009



On Mon, 13 Apr 2009, Nicu Ioan Petru-B06965 wrote:

> Salut,
>
>> -----Original Message-----
>> From: lisa-devel-bounces at lisa.ines.ro
>> [mailto:lisa-devel-bounces at lisa.ines.ro] On Behalf Of Faur Andrei
>> Sent: Monday, April 13, 2009 11:11 AM
>> To: lisa-devel at lisa.ines.ro
>> Subject: [LiSA-Devel] Intrebari
>>
>> 1. Din cate am testat pe masina virtuala observ ca frameul
>> trimis de LiSA are ca adresa MAC sursa 06:07:08:09:0A:0B iar
>> ca adresa destinatie 01:02:03:04:05:06. Nu gasesc nicaieri in
>> codul sursa locul unde aceste adrese sunt date, pentru a le
>> schimba. Problema este ca atunci cand frameul ajunge la
>> masina destinatie, aceasta nu isi recunoaste adresa MAC si o
>> retrimite pe toate porturile. Cu alte cuvinte, switchul
>> virtual al VMWare recunoaste ca masina destinatie are MACul
>> 01:02:03:04:05:06 (i-am modificat sa aiba aceasta adresa),
>> insa cand frameul ajunge efectiv la ea, este retrimis pe
>> toate porturile si nu mai ajunge la layerul superior.
>>
>
> Daca testezi cu userspace/test/test_sock.c, codul relevant este:
>
> 	/* Test sendmsg() */
> 	memset(buf, 0, sizeof(buf));
> 	for (i=0; i<sizeof(buf); i++)
> 		buf[i] = i;
> 	if (send(fd, buf, sizeof(buf), 0) < 0)
> 		perror("send");
>
> Socketii de tip PF_SWITCH sunt f. asemanatori cu PF_PACKET.
>
> Dupa cum vezi frame-ul trimis este [ 00 01 02 03 ... ], de unde si
> adresele de MAC pe care le vezi (BTW MAC-ul destinatie nu ar tb
> sa inceapa cu 0x00?).

Ok, atunci inseamna ca eu din userspace o sa imi creez intreg frameul
de la 0 so to speak. Asta inseamna ca trebuie sa completez toate campurile
unui Ethernet Snap Frame, pentru ca in final in campul Data sa pun efectiv
ce ma intereseaza pe mine (partea de STP)? Exista undeva in codul sursa
o structura deja definita pentru un frame?

Ce rol are atunci linia urmatoare de cod din test_sock:
addr.ssw_proto = ETH_P_CDP,
daca eu oricum imi fac frameul de mana?

>> 2. Care sunt conditiile in care un frame este trimis catre
>> layerul superior?
>> Mai exact, unde in cod se face aceasta transmitere.
>>
>
> Daca te referi la filtrarea pe partea de receive (pentru frame-uri CDP,
> VTP etc ...) vezi functia sw_socket_filter din net/switch/sw_socket.c.
>
> Aici va trebui sa-ti faci si tu hook-ul de filtrare pentru STP.
>

Am inteles. Hookul il introduc asemanator cu cele de VTP si CDP, adica 
doar un simplu branch in caseul respectiv?


More information about the LiSA-Devel mailing list