From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 164341FF15E for ; Wed, 21 Jan 2026 10:35:17 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A6F1120D65; Wed, 21 Jan 2026 10:35:32 +0100 (CET) From: Hannes Laimer To: pve-devel@lists.proxmox.com Date: Wed, 21 Jan 2026 10:34:55 +0100 Message-ID: <20260121093455.7999-1-h.laimer@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1768988041779 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.056 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [frr.pm] Subject: [pve-devel] [PATCH pve-network] sdn: add missing new-line at the end of frr config and update tests X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" We currently generate the FRR config file without a `\n` at the end, it works, but is technically not correct in UNIX. Most importantly when editing tests vim would add one when saving, this would then not match what we generate. Signed-off-by: Hannes Laimer --- src/PVE/Network/SDN/Frr.pm | 2 +- .../zones/evpn/advertise_subnets/expected_controller_config | 2 +- .../evpn/disable_arp_nd_suppression/expected_controller_config | 2 +- src/test/zones/evpn/ebgp/expected_controller_config | 2 +- src/test/zones/evpn/ebgp_loopback/expected_controller_config | 2 +- src/test/zones/evpn/exitnode/expected_controller_config | 2 +- .../evpn/exitnode_local_routing/expected_controller_config | 2 +- src/test/zones/evpn/exitnode_primary/expected_controller_config | 2 +- src/test/zones/evpn/exitnode_snat/expected_controller_config | 2 +- .../zones/evpn/exitnodenullroute/expected_controller_config | 2 +- src/test/zones/evpn/ipv4/expected_controller_config | 2 +- src/test/zones/evpn/ipv4ipv6/expected_controller_config | 2 +- .../zones/evpn/ipv4ipv6nogateway/expected_controller_config | 2 +- src/test/zones/evpn/ipv6/expected_controller_config | 2 +- src/test/zones/evpn/ipv6underlay/expected_controller_config | 2 +- src/test/zones/evpn/isis/expected_controller_config | 2 +- src/test/zones/evpn/isis/interfaces | 2 +- src/test/zones/evpn/isis_loopback/expected_controller_config | 2 +- src/test/zones/evpn/isis_loopback/interfaces | 2 +- src/test/zones/evpn/isis_standalone/expected_controller_config | 2 +- src/test/zones/evpn/isis_standalone/interfaces | 2 +- src/test/zones/evpn/multipath_relax/expected_controller_config | 2 +- src/test/zones/evpn/multiplezones/expected_controller_config | 2 +- .../zones/evpn/openfabric_fabric/expected_controller_config | 2 +- src/test/zones/evpn/ospf_fabric/expected_controller_config | 2 +- src/test/zones/evpn/rt_import/expected_controller_config | 2 +- src/test/zones/evpn/vxlanport/expected_controller_config | 2 +- src/test/zones/simple/hetzner/interfaces | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/PVE/Network/SDN/Frr.pm b/src/PVE/Network/SDN/Frr.pm index 221e562..6d5f430 100644 --- a/src/PVE/Network/SDN/Frr.pm +++ b/src/PVE/Network/SDN/Frr.pm @@ -239,7 +239,7 @@ sub raw_config_to_string { "!", "line vty", "!", ); - return join("\n", @final_config); + return join("\n", @final_config) . "\n"; } =head3 raw_config_to_string(\@raw_config) diff --git a/src/test/zones/evpn/advertise_subnets/expected_controller_config b/src/test/zones/evpn/advertise_subnets/expected_controller_config index 93dd23c..10a601e 100644 --- a/src/test/zones/evpn/advertise_subnets/expected_controller_config +++ b/src/test/zones/evpn/advertise_subnets/expected_controller_config @@ -55,4 +55,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/disable_arp_nd_suppression/expected_controller_config b/src/test/zones/evpn/disable_arp_nd_suppression/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/disable_arp_nd_suppression/expected_controller_config +++ b/src/test/zones/evpn/disable_arp_nd_suppression/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ebgp/expected_controller_config b/src/test/zones/evpn/ebgp/expected_controller_config index 8e2becc..ad97539 100644 --- a/src/test/zones/evpn/ebgp/expected_controller_config +++ b/src/test/zones/evpn/ebgp/expected_controller_config @@ -59,4 +59,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ebgp_loopback/expected_controller_config b/src/test/zones/evpn/ebgp_loopback/expected_controller_config index 4a17a97..22f1b10 100644 --- a/src/test/zones/evpn/ebgp_loopback/expected_controller_config +++ b/src/test/zones/evpn/ebgp_loopback/expected_controller_config @@ -71,4 +71,4 @@ exit ip protocol bgp route-map correct_src ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/exitnode/expected_controller_config b/src/test/zones/evpn/exitnode/expected_controller_config index 99aca65..160a0a0 100644 --- a/src/test/zones/evpn/exitnode/expected_controller_config +++ b/src/test/zones/evpn/exitnode/expected_controller_config @@ -75,4 +75,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/exitnode_local_routing/expected_controller_config b/src/test/zones/evpn/exitnode_local_routing/expected_controller_config index af4be8c..50f226b 100644 --- a/src/test/zones/evpn/exitnode_local_routing/expected_controller_config +++ b/src/test/zones/evpn/exitnode_local_routing/expected_controller_config @@ -61,4 +61,4 @@ exit ip route 10.0.0.0/24 10.255.255.2 xvrf_myzone ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/exitnode_primary/expected_controller_config b/src/test/zones/evpn/exitnode_primary/expected_controller_config index 586327b..1397160 100644 --- a/src/test/zones/evpn/exitnode_primary/expected_controller_config +++ b/src/test/zones/evpn/exitnode_primary/expected_controller_config @@ -77,4 +77,4 @@ route-map MAP_VTEP_OUT permit 3 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/exitnode_snat/expected_controller_config b/src/test/zones/evpn/exitnode_snat/expected_controller_config index 99aca65..160a0a0 100644 --- a/src/test/zones/evpn/exitnode_snat/expected_controller_config +++ b/src/test/zones/evpn/exitnode_snat/expected_controller_config @@ -75,4 +75,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/exitnodenullroute/expected_controller_config b/src/test/zones/evpn/exitnodenullroute/expected_controller_config index 4586881..781e6e2 100644 --- a/src/test/zones/evpn/exitnodenullroute/expected_controller_config +++ b/src/test/zones/evpn/exitnodenullroute/expected_controller_config @@ -118,4 +118,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ipv4/expected_controller_config b/src/test/zones/evpn/ipv4/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/ipv4/expected_controller_config +++ b/src/test/zones/evpn/ipv4/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ipv4ipv6/expected_controller_config b/src/test/zones/evpn/ipv4ipv6/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/ipv4ipv6/expected_controller_config +++ b/src/test/zones/evpn/ipv4ipv6/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ipv4ipv6nogateway/expected_controller_config b/src/test/zones/evpn/ipv4ipv6nogateway/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/ipv4ipv6nogateway/expected_controller_config +++ b/src/test/zones/evpn/ipv4ipv6nogateway/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ipv6/expected_controller_config b/src/test/zones/evpn/ipv6/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/ipv6/expected_controller_config +++ b/src/test/zones/evpn/ipv6/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ipv6underlay/expected_controller_config b/src/test/zones/evpn/ipv6underlay/expected_controller_config index 123964e..6f453be 100644 --- a/src/test/zones/evpn/ipv6underlay/expected_controller_config +++ b/src/test/zones/evpn/ipv6underlay/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/isis/expected_controller_config b/src/test/zones/evpn/isis/expected_controller_config index 913fb2b..e47afaa 100644 --- a/src/test/zones/evpn/isis/expected_controller_config +++ b/src/test/zones/evpn/isis/expected_controller_config @@ -55,4 +55,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/isis/interfaces b/src/test/zones/evpn/isis/interfaces index 2426e0f..66bb826 100644 --- a/src/test/zones/evpn/isis/interfaces +++ b/src/test/zones/evpn/isis/interfaces @@ -4,4 +4,4 @@ iface vmbr0 inet static gateway 192.168.0.254 bridge-ports eth0 bridge-stp off - bridge-fd 0 \ No newline at end of file + bridge-fd 0 diff --git a/src/test/zones/evpn/isis_loopback/expected_controller_config b/src/test/zones/evpn/isis_loopback/expected_controller_config index 4f77b4d..487ca86 100644 --- a/src/test/zones/evpn/isis_loopback/expected_controller_config +++ b/src/test/zones/evpn/isis_loopback/expected_controller_config @@ -56,4 +56,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/isis_loopback/interfaces b/src/test/zones/evpn/isis_loopback/interfaces index 41ae25f..ba248a1 100644 --- a/src/test/zones/evpn/isis_loopback/interfaces +++ b/src/test/zones/evpn/isis_loopback/interfaces @@ -9,4 +9,4 @@ iface vmbr0 inet static auto dummy1 iface dummy1 inet static address 10.0.0.1/32 - link-type dummy \ No newline at end of file + link-type dummy diff --git a/src/test/zones/evpn/isis_standalone/expected_controller_config b/src/test/zones/evpn/isis_standalone/expected_controller_config index 7e99517..92a6f38 100644 --- a/src/test/zones/evpn/isis_standalone/expected_controller_config +++ b/src/test/zones/evpn/isis_standalone/expected_controller_config @@ -19,4 +19,4 @@ router isis isis1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/isis_standalone/interfaces b/src/test/zones/evpn/isis_standalone/interfaces index 41ae25f..ba248a1 100644 --- a/src/test/zones/evpn/isis_standalone/interfaces +++ b/src/test/zones/evpn/isis_standalone/interfaces @@ -9,4 +9,4 @@ iface vmbr0 inet static auto dummy1 iface dummy1 inet static address 10.0.0.1/32 - link-type dummy \ No newline at end of file + link-type dummy diff --git a/src/test/zones/evpn/multipath_relax/expected_controller_config b/src/test/zones/evpn/multipath_relax/expected_controller_config index 1f6ff55..4a4617b 100644 --- a/src/test/zones/evpn/multipath_relax/expected_controller_config +++ b/src/test/zones/evpn/multipath_relax/expected_controller_config @@ -54,4 +54,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/multiplezones/expected_controller_config b/src/test/zones/evpn/multiplezones/expected_controller_config index fcba273..ab3d851 100644 --- a/src/test/zones/evpn/multiplezones/expected_controller_config +++ b/src/test/zones/evpn/multiplezones/expected_controller_config @@ -52,4 +52,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/openfabric_fabric/expected_controller_config b/src/test/zones/evpn/openfabric_fabric/expected_controller_config index caaa225..397655e 100644 --- a/src/test/zones/evpn/openfabric_fabric/expected_controller_config +++ b/src/test/zones/evpn/openfabric_fabric/expected_controller_config @@ -71,4 +71,4 @@ ip protocol openfabric route-map pve_openfabric ! ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/ospf_fabric/expected_controller_config b/src/test/zones/evpn/ospf_fabric/expected_controller_config index 1930eef..dd0e9d8 100644 --- a/src/test/zones/evpn/ospf_fabric/expected_controller_config +++ b/src/test/zones/evpn/ospf_fabric/expected_controller_config @@ -65,4 +65,4 @@ ip protocol ospf route-map pve_ospf ! ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/rt_import/expected_controller_config b/src/test/zones/evpn/rt_import/expected_controller_config index ab1471f..c5b6572 100644 --- a/src/test/zones/evpn/rt_import/expected_controller_config +++ b/src/test/zones/evpn/rt_import/expected_controller_config @@ -48,4 +48,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/evpn/vxlanport/expected_controller_config b/src/test/zones/evpn/vxlanport/expected_controller_config index 8d265c8..d67552a 100644 --- a/src/test/zones/evpn/vxlanport/expected_controller_config +++ b/src/test/zones/evpn/vxlanport/expected_controller_config @@ -42,4 +42,4 @@ route-map MAP_VTEP_OUT permit 1 exit ! line vty -! \ No newline at end of file +! diff --git a/src/test/zones/simple/hetzner/interfaces b/src/test/zones/simple/hetzner/interfaces index 5ab9635..53e894a 100644 --- a/src/test/zones/simple/hetzner/interfaces +++ b/src/test/zones/simple/hetzner/interfaces @@ -3,4 +3,4 @@ iface eth0 inet static address 144.76.0.1 netmask 255.255.255.255 pointopoint 172.31.1.1 - gateway 172.31.1.1 \ No newline at end of file + gateway 172.31.1.1 -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel