summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/PVE/Network/SDN.pm45
-rw-r--r--src/PVE/Network/SDN/Fabrics.pm13
-rwxr-xr-xsrc/test/run_test_zones.pl9
3 files changed, 57 insertions, 10 deletions
diff --git a/src/PVE/Network/SDN.pm b/src/PVE/Network/SDN.pm
index 892d5d8..ce4b41e 100644
--- a/src/PVE/Network/SDN.pm
+++ b/src/PVE/Network/SDN.pm
@@ -20,6 +20,8 @@ use PVE::Network::SDN::Zones;
use PVE::Network::SDN::Controllers;
use PVE::Network::SDN::Subnets;
use PVE::Network::SDN::Dhcp;
+use PVE::Network::SDN::Frr;
+use PVE::Network::SDN::Fabrics;
my $running_cfg = "sdn/.running-config";
@@ -240,13 +242,46 @@ sub generate_zone_config {
PVE::Network::SDN::Zones::write_etc_network_config($raw_config);
}
-sub generate_controller_config {
- my ($reload) = @_;
+=head3 generate_frr_raw_config(\%running_config, \%fabric_config)
+
+Generates the raw frr config (as documented in the C<PVE::Network::SDN::Frr>
+module) for all SDN plugins combined.
+
+If provided, uses the passed C<\%running_config> und C<\%fabric_config> to avoid
+re-parsing and re-reading both configurations. If not provided, this function
+will obtain them via the SDN and SDN::Fabrics modules and then generate the FRR
+configuration.
+
+=cut
+
+sub generate_frr_raw_config {
+ my ($running_config, $fabric_config) = @_;
+
+ $running_config = PVE::Network::SDN::running_config() if !$running_config;
+ $fabric_config = PVE::Network::SDN::Fabrics::config(1) if !$fabric_config;
+
+ my $frr_config = {};
+ PVE::Network::SDN::Controllers::generate_frr_config($frr_config, $running_config);
+ PVE::Network::SDN::Frr::append_local_config($frr_config);
+
+ my $raw_config = PVE::Network::SDN::Frr::to_raw_config($frr_config);
+
+ my $fabrics_config = PVE::Network::SDN::Fabrics::generate_frr_raw_config($fabric_config);
+ push @$raw_config, @$fabrics_config;
+
+ return $raw_config;
+}
+
+sub generate_frr_config {
+ my ($apply) = @_;
+
+ my $running_config = PVE::Network::SDN::running_config();
+ my $fabric_config = PVE::Network::SDN::Fabrics::config(1);
- my $raw_config = PVE::Network::SDN::Controllers::generate_controller_config();
- PVE::Network::SDN::Controllers::write_controller_config($raw_config);
+ my $raw_config = PVE::Network::SDN::generate_frr_raw_config($running_config, $fabric_config);
+ PVE::Network::SDN::Frr::write_raw_config($raw_config);
- PVE::Network::SDN::Controllers::reload_controller() if $reload;
+ PVE::Network::SDN::Frr::apply() if $apply;
}
sub generate_dhcp_config {
diff --git a/src/PVE/Network/SDN/Fabrics.pm b/src/PVE/Network/SDN/Fabrics.pm
index 89a8ae8..e5e3428 100644
--- a/src/PVE/Network/SDN/Fabrics.pm
+++ b/src/PVE/Network/SDN/Fabrics.pm
@@ -44,4 +44,17 @@ sub write_config {
cfs_write_file("sdn/fabrics.cfg", $config->to_raw(), 1);
}
+sub generate_frr_raw_config {
+ my ($fabric_config) = @_;
+
+ my @raw_config = ();
+
+ my $nodename = PVE::INotify::nodename();
+
+ my $frr_config = $fabric_config->get_frr_raw_config($nodename);
+ push @raw_config, @$frr_config if @$frr_config;
+
+ return \@raw_config;
+}
+
1;
diff --git a/src/test/run_test_zones.pl b/src/test/run_test_zones.pl
index e50dd76..266bd9b 100755
--- a/src/test/run_test_zones.pl
+++ b/src/test/run_test_zones.pl
@@ -145,18 +145,17 @@ foreach my $test (@tests) {
if ($sdn_config->{controllers}) {
my $expected = read_file("./$test/expected_controller_config");
- my $controller_rawconfig = "";
+ my $config = "";
eval {
- my $config = PVE::Network::SDN::Controllers::generate_controller_config();
- $controller_rawconfig =
- PVE::Network::SDN::Controllers::generate_controller_rawconfig($config);
+ my $raw_config = PVE::Network::SDN::generate_frr_raw_config();
+ $config = PVE::Network::SDN::Frr::raw_config_to_string($raw_config);
};
if (my $err = $@) {
diag("got unexpected error - $err");
fail($name);
} else {
- is($controller_rawconfig, $expected, $name);
+ is($config, $expected, $name);
}
}
}