[bbr] add bbr skipseqnuminc command for reference device (#7283)

Add a command to allow skipping the increase of Sequence Number
when recovering the BBR Dataset from Network Data.
This commit is contained in:
Eduardo Montoya
2022-01-13 09:59:30 -08:00
committed by GitHub
parent 00e8010a0b
commit c9066b6506
8 changed files with 88 additions and 2 deletions
+13
View File
@@ -273,6 +273,19 @@ void otBackboneRouterMulticastListenerClear(otInstance *aInstance);
*/
otError otBackboneRouterMulticastListenerAdd(otInstance *aInstance, const otIp6Address *aAddress, uint32_t aTimeout);
/**
* This method configures the ability to increase or not the BBR Dataset Sequence Number when a
* BBR recovers its BBR Dataset from the Leader's Network Data.
*
* Note: available only when `OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE` is enabled.
* Only used for certification.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aSkip Whether to skip the increase of Sequence Number or not.
*
*/
void otBackboneRouterConfigSkipSeqNumIncrease(otInstance *aInstance, bool aSkip);
#define OT_BACKBONE_ROUTER_MULTICAST_LISTENER_ITERATOR_INIT \
0 ///< Initializer for otBackboneRouterMulticastListenerIterator
+1 -1
View File
@@ -53,7 +53,7 @@ extern "C" {
* @note This number versions both OpenThread platform and user APIs.
*
*/
#define OPENTHREAD_API_VERSION (182)
#define OPENTHREAD_API_VERSION (183)
/**
* @addtogroup api-instance
+11
View File
@@ -324,6 +324,17 @@ Set jitter (in seconds) for Backbone Router registration for Thread 1.2 FTD.
Done
```
### bbr skipseqnuminc
Skip increase of Sequence Number when updating the local BBR Dataset from the Network Data.
Only for testing/reference device.
```bash
> bbr skipseqnuminc
Done
```
### ba
Show current Border Agent information.
+7 -1
View File
@@ -564,7 +564,13 @@ otError Interpreter::ProcessBackboneRouter(Arg aArgs[])
}
#endif
}
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
else if (aArgs[0] == "skipseqnuminc")
{
otBackboneRouterConfigSkipSeqNumIncrease(GetInstancePtr(), true);
ExitNow();
}
#endif
SuccessOrExit(error = ProcessBackboneRouterLocal(aArgs));
}
+6
View File
@@ -176,6 +176,12 @@ otError otBackboneRouterMulticastListenerAdd(otInstance *aInstance, const otIp6A
TimerMilli::GetNow() + aTimeout);
}
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
void otBackboneRouterConfigSkipSeqNumIncrease(otInstance *aInstance, bool aSkip)
{
AsCoreType(aInstance).Get<BackboneRouter::Local>().ConfigSkipSeqNumIncrease(aSkip);
}
#endif // OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
+19
View File
@@ -57,6 +57,9 @@ Local::Local(Instance &aInstance)
, mIsServiceAdded(false)
, mDomainPrefixCallback(nullptr)
, mDomainPrefixCallbackContext(nullptr)
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
, mSkipSeqNumIncrease(false)
#endif
{
mDomainPrefixConfig.GetPrefix().SetLength(0);
@@ -270,6 +273,15 @@ void Local::HandleBackboneRouterPrimaryUpdate(Leader::State aState, const Backbo
mSequenceNumber = aConfig.mSequenceNumber + 1;
mReregistrationDelay = aConfig.mReregistrationDelay;
mMlrTimeout = aConfig.mMlrTimeout;
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
if (mSkipSeqNumIncrease)
{
// BBR-TC-02 forces Sequence Number for the reference device with raw UDP API
mSequenceNumber = aConfig.mSequenceNumber;
}
#endif
Get<Notifier>().Signal(kEventThreadBackboneRouterLocalChanged);
if (AddService(true /* Force registration to refresh and restore Primary state */) == kErrorNone)
{
@@ -444,6 +456,13 @@ void Local::SetDomainPrefixCallback(otBackboneRouterDomainPrefixCallback aCallba
mDomainPrefixCallbackContext = aContext;
}
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
void Local::ConfigSkipSeqNumIncrease(bool aSkip)
{
mSkipSeqNumIncrease = aSkip;
}
#endif
} // namespace BackboneRouter
} // namespace ot
+18
View File
@@ -254,6 +254,20 @@ public:
*/
void SetDomainPrefixCallback(otBackboneRouterDomainPrefixCallback aCallback, void *aContext);
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
/**
* This method configures the ability to increase or not the BBR Dataset Sequence Number when a
* BBR recovers its BBR Dataset from the Leader's Network Data.
*
* Note: available only when `OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE` is enabled.
* Only used for certification.
*
* @param[in] aSkip Whether to skip the increase of Sequence Number or not.
*
*/
void ConfigSkipSeqNumIncrease(bool aSkip);
#endif
private:
void SetState(BackboneRouterState aState);
void RemoveService(void);
@@ -285,6 +299,10 @@ private:
Ip6::Address mAllDomainBackboneRouters;
otBackboneRouterDomainPrefixCallback mDomainPrefixCallback;
void * mDomainPrefixCallbackContext;
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
bool mSkipSeqNumIncrease : 1;
#endif
};
} // namespace BackboneRouter
+13
View File
@@ -551,6 +551,17 @@ class OpenThreadTHCI(object):
except Exception as e:
ModuleHelper.WriteIntoDebugLogger('__setAddressFilterMode() Error: ' + str(e))
def __skipSeqNoIncrease(self):
"""skip sequence number increase when recovering BBR Dataset from Network Data
Returns:
True: successful to set the behavior.
False: fail to set the behavior.
"""
print('call __skipSeqNoIncrease()')
cmd = 'bbr skipseqnuminc'
return self.__executeCommand(cmd)[-1] == 'Done'
def __startOpenThread(self):
"""start OpenThread stack
@@ -1231,6 +1242,8 @@ class OpenThreadTHCI(object):
if self.AutoDUTEnable is False:
# set ROUTER_DOWNGRADE_THRESHOLD
self.__setRouterDowngradeThreshold(33)
# skip increase of Sequence Number for BBR-TC-02
self.__skipSeqNoIncrease()
elif eRoleId == Thread_Device_Role.SED:
print('join as sleepy end device')
mode = '-'