[mpl] use RLOC as IPv6 source address (#11843)

This helps reduce header overhead.
This commit is contained in:
Jonathan Hui
2025-08-22 11:40:59 -07:00
committed by GitHub
parent 3f1069e110
commit 05d1eb07e0
2 changed files with 8 additions and 13 deletions
+3 -8
View File
@@ -187,9 +187,8 @@ exit:
Error Ip6::PrepareMulticastToLargerThanRealmLocal(Message &aMessage, const Header &aHeader)
{
Error error = kErrorNone;
Header tunnelHeader;
const Address *source;
Error error = kErrorNone;
Header tunnelHeader;
#if OPENTHREAD_FTD
if (aHeader.GetDestination().IsMulticastLargerThanRealmLocal() &&
@@ -212,14 +211,10 @@ Error Ip6::PrepareMulticastToLargerThanRealmLocal(Message &aMessage, const Heade
tunnelHeader.InitVersionTrafficClassFlow();
tunnelHeader.SetHopLimit(kDefaultHopLimit);
tunnelHeader.SetPayloadLength(aHeader.GetPayloadLength() + sizeof(tunnelHeader));
tunnelHeader.SetSource(Get<Mle::Mle>().GetMeshLocalRloc());
tunnelHeader.GetDestination().SetToRealmLocalAllMplForwarders();
tunnelHeader.SetNextHeader(kProtoIp6);
source = SelectSourceAddress(tunnelHeader.GetDestination());
VerifyOrExit(source != nullptr, error = kErrorInvalidSourceAddress);
tunnelHeader.SetSource(*source);
SuccessOrExit(error = AddMplOption(aMessage, tunnelHeader));
SuccessOrExit(error = aMessage.Prepend(tunnelHeader));
@@ -141,7 +141,7 @@ class TestMlr(thread_cert.TestCase):
self.simulator.go(WAIT_REDUNDANCE)
self.collect_ipaddrs()
self.collect_rloc16s()
self.collect_rlocs()
# ping MA1 from Host could generate a reply from R1 and R2
self.assertTrue(self.nodes[HOST].ping(MA1, backbone=True, ttl=5))
@@ -180,7 +180,7 @@ class TestMlr(thread_cert.TestCase):
ROUTER1_DUA = pv.vars['ROUTER1_DUA']
ROUTER2_DUA = pv.vars['ROUTER2_DUA']
ROUTER1_RLOC16 = pv.vars['ROUTER1_RLOC16']
ROUTER1_RLOC = pv.vars['ROUTER1_RLOC']
#
# Verify Host ping MA1 to R1 and R2
@@ -204,7 +204,7 @@ class TestMlr(thread_cert.TestCase):
# ROUTER1 should send the multicast ping request
ping_ma2 = pkts.filter_wpan_src64(ROUTER1).filter_AMPLFMA(
mpl_seed_id=ROUTER1_RLOC16).filter_ping_request().must_next()
mpl_seed_id=ROUTER1_RLOC).filter_ping_request().must_next()
# PBBR1 should forward the multicast ping request to the Backbone link
pkts.filter_eth_src(PBBR1_ETH).filter_ipv6_src_dst(
@@ -228,7 +228,7 @@ class TestMlr(thread_cert.TestCase):
#
# ROUTER1 should send the multicast ping request
ping_ma2_2 = pkts.filter_wpan_src64(ROUTER1).filter_AMPLFMA(mpl_seed_id=ROUTER1_RLOC16).filter_ping_request(
ping_ma2_2 = pkts.filter_wpan_src64(ROUTER1).filter_AMPLFMA(mpl_seed_id=ROUTER1_RLOC).filter_ping_request(
identifier=ping_ma2.icmpv6.echo.identifier + 1).must_next()
# PBBR1 shouldn't forward the multicast ping request to the Backbone link
@@ -239,7 +239,7 @@ class TestMlr(thread_cert.TestCase):
#
# ROUTER1 should send the multicast ping request
ping_ma2_3 = pkts.filter_wpan_src64(ROUTER1).filter_AMPLFMA(mpl_seed_id=ROUTER1_RLOC16).filter_ping_request(
ping_ma2_3 = pkts.filter_wpan_src64(ROUTER1).filter_AMPLFMA(mpl_seed_id=ROUTER1_RLOC).filter_ping_request(
identifier=ping_ma2.icmpv6.echo.identifier + 1).must_next()
# PBBR1 shouldn't forward the multicast ping request to the Backbone link