1 package PVE
::Network
::SDN
::Zones
::VlanPlugin
;
5 use PVE
::Network
::SDN
::Zones
::Plugin
;
7 use base
('PVE::Network::SDN::Zones::Plugin');
13 PVE
::JSONSchema
::register_format
('pve-sdn-vlanrange', \
&pve_verify_sdn_vlanrange
);
14 sub pve_verify_sdn_vlanrange
{
17 PVE
::Network
::SDN
::Zones
::Plugin
::parse_tag_number_or_range
($vlanstr, '4096');
26 minimum
=> 1, maximum
=> 4096,
27 description
=> 'Uplink interface',
35 'uplink-id' => { optional
=> 0 },
39 # Plugin implementation
40 sub generate_sdn_config
{
41 my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $uplinks, $config) = @_;
43 my $tag = $vnet->{tag
};
44 my $mtu = $vnet->{mtu
};
45 my $alias = $vnet->{alias
};
46 my $uplink = $plugin_config->{'uplink-id'};
48 die "missing vlan tag" if !$tag;
50 my $iface = $uplinks->{$uplink}->{name
};
51 $iface = "uplink${uplink}" if !$iface;
55 my @iface_config = ();
56 push @iface_config, "mtu $mtu" if $mtu;
57 push(@{$config->{$iface}}, @iface_config) if !$config->{$iface};
61 push @iface_config, "bridge_ports $iface";
62 push @iface_config, "bridge_stp off";
63 push @iface_config, "bridge_fd 0";
64 push @iface_config, "mtu $mtu" if $mtu;
65 push @iface_config, "alias $alias" if $alias;
66 push(@{$config->{$vnetid}}, @iface_config) if !$config->{$vnetid};
72 my ($class, $transportid, $sdn_cfg) = @_;
74 # verify that no vnet are associated to this transport
75 foreach my $id (keys %{$sdn_cfg->{ids
}}) {
76 my $sdn = $sdn_cfg->{ids
}->{$id};
77 die "transport $transportid is used by vnet $id"
78 if ($sdn->{type
} eq 'vnet' && defined($sdn->{zone
}) && $sdn->{zone
} eq $transportid);
83 my ($class, $transportid, $sdn_cfg) = @_;