Skip to content

Commit 7c2da28

Browse files
[nrf fromtree] Fix max timeout for open commissioning window (#35507)
Commissioning window can be opened using timeout exceeding the maximum value of 900 s defined by the spec. This can happen if selected transport is IP, but the device uses BLE extended announcement feature. Added checking if device is commissioned to be able to determine what max timeout should be used for the particular scenario. Renamed CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING to the CHIP_DEVICE_CONFIG_EXT_ADVERTISING, as config name sounds misleading and it seems it relates only to BLE. Fixes: #35505
1 parent f6c947f commit 7c2da28

13 files changed

+918
-38
lines changed

src/app/server/CommissioningWindowManager.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,20 @@ CHIP_ERROR CommissioningWindowManager::AdvertiseAndListenForPASE()
287287
return CHIP_NO_ERROR;
288288
}
289289

290+
System::Clock::Seconds32 CommissioningWindowManager::MaxCommissioningTimeout() const
291+
{
292+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
293+
/* Allow for extended announcement only if the device is uncomissioned. */
294+
if (mServer->GetFabricTable().FabricCount() == 0)
295+
{
296+
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
297+
return System::Clock::Seconds32(60 * 60 * 48);
298+
}
299+
#endif
300+
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
301+
return System::Clock::Seconds32(15 * 60);
302+
}
303+
290304
CHIP_ERROR CommissioningWindowManager::OpenBasicCommissioningWindow(Seconds32 commissioningTimeout,
291305
CommissioningWindowAdvertisement advertisementMode)
292306
{

src/app/server/CommissioningWindowManager.h

+1-10
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,7 @@ class CommissioningWindowManager : public Messaging::UnsolicitedMessageHandler,
5757
return CHIP_NO_ERROR;
5858
}
5959

60-
static constexpr System::Clock::Seconds32 MaxCommissioningTimeout()
61-
{
62-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
63-
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
64-
return System::Clock::Seconds32(60 * 60 * 48);
65-
#else
66-
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
67-
return System::Clock::Seconds32(15 * 60);
68-
#endif
69-
}
60+
System::Clock::Seconds32 MaxCommissioningTimeout() const;
7061

