[cli] add cli command to control child supervision (#5620)

This commit is contained in:
Li Cao
2020-10-09 08:36:39 -07:00
committed by GitHub
parent 893e7c00db
commit fa57212b82
5 changed files with 153 additions and 2 deletions
+43
View File
@@ -28,6 +28,7 @@ Done
- [child](#child-list)
- [childip](#childip)
- [childmax](#childmax)
- [childsupervision](#childsupervision-interval)
- [childtimeout](#childtimeout)
- [coap](README_COAP.md)
- [coaps](README_COAPS.md)
@@ -476,6 +477,48 @@ Set the Thread maximum number of allowed children.
Done
```
### childsupervision interval
Get the Child Supervision Interval value.
Child supervision feature provides a mechanism for parent to ensure that a message is sent to each sleepy child within the supervision interval. If there is no transmission to the child within the supervision interval, OpenThread enqueues and sends a supervision message (a data message with empty payload) to the child. This command can only be used with FTD devices.
```bash
> childsupervision interval
30
Done
```
### childsupervision interval \<interval\>
Set the Child Supervision Interval value. This command can only be used with FTD devices.
```bash
> childsupervision interval 30
Done
```
### childsupervision checktimeout
Get the Child Supervision Check Timeout value.
If the device is a sleepy child and it does not hear from its parent within the specified check timeout, it initiates the re-attach process (MLE Child Update Request/Response exchange with its parent).
```bash
> childsupervision checktimeout
30
Done
```
### childsupervision checktimeout \<timeout\>
Set the Child Supervision Check Timeout value.
```bash
> childsupervision checktimeout 30
Done
```
### childtimeout
Get the Thread Child Timeout value.
+55
View File
@@ -56,6 +56,9 @@
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
#include <openthread/server.h>
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
#include <openthread/child_supervision.h>
#endif
#if OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE
#include <openthread/platform/misc.h>
#endif
@@ -942,6 +945,58 @@ exit:
}
#endif // OPENTHREAD_FTD
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
otError Interpreter::ProcessChildSupervision(uint8_t aArgsLength, char *aArgs[])
{
otError error = OT_ERROR_NONE;
uint16_t value;
VerifyOrExit(aArgsLength > 0, error = OT_ERROR_INVALID_ARGS);
if (strcmp(aArgs[0], "checktimeout") == 0)
{
if (aArgsLength == 1)
{
OutputLine("%u", otChildSupervisionGetCheckTimeout(mInstance));
}
else if (aArgsLength == 2)
{
SuccessOrExit(error = ParseAsUint16(aArgs[1], value));
otChildSupervisionSetCheckTimeout(mInstance, value);
}
else
{
ExitNow(error = OT_ERROR_INVALID_ARGS);
}
}
#if OPENTHREAD_FTD
else if (strcmp(aArgs[0], "interval") == 0)
{
if (aArgsLength == 1)
{
OutputLine("%u", otChildSupervisionGetInterval(mInstance));
}
else if (aArgsLength == 2)
{
SuccessOrExit(error = ParseAsUint16(aArgs[1], value));
otChildSupervisionSetInterval(mInstance, value);
}
else
{
ExitNow(error = OT_ERROR_INVALID_ARGS);
}
}
#endif
else
{
ExitNow(error = OT_ERROR_INVALID_ARGS);
}
exit:
return error;
}
#endif // OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
otError Interpreter::ProcessChildTimeout(uint8_t aArgsLength, char *aArgs[])
{
otError error = OT_ERROR_NONE;
+6
View File
@@ -286,6 +286,9 @@ private:
otError ProcessChild(uint8_t aArgsLength, char *aArgs[]);
otError ProcessChildIp(uint8_t aArgsLength, char *aArgs[]);
otError ProcessChildMax(uint8_t aArgsLength, char *aArgs[]);
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
otError ProcessChildSupervision(uint8_t aArgsLength, char *aArgs[]);
#endif
otError ProcessChildTimeout(uint8_t aArgsLength, char *aArgs[]);
#if OPENTHREAD_CONFIG_COAP_API_ENABLE
@@ -541,6 +544,9 @@ private:
{"child", &Interpreter::ProcessChild},
{"childip", &Interpreter::ProcessChildIp},
{"childmax", &Interpreter::ProcessChildMax},
#endif
#if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE
{"childsupervision", &Interpreter::ProcessChildSupervision},
#endif
{"childtimeout", &Interpreter::ProcessChildTimeout},
#if OPENTHREAD_CONFIG_COAP_API_ENABLE
+2 -2
View File
@@ -29,7 +29,7 @@
source "tests/scripts/expect/_common.exp"
proc setup_nodes {} {
proc setup_nodes {{childmode {r}}} {
# Sets up a Thread network with 2 nodes, spawn_1 as the leader and spawn_2
# as a child.
@@ -62,7 +62,7 @@ proc setup_nodes {} {
expect "Done"
set spawn_id $spawn_2
send "mode r\n"
send "mode $childmode\n"
expect "Done"
send "ifconfig up\n"
expect "Done"
+47
View File
@@ -0,0 +1,47 @@
#!/usr/bin/expect -f
#
# Copyright (c) 2020, The OpenThread Authors.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
source "tests/scripts/expect/_common.exp"
source "tests/scripts/expect/_multinode.exp"
setup_nodes "-"
set spawn_id $spawn_1
send "childsupervision interval 30\n"
expect "Done"
send "childsupervision interval\n"
expect "Done"
set spawn_id $spawn_2
send "childsupervision checktimeout 30\n"
expect "Done"
send "childsupervision checktimeout\n"
expect "Done"
dispose_nodes