From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <shanreich@lana.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id CE2489B399 for <pve-devel@lists.proxmox.com>; Tue, 17 Oct 2023 15:55:13 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 98B12343A2 for <pve-devel@lists.proxmox.com>; Tue, 17 Oct 2023 15:55:13 +0200 (CEST) Received: from lana.proxmox.com (unknown [94.136.29.99]) by firstgate.proxmox.com (Proxmox) with ESMTP for <pve-devel@lists.proxmox.com>; Tue, 17 Oct 2023 15:55:12 +0200 (CEST) Received: by lana.proxmox.com (Postfix, from userid 10043) id 273AB2C2545; Tue, 17 Oct 2023 15:55:10 +0200 (CEST) From: Stefan Hanreich <s.hanreich@proxmox.com> To: pve-devel@lists.proxmox.com Date: Tue, 17 Oct 2023 15:55:06 +0200 Message-Id: <20231017135507.2220948-10-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231017135507.2220948-1-s.hanreich@proxmox.com> References: <20231017135507.2220948-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.460 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 KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [WIP v2 qemu-server 09/10] sdn: dhcp: add DHCP setup to vm-network-scripts X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> X-List-Received-Date: Tue, 17 Oct 2023 13:55:13 -0000 When setting up the bridge for the VMs, also set up the DHCP mappings in the respective DHCP plugins if the VM has interfaces on SDN networks that utilize DHCP. Also remove the mapping in the VM cleanup function, so the mappings also get removed when stopping the VM forcefully. Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com> --- PVE/QemuServer.pm | 14 ++++++++++++++ vm-network-scripts/pve-bridge | 3 +++ vm-network-scripts/pve-bridgedown | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 2cd8948..6c1e463 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -6098,6 +6098,18 @@ sub cleanup_pci_devices { PVE::QemuServer::PCI::remove_pci_reservation($vmid); } +sub cleanup_sdn_dhcp { + my ($vmid, $conf) = @_; + + for my $k (keys %$conf) { + next if $k !~ /^net(\d+)/; + my $netconf = $conf->{$k}; + my $net = PVE::QemuServer::parse_net($netconf); + + PVE::Network::SDN::Dhcp::remove_mapping($net->{bridge}, $net->{macaddr}); + } +} + sub vm_stop_cleanup { my ($storecfg, $vmid, $conf, $keepActive, $apply_pending_changes) = @_; @@ -6131,6 +6143,8 @@ sub vm_stop_cleanup { cleanup_pci_devices($vmid, $conf); + cleanup_sdn_dhcp($vmid, $conf); + vmconfig_apply_pending($vmid, $conf, $storecfg) if $apply_pending_changes; }; warn $@ if $@; # avoid errors - just warn diff --git a/vm-network-scripts/pve-bridge b/vm-network-scripts/pve-bridge index d37ce33..5c8acdf 100755 --- a/vm-network-scripts/pve-bridge +++ b/vm-network-scripts/pve-bridge @@ -10,6 +10,7 @@ use PVE::Network; my $have_sdn; eval { require PVE::Network::SDN::Zones; + require PVE::Network::SDN::Dhcp; $have_sdn = 1; }; @@ -44,6 +45,8 @@ my $net = PVE::QemuServer::parse_net($netconf); die "unable to parse network config '$netid'\n" if !$net; if ($have_sdn) { + PVE::Network::SDN::Dhcp::add_mapping($vmid, $net->{bridge}, $net->{macaddr}); + PVE::Network::SDN::Zones::tap_create($iface, $net->{bridge}); PVE::Network::SDN::Zones::tap_plug($iface, $net->{bridge}, $net->{tag}, $net->{firewall}, $net->{trunks}, $net->{rate}); } else { diff --git a/vm-network-scripts/pve-bridgedown b/vm-network-scripts/pve-bridgedown index d18d88f..a220660 100755 --- a/vm-network-scripts/pve-bridgedown +++ b/vm-network-scripts/pve-bridgedown @@ -4,6 +4,13 @@ use strict; use warnings; use PVE::Network; +my $have_sdn; +eval { + require PVE::Network::SDN::Zones; + require PVE::Network::SDN::Dhcp; + $have_sdn = 1; +}; + my $iface = shift; die "no interface specified\n" if !$iface; @@ -11,6 +18,18 @@ die "no interface specified\n" if !$iface; die "got strange interface name '$iface'\n" if $iface !~ m/^tap(\d+)i(\d+)$/; +my $vmid = $1; +my $netid = "net$2"; + +my $conf = PVE::QemuConfig->load_config($vmid); + +my $netconf = $conf->{$netid}; +my $net = PVE::QemuServer::parse_net($netconf); + +if ($have_sdn) { + PVE::Network::SDN::Dhcp::remove_mapping($net->{bridge}, $net->{macaddr}); +} + PVE::Network::tap_unplug($iface); exit 0; -- 2.39.2