]> git.proxmox.com Git - pve-network.git/commitdiff
zones: add bridge helpers
authorAlexandre Derumier <aderumier@odiso.com>
Wed, 9 Dec 2020 15:11:17 +0000 (16:11 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 18 Dec 2020 17:02:47 +0000 (18:02 +0100)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/Network/SDN/Zones/Plugin.pm
PVE/Network/SDN/Zones/QinQPlugin.pm
PVE/Network/SDN/Zones/SimplePlugin.pm
PVE/Network/SDN/Zones/VlanPlugin.pm

index 9db2791bc791f28a17bf70808c98859992fd19f5..9eabe732b784ad2e0caba5f7fb5835c443abbeb0 100644 (file)
@@ -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;
index 2bd60dbaa804c334afab149fe228d507c555ca41..9064adb7c9b894e7fdec39c952e020e28bd73516 100644 (file)
@@ -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;
index 94452a0fe9e98fc235ef968d68158e265ad549ec..9f74f3e735ac45c0c692b2dc8cb8de52cb71f25b 100644 (file)
@@ -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};
index ca6bd8f2472d6714281e052bd6a506f20ee570fe..cda2a364f2a1631d9a0d2a4a0c871c4a56a3bbc0 100644 (file)
@@ -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;