mirror of
https://github.com/espressif/openthread.git
synced 2026-08-03 17:37:46 +00:00
[cli] add cli command to control child supervision (#5620)
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
Reference in New Issue
Block a user