From a327210fd0b4ea76ab4c234fb36cb1f990f19e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=20Lepp=C3=A4nen?= Date: Mon, 31 Aug 2020 15:12:48 +0300 Subject: [PATCH] RADIUS shared secret .json parameter set correction --- .../mbed-mesh-api/WisunBorderRouter.h | 3 ++ .../source/WisunBorderRouter.cpp | 35 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 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 eca0c3050e..562543eec9 100644 --- a/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h +++ b/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunBorderRouter.h @@ -264,7 +264,10 @@ private: mesh_error_t configure(); mesh_error_t apply_configuration(int8_t mesh_if_id); mesh_error_t set_bbr_radius_address(void); + mesh_error_t set_bbr_radius_shared_secret(); char _radius_ipv6_addr[40]; + char *_shared_secret = NULL; + uint16_t _shared_secret_len = 0; int8_t _mesh_if_id = -1; bool _radius_ipv6_addr_set = false; bool _configured = false; diff --git a/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp b/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp index a681b8109a..f98932b5d1 100644 --- a/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp +++ b/features/nanostack/mbed-mesh-api/source/WisunBorderRouter.cpp @@ -130,7 +130,6 @@ mesh_error_t WisunBorderRouter::configure() status = set_radius_shared_secret(radius_shared_secret_len, (uint8_t *) radius_shared_secret); if (status != MESH_ERROR_NONE) { tr_error("Failed to set RADIUS shared secret!"); - return status; } #endif @@ -139,7 +138,6 @@ mesh_error_t WisunBorderRouter::configure() status = set_radius_server_ipv6_address(radius_server_ipv6_addr); if (status != MESH_ERROR_NONE) { tr_error("Failed to set RADIUS server IPv6 address!"); - return status; } #endif @@ -153,6 +151,13 @@ mesh_error_t WisunBorderRouter::apply_configuration(int8_t mesh_if_id) tr_error("Failed to apply RADIUS server IPv6 address!"); return MESH_ERROR_PARAM; } + + status = set_bbr_radius_shared_secret(); + if (status != MESH_ERROR_NONE) { + tr_error("Failed to apply RADIUS server IPv6 address!"); + return MESH_ERROR_PARAM; + } + return MESH_ERROR_NONE; } @@ -303,11 +308,37 @@ mesh_error_t WisunBorderRouter::set_radius_shared_secret(uint16_t shared_secret_ return MESH_ERROR_PARAM; } + if (_shared_secret != NULL) { + delete[] _shared_secret; + } + + _shared_secret = new (std::nothrow) char[shared_secret_len]; + if (_shared_secret == NULL) { + return MESH_ERROR_MEMORY; + } + + memcpy(_shared_secret, shared_secret, shared_secret_len); + _shared_secret_len = shared_secret_len; + int status = ws_bbr_radius_shared_secret_set(_mesh_if_id, shared_secret_len, shared_secret); if (status != 0) { return MESH_ERROR_UNKNOWN; } + return set_bbr_radius_shared_secret(); +} + +mesh_error_t WisunBorderRouter::set_bbr_radius_shared_secret() +{ + if (_shared_secret_len == 0 || _shared_secret == NULL) { + return MESH_ERROR_UNKNOWN; + } + + int status = ws_bbr_radius_shared_secret_set(_mesh_if_id, _shared_secret_len, (uint8_t *) _shared_secret); + if (status != 0) { + return MESH_ERROR_UNKNOWN; + } + return MESH_ERROR_NONE; }