Reduce amount of multicast messages send to SED. (#1133)

This commit is contained in:
Łukasz Duda
2017-01-12 06:02:36 -08:00
committed by Jonathan Hui
parent 6ef5ef33fa
commit 42e9acb174
3 changed files with 22 additions and 8 deletions
+1
View File
@@ -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
+10
View File
@@ -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);
+11 -8
View File
@@ -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);
}
}
}
}