mirror of
https://github.com/espressif/openthread.git
synced 2026-09-14 21:20:11 +00:00
[mac] only apply neighbor check when key id mode is 1 (#5550)
Allows receiving a Joiner Entrust message even after the device has been commissioned.
This commit is contained in:
+24
-17
@@ -1891,30 +1891,37 @@ void Mac::HandleReceivedFrame(RxFrame *aFrame, otError aError)
|
|||||||
|
|
||||||
if (aFrame->GetSecurityEnabled())
|
if (aFrame->GetSecurityEnabled())
|
||||||
{
|
{
|
||||||
switch (neighbor->GetState())
|
uint8_t keyIdMode;
|
||||||
|
|
||||||
|
IgnoreError(aFrame->GetKeyIdMode(keyIdMode));
|
||||||
|
|
||||||
|
if (keyIdMode == Frame::kKeyIdMode1)
|
||||||
{
|
{
|
||||||
case Neighbor::kStateValid:
|
switch (neighbor->GetState())
|
||||||
break;
|
{
|
||||||
|
case Neighbor::kStateValid:
|
||||||
|
break;
|
||||||
|
|
||||||
case Neighbor::kStateRestored:
|
case Neighbor::kStateRestored:
|
||||||
case Neighbor::kStateChildUpdateRequest:
|
case Neighbor::kStateChildUpdateRequest:
|
||||||
|
|
||||||
// Only accept a "MAC Data Request" frame from a child being restored.
|
// Only accept a "MAC Data Request" frame from a child being restored.
|
||||||
VerifyOrExit(aFrame->IsDataRequestCommand(), error = OT_ERROR_DROP);
|
VerifyOrExit(aFrame->IsDataRequestCommand(), error = OT_ERROR_DROP);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ExitNow(error = OT_ERROR_UNKNOWN_NEIGHBOR);
|
ExitNow(error = OT_ERROR_UNKNOWN_NEIGHBOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 && OPENTHREAD_FTD
|
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 && OPENTHREAD_FTD
|
||||||
// From Thread 1.2, MAC Data Frame can also act as keep-alive message if child supports
|
// From Thread 1.2, MAC Data Frame can also act as keep-alive message if child supports
|
||||||
if (aFrame->GetType() == Frame::kFcfFrameData && !neighbor->IsRxOnWhenIdle() &&
|
if (aFrame->GetType() == Frame::kFcfFrameData && !neighbor->IsRxOnWhenIdle() &&
|
||||||
neighbor->IsEnhancedKeepAliveSupported())
|
neighbor->IsEnhancedKeepAliveSupported())
|
||||||
{
|
{
|
||||||
neighbor->SetLastHeard(TimerMilli::GetNow());
|
neighbor->SetLastHeard(TimerMilli::GetNow());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user