[cli] process exit in ot-ctl (#6605)

The exit command should only exit ot-ctl itself in daemon mode. This
commit adds processing exit command in the ot-ctl.

This commit also moves the exit command implementation out from core
as a user command on simulation and posix cli mode.
This commit is contained in:
Yakun Xu
2021-05-10 23:22:51 -07:00
committed by GitHub
parent 3c5c525da8
commit 833f8e2cff
5 changed files with 69 additions and 16 deletions
+17
View File
@@ -37,6 +37,7 @@
#include "openthread-system.h"
#include "cli/cli_config.h"
#include "common/code_utils.hpp"
/**
* This function initializes the CLI app.
@@ -76,6 +77,18 @@ void otTaskletsSignalPending(otInstance *aInstance)
OT_UNUSED_VARIABLE(aInstance);
}
#if OPENTHREAD_POSIX && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
static void ProcessExit(void *aContext, uint8_t aArgsLength, char *aArgs[])
{
OT_UNUSED_VARIABLE(aContext);
OT_UNUSED_VARIABLE(aArgsLength);
OT_UNUSED_VARIABLE(aArgs);
exit(EXIT_SUCCESS);
}
static const otCliCommand kCommands[] = {{"exit", ProcessExit}};
#endif
int main(int argc, char *argv[])
{
otInstance *instance;
@@ -117,6 +130,10 @@ pseudo_reset:
otAppCliInit(instance);
#if OPENTHREAD_POSIX && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
otCliSetUserCommands(kCommands, OT_ARRAY_LENGTH(kCommands), instance);
#endif
while (!otSysPseudoResetWasRequested())
{
otTaskletsProcess(instance);
-12
View File
@@ -1761,18 +1761,6 @@ exit:
return error;
}
#if OPENTHREAD_POSIX && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
otError Interpreter::ProcessExit(uint8_t aArgsLength, Arg aArgs[])
{
OT_UNUSED_VARIABLE(aArgsLength);
OT_UNUSED_VARIABLE(aArgs);
exit(EXIT_SUCCESS);
return OT_ERROR_NONE;
}
#endif
otError Interpreter::ProcessLog(uint8_t aArgsLength, Arg aArgs[])
{
otError error = OT_ERROR_NONE;
-3
View File
@@ -702,9 +702,6 @@ private:
{"eidcache", &Interpreter::ProcessEidCache},
#endif
{"eui64", &Interpreter::ProcessEui64},
#if OPENTHREAD_POSIX && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
{"exit", &Interpreter::ProcessExit},
#endif
{"extaddr", &Interpreter::ProcessExtAddress},
{"extpanid", &Interpreter::ProcessExtPanId},
{"factoryreset", &Interpreter::ProcessFactoryReset},
+35
View File
@@ -81,11 +81,45 @@ static_assert(kLineBufferSize >= sizeof("Error "), "kLineBufferSize is too small
int sSessionFd = -1;
void QuitOnExit(const char *aBuffer)
{
constexpr char kExit[] = "exit";
while (*aBuffer == ' ' || *aBuffer == '\t')
{
++aBuffer;
}
VerifyOrExit(strstr(aBuffer, kExit) == aBuffer);
aBuffer += sizeof(kExit) - 1;
while (*aBuffer == ' ' || *aBuffer == '\t')
{
++aBuffer;
}
switch (*aBuffer)
{
case '\0':
case '\r':
case '\n':
exit(OT_EXIT_SUCCESS);
break;
default:
break;
}
exit:
return;
}
#if OPENTHREAD_USE_READLINE
void InputCallback(char *aLine)
{
if (aLine != nullptr)
{
QuitOnExit(aLine);
add_history(aLine);
dprintf(sSessionFd, "%s\n", aLine);
free(aLine);
@@ -323,6 +357,7 @@ int main(int argc, char *argv[])
#else
VerifyOrExit(fgets(buffer, sizeof(buffer), stdin) != nullptr, ret = OT_EXIT_FAILURE);
QuitOnExit(buffer);
VerifyOrExit(DoWrite(sSessionFd, buffer, strlen(buffer)), ret = OT_EXIT_FAILURE);
#endif
}
+17 -1
View File
@@ -342,7 +342,23 @@ static void ProcessNetif(void *aContext, uint8_t aArgsLength, char *aArgs[])
otCliOutputFormat("%s:%u\r\n", otSysGetThreadNetifName(), otSysGetThreadNetifIndex());
}
static const otCliCommand kCommands[] = {{"netif", ProcessNetif}};
#if !OPENTHREAD_POSIX_CONFIG_DAEMON_ENABLE
static void ProcessExit(void *aContext, uint8_t aArgsLength, char *aArgs[])
{
OT_UNUSED_VARIABLE(aContext);
OT_UNUSED_VARIABLE(aArgsLength);
OT_UNUSED_VARIABLE(aArgs);
exit(EXIT_SUCCESS);
}
#endif
static const otCliCommand kCommands[] = {
#if !OPENTHREAD_POSIX_CONFIG_DAEMON_ENABLE
{"exit", ProcessExit},
#endif
{"netif", ProcessNetif},
};
int main(int argc, char *argv[])
{