From 4f4c11cc7ba3f1cbaeacec459b2d622e6b95ab8a Mon Sep 17 00:00:00 2001 From: Michel Jouvin Date: Tue, 16 Apr 2024 09:04:57 +0200 Subject: [PATCH] ncm-nmstate: relax VLAN name pattern - Does not require a . between interface name and VLAN ID Fixes #1678 --- ncm-network/src/main/perl/nmstate.pm | 13 +++++--- ncm-network/src/test/perl/nmstate_advance.t | 31 +++++++++++++++++++ .../src/test/resources/nmstate_advance.pan | 10 +++++- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/ncm-network/src/main/perl/nmstate.pm b/ncm-network/src/main/perl/nmstate.pm index 18f67052b2..dfd41db2bd 100644 --- a/ncm-network/src/main/perl/nmstate.pm +++ b/ncm-network/src/main/perl/nmstate.pm @@ -297,15 +297,18 @@ sub generate_vip_config { } # private sub to extract vlan id from name -# i.e given eth0.123 return 123 +# i.e given eth0.123 or vlan123 return 123 sub _get_vlan_id { my ($self, $name) = @_; - return $1 if ($name =~ m/\.(\d+)$/); + return $1 if ($name =~ m/^[a-z]+(?:\d+\.)?(\d+)$/); } -# find vlan id from either the name or device. -# i.e eth0.123 will return 123. by checking iface name and device -# returns vlan id. +# find vlan id by parsing either the name or device, if they follow +# # the syntax intname[.]vlanid. '.' before the VLAN ID is optional +# # if the interface name contains no digit. +# # i.e. vlan123 will return 123 and eth0.123 will return 123. +# # If there is no '.'i and the interface name ends with a number, this number +# # must be the VLAN ID. sub find_vlan_id { my ($self, $iface, $device) = @_; # a vlan interface can defined in two ways diff --git a/ncm-network/src/test/perl/nmstate_advance.t b/ncm-network/src/test/perl/nmstate_advance.t index af1eddcfd2..79df6d8b9c 100644 --- a/ncm-network/src/test/perl/nmstate_advance.t +++ b/ncm-network/src/test/perl/nmstate_advance.t @@ -120,6 +120,34 @@ routes: next-hop-interface: vlan0 EOF +Readonly my $VLAN123_YML => < <