[mlr] configure MLR.req response status (#5350)

This commit is contained in:
Simon Lin
2020-08-27 14:13:07 -07:00
committed by GitHub
parent 53e18618ae
commit c3845e72ff
9 changed files with 148 additions and 3 deletions
+7 -2
View File
@@ -40,7 +40,7 @@ import time
import unittest
import binascii
from typing import Union
from typing import Union, Dict
class Node:
@@ -530,7 +530,7 @@ class Node:
self.send_command(cmd)
self._expect('Done')
def multicast_listener_list(self):
def multicast_listener_list(self) -> Dict[ipaddress.IPv6Address, int]:
cmd = 'bbr mgmt mlr listener'
self.send_command(cmd)
@@ -559,6 +559,11 @@ class Node:
self.send_command(cmd)
self._expect(r"(Done|Error .*)")
def set_next_mlr_response(self, status: int):
cmd = 'bbr mgmt mlr response {}'.format(status)
self.send_command(cmd)
self._expect('Done')
def set_link_quality(self, addr, lqi):
cmd = 'macfilter rss add-lqi %s %s' % (addr, lqi)
self.send_command(cmd)
@@ -285,6 +285,60 @@ class TestMulticastListenerRegistration(thread_cert.TestCase):
self._bootstrap()
self.__test_multicast_listeners_table_api()
def testMlrConfigResponse(self):
self._bootstrap()
self.__test_mlr_config_response()
def __test_mlr_config_response(self):
bbr = self.nodes[BBR_1]
router = self.nodes[ROUTER_1_2]
self.flush_all()
# Configure next response to 0
bbr.set_next_mlr_response(0)
router.add_ipmaddr("ff04::1")
self.simulator.go(WAIT_REDUNDANCE)
self.__check_send_mlr_req(ROUTER_1_2, ["ff04::1"],
should_send=True,
expect_mlr_rsp=True,
expect_mlr_rsp_status=0)
self.assertNotIn(ipaddress.IPv6Address("ff04::1"), bbr.multicast_listener_list())
router.del_ipmaddr("ff04::1")
self.simulator.go(WAIT_REDUNDANCE)
self.flush_all()
# Configure next response to 2
bbr.set_next_mlr_response(2)
router.add_ipmaddr("ff04::2")
self.simulator.go(WAIT_REDUNDANCE)
self.__check_send_mlr_req(ROUTER_1_2, ["ff04::2"],
should_send=True,
expect_mlr_rsp=True,
expect_mlr_rsp_status=2)
router.del_ipmaddr("ff04::2")
self.simulator.go(WAIT_REDUNDANCE)
self.flush_all()
# Configure next response to 4
bbr.set_next_mlr_response(4)
router.add_ipmaddr("ff04::4")
self.simulator.go(WAIT_REDUNDANCE)
self.__check_send_mlr_req(ROUTER_1_2, ["ff04::4"],
should_send=True,
expect_mlr_rsp=True,
expect_mlr_rsp_status=4)
# The MA should be eventually registered after reregistration
self.simulator.go(REREG_DELAY + WAIT_REDUNDANCE)
self.assertIn(ipaddress.IPv6Address("ff04::4"), bbr.multicast_listener_list())
router.del_ipmaddr("ff04::4")
self.simulator.go(WAIT_REDUNDANCE)
self.flush_all()
def __test_multicast_listeners_table_api(self):
self.assertTrue(self.nodes[BBR_1].multicast_listener_list() == {})