[pve-devel] [PATCH v3 pve-network 04/12] sdn: dhcp: rollback allocated ips on failure

Stefan Lendl s.lendl at proxmox.com
Fri Apr 5 15:17:57 CEST 2024


From: Stefan Hanreich <s.hanreich at proxmox.com>

If DHCP is configured for IPv4 and IPv6, failing to obtain an IPv6 IP
does not roll back the allocation made for IPv4. This patch rolls back
any changes made in case of failure, so that IP allocation is actually
atomic.

Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
Reviewed-by: Stefan Lendl <s.lendl at proxmox.com>
Tested-by: Stefan Lendl <s.lendl at proxmox.com>
Signed-off-by: Stefan Lendl <s.lendl at proxmox.com>
---
 src/PVE/Network/SDN/Vnets.pm | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/PVE/Network/SDN/Vnets.pm b/src/PVE/Network/SDN/Vnets.pm
index cbf0a07..45292e3 100644
--- a/src/PVE/Network/SDN/Vnets.pm
+++ b/src/PVE/Network/SDN/Vnets.pm
@@ -131,7 +131,17 @@ sub add_next_free_cidr {
 		last;
 	    }
 	}
-	die "can't find any free ip" if !$ip && $subnetcount > 0;
+
+	if (!$ip && $subnetcount > 0) {
+	    foreach my $version (sort keys %{$ips}) {
+		my $ip = $ips->{$version};
+		my ($subnetid, $subnet) = PVE::Network::SDN::Subnets::find_ip_subnet($ip, $subnets);
+
+		PVE::Network::SDN::Subnets::del_ip($zone, $subnetid, $subnet, $ip, $hostname, $mac, $skipdns);
+	    }
+
+	    die "can't find any free ip in zone $zoneid for IPv$ipversion";
+	}
     }
 }
 
-- 
2.44.0





More information about the pve-devel mailing list