[so2] [Tema 5] Pasi pentru sendmsg
Vlad Dogaru
ddvlad at herebedragons.ro
Tue May 14 13:41:24 EEST 2013
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.
More information about the so2
mailing list