mirror of
https://github.com/espressif/openthread.git
synced 2026-07-30 15:47:46 +00:00
[bbr] (Un)Subscribe AllDomainBBRs multicast address (#4795)
This commit includes: - cache domain prefix in the Thread Network - subscribe/unsubscribe AllDomainBBRs Multicast address - update test to cover AllNetworkBBRs and AllDomainBBRs subscription
This commit is contained in:
@@ -57,6 +57,8 @@ LINK_LOCAL_ALL_NODES_ADDRESS = 'ff02::1'
|
||||
LINK_LOCAL_ALL_ROUTERS_ADDRESS = 'ff02::2'
|
||||
|
||||
DOMAIN_PREFIX = 'fd00:7d03:7d03:7d03::/64'
|
||||
ALL_DOMAIN_BBRS_ADDRESS = 'ff32:40:fd00:7d03:7d03:7d03:0:3'
|
||||
ALL_NETWORK_BBRS_ADDRESS = 'ff32:40:fdde:ad00:beef:0:0:3'
|
||||
|
||||
DEFAULT_MASTER_KEY = bytearray([
|
||||
0x00,
|
||||
|
||||
@@ -734,6 +734,20 @@ class Node:
|
||||
|
||||
return None
|
||||
|
||||
def get_ipmaddrs(self):
|
||||
self.send_command('ipmaddr')
|
||||
return self._expect_results(r'\S+(:\S*)+')
|
||||
|
||||
def has_ipmaddr(self, address):
|
||||
ipmaddr = ipaddress.ip_address(address)
|
||||
ipmaddrs = self.get_ipmaddrs()
|
||||
for addr in ipmaddrs:
|
||||
if isinstance(addr, bytearray):
|
||||
addr = bytes(addr)
|
||||
if ipaddress.ip_address(addr) == ipmaddr:
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_addr_leader_aloc(self):
|
||||
addrs = self.get_addrs()
|
||||
for addr in addrs:
|
||||
|
||||
@@ -96,7 +96,6 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
# 1) First Backbone Router would become the Primary.
|
||||
self.nodes[BBR_1].set_router_selection_jitter(ROUTER_SELECTION_JITTER)
|
||||
self.nodes[BBR_1].set_bbr_registration_jitter(BBR_REGISTRATION_JITTER)
|
||||
self.nodes[BBR_1].set_domain_prefix(config.DOMAIN_PREFIX)
|
||||
self.nodes[BBR_1].set_backbone_router(seqno=1)
|
||||
self.nodes[BBR_1].start()
|
||||
WAIT_TIME = WAIT_ATTACH + ROUTER_SELECTION_JITTER
|
||||
@@ -107,6 +106,13 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
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
|
||||
@@ -172,6 +178,10 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
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
|
||||
@@ -241,6 +251,9 @@ class TestBackboneRouterService(thread_cert.TestCase):
|
||||
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)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user