Skip to content

Commit

Permalink
Added new start methods to Wi-SUN BR with WisunInterface parameter an…
Browse files Browse the repository at this point in the history
…d 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.
  • Loading branch information
Mika Leppänen committed Apr 8, 2021
1 parent 62b57ab commit fcac235
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 4 deletions.
30 changes: 30 additions & 0 deletions features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/**
Expand All @@ -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);

/**
Expand Down
31 changes: 27 additions & 4 deletions features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,17 @@ mesh_error_t WisunBorderRouter::start(NetworkInterface *mesh_if, NetworkInterfac
return MESH_ERROR_PARAM;
}

InterfaceNanostack *nano_mesh_if = reinterpret_cast<InterfaceNanostack *>(mesh_if);
int8_t mesh_if_id = nano_mesh_if->get_interface_id();
WisunInterface *wisun_mesh_if = reinterpret_cast<WisunInterface *>(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;
}
Expand Down Expand Up @@ -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<InterfaceNanostack *>(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<WisunInterface *>(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;
}
Expand Down

0 comments on commit fcac235

Please sign in to comment.