Hi,
I use LWIP V2.0.2. I have a problem with ICMP when I use PBUF_REF buffer for
the input() function. I want to use PBUF_REF, because I have the received data
already in the memory and I don’t want to copy it again, just to set the
payload pointer to the already filled up buffer. DHCP protocols works without
problems like this, but when I try to ping the device, I see ARP and correct
answer, but then there is no response to the ICMP. After some debugging I see
that the problem comes, because of the following lines (in the file icmp.c):
if (pbuf_header(p, (s16_t)hlen)) {
LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Can't move over header
in packet"));
} else {
err_t ret;
struct ip_hdr *iphdr = (struct ip_hdr*)p->payload;
…
}
Here the if-condition is true, instead to be 0 and the code that follows in the
else-section (that prepares and send the response) is not executed.
I guess that I have to use PBUF_POOL buffer instead of PBUF_REF (this is
suggested in the documentation), but when I do it, DHCP stops working. So I’m a
little bit confused with the understanding of this behavior. I know that this
is not a problem with the stack, just how I use it, but please, give me a short
hint what I’m doing wrong…
Simeon
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users