From 2378408aa095b6c34311441ec44cc9d230b0135b Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Sat, 19 Mar 2022 21:26:34 -0400 Subject: [PATCH] Fix Linux example discriminators to default to 3840 (#16477) * Fix Linux example discriminators to default to 3840 - Previous change lost the "default" discriminator people were using for a long time (3840) from when all-clusters-app is run without specifying the discriminator argument. - All users should always specify a non-default discriminator, but bringing back the "default" temporarily to avoid issues in test procedures. - Cert tests and proper usage of testing scripts always explicitly set discriminator, so the issue does not arise in CI Testing done: - Running all-clusters-app with no args uses 3840 - Cert tests pass * Restyled by clang-format Co-authored-by: Restyled.io --- examples/platform/linux/AppMain.cpp | 18 ++++++++++++++++++ examples/platform/linux/Options.cpp | 2 +- examples/platform/linux/Options.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/platform/linux/AppMain.cpp b/examples/platform/linux/AppMain.cpp index bb77b5a60c0477..f8fb1dd1fb8bcd 100644 --- a/examples/platform/linux/AppMain.cpp +++ b/examples/platform/linux/AppMain.cpp @@ -177,6 +177,24 @@ CHIP_ERROR InitCommissionableDataProvider(LinuxCommissionableDataProvider & prov // properly to the commissioner later, PASE will succeed. } + if (options.discriminator.HasValue()) + { + options.payload.discriminator = options.discriminator.Value(); + } + else + { + uint16_t defaultTestDiscriminator = 0; + chip::DeviceLayer::TestOnlyCommissionableDataProvider TestOnlyCommissionableDataProvider; + VerifyOrDie(TestOnlyCommissionableDataProvider.GetSetupDiscriminator(defaultTestDiscriminator) == CHIP_NO_ERROR); + + ChipLogError(Support, + "*** WARNING: Using temporary test discriminator %u due to --discriminator not " + "given on command line. This is temporary and will disappear. Please update your scripts " + "to explicitly configure discriminator. ***", + static_cast(defaultTestDiscriminator)); + options.payload.discriminator = defaultTestDiscriminator; + } + // Default to minimum PBKDF iterations uint32_t spake2pIterationCount = chip::Crypto::kSpake2p_Min_PBKDF_Iterations; if (options.spake2pIterations != 0) diff --git a/examples/platform/linux/Options.cpp b/examples/platform/linux/Options.cpp index 47322b73da2d4b..4f1f5348ca8ff6 100644 --- a/examples/platform/linux/Options.cpp +++ b/examples/platform/linux/Options.cpp @@ -239,7 +239,7 @@ bool HandleOption(const char * aProgram, OptionSet * aOptions, int aIdentifier, } else { - LinuxDeviceOptions::GetInstance().payload.discriminator = value; + LinuxDeviceOptions::GetInstance().discriminator.SetValue(value); } break; } diff --git a/examples/platform/linux/Options.h b/examples/platform/linux/Options.h index 1506fa53e61b81..c0c02b8f7fad3f 100644 --- a/examples/platform/linux/Options.h +++ b/examples/platform/linux/Options.h @@ -36,6 +36,7 @@ struct LinuxDeviceOptions { chip::SetupPayload payload; + chip::Optional discriminator; chip::Optional> spake2pVerifier; chip::Optional> spake2pSalt; uint32_t spake2pIterations = 0; // When not provided (0), will default elsewhere