[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:
Rongli Sun
2020-04-14 19:36:14 -07:00
committed by GitHub
parent 911010a9bf
commit b37528645a
10 changed files with 266 additions and 37 deletions
+2
View File
@@ -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,
+14
View File
@@ -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()