The way pbufs are arranged depends on the fragmentation of the memory pool at the time of allocation. When an Ethernet frame is received, your netif code calls the lwIP alloc function to get memory to store the frame's content. DMA implementations might be different. The fact that you are getiing whole pbufs is not a problem, I just pointed out that a single pbuf per Ethernet frame is not a constant, and might change with memory conditions, you must check p->tot_len and free tot_len to avoid losing data and stucking the memory pool, respectively. There is no lwIP magic for large data vs. small transfers, it is just data transfer and it will keep going as long as you call tcp_recved() to send ACKs and pbuf_free() to free memory. Have you looked at a network capture ? Can you post one ? What port are you running ? NO_SYS ? Are you definitely calling the api from a single thread ? (foreground only, no ints, if NO_SYS=1) Do you call TCP timer functions frequently enough ?
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users