xref: /aosp_15_r20/external/openthread/src/cli/cli.hpp (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
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