on vm start (no live migration), we can simply add mac address in fdb. In case of a live migration, we add the mac address just before the resume.
Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/QemuServer.pm | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 1023ede..2f51938 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -5453,6 +5453,7 @@ sub vm_start_nolock { my $nicconf = parse_net($conf->{$opt}); qemu_set_link_status($vmid, $opt, 0) if $nicconf->{link_down}; } + add_nets_bridge_fdb($conf, $vmid); } mon_cmd($vmid, 'qom-set', @@ -5802,6 +5803,7 @@ sub vm_resume { my $res = mon_cmd($vmid, 'query-status'); my $resume_cmd = 'cont'; my $reset = 0; + my $conf = PVE::QemuConfig->load_config($vmid); if ($res->{status}) { return if $res->{status} eq 'running'; # job done, go home @@ -5811,8 +5813,6 @@ sub vm_resume { if (!$nocheck) { - my $conf = PVE::QemuConfig->load_config($vmid); - PVE::QemuConfig->check_lock($conf) if !($skiplock || PVE::QemuConfig->has_lock($conf, 'backup')); } @@ -5822,6 +5822,9 @@ sub vm_resume { # request before the backup finishes for example mon_cmd($vmid, "system_reset"); } + + add_nets_bridge_fdb($conf, $vmid) if $resume_cmd eq 'cont'; + mon_cmd($vmid, $resume_cmd); }); } @@ -7796,4 +7799,22 @@ sub check_volume_storage_type { return 1; } +sub add_nets_bridge_fdb { + my ($conf, $vmid) = @_; + + foreach my $opt (keys %$conf) { + if ($opt =~ m/^net(\d+)$/) { + my $net = parse_net($conf->{$opt}); + next if !$net; + next if !$net->{macaddr}; + + my $iface = "tap${vmid}i$1"; + if ($have_sdn) { + PVE::Network::SDN::Zones::add_bridge_fdb($iface, $net->{macaddr}, $net->{bridge}, $net->{firewall}); + } else { + PVE::Network::add_bridge_fdb($iface, $net->{macaddr}, $net->{firewall}); + } + } + } +} 1; -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel