Merge pull request #65 from edmont/pr/upmerge-20220513

upmerge: merge up to commit `130afd9`
This commit is contained in:
Robert Lubos 2022-05-13 12:05:08 +02:00 committed by GitHub
commit e2a765599a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
198 changed files with 787 additions and 369 deletions

View File

@ -124,6 +124,11 @@ jobs:
cert_scripts: ./tests/scripts/thread-cert/border_router/MATN/*.py
packet_verification: 1
description: "MATN"
- otbr_mdns: "mDNSResponder"
otbr_trel: 0
cert_scripts: ./tests/scripts/thread-cert/border_router/LowPower/*.py
packet_verification: 1
description: "LowPower"
- otbr_mdns: "avahi"
otbr_trel: 0
cert_scripts: ./tests/scripts/thread-cert/border_router/*.py

View File

@ -53,7 +53,7 @@ extern "C" {
* @note This number versions both OpenThread platform and user APIs.
*
*/
#define OPENTHREAD_API_VERSION (206)
#define OPENTHREAD_API_VERSION (207)
/**
* @addtogroup api-instance

View File

@ -1060,14 +1060,14 @@ void otPlatRadioUpdateCslSampleTime(otInstance *aInstance, uint32_t aCslSampleTi
uint8_t otPlatRadioGetCslAccuracy(otInstance *aInstance);
/**
* Get the current uncertainty, in units of 10 us, of the clock used for scheduling CSL operations.
* The fixed uncertainty of the Device for scheduling CSL Transmissions in units of 10 microseconds.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The current CSL Clock Uncertainty in units of 10 us.
* @returns The CSL Uncertainty in units of 10 us.
*
*/
uint8_t otPlatRadioGetCslClockUncertainty(otInstance *aInstance);
uint8_t otPlatRadioGetCslUncertainty(otInstance *aInstance);
/**
* Set the max transmit power for a specific channel.

View File

@ -63,15 +63,11 @@ otError otThreadSetExtendedPanId(otInstance *aInstance, const otExtendedPanId *a
Error error = kErrorNone;
Instance & instance = AsCoreType(aInstance);
const MeshCoP::ExtendedPanId &extPanId = AsCoreType(aExtendedPanId);
Mle::MeshLocalPrefix prefix;
VerifyOrExit(instance.Get<Mle::MleRouter>().IsDisabled(), error = kErrorInvalidState);
instance.Get<MeshCoP::ExtendedPanIdManager>().SetExtPanId(extPanId);
prefix.SetFromExtendedPanId(extPanId);
instance.Get<Mle::MleRouter>().SetMeshLocalPrefix(prefix);
instance.Get<MeshCoP::ActiveDatasetManager>().Clear();
instance.Get<MeshCoP::PendingDatasetManager>().Clear();

View File

@ -953,7 +953,8 @@ bool RoutingManager::IsValidBrUlaPrefix(const Ip6::Prefix &aBrUlaPrefix)
bool RoutingManager::IsValidOmrPrefix(const NetworkData::OnMeshPrefixConfig &aOnMeshPrefixConfig)
{
return IsValidOmrPrefix(aOnMeshPrefixConfig.GetPrefix()) && aOnMeshPrefixConfig.mSlaac && !aOnMeshPrefixConfig.mDp;
return IsValidOmrPrefix(aOnMeshPrefixConfig.GetPrefix()) && aOnMeshPrefixConfig.mOnMesh &&
aOnMeshPrefixConfig.mSlaac && aOnMeshPrefixConfig.mStable && !aOnMeshPrefixConfig.mDp;
}
bool RoutingManager::IsValidOmrPrefix(const Ip6::Prefix &aOmrPrefix)

View File

@ -430,6 +430,11 @@ DefineCoreType(otBufferInfo, Instance::BufferInfo);
// Specializations of the `Get<Type>()` method.
template <> inline Instance &Instance::Get(void)
{
return *this;
}
template <> inline Radio &Instance::Get(void)
{
return mRadio;

View File

@ -58,6 +58,38 @@ extern uint64_t gInstanceRaw[];
*
*/
/**
* This template class implements `Get<Type>()` method for different `Type` objects belonging to the OpenThread
* instance.
*
* Users of this class MUST follow CRTP-style inheritance, i.e., the class `Class` itself should publicly inherit
* from `GetProvider<Class>`.
*
* @tparam InstanceGetProvider The template sub-lass used in CRTP style inheritance.
* `InstanceGetProvider` MUST provide a method with the following signature:
* `Instance &GetInstance(void) const`
*
*/
template <class InstanceGetProvider> class GetProvider
{
public:
/**
* This template method returns a reference to a given `Type` object belonging to the OpenThread instance.
*
* For example, `Get<MeshForwarder>()` returns a reference to the `MeshForwarder` object of the instance.
*
* Note that any `Type` for which the `Get<Type>` is defined MUST be uniquely accessible from the OpenThread
* `Instance` through the member variable property hierarchy.
*
* @returns A reference to the `Type` object of the instance.
*
*/
template <typename Type> inline Type &Get(void) const; // Implemented in `locator_getters.hpp`.
protected:
GetProvider(void) = default;
};
/**
* This class implements a locator for an OpenThread Instance object.
*
@ -69,7 +101,7 @@ extern uint64_t gInstanceRaw[];
* single-instance case, this class becomes an empty base class.
*
*/
class InstanceLocator
class InstanceLocator : public GetProvider<InstanceLocator>
{
friend class InstanceLocatorInit;
@ -86,19 +118,6 @@ public:
Instance &GetInstance(void) const { return *reinterpret_cast<Instance *>(&gInstanceRaw); }
#endif
/**
* This template method returns a reference to a given `Type` object belonging to the OpenThread instance.
*
* For example, `Get<MeshForwarder>()` returns a reference to the `MeshForwarder` object of the instance.
*
* Note that any `Type` for which the `Get<Type>` is defined MUST be uniquely accessible from the OpenThread
* `Instance` through the member variable property hierarchy.
*
* @returns A reference to the `Type` object of the instance.
*
*/
template <typename Type> inline Type &Get(void) const; // Implemented in `locator_getters.hpp`.
protected:
/**
* This constructor initializes the object.

View File

@ -42,25 +42,11 @@
namespace ot {
/**
* This method returns a reference to the parent OpenThread Instance.
*
* This definition is a specialization of template `Get<Type>` for `Get<Instance>()`,
*
* @returns A reference to `Instance` object.
*
*/
template <> inline Instance &InstanceLocator::Get(void) const
template <typename InstanceGetProvider>
template <typename Type>
inline Type &GetProvider<InstanceGetProvider>::Get(void) const
{
return GetInstance();
}
template <typename Type> inline Type &InstanceLocator::Get(void) const
{
// This method uses the `Instance` template method `Get<Type>`
// to get to the given `Type` from the single OpenThread
// instance.
return GetInstance().Get<Type>();
return static_cast<const InstanceGetProvider *>(this)->GetInstance().template Get<Type>();
}
} // namespace ot

