Skip to content

Commit

Permalink
[cli] process exit in ot-ctl (openthread#6605)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
bukepo authored May 11, 2021
1 parent 3c5c525 commit 833f8e2
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 16 deletions.
17 changes: 17 additions & 0 deletions examples/apps/cli/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@

#include "openthread-system.h"
#include "cli/cli_config.h"
#include "common/code_utils.hpp"

/**
* This function initializes the CLI app.
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -117,6 +130,10 @@ int main(int argc, char *argv[])

otAppCliInit(instance);

#if OPENTHREAD_POSIX && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
otCliSetUserCommands(kCommands, OT_ARRAY_LENGTH(kCommands), instance);
#endif

while (!otSysPseudoResetWasRequested())
{
otTaskletsProcess(instance);
Expand Down
12 changes: 0 additions & 12 deletions src/cli/cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1761,18 +1761,6 @@ otError Interpreter::ProcessExtAddress(uint8_t aArgsLength, Arg aArgs[])
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;
Expand Down
3 changes: 0 additions & 3 deletions src/cli/cli.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -702,9 +702,6 @@ class Interpreter
{"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},
Expand Down
35 changes: 35 additions & 0 deletions src/posix/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
}
Expand Down
18 changes: 17 additions & 1 deletion src/posix/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[])
{
Expand Down

0 comments on commit 833f8e2

Please sign in to comment.