* Add optimised constexpr default constructor. Default construction
was previously by a heavyweight defaulted `nsapi_addr_t` parameter.
* Remove deprecated resolving constructor.
* Take `nsapi_addr_t` inputs by constant reference rather than value.
* Inline the trivial getters and setters.
* Use `unique_ptr` to manage the text buffer.
* Make `operator bool` explicit.
* Optimise some methods.
* Update to C++11 style (default initialisers, nullptr etc)
* Optimise clearing by adding `nullptr` overload. This overload means
`Callback(NULL)` or `Callback(0)` will no longer work; users must
use `Callback(nullptr)` or `Callback()`.
* Optimise clearing by not clearing storage - increases code size of
comparison, but that is extremely rare.
* Reduce ROM used by trivial functors - share copy/destroy code.
* Config option to force trivial functors - major ROM saving by
eliminating the "operations" table.
* Config option to eliminate comparison altogether - minor ROM saving by
eliminating zero padding.
* Conform more to `std::function` API.
Use tag dispatch to better handle both NetworkInterface and NetworkStack
pointers.
The previous design was intended to avoid ambiguities when presented
with a scenario like
class MyDevice : public NetworkInterface, public NetworkStack {
};
TCPSocket(&MyDevice);
// Need NetworkStack *: use NetworkInterface::get_stack or
// cast to NetworkStack?
But the previous solution didn't actually work as intended. The overload
pair
nsapi_create_stack(NetworkStack *);
// versus
template <class IF>
nsapi_create_stack(IF *);
would only select the first form if passed an exact match -
`NetworkStack *`. If passed a derived class pointer, like `MyDevice *`,
it would select the template.
This meant that an ambiguity for MyDevice was at least avoided, but
in the wrong direction, potentially increasing code size.
But in other cases, the system just didn't work at all - you couldn't
pass a `MyStack *` pointer, unless you cast it to `NetworkStack *`.
Quite a few bits of test code do this.
Add a small bit of tag dispatch to prioritise the cast whenever the
supplied pointer is convertible to `NetworkStack *`.
* Avoid undefined behaviour when copying/clearing `mbed_stats_socket_t`.
As it contains a `SocketAddress`, memset and memcpy should not be used.
* Avoid array overrun when `mbed_stats_socket_get_each` is passed a
count greater than `nsapi.socket-stats-max-count`.
* Remove `const` from internal `stats_new_socket_entry` method to avoid
const-losing cast.
- PHY default configuration can be changed
- AutoNegotiation
- Speed
- DuplexMode
- PHY register offset can be updated depending on chosen PHY
All unused parameters are cleaned.
Previous change that removed string-based APIs missed
`NetworkStackWrapper::get_ip_address`. Remove string-based method (which
is not overriding anything in `NetworkStack`) and add missing binary
form to implement `NetworkStack::get_ip_address`.
The rather fiddly `nsapi_create_stack` template + overloads used during
socket formation don't inline their core, which is the identity operation
for `NetworkStack *` itself. Make code generation easier by having that
core be inline.
DISCO_F769NI EMAC driver may return ethernet packet with illegal
length when driver is under heavy load. In one case, the received
bytes indicate frame length of 53 bytes but advertised data length
was 65518 bytes. In another case EMAC driver variable
`EthHandle.RxFrameInfos.length` contained value 0xFFFF FFFC.
As a work-around accept only 1-1500 bytes long ethernet packets.
ARCH_MAX board uses 0x01 as PHY address, different from other NUCLEO STM32 boards. To faciliate change of PHY address of customized boards, a configuration entry eth-phyaddr was added and can be overriden as needed in mbed_app.json by adding "stm32-emac.eth-phyaddr": X. Macro ETH_ARCH_PHY_ADDRESS was also renamed to ETH_PHY_ADDRESS, because it is not only used by ARCH_MAX board but also other boards.
Issue: udp_sendto() Fails for multicast IPV6 packet when interface is switched from SoftAP to STA mode.
When SoftAP start is called, add_ethernet_interface() will be called internally to add interface details into netif_list.
When switching from SoftAP to STA mode, add_ethernet_interface() will be called again to append the interace details into netif_list.
When udp_sendto() is called, ip6_route() will return interface as NULL since it consider device as single interface.
Fix: SoftAP mode Stop, call remove_ethernet_interface() to remove the interface from the netif_list.
Some parts of PPP debug traces were enabled also on non-debug builds.
Now they are correctly disabled. Corrected also compiler warnings
that became visible when trace macros were flagged (if clauses without
brackets).
All targets must implement soft_- and hard_power_on/off() functions which are practically same what onboard_modem_api offered.
These were seen as a duplicate features and therefore we removed this.
All targets involved have been updated to reflect the changes
According to [3GPP-TS_24.008] the maximum size for Non-IP link MTU is 1358 octets to prevent fragmentation in the backbone network.
Therefore reduced the maximum size to follow the standard.
New members are added to the network interface
-getaddrinfo
-getaddrinfo_async
gethostbyname is unchanged but gethostbyname_async result param now contains results od DNS records found.
Test cases for sync/async added added to DNS test folder.
The nsapi_dns tests were cross-class tests anyway, going through nsapi_dns and UDPSocket. Now they also include EthernetInterface and only mock the NetworkStack, which makes them the most cross-class module test we could think of in netsocket module.
Removed CellularBase and AT_CellularBase from cellular stack and updated both code and unittests accordingly.
Moved property handling into AT_CellularDevice