]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/Network/SDN/VlanPlugin.pm
api2 : sdn : add role and type to index
[pve-network.git] / PVE / Network / SDN / VlanPlugin.pm
index 88a1274f0d48cabb967f24616bd714f3129879a4..5a38f596e9df5ac9f7483e5808a5f21014fb9906 100644 (file)
@@ -10,6 +10,12 @@ sub type {
     return 'vlan';
 }
 
+sub plugindata {
+    return {
+       role => 'transport',
+    };
+}
+
 PVE::JSONSchema::register_format('pve-sdn-vlanrange', \&pve_verify_sdn_vlanrange);
 sub pve_verify_sdn_vlanrange {
    my ($vlanstr) = @_;
@@ -30,17 +36,6 @@ sub properties {
            type => 'string', format => 'pve-sdn-vlanrange',
            description => "Allowed vlan range",
        },
-       'vlan-aware' => {
-            type => 'boolean',
-           description => "enable 802.1q stacked vlan",
-       },
-       'vlan-protocol' => {
-           type => 'string',
-            enum => ['802.1q', '802.1ad'],
-           default => '802.1q',
-           optional => 1,
-           description => "vlan protocol",
-       }
     };
 }
 
@@ -49,43 +44,37 @@ sub options {
     return {
        'uplink-id' => { optional => 0 },
         'vlan-allowed' => { optional => 1 },
-       'vlan-protocol' => { optional => 1 },
-       'vlan-aware' => { optional => 1 },
-
     };
 }
 
 # Plugin implementation
 sub generate_sdn_config {
-    my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $uplinks) = @_;
+    my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $uplinks, $config) = @_;
 
     my $tag = $vnet->{tag};
     my $mtu = $vnet->{mtu};
     my $alias = $vnet->{alias};
-    my $vlanaware = $plugin_config->{'vlan-aware'};
-    my $vlanprotocol = $plugin_config->{'vlan-protocol'};
     my $uplink = $plugin_config->{'uplink-id'};
-    my $vlanallowed = $plugin_config->{'vlan-allowed'};
 
     die "missing vlan tag" if !$tag;
 
     my $iface = $uplinks->{$uplink}->{name};
     $iface = "uplink${uplink}" if !$iface;
     $iface .= ".$tag";
-    my $config = "\n";
-    $config .= "auto $iface\n";
-    $config .= "iface $iface inet manual\n";
-    $config .= "        vlan-protocol $vlanprotocol\n" if $vlanprotocol;
-    $config .= "        mtu $mtu\n" if $mtu;
-    $config .= "\n";
-    $config .= "auto $vnetid\n";
-    $config .= "iface $vnetid inet manual\n";
-    $config .= "        bridge_ports $iface\n";
-    $config .= "        bridge_stp off\n";
-    $config .= "        bridge_fd 0\n";
-    $config .= "        bridge-vlan-aware yes \n" if $vlanaware;
-    $config .= "        mtu $mtu\n" if $mtu;
-    $config .= "        alias $alias\n" if $alias;
+
+    #tagged interface
+    my @iface_config = ();
+    push @iface_config, "mtu $mtu" if $mtu;
+    push(@{$config->{$iface}}, @iface_config) if !$config->{$iface};
+
+    #vnet bridge
+    @iface_config = ();
+    push @iface_config, "bridge_ports $iface";
+    push @iface_config, "bridge_stp off";
+    push @iface_config, "bridge_fd 0";
+    push @iface_config, "mtu $mtu" if $mtu;
+    push @iface_config, "alias $alias" if $alias;
+    push(@{$config->{$vnetid}}, @iface_config) if !$config->{$vnetid};
 
     return $config;
 }