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