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) = @_;
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",
- }
};
}
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;
}