mirror of
https://github.com/espressif/openthread.git
synced 2026-07-29 23:27:46 +00:00
[dataset] add API otDatasetParseTlvs (#6877)
Adds an API to parse a dataset from TLVs.
This commit is contained in:
@@ -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);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user