```
connectivity
├── netsocket
├── lwipstack
├── nanostack
│ ├── mbed_lib.json // nanostack-interface's mbed_lib.json
│ ├── include
│ │ └── nanostack // headers from features/netsocket/nanostack-interface
│ ├── source // sources from features/netsocket/nanostack-interface
│ ├── coap-service // used by Thread only - deprecate?
│ ├── mbed-mesh-api
│ ├── nanostack-hal-mbed-cmsis-rtos // HAL porting layer for Nanostack on mbed with CMSIS-RTOS
│ ├── sal-stack-nanostack
│ └── sal-stack-nanostack-eventloop
├── cellular // previously in features/cellular/framework/
├── ...
```
This PR is a part of a wider \connectivity refactoring and implements the above new directory structure for \nanostack.
Fixes: #13109
Prior to this commit, target implementations of NanostackRfPhy
are not guarded by any mbed_lib.json - they are always visible
to the build even if the interface itself is not enabled
(e.g. when using the "requires" attribute of mbed_app.json).
It causes build errors.
To resolve this, this commit move target code into
nanostack-interface, similar to what we do with BLE targets.
Add getsockopt options NSAPI_LATENCY and NSAPI_STAGGER to read
network specific timing constraints from socket.
-NS_LATENCY returns estimated latency to given address.
-NSAPI_STAGGER returns estimated initial delay that application
should wait before transmitting data to network.
Application can use the new options to avoid network congestion by
adjusting transmission delays and retry timeouts.
Use `override` and `final` where appropriate, and eliminate unnecessary
`virtual`.
Some other C++11 simplifications.
Eliminate two unused header files (with no corresponding source files).
Reduces code size.
To get Wi-Sun mesh network working, also nanostack with Wi-Sun support
is needed. ws_empty_functions.c and ws_management_api.h are temporary
included here, so that wisun_tasklet will compiled without problems.
They will replaced with the official versions with next nanostack release.
Nanostack object constructor didn't actually initialise Nanostack.
Nanostack initialisation was deferred until an interface was actually
attached to the stack, which generally happened at first interface
connect.
Not normally a problem, unless you're trying to make direct Nanostack
setup calls prior to connect - some applications do this, and were
relying on ThreadInterface::initialise to do Nanostack
initialisation.
Unfortunately in 5.9 ThreadInterface::initialise no longer does
initialise Nanostack immediately, because the mesh interfaces were
aligned and integrated with the Ethernet interfaces, which did
initialisation on connect().
Make the Nanostack object constructor initialise Nanostack (as the LWIP
constructor does for lwIP), so calling Nanostack::get_instance() is the
5.9 API for Nanostack initialisation.
For future work, APIs like ns_file_system_set_root_path should be
exposed as methods of Nanostack, so everything happens with a single
Nanostack::get_instance().file_system_set_root_path().
- Changed call_in/call methods of the stack to callback provided by the stack
- Specified what are limitations for operations that are made in callback
- Added pure virtual class DNS that defines DNS operations
- Added cancel operation and unique ID to DNS request used in cancel
- Added DNS configuration options to netsocket/mbed_lib.json for retries,
response wait time and cache size
- Changed host name to use dynamic memory in DNS query list and cache,
set maximum length for the name to 255 bytes.
- Added mutex to asynchronous DNS
- Reworked retries: there is now total retry count and a server specific count
- Ignores invalid incoming UDP socket messages (DNS header is not valid), and retries DNS query
- Reworked DNS module asynchronous operation functions
- Corrected other review issues (nothrow new, missing free, missing mutex unlock etc.)
- Added non-blocking DNS interface to network interface and
network stack.
- Added caching of DNS replies.
- Added a network stack function to get DNS addresses from stack.
- Added call and call_in hooks to onboard network stack to
allow calling functions from onboard stack context.
- Added support to call and call_in functions to LWIP and
Nanostack.
- Disabled LWIP DNS translator with the exception of DNS
address storage used in DNS address get.
Make Nanostack an OnboardNetworkInterface, implementing
add_ethernet_interface so it can use EMAC drivers.
Can now be used via EthernetInterface, and be the system's default
network stack.
Legacy support for NanostackEthernetInterface retained. Some
restructuring of mesh interface code to fit into the
OnboardNetworkStack:::Interface system.