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');
33 nodes
=> { optional
=> 1},
34 'bridge' => { optional
=> 0 },
38 # Plugin implementation
39 sub generate_sdn_config
{
40 my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $controller, $interfaces_config, $config) = @_;
45 my ($class, $plugin_config, $zone, $id, $vnet, $err_config, $status, $vnet_status, $zone_status) = @_;
47 my $bridge = $plugin_config->{bridge
};
48 $vnet_status->{$id}->{zone
} = $zone;
49 $zone_status->{$zone}->{status
} = 'available' if !defined($zone_status->{$zone}->{status
});
52 $vnet_status->{$id}->{status
} = 'pending';
53 $vnet_status->{$id}->{statusmsg
} = $err_config;
54 $zone_status->{$zone}->{status
} = 'pending';
55 } elsif ($status->{$bridge}->{status
} && $status->{$bridge}->{status
} eq 'pass') {
56 $vnet_status->{$id}->{status
} = 'available';
58 $vnet_status->{$id}->{status
} = 'error';
59 $vnet_status->{$id}->{statusmsg
} = 'missing bridge';
60 $zone_status->{$zone}->{status
} = 'error';
65 my ($class, $plugin_config, $vnetid, $tag) = @_;
67 my $bridge = $plugin_config->{bridge
};
69 die "bridge $bridge is missing" if !-d
"/sys/class/net/$bridge/";
71 my $vlan_aware = PVE
::Tools
::file_read_firstline
("/sys/class/net/$bridge/bridge/vlan_filtering");
72 my $is_ovs = 1 if !-d
"/sys/class/net/$bridge/brif";
74 die "bridge $bridge is not vlan aware" if !$is_ovs && !$vlan_aware;
76 return ($bridge, $tag);