Globally declared C++ classes with vtables are not gced by current
toolchains, even if the C++ class contains no member variables and
no constructor. This causes all of lwip to be dragged into resulting
binaries, even if lwip is not accessed.
Adoption of the SingletonPtr class in lwip allows us to workaround
this issue.
- lwip socket api did not provide signaling mechanism compatible with
mutliple stacks
- lwip raw api did not support multiple threads
The netconn api provides the necessary signalling mechanism while still
supporting multiple threads. The netconn api also shares several design
similarities to the current socket api.
Additionally, the move to a higher-level api reduced implementation
complexity significantly and will hopefully reduce integration
difficulties
Refactor LWIPInterface so it is a NetworkInterface rather than a
NetworkStack. Rename LWIPInterface to EthernetInterface since it
is no longer a stack. Update tests to use this new name.