diff --git a/features/lwipstack/LWIPMemoryManager.h b/features/lwipstack/LWIPMemoryManager.h index 74cfa5f1a8e..769e6c1b73a 100644 --- a/features/lwipstack/LWIPMemoryManager.h +++ b/features/lwipstack/LWIPMemoryManager.h @@ -19,7 +19,7 @@ #include "EMACMemoryManager.h" -class LWIPMemoryManager : public EMACMemoryManager { +class LWIPMemoryManager final : public EMACMemoryManager { public: /** @@ -31,7 +31,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param align Memory alignment requirement in bytes * @return Allocated memory buffer, or NULL in case of error */ - virtual net_stack_mem_buf_t *alloc_heap(uint32_t size, uint32_t align); + net_stack_mem_buf_t *alloc_heap(uint32_t size, uint32_t align) override; /** * Allocates memory buffer chain from a pool @@ -44,7 +44,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param align Memory alignment requirement for each buffer in bytes * @return Allocated memory buffer chain, or NULL in case of error */ - virtual net_stack_mem_buf_t *alloc_pool(uint32_t size, uint32_t align); + net_stack_mem_buf_t *alloc_pool(uint32_t size, uint32_t align) override; /** * Get memory buffer pool allocation unit @@ -54,7 +54,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param align Memory alignment requirement in bytes * @return Contiguous memory size */ - virtual uint32_t get_pool_alloc_unit(uint32_t align) const; + uint32_t get_pool_alloc_unit(uint32_t align) const override; /** * Free memory buffer chain @@ -64,7 +64,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * * @param buf Memory buffer chain to be freed. */ - virtual void free(net_stack_mem_buf_t *buf); + void free(net_stack_mem_buf_t *buf) override; /** * Return total length of a memory buffer chain @@ -74,7 +74,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param buf Memory buffer chain * @return Total length in bytes */ - virtual uint32_t get_total_len(const net_stack_mem_buf_t *buf) const; + uint32_t get_total_len(const net_stack_mem_buf_t *buf) const override; /** * Copy a memory buffer chain @@ -85,7 +85,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param to_buf Memory buffer chain to copy to * @param from_buf Memory buffer chain to copy from */ - virtual void copy(net_stack_mem_buf_t *to_buf, const net_stack_mem_buf_t *from_buf); + void copy(net_stack_mem_buf_t *to_buf, const net_stack_mem_buf_t *from_buf) override; /** * Copy to a memory buffer chain @@ -98,7 +98,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param ptr Pointer to data * @param len Data length */ - virtual void copy_to_buf(net_stack_mem_buf_t *to_buf, const void *ptr, uint32_t len); + void copy_to_buf(net_stack_mem_buf_t *to_buf, const void *ptr, uint32_t len) override; /** * Copy from a memory buffer chain @@ -110,7 +110,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param from_buf Memory buffer chain to copy from * @return Length of the data that was copied */ - virtual uint32_t copy_from_buf(void *ptr, uint32_t len, const net_stack_mem_buf_t *from_buf) const; + uint32_t copy_from_buf(void *ptr, uint32_t len, const net_stack_mem_buf_t *from_buf) const override; /** * Concatenate two memory buffer chains @@ -122,7 +122,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param to_buf Memory buffer chain to concatenate to * @param cat_buf Memory buffer chain to concatenate */ - virtual void cat(net_stack_mem_buf_t *to_buf, net_stack_mem_buf_t *cat_buf); + void cat(net_stack_mem_buf_t *to_buf, net_stack_mem_buf_t *cat_buf) override; /** * Returns the next buffer @@ -132,7 +132,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param buf Memory buffer * @return The next memory buffer, or NULL if last */ - virtual net_stack_mem_buf_t *get_next(const net_stack_mem_buf_t *buf) const; + net_stack_mem_buf_t *get_next(const net_stack_mem_buf_t *buf) const override; /** * Return pointer to the payload of the buffer @@ -140,7 +140,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param buf Memory buffer * @return Pointer to the payload */ - virtual void *get_ptr(const net_stack_mem_buf_t *buf) const; + void *get_ptr(const net_stack_mem_buf_t *buf) const override; /** * Return payload size of the buffer @@ -148,7 +148,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param buf Memory buffer * @return Size in bytes */ - virtual uint32_t get_len(const net_stack_mem_buf_t *buf) const; + uint32_t get_len(const net_stack_mem_buf_t *buf) const override; /** * Sets the payload size of the buffer @@ -159,7 +159,7 @@ class LWIPMemoryManager : public EMACMemoryManager { * @param buf Memory buffer * @param len Payload size, must be less or equal allocated size */ - virtual void set_len(net_stack_mem_buf_t *buf, uint32_t len); + void set_len(net_stack_mem_buf_t *buf, uint32_t len) override; private: diff --git a/features/lwipstack/LWIPStack.cpp b/features/lwipstack/LWIPStack.cpp index ab6b00a1ede..350387083ad 100644 --- a/features/lwipstack/LWIPStack.cpp +++ b/features/lwipstack/LWIPStack.cpp @@ -191,30 +191,13 @@ LWIP::call_in_callback_cb_t LWIP::get_call_in_callback() return cb; } -const char *LWIP::get_ip_address() +nsapi_error_t LWIP::get_ip_address(SocketAddress *address) { if (!default_interface) { - return NULL; + return NSAPI_ERROR_NO_ADDRESS; } - const ip_addr_t *addr = get_ip_addr(true, &default_interface->netif); - - if (!addr) { - return NULL; - } -#if LWIP_IPV6 - if (IP_IS_V6(addr)) { - return ip6addr_ntoa_r(ip_2_ip6(addr), ip_address, sizeof(ip_address)); - } -#endif -#if LWIP_IPV4 - if (IP_IS_V4(addr)) { - return ip4addr_ntoa_r(ip_2_ip4(addr), ip_address, sizeof(ip_address)); - } -#endif -#if LWIP_IPV6 && LWIP_IPV4 - return NULL; -#endif + return get_ip_address_if(address, nullptr); } nsapi_error_t LWIP::get_ip_address_if(SocketAddress *address, const char *interface_name) diff --git a/features/lwipstack/LWIPStack.h b/features/lwipstack/LWIPStack.h index b0fe021729a..cd6800be5e0 100644 --- a/features/lwipstack/LWIPStack.h +++ b/features/lwipstack/LWIPStack.h @@ -36,7 +36,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { using NetworkStack::get_ip_address; static LWIP &get_instance(); - class Interface : public OnboardNetworkStack::Interface { + class Interface final : public OnboardNetworkStack::Interface { public: /** Connect the interface to the network * @@ -51,11 +51,11 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param blocking Specify whether bringup blocks for connection completion. * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t bringup(bool dhcp, const char *ip, - const char *netmask, const char *gw, - nsapi_ip_stack_t stack = DEFAULT_STACK, - bool blocking = true - ); + nsapi_error_t bringup(bool dhcp, const char *ip, + const char *netmask, const char *gw, + nsapi_ip_stack_t stack = DEFAULT_STACK, + bool blocking = true + ) override; /** Disconnect interface from the network * @@ -63,7 +63,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t bringdown(); + nsapi_error_t bringdown() override; /** Register callback for status reporting * @@ -73,35 +73,35 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * * @param status_cb The callback for status changes */ - virtual void attach(mbed::Callback status_cb); + void attach(mbed::Callback status_cb) override; /** Get the connection status * * @return The connection status according to ConnectionStatusType */ - virtual nsapi_connection_status_t get_connection_status() const; + nsapi_connection_status_t get_connection_status() const override; /** Return netif interface name * * @return netif name eg "en0" */ - virtual char *get_interface_name(char *buf); + char *get_interface_name(char *buf) override; /** Return MAC address of the network interface * * @return MAC address as "V:W:X:Y:Z" */ - virtual char *get_mac_address(char *buf, nsapi_size_t buflen); + char *get_mac_address(char *buf, nsapi_size_t buflen) override; - /** @copydoc NetworkStack::get_ip_address */ - virtual nsapi_error_t get_ip_address(SocketAddress *address); + /** @copydoc OnboardNetworkStack::Interface::get_ip_address */ + nsapi_error_t get_ip_address(SocketAddress *address) override; /** Get the IPv6 link local address in SocketAddress representation * * @address SocketAddress representation of the link local IPv6 address * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t get_ipv6_link_local_address(SocketAddress *address); + nsapi_error_t get_ipv6_link_local_address(SocketAddress *address) override; /** Copies netmask of the network interface to user supplied buffer * @@ -109,7 +109,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param buflen size of supplied buffer * @return Pointer to a buffer, or NULL if the buffer is too small */ - virtual nsapi_error_t get_netmask(SocketAddress *address); + nsapi_error_t get_netmask(SocketAddress *address) override; /** Copies gateway address of the network interface to user supplied buffer * @@ -117,7 +117,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param buflen size of supplied buffer * @return Pointer to a buffer, or NULL if the buffer is too small */ - virtual nsapi_error_t get_gateway(SocketAddress *address); + nsapi_error_t get_gateway(SocketAddress *address) override; private: friend class LWIP; @@ -228,7 +228,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out pointer to stack interface object controlling the EMAC * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t add_ethernet_interface(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out); + nsapi_error_t add_ethernet_interface(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out) override; /** Register a network interface with the IP stack * @@ -240,7 +240,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out pointer to stack interface object controlling the L3IP * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t add_l3ip_interface(L3IP &l3ip, bool default_if, OnboardNetworkStack::Interface **interface_out); + nsapi_error_t add_l3ip_interface(L3IP &l3ip, bool default_if, OnboardNetworkStack::Interface **interface_out) override; /** Register a PPP interface with the IP stack * @@ -259,7 +259,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out set to interface handle that must be passed to subsequent mbed_stack calls * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t add_ppp_interface(PPP &ppp, bool default_if, OnboardNetworkStack::Interface **interface_out); + nsapi_error_t add_ppp_interface(PPP &ppp, bool default_if, OnboardNetworkStack::Interface **interface_out) override; /** Remove a network interface from IP stack * @@ -267,7 +267,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out pointer to stack interface object controlling the L3IP * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t remove_ethernet_interface(OnboardNetworkStack::Interface **interface_out); + nsapi_error_t remove_ethernet_interface(OnboardNetworkStack::Interface **interface_out) override; /** Remove a network interface from IP stack * @@ -275,7 +275,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out pointer to stack interface object controlling the PPP * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t remove_l3ip_interface(OnboardNetworkStack::Interface **interface_out); + nsapi_error_t remove_l3ip_interface(OnboardNetworkStack::Interface **interface_out) override; /** Remove a network interface from IP stack * @@ -283,7 +283,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param[out] interface_out pointer to stack interface object controlling the PPP * @return NSAPI_ERROR_OK on success, or error code */ - virtual nsapi_error_t remove_ppp_interface(OnboardNetworkStack::Interface **interface_out); + nsapi_error_t remove_ppp_interface(OnboardNetworkStack::Interface **interface_out) override; /** Get a domain name server from a list of servers to query * @@ -294,7 +294,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param address Destination for the host address * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t get_dns_server(int index, SocketAddress *address, const char *interface_name); + nsapi_error_t get_dns_server(int index, SocketAddress *address, const char *interface_name) override; /** Add a domain name server to list of servers to query * @@ -302,30 +302,20 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param interface_name Network interface name * @return NSAPI_ERROR_OK on success, negative error code on failure */ - virtual nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name); + nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name) override; - /** 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(); + /** @copydoc NetworkStack::get_ip_address */ + virtual nsapi_error_t get_ip_address(SocketAddress *address); - /** Copies IP address of the name based network interface to user supplied buffer - * - * @param address SocketAddress object pointer to store the address - * @param interface_name name of the interface - * @return Pointer to a buffer, or NULL if the buffer is too small - */ - virtual nsapi_error_t get_ip_address_if(SocketAddress *address, const char *interface_name); + /** @copydoc NetworkStack::get_ip_address_if */ + nsapi_error_t get_ip_address_if(SocketAddress *address, const char *interface_name) override; /** Set the network interface as default one */ - virtual void set_default_interface(OnboardNetworkStack::Interface *interface); + void set_default_interface(OnboardNetworkStack::Interface *interface) override; protected: LWIP(); - virtual ~LWIP() {} /** Opens a socket * @@ -339,7 +329,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto); + nsapi_error_t socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto) override; /** Close the socket * @@ -349,7 +339,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param handle Socket handle * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t socket_close(nsapi_socket_t handle); + nsapi_error_t socket_close(nsapi_socket_t handle) override; /** Bind a specific address to a socket * @@ -360,7 +350,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param address Local address to bind * @return 0 on success, negative error code on failure. */ - virtual nsapi_error_t socket_bind(nsapi_socket_t handle, const SocketAddress &address); + nsapi_error_t socket_bind(nsapi_socket_t handle, const SocketAddress &address) override; /** Listen for connections on a TCP socket * @@ -372,7 +362,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * simultaneously * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog); + nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog) override; /** Connects TCP socket to a remote host * @@ -383,7 +373,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param address The SocketAddress of the remote host * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t socket_connect(nsapi_socket_t handle, const SocketAddress &address); + nsapi_error_t socket_connect(nsapi_socket_t handle, const SocketAddress &address) override; /** Accepts a connection on a TCP socket * @@ -403,8 +393,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param address Destination for the remote address or NULL * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t socket_accept(nsapi_socket_t server, - nsapi_socket_t *handle, SocketAddress *address = 0); + nsapi_error_t socket_accept(nsapi_socket_t server, + nsapi_socket_t *handle, SocketAddress *address = 0) override; /** Send data over a TCP socket * @@ -420,8 +410,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @return Number of sent bytes on success, negative error * code on failure */ - virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle, - const void *data, nsapi_size_t size); + nsapi_size_or_error_t socket_send(nsapi_socket_t handle, + const void *data, nsapi_size_t size) override; /** Receive data over a TCP socket * @@ -437,8 +427,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @return Number of received bytes on success, negative error * code on failure */ - virtual nsapi_size_or_error_t socket_recv(nsapi_socket_t handle, - void *data, nsapi_size_t size); + nsapi_size_or_error_t socket_recv(nsapi_socket_t handle, + void *data, nsapi_size_t size) override; /** Send a packet over a UDP socket * @@ -455,8 +445,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @return Number of sent bytes on success, negative error * code on failure */ - virtual nsapi_size_or_error_t socket_sendto(nsapi_socket_t handle, const SocketAddress &address, - const void *data, nsapi_size_t size); + nsapi_size_or_error_t socket_sendto(nsapi_socket_t handle, const SocketAddress &address, + const void *data, nsapi_size_t size) override; /** Receive a packet over a UDP socket * @@ -473,8 +463,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @return Number of received bytes on success, negative error * code on failure */ - virtual nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t handle, SocketAddress *address, - void *buffer, nsapi_size_t size); + nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t handle, SocketAddress *address, + void *buffer, nsapi_size_t size) override; /** Register a callback on state change of the socket * @@ -489,7 +479,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param callback Function to call on state change * @param data Argument to pass to callback */ - virtual void socket_attach(nsapi_socket_t handle, void (*callback)(void *), void *data); + void socket_attach(nsapi_socket_t handle, void (*callback)(void *), void *data) override; /* Set stack-specific socket options * @@ -504,8 +494,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param optlen Length of the option value * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t setsockopt(nsapi_socket_t handle, int level, - int optname, const void *optval, unsigned optlen); + nsapi_error_t setsockopt(nsapi_socket_t handle, int level, + int optname, const void *optval, unsigned optlen) override; /* Get stack-specific socket options * @@ -520,8 +510,8 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param optlen Length of the option value * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t getsockopt(nsapi_socket_t handle, int level, - int optname, void *optval, unsigned *optlen); + nsapi_error_t getsockopt(nsapi_socket_t handle, int level, + int optname, void *optval, unsigned *optlen) override; private: /** Call in callback @@ -542,7 +532,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * * @return Call in callback */ - virtual call_in_callback_cb_t get_call_in_callback(); + call_in_callback_cb_t get_call_in_callback() override; /** Call a callback after a delay * @@ -553,7 +543,7 @@ class LWIP : public OnboardNetworkStack, private mbed::NonCopyable { * @param func Callback to be called * @return 0 on success, negative error code on failure */ - virtual nsapi_error_t call_in(int delay, mbed::Callback func); + nsapi_error_t call_in(int delay, mbed::Callback func) override; struct mbed_lwip_socket { bool in_use;