[so2] [Tema 5] Pasi pentru sendmsg

Dan Filimon dangeorge.filimon at gmail.com
Tue May 14 12:05:39 EEST 2013


Mulțumesc!

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

> On Mon, May 13, 2013 at 11:45:09PM +0300, Dan Filimon wrote:
> > Codul din af_packet.c pentru packet_sendmsg e destul de complicat și
> > presupun că are multe părți care nu sunt necesare.
> >
> > Din ce am înțeles pașii de făcut sunt:
> >
> > 1. obținerea datelor despre dispozitivul și portul către care trebuie
> > trimis pachetul (din structura noastră sock dacă există, sau alternativ
> din
> > sockaddr_stp)
> >
> > 2. alocarea unui skb pentru pachetul de trimis, cu sock_alloc_send_pskb
> > care să aibă spațiu rezervat pentru header (apropo, aici modul îl luăm
> din
> > msg->msg_flags ca în exemplu sau presupunem o variantă?)
> > Asta ar fi de dimensiune len + sizeof(struct sockaddr_stp).
>
> So far, so good.
>
> > 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.
Unde ar trebui să pointeze network_header și mac_header de fapt?

2. Și despre mac_header, trebuie să punem headerul STP cu checksumul
calculat sau și headerul Ethernet?
Întreb fiindcă spuneai mai jos că trebuie apelat dev_hard_header. Nu mi-e
clar ce face.

Am văzut că dev_hard_header apelează header_ops.create() din dev. Eu n-am
adăugat o structură custom header_ops și fiindcă protocolul e ETH_P_STP
care suprascrie un protocol mai vechi, mă gândesc că scrie un header de
acel tip cumva...

Sau, e un mod fancy de a face memcpy() de la data (după un push() ca în
pozele de aici [1])?

Efectiv, pachetul rezultat înțeleg eu că trebuie să arate așa:
|STP header | data |

Header-ul și trailerul Ethernet urmând să fie adăugate mai mai jos, după
dev_queue_xmit().

[1] http://www.skbuff.net/skbbasic.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130514/a23ac609/attachment.html>


More information about the so2 mailing list