gcc (as compiled by/distributed with AmiDevCpp) is compiling the code in such a why that changes to global variables are not visible cross-module. Optimization is disabled, and volatile doesn't work regardless. Still, I can hack it into working by accessing the variable in some other way--printf for example. This all points to a volatile-like issue, but I haven't looked at a listing yet. Anyhow, ARP and ICMP work.
It's my view that cross-platform code should stay cross-platform, so I'm attempting to stay out of the uIP code itself unless its necessary to fix an IP-related issue. I'd also like to be able to just drop in future uIP releases with minimal changes to Amiga-specific code.
If all goes well, I'll have a little demo ready tonight. As I've said, uIP is not a general purpose stack, but it could be used an embedded or fallback stack for small applcations, e.g. Amiga Explorer. (Note that Cloanto would have to modify Amiga Explorer for that to work.) Still, wrapping a bsdsocket.library interface around uIP is possible.
Anyhow, onto lwIP after this.
Trev