1*cfb92d14SAndroid Build Coastguard Worker /* 2*cfb92d14SAndroid Build Coastguard Worker * Copyright (c) 2016, The OpenThread Authors. 3*cfb92d14SAndroid Build Coastguard Worker * All rights reserved. 4*cfb92d14SAndroid Build Coastguard Worker * 5*cfb92d14SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*cfb92d14SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 7*cfb92d14SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 8*cfb92d14SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 9*cfb92d14SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 10*cfb92d14SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 11*cfb92d14SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 12*cfb92d14SAndroid Build Coastguard Worker * 3. Neither the name of the copyright holder nor the 13*cfb92d14SAndroid Build Coastguard Worker * names of its contributors may be used to endorse or promote products 14*cfb92d14SAndroid Build Coastguard Worker * derived from this software without specific prior written permission. 15*cfb92d14SAndroid Build Coastguard Worker * 16*cfb92d14SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17*cfb92d14SAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*cfb92d14SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*cfb92d14SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20*cfb92d14SAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*cfb92d14SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*cfb92d14SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*cfb92d14SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*cfb92d14SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*cfb92d14SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*cfb92d14SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 27*cfb92d14SAndroid Build Coastguard Worker */ 28*cfb92d14SAndroid Build Coastguard Worker 29*cfb92d14SAndroid Build Coastguard Worker /** 30*cfb92d14SAndroid Build Coastguard Worker * @file 31*cfb92d14SAndroid Build Coastguard Worker * This file contains definitions for the CLI interpreter. 32*cfb92d14SAndroid Build Coastguard Worker */ 33*cfb92d14SAndroid Build Coastguard Worker 34*cfb92d14SAndroid Build Coastguard Worker #ifndef CLI_HPP_ 35*cfb92d14SAndroid Build Coastguard Worker #define CLI_HPP_ 36*cfb92d14SAndroid Build Coastguard Worker 37*cfb92d14SAndroid Build Coastguard Worker #include "openthread-core-config.h" 38*cfb92d14SAndroid Build Coastguard Worker 39*cfb92d14SAndroid Build Coastguard Worker #include "cli_config.h" 40*cfb92d14SAndroid Build Coastguard Worker 41*cfb92d14SAndroid Build Coastguard Worker #include <stdarg.h> 42*cfb92d14SAndroid Build Coastguard Worker 43*cfb92d14SAndroid Build Coastguard Worker #include <openthread/border_agent.h> 44*cfb92d14SAndroid Build Coastguard Worker #include <openthread/cli.h> 45*cfb92d14SAndroid Build Coastguard Worker #include <openthread/dataset.h> 46*cfb92d14SAndroid Build Coastguard Worker #include <openthread/dns_client.h> 47*cfb92d14SAndroid Build Coastguard Worker #include <openthread/instance.h> 48*cfb92d14SAndroid Build Coastguard Worker #include <openthread/ip6.h> 49*cfb92d14SAndroid Build Coastguard Worker #include <openthread/link.h> 50*cfb92d14SAndroid Build Coastguard Worker #include <openthread/logging.h> 51*cfb92d14SAndroid Build Coastguard Worker #include <openthread/mesh_diag.h> 52*cfb92d14SAndroid Build Coastguard Worker #include <openthread/netdata.h> 53*cfb92d14SAndroid Build Coastguard Worker #include <openthread/ping_sender.h> 54*cfb92d14SAndroid Build Coastguard Worker #include <openthread/sntp.h> 55*cfb92d14SAndroid Build Coastguard Worker #include <openthread/tcp.h> 56*cfb92d14SAndroid Build Coastguard Worker #include <openthread/thread.h> 57*cfb92d14SAndroid Build Coastguard Worker #include <openthread/thread_ftd.h> 58*cfb92d14SAndroid Build Coastguard Worker #include <openthread/udp.h> 59*cfb92d14SAndroid Build Coastguard Worker 60*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_bbr.hpp" 61*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_br.hpp" 62*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_coap.hpp" 63*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_coap_secure.hpp" 64*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_commissioner.hpp" 65*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_config.h" 66*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_dataset.hpp" 67*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_dns.hpp" 68*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_history.hpp" 69*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_joiner.hpp" 70*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_link_metrics.hpp" 71*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_mac_filter.hpp" 72*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_mdns.hpp" 73*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_network_data.hpp" 74*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_ping.hpp" 75*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_srp_client.hpp" 76*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_srp_server.hpp" 77*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_tcat.hpp" 78*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_tcp.hpp" 79*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_udp.hpp" 80*cfb92d14SAndroid Build Coastguard Worker #include "cli/cli_utils.hpp" 81*cfb92d14SAndroid Build Coastguard Worker 82*cfb92d14SAndroid Build Coastguard Worker #include "common/array.hpp" 83*cfb92d14SAndroid Build Coastguard Worker #include "common/code_utils.hpp" 84*cfb92d14SAndroid Build Coastguard Worker #include "common/debug.hpp" 85*cfb92d14SAndroid Build Coastguard Worker #include "common/type_traits.hpp" 86*cfb92d14SAndroid Build Coastguard Worker #include "instance/instance.hpp" 87*cfb92d14SAndroid Build Coastguard Worker 88*cfb92d14SAndroid Build Coastguard Worker namespace ot { 89*cfb92d14SAndroid Build Coastguard Worker 90*cfb92d14SAndroid Build Coastguard Worker /** 91*cfb92d14SAndroid Build Coastguard Worker * @namespace ot::Cli 92*cfb92d14SAndroid Build Coastguard Worker * 93*cfb92d14SAndroid Build Coastguard Worker * @brief 94*cfb92d14SAndroid Build Coastguard Worker * This namespace contains definitions for the CLI interpreter. 95*cfb92d14SAndroid Build Coastguard Worker * 96*cfb92d14SAndroid Build Coastguard Worker */ 97*cfb92d14SAndroid Build Coastguard Worker namespace Cli { 98*cfb92d14SAndroid Build Coastguard Worker 99*cfb92d14SAndroid Build Coastguard Worker extern "C" void otCliPlatLogv(otLogLevel, otLogRegion, const char *, va_list); 100*cfb92d14SAndroid Build Coastguard Worker extern "C" void otCliAppendResult(otError aError); 101*cfb92d14SAndroid Build Coastguard Worker extern "C" void otCliOutputBytes(const uint8_t *aBytes, uint8_t aLength); 102*cfb92d14SAndroid Build Coastguard Worker extern "C" void otCliOutputFormat(const char *aFmt, ...); 103*cfb92d14SAndroid Build Coastguard Worker 104*cfb92d14SAndroid Build Coastguard Worker /** 105*cfb92d14SAndroid Build Coastguard Worker * Implements the CLI interpreter. 106*cfb92d14SAndroid Build Coastguard Worker * 107*cfb92d14SAndroid Build Coastguard Worker */ 108*cfb92d14SAndroid Build Coastguard Worker class Interpreter : public OutputImplementer, public Utils 109*cfb92d14SAndroid Build Coastguard Worker { 110*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD || OPENTHREAD_MTD 111*cfb92d14SAndroid Build Coastguard Worker friend class Br; 112*cfb92d14SAndroid Build Coastguard Worker friend class Bbr; 113*cfb92d14SAndroid Build Coastguard Worker friend class Commissioner; 114*cfb92d14SAndroid Build Coastguard Worker friend class Dns; 115*cfb92d14SAndroid Build Coastguard Worker friend class Joiner; 116*cfb92d14SAndroid Build Coastguard Worker friend class LinkMetrics; 117*cfb92d14SAndroid Build Coastguard Worker friend class Mdns; 118*cfb92d14SAndroid Build Coastguard Worker friend class NetworkData; 119*cfb92d14SAndroid Build Coastguard Worker friend class PingSender; 120*cfb92d14SAndroid Build Coastguard Worker friend class SrpClient; 121*cfb92d14SAndroid Build Coastguard Worker friend class SrpServer; 122*cfb92d14SAndroid Build Coastguard Worker #endif 123*cfb92d14SAndroid Build Coastguard Worker friend void otCliPlatLogv(otLogLevel, otLogRegion, const char *, va_list); 124*cfb92d14SAndroid Build Coastguard Worker friend void otCliAppendResult(otError aError); 125*cfb92d14SAndroid Build Coastguard Worker friend void otCliOutputBytes(const uint8_t *aBytes, uint8_t aLength); 126*cfb92d14SAndroid Build Coastguard Worker friend void otCliOutputFormat(const char *aFmt, ...); 127*cfb92d14SAndroid Build Coastguard Worker 128*cfb92d14SAndroid Build Coastguard Worker public: 129*cfb92d14SAndroid Build Coastguard Worker /** 130*cfb92d14SAndroid Build Coastguard Worker * Constructor 131*cfb92d14SAndroid Build Coastguard Worker * 132*cfb92d14SAndroid Build Coastguard Worker * @param[in] aInstance The OpenThread instance structure. 133*cfb92d14SAndroid Build Coastguard Worker * @param[in] aCallback A callback method called to process CLI output. 134*cfb92d14SAndroid Build Coastguard Worker * @param[in] aContext A user context pointer. 135*cfb92d14SAndroid Build Coastguard Worker */ 136*cfb92d14SAndroid Build Coastguard Worker explicit Interpreter(Instance *aInstance, otCliOutputCallback aCallback, void *aContext); 137*cfb92d14SAndroid Build Coastguard Worker 138*cfb92d14SAndroid Build Coastguard Worker /** 139*cfb92d14SAndroid Build Coastguard Worker * Returns a reference to the interpreter object. 140*cfb92d14SAndroid Build Coastguard Worker * 141*cfb92d14SAndroid Build Coastguard Worker * @returns A reference to the interpreter object. 142*cfb92d14SAndroid Build Coastguard Worker * 143*cfb92d14SAndroid Build Coastguard Worker */ GetInterpreter(void)144*cfb92d14SAndroid Build Coastguard Worker static Interpreter &GetInterpreter(void) 145*cfb92d14SAndroid Build Coastguard Worker { 146*cfb92d14SAndroid Build Coastguard Worker OT_ASSERT(sInterpreter != nullptr); 147*cfb92d14SAndroid Build Coastguard Worker 148*cfb92d14SAndroid Build Coastguard Worker return *sInterpreter; 149*cfb92d14SAndroid Build Coastguard Worker } 150*cfb92d14SAndroid Build Coastguard Worker 151*cfb92d14SAndroid Build Coastguard Worker /** 152*cfb92d14SAndroid Build Coastguard Worker * Initializes the Console interpreter. 153*cfb92d14SAndroid Build Coastguard Worker * 154*cfb92d14SAndroid Build Coastguard Worker * @param[in] aInstance The OpenThread instance structure. 155*cfb92d14SAndroid Build Coastguard Worker * @param[in] aCallback A pointer to a callback method. 156*cfb92d14SAndroid Build Coastguard Worker * @param[in] aContext A pointer to a user context. 157*cfb92d14SAndroid Build Coastguard Worker * 158*cfb92d14SAndroid Build Coastguard Worker */ 159*cfb92d14SAndroid Build Coastguard Worker static void Initialize(otInstance *aInstance, otCliOutputCallback aCallback, void *aContext); 160*cfb92d14SAndroid Build Coastguard Worker 161*cfb92d14SAndroid Build Coastguard Worker /** 162*cfb92d14SAndroid Build Coastguard Worker * Returns whether the interpreter is initialized. 163*cfb92d14SAndroid Build Coastguard Worker * 164*cfb92d14SAndroid Build Coastguard Worker * @returns Whether the interpreter is initialized. 165*cfb92d14SAndroid Build Coastguard Worker * 166*cfb92d14SAndroid Build Coastguard Worker */ IsInitialized(void)167*cfb92d14SAndroid Build Coastguard Worker static bool IsInitialized(void) { return sInterpreter != nullptr; } 168*cfb92d14SAndroid Build Coastguard Worker 169*cfb92d14SAndroid Build Coastguard Worker /** 170*cfb92d14SAndroid Build Coastguard Worker * Interprets a CLI command. 171*cfb92d14SAndroid Build Coastguard Worker * 172*cfb92d14SAndroid Build Coastguard Worker * @param[in] aBuf A pointer to a string. 173*cfb92d14SAndroid Build Coastguard Worker * 174*cfb92d14SAndroid Build Coastguard Worker */ 175*cfb92d14SAndroid Build Coastguard Worker void ProcessLine(char *aBuf); 176*cfb92d14SAndroid Build Coastguard Worker 177*cfb92d14SAndroid Build Coastguard Worker /** 178*cfb92d14SAndroid Build Coastguard Worker * Adds commands to the user command table. 179*cfb92d14SAndroid Build Coastguard Worker * 180*cfb92d14SAndroid Build Coastguard Worker * @param[in] aCommands A pointer to an array with user commands. 181*cfb92d14SAndroid Build Coastguard Worker * @param[in] aLength @p aUserCommands length. 182*cfb92d14SAndroid Build Coastguard Worker * @param[in] aContext @p aUserCommands length. 183*cfb92d14SAndroid Build Coastguard Worker * 184*cfb92d14SAndroid Build Coastguard Worker * @retval OT_ERROR_NONE Successfully updated command table with commands from @p aCommands. 185*cfb92d14SAndroid Build Coastguard Worker * @retval OT_ERROR_FAILED No available UserCommandsEntry to register requested user commands. 186*cfb92d14SAndroid Build Coastguard Worker */ 187*cfb92d14SAndroid Build Coastguard Worker otError SetUserCommands(const otCliCommand *aCommands, uint8_t aLength, void *aContext); 188*cfb92d14SAndroid Build Coastguard Worker 189*cfb92d14SAndroid Build Coastguard Worker protected: 190*cfb92d14SAndroid Build Coastguard Worker static Interpreter *sInterpreter; 191*cfb92d14SAndroid Build Coastguard Worker 192*cfb92d14SAndroid Build Coastguard Worker private: 193*cfb92d14SAndroid Build Coastguard Worker static constexpr uint8_t kIndentSize = 4; 194*cfb92d14SAndroid Build Coastguard Worker static constexpr uint16_t kMaxArgs = 32; 195*cfb92d14SAndroid Build Coastguard Worker static constexpr uint16_t kMaxLineLength = OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH; 196*cfb92d14SAndroid Build Coastguard Worker static constexpr uint16_t kMaxUserCommandEntries = OPENTHREAD_CONFIG_CLI_MAX_USER_CMD_ENTRIES; 197*cfb92d14SAndroid Build Coastguard Worker 198*cfb92d14SAndroid Build Coastguard Worker static constexpr uint32_t kNetworkDiagnosticTimeoutMsecs = 5000; 199*cfb92d14SAndroid Build Coastguard Worker static constexpr uint32_t kLocateTimeoutMsecs = 2500; 200*cfb92d14SAndroid Build Coastguard Worker 201*cfb92d14SAndroid Build Coastguard Worker static constexpr uint16_t kMaxTxtDataSize = OPENTHREAD_CONFIG_CLI_TXT_RECORD_MAX_SIZE; 202*cfb92d14SAndroid Build Coastguard Worker 203*cfb92d14SAndroid Build Coastguard Worker using Command = CommandEntry<Interpreter>; 204*cfb92d14SAndroid Build Coastguard Worker 205*cfb92d14SAndroid Build Coastguard Worker void OutputPrompt(void); 206*cfb92d14SAndroid Build Coastguard Worker void OutputResult(otError aError); 207*cfb92d14SAndroid Build Coastguard Worker 208*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_IP6_BR_COUNTERS_ENABLE 209*cfb92d14SAndroid Build Coastguard Worker void OutputBorderRouterCounters(void); 210*cfb92d14SAndroid Build Coastguard Worker #endif 211*cfb92d14SAndroid Build Coastguard Worker 212*cfb92d14SAndroid Build Coastguard Worker otError ProcessCommand(Arg aArgs[]); 213*cfb92d14SAndroid Build Coastguard Worker 214*cfb92d14SAndroid Build Coastguard Worker template <CommandId kCommandId> otError Process(Arg aArgs[]); 215*cfb92d14SAndroid Build Coastguard Worker 216*cfb92d14SAndroid Build Coastguard Worker otError ProcessUserCommands(Arg aArgs[]); 217*cfb92d14SAndroid Build Coastguard Worker 218*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD || OPENTHREAD_MTD 219*cfb92d14SAndroid Build Coastguard Worker 220*cfb92d14SAndroid Build Coastguard Worker #if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) 221*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE 222*cfb92d14SAndroid Build Coastguard Worker otError ProcessBackboneRouterLocal(Arg aArgs[]); 223*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE 224*cfb92d14SAndroid Build Coastguard Worker otError ProcessBackboneRouterMgmtMlr(Arg aArgs[]); 225*cfb92d14SAndroid Build Coastguard Worker void PrintMulticastListenersTable(void); 226*cfb92d14SAndroid Build Coastguard Worker #endif 227*cfb92d14SAndroid Build Coastguard Worker #endif 228*cfb92d14SAndroid Build Coastguard Worker #endif 229*cfb92d14SAndroid Build Coastguard Worker 230*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD 231*cfb92d14SAndroid Build Coastguard Worker void OutputEidCacheEntry(const otCacheEntryInfo &aEntry); 232*cfb92d14SAndroid Build Coastguard Worker #endif 233*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_TMF_ANYCAST_LOCATOR_ENABLE 234*cfb92d14SAndroid Build Coastguard Worker static void HandleLocateResult(void *aContext, 235*cfb92d14SAndroid Build Coastguard Worker otError aError, 236*cfb92d14SAndroid Build Coastguard Worker const otIp6Address *aMeshLocalAddress, 237*cfb92d14SAndroid Build Coastguard Worker uint16_t aRloc16); 238*cfb92d14SAndroid Build Coastguard Worker void HandleLocateResult(otError aError, const otIp6Address *aMeshLocalAddress, uint16_t aRloc16); 239*cfb92d14SAndroid Build Coastguard Worker #endif 240*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MESH_DIAG_ENABLE && OPENTHREAD_FTD 241*cfb92d14SAndroid Build Coastguard Worker static void HandleMeshDiagDiscoverDone(otError aError, otMeshDiagRouterInfo *aRouterInfo, void *aContext); 242*cfb92d14SAndroid Build Coastguard Worker void HandleMeshDiagDiscoverDone(otError aError, otMeshDiagRouterInfo *aRouterInfo); 243*cfb92d14SAndroid Build Coastguard Worker static void HandleMeshDiagQueryChildTableResult(otError aError, 244*cfb92d14SAndroid Build Coastguard Worker const otMeshDiagChildEntry *aChildEntry, 245*cfb92d14SAndroid Build Coastguard Worker void *aContext); 246*cfb92d14SAndroid Build Coastguard Worker void HandleMeshDiagQueryChildTableResult(otError aError, const otMeshDiagChildEntry *aChildEntry); 247*cfb92d14SAndroid Build Coastguard Worker static void HandleMeshDiagQueryChildIp6Addrs(otError aError, 248*cfb92d14SAndroid Build Coastguard Worker uint16_t aChildRloc16, 249*cfb92d14SAndroid Build Coastguard Worker otMeshDiagIp6AddrIterator *aIp6AddrIterator, 250*cfb92d14SAndroid Build Coastguard Worker void *aContext); 251*cfb92d14SAndroid Build Coastguard Worker void HandleMeshDiagQueryChildIp6Addrs(otError aError, 252*cfb92d14SAndroid Build Coastguard Worker uint16_t aChildRloc16, 253*cfb92d14SAndroid Build Coastguard Worker otMeshDiagIp6AddrIterator *aIp6AddrIterator); 254*cfb92d14SAndroid Build Coastguard Worker static void HandleMeshDiagQueryRouterNeighborTableResult(otError aError, 255*cfb92d14SAndroid Build Coastguard Worker const otMeshDiagRouterNeighborEntry *aNeighborEntry, 256*cfb92d14SAndroid Build Coastguard Worker void *aContext); 257*cfb92d14SAndroid Build Coastguard Worker void HandleMeshDiagQueryRouterNeighborTableResult(otError aError, 258*cfb92d14SAndroid Build Coastguard Worker const otMeshDiagRouterNeighborEntry *aNeighborEntry); 259*cfb92d14SAndroid Build Coastguard Worker 260*cfb92d14SAndroid Build Coastguard Worker #endif 261*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_MLR_ENABLE && OPENTHREAD_CONFIG_COMMISSIONER_ENABLE 262*cfb92d14SAndroid Build Coastguard Worker static void HandleMlrRegResult(void *aContext, 263*cfb92d14SAndroid Build Coastguard Worker otError aError, 264*cfb92d14SAndroid Build Coastguard Worker uint8_t aMlrStatus, 265*cfb92d14SAndroid Build Coastguard Worker const otIp6Address *aFailedAddresses, 266*cfb92d14SAndroid Build Coastguard Worker uint8_t aFailedAddressNum); 267*cfb92d14SAndroid Build Coastguard Worker void HandleMlrRegResult(otError aError, 268*cfb92d14SAndroid Build Coastguard Worker uint8_t aMlrStatus, 269*cfb92d14SAndroid Build Coastguard Worker const otIp6Address *aFailedAddresses, 270*cfb92d14SAndroid Build Coastguard Worker uint8_t aFailedAddressNum); 271*cfb92d14SAndroid Build Coastguard Worker #endif 272*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MULTI_RADIO 273*cfb92d14SAndroid Build Coastguard Worker void OutputMultiRadioInfo(const otMultiRadioNeighborInfo &aMultiRadioInfo); 274*cfb92d14SAndroid Build Coastguard Worker #endif 275*cfb92d14SAndroid Build Coastguard Worker 276*cfb92d14SAndroid Build Coastguard Worker static void HandleActiveScanResult(otActiveScanResult *aResult, void *aContext); 277*cfb92d14SAndroid Build Coastguard Worker static void HandleEnergyScanResult(otEnergyScanResult *aResult, void *aContext); 278*cfb92d14SAndroid Build Coastguard Worker static void HandleLinkPcapReceive(const otRadioFrame *aFrame, bool aIsTx, void *aContext); 279*cfb92d14SAndroid Build Coastguard Worker 280*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_TMF_NETDIAG_CLIENT_ENABLE 281*cfb92d14SAndroid Build Coastguard Worker void HandleDiagnosticGetResponse(otError aError, const otMessage *aMessage, const Ip6::MessageInfo *aMessageInfo); 282*cfb92d14SAndroid Build Coastguard Worker static void HandleDiagnosticGetResponse(otError aError, 283*cfb92d14SAndroid Build Coastguard Worker otMessage *aMessage, 284*cfb92d14SAndroid Build Coastguard Worker const otMessageInfo *aMessageInfo, 285*cfb92d14SAndroid Build Coastguard Worker void *aContext); 286*cfb92d14SAndroid Build Coastguard Worker 287*cfb92d14SAndroid Build Coastguard Worker void OutputMode(uint8_t aIndentSize, const otLinkModeConfig &aMode); 288*cfb92d14SAndroid Build Coastguard Worker void OutputConnectivity(uint8_t aIndentSize, const otNetworkDiagConnectivity &aConnectivity); 289*cfb92d14SAndroid Build Coastguard Worker void OutputRoute(uint8_t aIndentSize, const otNetworkDiagRoute &aRoute); 290*cfb92d14SAndroid Build Coastguard Worker void OutputRouteData(uint8_t aIndentSize, const otNetworkDiagRouteData &aRouteData); 291*cfb92d14SAndroid Build Coastguard Worker void OutputLeaderData(uint8_t aIndentSize, const otLeaderData &aLeaderData); 292*cfb92d14SAndroid Build Coastguard Worker void OutputNetworkDiagMacCounters(uint8_t aIndentSize, const otNetworkDiagMacCounters &aMacCounters); 293*cfb92d14SAndroid Build Coastguard Worker void OutputNetworkDiagMleCounters(uint8_t aIndentSize, const otNetworkDiagMleCounters &aMleCounters); 294*cfb92d14SAndroid Build Coastguard Worker void OutputChildTableEntry(uint8_t aIndentSize, const otNetworkDiagChildEntry &aChildEntry); 295*cfb92d14SAndroid Build Coastguard Worker #endif 296*cfb92d14SAndroid Build Coastguard Worker 297*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE 298*cfb92d14SAndroid Build Coastguard Worker void OutputTrelCounters(const otTrelCounters &aCounters); 299*cfb92d14SAndroid Build Coastguard Worker #endif 300*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 301*cfb92d14SAndroid Build Coastguard Worker void OutputNat64Counters(const otNat64Counters &aCounters); 302*cfb92d14SAndroid Build Coastguard Worker #endif 303*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_STATS_ENABLE 304*cfb92d14SAndroid Build Coastguard Worker void OutputRadioStatsTime(const char *aTimeName, uint64_t aTimeUs, uint64_t aTotalTime); 305*cfb92d14SAndroid Build Coastguard Worker #endif 306*cfb92d14SAndroid Build Coastguard Worker 307*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE 308*cfb92d14SAndroid Build Coastguard Worker static void HandleSntpResponse(void *aContext, uint64_t aTime, otError aResult); 309*cfb92d14SAndroid Build Coastguard Worker #endif 310*cfb92d14SAndroid Build Coastguard Worker 311*cfb92d14SAndroid Build Coastguard Worker void HandleActiveScanResult(otActiveScanResult *aResult); 312*cfb92d14SAndroid Build Coastguard Worker void HandleEnergyScanResult(otEnergyScanResult *aResult); 313*cfb92d14SAndroid Build Coastguard Worker void HandleLinkPcapReceive(const otRadioFrame *aFrame, bool aIsTx); 314*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE 315*cfb92d14SAndroid Build Coastguard Worker void HandleSntpResponse(uint64_t aTime, otError aResult); 316*cfb92d14SAndroid Build Coastguard Worker #endif 317*cfb92d14SAndroid Build Coastguard Worker 318*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 319*cfb92d14SAndroid Build Coastguard Worker void OutputBorderAgentCounters(const otBorderAgentCounters &aCounters); 320*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE 321*cfb92d14SAndroid Build Coastguard Worker static void HandleBorderAgentEphemeralKeyStateChange(void *aContext); 322*cfb92d14SAndroid Build Coastguard Worker void HandleBorderAgentEphemeralKeyStateChange(void); 323*cfb92d14SAndroid Build Coastguard Worker #endif 324*cfb92d14SAndroid Build Coastguard Worker #endif 325*cfb92d14SAndroid Build Coastguard Worker 326*cfb92d14SAndroid Build Coastguard Worker static void HandleDetachGracefullyResult(void *aContext); 327*cfb92d14SAndroid Build Coastguard Worker void HandleDetachGracefullyResult(void); 328*cfb92d14SAndroid Build Coastguard Worker 329*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD 330*cfb92d14SAndroid Build Coastguard Worker static void HandleDiscoveryRequest(const otThreadDiscoveryRequestInfo *aInfo, void *aContext); 331*cfb92d14SAndroid Build Coastguard Worker void HandleDiscoveryRequest(const otThreadDiscoveryRequestInfo &aInfo); 332*cfb92d14SAndroid Build Coastguard Worker #endif 333*cfb92d14SAndroid Build Coastguard Worker 334*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_CLI_REGISTER_IP6_RECV_CALLBACK 335*cfb92d14SAndroid Build Coastguard Worker static void HandleIp6Receive(otMessage *aMessage, void *aContext); 336*cfb92d14SAndroid Build Coastguard Worker #endif 337*cfb92d14SAndroid Build Coastguard Worker 338*cfb92d14SAndroid Build Coastguard Worker #endif // OPENTHREAD_FTD || OPENTHREAD_MTD 339*cfb92d14SAndroid Build Coastguard Worker 340*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_DIAG_ENABLE 341*cfb92d14SAndroid Build Coastguard Worker static void HandleDiagOutput(const char *aFormat, va_list aArguments, void *aContext); 342*cfb92d14SAndroid Build Coastguard Worker void HandleDiagOutput(const char *aFormat, va_list aArguments); 343*cfb92d14SAndroid Build Coastguard Worker #endif 344*cfb92d14SAndroid Build Coastguard Worker 345*cfb92d14SAndroid Build Coastguard Worker void SetCommandTimeout(uint32_t aTimeoutMilli); 346*cfb92d14SAndroid Build Coastguard Worker 347*cfb92d14SAndroid Build Coastguard Worker static void HandleTimer(Timer &aTimer); 348*cfb92d14SAndroid Build Coastguard Worker void HandleTimer(void); 349*cfb92d14SAndroid Build Coastguard Worker 350*cfb92d14SAndroid Build Coastguard Worker struct UserCommandsEntry 351*cfb92d14SAndroid Build Coastguard Worker { 352*cfb92d14SAndroid Build Coastguard Worker const otCliCommand *mCommands; 353*cfb92d14SAndroid Build Coastguard Worker uint8_t mLength; 354*cfb92d14SAndroid Build Coastguard Worker void *mContext; 355*cfb92d14SAndroid Build Coastguard Worker }; 356*cfb92d14SAndroid Build Coastguard Worker 357*cfb92d14SAndroid Build Coastguard Worker UserCommandsEntry mUserCommands[kMaxUserCommandEntries]; 358*cfb92d14SAndroid Build Coastguard Worker bool mCommandIsPending; 359*cfb92d14SAndroid Build Coastguard Worker bool mInternalDebugCommand; 360*cfb92d14SAndroid Build Coastguard Worker 361*cfb92d14SAndroid Build Coastguard Worker TimerMilliContext mTimer; 362*cfb92d14SAndroid Build Coastguard Worker 363*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_FTD || OPENTHREAD_MTD 364*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE 365*cfb92d14SAndroid Build Coastguard Worker bool mSntpQueryingInProgress; 366*cfb92d14SAndroid Build Coastguard Worker #endif 367*cfb92d14SAndroid Build Coastguard Worker 368*cfb92d14SAndroid Build Coastguard Worker Dataset mDataset; 369*cfb92d14SAndroid Build Coastguard Worker NetworkData mNetworkData; 370*cfb92d14SAndroid Build Coastguard Worker UdpExample mUdp; 371*cfb92d14SAndroid Build Coastguard Worker 372*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE 373*cfb92d14SAndroid Build Coastguard Worker MacFilter mMacFilter; 374*cfb92d14SAndroid Build Coastguard Worker #endif 375*cfb92d14SAndroid Build Coastguard Worker 376*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CLI_DNS_ENABLE 377*cfb92d14SAndroid Build Coastguard Worker Dns mDns; 378*cfb92d14SAndroid Build Coastguard Worker #endif 379*cfb92d14SAndroid Build Coastguard Worker 380*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MULTICAST_DNS_ENABLE && OPENTHREAD_CONFIG_MULTICAST_DNS_PUBLIC_API_ENABLE 381*cfb92d14SAndroid Build Coastguard Worker Mdns mMdns; 382*cfb92d14SAndroid Build Coastguard Worker #endif 383*cfb92d14SAndroid Build Coastguard Worker 384*cfb92d14SAndroid Build Coastguard Worker #if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) 385*cfb92d14SAndroid Build Coastguard Worker Bbr mBbr; 386*cfb92d14SAndroid Build Coastguard Worker #endif 387*cfb92d14SAndroid Build Coastguard Worker 388*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE 389*cfb92d14SAndroid Build Coastguard Worker Br mBr; 390*cfb92d14SAndroid Build Coastguard Worker #endif 391*cfb92d14SAndroid Build Coastguard Worker 392*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_TCP_ENABLE && OPENTHREAD_CONFIG_CLI_TCP_ENABLE 393*cfb92d14SAndroid Build Coastguard Worker TcpExample mTcp; 394*cfb92d14SAndroid Build Coastguard Worker #endif 395*cfb92d14SAndroid Build Coastguard Worker 396*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_COAP_API_ENABLE 397*cfb92d14SAndroid Build Coastguard Worker Coap mCoap; 398*cfb92d14SAndroid Build Coastguard Worker #endif 399*cfb92d14SAndroid Build Coastguard Worker 400*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE 401*cfb92d14SAndroid Build Coastguard Worker CoapSecure mCoapSecure; 402*cfb92d14SAndroid Build Coastguard Worker #endif 403*cfb92d14SAndroid Build Coastguard Worker 404*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE && OPENTHREAD_FTD 405*cfb92d14SAndroid Build Coastguard Worker Commissioner mCommissioner; 406*cfb92d14SAndroid Build Coastguard Worker #endif 407*cfb92d14SAndroid Build Coastguard Worker 408*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_JOINER_ENABLE 409*cfb92d14SAndroid Build Coastguard Worker Joiner mJoiner; 410*cfb92d14SAndroid Build Coastguard Worker #endif 411*cfb92d14SAndroid Build Coastguard Worker 412*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 413*cfb92d14SAndroid Build Coastguard Worker SrpClient mSrpClient; 414*cfb92d14SAndroid Build Coastguard Worker #endif 415*cfb92d14SAndroid Build Coastguard Worker 416*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_SRP_SERVER_ENABLE 417*cfb92d14SAndroid Build Coastguard Worker SrpServer mSrpServer; 418*cfb92d14SAndroid Build Coastguard Worker #endif 419*cfb92d14SAndroid Build Coastguard Worker 420*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE 421*cfb92d14SAndroid Build Coastguard Worker History mHistory; 422*cfb92d14SAndroid Build Coastguard Worker #endif 423*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MLE_LINK_METRICS_INITIATOR_ENABLE 424*cfb92d14SAndroid Build Coastguard Worker LinkMetrics mLinkMetrics; 425*cfb92d14SAndroid Build Coastguard Worker #endif 426*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BLE_TCAT_ENABLE && OPENTHREAD_CONFIG_CLI_BLE_SECURE_ENABLE 427*cfb92d14SAndroid Build Coastguard Worker Tcat mTcat; 428*cfb92d14SAndroid Build Coastguard Worker #endif 429*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_PING_SENDER_ENABLE 430*cfb92d14SAndroid Build Coastguard Worker PingSender mPing; 431*cfb92d14SAndroid Build Coastguard Worker #endif 432*cfb92d14SAndroid Build Coastguard Worker #endif // OPENTHREAD_FTD || OPENTHREAD_MTD 433*cfb92d14SAndroid Build Coastguard Worker 434*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_TMF_ANYCAST_LOCATOR_ENABLE 435*cfb92d14SAndroid Build Coastguard Worker bool mLocateInProgress : 1; 436*cfb92d14SAndroid Build Coastguard Worker #endif 437*cfb92d14SAndroid Build Coastguard Worker }; 438*cfb92d14SAndroid Build Coastguard Worker 439*cfb92d14SAndroid Build Coastguard Worker } // namespace Cli 440*cfb92d14SAndroid Build Coastguard Worker } // namespace ot 441*cfb92d14SAndroid Build Coastguard Worker 442*cfb92d14SAndroid Build Coastguard Worker #endif // CLI_HPP_ 443