[pve-devel] [PATCH pve-network] dnsmasq: configure static range for each subnet

DERUMIER, Alexandre alexandre.derumier at groupe-cyllene.com
Wed Nov 15 17:07:10 CET 2023

mmmm,it's not so easy.

dnsmasq still use a lease file (and need it) for static reversation...

and it keep in memory the reservation too,
that mean than we can't reattribute an existing ip, even if we have
delete it previouly from reservation/ipam

the only way is to delete the lease file, and restart dnsmasq.
(reload is not enough :/ )

It'll try to look at dnsmasq code && maybe do test with kea to compare.

-------- Message initial --------
De: Alexandre Derumier <aderumier at odiso.com>
Répondre à: Proxmox VE development discussion <pve-
devel at lists.proxmox.com>
À: pve-devel at lists.proxmox.com
Objet: [pve-devel] [PATCH pve-network] dnsmasq: configure static range
for each subnet
Date: 15/11/2023 16:13:50

we don't want dynamic lease, simply define each subnet as a static

dhcp-range defined on a subnet is only used by ipam plugin.

This will also allow to use dhcp subnet without need to define a range.
Can be usefull for external ipam like phpipam, where you can't define

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
 src/PVE/Network/SDN/Dhcp/Dnsmasq.pm | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/PVE/Network/SDN/Dhcp/Dnsmasq.pm
index 46172c5..2db7f4f 100644
--- a/src/PVE/Network/SDN/Dhcp/Dnsmasq.pm
+++ b/src/PVE/Network/SDN/Dhcp/Dnsmasq.pm
@@ -112,11 +112,18 @@ sub configure_subnet {
 sub configure_range {
     my ($class, $dhcpid, $subnet_config, $range_config) = @_;
-    my $range_file = "$DNSMASQ_CONFIG_ROOT/$dhcpid/10-$subnet_config-
+    my $subnet_file = "$DNSMASQ_CONFIG_ROOT/$dhcpid/10-$subnet_config-
     my $tag = $subnet_config->{id};
-    open(my $fh, '>>', $range_file) or die "Could not open file
'$range_file' $!\n";
-    print $fh "dhcp-range=set:$tag,$range_config->{'start-
+    my ($zone, $network, $mask) = split(/-/, $tag);
+    if (Net::IP::ip_is_ipv4($network)) {
+	$mask = (2 ** $mask - 1) << (32 - $mask);
+	$mask = join( '.', unpack( "C4", pack( "N", $mask ) ) );
+    }
+    open(my $fh, '>>', $subnet_file) or die "Could not open file
'$subnet_file' $!\n";
+    print $fh "dhcp-range=set:$tag,$network,static,$mask,infinite\n";
     close $fh;

More information about the pve-devel mailing list