From 11caebcc04fae45d76a0aba762c2ca4dc3f11ca8 Mon Sep 17 00:00:00 2001 From: Debdeep Saha Date: Wed, 17 Mar 2021 19:56:20 +0530 Subject: [PATCH] [feature-wisun] Added API to reset MAC and Wi-SUN statistics. --- .../mbed-mesh-api/WisunInterface.h | 10 ++++++++++ .../mbed-mesh-api/source/WisunInterface.cpp | 10 ++++++++++ .../source/include/wisun_tasklet.h | 8 ++++++++ .../mbed-mesh-api/source/wisun_tasklet.c | 16 ++++++++++++++++ .../sal-stack-nanostack/nanostack/sw_mac.h | 7 +++++++ .../nanostack/ws_management_api.h | 10 ++++++++++ .../source/6LoWPAN/ws/ws_empty_functions.c | 6 ++++++ .../source/6LoWPAN/ws/ws_stats.c | 15 +++++++++++++++ .../source/MAC/IEEE802_15_4/sw_mac.c | 17 +++++++++++++++++ 9 files changed, 99 insertions(+) diff --git a/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunInterface.h b/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunInterface.h index c39b0fecc2..d6c6618b60 100644 --- a/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunInterface.h +++ b/features/nanostack/mbed-mesh-api/mbed-mesh-api/WisunInterface.h @@ -559,6 +559,16 @@ public: * */ mesh_error_t enable_statistics(void); + /** + * \brief Reset Wi-SUN statistics + * + * Resets MAC statistics and Wi-SUN statistics. + * + * \return MESH_ERROR_NONE on success. + * \return MESH_ERROR_UNKNOWN on error + * */ + mesh_error_t reset_statistics(void); + /** * \brief Reads Wi-SUN network statistics * diff --git a/features/nanostack/mbed-mesh-api/source/WisunInterface.cpp b/features/nanostack/mbed-mesh-api/source/WisunInterface.cpp index 58a0a2c2b0..94dd88d752 100644 --- a/features/nanostack/mbed-mesh-api/source/WisunInterface.cpp +++ b/features/nanostack/mbed-mesh-api/source/WisunInterface.cpp @@ -603,6 +603,16 @@ mesh_error_t WisunInterface::enable_statistics(void) return ret_val; } +mesh_error_t WisunInterface::reset_statistics(void) +{ + mesh_error_t ret_val = MESH_ERROR_NONE; + int status = wisun_tasklet_statistics_reset(); + if (status < 0) { + ret_val = MESH_ERROR_UNKNOWN; + } + return ret_val; +} + mesh_error_t WisunInterface::read_nw_statistics(mesh_nw_statistics_t *statistics) { mesh_error_t ret_val = MESH_ERROR_NONE; diff --git a/features/nanostack/mbed-mesh-api/source/include/wisun_tasklet.h b/features/nanostack/mbed-mesh-api/source/include/wisun_tasklet.h index 5156293633..b16b39c8aa 100644 --- a/features/nanostack/mbed-mesh-api/source/include/wisun_tasklet.h +++ b/features/nanostack/mbed-mesh-api/source/include/wisun_tasklet.h @@ -125,6 +125,14 @@ int wisun_tasklet_remove_trusted_certificates(void); */ int wisun_tasklet_statistics_start(void); +/* + * \brief Reset Wi-SUN statistics + * + * \return 0 Statistics start successful + * \return < 0 in case of errors + */ +int wisun_tasklet_statistics_reset(void); + /* * \brief Reads Wi-SUN network statistics * diff --git a/features/nanostack/mbed-mesh-api/source/wisun_tasklet.c b/features/nanostack/mbed-mesh-api/source/wisun_tasklet.c index 2b4950402f..f1723e2957 100644 --- a/features/nanostack/mbed-mesh-api/source/wisun_tasklet.c +++ b/features/nanostack/mbed-mesh-api/source/wisun_tasklet.c @@ -624,6 +624,22 @@ int wisun_tasklet_statistics_start(void) return 0; } +int wisun_tasklet_statistics_reset(void) +{ + if (!wisun_tasklet_data_ptr || wisun_tasklet_data_ptr->network_interface_id < 0 || !mac_api) { + return -1; + } + + if (ns_sw_mac_statistics_reset(mac_api) < 0) { + return -1; + } + if (ws_statistics_reset(wisun_tasklet_data_ptr->network_interface_id) < 0) { + return -1; + } + + return 0; +} + static void wisun_tasklet_statistics_do_start(void) { if (!wisun_tasklet_data_ptr || wisun_tasklet_data_ptr->network_interface_id < 0 || !mac_api) { diff --git a/features/nanostack/sal-stack-nanostack/nanostack/sw_mac.h b/features/nanostack/sal-stack-nanostack/nanostack/sw_mac.h index 894b8b75c4..48a7b46923 100644 --- a/features/nanostack/sal-stack-nanostack/nanostack/sw_mac.h +++ b/features/nanostack/sal-stack-nanostack/nanostack/sw_mac.h @@ -89,6 +89,13 @@ extern struct fhss_api *ns_sw_mac_get_fhss_api(struct mac_api_s *mac_api); */ extern int ns_sw_mac_statistics_start(struct mac_api_s *mac_api, struct mac_statistics_s *mac_statistics); +/** + * @brief Reset all statistics from software MAC. + * @param mac_api MAC instance. + * @return 0 on success, -1 on fail. + */ +extern int ns_sw_mac_statistics_reset(struct mac_api_s *mac_api); + /** * @brief Start collecting statistics from PHY driver. * @param mac_api MAC instance. diff --git a/features/nanostack/sal-stack-nanostack/nanostack/ws_management_api.h b/features/nanostack/sal-stack-nanostack/nanostack/ws_management_api.h index f506c37995..02b374dadd 100644 --- a/features/nanostack/sal-stack-nanostack/nanostack/ws_management_api.h +++ b/features/nanostack/sal-stack-nanostack/nanostack/ws_management_api.h @@ -727,6 +727,16 @@ int ws_statistics_start( int8_t interface_id, ws_statistics_t *stats_ptr); +/** + * Reset Wi-SUN statistics. + * + * \param interface_id Network interface ID. + * + * \return 0 Success. + * \return <0 Failure. + */ +int ws_statistics_reset(int8_t interface_id); + /** * Stop collecting Wi-SUN statistics. * diff --git a/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_empty_functions.c b/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_empty_functions.c index c70f2e36c5..faffcfde16 100644 --- a/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_empty_functions.c +++ b/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_empty_functions.c @@ -434,6 +434,12 @@ int ws_statistics_start(int8_t interface_id, ws_statistics_t *stats_ptr) return -1; } +int ws_statistics_reset(int8_t interface_id) +{ + (void) interface_id; + return -1; +} + int ws_statistics_stop(int8_t interface_id) { (void) interface_id; diff --git a/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_stats.c b/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_stats.c index 85f2511221..ac9006a601 100644 --- a/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_stats.c +++ b/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_stats.c @@ -49,6 +49,21 @@ int ws_statistics_stop(int8_t interface_id) return 0; } +int ws_statistics_reset(int8_t interface_id) +{ + protocol_interface_info_entry_t *cur = protocol_stack_interface_info_get_by_id(interface_id); + if (!cur || !ws_info(cur)) { + return -1; + } + if (cur->ws_info->stored_stats_ptr == NULL) { + /* Wi-SUN statistics is not started */ + return 0; + } + cur->ws_info->stored_stats_ptr->asynch_rx_count = 0; + cur->ws_info->stored_stats_ptr->asynch_tx_count = 0; + return 0; +} + void ws_stats_update(protocol_interface_info_entry_t *cur, ws_stats_type_t type, uint32_t update_val) { if (!cur || !ws_info(cur)) { diff --git a/features/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c b/features/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c index 7fd08c6d25..cbd608be31 100644 --- a/features/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c +++ b/features/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c @@ -255,6 +255,23 @@ int ns_sw_mac_statistics_start(struct mac_api_s *mac_api, struct mac_statistics_ return 0; } +int ns_sw_mac_statistics_reset(struct mac_api_s *mac_api) +{ + if (!mac_api) { + return -1; + } + protocol_interface_rf_mac_setup_s *mac_setup = get_sw_mac_ptr_by_mac_api(mac_api); + if (!mac_setup) { + return -1; + } + if (mac_setup->mac_statistics == NULL) { + /* MAC statics is not started */ + return 0; + } + memset(mac_setup->mac_statistics, 0, sizeof(struct mac_statistics_s)); + return 0; +} + static int8_t ns_sw_mac_initialize(mac_api_t *api, mcps_data_confirm *mcps_data_conf_cb, mcps_data_indication *mcps_data_ind_cb, mcps_purge_confirm *mcps_purge_conf_cb, mlme_confirm *mlme_conf_callback, mlme_indication *mlme_ind_callback, int8_t parent_id)