From f6c1a40b29744e5599a9d6c12df550aa0fc03e82 Mon Sep 17 00:00:00 2001 From: Deepika Date: Fri, 16 Nov 2018 16:55:36 -0600 Subject: [PATCH] Add config options for socket statistics 1. MBED_CONF_NSAPI_SOCKET_STATS_ENABLE to enable the statistics 2. MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT max sockets statistics cached --- TESTS/netsocket/tcp/main.cpp | 4 ++-- TESTS/netsocket/tcp/tcp_tests.h | 2 +- TESTS/netsocket/tcp/tcpsocket_echotest.cpp | 4 ++-- .../tcp/tcpsocket_open_close_repeat.cpp | 4 ++-- TESTS/netsocket/tcp/tcpsocket_open_limit.cpp | 2 +- TESTS/netsocket/udp/main.cpp | 4 ++-- TESTS/netsocket/udp/udp_tests.h | 2 +- TESTS/netsocket/udp/udpsocket_echotest.cpp | 4 ++-- .../udp/udpsocket_open_close_repeat.cpp | 4 ++-- TESTS/netsocket/udp/udpsocket_open_limit.cpp | 2 +- features/netsocket/SocketStats.cpp | 16 ++++++++-------- features/netsocket/SocketStats.h | 3 +-- features/netsocket/mbed_lib.json | 8 ++++++++ platform/mbed_stats.h | 1 - tools/test_configs/EthernetInterface.json | 1 + .../HeapBlockDeviceAndEthernetInterface.json | 1 + 16 files changed, 35 insertions(+), 27 deletions(-) diff --git a/TESTS/netsocket/tcp/main.cpp b/TESTS/netsocket/tcp/main.cpp index b1e641dd20..7d0e241d04 100644 --- a/TESTS/netsocket/tcp/main.cpp +++ b/TESTS/netsocket/tcp/main.cpp @@ -38,7 +38,7 @@ NetworkInterface *net; Timer tc_bucket; // Timer to limit a test cases run time } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; #endif @@ -119,7 +119,7 @@ int split2half_rmng_tcp_test_time() return (tcp_global::TESTS_TIMEOUT - tc_bucket.read()) / 2; } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int fetch_stats() { return SocketStats::mbed_stats_socket_get_each(&tcp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT); diff --git a/TESTS/netsocket/tcp/tcp_tests.h b/TESTS/netsocket/tcp/tcp_tests.h index 456a5045c1..fd8739c710 100644 --- a/TESTS/netsocket/tcp/tcp_tests.h +++ b/TESTS/netsocket/tcp/tcp_tests.h @@ -24,7 +24,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len); nsapi_error_t tcpsocket_connect_to_echo_srv(TCPSocket &sock); nsapi_error_t tcpsocket_connect_to_discard_srv(TCPSocket &sock); -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE extern mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; int fetch_stats(void); #endif diff --git a/TESTS/netsocket/tcp/tcpsocket_echotest.cpp b/TESTS/netsocket/tcp/tcpsocket_echotest.cpp index cd92d42fbd..ab09a8fe82 100644 --- a/TESTS/netsocket/tcp/tcpsocket_echotest.cpp +++ b/TESTS/netsocket/tcp/tcpsocket_echotest.cpp @@ -114,7 +114,7 @@ void tcpsocket_echotest_nonblock_receiver(void *receive_bytes) void TCPSOCKET_ECHOTEST_NONBLOCK() { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int j = 0; int count = fetch_stats(); for (; j < count; j++) { @@ -167,7 +167,7 @@ void TCPSOCKET_ECHOTEST_NONBLOCK() bytes2send -= sent; } printf("[Sender#%02d] bytes sent: %d\n", s_idx, pkt_s); -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE count = fetch_stats(); for (j = 0; j < count; j++) { if ((tcp_stats[j].state == SOCK_OPEN) && (tcp_stats[j].proto == NSAPI_TCP)) { diff --git a/TESTS/netsocket/tcp/tcpsocket_open_close_repeat.cpp b/TESTS/netsocket/tcp/tcpsocket_open_close_repeat.cpp index 0a90d31efb..c32382e455 100644 --- a/TESTS/netsocket/tcp/tcpsocket_open_close_repeat.cpp +++ b/TESTS/netsocket/tcp/tcpsocket_open_close_repeat.cpp @@ -26,7 +26,7 @@ using namespace utest::v1; void TCPSOCKET_OPEN_CLOSE_REPEAT() { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int count = fetch_stats(); for (int j = 0; j < count; j++) { TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state); @@ -42,7 +42,7 @@ void TCPSOCKET_OPEN_CLOSE_REPEAT() TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close()); } delete sock; -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE count = fetch_stats(); for (int j = 0; j < count; j++) { TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state); diff --git a/TESTS/netsocket/tcp/tcpsocket_open_limit.cpp b/TESTS/netsocket/tcp/tcpsocket_open_limit.cpp index b1058d0912..f8f6594312 100644 --- a/TESTS/netsocket/tcp/tcpsocket_open_limit.cpp +++ b/TESTS/netsocket/tcp/tcpsocket_open_limit.cpp @@ -70,7 +70,7 @@ void TCPSOCKET_OPEN_LIMIT() break; } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int count = fetch_stats(); int open_count = 0; for (int j = 0; j < count; j++) { diff --git a/TESTS/netsocket/udp/main.cpp b/TESTS/netsocket/udp/main.cpp index be47098661..5a8d6157e3 100644 --- a/TESTS/netsocket/udp/main.cpp +++ b/TESTS/netsocket/udp/main.cpp @@ -37,7 +37,7 @@ namespace { NetworkInterface *net; } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; #endif @@ -80,7 +80,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len) } } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int fetch_stats() { return SocketStats::mbed_stats_socket_get_each(&udp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT); diff --git a/TESTS/netsocket/udp/udp_tests.h b/TESTS/netsocket/udp/udp_tests.h index a7b41081af..d74ba5abc0 100644 --- a/TESTS/netsocket/udp/udp_tests.h +++ b/TESTS/netsocket/udp/udp_tests.h @@ -22,7 +22,7 @@ NetworkInterface *get_interface(); void drop_bad_packets(UDPSocket &sock, int orig_timeout); void fill_tx_buffer_ascii(char *buff, size_t len); -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE extern mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; int fetch_stats(void); #endif diff --git a/TESTS/netsocket/udp/udpsocket_echotest.cpp b/TESTS/netsocket/udp/udpsocket_echotest.cpp index 16b596e4a6..9aebad9655 100644 --- a/TESTS/netsocket/udp/udpsocket_echotest.cpp +++ b/TESTS/netsocket/udp/udpsocket_echotest.cpp @@ -121,7 +121,7 @@ void udpsocket_echotest_nonblock_receiver(void *receive_bytes) void UDPSOCKET_ECHOTEST_NONBLOCK() { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int j = 0; int count = fetch_stats(); for (; j < count; j++) { @@ -183,7 +183,7 @@ void UDPSOCKET_ECHOTEST_NONBLOCK() } free(stack_mem); -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE TEST_ASSERT_EQUAL(1, fetch_stats()); TEST_ASSERT_EQUAL(NSAPI_UDP, udp_stats[0].proto); TEST_ASSERT(udp_stats[0].sent_bytes != 0); diff --git a/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp b/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp index c7ddc70a9d..ea5468f575 100644 --- a/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp +++ b/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp @@ -26,7 +26,7 @@ using namespace utest::v1; void UDPSOCKET_OPEN_CLOSE_REPEAT() { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int count = fetch_stats(); for (int j = 0; j < count; j++) { TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); @@ -42,7 +42,7 @@ void UDPSOCKET_OPEN_CLOSE_REPEAT() TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close()); } delete sock; -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE count = fetch_stats(); for (int j = 0; j < count; j++) { TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); diff --git a/TESTS/netsocket/udp/udpsocket_open_limit.cpp b/TESTS/netsocket/udp/udpsocket_open_limit.cpp index 6dd0f90846..362b115b46 100644 --- a/TESTS/netsocket/udp/udpsocket_open_limit.cpp +++ b/TESTS/netsocket/udp/udpsocket_open_limit.cpp @@ -70,7 +70,7 @@ void UDPSOCKET_OPEN_LIMIT() if (!socket_list_head) { break; } -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE int count = fetch_stats(); int open_count = 0; for (int j = 0; j < count; j++) { diff --git a/features/netsocket/SocketStats.cpp b/features/netsocket/SocketStats.cpp index 12a368b8af..df6ea66d89 100644 --- a/features/netsocket/SocketStats.cpp +++ b/features/netsocket/SocketStats.cpp @@ -24,7 +24,7 @@ #include #include -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE SingletonPtr SocketStats::_mutex; mbed_stats_socket_t SocketStats::_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; uint32_t SocketStats::_size = 0; @@ -44,7 +44,7 @@ size_t SocketStats::mbed_stats_socket_get_each(mbed_stats_socket_t *stats, size_ { MBED_ASSERT(stats != NULL); size_t i = 0; -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE memset(stats, 0, count * sizeof(mbed_stats_socket_t)); _mutex->lock(); for (uint32_t j = 0; j < count; j++) { @@ -64,7 +64,7 @@ SocketStats::SocketStats() void SocketStats::stats_new_socket_entry(const Socket *const reference_id) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); if (get_entry_position(reference_id) >= 0) { // Duplicate entry @@ -98,7 +98,7 @@ void SocketStats::stats_new_socket_entry(const Socket *const reference_id) void SocketStats::stats_update_socket_state(const Socket *const reference_id, socket_state state) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); int position = get_entry_position(reference_id); if (position >= 0) { @@ -113,7 +113,7 @@ void SocketStats::stats_update_socket_state(const Socket *const reference_id, so void SocketStats::stats_update_peer(const Socket *const reference_id, const SocketAddress &peer) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); int position = get_entry_position(reference_id); if ((position >= 0) && (!_stats[position].peer)) { @@ -125,7 +125,7 @@ void SocketStats::stats_update_peer(const Socket *const reference_id, const Sock void SocketStats::stats_update_proto(const Socket *const reference_id, nsapi_protocol_t proto) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); int position = get_entry_position(reference_id); if (position >= 0) { @@ -137,7 +137,7 @@ void SocketStats::stats_update_proto(const Socket *const reference_id, nsapi_pro void SocketStats::stats_update_sent_bytes(const Socket *const reference_id, size_t sent_bytes) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); int position = get_entry_position(reference_id); if ((position >= 0) && (sent_bytes > 0)) { @@ -149,7 +149,7 @@ void SocketStats::stats_update_sent_bytes(const Socket *const reference_id, size void SocketStats::stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes) { -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE _mutex->lock(); int position = get_entry_position(reference_id); if ((position >= 0) && (recv_bytes > 0)) { diff --git a/features/netsocket/SocketStats.h b/features/netsocket/SocketStats.h index 8cdefb38f8..fe53ab71d9 100644 --- a/features/netsocket/SocketStats.h +++ b/features/netsocket/SocketStats.h @@ -17,7 +17,6 @@ #ifndef SOCKET_STATS_H #define SOCKET_STATS_H -#include "platform/mbed_stats.h" #include "platform/SingletonPtr.h" #include "platform/PlatformMutex.h" #include "netsocket/Socket.h" @@ -99,7 +98,7 @@ public: /** Update bytes received on socket, which is cumulative count per socket */ void stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes); -#if defined(MBED_NW_STATS_ENABLED) +#ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE private: static mbed_stats_socket_t _stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; static SingletonPtr _mutex; diff --git a/features/netsocket/mbed_lib.json b/features/netsocket/mbed_lib.json index f1e2460982..973ba55507 100644 --- a/features/netsocket/mbed_lib.json +++ b/features/netsocket/mbed_lib.json @@ -30,6 +30,14 @@ "dns-cache-size": { "help": "Number of cached host name resolutions", "value": 3 + }, + "socket-stats-enable": { + "help": "Enable network socket statistics", + "value": false + }, + "socket-stats-max-count": { + "help": "Maximum number of socket statistics cached", + "value": 10 } }, "target_overrides": { diff --git a/platform/mbed_stats.h b/platform/mbed_stats.h index f3b520f11c..daf4092b49 100644 --- a/platform/mbed_stats.h +++ b/platform/mbed_stats.h @@ -36,7 +36,6 @@ extern "C" { #define MBED_CPU_STATS_ENABLED 1 #define MBED_HEAP_STATS_ENABLED 1 #define MBED_THREAD_STATS_ENABLED 1 -#define MBED_NW_STATS_ENABLED 1 #endif /** Maximum memory regions reported by mbed-os memory statistics */ diff --git a/tools/test_configs/EthernetInterface.json b/tools/test_configs/EthernetInterface.json index 70253a2e9f..0cee6d75bf 100644 --- a/tools/test_configs/EthernetInterface.json +++ b/tools/test_configs/EthernetInterface.json @@ -11,6 +11,7 @@ }, "target_overrides": { "*": { + "nsapi.socket-stats-enable": true, "target.network-default-interface-type": "ETHERNET" } } diff --git a/tools/test_configs/HeapBlockDeviceAndEthernetInterface.json b/tools/test_configs/HeapBlockDeviceAndEthernetInterface.json index 0969f7537a..9758b915dd 100644 --- a/tools/test_configs/HeapBlockDeviceAndEthernetInterface.json +++ b/tools/test_configs/HeapBlockDeviceAndEthernetInterface.json @@ -16,6 +16,7 @@ }, "target_overrides": { "*": { + "nsapi.socket-stats-enable": true, "target.network-default-interface-type": "ETHERNET" } }