My TCP/IP stack isn't very small either .. people have done TCP/IP in a
much smaller space.
This particular application takes 68KB on disk and 132KB total,
including heap allocations. There is no UDP or DNS support compiled in,
but I do have about 9KB of trace code compiled in.
In the 132KB of space I'm able to support 10 online clients, each with a
2KB output buffer, a 512 byte receive buffer, and a few buffers (20 to
30KB) floating around for incoming and outgoing TCP transmissions.
General features I do support:
- ARP including caching a few entries
- TCP sliding window, automatic retransmit, zero window probes, MSS
negotiation, listen support, etc.
- Enough UDP to implement DNS resolving and DHCP
- A nice tracing mechanism that I can turn on and off via an environment
variable or run-time variable, with selectable levels of tracing
Big things I know I'm missing:
- ICMP - it's on the todo list.
- IP fragments. I don't take them, and I don't do them. Too expensive
for a little machine, and pretty rarely needed on a TCP socket.
So the memory requirements and function put it above uIP, but it's still
small enough to cram into a low end 8088 class machine.
Many people have run TCP/IP on much less hardware. I haven't looked at
the uIP code, but the fact that Adam can run in on a C64 is enough to
amaze me .. It's not as full featured, but it's there!
Mike