TMDSCNCD28388D: [C2000Ware v6.00.00.00] Ethernet / lwIP: RX stops under UDP load – ui32RXPbufAllocFailCount increases

Part Number: TMDSCNCD28388D
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 to PBUF_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