The 3rd element of the ip_addr struct has been replaced with a anonymous union.
http://tigcc.ticalc.org/doc/keywords.html#union provides a good an short explanation about the difference between union an struct. Actually it's the same place of memory and even no large than before.
As soon addr has been written, addr16 and addr32 has the same content. I have implemented that in the style of the in6_addr struct in netinet/in.h.
The 16-bit variable has been also introduced for future usage.

Is it now a bit clearer?