diff --git a/src/cli/README.md b/src/cli/README.md index 073cca4a0..b378a7a6e 100644 --- a/src/cli/README.md +++ b/src/cli/README.md @@ -76,6 +76,7 @@ Done * [parentpriority](#parentpriority) * [ping](#ping-ipaddr-size-count-interval-hoplimit) * [pollperiod](#pollperiod-pollperiod) +* [preferrouterid](#preferrouterid-routerid) * [prefix](#prefix-add-prefix-pvdcsr-prf) * [promiscuous](#promiscuous) * [releaserouterid](#releaserouterid-routerid) @@ -1002,6 +1003,14 @@ Set the customized data poll period for sleepy end device (milliseconds >= 10ms) Done ``` +### preferrouterid \ +Prefer a Router ID when solicit router id from Leader. + +```bash +> preferrouterid 16 +Done +``` + ### prefix Get the prefix list in the local Network Data. diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index cc8879e30..44ea2f0a4 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -191,6 +191,7 @@ const struct Command Interpreter::sCommands[] = { {"prefix", &Interpreter::ProcessPrefix}, #endif #if OPENTHREAD_FTD + {"preferrouterid", &Interpreter::ProcessPreferRouterId}, {"pskc", &Interpreter::ProcessPskc}, {"releaserouterid", &Interpreter::ProcessReleaseRouterId}, #endif @@ -2480,6 +2481,19 @@ exit: #endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE #if OPENTHREAD_FTD +void Interpreter::ProcessPreferRouterId(int argc, char *argv[]) +{ + otError error = OT_ERROR_NONE; + unsigned long value; + + VerifyOrExit(argc == 1, error = OT_ERROR_INVALID_ARGS); + SuccessOrExit(error = ParseUnsignedLong(argv[0], value)); + error = otThreadSetPreferredRouterId(mInstance, static_cast(value)); + +exit: + AppendResult(error); +} + void Interpreter::ProcessReleaseRouterId(int argc, char *argv[]) { otError error = OT_ERROR_NONE; diff --git a/src/cli/cli.hpp b/src/cli/cli.hpp index bdf4010d2..37ebf4a0f 100644 --- a/src/cli/cli.hpp +++ b/src/cli/cli.hpp @@ -305,6 +305,7 @@ private: #endif void ProcessPromiscuous(int argc, char *argv[]); #if OPENTHREAD_FTD + void ProcessPreferRouterId(int argc, char *argv[]); void ProcessPskc(int argc, char *argv[]); void ProcessReleaseRouterId(int argc, char *argv[]); #endif diff --git a/tests/scripts/thread-cert/node.py b/tests/scripts/thread-cert/node.py index bc79d09ca..645e432bc 100755 --- a/tests/scripts/thread-cert/node.py +++ b/tests/scripts/thread-cert/node.py @@ -525,6 +525,11 @@ class Node: self.send_command(cmd) self._expect('Done') + def prefer_router_id(self, router_id): + cmd = 'preferrouterid %d' % router_id + self.send_command(cmd) + self._expect('Done') + def release_router_id(self, router_id): cmd = 'releaserouterid %d' % router_id self.send_command(cmd)