Hello everyone,
> Hi,
> I'm porting lwip (using an RTOS and the socket API) and I have a
> question regarding the low_level_output function.
> If I can't send the pbuf immediately (netif busy), to avoid copying
> the pbuf, I'd like to do the following:
> * Increment the reference count to prevent lwip from re-using
> or freeing the pbuf.
> * Put the pbuf on my output queue and try to send it later.
> * Return ERR_OK.
> Later when the netif is not busy...
> * Remove the pbuf from my output queue.
> * Send the pbuf.
> * Free the pbuf.
>
> Will this scheme work with lwip?
This is a very valid discussion point for the Stack, IMHO.
It is not really explicitly documented that the Stack will free the pbufs
for a packet after it handed it over to the driver layer.
If the Driver is sending asynchronously and the data is not memcpy'd by
the driver, the datablock might be allocated by someone else and
overwritten with other data. This might be an explaination for
mysteriously lost or changed packets.
Also given the fact that LwIP is a zero-copy stack, people might not
expect to memcpy stuff on the driver layer?
I propose we do either of the following:
1) In the ethernetif-skeleton explicitly document the behavior and tell
the developer to memcpy the data if their transmission is async.
2) See 1), but tell the developer to increment the reference count and
pbuf_free() themselves (probably faster than memcpy)
3) Remove the freeing of the pbuf after handing it over to the driver
layer and document that and leave it to the driver developer to
pbuf_free() after the xmit is really done
comments?
regards,
Fabian
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users