mirror of
https://github.com/espressif/openthread.git
synced 2026-10-14 11:47:38 +00:00
[mlr] configure MLR.req response status (#5350)
This commit is contained in:
@@ -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() == {})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user