mirror of
https://github.com/espressif/openthread.git
synced 2026-07-08 21:30:24 +00:00
[mlr] add MulticastListenersTable on BBR (#5292)
This commit adds the Multicast Listener Table for BBR:
- Implements Multicast Listener Table on BBR
- Adds registered MAs to MulticastListenerTable
- Reject when the table is full or the multicast address is invalid
and return failed status
- Respond with unsuccessful status along with failed addresses
- Expire Listeners from MulticastListenerTable per second (using
MinHeap for better performance)
- MLR enhancement
- Re-register only failed multicast addresses (used to register all
registering multicast addresses)
- Reference Device only APIs
- Some APIs are defined for reference devices and tests.
- Add tests
- Add unit test: test_multicast_listener_table.cpp (runs for 1.2-bbr
only)
- Add functional tests
This commit is contained in:
@@ -40,6 +40,8 @@ import time
|
||||
import unittest
|
||||
import binascii
|
||||
|
||||
from typing import Union
|
||||
|
||||
|
||||
class Node:
|
||||
|
||||
@@ -528,6 +530,35 @@ class Node:
|
||||
self.send_command(cmd)
|
||||
self._expect('Done')
|
||||
|
||||
def multicast_listener_list(self):
|
||||
cmd = 'bbr mgmt mlr listener'
|
||||
self.send_command(cmd)
|
||||
|
||||
table = {}
|
||||
for line in self._expect_results("\S+ \d+"):
|
||||
line = line.split()
|
||||
assert len(line) == 2, line
|
||||
ip = ipaddress.IPv6Address(line[0])
|
||||
timeout = int(line[1])
|
||||
assert ip not in table
|
||||
|
||||
table[ip] = timeout
|
||||
|
||||
return table
|
||||
|
||||
def multicast_listener_clear(self):
|
||||
cmd = f'bbr mgmt mlr listener clear'
|
||||
self.send_command(cmd)
|
||||
self._expect("Done")
|
||||
|
||||
def multicast_listener_add(self, ip: Union[ipaddress.IPv6Address, str], timeout: int = 0):
|
||||
if not isinstance(ip, ipaddress.IPv6Address):
|
||||
ip = ipaddress.IPv6Address(ip)
|
||||
|
||||
cmd = f'bbr mgmt mlr listener add {ip.compressed} {timeout}'
|
||||
self.send_command(cmd)
|
||||
self._expect(r"(Done|Error .*)")
|
||||
|
||||
def set_link_quality(self, addr, lqi):
|
||||
cmd = 'macfilter rss add-lqi %s %s' % (addr, lqi)
|
||||
self.send_command(cmd)
|
||||
|
||||
Reference in New Issue
Block a user