mirror of
https://github.com/espressif/openthread.git
synced 2026-10-17 13:17:44 +00:00
[border-agent] read NetName and XPanId from active dataset for TXT data (#11989)
This change updates `BorderAgent::PrepareServiceTxtData()` to read the Network Name (`nn` key) and Extended PAN ID (`xp` key) from the Active Dataset, after verifying that the dataset is valid and has an active timestamp. Previously, these values were read directly from `NetworkNameManager` and `ExtendedPanIdManager`, which could provide default or initial values (during stack initialization). Reading from the Active Dataset ensures that the advertised service TXT data is consistent with the dataset currently in use by the device. The `ValidateMeshCoPTxtData()` test is updated to reflect this behavior.
This commit is contained in:
@@ -526,8 +526,9 @@ Error BorderAgent::PrepareServiceTxtData(ServiceTxtData &aTxtData)
|
||||
|
||||
Error BorderAgent::PrepareServiceTxtData(uint8_t *aBuffer, uint16_t aBufferSize, uint16_t &aLength)
|
||||
{
|
||||
Error error = kErrorNone;
|
||||
Dns::TxtDataEncoder encoder(aBuffer, aBufferSize);
|
||||
Error error = kErrorNone;
|
||||
Dns::TxtDataEncoder encoder(aBuffer, aBufferSize);
|
||||
MeshCoP::Dataset::Info datasetInfo;
|
||||
|
||||
#if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
|
||||
{
|
||||
@@ -538,11 +539,23 @@ Error BorderAgent::PrepareServiceTxtData(uint8_t *aBuffer, uint16_t aBufferSize,
|
||||
}
|
||||
#endif
|
||||
SuccessOrExit(error = encoder.AppendStringEntry("rv", kTxtDataRecordVersion));
|
||||
SuccessOrExit(error = encoder.AppendNameEntry("nn", Get<NetworkNameManager>().GetNetworkName().GetAsData()));
|
||||
SuccessOrExit(error = encoder.AppendEntry("xp", Get<ExtendedPanIdManager>().GetExtPanId()));
|
||||
SuccessOrExit(error = encoder.AppendBigEndianUintEntry("sb", DetermineStateBitmap()));
|
||||
SuccessOrExit(error = encoder.AppendStringEntry("tv", kThreadVersionString));
|
||||
SuccessOrExit(error = encoder.AppendEntry("xa", Get<Mac::Mac>().GetExtAddress()));
|
||||
SuccessOrExit(error = encoder.AppendBigEndianUintEntry("sb", DetermineStateBitmap()));
|
||||
|
||||
if (Get<MeshCoP::ActiveDatasetManager>().IsComplete() &&
|
||||
(Get<MeshCoP::ActiveDatasetManager>().Read(datasetInfo) == kErrorNone))
|
||||
{
|
||||
if (datasetInfo.IsPresent<Dataset::kExtendedPanId>())
|
||||
{
|
||||
SuccessOrExit(error = encoder.AppendEntry("xp", datasetInfo.Get<Dataset::kExtendedPanId>()));
|
||||
}
|
||||
|
||||
if (datasetInfo.IsPresent<Dataset::kNetworkName>())
|
||||
{
|
||||
SuccessOrExit(error = encoder.AppendNameEntry("nn", datasetInfo.Get<Dataset::kNetworkName>().GetAsData()));
|
||||
}
|
||||
}
|
||||
|
||||
if (Get<Mle::Mle>().IsAttached())
|
||||
{
|
||||
|
||||
@@ -1251,11 +1251,15 @@ void ValidateMeshCoPTxtData(TxtData &aTxtData, Node &aNode)
|
||||
aNode.Get<BorderAgent>().GetId(id);
|
||||
aTxtData.ValidateKey("id", id);
|
||||
aTxtData.ValidateKey("rv", "1");
|
||||
aTxtData.ValidateKey("nn", aNode.Get<NetworkNameManager>().GetNetworkName().GetAsCString());
|
||||
aTxtData.ValidateKey("xp", aNode.Get<ExtendedPanIdManager>().GetExtPanId());
|
||||
aTxtData.ValidateKey("tv", kThreadVersionString);
|
||||
aTxtData.ValidateKey("xa", aNode.Get<Mac::Mac>().GetExtAddress());
|
||||
|
||||
if (aNode.Get<MeshCoP::ActiveDatasetManager>().IsComplete())
|
||||
{
|
||||
aTxtData.ValidateKey("nn", aNode.Get<NetworkNameManager>().GetNetworkName().GetAsCString());
|
||||
aTxtData.ValidateKey("xp", aNode.Get<ExtendedPanIdManager>().GetExtPanId());
|
||||
}
|
||||
|
||||
if (aNode.Get<Mle::Mle>().IsAttached())
|
||||
{
|
||||
aTxtData.ValidateKey("pt", BigEndian::HostSwap32(aNode.Get<Mle::Mle>().GetLeaderData().GetPartitionId()));
|
||||
|
||||
Reference in New Issue
Block a user