From 0b0f371d3475db59f79af45f67cdb1ec476f0cd8 Mon Sep 17 00:00:00 2001 From: Li Cao Date: Tue, 25 Feb 2025 01:00:55 +0800 Subject: [PATCH] [version] add thread version string (#11276) This commit adds thread version string for the "tv" entry in border agent MeshCoP TXT records. The commit also replaces "1.3.1" with "1.4.0". --- src/core/BUILD.gn | 1 + src/core/CMakeLists.txt | 1 + src/core/meshcop/border_agent.cpp | 14 +------- src/core/thread/version.cpp | 53 +++++++++++++++++++++++++++++++ src/core/thread/version.hpp | 2 ++ tests/nexus/test_border_agent.cpp | 18 ++--------- 6 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 src/core/thread/version.cpp diff --git a/src/core/BUILD.gn b/src/core/BUILD.gn index 0913a1e70..918bc3333 100644 --- a/src/core/BUILD.gn +++ b/src/core/BUILD.gn @@ -713,6 +713,7 @@ openthread_core_files = [ "thread/tmf.hpp", "thread/uri_paths.cpp", "thread/uri_paths.hpp", + "thread/version.cpp", "thread/version.hpp", "utils/channel_manager.cpp", "utils/channel_manager.hpp", diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 6550ae80d..16d5db54d 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -250,6 +250,7 @@ set(COMMON_SOURCES thread/time_sync_service.cpp thread/tmf.cpp thread/uri_paths.cpp + thread/version.cpp utils/channel_manager.cpp utils/channel_monitor.cpp utils/flash.cpp diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 3da776560..b7f441b9f 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -379,18 +379,6 @@ template <> Error BorderAgent::MeshCoPTxtEncoder::AppendTxtEntry(const Error BorderAgent::MeshCoPTxtEncoder::EncodeTxtData(void) { -#if OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_1 - static const char kThreadVersionString[] = "1.1.1"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_2 - static const char kThreadVersionString[] = "1.2.0"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3 - static const char kThreadVersionString[] = "1.3.0"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3_1 - static const char kThreadVersionString[] = "1.3.1"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_4 - static const char kThreadVersionString[] = "1.4.0"; -#endif - Error error = kErrorNone; #if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE Id id; @@ -405,7 +393,7 @@ Error BorderAgent::MeshCoPTxtEncoder::EncodeTxtData(void) #endif SuccessOrExit(error = AppendTxtEntry("nn", Get().GetNetworkName().GetAsData())); SuccessOrExit(error = AppendTxtEntry("xp", Get().GetExtPanId())); - SuccessOrExit(error = AppendTxtEntry("tv", NameData(kThreadVersionString, sizeof(kThreadVersionString) - 1))); + SuccessOrExit(error = AppendTxtEntry("tv", NameData(kThreadVersionString, strlen(kThreadVersionString)))); SuccessOrExit(error = AppendTxtEntry("xa", Get().GetExtAddress())); state = GetStateBitmap(); diff --git a/src/core/thread/version.cpp b/src/core/thread/version.cpp new file mode 100644 index 000000000..830412058 --- /dev/null +++ b/src/core/thread/version.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * This file implements Thread Version. + */ + +#include "version.hpp" + +namespace ot { + +#if OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_1 +const char kThreadVersionString[] = "1.1.1"; +#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_2 +const char kThreadVersionString[] = "1.2.0"; +#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3 +const char kThreadVersionString[] = "1.3.0"; +#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3_1 +// Support projects on legacy "1.3.1" version, which is now "1.4" +const char kThreadVersionString[] = "1.4.0"; +#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_4 +const char kThreadVersionString[] = "1.4.0"; +#else +#error "The `OPENTHREAD_CONFIG_THREAD_VERSION` is not valid or supported" +#endif + +} // namespace ot diff --git a/src/core/thread/version.hpp b/src/core/thread/version.hpp index 0277ede49..873758d9f 100644 --- a/src/core/thread/version.hpp +++ b/src/core/thread/version.hpp @@ -49,6 +49,8 @@ constexpr uint16_t kThreadVersion1p3 = OT_THREAD_VERSION_1_3; ///< Thread Versio constexpr uint16_t kThreadVersion1p3p1 = OT_THREAD_VERSION_1_3_1; ///< Thread Version 1.3.1 constexpr uint16_t kThreadVersion1p4 = OT_THREAD_VERSION_1_4; ///< Thread Version 1.4 +extern const char kThreadVersionString[]; ///< Thread version as human-readable string. + } // namespace ot #endif // VERSION_HPP_ diff --git a/tests/nexus/test_border_agent.cpp b/tests/nexus/test_border_agent.cpp index c251c820e..6b24280ea 100644 --- a/tests/nexus/test_border_agent.cpp +++ b/tests/nexus/test_border_agent.cpp @@ -808,18 +808,6 @@ template <> bool CheckObjectSameAsTxtEntryData(const TxtEntry &aTxtEnt memcmp(aTxtEntry.mValue, aNameData.GetBuffer(), aNameData.GetLength()) == 0; } -#if OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_1 -static const char kThreadVersionString[] = "1.1.1"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_2 -static const char kThreadVersionString[] = "1.2.0"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3 -static const char kThreadVersionString[] = "1.3.0"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3_1 -static const char kThreadVersionString[] = "1.3.1"; -#elif OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_4 -static const char kThreadVersionString[] = "1.4.0"; -#endif - void TestBorderAgentMeshCoPServiceChangedCallback(void) { Core nexus; @@ -850,8 +838,7 @@ void TestBorderAgentMeshCoPServiceChangedCallback(void) VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("xp", txtEntry)); VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, node0.Get().GetExtPanId())); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("tv", txtEntry)); - VerifyOrQuit( - CheckObjectSameAsTxtEntryData(txtEntry, NameData(kThreadVersionString, sizeof(kThreadVersionString) - 1))); + VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, NameData(kThreadVersionString, strlen(kThreadVersionString)))); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("xa", txtEntry)); VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, node0.Get().GetExtAddress())); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("sb", txtEntry)); @@ -880,8 +867,7 @@ void TestBorderAgentMeshCoPServiceChangedCallback(void) VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("xp", txtEntry)); VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, node0.Get().GetExtPanId())); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("tv", txtEntry)); - VerifyOrQuit( - CheckObjectSameAsTxtEntryData(txtEntry, NameData(kThreadVersionString, sizeof(kThreadVersionString) - 1))); + VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, NameData(kThreadVersionString, strlen(kThreadVersionString)))); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("xa", txtEntry)); VerifyOrQuit(CheckObjectSameAsTxtEntryData(txtEntry, node0.Get().GetExtAddress())); VerifyOrQuit(meshCoPServiceTester.FindTxtEntry("sb", txtEntry));