From 62a3a207f39372952ef4b8be949f8ebdfe1c8664 Mon Sep 17 00:00:00 2001 From: kangping Date: Sun, 18 Apr 2021 12:45:36 +0800 Subject: [PATCH] [example] add minimum commissioner example --- example/BUILDING.md | 32 +++++ example/CMakeLists.txt | 42 ++++++ example/README.md | 83 ++++++++++++ example/mini_commissioner | Bin 0 -> 219688 bytes example/mini_commissioner.cpp | 218 ++++++++++++++++++++++++++++++ src/library/commissioner_impl.cpp | 14 +- 6 files changed, 382 insertions(+), 7 deletions(-) create mode 100644 example/BUILDING.md create mode 100644 example/CMakeLists.txt create mode 100644 example/README.md create mode 100755 example/mini_commissioner create mode 100644 example/mini_commissioner.cpp diff --git a/example/BUILDING.md b/example/BUILDING.md new file mode 100644 index 000000000..4a5b5623d --- /dev/null +++ b/example/BUILDING.md @@ -0,0 +1,32 @@ +# Build Minimum Thread Commissioner + +## CMake Build + +```shell +cd ~/ot-commissioner/example +mkdir -p build && cd build +cmake -GNinja -DBUILD_SHARED_LIBS=ON .. +ninja +``` + +A `mini_commissioner` binary will be generated in `build/`. + +## Standalone build + +Build and install the OT Commissioner library: + +```c++ +cd ~/ot-commissioner +mkdir -p build && cd build +cmake -GNinja -DBUILD_SHARED_LIBS=ON .. +sudo ninja install +``` + +Build the `mini_commissioner` app: + +```c++ +cd ~/ot-commissioner/example +clang++ -std=c++11 -Wall -g mini_commissioner.cpp -o mini_commissioner -lcommissioner +``` + +The `mini_commissioner` binary will be generated in current directory. diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 000000000..e120b5956 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,42 @@ +# +# Copyright (c) 2021, The OpenThread Commissioner 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. +# + +cmake_minimum_required(VERSION 3.10.1) +project(mini-commissioner VERSION 0.0.1) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR}/commissioner +) + +add_executable(mini_commissioner mini_commissioner.cpp) + +target_link_libraries(mini_commissioner PRIVATE commissioner) + +install(TARGETS mini_commissioner + RUNTIME DESTINATION bin +) diff --git a/example/README.md b/example/README.md new file mode 100644 index 000000000..e2c3caaa8 --- /dev/null +++ b/example/README.md @@ -0,0 +1,83 @@ +# Minimum Thread Commissioner + +This directory includes an example of building a minimum Thread Commissioner with the OT Commissioner library. The minimum Thread Commissioner petitions to given Border Router, enables MeshCoP for all joiners and commissions joiners. + +## Build + +See [BUILDING.md](./BUILDING.md) for building this mini Commissioner program. You can find details about the Border Router (`ot-daemon`) and simulation devices in this [codelab](https://openthread.io/codelabs/openthread-simulation-posix). + +## Run the Commissioner + +### Start the BR (ot-daemon) + +See the [codelab](https://openthread.io/codelabs/openthread-simulation-posix). + +### Start the Mini Commissioner + +After a successful build, we should get a `mini_commissioner` binary which can be started with four arguments: + +```shell +./mini_commissioner ::1 49191 00112233445566778899aabbccddeeff ABCDEF +``` + +You can get the usage by starting `mini_commissioner` with no arguments: + +```shell +./minim_commissioner +usage: + mini_commissioner +``` + +> Note: the WiFi/ethernet interface address of the BR should be used but not the Thread interface address. + +If everything go smooth, we will get outputs like below: + +```shell +./mini_commissioner ::1 49191 ca117352886a861cce8a91021e65dd1c ABCDEF +=================================================== +[Border Router address] : ::1 +[Border Router port] : 49191 +[PSKc] : ca117352886a861cce8a91021e65dd1c +[PSKd] : ABCDEF +=================================================== + +=================================================== +type CRTL + C to quit! +=================================================== + +petitioning to [::1]:49191 +the commissioner is active: true +enabling MeshCoP for all joiners +waiting for joiners +``` + +> Note: you are free to quit at any time with `CTRL+C`. + +### Start the joiner + +See the [codelab](https://openthread.io/codelabs/openthread-simulation-posix). + +if everything go smooth, we will get output like below for two times of joining: + +```shell +joiner "5ab1f2745b625c90" is requesting join the Thread network +joiner "5ab1f2745b625c90" is connected: OK +joiner "5ab1f2745b625c90" is commissioned +[Vendor Name] : OPENTHREAD +[Vendor Model] : NRF52840 +[Vendor SW Version] : 20191113-01632-g +[Vendor Stack Version] : f4ce36000010 +[Provisioning URL] : +[Vendor Data] : + +joiner "5ab1f2745b625c90" is requesting join the Thread network +joiner "5ab1f2745b625c90" is connected: OK +joiner "5ab1f2745b625c90" is commissioned +[Vendor Name] : OPENTHREAD +[Vendor Model] : NRF52840 +[Vendor SW Version] : 20191113-01632-g +[Vendor Stack Version] : f4ce36000010 +[Provisioning URL] : +[Vendor Data] : + +``` diff --git a/example/mini_commissioner b/example/mini_commissioner new file mode 100755 index 0000000000000000000000000000000000000000..cdde486000a58197249d0d0ffac4fc409300043e GIT binary patch literal 219688 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ℑ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 +#include + +#include +#include +#include + +#include + +#include + +using namespace ot::commissioner; + +static std::string ToHexString(const ByteArray &aBytes) +{ + std::string str; + + for (uint8_t byte : aBytes) + { + char buf[3]; + + sprintf(buf, "%02x", byte); + str.append(buf); + } + + return str; +} + +static ByteArray FromHexString(const std::string &aHex) +{ + assert(aHex.size() % 2 == 0); + + ByteArray bytes; + + for (size_t i = 0; i < aHex.size(); i += 2) + { + assert(isxdigit(aHex[i])); + assert(isxdigit(aHex[i + 1])); + + uint8_t x = isdigit(aHex[i]) ? (aHex[i] - '0') : (tolower(aHex[i]) - 'a' + 10); + uint8_t y = isdigit(aHex[i + 1]) ? (aHex[i + 1] - '0') : (tolower(aHex[i + 1]) - 'a' + 10); + + bytes.push_back((x << 4) | y); + } + return bytes; +} + +class MyCommissionerHandler : public CommissionerHandler +{ +public: + MyCommissionerHandler(const std::string &aPskd) + : mPskd(aPskd) + { + } + + std::string OnJoinerRequest(const ByteArray &aJoinerId) override + { + auto joinerId = ToHexString(aJoinerId); + + printf("\n"); + printf("joiner \"%s\" is requesting join the Thread network\n", joinerId.c_str()); + + return mPskd; + } + + void OnJoinerConnected(const ByteArray &aJoinerId, Error aError) override + { + auto joinerId = ToHexString(aJoinerId); + + printf("joiner \"%s\" is connected: %s\n", joinerId.c_str(), aError.ToString().c_str()); + } + + bool OnJoinerFinalize(const ByteArray & aJoinerId, + const std::string &aVendorName, + const std::string &aVendorModel, + const std::string &aVendorSwVersion, + const ByteArray & aVendorStackVersion, + const std::string &aProvisioningUrl, + const ByteArray & aVendorData) override + { + printf("joiner \"%s\" is commissioned\n", ToHexString(aJoinerId).c_str()); + printf("[Vendor Name] : %s\n", aVendorName.c_str()); + printf("[Vendor Model] : %s\n", aVendorModel.c_str()); + printf("[Vendor SW Version] : %s\n", aVendorSwVersion.c_str()); + printf("[Vendor Stack Version] : %s\n", ToHexString(aVendorStackVersion).c_str()); + printf("[Provisioning URL] : %s\n", aProvisioningUrl.c_str()); + printf("[Vendor Data] : %s\n", ToHexString(aVendorData).c_str()); + + return true; + } + +private: + std::string mPskd; +}; + +std::shared_ptr commissioner; + +void SignalHandler(int signal) +{ + if (commissioner != nullptr) + { + printf("\nResigning the commissioner\n"); + commissioner->Resign().IgnoreError(); + } + + exit(0); +} + +int main(int argc, const char *argv[]) +{ + if (argc != 5) + { + printf("usage:\n"); + printf(" mini_commissioner \n"); + return -1; + } + + std::string brAddr = argv[1]; + uint16_t brPort = std::stoul(argv[2]); + ByteArray pskc = FromHexString(argv[3]); + std::string pskd = argv[4]; + + printf("===================================================\n"); + printf("[Border Router address] : %s\n", brAddr.c_str()); + printf("[Border Router port] : %hu\n", brPort); + printf("[PSKc] : %s\n", ToHexString(pskc).c_str()); + printf("[PSKd] : %s\n", pskd.c_str()); + printf("===================================================\n\n"); + + MyCommissionerHandler myHandler{pskd}; + commissioner = Commissioner::Create(myHandler); + + signal(SIGINT, SignalHandler); + printf("===================================================\n"); + printf("type CRTL + C to quit!\n"); + printf("===================================================\n\n"); + + Config config; + config.mEnableCcm = false; + config.mPSKc = pskc; + + Error error; + + if ((error = commissioner->Init(config)) != ErrorCode::kNone) + { + printf("failed to initialize the commissioner: %s\n", error.ToString().c_str()); + return -1; + } + + std::string existingCommissionerId; + + printf("petitioning to [%s]:%hu\n", brAddr.c_str(), brPort); + error = commissioner->Petition(existingCommissionerId, brAddr, brPort); + if (error != ErrorCode::kNone) + { + printf("failed to petition to BR at [%s]:%hu: %s\n", brAddr.c_str(), brPort, error.ToString().c_str()); + return -1; + } + + // Check if we are active now. + printf("the commissioner is active: %s\n", commissioner->IsActive() ? "true" : "false"); + assert(commissioner->IsActive()); + + CommissionerDataset dataset; + + printf("enabling MeshCoP for all joiners\n"); + dataset.mPresentFlags |= CommissionerDataset::kSteeringDataBit; + dataset.mSteeringData = {0xFF}; // Set the steeering data to all-ones to allow all joiners. + error = commissioner->SetCommissionerDataset(dataset); + if (error != ErrorCode::kNone) + { + printf("failed to enable MeshCop for all joiners: %s\n", error.ToString().c_str()); + return -1; + } + + printf("waiting for joiners\n"); + while (true) + { + sleep(1); + } + + commissioner->Resign().IgnoreError(); + + return 0; +} diff --git a/src/library/commissioner_impl.cpp b/src/library/commissioner_impl.cpp index 9180fcbac..8a11b2ebc 100644 --- a/src/library/commissioner_impl.cpp +++ b/src/library/commissioner_impl.cpp @@ -2106,13 +2106,6 @@ void CommissionerImpl::HandleRlyRx(const coap::Request &aRlyRx) LOG_DEBUG(LOG_REGION_JOINER_SESSION, "received RLY_RX.ntf: joinerID={}, joinerRouterLocator={}, length={}", utils::Hex(joinerId), joinerRouterLocator, dtlsRecords.size()); - joinerPSKd = mCommissionerHandler.OnJoinerRequest(joinerId); - if (joinerPSKd.empty()) - { - LOG_INFO(LOG_REGION_JOINER_SESSION, "joiner(ID={}) is disabled", utils::Hex(joinerId)); - ExitNow(error = ERROR_REJECTED("joiner(ID={}) is disabled", utils::Hex(joinerId))); - } - { auto it = mJoinerSessions.find(joinerId); if (it != mJoinerSessions.end() && it->second.Disabled()) @@ -2125,6 +2118,13 @@ void CommissionerImpl::HandleRlyRx(const coap::Request &aRlyRx) { Address localAddr; + joinerPSKd = mCommissionerHandler.OnJoinerRequest(joinerId); + if (joinerPSKd.empty()) + { + LOG_INFO(LOG_REGION_JOINER_SESSION, "joiner(ID={}) is disabled", utils::Hex(joinerId)); + ExitNow(error = ERROR_REJECTED("joiner(ID={}) is disabled", utils::Hex(joinerId))); + } + SuccessOrExit(error = mBrClient.GetLocalAddr(localAddr)); it = mJoinerSessions .emplace(std::piecewise_construct, std::forward_as_tuple(joinerId),