mirror of
https://github.com/espressif/openthread.git
synced 2026-08-15 07:07:46 +00:00
Reduce amount of multicast messages send to SED. (#1133)
This commit is contained in:
committed by
Jonathan Hui
parent
6ef5ef33fa
commit
42e9acb174
@@ -214,6 +214,7 @@ public:
|
||||
kSubTypeMleDiscoverRequest = 2, ///< MLE Discover Request
|
||||
kSubTypeMleDiscoverResponse = 3, ///< MLE Discover Response
|
||||
kSubTypeJoinerEntrust = 4, ///< Joiner Entrust
|
||||
kSubTypeMplRetransmission = 5, ///< MPL next retranmission message
|
||||
};
|
||||
|
||||
enum
|
||||
|
||||
@@ -286,6 +286,11 @@ void Mpl::HandleRetransmissionTimer()
|
||||
|
||||
if (messageCopy != NULL)
|
||||
{
|
||||
if (messageMetadata.GetTransmissionCount() > 1)
|
||||
{
|
||||
messageCopy->SetSubType(Message::kSubTypeMplRetransmission);
|
||||
}
|
||||
|
||||
mIp6.EnqueueDatagram(*messageCopy);
|
||||
}
|
||||
|
||||
@@ -304,6 +309,11 @@ void Mpl::HandleRetransmissionTimer()
|
||||
|
||||
if (messageMetadata.GetTransmissionCount() == GetTimerExpirations())
|
||||
{
|
||||
if (messageMetadata.GetTransmissionCount() > 1)
|
||||
{
|
||||
message->SetSubType(Message::kSubTypeMplRetransmission);
|
||||
}
|
||||
|
||||
// Remove the extra metadata from the MPL Data Message.
|
||||
messageMetadata.RemoveFrom(*message);
|
||||
mIp6.EnqueueDatagram(*message);
|
||||
|
||||
@@ -410,16 +410,19 @@ ThreadError MeshForwarder::SendMessage(Message &aMessage)
|
||||
// schedule direct transmission
|
||||
aMessage.SetDirectTransmission();
|
||||
|
||||
// destined for all sleepy children
|
||||
children = mMle.GetChildren(&numChildren);
|
||||
|
||||
for (uint8_t i = 0; i < numChildren; i++)
|
||||
if (aMessage.GetSubType() != Message::kSubTypeMplRetransmission)
|
||||
{
|
||||
if (children[i].mState == Neighbor::kStateValid && (children[i].mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0)
|
||||
// destined for all sleepy children
|
||||
children = mMle.GetChildren(&numChildren);
|
||||
|
||||
for (uint8_t i = 0; i < numChildren; i++)
|
||||
{
|
||||
children[i].mQueuedIndirectMessageCnt++;
|
||||
AddSrcMatchEntry(children[i]);
|
||||
aMessage.SetChildMask(i);
|
||||
if (children[i].mState == Neighbor::kStateValid && (children[i].mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0)
|
||||
{
|
||||
children[i].mQueuedIndirectMessageCnt++;
|
||||
AddSrcMatchEntry(children[i]);
|
||||
aMessage.SetChildMask(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user