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.hanre...@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 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel