lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] low level output question


From: address@hidden
Subject: Re: [lwip-users] low level output question
Date: Fri, 08 May 2009 19:50:41 +0200
User-agent: Thunderbird 2.0.0.21 (Macintosh/20090302)

When allocating a pbuf, the end of it is defined by the length passed to pbuf_alloc, while the start is defined by the layer: pbuf_alloc allocates a pbuf (or a chain) of length + layer offset. E.g. if you call pbuf_alloc(PBUF_IP, 10, PBUF_RAM), a pbuf with a total length of 10 + 20 + 16 = 46 bytes (your length + IP header + ethernet header), while the initial payload pointer points to 36 bytes after the actual reserved memory. This can later be adjusted by calling pbuf_header.

However, a pbuf cannot be lengthend at the end*: you have to allocate a new pbuf and chain the two to one packet. Doing that, tot_len of all pbufs in the chain will grow by 'len' of the newly chained pbuf. Theoretically, this could of course result in chains with tot_len > MTU + ethernet header, but a driver is not required to send this: the core code makes sure this does not happen!

Simon


John Kennedy wrote:
Ok, so what determines the length of a pbuf when it's allocated and what 
determines if pbufs are chained or not, and if chained will tot_len ever exceed 
the max Ethernet frame size?
Specifically, when sending an IP packet does lwip allocate a pbuf big enough 
for a max Ethernet frame then set tot_len to the actual packet length?





reply via email to

[Prev in Thread] Current Thread [Next in Thread]