From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 9745092E00 for ; Wed, 15 Feb 2023 15:03:36 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E87071E3B3 for ; Wed, 15 Feb 2023 15:03:05 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 15 Feb 2023 15:03:03 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D3C464736B for ; Wed, 15 Feb 2023 15:03:01 +0100 (CET) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Wed, 15 Feb 2023 15:02:43 +0100 Message-Id: <20230215140245.496507-3-c.heiss@proxmox.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230215140245.496507-1-c.heiss@proxmox.com> References: <20230215140245.496507-1-c.heiss@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.123 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v2 container 2/4] lxc: Avoid open-coding normal vs SDN-specific tap_plug() X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Feb 2023 14:03:36 -0000 This pattern is used in multiple places, thus extract it into a subroutine on its own. No functional changes. Signed-off-by: Christoph Heiss --- Might not be the best place for net_tap_plug(), putting this logic inside PVE::Network would probably make more sense. But that would entail a (bigger) refactoring, since it then also must be done for all other tap_*() and veth_*() subroutines (and maybe some other things?) for consistency.. In any case, that definitely would be too much for this series. I can do that, but I'd do it as a follow-up series. Changes v1 -> v2: * New patch src/PVE/LXC.pm | 28 ++++++++++++++++------------ src/lxcnetaddbr | 15 ++------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index 345e343..0de5ba3 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -917,6 +917,18 @@ sub vm_stop_cleanup { warn $@ if $@; # avoid errors - just warn } +sub net_tap_plug { + if ($have_sdn) { + my ($iface, $bridge, $tag, $firewall, $trunks, $rate, $opts) = @_; + + PVE::Network::SDN::Zones::tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate); + PVE::Network::SDN::Zones::add_bridge_fdb($iface, $opts->{mac}, $bridge, $firewall) + if defined($opts->{mac}); + } else { + PVE::Network::tap_plug(@_); + } +} + sub update_net { my ($vmid, $conf, $opt, $newnet, $netid, $rootdir) = @_; @@ -956,14 +968,7 @@ sub update_net { } my ($bridge, $mac, $firewall, $rate) = $newnet->@{'bridge', 'hwaddr', 'firewall', 'rate'}; - if ($have_sdn) { - PVE::Network::SDN::Zones::tap_plug( - $veth, $bridge, $newnet->{tag}, $firewall, $newnet->{trunks}, $rate); - PVE::Network::SDN::Zones::add_bridge_fdb($veth, $mac, $bridge, $firewall); - } else { - PVE::Network::tap_plug( - $veth, $bridge, $newnet->{tag}, $firewall, $newnet->{trunks}, $rate, { mac => $mac }); - } + PVE::LXC::net_tap_plug($veth, $bridge, $newnet->{tag}, $firewall, $newnet->{trunks}, $rate, { mac => $mac }); # This includes the rate: foreach (qw(bridge tag firewall rate)) { @@ -994,13 +999,12 @@ sub hotplug_net { if ($have_sdn) { PVE::Network::SDN::Zones::veth_create($veth, $vethpeer, $newnet->{bridge}, $newnet->{hwaddr}); - PVE::Network::SDN::Zones::tap_plug($veth, $newnet->{bridge}, $newnet->{tag}, $newnet->{firewall}, $newnet->{trunks}, $newnet->{rate}); - PVE::Network::SDN::Zones::add_bridge_fdb($veth, $newnet->{hwaddr}, $newnet->{bridge}, $newnet->{firewall}); } else { PVE::Network::veth_create($veth, $vethpeer, $newnet->{bridge}, $newnet->{hwaddr}); - PVE::Network::tap_plug($veth, $newnet->{bridge}, $newnet->{tag}, $newnet->{firewall}, $newnet->{trunks}, $newnet->{rate}); - PVE::Network::add_bridge_fdb($veth, $newnet->{hwaddr}, $newnet->{firewall}); # early returns if brport has learning on } + PVE::LXC::net_tap_plug( + $veth, $newnet->{bridge}, $newnet->{tag}, $newnet->{firewall}, $newnet->{trunks}, + $newnet->{rate}, { mac => $newnet->{hwaddr} }); # attach peer in container my $cmd = ['lxc-device', '-n', $vmid, 'add', $vethpeer, "$eth" ]; diff --git a/src/lxcnetaddbr b/src/lxcnetaddbr index 83052e1..ebd6baa 100755 --- a/src/lxcnetaddbr +++ b/src/lxcnetaddbr @@ -7,15 +7,8 @@ exit 0 if $ENV{LXC_NAME} && $ENV{LXC_NAME} !~ /^\d+$/; use PVE::LXC; use PVE::Tools qw(run_command); -use PVE::Network; use PVE::ProcFSTools; -my $have_sdn; -eval { - require PVE::Network::SDN::Zones; - $have_sdn = 1; -}; - die "got unexpected argument count\n" if scalar(@ARGV) != 5; my ($vmid, $arg2, $arg3, $type, $iface) = @ARGV; @@ -48,6 +41,7 @@ my $firewall = $net->{firewall}; my $bridge = $net->{bridge}; my $trunks = $net->{trunks}; my $rate = $net->{rate}; +my $hwaddr = $net->{hwaddr}; die "missing bridge configuration" if !$bridge; @@ -61,12 +55,7 @@ if (-d "/sys/class/net/$iface") { PVE::Tools::run_command("/sbin/ip link set dev $iface up mtu $bridgemtu"); PVE::Tools::run_command("/sbin/ip addr add 0.0.0.0/0 dev $iface"); - if ($have_sdn) { - PVE::Network::SDN::Zones::tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate); - PVE::Network::SDN::Zones::add_bridge_fdb($iface, $net->{hwaddr}, $bridge, $firewall); - } else { - PVE::Network::tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate, { mac => $net->{hwaddr}}); - } + PVE::LXC::net_tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate, { mac => $hwaddr }); } exit 0; -- 2.39.1