]>
Commit | Line | Data |
---|---|---|
f5eabba0 | 1 | package PVE::Network::SDN::Zones::QinQPlugin; |
20e19696 AD |
2 | |
3 | use strict; | |
4 | use warnings; | |
f5eabba0 | 5 | use PVE::Network::SDN::Zones::VlanPlugin; |
20e19696 | 6 | |
f5eabba0 | 7 | use base('PVE::Network::SDN::Zones::VlanPlugin'); |
20e19696 AD |
8 | |
9 | sub type { | |
10 | return 'qinq'; | |
11 | } | |
12 | ||
20e19696 AD |
13 | sub properties { |
14 | return { | |
f5eabba0 AD |
15 | tag => { |
16 | type => 'integer', | |
17 | description => "vlan tag", | |
18 | }, | |
20e19696 AD |
19 | }; |
20 | } | |
21 | ||
22 | sub options { | |
23 | ||
24 | return { | |
c2b9c173 | 25 | nodes => { optional => 1}, |
20e19696 | 26 | 'tag' => { optional => 0 }, |
938ebef7 | 27 | 'bridge' => { optional => 0 }, |
20e19696 AD |
28 | }; |
29 | } | |
30 | ||
31 | # Plugin implementation | |
32 | sub generate_sdn_config { | |
ba7ac021 | 33 | my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $controller, $interfaces_config, $config) = @_; |
20e19696 | 34 | |
938ebef7 AD |
35 | my $tag = $plugin_config->{tag}; |
36 | my $mtu = $plugin_config->{mtu}; | |
37 | my $bridge = $plugin_config->{'bridge'}; | |
20e19696 AD |
38 | |
39 | die "missing vlan tag" if !$tag; | |
20e19696 | 40 | |
938ebef7 AD |
41 | if (!$config->{$zoneid}) { |
42 | #zone vlan bridge | |
43 | my @iface_config = (); | |
44 | push @iface_config, "mtu $mtu" if $mtu; | |
45 | push @iface_config, "bridge-stp off"; | |
46 | push @iface_config, "bridge-fd 0"; | |
47 | push @iface_config, "bridge-vlan-aware yes"; | |
48 | push @iface_config, "bridge-vids 2-4094"; | |
49 | push(@{$config->{$zoneid}}, @iface_config); | |
50 | ||
51 | #main bridge. ifupdown2 will merge it | |
52 | @iface_config = (); | |
53 | push @iface_config, "bridge-ports $zoneid.$tag"; | |
54 | push(@{$config->{$bridge}}, @iface_config); | |
55 | return $config; | |
56 | } | |
20e19696 AD |
57 | } |
58 | ||
59 | 1; | |
60 | ||
61 |