View File

@ -258,7 +258,7 @@ static_assert(sizeof(Buffer) >= kBufferSize, "Buffer size if not valid");
* This class represents a message.
*
*/
class Message : public otMessage, public Buffer
class Message : public otMessage, public Buffer, public GetProvider<Message>
{
friend class Checksum;
friend class Crypto::HmacSha256;
@ -410,6 +410,14 @@ public:
static const otMessageSettings kDefault;
};
/**
* This method returns a reference to the OpenThread Instance which owns the `Message`.
*
* @returns A reference to the `Instance`.
*
*/
Instance &GetInstance(void) const;
/**
* This method frees this message buffer.
*
@ -1663,6 +1671,11 @@ private:
#endif
};
inline Instance &Message::GetInstance(void) const
{
return GetMessagePool()->GetInstance();
}
/**
* @}
*

View File

@ -144,6 +144,14 @@ public:
return pointer;
}
/**
* This method allows passing of the ownership to another `OwnedPtr` using move semantics.
*
* @returns An rvalue reference of the pointer to move from.
*
*/
OwnedPtr &&PassOwnership(void) { return static_cast<OwnedPtr &&>(*this); }
/**
* This method overload the assignment operator `=` to replace the object owned by the `OwnedPtr` with another one
* using move semantics.

View File

@ -619,4 +619,8 @@
"SRP host uses dynamic heap array to store addresses so no need for config on max number of addresses".
#endif
#ifdef OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT
#error "OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT was removed and no longer supported"
#endif
#endif // OPENTHREAD_CORE_CONFIG_CHECK_H_

View File

@ -176,14 +176,4 @@
#endif
#endif
/**
* @def OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT
*
* The Uncertainty of the scheduling CSL of transmission by the parent, in ±10 us units.
*
*/
#ifndef OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT
#define OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT UINT8_MAX
#endif
#endif // CONFIG_PLATFORM_H_

View File

@ -1165,18 +1165,19 @@ void SubMac::HandleCslTimer(void)
}
Get<Radio>().UpdateCslSampleTime(mCslSampleTime.GetValue());
if (mState == kStateCslSample)
if (RadioSupportsReceiveTiming())
{
if (RadioSupportsReceiveTiming())
if (mState != kStateDisabled && mCslChannel)
{
IgnoreError(Get<Radio>().ReceiveAt(mCslChannel, mCslSampleTime.GetValue() - periodUs - timeAhead,
timeAhead + timeAfter));
}
else
{
IgnoreError(Get<Radio>().Receive(mCslChannel));
LogDebg("CSL sample %u, duration %u", mCslTimer.GetNow().GetValue(), timeAhead + timeAfter);
}
}
else if (mState == kStateCslSample)
{
IgnoreError(Get<Radio>().Receive(mCslChannel));
LogDebg("CSL sample %u, duration %u", mCslTimer.GetNow().GetValue(), timeAhead + timeAfter);
}
break;

View File

