use strict;
use warnings;
-use Data::Dumper;
use JSON;
use PVE::Tools qw(extract_param dir_glob_regex run_command);
sub complete_sdn_zone {
my ($cmdname, $pname, $cvalue) = @_;
- my $cfg = PVE::Network::SDN::config();
+ my $cfg = PVE::Network::SDN::running_config();
return $cmdname eq 'add' ? [] : [ PVE::Network::SDN::sdn_zones_ids($cfg) ];
}
my $cfg = {};
if($running) {
- my $cfg = PVE::Network::SDN::config();
+ my $cfg = PVE::Network::SDN::running_config();
$cfg = $cfg->{vnets};
} else {
$cfg = PVE::Network::SDN::Zones::config();
sub generate_etc_network_config {
- my $cfg = PVE::Network::SDN::config();
+ my $cfg = PVE::Network::SDN::running_config();
my $version = $cfg->{version};
my $vnet_cfg = $cfg->{vnets};
my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type});
eval {
- $plugin->generate_sdn_config($plugin_config, $zone, $id, $vnet, $controller, $subnet_cfg, $interfaces_config, $config);
+ $plugin->generate_sdn_config($plugin_config, $zone, $id, $vnet, $controller, $controller_cfg, $subnet_cfg, $interfaces_config, $config);
};
if (my $err = $@) {
warn "zone $zone : vnet $id : $err\n";
my $err_config = undef;
my $local_version = PVE::Network::SDN::Zones::read_etc_network_config_version();
- my $cfg = PVE::Network::SDN::config();
+ my $cfg = PVE::Network::SDN::running_config();
my $sdn_version = $cfg->{version};
return if !$sdn_version;
my $status = ifquery_check();
-
my $vnet_cfg = $cfg->{vnets};
my $zone_cfg = $cfg->{zones};
my $nodename = PVE::INotify::nodename();
my $zone_status = {};
for my $id (sort keys %{$zone_cfg->{ids}}) {
+ next if defined($zone_cfg->{ids}->{$id}->{nodes}) && !$zone_cfg->{ids}->{$id}->{nodes}->{$nodename};
$zone_status->{$id}->{status} = $err_config ? 'pending' : 'available';
}
foreach my $id (sort keys %{$vnet_cfg->{ids}}) {
my $vnet = $vnet_cfg->{ids}->{$id};
my $zone = $vnet->{zone};
- next if !$zone;
+ next if !defined($zone);
my $plugin_config = $zone_cfg->{ids}->{$zone};
+
+ if (!defined($plugin_config)) {
+ $vnet_status->{$id}->{status} = 'error';
+ $vnet_status->{$id}->{statusmsg} = "unknown zone '$zone' configured";
+ next;
+ }
+
next if defined($plugin_config->{nodes}) && !$plugin_config->{nodes}->{$nodename};
$vnet_status->{$id}->{zone} = $zone;
my $vnet = PVE::Network::SDN::Vnets::get_vnet($bridge, 1);
if (!$vnet) { # fallback for classic bridge
- PVE::Network::tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate);
+ my $interfaces_config = PVE::INotify::read_file('interfaces');
+ my $disablelearning = 1 if $interfaces_config->{ifaces}->{$bridge} && $interfaces_config->{ifaces}->{$bridge}->{'bridge-disable-mac-learning'};
+ PVE::Network::tap_plug($iface, $bridge, $tag, $firewall, $trunks, $rate, $disablelearning);
return;
}