From 6657de95b8762a9d6f8843e1c3faec08710e04fd Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Tue, 2 Sep 2025 08:06:48 -0700 Subject: [PATCH] [mesh-forwarder] always set direct transmission for MPL messages (#11887) --- src/core/thread/mesh_forwarder_ftd.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 88efcbe02..77073e84c 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -61,11 +61,10 @@ void MeshForwarder::SendMessage(OwnedPtr aMessagePtr) if (destination.IsMulticast()) { - // For traffic destined to multicast address larger than realm local, generally it uses IP-in-IP - // encapsulation (RFC2473), with outer destination as ALL_MPL_FORWARDERS. So here if the destination - // is multicast address larger than realm local, it should be for indirection transmission for the - // device's sleepy child, thus there should be no direct transmission. - if (!destination.IsMulticastLargerThanRealmLocal()) + // A non-link-local multicast message that does not + // contain an MPL Option should only be forwarded to + // children using indirect transmissions. + if (destination.IsLinkLocalMulticast() || ip6Header.GetNextHeader() == Ip6::kProtoHopOpts) { message.SetDirectTransmission(); }