From ea3936a19889559463e2ade5efd2576790ded5f6 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Tue, 8 Nov 2016 12:20:22 -0800 Subject: [PATCH] Add spinel property and its handler to get the msg buffer counter info (#944) --- src/ncp/ncp_base.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/ncp/ncp_base.hpp | 1 + src/ncp/spinel.h | 23 +++++++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp index 26e3a436d..ec6b3d699 100644 --- a/src/ncp/ncp_base.cpp +++ b/src/ncp/ncp_base.cpp @@ -197,6 +197,8 @@ const NcpBase::GetPropertyHandlerEntry NcpBase::mGetPropertyHandlerTable[] = { SPINEL_PROP_CNTR_RX_SPINEL_TOTAL, &NcpBase::GetPropertyHandler_NCP_CNTR }, { SPINEL_PROP_CNTR_RX_SPINEL_ERR, &NcpBase::GetPropertyHandler_NCP_CNTR }, + { SPINEL_PROP_MSG_BUFFER_COUNTERS, &NcpBase::GetPropertyHandler_MSG_BUFFER_COUNTERS }, + #if OPENTHREAD_ENABLE_LEGACY { SPINEL_PROP_NEST_LEGACY_ULA_PREFIX, &NcpBase::GetPropertyHandler_NEST_LEGACY_ULA_PREFIX }, #endif @@ -2572,6 +2574,42 @@ bail: return errorCode; } +ThreadError NcpBase::GetPropertyHandler_MSG_BUFFER_COUNTERS(uint8_t header, spinel_prop_key_t key) +{ + ThreadError errorCode = kThreadError_None; + otBufferInfo bufferInfo; + + otGetMessageBufferInfo(mInstance, &bufferInfo); + + SuccessOrExit(errorCode = OutboundFrameBegin()); + + SuccessOrExit(errorCode = OutboundFrameFeedPacked("Cii", header, SPINEL_CMD_PROP_VALUE_IS, key)); + + SuccessOrExit(errorCode = OutboundFrameFeedPacked("T(SSSSSSSSSSSSSSSS)", + bufferInfo.mTotalBuffers, + bufferInfo.mFreeBuffers, + bufferInfo.m6loSendMessages, + bufferInfo.m6loSendBuffers, + bufferInfo.m6loReassemblyMessages, + bufferInfo.m6loReassemblyBuffers, + bufferInfo.mIp6Messages, + bufferInfo.mIp6Buffers, + bufferInfo.mMplMessages, + bufferInfo.mMplBuffers, + bufferInfo.mMleMessages, + bufferInfo.mMleBuffers, + bufferInfo.mArpMessages, + bufferInfo.mArpBuffers, + bufferInfo.mCoapClientMessages, + bufferInfo.mCoapClientBuffers + )); + + SuccessOrExit(errorCode = OutboundFrameSend()); + +exit: + return errorCode; +} + ThreadError NcpBase::GetPropertyHandler_MAC_WHITELIST(uint8_t header, spinel_prop_key_t key) { otMacWhitelistEntry entry; diff --git a/src/ncp/ncp_base.hpp b/src/ncp/ncp_base.hpp index d125c5f6d..ef71587aa 100644 --- a/src/ncp/ncp_base.hpp +++ b/src/ncp/ncp_base.hpp @@ -331,6 +331,7 @@ private: ThreadError GetPropertyHandler_THREAD_ROUTER_ROLE_ENABLED(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_CNTR(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_NCP_CNTR(uint8_t header, spinel_prop_key_t key); + ThreadError GetPropertyHandler_MSG_BUFFER_COUNTERS(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_WHITELIST(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_WHITELIST_ENABLED(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_THREAD_MODE(uint8_t header, spinel_prop_key_t key); diff --git a/src/ncp/spinel.h b/src/ncp/spinel.h index 8422e4169..26acc789e 100644 --- a/src/ncp/spinel.h +++ b/src/ncp/spinel.h @@ -829,6 +829,29 @@ typedef enum /** Format: `L` (Read-only) */ SPINEL_PROP_CNTR_RX_SPINEL_ERR = SPINEL_PROP_CNTR__BEGIN + 302, + /// The message buffer counter info + /** Format: `T(SSSSSSSSSSSSSSSS)` (Read-only) + * `T(` + * `S`, (TotalBuffers) The number of buffers in the pool. + * `S`, (FreeBuffers) The number of free message buffers. + * `S`, (6loSendMessages) The number of messages in the 6lo send queue. + * `S`, (6loSendBuffers) The number of buffers in the 6lo send queue. + * `S`, (6loReassemblyMessages) The number of messages in the 6LoWPAN reassembly queue. + * `S`, (6loReassemblyBuffers) The number of buffers in the 6LoWPAN reassembly queue. + * `S`, (Ip6Messages) The number of messages in the IPv6 send queue. + * `S`, (Ip6Buffers) The number of buffers in the IPv6 send queue. + * `S`, (MplMessages) The number of messages in the MPL send queue. + * `S`, (MplBuffers) The number of buffers in the MPL send queue. + * `S`, (MleMessages) The number of messages in the MLE send queue. + * `S`, (MleBuffers) The number of buffers in the MLE send queue. + * `S`, (ArpMessages) The number of messages in the ARP send queue. + * `S`, (ArpBuffers) The number of buffers in the ARP send queue. + * `S`, (CoapClientMessages) The number of messages in the CoAP client send queue. + * `S`, (CoapClientBuffers) The number of buffers in the CoAP client send queue. + * `)` + */ + SPINEL_PROP_MSG_BUFFER_COUNTERS = SPINEL_PROP_CNTR__BEGIN + 400, + SPINEL_PROP_CNTR__END = 2048, SPINEL_PROP_NEST__BEGIN = 15296,