From 1d1e5d16e0b9fb82a12737b3f5502df504e214f5 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 28 Oct 2022 16:04:59 -0700 Subject: [PATCH] [cli] enhance parsing of flags for `route` commands (#8340) This commit enhances `ParseRoute()` method allowing flags to be specified in one arg (sequence of char indicating different flags) or potentially over different args. This commit also allows `-` to be used in `route` or `prefix` commands to indicate empty flag. --- src/cli/cli.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 4d0054b62..b8a00517d 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -5539,6 +5539,9 @@ otError Interpreter::ParsePrefix(Arg aArgs[], otBorderRouterConfig &aConfig) aConfig.mDp = true; break; #endif + case '-': + break; + default: ExitNow(error = OT_ERROR_INVALID_ARGS); } @@ -5767,21 +5770,31 @@ otError Interpreter::ParseRoute(Arg aArgs[], otExternalRouteConfig &aConfig) { otRoutePreference preference; - if (*aArgs == "s") - { - aConfig.mStable = true; - } - else if (*aArgs == "n") - { - aConfig.mNat64 = true; - } - else if (ParsePreference(*aArgs, preference) == OT_ERROR_NONE) + if (ParsePreference(*aArgs, preference) == OT_ERROR_NONE) { aConfig.mPreference = preference; } else { - ExitNow(error = OT_ERROR_INVALID_ARGS); + for (char *arg = aArgs->GetCString(); *arg != '\0'; arg++) + { + switch (*arg) + { + case 's': + aConfig.mStable = true; + break; + + case 'n': + aConfig.mNat64 = true; + break; + + case '-': + break; + + default: + ExitNow(error = OT_ERROR_INVALID_ARGS); + } + } } }