[meshcop] support a zero-length network name for backwards compatibility (#8241)

Add a configuration option to support a zero-length network name
within the OT stack.
This commit is contained in:
Tom Rebbert
2022-10-11 16:22:57 -06:00
committed by GitHub
parent 04feddc458
commit 9c6b45c1dc
5 changed files with 23 additions and 5 deletions
+6
View File
@@ -202,6 +202,12 @@ otError otThreadSetNetworkName(otInstance *aInstance, const char *aNetworkName)
VerifyOrExit(AsCoreType(aInstance).Get<Mle::MleRouter>().IsDisabled(), error = kErrorInvalidState);
#if !OPENTHREAD_CONFIG_ALLOW_EMPTY_NETWORK_NAME
// Thread interfaces support a zero length name internally for backwards compatibility, but new names
// must be at least one valid character long.
VerifyOrExit(nullptr != aNetworkName && aNetworkName[0] != '\0', error = kErrorInvalidArgs);
#endif
error = AsCoreType(aInstance).Get<MeshCoP::NetworkNameManager>().SetNetworkName(aNetworkName);
AsCoreType(aInstance).Get<MeshCoP::ActiveDatasetManager>().Clear();
AsCoreType(aInstance).Get<MeshCoP::PendingDatasetManager>().Clear();
+10
View File
@@ -631,4 +631,14 @@
#define OPENTHREAD_CONFIG_NEIGHBOR_DISCOVERY_AGENT_ENABLE 0
#endif
/**
* @def OPENTHREAD_CONFIG_ALLOW_EMPTY_NETWORK_NAME
*
* Define as 1 to enable support for an empty network name (zero-length: "")
*
*/
#ifndef OPENTHREAD_CONFIG_ALLOW_EMPTY_NETWORK_NAME
#define OPENTHREAD_CONFIG_ALLOW_EMPTY_NETWORK_NAME 0
#endif
#endif // CONFIG_MISC_H_
+1 -1
View File
@@ -138,7 +138,7 @@ void NetworkNameTlv::SetNetworkName(const NameData &aNameData)
bool NetworkNameTlv::IsValid(void) const
{
return GetLength() >= 1 && IsValidUtf8String(mNetworkName, GetLength());
return IsValidUtf8String(mNetworkName, GetLength());
}
void SteeringDataTlv::CopyTo(SteeringData &aSteeringData) const
+4 -1
View File
@@ -71,6 +71,9 @@ Error NetworkName::Set(const char *aNameString)
// chars. The `+ 1` ensures that a `aNameString` with length
// longer than `kMaxSize` is correctly rejected (returning error
// `kErrorInvalidArgs`).
// Additionally, no minimum length is verified in order to ensure
// backwards compatibility with previous versions that allowed
// a zero-length name.
Error error;
NameData data(aNameString, kMaxSize + 1);
@@ -89,7 +92,7 @@ Error NetworkName::Set(const NameData &aNameData)
NameData data = aNameData;
uint8_t newLen = static_cast<uint8_t>(StringLength(data.GetBuffer(), data.GetLength()));
VerifyOrExit((0 < newLen) && (newLen <= kMaxSize), error = kErrorInvalidArgs);
VerifyOrExit(newLen <= kMaxSize, error = kErrorInvalidArgs);
data.SetLength(newLen);
+2 -3
View File
@@ -72,7 +72,8 @@ void TestNetworkName(void)
SuccessOrQuit(networkName.Set(MeshCoP::NameData(kName2, sizeof(kName2))));
CompareNetworkName(networkName, kName2);
VerifyOrQuit(networkName.Set(MeshCoP::NameData(kEmptyName, 0)) == kErrorInvalidArgs);
SuccessOrQuit(networkName.Set(MeshCoP::NameData(kEmptyName, 0)));
CompareNetworkName(networkName, kEmptyName);
SuccessOrQuit(networkName.Set(MeshCoP::NameData(kLongName, sizeof(kLongName))));
CompareNetworkName(networkName, kLongName);
@@ -80,8 +81,6 @@ void TestNetworkName(void)
VerifyOrQuit(networkName.Set(MeshCoP::NameData(kLongName, sizeof(kLongName) - 1)) == kErrorAlready,
"failed to detect duplicate");
VerifyOrQuit(networkName.Set(kEmptyName) == kErrorInvalidArgs);
SuccessOrQuit(networkName.Set(MeshCoP::NameData(kName1, sizeof(kName1))));
VerifyOrQuit(networkName.Set(MeshCoP::NameData(kTooLongName, sizeof(kTooLongName))) == kErrorInvalidArgs,