# lwIP: ARP timeout, queue full for IP 192.168.1.100, packet dropped

- **ID:** `embedded/lwip-arp-timeout-queue-full`
- **Domain:** embedded
- **Category:** network_error
- **Verification:** ai_generated
- **Fix Rate:** 88%

## Root Cause

ARP resolution for a remote host is pending or failed, and the lwIP ARP queue (ARP_QUEUEING enabled) has reached its maximum pending packet count, causing new packets to be dropped.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| lwIP v2.1.3 | active | — | — |
| STM32Cube_FW_F4 v1.28.0 | active | — | — |
| FreeRTOS v10.5.1 | active | — | — |

## Workarounds

1. **Increase ARP queue size in lwipopts.h: set #define ARP_QUEUE_LEN 10 (default 3) to allow more pending packets per unresolved IP. Also set #define MEMP_NUM_ARP_QUEUE 10 to allocate memory.** (90% success)
   ```
   Increase ARP queue size in lwipopts.h: set #define ARP_QUEUE_LEN 10 (default 3) to allow more pending packets per unresolved IP. Also set #define MEMP_NUM_ARP_QUEUE 10 to allocate memory.
   ```
2. **Implement manual ARP probe: periodically send gratuitous ARP from the device using etharp_request() to refresh neighbor cache and reduce queue buildup.** (85% success)
   ```
   Implement manual ARP probe: periodically send gratuitous ARP from the device using etharp_request() to refresh neighbor cache and reduce queue buildup.
   ```

## Dead Ends

- **Increase ARP table size (ARP_TABLE_SIZE) to 20** — Larger table does not affect queue depth; queue full error comes from pending ARP requests, not table entries. (85% fail)
- **Disable ARP queueing (set ARP_QUEUEING to 0)** — Disabling queueing drops all packets during ARP resolution, causing total connectivity loss for new connections. (90% fail)
