From fcac235ddca75826279a20c895e1d04f77d4ab76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=20Lepp=C3=A4nen?= Date: Wed, 24 Mar 2021 11:30:43 +0200 Subject: [PATCH] Added new start methods to Wi-SUN BR with WisunInterface parameter and deprecated the old ones Previously WisunBorderRouter start() used NetworkInterface type for mesh interface, although only WisunInterface type is possible for the call. Added a new overloads of the start with the WisunInterface as mesh interface type and deprecated the old ones. This makes the calls stricter about the interface type and safer. It also allows to remove the reinterpret_cast that causes compiler warning on ARM compiler. --- .../mbed-mesh-api/WisunBorderRouter.h | 30 ++++++++++++++++++ .../source/WisunBorderRouter.cpp | 31 ++++++++++++++++--- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h b/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h index a925d4529cc..8cf8266f5de 100644 --- a/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h +++ b/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h @@ -86,6 +86,21 @@ class WisunBorderRouter { * \return MESH_ERROR_NONE on success. * \return MESH_ERROR_UNKNOWN in case of failure. * */ + mesh_error_t start(WisunInterface *mesh_if, NetworkInterface *backbone_if); + + /** + * \brief Start Wi-SUN Border Router + * + * Starts Wi-SUN Border Router and routing between the mesh and backbone interfaces. Network interfaces + * must be initialized and connected before calling the start. Backbone interface can be either Ethernet + * (EMAC) or Cellular. + * + * \param mesh_if Wi-SUN mesh network interface + * \param backbone_if Backbone network interface + * \return MESH_ERROR_NONE on success. + * \return MESH_ERROR_UNKNOWN in case of failure. + * */ + MBED_DEPRECATED_SINCE("mbed-os-5.15.8", "Using NetworkInterface type for mesh_if is deprecated, use WisunInterface instead") mesh_error_t start(NetworkInterface *mesh_if, NetworkInterface *backbone_if); /** @@ -100,6 +115,21 @@ class WisunBorderRouter { * \return MESH_ERROR_NONE on success. * \return MESH_ERROR_UNKNOWN in case of failure. * */ + mesh_error_t start(WisunInterface *mesh_if, OnboardNetworkStack::Interface *backbone_if); + + /** + * \brief Start Wi-SUN Border Router + * + * Starts Wi-SUN Border Router and routing between the mesh and backbone interfaces. Mesh network interface + * must be initialized and connected before calling the start. Backbone OnboardNetworkStack::Interface must + * be brought up before calling the start. Backbone interface can be either Ethernet (EMAC) or Cellular (PPP). + * + * \param mesh_if Wi-SUN mesh network interface + * \param backbone_if Backbone OnboardNetworkStack::Interface interface + * \return MESH_ERROR_NONE on success. + * \return MESH_ERROR_UNKNOWN in case of failure. + * */ + MBED_DEPRECATED_SINCE("mbed-os-5.15.8", "Using NetworkInterface type for mesh_if is deprecated, use WisunInterface instead") mesh_error_t start(NetworkInterface *mesh_if, OnboardNetworkStack::Interface *backbone_if); /** diff --git a/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp b/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp index 46977f994e9..7e21fef6a2a 100644 --- a/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp +++ b/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp @@ -40,8 +40,17 @@ mesh_error_t WisunBorderRouter::start(NetworkInterface *mesh_if, NetworkInterfac return MESH_ERROR_PARAM; } - InterfaceNanostack *nano_mesh_if = reinterpret_cast(mesh_if); - int8_t mesh_if_id = nano_mesh_if->get_interface_id(); + WisunInterface *wisun_mesh_if = reinterpret_cast(mesh_if); + return start(wisun_mesh_if, backbone_if); +} + +mesh_error_t WisunBorderRouter::start(WisunInterface *mesh_if, NetworkInterface *backbone_if) +{ + if (mesh_if == NULL || backbone_if == NULL) { + return MESH_ERROR_PARAM; + } + + int8_t mesh_if_id = mesh_if->get_interface_id(); if (mesh_if_id < 0) { return MESH_ERROR_UNKNOWN; } @@ -71,10 +80,24 @@ mesh_error_t WisunBorderRouter::start(NetworkInterface *mesh_if, NetworkInterfac return MESH_ERROR_NONE; } + mesh_error_t WisunBorderRouter::start(NetworkInterface *mesh_if, OnboardNetworkStack::Interface *backbone_if) { - InterfaceNanostack *nano_mesh_if = reinterpret_cast(mesh_if); - int8_t mesh_if_id = nano_mesh_if->get_interface_id(); + if (mesh_if == NULL || backbone_if == NULL) { + return MESH_ERROR_PARAM; + } + + WisunInterface *wisun_mesh_if = reinterpret_cast(mesh_if); + return start(wisun_mesh_if, backbone_if); +} + +mesh_error_t WisunBorderRouter::start(WisunInterface *mesh_if, OnboardNetworkStack::Interface *backbone_if) +{ + if (mesh_if == NULL || backbone_if == NULL) { + return MESH_ERROR_PARAM; + } + + int8_t mesh_if_id = mesh_if->get_interface_id(); if (mesh_if_id < 0) { return MESH_ERROR_UNKNOWN; }