mirror of
https://github.com/espressif/openthread.git
synced 2026-08-10 20:57:47 +00:00
[spinel] add support for Backbone Router service (#6232)
This commit adds spinel properties for Backbone Router: - SPINEL_PROP_THREAD_BACKBONE_ROUTER_PRIMARY - SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE - SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG - SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTER - SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER Property numbers have been adjusted to match the ones from #6228 and #6231.
This commit is contained in:
@@ -1350,6 +1350,11 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key)
|
||||
SPINEL_PROP_CSTR(THREAD_CSL_TIMEOUT),
|
||||
SPINEL_PROP_CSTR(THREAD_CSL_CHANNEL),
|
||||
SPINEL_PROP_CSTR(THREAD_DOMAIN_NAME),
|
||||
SPINEL_PROP_CSTR(THREAD_BACKBONE_ROUTER_PRIMARY),
|
||||
SPINEL_PROP_CSTR(THREAD_BACKBONE_ROUTER_LOCAL_STATE),
|
||||
SPINEL_PROP_CSTR(THREAD_BACKBONE_ROUTER_LOCAL_CONFIG),
|
||||
SPINEL_PROP_CSTR(THREAD_BACKBONE_ROUTER_LOCAL_REGISTER),
|
||||
SPINEL_PROP_CSTR(THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER),
|
||||
SPINEL_PROP_CSTR(MESHCOP_JOINER_STATE),
|
||||
SPINEL_PROP_CSTR(MESHCOP_JOINER_COMMISSIONING),
|
||||
SPINEL_PROP_CSTR(IPV6_LL_ADDR),
|
||||
@@ -1615,6 +1620,7 @@ const char *spinel_capability_to_cstr(spinel_capability_t capability)
|
||||
SPINEL_CAP_CSTR(THREAD_BORDER_ROUTER),
|
||||
SPINEL_CAP_CSTR(THREAD_SERVICE),
|
||||
SPINEL_CAP_CSTR(THREAD_CSL_RECEIVER),
|
||||
SPINEL_CAP_CSTR(THREAD_BACKBONE_ROUTER),
|
||||
SPINEL_CAP_CSTR(NEST_LEGACY_INTERFACE),
|
||||
SPINEL_CAP_CSTR(NEST_LEGACY_NET_WAKE),
|
||||
SPINEL_CAP_CSTR(NEST_TRANSMIT_HOOK),
|
||||
|
||||
+76
-9
@@ -724,6 +724,15 @@ enum
|
||||
SPINEL_RADIO_LINK_TREL_UDP6 = 1,
|
||||
};
|
||||
|
||||
// Backbone Router states used for:
|
||||
// @ref SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE
|
||||
enum
|
||||
{
|
||||
SPINEL_THREAD_BACKBONE_ROUTER_STATE_DISABLED = 0,
|
||||
SPINEL_THREAD_BACKBONE_ROUTER_STATE_SECONDARY = 1,
|
||||
SPINEL_THREAD_BACKBONE_ROUTER_STATE_PRIMARY = 2,
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SPINEL_SRP_CLIENT_ITEM_STATE_TO_ADD = 0, // Item to be added/registered.
|
||||
@@ -1190,15 +1199,16 @@ enum
|
||||
SPINEL_CAP_DUA = (SPINEL_CAP_OPENTHREAD__BEGIN + 15),
|
||||
SPINEL_CAP_OPENTHREAD__END = 640,
|
||||
|
||||
SPINEL_CAP_THREAD__BEGIN = 1024,
|
||||
SPINEL_CAP_THREAD_COMMISSIONER = (SPINEL_CAP_THREAD__BEGIN + 0),
|
||||
SPINEL_CAP_THREAD_TMF_PROXY = (SPINEL_CAP_THREAD__BEGIN + 1),
|
||||
SPINEL_CAP_THREAD_UDP_FORWARD = (SPINEL_CAP_THREAD__BEGIN + 2),
|
||||
SPINEL_CAP_THREAD_JOINER = (SPINEL_CAP_THREAD__BEGIN + 3),
|
||||
SPINEL_CAP_THREAD_BORDER_ROUTER = (SPINEL_CAP_THREAD__BEGIN + 4),
|
||||
SPINEL_CAP_THREAD_SERVICE = (SPINEL_CAP_THREAD__BEGIN + 5),
|
||||
SPINEL_CAP_THREAD_CSL_RECEIVER = (SPINEL_CAP_THREAD__BEGIN + 6),
|
||||
SPINEL_CAP_THREAD__END = 1152,
|
||||
SPINEL_CAP_THREAD__BEGIN = 1024,
|
||||
SPINEL_CAP_THREAD_COMMISSIONER = (SPINEL_CAP_THREAD__BEGIN + 0),
|
||||
SPINEL_CAP_THREAD_TMF_PROXY = (SPINEL_CAP_THREAD__BEGIN + 1),
|
||||
SPINEL_CAP_THREAD_UDP_FORWARD = (SPINEL_CAP_THREAD__BEGIN + 2),
|
||||
SPINEL_CAP_THREAD_JOINER = (SPINEL_CAP_THREAD__BEGIN + 3),
|
||||
SPINEL_CAP_THREAD_BORDER_ROUTER = (SPINEL_CAP_THREAD__BEGIN + 4),
|
||||
SPINEL_CAP_THREAD_SERVICE = (SPINEL_CAP_THREAD__BEGIN + 5),
|
||||
SPINEL_CAP_THREAD_CSL_RECEIVER = (SPINEL_CAP_THREAD__BEGIN + 6),
|
||||
SPINEL_CAP_THREAD_BACKBONE_ROUTER = (SPINEL_CAP_THREAD__BEGIN + 8),
|
||||
SPINEL_CAP_THREAD__END = 1152,
|
||||
|
||||
SPINEL_CAP_NEST__BEGIN = 15296,
|
||||
SPINEL_CAP_NEST_LEGACY_INTERFACE = (SPINEL_CAP_NEST__BEGIN + 0),
|
||||
@@ -2960,6 +2970,63 @@ enum
|
||||
*/
|
||||
SPINEL_PROP_THREAD_DUA_ID = SPINEL_PROP_THREAD_EXT__BEGIN + 54,
|
||||
|
||||
/// Thread 1.2 Primary Backbone Router information in the Thread Network.
|
||||
/** Format: `SSLC` - Read-Only
|
||||
*
|
||||
* Required capability: `SPINEL_CAP_NET_THREAD_1_2`
|
||||
*
|
||||
* `S`: Server.
|
||||
* `S`: Reregistration Delay (in seconds).
|
||||
* `L`: Multicast Listener Registration Timeout (in seconds).
|
||||
* `C`: Sequence Number.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_BACKBONE_ROUTER_PRIMARY = SPINEL_PROP_THREAD_EXT__BEGIN + 55,
|
||||
|
||||
/// Thread 1.2 Backbone Router local state.
|
||||
/** Format: `C` - Read-Write
|
||||
*
|
||||
* Required capability: `SPINEL_CAP_THREAD_BACKBONE_ROUTER`
|
||||
*
|
||||
* The valid values are specified by SPINEL_THREAD_BACKBONE_ROUTER_STATE_<state> enumeration.
|
||||
* Backbone functionality will be disabled if SPINEL_THREAD_BACKBONE_ROUTER_STATE_DISABLED
|
||||
* is writted to this property, enabled otherwise.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE = SPINEL_PROP_THREAD_EXT__BEGIN + 56,
|
||||
|
||||
/// Local Thread 1.2 Backbone Router configuration.
|
||||
/** Format: SLC - Read-Write
|
||||
*
|
||||
* Required capability: `SPINEL_CAP_THREAD_BACKBONE_ROUTER`
|
||||
*
|
||||
* `S`: Reregistration Delay (in seconds).
|
||||
* `L`: Multicast Listener Registration Timeout (in seconds).
|
||||
* `C`: Sequence Number.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG = SPINEL_PROP_THREAD_EXT__BEGIN + 57,
|
||||
|
||||
/// Register local Thread 1.2 Backbone Router configuration.
|
||||
/** Format: Empty (Write only).
|
||||
*
|
||||
* Required capability: `SPINEL_CAP_THREAD_BACKBONE_ROUTER`
|
||||
*
|
||||
* Writing to this property (with any value) will register local Backbone Router configuration.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTER = SPINEL_PROP_THREAD_EXT__BEGIN + 58,
|
||||
|
||||
/// Thread 1.2 Backbone Router registration jitter.
|
||||
/** Format: `C` - Read-Write
|
||||
*
|
||||
* Required capability: `SPINEL_CAP_THREAD_BACKBONE_ROUTER`
|
||||
*
|
||||
* `C`: Backbone Router registration jitter.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER = SPINEL_PROP_THREAD_EXT__BEGIN + 59,
|
||||
|
||||
SPINEL_PROP_THREAD_EXT__END = 0x1600,
|
||||
|
||||
SPINEL_PROP_IPV6__BEGIN = 0x60,
|
||||
|
||||
@@ -1935,6 +1935,10 @@ template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_CAPS>(void)
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_DUA));
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_BACKBONE_ROUTER));
|
||||
#endif
|
||||
|
||||
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
|
||||
|
||||
exit:
|
||||
|
||||
@@ -313,6 +313,16 @@ NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
|
||||
#if OPENTHREAD_CONFIG_DUA_ENABLE
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_DUA_ID),
|
||||
#endif
|
||||
#endif // OPENTHREAD_FTD
|
||||
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_PRIMARY),
|
||||
#endif
|
||||
#if OPENTHREAD_FTD
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER),
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_CHANNEL_MANAGER_DELAY),
|
||||
@@ -547,6 +557,12 @@ NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
|
||||
#if OPENTHREAD_CONFIG_DUA_ENABLE
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_DUA_ID),
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTER),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER),
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN),
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
#include "ncp_base.hpp"
|
||||
#include <openthread/config.h>
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#include <openthread/backbone_router_ftd.h>
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE
|
||||
#include <openthread/channel_manager.h>
|
||||
#endif
|
||||
@@ -398,6 +401,105 @@ exit:
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_DUA_ENABLE
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE>(void)
|
||||
{
|
||||
uint8_t state = SPINEL_THREAD_BACKBONE_ROUTER_STATE_DISABLED;
|
||||
|
||||
switch (otBackboneRouterGetState(mInstance))
|
||||
{
|
||||
case OT_BACKBONE_ROUTER_STATE_DISABLED:
|
||||
state = SPINEL_THREAD_BACKBONE_ROUTER_STATE_DISABLED;
|
||||
break;
|
||||
|
||||
case OT_BACKBONE_ROUTER_STATE_SECONDARY:
|
||||
state = SPINEL_THREAD_BACKBONE_ROUTER_STATE_SECONDARY;
|
||||
break;
|
||||
|
||||
case OT_BACKBONE_ROUTER_STATE_PRIMARY:
|
||||
state = SPINEL_THREAD_BACKBONE_ROUTER_STATE_PRIMARY;
|
||||
break;
|
||||
}
|
||||
|
||||
return mEncoder.WriteUint8(state);
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_STATE>(void)
|
||||
{
|
||||
uint8_t state;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(state));
|
||||
|
||||
if (state)
|
||||
{
|
||||
otBackboneRouterSetEnabled(mInstance, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
otBackboneRouterSetEnabled(mInstance, false);
|
||||
}
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
otBackboneRouterConfig bbrConfig;
|
||||
|
||||
otBackboneRouterGetConfig(mInstance, &bbrConfig);
|
||||
|
||||
SuccessOrExit(error = mEncoder.WriteUint16(bbrConfig.mReregistrationDelay));
|
||||
SuccessOrExit(error = mEncoder.WriteUint32(bbrConfig.mMlrTimeout));
|
||||
SuccessOrExit(error = mEncoder.WriteUint8(bbrConfig.mSequenceNumber));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_CONFIG>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
otBackboneRouterConfig bbrConfig;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(bbrConfig.mReregistrationDelay));
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(bbrConfig.mMlrTimeout));
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(bbrConfig.mSequenceNumber));
|
||||
|
||||
SuccessOrExit(error = otBackboneRouterSetConfig(mInstance, &bbrConfig));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTER>(void)
|
||||
{
|
||||
return otBackboneRouterRegister(mInstance);
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER>(void)
|
||||
{
|
||||
uint8_t jitter = otBackboneRouterGetRegistrationJitter(mInstance);
|
||||
|
||||
return mEncoder.WriteUint8(jitter);
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_LOCAL_REGISTRATION_JITTER>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint8_t jitter;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(jitter));
|
||||
|
||||
otBackboneRouterSetRegistrationJitter(mInstance, jitter);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_NET_PSKC>(void)
|
||||
{
|
||||
return mEncoder.WriteData(otThreadGetPskc(mInstance)->m8, sizeof(spinel_net_pskc_t));
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
||||
#include <openthread/server.h>
|
||||
#endif
|
||||
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||
#include "openthread/backbone_router.h"
|
||||
#endif
|
||||
|
||||
#include "common/code_utils.hpp"
|
||||
#include "common/debug.hpp"
|
||||
@@ -259,6 +262,24 @@ template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CSL_CHANNEL>(v
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
|
||||
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_BACKBONE_ROUTER_PRIMARY>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
otBackboneRouterConfig bbrConfig;
|
||||
|
||||
SuccessOrExit(error = otBackboneRouterGetPrimary(mInstance, &bbrConfig));
|
||||
|
||||
SuccessOrExit(error = mEncoder.WriteUint16(bbrConfig.mServer16));
|
||||
SuccessOrExit(error = mEncoder.WriteUint16(bbrConfig.mReregistrationDelay));
|
||||
SuccessOrExit(error = mEncoder.WriteUint32(bbrConfig.mMlrTimeout));
|
||||
SuccessOrExit(error = mEncoder.WriteUint8(bbrConfig.mSequenceNumber));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_DATA_POLL_PERIOD>(void)
|
||||
{
|
||||
return mEncoder.WriteUint32(otLinkGetPollPeriod(mInstance));
|
||||
|
||||
Reference in New Issue
Block a user