[so2] [Tema 5] Pasi pentru sendmsg

Dan Filimon dangeorge.filimon at gmail.com
Tue May 14 13:45:21 EEST 2013


2013/5/14 Vlad Dogaru <ddvlad at herebedragons.ro>

> On Tue, May 14, 2013 at 12:51:54PM +0300, Dan Filimon wrote:
> > 2013/5/14 Vlad Dogaru <ddvlad at herebedragons.ro>
> >
> > > On Tue, May 14, 2013 at 12:05:39PM +0300, Dan Filimon wrote:
> > > > > > 3. scrierea headerului și a corpului; aici sunt nelămurit cum
> anume
> > > merge
> > > > > > asta. Aș zice că la început scriem headerul stp_hdr și apoi
> corpul în
> > > > > > câmpul skb->data... Dar în af_packet sunt tot felul de apeluri
> > > > > > skb_set_network_header() sau skb_reset_mac_header().
> > > > >
> > > > > Poți folosi secvența reserve + reset_network_header din af_packet.
> > > >
> > > >
> > > > 1. reset_network_header() face ca offset-ul pentru network_header să
> fie
> > > > data - head. Dar, dacă fac asta practic network_header va arăta la
> > > > începutul pachetului, unde e header-ul STP.
> > >
> > > Da, dar înainte de reset_network_header() faci reserve(), care are
> grijă
> > > să păstreze spațiu "înaintea" headerului STP.  Acest spațiu va fi
> > > folosit de dev_hard_header, care apelează eth_header, care face
> skb_push
> > > ca primă acțiune.
> > >
> >
> > Hmm, deci atunci pachetul pe care-l aloc are dimensiune len +
> > sizeof(stp_hdr) + sizeof(ethernet header)?
>
> Da.
>
> > Sau, mai degrabă zis, headerul STP există deja în mesajul pe care-l
> trimit
> > sau eu îl construiesc?
>
> Headerul STP trebuie să îl construiești tu.
>
> Dar înainte de a îl construi trebuie să rezervi spațiu pentru headerul
> Ethernet.  Acesta din urmă e construit pentru tine, când apelezi
> dev_hard_header.
>
> > Iar reserve() e de fapt, skb_reserve(skb, hlen), unde hlen e lungimea
> > headerului pe care vreau să o rezerv, right?
>
> Da.  Adică lungimea headerului Ethernet.
>
> > În plus, când apelez dev_hard_header(), tipul pe care-l trimit ca al
> 3-lea
> > argument ar trebui să fie ETH_P_STP? Sau, ca aici [1], ETH_P_IP?
>
> STP.  There is no IP in this homework.  Parametrul ăla e câmpul
> Ethertype din figura de la [1].
>
> [1] http://en.wikipedia.org/wiki/Ethernet_header#Structure
>
> Vlad.
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii


Awesome, mulțumesc!

Un ultim lucru, dimensiunea header-ului Ethernet o pun 14 octeți și ignor
strategic trailer-ul?
Sau, fac ca în af_packet și iau headerul cu LL_RESERVED_SPACE și trailerul
cu dev->needed_tailroom.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130514/34e8d1b6/attachment-0001.html>


More information about the so2 mailing list