The RWW fix is controversial because it requires holding off interrupts for
periods of around 5ms at a time. But there were still some minor improvements
around that change which could be retained. This commit contains these
changes.
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
* NUCLEO_F746ZG : enable Ethernet and LwIP for this target.
Net tests were passed :
mbed-os-features-feature_ipv4-tests-mbedmicro-net-nist_internet_time_service
| OK
mbed-os-features-feature_ipv4-tests-mbedmicro-net-tcp_client_hello_world
| OK
The 2 other are failing because I cannot test them on my ST computer.
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.
- Semaphore returns 0 on timeout, and negative was incorrect used for
errors
- Correctly checked error code on tcp_connect
thanks to @LiyouZhou
fixes#284, fixes#285, fixes#166
per the socket API documentation:
/** Get the local IP address
*
* @return Null-terminated representation of the local IP address
* or null if not yet connected
*/
virtual const char *get_ip_address() = 0;
LWIPInterface incorrectly returned "\0" if unconnected
Pros
- Easier to implement
- More similar to SIGIO in BDS sockets
Cons
- Less information, but this information had a high risk of being
faulty/spurious
Pros
- Simplifies interface
- Easier base implementation
Cons
- May need shutdown functionality, in this case shutdown
can be added as another function in the future
Move the backend of LWIPInterface from the LWIP socket API to the
asynch UDP/TCP APIs used in https://github.com/armmbed/sal-stack-lwip.
Provides asynchronous functionality for the LWIPInterface.
Due to dependencies between the config/target systems, the config
has been modified to preparse the mbed_app.json for overrides.
This means that attributes with dependencies in the targets are
only valid at the application level. A hard error has been
added for these attributes if they are supplied at the library
level.