[dataset] add API otDatasetParseTlvs (#6877)

Adds an API to parse a dataset from TLVs.
This commit is contained in:
jinran-google
2021-08-11 22:09:15 -07:00
committed by GitHub
parent 95c3f24b92
commit 292fe60fcb
6 changed files with 66 additions and 2 deletions
+12
View File
@@ -557,6 +557,18 @@ otError otDatasetGeneratePskc(const char * aPassPhrase,
*/
otError otNetworkNameFromString(otNetworkName *aNetworkName, const char *aNameString);
/**
* This function parses an Operational Dataset from a `otOperationalDatasetTlvs`.
*
* @param[in] aDatasetTlvs A pointer to dataset TLVs.
* @param[out] aDataset A pointer to where the dataset will be placed.
*
* @retval OT_ERROR_NONE Successfully set @p aDataset from @p aDatasetTlvs.
* @retval OT_ERROR_INVALID_ARGS @p aDatasetTlvs is invalid.
*
*/
otError otDatasetParseTlvs(const otOperationalDatasetTlvs *aDatasetTlvs, otOperationalDataset *aDataset);
/**
* @}
*
+1 -1
View File
@@ -53,7 +53,7 @@ extern "C" {
* @note This number versions both OpenThread platform and user APIs.
*
*/
#define OPENTHREAD_API_VERSION (147)
#define OPENTHREAD_API_VERSION (148)
/**
* @addtogroup api-instance
+1 -1
View File
@@ -313,7 +313,7 @@ Done
### init
Usage: `dataset init <active|new|pending>`
Usage: `dataset init <active|new|pending|tlvs <hex-encoded TLVs>>`
Initialize operational dataset buffer.
+11
View File
@@ -173,7 +173,18 @@ otError Dataset::ProcessInit(Arg aArgs[])
error = otDatasetCreateNewNetwork(mInterpreter.mInstance, &sDataset);
}
#endif
else if (aArgs[0] == "tlvs")
{
otOperationalDatasetTlvs datasetTlvs;
uint16_t size = sizeof(datasetTlvs.mTlvs);
SuccessOrExit(error = aArgs[1].ParseAsHexString(size, datasetTlvs.mTlvs));
datasetTlvs.mLength = static_cast<uint8_t>(size);
SuccessOrExit(error = otDatasetParseTlvs(&datasetTlvs, &sDataset));
}
exit:
return error;
}
+13
View File
@@ -188,3 +188,16 @@ otError otNetworkNameFromString(otNetworkName *aNetworkName, const char *aNameSt
return (error == OT_ERROR_ALREADY) ? OT_ERROR_NONE : error;
}
otError otDatasetParseTlvs(const otOperationalDatasetTlvs *aDatasetTlvs, otOperationalDataset *aDataset)
{
Error error = kErrorNone;
MeshCoP::Dataset dataset;
dataset.SetFrom(*aDatasetTlvs);
VerifyOrExit(dataset.IsValid(), error = kErrorInvalidArgs);
dataset.ConvertTo(*static_cast<MeshCoP::Dataset::Info *>(aDataset));
exit:
return error;
}
+28
View File
@@ -137,6 +137,32 @@ expect "PAN ID: 0xface"
expect "PSKc: 00112233445566778899aabbccddeeff"
expect "Security Policy: 678 onrcb"
expect_line "Done"
send "dataset pending -x\n"
expect "dataset pending -x"
set dataset_tlvs [expect_line {([0-9a-f]+)}]
expect_line "Done"
send "dataset clear\n"
expect_line "Done"
send "dataset init tlvs $dataset_tlvs\n"
expect_line "Done"
send "dataset\n"
expect "Pending Timestamp: 100"
expect "Active Timestamp: 100"
if {$channel == 11} {
expect "Channel: 18"
} else {
expect "Channel: 11"
}
expect "Channel Mask: 0x03fff800"
expect -re {Delay: \d+}
expect "Ext PAN ID: aabbccddeeff0011"
expect "Mesh Local Prefix: fdde:4860:0:0::/64"
expect "Network Key: aabbccddeeff00112233445566778899"
expect "Network Name: OT-network"
expect "PAN ID: 0xface"
expect "PSKc: 00112233445566778899aabbccddeeff"
expect "Security Policy: 678 onrcb"
expect_line "Done"
sleep 30
@@ -267,5 +293,7 @@ send "dataset securitypolicy 678 something_invalid\n"
expect "Error 7: InvalidArgs"
send "dataset set something_invalid 00\n"
expect "Error 7: InvalidArgs"
send "dataset init tlvs something_invalid\n"
expect "Error 7: InvalidArgs"
dispose_all