@ -370,7 +370,10 @@ public:
* @returns The Mesh Local Prefix in the Dataset.
*
*/
const Mle::MeshLocalPrefix &GetMeshLocalPrefix(void) const { return AsCoreType(&mMeshLocalPrefix); }
const Ip6::NetworkPrefix &GetMeshLocalPrefix(void) const
{
return static_cast<const Ip6::NetworkPrefix &>(mMeshLocalPrefix);
}
/**
* This method sets the Mesh Local Prefix in the Dataset.
@ -378,7 +381,7 @@ public:
* @param[in] aMeshLocalPrefix A Mesh Local Prefix.
*
*/
void SetMeshLocalPrefix(const Mle::MeshLocalPrefix &aMeshLocalPrefix)
void SetMeshLocalPrefix(const Ip6::NetworkPrefix &aMeshLocalPrefix)
{
mMeshLocalPrefix = aMeshLocalPrefix;
mComponents.mIsMeshLocalPrefixPresent = true;

View File

@ -73,20 +73,20 @@ Error DatasetManager::AppendMleDatasetTlv(Message &aMessage) const
Error DatasetManager::HandleSet(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{
Tlv tlv;
uint16_t offset = aMessage.GetOffset();
bool isUpdateFromCommissioner = false;
bool doesAffectConnectivity = false;
bool doesAffectNetworkKey = false;
bool hasNetworkKey = false;
StateTlv::State state = StateTlv::kReject;
Dataset dataset;
Timestamp activeTimestamp;
ChannelTlv channel;
uint16_t sessionId;
Mle::MeshLocalPrefix meshLocalPrefix;
NetworkKey networkKey;
uint16_t panId;
Tlv tlv;
uint16_t offset = aMessage.GetOffset();
bool isUpdateFromCommissioner = false;
bool doesAffectConnectivity = false;
bool doesAffectNetworkKey = false;
bool hasNetworkKey = false;
StateTlv::State state = StateTlv::kReject;
Dataset dataset;
Timestamp activeTimestamp;
ChannelTlv channel;
uint16_t sessionId;
Ip6::NetworkPrefix meshLocalPrefix;
NetworkKey networkKey;
uint16_t panId;
VerifyOrExit(Get<Mle::MleRouter>().IsLeader());

View File

@ -682,7 +682,7 @@ private:
*
*/
OT_TOOL_PACKED_BEGIN
class MeshLocalPrefixTlv : public Tlv, public SimpleTlvInfo<Tlv::kMeshLocalPrefix, Mle::MeshLocalPrefix>
class MeshLocalPrefixTlv : public Tlv, public SimpleTlvInfo<Tlv::kMeshLocalPrefix, Ip6::NetworkPrefix>
{
public:
/**
@ -718,7 +718,7 @@ public:
* @returns The Mesh Local Prefix value.
*
*/
const Mle::MeshLocalPrefix &GetMeshLocalPrefix(void) const { return mMeshLocalPrefix; }
const Ip6::NetworkPrefix &GetMeshLocalPrefix(void) const { return mMeshLocalPrefix; }
/**
* This method sets the Mesh Local Prefix value.
@ -726,10 +726,10 @@ public:
* @param[in] aMeshLocalPrefix A pointer to the Mesh Local Prefix value.
*
*/
void SetMeshLocalPrefix(const Mle::MeshLocalPrefix &aMeshLocalPrefix) { mMeshLocalPrefix = aMeshLocalPrefix; }
void SetMeshLocalPrefix(const Ip6::NetworkPrefix &aMeshLocalPrefix) { mMeshLocalPrefix = aMeshLocalPrefix; }
private:
Mle::MeshLocalPrefix mMeshLocalPrefix;
Ip6::NetworkPrefix mMeshLocalPrefix;
} OT_TOOL_PACKED_END;
class SteeringData;

View File

@ -167,7 +167,7 @@ private:
* @param[in] aContextId The 6LoWPAN Context ID.
*
*/
void Set(const Ip6::Prefix &aPrefix, const Mle::MeshLocalPrefix &aMeshLocalPrefix, uint8_t aContextId)
void Set(const Ip6::Prefix &aPrefix, const Ip6::NetworkPrefix &aMeshLocalPrefix, uint8_t aContextId)
{
mPrefix = aPrefix;

View File

@ -1009,6 +1009,7 @@ private:
} // namespace Ip6
DefineCoreType(otIp6NetworkPrefix, Ip6::NetworkPrefix);
DefineCoreType(otIp6Prefix, Ip6::Prefix);
DefineCoreType(otIp6InterfaceIdentifier, Ip6::InterfaceIdentifier);
DefineCoreType(otIp6Address, Ip6::Address);

View File

@ -473,12 +473,12 @@ public:
uint8_t GetCslAccuracy(void);
/**
* Get the current uncertainty, in units of 10 us, of the clock used for scheduling CSL operations.
* Get the fixed uncertainty of the Device for scheduling CSL Transmissions in units of 10 microseconds.
*
* @returns The current CSL Clock Uncertainty in units of 10 us.
* @returns The CSL Uncertainty in units of 10 us.
*
*/
uint8_t GetCslClockUncertainty(void);
uint8_t GetCslUncertainty(void);
#endif // OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
/**
@ -809,10 +809,12 @@ inline uint8_t Radio::GetCslAccuracy(void)
{
return otPlatRadioGetCslAccuracy(GetInstancePtr());
}
#endif
inline uint8_t Radio::GetCslClockUncertainty(void)
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
inline uint8_t Radio::GetCslUncertainty(void)
{
return otPlatRadioGetCslClockUncertainty(GetInstancePtr());
return otPlatRadioGetCslUncertainty(GetInstancePtr());
}
#endif
@ -979,7 +981,7 @@ inline uint8_t Radio::GetCslAccuracy(void)
return UINT8_MAX;
}
inline uint8_t Radio::GetCslClockUncertainty(void)
inline uint8_t Radio::GetCslUncertainty(void)
{
return UINT8_MAX;
}

View File

@ -250,11 +250,11 @@ OT_TOOL_WEAK uint8_t otPlatRadioGetCslAccuracy(otInstance *aInstance)
return UINT8_MAX;
}
OT_TOOL_WEAK uint8_t otPlatRadioGetCslClockUncertainty(otInstance *aInstance)
OT_TOOL_WEAK uint8_t otPlatRadioGetCslUncertainty(otInstance *aInstance)
{
OT_UNUSED_VARIABLE(aInstance);
return OPENTHREAD_CONFIG_PLATFORM_CSL_UNCERT;
return UINT8_MAX;
}
OT_TOOL_WEAK otError otPlatRadioGetFemLnaGain(otInstance *aInstance, int8_t *aGain)

View File

@ -64,6 +64,10 @@ namespace Mle {
RegisterLogModule("Mle");
const otMeshLocalPrefix Mle::sMeshLocalPrefixInit = {
{0xfd, 0xde, 0xad, 0x00, 0xbe, 0xef, 0x00, 0x00},
};
Mle::Mle(Instance &aInstance)
: InstanceLocator(aInstance)
, mRetrieveNewNetworkData(false)
@ -114,8 +118,6 @@ Mle::Mle(Instance &aInstance)
, mParentResponseCb(nullptr)
, mParentResponseCbContext(nullptr)
{
MeshLocalPrefix meshLocalPrefix;
mParent.Init(aInstance);
mParentCandidate.Init(aInstance);
@ -130,8 +132,6 @@ Mle::Mle(Instance &aInstance)
mLeaderAloc.InitAsThreadOriginRealmLocalScope();
meshLocalPrefix.SetFromExtendedPanId(Get<MeshCoP::ExtendedPanIdManager>().GetExtPanId());
mMeshLocal64.InitAsThreadOriginRealmLocalScope();
mMeshLocal64.GetAddress().GetIid().GenerateRandom();
@ -150,7 +150,7 @@ Mle::Mle(Instance &aInstance)
mRealmLocalAllThreadNodes.GetAddress().mFields.m16[0] = HostSwap16(0xff33);
mRealmLocalAllThreadNodes.GetAddress().mFields.m16[7] = HostSwap16(0x0001);
SetMeshLocalPrefix(meshLocalPrefix);
SetMeshLocalPrefix(AsCoreType(&sMeshLocalPrefixInit));
// `SetMeshLocalPrefix()` also adds the Mesh-Local EID and subscribes
// to the Link- and Realm-Local All Thread Nodes multicast addresses.
@ -823,7 +823,7 @@ void Mle::UpdateLinkLocalAddress(void)
Get<Notifier>().Signal(kEventThreadLinkLocalAddrChanged);
}
void Mle::SetMeshLocalPrefix(const MeshLocalPrefix &aMeshLocalPrefix)
void Mle::SetMeshLocalPrefix(const Ip6::NetworkPrefix &aMeshLocalPrefix)
{
VerifyOrExit(GetMeshLocalPrefix() != aMeshLocalPrefix,
Get<Notifier>().SignalIfFirst(kEventThreadMeshLocalAddrChanged));
@ -1556,7 +1556,7 @@ Error Mle::AppendCslClockAccuracy(Message &aMessage)
cslClockAccuracy.Init();
cslClockAccuracy.SetCslClockAccuracy(Get<Radio>().GetCslAccuracy());
cslClockAccuracy.SetCslUncertainty(Get<Radio>().GetCslClockUncertainty());
cslClockAccuracy.SetCslUncertainty(Get<Radio>().GetCslUncertainty());
SuccessOrExit(error = aMessage.Append(cslClockAccuracy));
@ -3472,7 +3472,7 @@ bool Mle::IsBetterParent(uint16_t aRloc16,
{
cslMetric = CalcParentCslMetric(aCslClockAccuracy, aCslUncertainty);
candidateCslMetric =
CalcParentCslMetric(mParentCandidate.GetCslClockAccuracy(), mParentCandidate.GetCslClockUncertainty());
CalcParentCslMetric(mParentCandidate.GetCslClockAccuracy(), mParentCandidate.GetCslUncertainty());
if (candidateCslMetric != cslMetric)
{
ExitNow(rval = (cslMetric < candidateCslMetric));
@ -3681,7 +3681,7 @@ void Mle::HandleParentResponse(RxInfo &aRxInfo)
mParentCandidate.SetKeySequence(aRxInfo.mKeySequence);
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
mParentCandidate.SetCslClockAccuracy(clockAccuracy.GetCslClockAccuracy());
mParentCandidate.SetCslClockUncertainty(clockAccuracy.GetCslUncertainty());
mParentCandidate.SetCslUncertainty(clockAccuracy.GetCslUncertainty());
#endif
mParentPriority = connectivity.GetParentPriority();
@ -3809,7 +3809,7 @@ void Mle::HandleChildIdResponse(RxInfo &aRxInfo)
mParentCandidate.Clear();
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
Get<Mac::Mac>().SetCslParentUncertainty(mParent.GetCslClockUncertainty());
Get<Mac::Mac>().SetCslParentUncertainty(mParent.GetCslUncertainty());
Get<Mac::Mac>().SetCslParentClockAccuracy(mParent.GetCslClockAccuracy());
#endif

View File

@ -327,10 +327,7 @@ public:
* @returns A reference to the Mesh Local Prefix.
*
*/
const MeshLocalPrefix &GetMeshLocalPrefix(void) const
{
return static_cast<const MeshLocalPrefix &>(mMeshLocal16.GetAddress().GetPrefix());
}
const Ip6::NetworkPrefix &GetMeshLocalPrefix(void) const { return mMeshLocal16.GetAddress().GetPrefix(); }
/**
* This method sets the Mesh Local Prefix.
@ -338,7 +335,7 @@ public:
* @param[in] aMeshLocalPrefix A reference to the Mesh Local Prefix.
*
*/
void SetMeshLocalPrefix(const MeshLocalPrefix &aMeshLocalPrefix);
void SetMeshLocalPrefix(const Ip6::NetworkPrefix &aMeshLocalPrefix);
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
/**
@ -1755,7 +1752,7 @@ private:
void MarkAsNotInUse(void) { SetAloc16(kNotInUse); }
uint16_t GetAloc16(void) const { return GetAddress().GetIid().GetLocator(); }
void SetAloc16(uint16_t aAloc16) { GetAddress().GetIid().SetLocator(aAloc16); }
void ApplyMeshLocalPrefix(const MeshLocalPrefix &aPrefix) { GetAddress().SetPrefix(aPrefix); }
void ApplyMeshLocalPrefix(const Ip6::NetworkPrefix &aPrefix) { GetAddress().SetPrefix(aPrefix); }
};
#endif
@ -1902,6 +1899,8 @@ private:
otMleCounters mCounters;
static const otMeshLocalPrefix sMeshLocalPrefixInit;
Ip6::Netif::UnicastAddress mLinkLocal64;
Ip6::Netif::UnicastAddress mMeshLocal64;
Ip6::Netif::UnicastAddress mMeshLocal16;

View File

@ -63,13 +63,5 @@ DeviceMode::InfoString DeviceMode::ToString(void) const
return string;
}
void MeshLocalPrefix::SetFromExtendedPanId(const MeshCoP::ExtendedPanId &aExtendedPanId)
{
m8[0] = 0xfd;
memcpy(&m8[1], aExtendedPanId.m8, 5);
m8[6] = 0x00;
m8[7] = 0x00;
}
} // namespace Mle
} // namespace ot

View File

@ -415,24 +415,6 @@ private:
uint8_t mMode;
};
/**
* This class represents a Mesh Local Prefix.
*
*/
OT_TOOL_PACKED_BEGIN
class MeshLocalPrefix : public Ip6::NetworkPrefix
{
public:
/**
* This method derives and sets the Mesh Local Prefix from an Extended PAN ID.
*
* @param[in] aExtendedPanId An Extended PAN ID.
*
*/
void SetFromExtendedPanId(const MeshCoP::ExtendedPanId &aExtendedPanId);
} OT_TOOL_PACKED_END;
/**
* This class represents the Thread Leader Data.
*
@ -578,7 +560,6 @@ typedef Mac::Key Key;
} // namespace Mle
DefineCoreType(otMeshLocalPrefix, Mle::MeshLocalPrefix);
DefineCoreType(otLeaderData, Mle::LeaderData);
DefineMapEnum(otDeviceRole, Mle::DeviceRole);

View File

@ -1365,7 +1365,7 @@ public:
Neighbor::Init(aInstance);
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
SetCslClockAccuracy(kCslWorstCrystalPpm);
SetCslClockUncertainty(kCslWorstUncertainty);
SetCslUncertainty(kCslWorstUncertainty);
#endif
}
@ -1446,15 +1446,15 @@ public:
* @returns The CSL clock uncertainty of this router.
*
*/
uint8_t GetCslClockUncertainty(void) const { return mCslClockUncertainty; }
uint8_t GetCslUncertainty(void) const { return mCslUncertainty; }
/**
* This method sets the CSL clock uncertainty of this router.
*
* @param[in] aCslClockUncertainty The CSL clock uncertainty of this router.
* @param[in] aCslUncertainty The CSL clock uncertainty of this router.
*
*/
void SetCslClockUncertainty(uint8_t aCslClockUncertainty) { mCslClockUncertainty = aCslClockUncertainty; }
void SetCslUncertainty(uint8_t aCslUncertainty) { mCslUncertainty = aCslUncertainty; }
#endif
private:
@ -1467,8 +1467,8 @@ private:
uint8_t mCost : 4; ///< The cost to this router via neighbor router
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
uint8_t mCslClockAccuracy; ///< Crystal accuracy, in units of ± ppm.
uint8_t mCslClockUncertainty; ///< Scheduling uncertainty, in units of 10 us.
uint8_t mCslClockAccuracy; ///< Crystal accuracy, in units of ± ppm.
uint8_t mCslUncertainty; ///< Scheduling uncertainty, in units of 10 us.
#endif
};

View File

@ -701,6 +701,28 @@ public:
const otExtAddress & aExtAddress);
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
/**
* Get the current accuracy, in units of ± ppm, of the clock used for scheduling CSL operations.
*
* @note Platforms may optimize this value based on operational conditions (i.e.: temperature).
*
* @retval The current CSL rx/tx scheduling drift, in units of ± ppm.
*
*/
uint8_t GetCslAccuracy(void);
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
/**
* Get the current uncertainty, in units of 10 us, of the clock used for scheduling CSL operations.
*
* @retval The current CSL Clock Uncertainty in units of 10 us.
*
*/
uint8_t GetCslUncertainty(void);
#endif
/**
* This method checks whether the spinel interface is radio-only.
*

View File

@ -2461,5 +2461,29 @@ otError RadioSpinel<InterfaceType, ProcessContextType>::ConfigureEnhAckProbing(o
}
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
template <typename InterfaceType, typename ProcessContextType>
uint8_t RadioSpinel<InterfaceType, ProcessContextType>::GetCslAccuracy(void)
{
uint8_t accuracy = UINT8_MAX;
otError error = Get(SPINEL_PROP_RCP_CSL_ACCURACY, SPINEL_DATATYPE_UINT8_S, &accuracy);
LogIfFail("Get CSL Accuracy failed", error);
return accuracy;
}
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
template <typename InterfaceType, typename ProcessContextType>
uint8_t RadioSpinel<InterfaceType, ProcessContextType>::GetCslUncertainty(void)
{
uint8_t uncertainty = UINT8_MAX;
otError error = Get(SPINEL_PROP_RCP_CSL_UNCERTAINTY, SPINEL_DATATYPE_UINT8_S, &uncertainty);
LogIfFail("Get CSL Uncertainty failed", error);
return uncertainty;
}
#endif
} // namespace Spinel
} // namespace ot

View File

@ -1401,6 +1401,8 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key)
{SPINEL_PROP_CHILD_SUPERVISION_CHECK_TIMEOUT, "CHILD_SUPERVISION_CHECK_TIMEOUT"},
{SPINEL_PROP_RCP_VERSION, "RCP_VERSION"},
{SPINEL_PROP_RCP_ENH_ACK_PROBING, "ENH_ACK_PROBING"},
{SPINEL_PROP_RCP_CSL_ACCURACY, "CSL_ACCURACY"},
{SPINEL_PROP_RCP_CSL_UNCERTAINTY, "CSL_UNCERTAINTY"},
{SPINEL_PROP_PARENT_RESPONSE_INFO, "PARENT_RESPONSE_INFO"},
{SPINEL_PROP_SLAAC_ENABLED, "SLAAC_ENABLED"},
{SPINEL_PROP_SUPPORTED_RADIO_LINKS, "SUPPORTED_RADIO_LINKS"},

View File

@ -377,7 +377,7 @@
* Please see section "Spinel definition compatibility guideline" for more details.
*
*/
#define SPINEL_RCP_API_VERSION 5
#define SPINEL_RCP_API_VERSION 6
/**
* @def SPINEL_MIN_HOST_SUPPORTED_RCP_API_VERSION
@ -4731,6 +4731,24 @@ enum
*/
SPINEL_PROP_RCP_ENH_ACK_PROBING = SPINEL_PROP_RCP_EXT__BEGIN + 3,
/// CSL Accuracy
/** Format: `C`
* Required capability: `SPINEL_CAP_NET_THREAD_1_2`
*
* The current CSL rx/tx scheduling drift, in units of ± ppm.
*
*/
SPINEL_PROP_RCP_CSL_ACCURACY = SPINEL_PROP_RCP_EXT__BEGIN + 4,
/// CSL Uncertainty
/** Format: `C`
* Required capability: `SPINEL_CAP_NET_THREAD_1_2`
*
* The current uncertainty, in units of 10 us, of the clock used for scheduling CSL operations.
*
*/
SPINEL_PROP_RCP_CSL_UNCERTAINTY = SPINEL_PROP_RCP_EXT__BEGIN + 5,
SPINEL_PROP_RCP_EXT__END = 0x900,
SPINEL_PROP_NEST__BEGIN = 0x3BC0,

View File

@ -1547,6 +1547,20 @@ exit:
return error;
}
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_RCP_CSL_ACCURACY>(void)
{
return mEncoder.WriteUint8(otPlatRadioGetCslAccuracy(mInstance));
}
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_RCP_CSL_UNCERTAINTY>(void)
{
return mEncoder.WriteUint8(otPlatRadioGetCslUncertainty(mInstance));
}
#endif
otError NcpBase::EncodeChannelMask(uint32_t aChannelMask)
{
otError error = OT_ERROR_NONE;

View File

@ -210,6 +210,12 @@ NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
#if OPENTHREAD_RADIO || OPENTHREAD_CONFIG_LINK_RAW_ENABLE
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_RCP_TIMESTAMP),
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_RCP_CSL_ACCURACY),
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_RCP_CSL_UNCERTAINTY),
#endif
#if OPENTHREAD_MTD || OPENTHREAD_FTD
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_UNSOL_UPDATE_FILTER),
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_UNSOL_UPDATE_LIST),

