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 AB1356AD53 for ; Wed, 9 Dec 2020 16:11:31 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9F46312F5A for ; Wed, 9 Dec 2020 16:11:31 +0100 (CET) Received: from kvmformation1.odiso.net (globalOdiso.M6Lille.odiso.net [89.248.211.242]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8C7C212F36 for ; Wed, 9 Dec 2020 16:11:28 +0100 (CET) Received: by kvmformation1.odiso.net (Postfix, from userid 0) id 659FF9E10A; Wed, 9 Dec 2020 16:11:20 +0100 (CET) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Wed, 9 Dec 2020 16:11:17 +0100 Message-Id: <20201209151119.3620405-2-aderumier@odiso.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201209151119.3620405-1-aderumier@odiso.com> References: <20201209151119.3620405-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 AWL -0.202 Adjusted score from AWL reputation of From: address HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods KHOP_HELO_FCRDNS 0.4 Relay HELO differs from its IP's reverse DNS NO_DNS_FOR_FROM 0.379 Envelope sender has no MX or A DNS records SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [qinqplugin.pm, simpleplugin.pm, vlanplugin.pm, plugin.pm] Subject: [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers 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, 09 Dec 2020 15:11:31 -0000 Signed-off-by: Alexandre Derumier --- PVE/Network/SDN/Zones/Plugin.pm | 30 +++++++++++++++++++++++++++ PVE/Network/SDN/Zones/QinQPlugin.pm | 17 +++++++-------- PVE/Network/SDN/Zones/SimplePlugin.pm | 1 + PVE/Network/SDN/Zones/VlanPlugin.pm | 16 ++++++-------- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm index 9db2791..9eabe73 100644 --- a/PVE/Network/SDN/Zones/Plugin.pm +++ b/PVE/Network/SDN/Zones/Plugin.pm @@ -302,4 +302,34 @@ sub find_local_ip_interface_peers { } } +sub find_bridge { + my ($bridge) = @_; + + die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge"; +} + +sub is_vlanaware { + my ($bridge) = @_; + + return PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering"); +} + +sub is_ovs { + my ($bridge) = @_; + + my $is_ovs = !-d "/sys/class/net/$bridge/brif"; + return $is_ovs; +} + +sub get_bridge_ifaces { + my ($bridge) = @_; + + my @bridge_ifaces = (); + my $dir = "/sys/class/net/$bridge/brif"; + PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub { + push @bridge_ifaces, $_[0]; + }); + + return @bridge_ifaces; +} 1; diff --git a/PVE/Network/SDN/Zones/QinQPlugin.pm b/PVE/Network/SDN/Zones/QinQPlugin.pm index 2bd60db..9064adb 100644 --- a/PVE/Network/SDN/Zones/QinQPlugin.pm +++ b/PVE/Network/SDN/Zones/QinQPlugin.pm @@ -57,10 +57,11 @@ sub generate_sdn_config { my $vlanprotocol = $plugin_config->{'vlan-protocol'}; my $ctag = $vnet->{tag}; my $alias = $vnet->{alias}; - die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge"; - my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering"); - my $is_ovs = !-d "/sys/class/net/$bridge/brif"; + PVE::Network::SDN::Zones::Plugin::find_bridge($bridge); + + my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge); + my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge); my @iface_config = (); my $vnet_bridge_ports = ""; @@ -126,11 +127,7 @@ sub generate_sdn_config { #eth--->eth.x(svlan)--->eth.x.y(cvlan)---->vnet - my @bridge_ifaces = (); - my $dir = "/sys/class/net/$bridge/brif"; - PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub { - push @bridge_ifaces, $_[0]; - }); + my @bridge_ifaces = PVE::Network::SDN::Zones::Plugin::get_bridge_ifaces($bridge); foreach my $bridge_iface (@bridge_ifaces) { @@ -181,8 +178,8 @@ sub status { return $err_msg; } - my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering"); - my $is_ovs = !-d "/sys/class/net/$bridge/brif"; + my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge); + my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge); my $tag = $vnet->{tag}; my $vnet_uplink = "ln_".$vnetid; diff --git a/PVE/Network/SDN/Zones/SimplePlugin.pm b/PVE/Network/SDN/Zones/SimplePlugin.pm index 94452a0..9f74f3e 100644 --- a/PVE/Network/SDN/Zones/SimplePlugin.pm +++ b/PVE/Network/SDN/Zones/SimplePlugin.pm @@ -58,6 +58,7 @@ sub generate_sdn_config { my $address = {}; my $subnets = PVE::Network::SDN::Vnets::get_subnets($vnetid, 1); + foreach my $subnetid (sort keys %{$subnets}) { my $subnet = $subnets->{$subnetid}; my $cidr = $subnet->{cidr}; diff --git a/PVE/Network/SDN/Zones/VlanPlugin.pm b/PVE/Network/SDN/Zones/VlanPlugin.pm index ca6bd8f..cda2a36 100644 --- a/PVE/Network/SDN/Zones/VlanPlugin.pm +++ b/PVE/Network/SDN/Zones/VlanPlugin.pm @@ -46,10 +46,10 @@ sub generate_sdn_config { my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $controller, $controller_cfg, $subnet_cfg, $interfaces_config, $config) = @_; my $bridge = $plugin_config->{bridge}; - die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge"; + PVE::Network::SDN::Zones::Plugin::find_bridge($bridge); - my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering"); - my $is_ovs = !-d "/sys/class/net/$bridge/brif"; + my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge); + my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge); my $tag = $vnet->{tag}; my $alias = $vnet->{alias}; @@ -91,11 +91,7 @@ sub generate_sdn_config { my $bridgevlan = $bridge."v".$tag; - my @bridge_ifaces = (); - my $dir = "/sys/class/net/$bridge/brif"; - PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub { - push @bridge_ifaces, $_[0]; - }); + my @bridge_ifaces = PVE::Network::SDN::Zones::Plugin::get_bridge_ifaces($bridge); my $bridge_ports = ""; foreach my $bridge_iface (@bridge_ifaces) { @@ -146,8 +142,8 @@ sub status { return $err_msg; } - my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering"); - my $is_ovs = !-d "/sys/class/net/$bridge/brif"; + my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge); + my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge); my $tag = $vnet->{tag}; my $vnet_uplink = "ln_".$vnetid; -- 2.20.1