[cli] service and server data as hex-encoded binary values (#5556)

This commit is contained in:
Jonathan Hui
2020-09-21 08:46:50 -07:00
committed by GitHub
parent f974f38155
commit 0683f78e17
4 changed files with 66 additions and 81 deletions
+33 -39
View File
@@ -1737,6 +1737,39 @@ Perform an IEEE 802.15.4 Energy Scan.
Done
```
### service
Module for controlling service registration in Network Data. Each change in service registration must be sent to leader by `netdata register` command before taking effect.
### service add \<enterpriseNumber\> \<serviceData\> \<serverData\>
Add service to the Network Data.
- enterpriseNumber: IANA enterprise number
- serviceData: hex-encoded binary service data
- serverData: hex-encoded binary server data
```bash
> service add 44970 112233 aabbcc
Done
> netdata register
Done
```
### service remove \<enterpriseNumber\> \<serviceData\>
Remove service from Network Data.
- enterpriseNumber: IANA enterprise number
- serviceData: hext-encoded binary service data
```bash
> service remove 44970 112233
Done
> netdata register
Done
```
### singleton
Return true when there are no other nodes in the network, otherwise return false.
@@ -2079,43 +2112,4 @@ Done
Factory Diagnostics module is enabled only when building OpenThread with `OPENTHREAD_CONFIG_DIAG_ENABLE=1` option. Go [diagnostics module][diag] for more information.
### service
Module for controlling service registration in Network Data. Each change in service registration must be sent to leader by `netdata register` command before taking effect.
### service add \<enterpriseNumber\> \<serviceData\> \<serverData\>
Add service to the Network Data.
```bash
> service add 44970 foo bar
Done
> netdata register
Done
> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc10
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:7c00
fe80:0:0:0:1486:2f57:3c:6e10
fdde:ad00:beef:0:8ca4:19ed:217a:eff9
Done
```
### service remove \<enterpriseNumber\> \<serviceData\>
Remove service from Network Data.
```bash
> service remove 44970 foo
Done
> netdata register
Done
> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:7c00
fe80:0:0:0:1486:2f57:3c:6e10
fdde:ad00:beef:0:8ca4:19ed:217a:eff9
Done
```
[diag]: ../../src/core/diags/README.md
+27 -36
View File
@@ -2257,52 +2257,43 @@ otError Interpreter::ProcessServiceList(void)
otError Interpreter::ProcessService(uint8_t aArgsLength, char *aArgs[])
{
otError error = OT_ERROR_NONE;
otError error = OT_ERROR_INVALID_COMMAND;
otServiceConfig cfg;
if (aArgsLength == 0)
{
SuccessOrExit(error = ProcessServiceList());
error = ProcessServiceList();
}
else if (strcmp(aArgs[0], "add") == 0)
else
{
otServiceConfig cfg;
long enterpriseNumber;
size_t length;
VerifyOrExit(aArgsLength > 3, error = OT_ERROR_INVALID_ARGS);
SuccessOrExit(error = ParseLong(aArgs[1], enterpriseNumber));
cfg.mEnterpriseNumber = static_cast<uint32_t>(enterpriseNumber);
length = strlen(aArgs[2]);
VerifyOrExit(length <= sizeof(cfg.mServiceData), error = OT_ERROR_NO_BUFS);
cfg.mServiceDataLength = static_cast<uint8_t>(length);
memcpy(cfg.mServiceData, aArgs[2], cfg.mServiceDataLength);
length = strlen(aArgs[3]);
VerifyOrExit(length <= sizeof(cfg.mServerConfig.mServerData), error = OT_ERROR_NO_BUFS);
cfg.mServerConfig.mServerDataLength = static_cast<uint8_t>(length);
memcpy(cfg.mServerConfig.mServerData, aArgs[3], cfg.mServerConfig.mServerDataLength);
cfg.mServerConfig.mStable = true;
SuccessOrExit(error = otServerAddService(mInstance, &cfg));
}
else if (strcmp(aArgs[0], "remove") == 0)
{
long enterpriseNumber = 0;
long enterpriseNumber;
int length;
VerifyOrExit(aArgsLength > 2, error = OT_ERROR_INVALID_ARGS);
SuccessOrExit(error = ParseLong(aArgs[1], enterpriseNumber));
cfg.mEnterpriseNumber = static_cast<uint32_t>(enterpriseNumber);
SuccessOrExit(error = otServerRemoveService(mInstance, static_cast<uint32_t>(enterpriseNumber),
reinterpret_cast<uint8_t *>(aArgs[2]),
static_cast<uint8_t>(strlen(aArgs[2]))));
}
else
{
ExitNow(error = OT_ERROR_INVALID_COMMAND);
length = Hex2Bin(aArgs[2], cfg.mServiceData, sizeof(cfg.mServiceData));
VerifyOrExit(length > 0, error = OT_ERROR_INVALID_ARGS);
cfg.mServiceDataLength = static_cast<uint8_t>(length);
if (strcmp(aArgs[0], "add") == 0)
{
VerifyOrExit(aArgsLength > 3, error = OT_ERROR_INVALID_ARGS);
length = Hex2Bin(aArgs[3], cfg.mServerConfig.mServerData, sizeof(cfg.mServerConfig.mServerData));
VerifyOrExit(length > 0, error = OT_ERROR_INVALID_ARGS);
cfg.mServerConfig.mServerDataLength = static_cast<uint8_t>(length);
cfg.mServerConfig.mStable = true;
error = otServerAddService(mInstance, &cfg);
}
else if (strcmp(aArgs[0], "remove") == 0)
{
error = otServerRemoveService(mInstance, cfg.mEnterpriseNumber, cfg.mServiceData, cfg.mServiceDataLength);
}
}
exit:
@@ -38,8 +38,8 @@ REED = 2
SRV_0_ID = 0
SRV_0_ENT_NUMBER = '123'
SRV_0_SERVICE_DATA = 'foo'
SRV_0_SERVER_DATA = 'bar'
SRV_0_SERVICE_DATA = '123'
SRV_0_SERVER_DATA = 'abc'
# Topology:
# LEADER -- REED
+4 -4
View File
@@ -39,13 +39,13 @@ ROUTER2 = 3
SRV_0_ID = 0
SRV_0_ENT_NUMBER = '123'
SRV_0_SERVICE_DATA = 'foo'
SRV_0_SERVER_DATA = 'bar'
SRV_0_SERVICE_DATA = '123'
SRV_0_SERVER_DATA = 'abc'
SRV_1_ID = 1
SRV_1_ENT_NUMBER = '234'
SRV_1_SERVICE_DATA = 'baz'
SRV_1_SERVER_DATA = 'qux'
SRV_1_SERVICE_DATA = '456'
SRV_1_SERVER_DATA = 'def'
class Test_Service(thread_cert.TestCase):