From c5c5021aed8ac1baaaf0896193e1c89f125c2103 Mon Sep 17 00:00:00 2001 From: Nataliia Solomko Date: Fri, 27 Feb 2026 16:51:46 +0200 Subject: vpp: T8325: Migrate gre interface to 'interfaces vpp gre' --- src/migration-scripts/vpp/5-to-6 | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/migration-scripts') diff --git a/src/migration-scripts/vpp/5-to-6 b/src/migration-scripts/vpp/5-to-6 index 23b2d4eaa..ed043de03 100644 --- a/src/migration-scripts/vpp/5-to-6 +++ b/src/migration-scripts/vpp/5-to-6 @@ -45,6 +45,8 @@ # # Migrate loopback interface from vpp section to 'interfaces vpp loopback' (T8324) # +# Migrate gre interface to 'interfaces vpp gre' (T8325) +# from vyos.configtree import ConfigTree @@ -463,6 +465,31 @@ def _migrate_vpp_loopback_interface(config: ConfigTree) -> None: config.delete(['vpp', 'interfaces']) +def _migrate_vpp_gre_interface(config: ConfigTree) -> None: + base = ['vpp', 'interfaces', 'gre'] + new_base = ['interfaces', 'vpp', 'gre'] + kernel_interface_base = ['vpp', 'kernel-interfaces'] + + if not config.exists(base): + return + + config.set(new_base) + + for ifname in config.list_nodes(base): + _migrate_interface(config, 'gre', ifname) + + _migrate_members_bridge(config, ifname) + _migrate_members_xconnect(config, ifname) + + config.delete(base) + + if config.exists(kernel_interface_base) and len(config.list_nodes(kernel_interface_base)) == 0: + config.delete(['vpp', 'kernel-interfaces']) + + if len(config.list_nodes(['vpp', 'interfaces'])) == 0: + config.delete(['vpp', 'interfaces']) + + def migrate(config: ConfigTree) -> None: if not config.exists(['vpp']): # Nothing to do @@ -482,3 +509,4 @@ def migrate(config: ConfigTree) -> None: _migrate_vpp_vxlan_interface(config) _migrate_vpp_ipip_interface(config) _migrate_vpp_loopback_interface(config) + _migrate_vpp_gre_interface(config) -- cgit v1.2.3 From 99f617c88e57453315ee97cba88d3de1a24a5f01 Mon Sep 17 00:00:00 2001 From: Nataliia Solomko Date: Mon, 2 Mar 2026 11:42:17 +0200 Subject: vpp: T8327: Remove support for GRE "point-to-multipoint" mode Disabled "point-to-multipoint" mode for GRE interfaces, along with related "mode" node. This mode relies on the 'teib' feature, which is not implemented yet. --- interface-definitions/vpp_interface_gre.xml.in | 4 ++- python/vyos/ifconfig/vpp/gre.py | 4 +-- smoketest/configs/assert/vpp | 23 ++++++------- src/conf_mode/vpp_interfaces_gre.py | 47 +++++++++++++------------- src/migration-scripts/vpp/5-to-6 | 8 ++++- 5 files changed, 47 insertions(+), 39 deletions(-) (limited to 'src/migration-scripts') diff --git a/interface-definitions/vpp_interface_gre.xml.in b/interface-definitions/vpp_interface_gre.xml.in index 7b145ffdc..7636c6e2f 100644 --- a/interface-definitions/vpp_interface_gre.xml.in +++ b/interface-definitions/vpp_interface_gre.xml.in @@ -20,6 +20,8 @@ #include #include + + GRE tunnel type diff --git a/python/vyos/ifconfig/vpp/gre.py b/python/vyos/ifconfig/vpp/gre.py index e281574a2..7ab600998 100644 --- a/python/vyos/ifconfig/vpp/gre.py +++ b/python/vyos/ifconfig/vpp/gre.py @@ -34,7 +34,7 @@ class VPPGREInterface(Interface, VPPInterface): MODE_MAP = { 'point-to-point': 0, - 'point-to-multipoint': 1, + # 'point-to-multipoint': 1, } def __init__(self, ifname, config): @@ -51,7 +51,7 @@ class VPPGREInterface(Interface, VPPInterface): self.src_address = config.get('source_address') self.dst_address = config.get('remote') self.tunnel_type = self.TUNNEL_TYPE_MAP.get(config.get('tunnel_type'), 0) - self.mode = self.MODE_MAP.get(config.get('mode'), 0) + self.mode = self.MODE_MAP['point-to-point'] def _create(self): pass diff --git a/smoketest/configs/assert/vpp b/smoketest/configs/assert/vpp index 152ffd111..1e89dc324 100644 --- a/smoketest/configs/assert/vpp +++ b/smoketest/configs/assert/vpp @@ -22,18 +22,17 @@ set system syslog local facility local7 level 'debug' set interfaces vpp bonding vppbond0 hash-policy 'layer2+3' set interfaces vpp bonding vppbond0 member interface 'eth4' set interfaces vpp bonding vppbond0 mode '802.3ad' -set vpp interfaces gre gre10 description 'Layer-3' -set vpp interfaces gre gre10 mode 'point-to-point' -set vpp interfaces gre gre10 remote '192.0.2.2' -set vpp interfaces gre gre10 source-address '192.0.2.1' -set vpp interfaces gre gre10 tunnel-type 'l3' -set vpp interfaces gre gre11 description 'L2-bridge-to-eth2' -set vpp interfaces gre gre11 remote '192.0.2.123' -set vpp interfaces gre gre11 source-address '192.0.2.1' -set vpp interfaces gre gre11 tunnel-type 'teb' -set vpp interfaces ipip ipip20 remote '192.0.2.2' -set vpp interfaces ipip ipip20 source-address '192.0.2.1' -set vpp interfaces loopback lo12 description 'Loop12' +set interfaces vpp gre vppgre10 description 'Layer-3' +set interfaces vpp gre vppgre10 remote '192.0.2.2' +set interfaces vpp gre vppgre10 source-address '192.0.2.1' +set interfaces vpp gre vppgre10 tunnel-type 'l3' +set interfaces vpp gre vppgre11 description 'L2-bridge-to-eth2' +set interfaces vpp gre vppgre11 remote '192.0.2.123' +set interfaces vpp gre vppgre11 source-address '192.0.2.1' +set interfaces vpp gre vppgre11 tunnel-type 'teb' +set interfaces vpp ipip vppipip20 remote '192.0.2.2' +set interfaces vpp ipip vppipip20 source-address '192.0.2.1' +set interfaces vpp loopback vpplo12 description 'Loop12' set interfaces vpp vxlan vppvxlan10 remote '192.0.2.2' set interfaces vpp vxlan vppvxlan10 source-address '192.0.2.1' set interfaces vpp vxlan vppvxlan10 vni '10' diff --git a/src/conf_mode/vpp_interfaces_gre.py b/src/conf_mode/vpp_interfaces_gre.py index de3ab2d39..453845bcf 100644 --- a/src/conf_mode/vpp_interfaces_gre.py +++ b/src/conf_mode/vpp_interfaces_gre.py @@ -106,11 +106,11 @@ def verify(config): if not is_systemd_service_active('vpp.service'): raise ConfigError( - 'Cannot configure VPP bonding interface: vpp.service is not running' + 'Cannot configure VPP GRE interface: vpp.service is not running' ) # source-address and remote are mandatory options - required_keys = {'source_address', 'remote', 'mode', 'tunnel_type'} + required_keys = {'source_address', 'remote', 'tunnel_type'} if not all(key in config for key in required_keys): missing_keys = required_keys - set(config.keys()) raise ConfigError( @@ -122,27 +122,28 @@ def verify(config): if config.get('source_address') == config.get('remote'): raise ConfigError('Remote address must not be the same as source address') - # check multipoint mode - if config.get('mode') == 'point-to-multipoint': - # For multipoint mode, remote IP must be 0.0.0.0 - if config.get('remote') != '0.0.0.0': - raise ConfigError('For point-to-multipoint mode, remote must be 0.0.0.0') - - # Only one multipoint GRE tunnel is allowed from the same source address - # set interfaces vpp gre vppgre0 mode 'point-to-multipoint' - # set interfaces vpp gre vppgre0 remote '0.0.0.0' - # set interfaces vpp gre vppgre0 source-address '192.0.2.1' - # set interfaces vpp gre vppgre1 mode 'point-to-multipoint' - # set interfaces vpp gre vppgre1 remote '0.0.0.0' - # set interfaces vpp gre vppgre1 source-address '192.0.2.1' - for other_iface, other_iface_config in config['gre_interfaces'].items(): - if other_iface == config['ifname']: - continue - if other_iface_config['mode'] == 'point-to-multipoint': - if config['source_address'] == other_iface_config.get('source_address'): - raise ConfigError( - 'Only one multipoint GRE tunnel is allowed from the same source address' - ) + # Disable checks as point-to-multipoint mode does not work without 'teib' feature that is not implemented yet + # # check multipoint mode + # if config.get('mode') == 'point-to-multipoint': + # # For multipoint mode, remote IP must be 0.0.0.0 + # if config.get('remote') != '0.0.0.0': + # raise ConfigError('For point-to-multipoint mode, remote must be 0.0.0.0') + # + # # Only one multipoint GRE tunnel is allowed from the same source address + # # set interfaces vpp gre vppgre0 mode 'point-to-multipoint' + # # set interfaces vpp gre vppgre0 remote '0.0.0.0' + # # set interfaces vpp gre vppgre0 source-address '192.0.2.1' + # # set interfaces vpp gre vppgre1 mode 'point-to-multipoint' + # # set interfaces vpp gre vppgre1 remote '0.0.0.0' + # # set interfaces vpp gre vppgre1 source-address '192.0.2.1' + # for other_iface, other_iface_config in config['gre_interfaces'].items(): + # if other_iface == config['ifname']: + # continue + # if other_iface_config['mode'] == 'point-to-multipoint': + # if config['source_address'] == other_iface_config.get('source_address'): + # raise ConfigError( + # 'Only one multipoint GRE tunnel is allowed from the same source address' + # ) def generate(config): diff --git a/src/migration-scripts/vpp/5-to-6 b/src/migration-scripts/vpp/5-to-6 index ed043de03..03c20d970 100644 --- a/src/migration-scripts/vpp/5-to-6 +++ b/src/migration-scripts/vpp/5-to-6 @@ -45,7 +45,7 @@ # # Migrate loopback interface from vpp section to 'interfaces vpp loopback' (T8324) # -# Migrate gre interface to 'interfaces vpp gre' (T8325) +# Migrate gre interface to 'interfaces vpp gre', remove interfaces with mode "point-to-multipoint" (T8325) # from vyos.configtree import ConfigTree @@ -476,6 +476,12 @@ def _migrate_vpp_gre_interface(config: ConfigTree) -> None: config.set(new_base) for ifname in config.list_nodes(base): + if config.exists(base + [ifname, 'mode']): + if config.return_value(base + [ifname, 'mode']) == 'point-to-multipoint': + config.delete(base + [ifname]) + continue + config.delete(base + [ifname, 'mode']) + _migrate_interface(config, 'gre', ifname) _migrate_members_bridge(config, ifname) -- cgit v1.2.3