[routing-manager] stop PD if there is another prefix with higher preference in netdata (#10289)

This commit adds a new IDLE state to PdPrefixManager.

PdPrefixManager enters idle state when PD is enabled and there is
already a BR requesting PD prefix. When there are multiple BRs
publishing PD prefix at the same time, the one with lexcial smaller
prefix wins.
This commit is contained in:
Song GUO
2024-09-29 23:27:30 -07:00
committed by GitHub
parent 6e46e2e9f1
commit 7cd179e23a
10 changed files with 232 additions and 13 deletions
+41
View File
@@ -2310,6 +2310,20 @@ class NodeImpl:
self.send_command(cmd)
return self._expect_command_output()[0]
def pd_get_prefix(self):
cmd = 'br pd omrprefix'
self.send_command(cmd)
return self._expect_command_output()[0].split(" ")[0]
def pd_set_enabled(self, enable):
self.send_command('br pd {}'.format("enable" if enable else "disable"))
self._expect_done()
@property
def pd_state(self):
self.send_command('br pd state')
return self._expect_command_output()[0].strip()
def get_netdata_non_nat64_routes(self):
nat64_routes = []
routes = self.get_routes()
@@ -4097,6 +4111,33 @@ EOF
self.bash('service radvd start')
self.bash('service radvd status') # Make sure radvd service is running
def start_pd_radvd_service(self, prefix):
self.bash("""cat >/etc/radvd.conf <<EOF
interface wpan0
{
AdvSendAdvert on;
AdvReachableTime 20;
AdvRetransTimer 20;
AdvDefaultLifetime 180;
MinRtrAdvInterval 120;
MaxRtrAdvInterval 180;
AdvDefaultPreference low;
prefix %s
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvPreferredLifetime 180;
AdvValidLifetime 180;
};
};
EOF
""" % (prefix,))
self.bash('service radvd start')
self.bash('service radvd status') # Make sure radvd service is running
def stop_radvd_service(self):
self.bash('service radvd stop')