From: Alexandre Derumier <aderum...@odiso.com>

Co-Authored-by: Stefan Hanreich <s.hanre...@proxmox.com>
Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 src/PVE/LXC.pm        | 17 +++++++++++++++++
 src/PVE/LXC/Config.pm | 12 ++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index 8f53b53..b6df6d6 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -961,6 +961,12 @@ sub update_net {
            safe_string_ne($oldnet->{name}, $newnet->{name})) {
 
            PVE::Network::veth_delete($veth);
+
+           if ($have_sdn) {
+               eval { 
PVE::Network::SDN::Vnets::del_ips_from_mac($oldnet->{bridge}, 
$oldnet->{hwaddr}, $conf->{hostname}) };
+               warn $@ if $@;
+           }
+
            delete $conf->{$opt};
            PVE::LXC::Config->write_config($vmid, $conf);
 
@@ -974,14 +980,23 @@ sub update_net {
            ) {
 
                if ($oldnet->{bridge}) {
+
                    PVE::Network::tap_unplug($veth);
                    foreach (qw(bridge tag firewall)) {
                        delete $oldnet->{$_};
                    }
                    $conf->{$opt} = 
PVE::LXC::Config->print_lxc_network($oldnet);
                    PVE::LXC::Config->write_config($vmid, $conf);
+
+                   if ($have_sdn) {
+                       eval { 
PVE::Network::SDN::Vnets::del_ips_from_mac($oldnet->{bridge}, 
$oldnet->{hwaddr}, $conf->{hostname}) };
+                       warn $@ if $@;
+                   }
                }
 
+               if ($have_sdn) {
+                   
PVE::Network::SDN::Vnets::add_next_free_cidr($newnet->{bridge}, 
$conf->{hostname}, $newnet->{hwaddr}, $vmid, undef, 1);
+               }
                PVE::LXC::net_tap_plug($veth, $newnet);
 
                # This includes the rate:
@@ -1012,6 +1027,8 @@ sub hotplug_net {
     my $eth = $newnet->{name};
 
     if ($have_sdn) {
+       PVE::Network::SDN::Vnets::add_next_free_cidr($newnet->{bridge}, 
$conf->{hostname}, $newnet->{hwaddr}, $vmid, undef, 1);
+       PVE::Network::SDN::Vnets::add_dhcp_mapping($newnet->{bridge}, 
$newnet->{hwaddr});
        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/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 56e1f10..c884313 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -22,6 +22,12 @@ use constant {
     FITHAW   => 0xc0045878,
 };
 
+my $have_sdn;
+eval {
+    require PVE::Network::SDN::Vnets;
+    $have_sdn = 1;
+};
+
 my $nodename = PVE::INotify::nodename();
 my $lock_handles =  {};
 my $lockdir = "/run/lock/lxc";
@@ -1383,6 +1389,12 @@ sub vmconfig_hotplug_pending {
            } elsif ($opt =~ m/^net(\d)$/) {
                my $netid = $1;
                PVE::Network::veth_delete("veth${vmid}i$netid");
+               if ($have_sdn) {
+                   my $net = 
PVE::LXC::Config->parse_lxc_network($conf->{$opt});
+                   print "delete ips from $opt\n";
+                   eval { 
PVE::Network::SDN::Vnets::del_ips_from_mac($net->{bridge}, $net->{hwaddr}, 
$conf->{hostname}) };
+                   warn $@ if $@;
+               }
            } else {
                die "skip\n"; # skip non-hotpluggable opts
            }
-- 
2.39.2


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to