7162
System::Clock::Seconds32 MinCommissioningTimeout() const
7263
{

src/include/platform/CHIPDeviceConfig.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -631,18 +631,18 @@
631631
#endif
632632

633633
/**
634-
* CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
634+
* CHIP_DEVICE_CONFIG_EXT_ADVERTISING
635635
*
636636
* Optional configuration to enable Extended Announcement Duration up to 48h.
637637
* Should be used together with extending CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS past 15 minutes.
638638
* Disabled by default.
639639
*/
640640

641-
#ifndef CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
642-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING 0
641+
#ifndef CHIP_DEVICE_CONFIG_EXT_ADVERTISING
642+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 0
643643
#endif
644644

645-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
645+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
646646

647647
/**
648648
* CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS
@@ -726,18 +726,18 @@ static_assert(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN <= CHIP_DEVICE
726726
* Time in seconds that a factory new device will advertise commissionable node discovery.
727727
*/
728728
#ifndef CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS
729-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
729+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
730730
/**
731731
* By default, the extended announcement, when enabled, starts its extended advertising 15 mins
732732
* after the standard slow advertisement. Time at which the default discovery time would close the
733733
* commissioning window and stop the BLE.
734-
* Therefore, when CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING is enabled bump the default Discovery timeout
734+
* Therefore, when CHIP_DEVICE_CONFIG_EXT_ADVERTISING is enabled bump the default Discovery timeout
735735
* to the maximum allowed by the spec. 48h.
736736
*/
737737
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (60 * 60 * 48)
738738
#else
739739
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (15 * 60)
740-
#endif // CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
740+
#endif // CHIP_DEVICE_CONFIG_EXT_ADVERTISING
741741
#endif // CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS
742742

743743
/**

src/platform/ESP32/CHIPDevicePlatformConfig.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@
106106
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS CONFIG_CHIP_DISCOVERY_TIMEOUT_SECS
107107
#define CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE CONFIG_ENABLE_ESP32_BLE_CONTROLLER
108108
#define CHIP_DEVICE_CONFIG_ENABLE_PAIRING_AUTOSTART CONFIG_CHIP_ENABLE_PAIRING_AUTOSTART
109-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
109+
110+
#ifdef CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
111+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
112+
#else
113+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 0
114+
#endif
110115

111116
// Options for background chip task
112117
#define CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING CONFIG_ENABLE_BG_EVENT_PROCESSING

src/platform/ESP32/nimble/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -302,13 +302,13 @@ void BLEManagerImpl::BleAdvTimeoutHandler(TimerHandle_t xTimer)
302302
BLEMgrImpl().mFlags.Set(Flags::kFastAdvertisingEnabled, 0);
303303
BLEMgrImpl().mFlags.Set(Flags::kAdvertisingRefreshNeeded, 1);
304304

305-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
305+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
306306
BLEMgrImpl().mFlags.Clear(Flags::kExtAdvertisingEnabled);
307307
BLEMgrImpl().StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS);
308308
#endif
309309
PlatformMgr().ScheduleWork(DriveBLEState, 0);
310310
}
311-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
311+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
312312
else
313313
{
314314
ChipLogProgress(DeviceLayer, "bleAdv Timeout : Start extended advertisement");
@@ -1094,7 +1094,7 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void)
10941094
ExitNow();
10951095
}
10961096

1097-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
1097+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
10981098
// Check for extended advertisement interval and redact VID/PID if past the initial period.
10991099
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
11001100
{
@@ -1699,7 +1699,7 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
16991699
}
17001700
else
17011701
{
1702-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
1702+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
17031703
if (!mFlags.Has(Flags::kExtAdvertisingEnabled))
17041704
{
17051705
adv_params.itvl_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;

src/platform/Linux/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static constexpr System::Clock::Timeout kNewConnectionScanTimeout = System::Cloc
6161
static constexpr System::Clock::Timeout kConnectTimeout = System::Clock::Seconds16(20);
6262
static constexpr System::Clock::Timeout kFastAdvertiseTimeout =
6363
System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
64-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
64+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
6565
// The CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS specifies the transition time
6666
// starting from advertisement commencement. Since the extended advertisement timer is started after
6767
// the fast-to-slow transition, we have to subtract the time spent in fast advertising.
@@ -629,7 +629,7 @@ void BLEManagerImpl::DriveBLEState()
629629

630630
// Setup service data for advertising.
631631
auto serviceDataFlags = BluezAdvertisement::kServiceDataNone;
632-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
632+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
633633
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
634634
serviceDataFlags |= BluezAdvertisement::kServiceDataExtendedAnnouncement;
635635
#endif
@@ -698,7 +698,7 @@ BluezAdvertisement::AdvertisingIntervals BLEManagerImpl::GetAdvertisingIntervals
698698
{
699699
if (mFlags.Has(Flags::kFastAdvertisingEnabled))
700700
return { CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX };
701-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
701+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
702702
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
703703
return { CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MAX };
704704
#endif
@@ -713,7 +713,7 @@ void BLEManagerImpl::HandleAdvertisingTimer(chip::System::Layer *, void * appSta
713713
{
714714
ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start slow advertisement");
715715
self->_SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising);
716-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
716+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
717717
self->mFlags.Clear(Flags::kExtAdvertisingEnabled);
718718
DeviceLayer::SystemLayer().StartTimer(kSlowAdvertiseTimeout, HandleAdvertisingTimer, self);
719719
}

src/platform/Linux/bluez/BluezAdvertisement.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ CHIP_ERROR BluezAdvertisement::SetupServiceData(ServiceDataFlags aFlags)
160160
deviceInfo.SetAdditionalDataFlag(true);
161161
#endif
162162

163-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
163+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
164164
if (aFlags & kServiceDataExtendedAnnouncement)
165165
{
166166
deviceInfo.SetExtendedAnnouncementFlag(true);

0 commit comments

Comments
 (0)