[so2] [Tema 5] Pasi pentru sendmsg

Vlad Dogaru ddvlad at herebedragons.ro
Tue May 14 15:33:16 EEST 2013


On Tue, May 14, 2013 at 03:12:17PM +0300, Dan Filimon wrote:
> 2013/5/14 Vlad Dogaru <ddvlad at herebedragons.ro>
> 
> > On Tue, May 14, 2013 at 01:45:21PM +0300, Dan Filimon wrote:
> > > 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.
> >
> > Varianta a doua sună mai bine.  Tailroom-ul oricum nu e nevoie să îl iei
> > în calcul decât la alocarea skb-ului.
> >
> 
> Am făcut așa și observ că LL_RESERVED_SPACE întoarce 16 octeți dar după ce
> scriu efectiv offset-ul întors de dev_hard_header e 14 octeți.
> N-ar fi asta o tragedie, dar acum, deși testul îmi trece, aș vrea să afișez
> mesajul copiat. Am făcut:
> printk(KERN_ALERT "%s\n", skb->data + ehlen + shlen);
> 
> Unde ehlen e lungimea headerului Ethernet (14 octeți) și shlen e lungimea
> header-ului STP (8 octeți). Dar, asta-mi afișează garbage.

Cu riscul de a fi Captain Obvious:  poate se trimit octeți random, și nu
text?  Sau ai greșit offsetul și apare întâi vreo bucată de header?

> Doar nu poate fi o chestie de endianness, fiindcă ăștia sunt octeți.

Corect, din ce îmi dau eu seama.

Pentru printat buffere (și headere) eu folosesc funcțiile print_hex_dump
și print_hex_dump_bytes.  Acesta din urmă e fratele mai politicos, cu
mai puțini parametri).

Vlad


More information about the so2 mailing list