[ncp] enable DHCPv6 PD support on the NCP (#12108)

This commit is contained in:
Thanh Nguyen
2025-11-19 08:10:43 -08:00
committed by GitHub
parent 973680045a
commit 5dbc1b8dbc
4 changed files with 72 additions and 0 deletions
+2
View File
@@ -1514,6 +1514,8 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key)
{SPINEL_PROP_RCP_MAC_KEY, "RCP_MAC_KEY"},
{SPINEL_PROP_DEBUG_LOG_TIMESTAMP_BASE, "DEBUG_LOG_TIMESTAMP_BASE"},
{SPINEL_PROP_DEBUG_TREL_TEST_MODE_ENABLE, "DEBUG_TREL_TEST_MODE_ENABLE"},
{SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_ENABLE, "SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_ENABLE"},
{SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_PREFIX, "SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_PREFIX"},
{0, NULL},
};
+26
View File
@@ -5014,6 +5014,32 @@ enum
SPINEL_PROP_BACKBONE_ROUTER__END = 0x990,
SPINEL_PROP_BORDER_ROUTER__BEGIN = 0x990,
/// Enables or Disables DHCPv6 Prefix Delegation
/**
* Format: `b` - Write-Only
*
* `b`: Enables or disables DHCPv6 Prefix Delegation
*/
SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_ENABLE = SPINEL_PROP_BORDER_ROUTER__BEGIN + 1,
/// Process DHCPv6 Prefix Delegation Prefix
/**
* Format: `6CLL` - Write-Only
*
* This property is used to provide a DHCPv6 Prefix Delegation (PD) prefix to the OpenThread stack
* via the NCP interface. It calls `otPlatBorderRoutingProcessDhcp6PdPrefix()`.
*
* `6` : IPv6 prefix address
* `C` : Prefix length in bits
* `L` : Valid lifetime in seconds
* `L` : Preferred lifetime in seconds
*/
SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_PREFIX = SPINEL_PROP_BORDER_ROUTER__BEGIN + 2,
SPINEL_PROP_BORDER_ROUTER__END = 0x9A0,
SPINEL_PROP_NEST__BEGIN = 0x3BC0,
SPINEL_PROP_NEST_STREAM_MFG = SPINEL_PROP_NEST__BEGIN + 0,
+6
View File
@@ -555,6 +555,12 @@ NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_BACKBONE_ROUTER_ENABLE),
#endif
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_ENABLE),
#if !OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_CLIENT_ENABLE
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_PREFIX),
#endif
#endif
#endif // OPENTHREAD_FTD
#if OPENTHREAD_MTD || OPENTHREAD_FTD
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_UNSOL_UPDATE_FILTER),
+38
View File
@@ -1648,6 +1648,44 @@ template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_SRP_SERVER_AUTO_ENABL
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
#endif // OPENTHREAD_CONFIG_SRP_SERVER_ENABLE
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_ENABLE>(void)
{
otError error = OT_ERROR_NONE;
bool enable;
SuccessOrExit(error = mDecoder.ReadBool(enable));
otBorderRoutingDhcp6PdSetEnabled(mInstance, enable);
exit:
return error;
}
#if !OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_CLIENT_ENABLE
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_BORDER_ROUTER_DHCP6_PD_PREFIX>(void)
{
otError error = OT_ERROR_NONE;
otBorderRoutingPrefixTableEntry prefixEntry;
const otIp6Address *prefixAddr;
memset(&prefixEntry, 0, sizeof(prefixEntry));
SuccessOrExit(error = mDecoder.ReadIp6Address(prefixAddr));
prefixEntry.mPrefix.mPrefix = *prefixAddr;
SuccessOrExit(error = mDecoder.ReadUint8(prefixEntry.mPrefix.mLength));
SuccessOrExit(error = mDecoder.ReadUint32(prefixEntry.mValidLifetime));
SuccessOrExit(error = mDecoder.ReadUint32(prefixEntry.mPreferredLifetime));
otPlatBorderRoutingProcessDhcp6PdPrefix(mInstance, &prefixEntry);
exit:
return error;
}
#endif
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
#if OPENTHREAD_CONFIG_NCP_DNSSD_ENABLE && OPENTHREAD_CONFIG_PLATFORM_DNSSD_ENABLE
void NcpBase::DnssdRegisterHost(const otPlatDnssdHost *aHost,