[so2] [Tema 5] recvmsg in proto_ops si prot_hook_func

Dan Filimon dangeorge.filimon at gmail.com
Tue May 14 19:30:27 EEST 2013


2013/5/14 Dan Filimon <dangeorge.filimon at gmail.com>

> 2013/5/14 Vlad Dogaru <ddvlad at herebedragons.ro>
>
>> On Tue, May 14, 2013 at 06:08:51PM +0300, Dan Filimon wrote:
>> > În af_packet.c, există mai multe funcții care par să facă aproape
>> același
>> > lucru... să primească date.
>> >
>> > Există packet_rcv și packet_recvmsg.
>> >
>> > 1. packet_rcv e pusă în câmpul prot_hook.func ca și handler.
>> > 2. Apoi, packet_recvmsg e funcția care e efectiv apelată la un receive.
>> >
>> > Întrebările:
>> >
>> > 1. Au prototipuri diferite și par să facă lucruri diferite, dar la
>> > implementările mele, handlerul, prot_hook.func (numit stp_rcv) nu pare
>>>> > fie apelat niciodată.
>> >
>> > Din ce-am înțeles handlerul ar trebui apelat de kernel când primește un
>> > pachet de acel tip.
>> > Curios e că am adăugat hook-ul pentru ambii sockeți (am printat un mesaj
>> > după instrucțiune) dar nu se apelează niciodată handler-ul. De ce?
>>
>> Nu știu ce înseamnă "am adăugat hook-ul pentru ambii sockeți".
>> Structura packet_type (care are .func = stp_rcv) trebuie înregistrată o
>> singură dată, la inserarea modulului.
>>
>
> Așa credeam și eu după ce-am citit inițial tema. Apoi, am văzut în codul
> af_packet.c [1] că se execută la fiecare packet_create() (acolo creeându-se
> sockeții packet).
> Ar trebui deci să înregistrez o singură dată I guess...
>

Legat de asta, am mai rumegat și concluzia e că arhitectura din af_packet.c
e că adaugă un handler per dispozitiv, nu unul global. Deci, fiecare socket
are câte unul.


> [1] http://lxr.linux.no/linux+v3.7.8/net/packet/af_packet.c#L232
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130514/dd4efd3e/attachment.html>


More information about the so2 mailing list