]> git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Zones/VlanPlugin.pm
evpn: remove uplink-id
[pve-network.git] / PVE / Network / SDN / Zones / VlanPlugin.pm
1 package PVE::Network::SDN::Zones::VlanPlugin;
2
3 use strict;
4 use warnings;
5 use PVE::Network::SDN::Zones::Plugin;
6
7 use base('PVE::Network::SDN::Zones::Plugin');
8
9 sub type {
10 return 'vlan';
11 }
12
13 PVE::JSONSchema::register_format('pve-sdn-vlanrange', \&pve_verify_sdn_vlanrange);
14 sub pve_verify_sdn_vlanrange {
15 my ($vlanstr) = @_;
16
17 PVE::Network::SDN::Zones::Plugin::parse_tag_number_or_range($vlanstr, '4096');
18
19 return $vlanstr;
20 }
21
22 sub properties {
23 return {
24 'uplink-id' => {
25 type => 'integer',
26 minimum => 1, maximum => 4096,
27 description => 'Uplink interface',
28 },
29 };
30 }
31
32 sub options {
33
34 return {
35 nodes => { optional => 1},
36 'uplink-id' => { optional => 0 },
37 };
38 }
39
40 # Plugin implementation
41 sub generate_sdn_config {
42 my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $uplinks, $controller, $config) = @_;
43
44 my $tag = $vnet->{tag};
45 my $mtu = $vnet->{mtu};
46 my $alias = $vnet->{alias};
47 my $uplink = $plugin_config->{'uplink-id'};
48
49 die "missing vlan tag" if !$tag;
50
51 my $iface = $uplinks->{$uplink}->{name};
52 $iface = "uplink${uplink}" if !$iface;
53 $iface .= ".$tag";
54
55 #tagged interface
56 my @iface_config = ();
57 push @iface_config, "mtu $mtu" if $mtu;
58 push(@{$config->{$iface}}, @iface_config) if !$config->{$iface};
59
60 #vnet bridge
61 @iface_config = ();
62 push @iface_config, "bridge_ports $iface";
63 push @iface_config, "bridge_stp off";
64 push @iface_config, "bridge_fd 0";
65 push @iface_config, "mtu $mtu" if $mtu;
66 push @iface_config, "alias $alias" if $alias;
67 push(@{$config->{$vnetid}}, @iface_config) if !$config->{$vnetid};
68
69 return $config;
70 }
71
72 1;
73
74