View File

@ -35,6 +35,7 @@
#include <string.h>
#include "common/code_utils.hpp"
#include "common/new.hpp"
#include "lib/spinel/radio_spinel.hpp"
#include "posix/platform/radio.hpp"
@ -603,12 +604,23 @@ uint32_t otPlatRadioGetBusSpeed(otInstance *aInstance)
return sRadioSpinel.GetBusSpeed();
}
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
uint8_t otPlatRadioGetCslAccuracy(otInstance *aInstance)
{
OT_UNUSED_VARIABLE(aInstance);
return 0;
return sRadioSpinel.GetCslAccuracy();
}
#endif
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
uint8_t otPlatRadioGetCslUncertainty(otInstance *aInstance)
{
OT_UNUSED_VARIABLE(aInstance);
return sRadioSpinel.GetCslUncertainty();
}
#endif
otError otPlatRadioSetChannelMaxTransmitPower(otInstance *aInstance, uint8_t aChannel, int8_t aMaxPower)
{

View File

@ -79,7 +79,7 @@ class Cert_5_1_01_RouterAttach(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(7)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.collect_rloc16s()

View File

@ -97,7 +97,7 @@ class Cert_5_1_02_ChildAddressTimeout(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[MED].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import network_layer
import thread_cert
@ -84,11 +85,11 @@ class Cert_5_1_03_RouterAddressReallocation(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER2].set_network_id_timeout(110)

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import network_layer
import thread_cert
@ -86,11 +87,11 @@ class Cert_5_1_04_RouterAddressReallocation(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER2].set_network_id_timeout(200)

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import network_layer
import thread_cert
@ -82,7 +83,7 @@ class Cert_5_1_05_RouterAddressTimeout(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER1].reset()

View File

@ -79,7 +79,7 @@ class Cert_5_1_06_RemoveRouterId(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
rloc16 = self.nodes[ROUTER1].get_addr16()
self.collect_rloc16s()

View File

@ -156,7 +156,7 @@ class Cert_5_1_07_MaxChildCount(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
for i in range(3, 13):

View File

@ -99,7 +99,7 @@ class Cert_5_1_08_RouterAttachConnectivity(thread_cert.TestCase):
for i in range(2, 5):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
for i in range(2, 5):
self.assertEqual(self.nodes[i].get_state(), 'router')
@ -107,7 +107,7 @@ class Cert_5_1_08_RouterAttachConnectivity(thread_cert.TestCase):
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
self.nodes[ROUTER4].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER4].get_state(), 'router')
def verify(self, pv):

View File

@ -101,7 +101,7 @@ class Cert_5_1_09_REEDAttachConnectivity(thread_cert.TestCase):
for i in range(2, 5):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.assertEqual(self.nodes[REED1].get_state(), 'child')
@ -110,7 +110,7 @@ class Cert_5_1_09_REEDAttachConnectivity(thread_cert.TestCase):
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
self.nodes[ROUTER2].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.assertEqual(self.nodes[REED1].get_state(), 'router')

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_PARENT_REQUEST, MLE_PARENT_RESPONSE, MLE_CHILD_ID_REQUEST, SOURCE_ADDRESS_TLV, MODE_TLV, TIMEOUT_TLV, CHALLENGE_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, ADDRESS16_TLV, LEADER_DATA_TLV, NETWORK_DATA_TLV, TLV_REQUEST_TLV, SCAN_MASK_TLV, CONNECTIVITY_TLV, LINK_MARGIN_TLV, VERSION_TLV, ADDRESS_REGISTRATION_TLV
@ -90,15 +91,15 @@ class Cert_5_1_10_RouterAttachLinkQuality(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER3].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
def verify(self, pv):

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_PARENT_REQUEST, MLE_PARENT_RESPONSE, MLE_CHILD_ID_REQUEST, SOURCE_ADDRESS_TLV, MODE_TLV, TIMEOUT_TLV, CHALLENGE_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, ADDRESS16_TLV, LEADER_DATA_TLV, NETWORK_DATA_TLV, TLV_REQUEST_TLV, SCAN_MASK_TLV, CONNECTIVITY_TLV, LINK_MARGIN_TLV, VERSION_TLV, ADDRESS_REGISTRATION_TLV
@ -92,15 +93,15 @@ class Cert_5_1_11_REEDAttachLinkQuality(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[REED].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[REED].get_state(), 'child')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER1].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.assertEqual(self.nodes[REED].get_state(), 'router')

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_PARENT_REQUEST, MLE_PARENT_RESPONSE, MLE_CHILD_UPDATE_RESPONSE, MLE_CHILD_ID_REQUEST, MLE_CHILD_ID_RESPONSE, MLE_LINK_REQUEST, MLE_LINK_ACCEPT, MLE_LINK_ACCEPT_AND_REQUEST, ADDR_SOL_URI, SOURCE_ADDRESS_TLV, MODE_TLV, TIMEOUT_TLV, CHALLENGE_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, MLE_FRAME_COUNTER_TLV, ROUTE64_TLV, ADDRESS16_TLV, LEADER_DATA_TLV, NETWORK_DATA_TLV, TLV_REQUEST_TLV, SCAN_MASK_TLV, CONNECTIVITY_TLV, LINK_MARGIN_TLV, VERSION_TLV, ADDRESS_REGISTRATION_TLV, NL_MAC_EXTENDED_ADDRESS_TLV, NL_RLOC16_TLV, NL_STATUS_TLV, NL_ROUTER_MASK_TLV, COAP_CODE_ACK
@ -81,11 +82,11 @@ class Cert_5_1_12_NewRouterSync(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.simulator.go(10)

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_LINK_REQUEST, MLE_LINK_ACCEPT, MLE_LINK_ACCEPT_AND_REQUEST, SOURCE_ADDRESS_TLV, CHALLENGE_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, ROUTE64_TLV, ADDRESS16_TLV, LEADER_DATA_TLV, TLV_REQUEST_TLV, VERSION_TLV, MLE_MAX_RESPONSE_DELAY
@ -83,7 +84,7 @@ class Cert_5_1_13_RouterReset(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.collect_rloc16s()
@ -92,7 +93,7 @@ class Cert_5_1_13_RouterReset(thread_cert.TestCase):
self.simulator.go(5)
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
def verify(self, pv):

View File

@ -96,11 +96,11 @@ class Cert_5_2_01_REEDAttach(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[DUT_ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
self.nodes[REED1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[REED1].get_state(), 'child')
self.nodes[MED1].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import mle
import network_layer
import thread_cert
@ -315,16 +316,16 @@ class Cert_5_2_3_LeaderReject2Hops(thread_cert.TestCase):
for i in range(2, 32):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.collect_rlocs()
self.nodes[ROUTER_31].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER_31].get_state(), 'router')
self.nodes[ROUTER_32].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
def verify(self, pv: PacketVerifier):
pkts = pv.pkts

View File

@ -174,11 +174,11 @@ class Cert_5_2_4_REEDUpgrade(thread_cert.TestCase):
for i in range(2, 17):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.nodes[DUT_REED].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.simulator.go(ROUTER_SELECTION_JITTER)
self.collect_rloc16s()

View File

@ -184,7 +184,7 @@ class Cert_5_2_5_AddressQuery(thread_cert.TestCase):
# 2. BR: SLAAC Server for prefix 2002::/64.
self.nodes[BR].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[BR].get_state(), 'router')
self.nodes[BR].add_prefix('2002::/64', 'paros')
self.nodes[BR].register_netdata()
@ -194,7 +194,7 @@ class Cert_5_2_5_AddressQuery(thread_cert.TestCase):
if i == BR:
continue
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.nodes[MED].start()
@ -203,7 +203,7 @@ class Cert_5_2_5_AddressQuery(thread_cert.TestCase):
# 4. Bring up DUT_REED.
self.nodes[DUT_REED].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.simulator.go(ROUTER_SELECTION_JITTER)
# 5. Enable a link between the DUT and BR to create a one-way link.

View File

@ -216,7 +216,7 @@ class Cert_5_2_06_RouterDowngrade(thread_cert.TestCase):
for i in range(2, 24):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.collect_rloc16s()
@ -224,7 +224,7 @@ class Cert_5_2_06_RouterDowngrade(thread_cert.TestCase):
# so we don't need to ensure ROUTER23 has a better link quality on
# posix.
self.nodes[ROUTER23].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER23].get_state(), 'router')
self.simulator.go(10)

View File

@ -151,7 +151,7 @@ class Cert_5_2_7_REEDSynchronization_Base(thread_cert.TestCase):
for i in range(2, 17):
self.nodes[i].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
for i in range(2, 17):
self.assertEqual(self.nodes[i].get_state(), 'router')

View File

@ -75,7 +75,7 @@ class Cert_5_3_1_LinkLocal(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[DUT_ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
self.collect_rlocs()

View File

@ -93,11 +93,11 @@ class Cert_5_3_2_RealmLocal(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[DUT_ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
self.nodes[SED1].start()

View File

@ -103,7 +103,7 @@ class Cert_5_3_3_AddressQuery(thread_cert.TestCase):
self.nodes[DUT_ROUTER2].start()
self.nodes[ROUTER3].start()
self.nodes[MED1].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')

View File

@ -117,7 +117,7 @@ class Cert_5_3_4_AddressMapCache(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[DUT_ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
for i in MTDS:

View File

@ -91,7 +91,7 @@ class Cert_5_3_5_RoutingLinkQuality(thread_cert.TestCase):
for router in range(DUT_ROUTER1, ROUTER3 + 1):
self.nodes[router].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
for router in range(DUT_ROUTER1, ROUTER3 + 1):
self.assertEqual(self.nodes[router].get_state(), 'router')

View File

@ -90,11 +90,11 @@ class Cert_5_3_6_RouterIdMask(thread_cert.TestCase):
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.collect_rloc16s()
@ -114,7 +114,7 @@ class Cert_5_3_6_RouterIdMask(thread_cert.TestCase):
# 5
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)

View File

@ -100,7 +100,7 @@ class Cert_5_3_8_ChildAddressSet(thread_cert.TestCase):
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
self.nodes[BR].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[BR].get_state(), 'router')
# 1 BR: Configure BR to be a DHCPv6 server

View File

@ -118,15 +118,15 @@ class Cert_5_3_09_AddressQuery(thread_cert.TestCase):
self.nodes[LEADER].register_netdata()
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[DUT_ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
self.nodes[ROUTER3].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
self.nodes[SED1].start()

View File

@ -113,7 +113,7 @@ class Cert_5_3_10_AddressQuery(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[BR].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[BR].get_state(), 'router')
# Configure two On-Mesh Prefixes on the BR
@ -122,11 +122,11 @@ class Cert_5_3_10_AddressQuery(thread_cert.TestCase):
self.nodes[BR].register_netdata()
self.nodes[DUT_ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[MED1].start()

View File

@ -89,7 +89,7 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[DUT_ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
self.nodes[MED1].start()

View File

@ -83,7 +83,7 @@ class Cert_5_5_1_LeaderReboot(thread_cert.TestCase):
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
self.nodes[DUT_ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
leader_rloc = self.nodes[DUT_LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC)

View File

@ -71,7 +71,7 @@ class Cert_5_5_2_LeaderReboot(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED].start()
@ -84,7 +84,7 @@ class Cert_5_5_2_LeaderReboot(thread_cert.TestCase):
self.assertEqual(self.nodes[ROUTER].get_state(), 'leader')
self.nodes[LEADER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[LEADER].get_state(), 'router')
addrs = self.nodes[ED].get_addrs()

View File

@ -89,11 +89,11 @@ class Cert_5_5_3_SplitMergeChildren(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ED2].start()
@ -114,7 +114,7 @@ class Cert_5_5_3_SplitMergeChildren(thread_cert.TestCase):
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
self.nodes[LEADER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[LEADER].get_state(), 'router')
self.simulator.go(30)

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_PARENT_REQUEST, MLE_CHILD_ID_RESPONSE, SOURCE_ADDRESS_TLV, ROUTE64_TLV, LEADER_DATA_TLV
from pktverify.packet_verifier import PacketVerifier
@ -81,19 +82,19 @@ class Cert_5_5_4_SplitMergeRouters(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER3].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
self.nodes[ROUTER4].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER4].get_state(), 'router')
self.nodes[LEADER].reset()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_LINK_REQUEST, MLE_PARENT_REQUEST, MLE_PARENT_RESPONSE, MLE_CHILD_ID_REQUEST, MLE_CHILD_ID_RESPONSE, ADDR_SOL_URI, VERSION_TLV, TLV_REQUEST_TLV, SOURCE_ADDRESS_TLV, LEADER_DATA_TLV, CHALLENGE_TLV, LINK_MARGIN_TLV, NL_MAC_EXTENDED_ADDRESS_TLV, NL_STATUS_TLV
from pktverify.packet_verifier import PacketVerifier
@ -125,11 +126,11 @@ class Cert_5_5_5_SplitMergeREED(thread_cert.TestCase):
for i in range(ROUTER2, ROUTER15 + 1):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[REED1].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_PARENT_REQUEST, MLE_PARENT_RESPONSE, MLE_CHILD_ID_REQUEST, MLE_CHILD_ID_RESPONSE, SOURCE_ADDRESS_TLV, LEADER_DATA_TLV, ROUTE64_TLV, MODE_TLV, CHALLENGE_TLV, SCAN_MASK_TLV, VERSION_TLV, LINK_LAYER_FRAME_COUNTER_TLV, RESPONSE_TLV, LINK_MARGIN_TLV, CONNECTIVITY_TLV, TIMEOUT_TLV, TLV_REQUEST_TLV, ADDRESS16_TLV, NETWORK_DATA_TLV, ACTIVE_TIMESTAMP_TLV
from pktverify.packet_verifier import PacketVerifier
@ -76,15 +77,15 @@ class Cert_5_5_7_SplitMergeThreeWay(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ROUTER3].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
self.nodes[LEADER1].reset()

View File

@ -86,7 +86,7 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(thread_cert.TestCase):
self.simulator.go(5)
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED1].start()

View File

@ -76,7 +76,7 @@ class Cert_5_6_2_NetworkDataRouterAsBr(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')

View File

@ -76,7 +76,7 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED1].start()

View File

@ -76,7 +76,7 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED1].start()

View File

@ -76,7 +76,7 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED1].start()

View File

@ -76,7 +76,7 @@ class Cert_5_6_6_NetworkDataExpiration(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED1].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_CHILD_ID_RESPONSE, MLE_DATA_REQUEST, MLE_DATA_RESPONSE, TLV_REQUEST_TLV, NETWORK_DATA_TLV, SOURCE_ADDRESS_TLV, LEADER_DATA_TLV, NWD_PREFIX_TLV, NWD_BORDER_ROUTER_TLV, NWD_6LOWPAN_ID_TLV
from pktverify.packet_verifier import PacketVerifier
@ -124,7 +125,7 @@ class Cert_5_6_7_NetworkDataRequestREED(thread_cert.TestCase):
for i in range(ROUTER1, ROUTER15 + 1):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.nodes[REED1].start()

View File

@ -82,11 +82,11 @@ class Cert_5_6_9_NetworkDataForwarding(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ED].start()

View File

@ -114,7 +114,7 @@ class Cert_5_7_01_CoapDiagCommands_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
for i in range(3, 7):

View File

@ -164,7 +164,7 @@ class Cert_5_7_02_CoapDiagCommands(thread_cert.TestCase):
for i in range(2, 17):
self.nodes[i].start()
self.simulator.go(10)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[i].get_state(), 'router')
self.nodes[REED].start()

View File

@ -108,7 +108,7 @@ class Cert_5_7_03_CoapDiagCommands_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
for i in range(3, 6):

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_CHILD_ID_RESPONSE
from pktverify.packet_verifier import PacketVerifier
@ -59,7 +60,7 @@ class Cert_5_8_2_KeyIncrement(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), "leader")
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), "router")
self.collect_ipaddrs()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_CHILD_ID_RESPONSE
from pktverify.packet_verifier import PacketVerifier
@ -60,7 +61,7 @@ class Cert_5_8_3_KeyIncrementRollOver(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.collect_ipaddrs()

View File

@ -30,6 +30,7 @@
import unittest
from mesh_cop import TlvType
import config
import thread_cert
from pktverify.consts import MLE_DATA_RESPONSE, MGMT_ACTIVE_SET_URI, MGMT_ACTIVE_GET_URI, LEADER_ALOC, NM_COMMISSIONER_SESSION_ID_TLV, NM_ACTIVE_TIMESTAMP_TLV, NM_SECURITY_POLICY_TLV, NM_NETWORK_KEY_TLV, MLE_DISCOVERY_RESPONSE
from pktverify.packet_verifier import PacketVerifier
@ -115,7 +116,7 @@ class Cert_5_8_04_SecurityPolicyTLV(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[COMMISSIONER_1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[COMMISSIONER_1].get_state(), 'router')
self.nodes[COMMISSIONER_1].commissioner_start()

View File

@ -79,7 +79,7 @@ class Cert_6_1_3_RouterAttachConnectivity(thread_cert.TestCase):
for i in range(2, 5):
self.nodes[i].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
for i in range(2, 5):
self.assertEqual(self.nodes[i].get_state(), 'router')

View File

@ -100,7 +100,7 @@ class Cert_6_1_4_REEDAttachConnectivity_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
for i in (3, 4):

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_CHILD_ID_REQUEST, MLE_PARENT_REQUEST, MODE_TLV, CHALLENGE_TLV, SCAN_MASK_TLV, VERSION_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, MLE_FRAME_COUNTER_TLV, TIMEOUT_TLV, ADDRESS_REGISTRATION_TLV, TLV_REQUEST_TLV, LINK_LOCAL_ALL_ROUTERS_MULTICAST_ADDRESS
from pktverify.packet_verifier import PacketVerifier
@ -78,7 +79,7 @@ class Cert_6_1_5_REEDAttachConnectivity(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[REED1].start()

View File

@ -99,7 +99,7 @@ class Cert_6_1_6_REEDAttachLinkQuality_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[REED].get_state(), 'child')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[MTD].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_CHILD_ID_REQUEST, MLE_PARENT_REQUEST, MODE_TLV, CHALLENGE_TLV, SCAN_MASK_TLV, VERSION_TLV, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, MLE_FRAME_COUNTER_TLV, TIMEOUT_TLV, ADDRESS_REGISTRATION_TLV, TLV_REQUEST_TLV, LINK_LOCAL_ALL_ROUTERS_MULTICAST_ADDRESS
from pktverify.packet_verifier import PacketVerifier
@ -70,11 +71,11 @@ class Cert_6_1_7_RouterAttachLinkQuality(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ED].start()

View File

@ -87,7 +87,7 @@ class Cert_6_2_1_NewPartition_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[MTD].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_CHILD_ID_REQUEST, MLE_ADVERTISEMENT, MLE_CHILD_UPDATE_REQUEST, SOURCE_ADDRESS_TLV, MODE_TLV, LEADER_DATA_TLV
from pktverify.packet_verifier import PacketVerifier
@ -71,11 +72,11 @@ class Cert_6_2_2_NewPartition(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER1].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[ED].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_PARENT_REQUEST, MLE_CHILD_ID_REQUEST, MLE_CHILD_UPDATE_REQUEST, SOURCE_ADDRESS_TLV, LEADER_DATA_TLV, MODE_TLV
from pktverify.packet_verifier import PacketVerifier
@ -65,7 +66,7 @@ class Cert_6_3_1_OrphanReattach(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_CHILD_ID_RESPONSE, MLE_DATA_REQUEST, MLE_CHILD_UPDATE_REQUEST, LEADER_DATA_TLV, ADDRESS_REGISTRATION_TLV, MODE_TLV, TIMEOUT_TLV, TLV_REQUEST_TLV, NETWORK_DATA_TLV
from pktverify.packet_verifier import PacketVerifier

View File

@ -84,7 +84,7 @@ class Cert_6_4_2_RealmLocal_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[MTD].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_CHILD_ID_REQUEST, MLE_CHILD_UPDATE_REQUEST, RESPONSE_TLV, LINK_LAYER_FRAME_COUNTER_TLV, MLE_FRAME_COUNTER_TLV, MODE_TLV, TIMEOUT_TLV, VERSION_TLV, ADDRESS_REGISTRATION_TLV, TLV_REQUEST_TLV
from pktverify.packet_verifier import PacketVerifier

View File

@ -95,7 +95,7 @@ class Cert_6_5_2_ChildResetReattach_Base(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[MTD].start()

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_CHILD_ID_REQUEST
from pktverify.packet_verifier import PacketVerifier

View File

@ -29,6 +29,7 @@
import unittest
import config
import thread_cert
from pktverify.consts import MLE_ADVERTISEMENT, MLE_CHILD_ID_REQUEST
from pktverify.packet_verifier import PacketVerifier

View File

@ -106,7 +106,7 @@ class Cert_7_1_1_BorderRouterAsLeader(thread_cert.TestCase):
self.nodes[LEADER].register_netdata()
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[SED1].start()

View File

@ -76,7 +76,7 @@ class Cert_7_1_2_BorderRouterAsRouter(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')

View File

@ -103,7 +103,7 @@ class Cert_7_1_3_BorderRouterAsLeader(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[SED1].start()

View File

@ -76,7 +76,7 @@ class Cert_7_1_4_BorderRouterAsRouter(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[ED2].start()

View File

@ -101,7 +101,7 @@ class Cert_7_1_5_BorderRouterAsRouter(thread_cert.TestCase):
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
self.nodes[ROUTER].start()
self.simulator.go(5)
self.simulator.go(config.ROUTER_STARTUP_DELAY)
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
self.nodes[MED].start()

Some files were not shown because too many files have changed in this diff Show More