[pve-devel] [WIP v2 pve-container 10/10] sdn: dhcp: setup DHCP mappings in LXC hooks
Stefan Hanreich
s.hanreich at proxmox.com
Tue Oct 17 15:55:07 CEST 2023
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 at 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
More information about the pve-devel
mailing list