From 5576e0ce0d24f559fe8e938687536568a68643aa Mon Sep 17 00:00:00 2001 From: SherySheng Date: Fri, 12 Jan 2024 02:13:24 +0800 Subject: [PATCH] [cli] add pd state (#9757) --- src/cli/README_BR.md | 32 ++++++++++++++++++++++ src/cli/cli_br.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/cli/README_BR.md b/src/cli/README_BR.md index dcc174cfa..189de8a6f 100644 --- a/src/cli/README_BR.md +++ b/src/cli/README_BR.md @@ -12,6 +12,7 @@ Usage : `br [command] ...` - [nat64prefix](#nat64prefix) - [omrprefix](#omrprefix) - [onlinkprefix](#onlinkprefix) +- [pd](#pd) - [prefixtable](#prefixtable) - [rioprf](#rioprf) - [routeprf](#routeprf) @@ -33,6 +34,7 @@ disable enable omrprefix onlinkprefix +pd prefixtable rioprf routeprf @@ -176,6 +178,36 @@ fd14:1078:b3d5:b0b0:0:0::/96 Done ``` +### pd + +Usage: `br pd [enable|disable]` + +Enable/Disable the DHCPv6 PD. + +```bash +> br pd enable +Done + +> br pd disable +Done +``` + +Usage: `br pd state` + +Get the state of DHCPv6 PD. + +`OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE` is required. + +- `disabled`: DHCPv6 PD is disabled on the border router. +- `stopped`: DHCPv6 PD in enabled but won't try to request and publish a prefix. +- `running`: DHCPv6 PD is enabled and will try to request and publish a prefix. + +```bash +> br pd state +running +Done +``` + ### prefixtable Usage: `br prefixtable` diff --git a/src/cli/cli_br.cpp b/src/cli/cli_br.cpp index bd4d0dfe5..9c77c7d07 100644 --- a/src/cli/cli_br.cpp +++ b/src/cli/cli_br.cpp @@ -435,6 +435,66 @@ exit: return error; } +#if OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE +template <> otError Br::Process(Arg aArgs[]) +{ + otError error = OT_ERROR_NONE; + + /** + * @cli br pd (enable,disable) + * @code + * br pd enable + * Done + * @endcode + * @code + * br pd disable + * Done + * @endcode + * @cparam br pd @ca{enable|disable} + * @par api_copy + * #otBorderRoutingDhcp6PdSetEnabled + * + */ + if (Interpreter::GetInterpreter().ProcessEnableDisable(aArgs, otBorderRoutingDhcp6PdSetEnabled) == OT_ERROR_NONE) + { + } + /** + * @cli br pd state + * @code + * br pd state + * running + * Done + * @endcode + * @par api_copy + * #otBorderRoutingDhcp6PdGetState + */ + else if (aArgs[0] == "state") + { + static const char *const kDhcpv6PdStateStrings[] = { + "disabled", // (0) OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED + "stopped", // (1) OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED + "running", // (2) OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING + }; + + static_assert(0 == OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED, + "OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED value is not expected!"); + static_assert(1 == OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED, + "OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED value is not expected!"); + static_assert(2 == OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING, + "OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING value is not expected!"); + + OutputLine("%s", Stringify(otBorderRoutingDhcp6PdGetState(GetInstancePtr()), kDhcpv6PdStateStrings)); + } + else + { + ExitNow(error = OT_ERROR_INVALID_COMMAND); + } + +exit: + return error; +} +#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE + /** * @cli br routers * @code @@ -638,6 +698,9 @@ otError Br::Process(Arg aArgs[]) #endif CmdEntry("omrprefix"), CmdEntry("onlinkprefix"), +#if OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE + CmdEntry("pd"), +#endif CmdEntry("prefixtable"), CmdEntry("rioprf"), CmdEntry("routeprf"),