Skip to content

Commit 1218832

Browse files
vivien-applepull[bot]
authored andcommitted
[chip-tool] Get the commissioner to be an optional argument for chip related commands instead of a dedicated command that stores the current commissioner on disk (#12259)
1 parent ec4f172 commit 1218832

15 files changed

+152
-191
lines changed

examples/chip-tool/BUILD.gn

-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ executable("chip-tool") {
3939
# TODO - enable CommissionedListCommand once DNS Cache is implemented
4040
# "commands/pairing/CommissionedListCommand.cpp",
4141
# "commands/pairing/CommissionedListCommand.h",
42-
"commands/pairing/ConfigureFabricCommand.cpp",
43-
"commands/pairing/ConfigureFabricCommand.h",
4442
"commands/pairing/PairingCommand.cpp",
4543
"commands/payload/AdditionalDataParseCommand.cpp",
4644
"commands/payload/SetupPayloadParseCommand.cpp",

examples/chip-tool/commands/clusters/ModelCommand.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ CHIP_ERROR ModelCommand::RunCommand()
2727
{
2828
ChipLogProgress(chipTool, "Sending command to node 0x%" PRIx64, mNodeId);
2929

30-
CHIP_ERROR err = mController.GetConnectedDevice(mNodeId, &mOnDeviceConnectedCallback, &mOnDeviceConnectionFailureCallback);
30+
CHIP_ERROR err =
31+
CurrentCommissioner().GetConnectedDevice(mNodeId, &mOnDeviceConnectedCallback, &mOnDeviceConnectionFailureCallback);
3132
VerifyOrExit(err == CHIP_NO_ERROR,
3233
ChipLogError(chipTool, "Failed in initiating connection to the device: %" PRIu64 ", error %" CHIP_ERROR_FORMAT,
3334
mNodeId, err.Format()));

examples/chip-tool/commands/common/CHIPCommand.cpp

+88-23
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,95 @@
2929

3030
using DeviceControllerFactory = chip::Controller::DeviceControllerFactory;
3131

32+
constexpr const char kCommissionerAlpha[] = "alpha";
33+
constexpr const char kCommissionerBeta[] = "beta";
34+
constexpr const char kCommissionerGamma[] = "gamma";
35+
36+
constexpr chip::FabricId kCommissionerAlphaFabricId = 1;
37+
constexpr chip::FabricId kCommissionerBetaFabricId = 2;
38+
constexpr chip::FabricId kCommissionerGammaFabricId = 3;
39+
3240
CHIP_ERROR CHIPCommand::Run()
3341
{
3442
#if CHIP_DEVICE_LAYER_TARGET_LINUX && CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
3543
// By default, Linux device is configured as a BLE peripheral while the controller needs a BLE central.
3644
ReturnLogErrorOnFailure(chip::DeviceLayer::Internal::BLEMgrImpl().ConfigureBle(0, true));
3745
#endif
3846

39-
ReturnLogErrorOnFailure(mStorage.Init());
40-
ReturnLogErrorOnFailure(mOpCredsIssuer.Initialize(mStorage));
41-
ReturnLogErrorOnFailure(mFabricStorage.Initialize(&mStorage));
47+
ReturnLogErrorOnFailure(mDefaultStorage.Init());
48+
ReturnLogErrorOnFailure(mFabricStorage.Initialize(&mDefaultStorage));
49+
50+
chip::Controller::FactoryInitParams factoryInitParams;
51+
factoryInitParams.fabricStorage = &mFabricStorage;
52+
factoryInitParams.listenPort = static_cast<uint16_t>(mDefaultStorage.GetListenPort() + CurrentCommissionerIndex());
53+
ReturnLogErrorOnFailure(DeviceControllerFactory::GetInstance().Init(factoryInitParams));
54+
55+
ReturnLogErrorOnFailure(InitializeCommissioner(CurrentCommissionerName(), CurrentCommissionerIndex()));
56+
57+
chip::DeviceLayer::PlatformMgr().ScheduleWork(RunQueuedCommand, reinterpret_cast<intptr_t>(this));
58+
ReturnLogErrorOnFailure(StartWaiting(GetWaitDuration()));
59+
60+
Shutdown();
61+
62+
//
63+
// We can call DeviceController::Shutdown() safely without grabbing the stack lock
64+
// since the CHIP thread and event queue have been stopped, preventing any thread
65+
// races.
66+
//
67+
ReturnLogErrorOnFailure(ShutdownCommissioner(CurrentCommissionerName()));
68+
69+
return CHIP_NO_ERROR;
70+
}
71+
72+
std::string CHIPCommand::CurrentCommissionerName()
73+
{
74+
std::string name = mCommissionerName.HasValue() ? mCommissionerName.Value() : kCommissionerAlpha;
75+
if (name.compare(kCommissionerAlpha) != 0 && name.compare(kCommissionerBeta) != 0 && name.compare(kCommissionerGamma) != 0)
76+
{
77+
ChipLogError(chipTool, "Unknown commissioner name: %s. Supported names are [%s, %s, %s]", name.c_str(), kCommissionerAlpha,
78+
kCommissionerBeta, kCommissionerGamma);
79+
chipDie();
80+
}
81+
82+
return name;
83+
}
84+
85+
uint16_t CHIPCommand::CurrentCommissionerIndex()
86+
{
87+
uint16_t index = 0;
88+
89+
std::string name = CurrentCommissionerName();
90+
if (name.compare(kCommissionerAlpha) == 0)
91+
{
92+
index = kCommissionerAlphaFabricId;
93+
}
94+
else if (name.compare(kCommissionerBeta) == 0)
95+
{
96+
index = kCommissionerBetaFabricId;
97+
}
98+
else if (name.compare(kCommissionerGamma) == 0)
99+
{
100+
index = kCommissionerGammaFabricId;
101+
}
102+
103+
VerifyOrDieWithMsg(index != 0, chipTool, "Unknown commissioner name: %s. Supported names are [%s, %s, %s]", name.c_str(),
104+
kCommissionerAlpha, kCommissionerBeta, kCommissionerGamma);
105+
return index;
106+
}
42107

108+
chip::Controller::DeviceCommissioner & CHIPCommand::CurrentCommissioner()
109+
{
110+
auto item = mCommissioners.find(CurrentCommissionerName());
111+
return *item->second.get();
112+
}
113+
114+
CHIP_ERROR CHIPCommand::ShutdownCommissioner(std::string key)
115+
{
116+
return mCommissioners[key].get()->Shutdown();
117+
}
118+
119+
CHIP_ERROR CHIPCommand::InitializeCommissioner(std::string key, chip::FabricId fabricId)
120+
{
43121
chip::Platform::ScopedMemoryBuffer<uint8_t> noc;
44122
chip::Platform::ScopedMemoryBuffer<uint8_t> icac;
45123
chip::Platform::ScopedMemoryBuffer<uint8_t> rcac;
@@ -64,36 +142,23 @@ CHIP_ERROR CHIPCommand::Run()
64142
// TODO - OpCreds should only be generated for pairing command
65143
// store the credentials in persistent storage, and
66144
// generate when not available in the storage.
67-
ReturnLogErrorOnFailure(mOpCredsIssuer.GenerateNOCChainAfterValidation(mStorage.GetLocalNodeId(), mStorage.GetFabricId(),
145+
ReturnLogErrorOnFailure(mCommissionerStorage.Init(key.c_str()));
146+
ReturnLogErrorOnFailure(mOpCredsIssuer.Initialize(mCommissionerStorage));
147+
ReturnLogErrorOnFailure(mOpCredsIssuer.GenerateNOCChainAfterValidation(mCommissionerStorage.GetLocalNodeId(), fabricId,
68148
ephemeralKey.Pubkey(), rcacSpan, icacSpan, nocSpan));
69149

70-
chip::Controller::FactoryInitParams factoryInitParams;
71-
factoryInitParams.fabricStorage = &mFabricStorage;
72-
factoryInitParams.listenPort = mStorage.GetListenPort();
73-
150+
std::unique_ptr<ChipDeviceCommissioner> commissioner = std::make_unique<ChipDeviceCommissioner>();
74151
chip::Controller::SetupParams commissionerParams;
75-
commissionerParams.storageDelegate = &mStorage;
152+
commissionerParams.storageDelegate = &mCommissionerStorage;
76153
commissionerParams.operationalCredentialsDelegate = &mOpCredsIssuer;
77154
commissionerParams.ephemeralKeypair = &ephemeralKey;
78155
commissionerParams.controllerRCAC = rcacSpan;
79156
commissionerParams.controllerICAC = icacSpan;
80157
commissionerParams.controllerNOC = nocSpan;
81158
commissionerParams.controllerVendorId = chip::VendorId::TestVendor1;
82159

83-
ReturnLogErrorOnFailure(DeviceControllerFactory::GetInstance().Init(factoryInitParams));
84-
ReturnLogErrorOnFailure(DeviceControllerFactory::GetInstance().SetupCommissioner(commissionerParams, mController));
85-
86-
chip::DeviceLayer::PlatformMgr().ScheduleWork(RunQueuedCommand, reinterpret_cast<intptr_t>(this));
87-
ReturnLogErrorOnFailure(StartWaiting(GetWaitDuration()));
88-
89-
Shutdown();
90-
91-
//
92-
// We can call DeviceController::Shutdown() safely without grabbing the stack lock
93-
// since the CHIP thread and event queue have been stopped, preventing any thread
94-
// races.
95-
//
96-
ReturnLogErrorOnFailure(mController.Shutdown());
160+
ReturnLogErrorOnFailure(DeviceControllerFactory::GetInstance().SetupCommissioner(commissionerParams, *(commissioner.get())));
161+
mCommissioners[key] = std::move(commissioner);
97162

98163
return CHIP_NO_ERROR;
99164
}

examples/chip-tool/commands/common/CHIPCommand.h

+15-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class CHIPCommand : public Command
3535
using NodeId = ::chip::NodeId;
3636
using PeerAddress = ::chip::Transport::PeerAddress;
3737

38-
CHIPCommand(const char * commandName) : Command(commandName) {}
38+
CHIPCommand(const char * commandName) : Command(commandName) { AddArgument("commissioner-name", &mCommissionerName); }
3939

4040
/////////// Command Interface /////////
4141
CHIP_ERROR Run() override;
@@ -62,11 +62,23 @@ class CHIPCommand : public Command
6262
// loop has been stopped.
6363
virtual void Shutdown() {}
6464

65-
ChipDeviceCommissioner mController;
66-
PersistentStorage mStorage;
65+
PersistentStorage mDefaultStorage;
66+
PersistentStorage mCommissionerStorage;
6767
chip::SimpleFabricStorage mFabricStorage;
6868

69+
// This method returns the commissioner instance to be used for running the command.
70+
// The default commissioner instance name is "alpha", but it can be overriden by passing
71+
// --identity "instance name" when running a command.
72+
ChipDeviceCommissioner & CurrentCommissioner();
73+
6974
private:
75+
CHIP_ERROR InitializeCommissioner(std::string key, chip::FabricId fabricId);
76+
CHIP_ERROR ShutdownCommissioner(std::string key);
77+
std::string CurrentCommissionerName();
78+
uint16_t CurrentCommissionerIndex();
79+
std::map<std::string, std::unique_ptr<ChipDeviceCommissioner>> mCommissioners;
80+
chip::Optional<char *> mCommissionerName;
81+
7082
static void RunQueuedCommand(intptr_t commandArg);
7183

7284
CHIP_ERROR mCommandExitStatus = CHIP_ERROR_INTERNAL;

examples/chip-tool/commands/discover/Commands.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ class Update : public DiscoverCommand
8383
CHIP_ERROR RunCommand(NodeId remoteId, uint64_t fabricId) override
8484
{
8585
ChipLogProgress(chipTool, "Mdns: Updating NodeId: %" PRIx64 " Compressed FabricId: %" PRIx64 " ...", remoteId,
86-
mController.GetCompressedFabricId());
87-
return mController.UpdateDevice(remoteId);
86+
CurrentCommissioner().GetCompressedFabricId());
87+
return CurrentCommissioner().UpdateDevice(remoteId);
8888
}
8989

9090
/////////// DeviceAddressUpdateDelegate Interface /////////

examples/chip-tool/commands/discover/DiscoverCommand.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020

2121
CHIP_ERROR DiscoverCommand::RunCommand()
2222
{
23-
mController.RegisterDeviceAddressUpdateDelegate(this);
23+
CurrentCommissioner().RegisterDeviceAddressUpdateDelegate(this);
2424
return RunCommand(mNodeId, mFabricId);
2525
}

examples/chip-tool/commands/discover/DiscoverCommissionablesCommand.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ using namespace ::chip;
2323

2424
CHIP_ERROR DiscoverCommissionablesCommand::RunCommand()
2525
{
26-
mController.RegisterDeviceDiscoveryDelegate(this);
26+
CurrentCommissioner().RegisterDeviceDiscoveryDelegate(this);
2727
Dnssd::DiscoveryFilter filter(Dnssd::DiscoveryFilterType::kNone, (uint64_t) 0);
28-
return mController.DiscoverCommissionableNodes(filter);
28+
return CurrentCommissioner().DiscoverCommissionableNodes(filter);
2929
}
3030

3131
void DiscoverCommissionablesCommand::OnDiscoveredDevice(const chip::Dnssd::DiscoveredNodeData & nodeData)

examples/chip-tool/commands/pairing/Commands.h

-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#pragma once
2020

2121
#include "CommissionedListCommand.h"
22-
#include "ConfigureFabricCommand.h"
2322
#include "PairingCommand.h"
2423

2524
#include <app/server/Dnssd.h>
@@ -189,7 +188,6 @@ void registerCommandsPairing(Commands & commands)
189188
make_unique<OpenCommissioningWindow>(),
190189
// TODO - enable CommissionedListCommand once DNS Cache is implemented
191190
// make_unique<CommissionedListCommand>(),
192-
make_unique<ConfigureFabricCommand>(),
193191
make_unique<StartUdcServerCommand>(),
194192
};
195193

examples/chip-tool/commands/pairing/ConfigureFabricCommand.cpp

-25
This file was deleted.

examples/chip-tool/commands/pairing/ConfigureFabricCommand.h

-33
This file was deleted.

0 commit comments

Comments
 (0)