mirror of
https://github.com/espressif/openthread.git
synced 2026-08-21 18:09:52 +00:00
[backbone-router] backbone TMF enhancements (#5660)
This commit enhances Backbone TMF: - Subscribe Backbone TMF on multicast addresses on the Backbone interface - All Network BBRs Multicast Address - All Domain BBRs Multicast Address - Thread Netif no longer subscribe these two addresses, because BBR Multicast Addresses are only defined for the Backbone Link in Thread Spec 9.4.8.1 - Make sure backbone messages are using link local src addresses - Verify src addr for b/bmr messages
This commit is contained in:
@@ -147,6 +147,7 @@ class BBR_5_11_01(thread_cert.TestCase):
|
||||
pkts.filter_eth_src(PBBR_ETH).filter_coap_request('/b/bmr').must_next().must_verify(f"""
|
||||
thread_meshcop.tlv.ipv6_addr == ['{MA1}']
|
||||
and thread_bl.tlv.timeout == {MLR_TIMEOUT}
|
||||
and ipv6.src.is_link_local
|
||||
""")
|
||||
|
||||
# Router registers MA2 with default timeout
|
||||
@@ -158,6 +159,7 @@ class BBR_5_11_01(thread_cert.TestCase):
|
||||
pkts.filter_eth_src(PBBR_ETH).filter_coap_request('/b/bmr').must_next().must_verify(f"""
|
||||
thread_meshcop.tlv.ipv6_addr == ['{MA2}']
|
||||
and thread_bl.tlv.timeout == {MLR_TIMEOUT}
|
||||
and ipv6.src.is_link_local
|
||||
""")
|
||||
|
||||
# Commissioner registers MA3 with deafult timeout
|
||||
@@ -169,6 +171,7 @@ class BBR_5_11_01(thread_cert.TestCase):
|
||||
pkts.filter_eth_src(PBBR_ETH).filter_coap_request('/b/bmr').must_next().must_verify(f"""
|
||||
thread_meshcop.tlv.ipv6_addr == ['{MA3}']
|
||||
and thread_bl.tlv.timeout == {MLR_TIMEOUT}
|
||||
and ipv6.src.is_link_local
|
||||
""")
|
||||
|
||||
# Commissioner registers MA4 with custom timeout
|
||||
@@ -180,6 +183,7 @@ class BBR_5_11_01(thread_cert.TestCase):
|
||||
pkts.filter_eth_src(PBBR_ETH).filter_coap_request('/b/bmr').must_next().must_verify(f"""
|
||||
thread_meshcop.tlv.ipv6_addr == ['{MA4}']
|
||||
and thread_bl.tlv.timeout == {CUSTOM_MLR_TIMEOUT}
|
||||
and ipv6.src.is_link_local
|
||||
""")
|
||||
|
||||
# Commissioner unregisters MA5
|
||||
@@ -190,6 +194,7 @@ class BBR_5_11_01(thread_cert.TestCase):
|
||||
# Verify PBBR not sends `/b/bmr` on the Backbone link for MA5.
|
||||
pkts.filter_eth_src(PBBR_ETH).filter_coap_request('/b/bmr').filter(f"""
|
||||
thread_meshcop.tlv.ipv6_addr == ['{MA5}']
|
||||
and ipv6.src.is_link_local
|
||||
""").must_not_next()
|
||||
|
||||
|
||||
|
||||
@@ -108,13 +108,10 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
WAIT_TIME = BBR_REGISTRATION_JITTER + WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
self.assertEqual(self.nodes[BBR_1].get_backbone_router_state(), 'Primary')
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_NETWORK_BBRS_ADDRESS)
|
||||
assert not self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
self.nodes[BBR_1].set_domain_prefix(config.DOMAIN_PREFIX)
|
||||
WAIT_TIME = WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
# 2) Reset BBR_1 and bring it back soon.
|
||||
# Verify that it restores Primary State with sequence number
|
||||
@@ -175,9 +172,6 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
self.simulator.go(WAIT_TIME)
|
||||
self.assertEqual(self.nodes[BBR_2].get_backbone_router_state(), 'Disabled')
|
||||
|
||||
assert not self.nodes[BBR_2].has_ipmaddr(config.ALL_NETWORK_BBRS_ADDRESS)
|
||||
assert not self.nodes[BBR_2].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
# Enable Backbone function, it will stay at Secondary state as
|
||||
# there is Primary Backbone Router already.
|
||||
# Here removes the Domain Prefix before enabling backbone function
|
||||
@@ -242,9 +236,6 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
self.simulator.go(WAIT_TIME)
|
||||
self.assertEqual(self.nodes[BBR_2].get_backbone_router_state(), 'Secondary')
|
||||
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_NETWORK_BBRS_ADDRESS)
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
# 6a) Check the uniqueness of DUA by comparing the one in above 4a).
|
||||
bbr2_dua2 = self.nodes[BBR_2].get_addr(config.DOMAIN_PREFIX)
|
||||
assert bbr2_dua == bbr2_dua2, 'Error: Unexpected different DUA ({} v.s. {})'.format(bbr2_dua, bbr2_dua2)
|
||||
|
||||
@@ -166,13 +166,10 @@ class TestDomainUnicastAddress(thread_cert.TestCase):
|
||||
WAIT_TIME = BBR_REGISTRATION_JITTER + WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
self.assertEqual(self.nodes[BBR_1].get_backbone_router_state(), 'Primary')
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_NETWORK_BBRS_ADDRESS)
|
||||
assert not self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
self.nodes[BBR_1].set_domain_prefix(config.DOMAIN_PREFIX, 'prosD')
|
||||
WAIT_TIME = WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
self.simulator.set_lowpan_context(context_id, config.DOMAIN_PREFIX)
|
||||
domain_prefix_cid = context_id
|
||||
|
||||
@@ -190,13 +190,10 @@ class TestDomainUnicastAddressRegistration(thread_cert.TestCase):
|
||||
WAIT_TIME = BBR_REGISTRATION_JITTER + WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
self.assertEqual(self.nodes[BBR_1].get_backbone_router_state(), 'Primary')
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_NETWORK_BBRS_ADDRESS)
|
||||
assert not self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
self.nodes[BBR_1].set_domain_prefix(config.DOMAIN_PREFIX, 'prosD')
|
||||
WAIT_TIME = WAIT_REDUNDANCE
|
||||
self.simulator.go(WAIT_TIME)
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
self.simulator.set_lowpan_context(context_id, config.DOMAIN_PREFIX)
|
||||
domain_prefix_cid = context_id
|
||||
|
||||
@@ -102,7 +102,6 @@ class TestDomainUnicastAddress(thread_cert.TestCase):
|
||||
|
||||
self.nodes[BBR_1].set_domain_prefix(config.DOMAIN_PREFIX, 'prosD')
|
||||
self.simulator.go(WAIT_REDUNDANCE)
|
||||
assert self.nodes[BBR_1].has_ipmaddr(config.ALL_DOMAIN_BBRS_ADDRESS)
|
||||
|
||||
# 2) Bring up ROUTER_1
|
||||
self.nodes[ROUTER].start()
|
||||
|
||||
Reference in New Issue
Block a user