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 6C7FF9B3CC for <pve-devel@lists.proxmox.com>; Tue, 17 Oct 2023 15:55:43 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4E861343A1 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 31E432C2548; 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:07 +0200 Message-Id: <20231017135507.2220948-11-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.463 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 pve-container 10/10] sdn: dhcp: setup DHCP mappings in LXC hooks 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:43 -0000 Setup DHCP mappings if a container has interfaces on a SDN network managed via DHCP. Additionally remove the mapping in the stop_cleanup function so the mapping gets removed when forcefully stopping the container. Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com> --- src/PVE/LXC.pm | 10 ++++++++++ src/lxc-pve-poststop-hook | 1 + src/lxc-pve-prestart-hook | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index c9b5ba7..bd8eb63 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -916,6 +916,14 @@ sub vm_stop_cleanup { eval { my $vollist = PVE::LXC::Config->get_vm_volumes($conf); PVE::Storage::deactivate_volumes($storage_cfg, $vollist); + + for my $k (keys %$conf) { + next if $k !~ /^net(\d+)/; + my $net = PVE::LXC::Config->parse_lxc_network($conf->{$k}); + next if $net->{type} ne 'veth'; + + PVE::Network::SDN::Dhcp::remove_mapping($net->{bridge}, $net->{hwaddr}); + } }; warn $@ if $@; # avoid errors - just warn } @@ -1012,6 +1020,8 @@ sub hotplug_net { my $eth = $newnet->{name}; if ($have_sdn) { + PVE::Network::SDN::Dhcp::add_mapping($vmid, $newnet->{bridge}, $newnet->{macaddr}); + PVE::Network::SDN::Zones::veth_create($veth, $vethpeer, $newnet->{bridge}, $newnet->{hwaddr}); } else { PVE::Network::veth_create($veth, $vethpeer, $newnet->{bridge}, $newnet->{hwaddr}); diff --git a/src/lxc-pve-poststop-hook b/src/lxc-pve-poststop-hook index 2fe97ec..e7d46c7 100755 --- a/src/lxc-pve-poststop-hook +++ b/src/lxc-pve-poststop-hook @@ -12,6 +12,7 @@ use PVE::LXC::Config; use PVE::LXC::Tools; use PVE::LXC; use PVE::Network; +use PVE::Network::SDN::Dhcp; use PVE::RESTEnvironment; use PVE::Storage; use PVE::Tools; diff --git a/src/lxc-pve-prestart-hook b/src/lxc-pve-prestart-hook index 936d0bf..5b2484e 100755 --- a/src/lxc-pve-prestart-hook +++ b/src/lxc-pve-prestart-hook @@ -15,6 +15,7 @@ use PVE::LXC::Config; use PVE::LXC::Setup; use PVE::LXC::Tools; use PVE::LXC; +use PVE::Network::SDN::Dhcp; use PVE::RESTEnvironment; use PVE::SafeSyslog; use PVE::Storage; @@ -140,6 +141,14 @@ PVE::LXC::Tools::lxc_hook('pre-start', 'lxc', sub { } PVE::Tools::file_set_contents($devlist_file, $devlist); } + + for my $k (keys %$conf) { + next if $k !~ /^net(\d+)/; + my $net = PVE::LXC::Config->parse_lxc_network($conf->{$k}); + next if $net->{type} ne 'veth'; + + PVE::Network::SDN::Dhcp::add_mapping($vmid, $net->{bridge}, $net->{hwaddr}); + } }); # Leftover cgroups prevent lxc from starting without any useful information -- 2.39.2