From 05d1eb07e04e2dbede52f3ae4656024f82a236c3 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Fri, 22 Aug 2025 11:40:59 -0700 Subject: [PATCH] [mpl] use RLOC as IPv6 source address (#11843) This helps reduce header overhead. --- src/core/net/ip6.cpp | 11 +++-------- .../test_mlr_multicast_routing_across_thread_pans.py | 10 +++++----- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp index 8e571cca9..cb229783e 100644 --- a/src/core/net/ip6.cpp +++ b/src/core/net/ip6.cpp @@ -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().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)); diff --git a/tests/scripts/thread-cert/backbone/test_mlr_multicast_routing_across_thread_pans.py b/tests/scripts/thread-cert/backbone/test_mlr_multicast_routing_across_thread_pans.py index cf7405edc..fd9a71ab9 100755 --- a/tests/scripts/thread-cert/backbone/test_mlr_multicast_routing_across_thread_pans.py +++ b/tests/scripts/thread-cert/backbone/test_mlr_multicast_routing_across_thread_pans.py @@ -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