public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Alexandre Derumier <aderumier@odiso.com>
Subject: Re: [pve-devel] [PATCH V3 qemu-server 2/3] vm_start/vm_resume : add_nets_bridge_fdb
Date: Sat, 12 Nov 2022 17:32:31 +0100	[thread overview]
Message-ID: <e5a7d2ff-6aae-6d2f-2857-5f3da02dc336@proxmox.com> (raw)
In-Reply-To: <20220824162644.1632804-5-aderumier@odiso.com>

Am 24/08/2022 um 18:26 schrieb Alexandre Derumier:
> 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 <aderumier@odiso.com>
> ---
>  PVE/QemuServer.pm | 25 +++++++++++++++++++++++--
>  1 file changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 0114d06..6d71006 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -5797,6 +5797,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',
> @@ -6155,6 +6156,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
> @@ -6164,8 +6166,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'));
>  	}
> @@ -6175,6 +6175,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);
>      });
>  }
> @@ -8237,4 +8240,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};

note that parse_net *always* checks for a $net->{macaddr} itself and auto_generates
one if not present:
https://git.proxmox.com/?p=qemu-server.git;a=blob;f=PVE/QemuServer.pm;h=2376bf46439e300ec5e0191f3bd9552510e91467;hb=HEAD#l1943

So this will never call next and register potentially a random mac address that then
isn't used by the VM.

I think it could be better to change this method to not get the full config but the
already parsed network entry, as then we can better ensure that the MAC address is
actually the one we'll use.

We'd then need to keep track of such auto-generated ones so that we got that available
when we actually need to add the entry, or read that out again from the QEMU command
line opts (or maybe its available via QMP?)

> +
> +	    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;





  reply	other threads:[~2022-11-12 16:32 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-24 16:26 [pve-devel] [PATCH qemu-server/container/network 0/3] implement bridge disable learning Alexandre Derumier
2022-08-24 16:26 ` [pve-devel] [PATCH V2 pve-network 1/1] bridge-disable-mac-learning : use $opts for tap_plug Alexandre Derumier
2022-11-13  9:46   ` [pve-devel] applied: " Thomas Lamprecht
2022-08-24 16:26 ` [pve-devel] [PATCH V3 pve-container 1/1] net : add support for bridge disable mac learning Alexandre Derumier
2022-08-24 16:26 ` [pve-devel] [PATCH V3 qemu-server 1/3] tap_plug: add support for bridge disable learning Alexandre Derumier
2022-11-09 14:19   ` Mira Limbeck
2022-11-11  8:36     ` DERUMIER, Alexandre
2022-11-11  9:05       ` Mira Limbeck
2022-11-12 16:24   ` Thomas Lamprecht
2022-08-24 16:26 ` [pve-devel] [PATCH V3 qemu-server 2/3] vm_start/vm_resume : add_nets_bridge_fdb Alexandre Derumier
2022-11-12 16:32   ` Thomas Lamprecht [this message]
2022-08-24 16:26 ` [pve-devel] [PATCH V3 qemu-server 3/3] migration : add del_nets_bridge_fdb Alexandre Derumier
2022-11-07 12:41   ` Mira Limbeck
2022-11-10  8:12     ` DERUMIER, Alexandre
2022-11-13 15:10 ` [pve-devel] [PATCH qemu-server/container/network 0/3] implement bridge disable learning Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e5a7d2ff-6aae-6d2f-2857-5f3da02dc336@proxmox.com \
    --to=t.lamprecht@proxmox.com \
    --cc=aderumier@odiso.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal