From: Stefan Lendl <s.lendl@proxmox.com>
To: Stefan Hanreich <s.hanreich@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [pve-devel] [WIP v2 pve-network 06/10] ipam: Add helper methods for DHCP to PVE IPAM
Date: Fri, 27 Oct 2023 13:51:50 +0200 [thread overview]
Message-ID: <87jzr8mgfd.fsf@gmail.com> (raw)
In-Reply-To: <20231017135507.2220948-7-s.hanreich@proxmox.com>
Stefan Hanreich <s.hanreich@proxmox.com> writes:
> Those methods are used by the DHCP plugins to attain the next free
> IP address for a given DHCP range, as well as delete all entries with
> a certain MAC address.
>
> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
> ---
> src/PVE/Network/SDN/Ipams/PVEPlugin.pm | 64 ++++++++++++++++++++++++++
> 1 file changed, 64 insertions(+)
>
> diff --git a/src/PVE/Network/SDN/Ipams/PVEPlugin.pm b/src/PVE/Network/SDN/Ipams/PVEPlugin.pm
> index 3e8ffc5..fcc8282 100644
> --- a/src/PVE/Network/SDN/Ipams/PVEPlugin.pm
> +++ b/src/PVE/Network/SDN/Ipams/PVEPlugin.pm
> @@ -156,6 +156,70 @@ sub add_next_freeip {
> return "$freeip/$mask";
> }
>
> +sub add_dhcp_ip {
> + my ($class, $subnet, $dhcp_range, $data) = @_;
> +
> + my $cidr = $subnet->{cidr};
> + my $zone = $subnet->{zone};
> +
> + cfs_lock_file($ipamdb_file, undef, sub {
> + my $db = read_db();
> +
> + my $dbzone = $db->{zones}->{$zone};
> + die "zone '$zone' doesn't exist in IPAM DB\n" if !$dbzone;
> +
> + my $dbsubnet = $dbzone->{subnets}->{$cidr};
> + die "subnet '$cidr' doesn't exist in IPAM DB\n" if !$dbsubnet;
> +
> + my $ip = new Net::IP ("$dhcp_range->{'start-address'} - $dhcp_range->{'end-address'}")
> + or die "Invalid IP address(es) in DHCP Range!\n";
> +
> + do {
> + my $ip_address = $ip->ip();
> + if (!$dbsubnet->{ips}->{$ip_address}) {
> + $dbsubnet->{ips}->{$ip_address} = $data;
> + write_db($db);
> +
> + return $ip_address;
> + }
> + } while (++$ip);
> +
> + die "No free IP left in DHCP Range $dhcp_range->{'start-address'}:$dhcp_range->{'end-address'}}\n";
> + });
> +}
This duplicates existing functionality to find a new IP.
Regarding the reply from Alexandre, we may not need to implement
dhcp_range feature and solely rely on IPAM generating a new IP.
> +
> +sub del_dhcp_ip {
> + my ($class, $subnet, $mac) = @_;
> +
> + my $cidr = $subnet->{cidr};
> + my $zone = $subnet->{zone};
> +
> + my $returned_ip = undef;
> +
> + cfs_lock_file($ipamdb_file, undef, sub {
> + my $db = read_db();
> +
> + die "zone $zone don't exist in ipam db" if !$db->{zones}->{$zone};
> + my $dbzone = $db->{zones}->{$zone};
> +
> + die "subnet $cidr don't exist in ipam db" if !$dbzone->{subnets}->{$cidr};
> + my $dbsubnet = $dbzone->{subnets}->{$cidr};
> +
> + foreach my $ip_address (keys %{$dbsubnet->{ips}}) {
> + my $data = $dbsubnet->{ips}->{$ip_address};
> + next if !$data->{mac} || $data->{mac} ne $mac;
> +
> + delete $dbsubnet->{ips}->{$ip_address};
> + write_db($db);
> +
> + $returned_ip = $ip_address;
> + }
> + });
> + die "$@" if $@;
> +
> + return $returned_ip;
> +}
> +
> sub del_ip {
> my ($class, $plugin_config, $subnetid, $subnet, $ip) = @_;
next prev parent reply other threads:[~2023-10-27 11:51 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-17 13:54 [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN Stefan Hanreich
2023-10-17 13:54 ` [pve-devel] [WIP v2 pve-cluster 01/10] cluster files: add dhcp.cfg Stefan Hanreich
2023-10-17 13:54 ` [pve-devel] [WIP v2 pve-network 02/10] subnets: vnets: preparations for DHCP plugins Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 03/10] dhcp: add abstract class " Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 04/10] dhcp: subnet: add DHCP options to subnet configuration Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 05/10] dhcp: add DHCP plugin for dnsmasq Stefan Hanreich
2023-10-18 10:13 ` DERUMIER, Alexandre
2023-11-08 17:18 ` DERUMIER, Alexandre
2023-11-09 8:45 ` Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 06/10] ipam: Add helper methods for DHCP to PVE IPAM Stefan Hanreich
2023-10-27 11:51 ` Stefan Lendl [this message]
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 07/10] dhcp: regenerate config for DHCP servers on reload Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-manager 08/10] sdn: regenerate DHCP config " Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 qemu-server 09/10] sdn: dhcp: add DHCP setup to vm-network-scripts Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-container 10/10] sdn: dhcp: setup DHCP mappings in LXC hooks Stefan Hanreich
2023-10-17 14:48 ` [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN DERUMIER, Alexandre
2023-10-17 16:05 ` Stefan Hanreich
2023-10-17 21:00 ` DERUMIER, Alexandre
2023-10-17 16:04 ` Stefan Hanreich
2023-10-18 9:59 ` DERUMIER, Alexandre
2023-10-23 12:40 ` Stefan Lendl
2023-10-27 7:39 ` Thomas Lamprecht
2023-10-27 12:26 ` Stefan Lendl
2023-10-27 12:36 ` DERUMIER, Alexandre
2023-10-27 11:19 ` [pve-devel] [RFC SDN DHCP] Add and Remove DHCP mappings on vNIC add/remove Stefan Lendl
2023-10-27 11:20 ` Stefan Lendl
2023-10-27 11:20 ` [pve-devel] [RFC pve-network 1/3] dhcp add ip returns IP if already present for MAC Stefan Lendl
2023-10-27 11:20 ` [pve-devel] [RFC pve-network 2/3] always generate dnsmasq ethers file Stefan Lendl
2023-10-27 11:20 ` [pve-devel] [RFC pve-network 3/3] touch the ethers file when creating the dnsmasq config Stefan Lendl
2023-10-27 11:20 ` [pve-devel] [RFC pve-network] do not remove DHCP mapping on stop Stefan Lendl
2023-11-08 14:32 ` DERUMIER, Alexandre
2023-11-08 14:38 ` Stefan Hanreich
2023-11-08 15:41 ` DERUMIER, Alexandre
2023-10-27 11:20 ` [pve-devel] [RFC pve-network 4/5] do not remove DHCP mapping on VM stop Stefan Lendl
2023-10-27 11:20 ` [pve-devel] [RFC pve-network 5/5] DHCP mappings on vNIC add/remove Stefan Lendl
2023-10-27 11:29 ` [pve-devel] [RFC SDN DHCP] Add and Remove " Stefan Lendl
2023-10-27 11:29 ` [pve-devel] [RFC pve-network 1/6] dhcp add ip returns IP if already present for MAC Stefan Lendl
2023-10-27 11:29 ` [pve-devel] [RFC pve-network 2/6] always generate dnsmasq ethers file Stefan Lendl
2023-11-08 16:44 ` DERUMIER, Alexandre
2023-10-27 11:29 ` [pve-devel] [RFC pve-network 3/6] touch the ethers file when creating the dnsmasq config Stefan Lendl
2023-10-27 11:29 ` [pve-devel] [RFC pve-container 4/6] do not remove DHCP mapping on stop Stefan Lendl
2023-10-27 11:29 ` [pve-devel] [RFC qemu-server 5/6] do not remove DHCP mapping on VM stop Stefan Lendl
2023-10-27 11:30 ` [pve-devel] [RFC qemu-server 6/6] DHCP mappings on vNIC add/remove Stefan Lendl
2023-11-08 16:46 ` DERUMIER, Alexandre
2023-10-27 11:52 ` [pve-devel] [RFC SDN DHCP] Add and Remove " Thomas Lamprecht
2023-10-27 11:54 ` Stefan Lendl
2023-10-27 11:59 ` Thomas Lamprecht
2023-10-27 11:57 ` Thomas Lamprecht
2023-10-27 12:53 ` [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN Stefan Lendl
2023-10-27 13:37 ` DERUMIER, Alexandre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87jzr8mgfd.fsf@gmail.com \
--to=s.lendl@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
--cc=s.hanreich@proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal