]> git.proxmox.com Git - qemu-server.git/commitdiff
migration : add del_nets_bridge_fdb
authorAlexandre Derumier <aderumier@odiso.com>
Wed, 24 Aug 2022 16:26:44 +0000 (18:26 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sun, 13 Nov 2022 13:56:57 +0000 (14:56 +0100)
at the end of a live migration, we need to remove old mac entries
on source host (vm is not yet stopped), before resume vm on target host

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
 [T: resolve conflicts and rework on apply ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/QemuMigrate.pm
PVE/QemuServer.pm
test/MigrationTest/QemuMigrateMock.pm

index b7e3d3090075f5d905b0fe94caaba45e18bda6b4..9759aa29a39588c743272ad875df02ff1e6f2d65 100644 (file)
@@ -1181,6 +1181,9 @@ sub phase3_cleanup {
            }
        }
 
+       # deletes local FDB entries if learning is disabled, they'll be re-added on target on resume
+       PVE::QemuServer::del_nets_bridge_fdb($conf, $vmid);
+
        if (!$self->{vm_was_paused}) {
            # config moved and nbd server stopped - now we can resume vm on target
            if ($tunnel && $tunnel->{version} && $tunnel->{version} >= 1) {
index 548c9b7ea26546a9c9e14a72f78747217a27d8f2..303a5dd1b37e5dcb69eddcfdf1caa6f704707a11 100644 (file)
@@ -8338,4 +8338,22 @@ sub add_nets_bridge_fdb {
     }
 }
 
+sub del_nets_bridge_fdb {
+    my ($conf, $vmid) = @_;
+
+    for my $opt (keys %$conf) {
+       next if $opt !~ m/^net(\d+)$/;
+       my $iface = "tap${vmid}i$1";
+
+       my $net = parse_net($conf->{$opt}) or next;
+       my $mac = $net->{macaddr} or next;
+
+       if ($have_sdn) {
+           PVE::Network::SDN::Zones::del_bridge_fdb($iface, $mac, $net->{bridge}, $net->{firewall});
+       } else {
+           PVE::Network::del_bridge_fdb($iface, $mac, $net->{firewall});
+       }
+    }
+}
+
 1;
index f2c02819c5e604ff1cf8d0d81e7ec4e97d5ecd76..2c96eff6381180bb2e7de6f1fe4930d8522736e6 100644 (file)
@@ -158,6 +158,7 @@ $MigrationTest::Shared::qemu_server_module->mock(
        $vm_stop_executed = 1;
        delete $expected_calls->{'vm_stop'};
     },
+    del_nets_bridge_fdb => sub { return; },
 );
 
 my $qemu_server_cpuconfig_module = Test::MockModule->new("PVE::QemuServer::CPUConfig");