]>
git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Zones/QinQPlugin.pm
1 package PVE
::Network
::SDN
::Zones
::QinQPlugin
;
5 use PVE
::Network
::SDN
::Zones
::VlanPlugin
;
7 use base
('PVE::Network::SDN::Zones::VlanPlugin');
17 description
=> "vlan tag",
25 nodes
=> { optional
=> 1},
26 'tag' => { optional
=> 0 },
27 'bridge' => { optional
=> 0 },
31 # Plugin implementation
32 sub generate_sdn_config
{
33 my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $controller, $interfaces_config, $config) = @_;
35 my $tag = $plugin_config->{tag
};
36 my $mtu = $plugin_config->{mtu
};
37 my $bridge = $plugin_config->{'bridge'};
39 die "missing vlan tag" if !$tag;
41 if (!$config->{$zoneid}) {
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);
51 #main bridge. ifupdown2 will merge it
53 push @iface_config, "bridge-ports $zoneid.$tag";
54 push(@{$config->{$bridge}}, @iface_config);
60 my ($class, $plugin_config, $zone, $id, $vnet, $err_config, $status, $vnet_status, $zone_status) = @_;
62 my $bridge = $plugin_config->{bridge
};
63 $vnet_status->{$id}->{zone
} = $zone;
64 $zone_status->{$zone}->{status
} = 'available' if !defined($zone_status->{$zone}->{status
});
67 $vnet_status->{$id}->{status
} = 'pending';
68 $vnet_status->{$id}->{statusmsg
} = $err_config;
69 $zone_status->{$zone}->{status
} = 'pending';
70 } elsif ($status->{$bridge}->{status
} && $status->{$bridge}->{status
} eq 'pass') {
71 $vnet_status->{$id}->{status
} = 'available';
73 $vnet_status->{$id}->{status
} = 'error';
74 $vnet_status->{$id}->{statusmsg
} = 'missing bridge';
75 $zone_status->{$zone}->{status
} = 'error';