Other Parts Discussed in Thread: C2000WARE
Tool/software:
Description:
Hello TI Support Team,
I am using the latest C2000Ware v6.00.00.00 SDK on an F2838x device.
Setup:
-
Example:
enet_lwip_udp.c
on CM core -
Companion:
ethernet_ipc_ex1_basic_c28x1.c
on C28x1 -
Monitoring
g_sDriverStats
Problem:
When stressing the system with high UDP traffic, ui32RXPbufAllocFailCount
increases. Once this happens, the RX path stops working completely — the device no longer receives UDP packets until a full reset.
Debug findings:
-
The lwIP
PBUF_POOL
fills up and is never recovered. -
Once exhausted, all functions that require new pbufs stop responding.
-
Driver code should recycle or free buffers but does not, leading to a permanent stall.
Reproduction:
-
Run stock SDK examples.
-
Flood UDP with a simple script (example: Python
udp_flood_1.py
with 40-byte payloads, 4 threads, 10 s duration). -
Observe
g_sDriverStats.ui32RXPbufAllocFailCount
rising. RX stops after exhaustion.
Expectation:
The Ethernet / lwIP integration should handle buffer exhaustion gracefully:
-
Always re-arm descriptors with fresh pbufs.
-
Ensure freed pbufs clear their
pAppData
pointer. -
Never free a pbuf after
netif->input()
returns success (lwIP owns it). -
Avoid pbuf chains by matching
pbuf_alloc
size toPBUF_POOL_BUFSIZE
.
Request:
-
Is this a known issue in C2000Ware v6.00.00.00?
-
Could you provide guidance or an official patch to fix buffer management so RX does not permanently stall under load?
Attachments:
-
Screenshot of
g_sDriverStats
showing counter increase. -
UDP flood script used for testing (
udp_flood_1.py
).
You can run the test >python3 udp_flood_1.py --dst 192.168.0.4 --port 28000 --payload-size 40 --pps 0 --duration 10 --threads 4 --bind-ip 192.168.0.8
udp_flood_1.zip
Thank you,
Pablo