From 147751ec59527800e956b7ea689805ba80769abe Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Wed, 11 Dec 2024 21:22:41 +0100 Subject: static: T6746: migrate BFD CLI nodes Migrate "set protocols static route next-hop bfd multi-hop source profile " to: "set protocols static route next-hop bfd profile bar" FRR supports only one source IP address per BFD multi-hop session. VyOS had CLI cupport for multiple source addresses which made no sense. --- src/migration-scripts/quagga/11-to-12 | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/migration-scripts/quagga/11-to-12 (limited to 'src/migration-scripts') diff --git a/src/migration-scripts/quagga/11-to-12 b/src/migration-scripts/quagga/11-to-12 new file mode 100644 index 000000000..becc44162 --- /dev/null +++ b/src/migration-scripts/quagga/11-to-12 @@ -0,0 +1,54 @@ +# Copyright 2024 VyOS maintainers and contributors +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +# T6747: +# - Migrate static BFD configuration to match FRR possibillities +# - Consolidate static multicast routing configuration under a new node + +from vyos.configtree import ConfigTree + +static_base = ['protocols', 'static'] + +def migrate(config: ConfigTree) -> None: + # Check for static route/route6 configuration + for route_route6 in ['route', 'route6']: + route_route6_base = static_base + [route_route6] + if not config.exists(route_route6_base): + continue + + for prefix in config.list_nodes(route_route6_base): + next_hop_base = route_route6_base + [prefix, 'next-hop'] + if not config.exists(next_hop_base): + continue + + for next_hop in config.list_nodes(next_hop_base): + multi_hop_base = next_hop_base + [next_hop, 'bfd', 'multi-hop'] + + if not config.exists(multi_hop_base): + continue + + mh_source_base = multi_hop_base + ['source'] + source = None + profile = None + for src_ip in config.list_nodes(mh_source_base): + source = src_ip + if config.exists(mh_source_base + [source, 'profile']): + profile = config.return_value(mh_source_base + [source, 'profile']) + # FRR only supports one source, we will use the first one + break + + config.delete(multi_hop_base) + config.set(multi_hop_base + ['source-address'], value=source) + config.set(next_hop_base + [next_hop, 'bfd', 'profile'], value=profile) -- cgit v1.2.3 From d58e7ace7075e24c64cfe5e56ffcaad1688446e9 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Thu, 12 Dec 2024 20:57:29 +0100 Subject: multicast: T6746: migrate CLI to to mimic unicast IPv4 routes syntax Consolidate "multicast interface-route" and "multicast route" under common "mroute " CLI node. --- smoketest/config-tests/static-route-basic | 2 ++ smoketest/configs/static-route-basic | 4 ++-- src/migration-scripts/quagga/11-to-12 | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) (limited to 'src/migration-scripts') diff --git a/smoketest/config-tests/static-route-basic b/smoketest/config-tests/static-route-basic index 4416e6b19..d2d33d043 100644 --- a/smoketest/config-tests/static-route-basic +++ b/smoketest/config-tests/static-route-basic @@ -3,6 +3,8 @@ set interfaces ethernet eth0 speed 'auto' set interfaces ethernet eth0 vif 203 address '172.18.203.10/24' set interfaces ethernet eth1 duplex 'auto' set interfaces ethernet eth1 speed 'auto' +set protocols static mroute 224.1.0.0/24 interface eth0.203 distance '10' +set protocols static mroute 224.2.0.0/24 next-hop 172.18.203.254 distance '20' set protocols static route 10.0.0.0/8 blackhole distance '200' set protocols static route 10.0.0.0/8 blackhole tag '333' set protocols static route 10.0.0.0/8 next-hop 192.0.2.140 bfd multi-hop source-address '192.0.2.10' diff --git a/smoketest/configs/static-route-basic b/smoketest/configs/static-route-basic index 4bf114e33..648e19676 100644 --- a/smoketest/configs/static-route-basic +++ b/smoketest/configs/static-route-basic @@ -14,12 +14,12 @@ interfaces { protocols { static { multicast { - interface-route 224.0.0.0/24 { + interface-route 224.1.0.0/24 { next-hop-interface eth0.203 { distance "10" } } - route 224.0.0.0/24 { + route 224.2.0.0/24 { next-hop 172.18.203.254 { distance "20" } diff --git a/src/migration-scripts/quagga/11-to-12 b/src/migration-scripts/quagga/11-to-12 index becc44162..8ae2023a1 100644 --- a/src/migration-scripts/quagga/11-to-12 +++ b/src/migration-scripts/quagga/11-to-12 @@ -23,6 +23,7 @@ static_base = ['protocols', 'static'] def migrate(config: ConfigTree) -> None: # Check for static route/route6 configuration + # Migrate static BFD configuration to match FRR possibillities for route_route6 in ['route', 'route6']: route_route6_base = static_base + [route_route6] if not config.exists(route_route6_base): @@ -52,3 +53,23 @@ def migrate(config: ConfigTree) -> None: config.delete(multi_hop_base) config.set(multi_hop_base + ['source-address'], value=source) config.set(next_hop_base + [next_hop, 'bfd', 'profile'], value=profile) + + # Consolidate static multicast routing configuration under a new node + if config.exists(static_base + ['multicast']): + for mroute in ['interface-route', 'route']: + mroute_base = static_base + ['multicast', mroute] + if not config.exists(mroute_base): + continue + config.set(static_base + ['mroute']) + config.set_tag(static_base + ['mroute']) + for route in config.list_nodes(mroute_base): + config.copy(mroute_base + [route], static_base + ['mroute', route]) + + mroute_base = static_base + ['mroute'] + if config.exists(mroute_base): + for mroute in config.list_nodes(mroute_base): + interface_path = mroute_base + [mroute, 'next-hop-interface'] + if config.exists(interface_path): + config.rename(interface_path, 'interface') + + config.delete(static_base + ['multicast']) -- cgit v1.2.3