From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 68A151FF164 for <inbox@lore.proxmox.com>; Fri, 28 Mar 2025 18:22:28 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A037C9E9E; Fri, 28 Mar 2025 18:22:20 +0100 (CET) From: Gabriel Goller <g.goller@proxmox.com> To: pve-devel@lists.proxmox.com Date: Fri, 28 Mar 2025 18:13:20 +0100 Message-Id: <20250328171340.885413-33-g.goller@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250328171340.885413-1-g.goller@proxmox.com> References: <20250328171340.885413-1-g.goller@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.026 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH pve-network 05/17] controllers: implement new api for frr config generation X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> From: Stefan Hanreich <s.hanreich@proxmox.com> With the changes to how we handle the frr config generation, controllers are now no longer responsible for generating the FRR configuration. Instead, we pass the existing frr_config perl hash to every controller, where controllers append their respective configuration. This requires a few changes in the controller API, so that they now append to a passed perl hash, instead of directly writing their own configuration which is now handled externally by the SDN module. Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com> Co-authored-by: Gabriel Goller <g.goller@proxmox.com> Signed-off-by: Gabriel Goller <g.goller@proxmox.com> --- src/PVE/Network/SDN/Controllers.pm | 67 +++---------------- src/PVE/Network/SDN/Controllers/BgpPlugin.pm | 21 +----- src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 6 +- src/PVE/Network/SDN/Controllers/IsisPlugin.pm | 21 +----- src/PVE/Network/SDN/Controllers/Plugin.pm | 31 +-------- 5 files changed, 19 insertions(+), 127 deletions(-) diff --git a/src/PVE/Network/SDN/Controllers.pm b/src/PVE/Network/SDN/Controllers.pm index 9e8f3aa12a89..788bfccd3aff 100644 --- a/src/PVE/Network/SDN/Controllers.pm +++ b/src/PVE/Network/SDN/Controllers.pm @@ -79,12 +79,12 @@ sub read_etc_network_interfaces { return $interfaces_config; } -sub generate_controller_config { +sub generate_frr_config { + my ($frr_config, $sdn_config) = @_; - my $cfg = PVE::Network::SDN::running_config(); - my $vnet_cfg = $cfg->{vnets}; - my $zone_cfg = $cfg->{zones}; - my $controller_cfg = $cfg->{controllers}; + my $vnet_cfg = $sdn_config->{vnets}; + my $zone_cfg = $sdn_config->{zones}; + my $controller_cfg = $sdn_config->{controllers}; return if !$vnet_cfg && !$zone_cfg && !$controller_cfg; @@ -101,13 +101,10 @@ sub generate_controller_config { } } - # generate configuration - my $config = {}; - foreach my $id (sort keys %{$controller_cfg->{ids}}) { my $plugin_config = $controller_cfg->{ids}->{$id}; my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($plugin_config->{type}); - $plugin->generate_controller_config($plugin_config, $controller_cfg, $id, $uplinks, $config); + $plugin->generate_frr_config($plugin_config, $controller_cfg, $id, $uplinks, $frr_config); } foreach my $id (sort keys %{$zone_cfg->{ids}}) { @@ -117,7 +114,7 @@ sub generate_controller_config { my $controller = $controller_cfg->{ids}->{$controllerid}; if ($controller) { my $controller_plugin = PVE::Network::SDN::Controllers::Plugin->lookup($controller->{type}); - $controller_plugin->generate_controller_zone_config($plugin_config, $controller, $controller_cfg, $id, $uplinks, $config); + $controller_plugin->generate_zone_frr_config($plugin_config, $controller, $controller_cfg, $id, $uplinks, $frr_config); } } @@ -132,57 +129,11 @@ sub generate_controller_config { my $controller = $controller_cfg->{ids}->{$controllerid}; if ($controller) { my $controller_plugin = PVE::Network::SDN::Controllers::Plugin->lookup($controller->{type}); - $controller_plugin->generate_controller_vnet_config($plugin_config, $controller, $zone, $zoneid, $id, $config); + $controller_plugin->generate_vnet_frr_config($plugin_config, $controller, $zone, $zoneid, $id, $frr_config); } } - return $config; -} - - -sub reload_controller { - - my $cfg = PVE::Network::SDN::running_config(); - my $controller_cfg = $cfg->{controllers}; - - return if !$controller_cfg; - - foreach my $id (keys %{$controller_cfg->{ids}}) { - my $plugin_config = $controller_cfg->{ids}->{$id}; - my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($plugin_config->{type}); - $plugin->reload_controller(); - } -} - -sub generate_controller_rawconfig { - my ($config) = @_; - - my $cfg = PVE::Network::SDN::running_config(); - my $controller_cfg = $cfg->{controllers}; - return if !$controller_cfg; - - my $rawconfig = ""; - foreach my $id (keys %{$controller_cfg->{ids}}) { - my $plugin_config = $controller_cfg->{ids}->{$id}; - my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($plugin_config->{type}); - $rawconfig .= $plugin->generate_controller_rawconfig($plugin_config, $config); - } - return $rawconfig; -} - -sub write_controller_config { - my ($config) = @_; - - my $cfg = PVE::Network::SDN::running_config(); - my $controller_cfg = $cfg->{controllers}; - return if !$controller_cfg; - - foreach my $id (keys %{$controller_cfg->{ids}}) { - my $plugin_config = $controller_cfg->{ids}->{$id}; - my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($plugin_config->{type}); - $plugin->write_controller_config($plugin_config, $config); - } + return $frr_config; } 1; - diff --git a/src/PVE/Network/SDN/Controllers/BgpPlugin.pm b/src/PVE/Network/SDN/Controllers/BgpPlugin.pm index 53963e5ad7f4..3b21cada2d8d 100644 --- a/src/PVE/Network/SDN/Controllers/BgpPlugin.pm +++ b/src/PVE/Network/SDN/Controllers/BgpPlugin.pm @@ -53,7 +53,7 @@ sub options { } # Plugin implementation -sub generate_controller_config { +sub generate_frr_config { my ($class, $plugin_config, $controller, $id, $uplinks, $config) = @_; my @peers; @@ -132,7 +132,7 @@ sub generate_controller_config { return $config; } -sub generate_controller_zone_config { +sub generate_zone_frr_config { my ($class, $plugin_config, $controller, $controller_cfg, $id, $uplinks, $config) = @_; } @@ -164,21 +164,4 @@ sub on_update_hook { } } -sub generate_controller_rawconfig { - my ($class, $plugin_config, $config) = @_; - return ""; -} - -sub write_controller_config { - my ($class, $plugin_config, $config) = @_; - return; -} - -sub reload_controller { - my ($class) = @_; - return; -} - 1; - - diff --git a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm index f9241a097798..bde331fb12c4 100644 --- a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm +++ b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm @@ -41,7 +41,7 @@ sub options { } # Plugin implementation -sub generate_controller_config { +sub generate_frr_config { my ($class, $plugin_config, $controller_cfg, $id, $uplinks, $config) = @_; my @peers; @@ -119,7 +119,7 @@ sub generate_controller_config { return $config; } -sub generate_controller_zone_config { +sub generate_zone_frr_config { my ($class, $plugin_config, $controller, $controller_cfg, $id, $uplinks, $config) = @_; my $local_node = PVE::INotify::nodename(); @@ -279,7 +279,7 @@ sub generate_controller_zone_config { return $config; } -sub generate_controller_vnet_config { +sub generate_vnet_frr_config { my ($class, $plugin_config, $controller, $zone, $zoneid, $vnetid, $config) = @_; my $exitnodes = $zone->{'exitnodes'}; diff --git a/src/PVE/Network/SDN/Controllers/IsisPlugin.pm b/src/PVE/Network/SDN/Controllers/IsisPlugin.pm index 97c6876db303..ace19aa7ffdc 100644 --- a/src/PVE/Network/SDN/Controllers/IsisPlugin.pm +++ b/src/PVE/Network/SDN/Controllers/IsisPlugin.pm @@ -55,7 +55,7 @@ sub options { } # Plugin implementation -sub generate_controller_config { +sub generate_frr_config { my ($class, $plugin_config, $controller, $id, $uplinks, $config) = @_; my $isis_ifaces = $plugin_config->{'isis-ifaces'}; @@ -87,7 +87,7 @@ sub generate_controller_config { return $config; } -sub generate_controller_zone_config { +sub generate_zone_frr_config { my ($class, $plugin_config, $controller, $controller_cfg, $id, $uplinks, $config) = @_; } @@ -113,21 +113,4 @@ sub on_update_hook { } } -sub generate_controller_rawconfig { - my ($class, $plugin_config, $config) = @_; - return ""; -} - -sub write_controller_config { - my ($class, $plugin_config, $config) = @_; - return; -} - -sub reload_controller { - my ($class) = @_; - return; -} - 1; - - diff --git a/src/PVE/Network/SDN/Controllers/Plugin.pm b/src/PVE/Network/SDN/Controllers/Plugin.pm index d6ffc5f35c74..26beff3370a8 100644 --- a/src/PVE/Network/SDN/Controllers/Plugin.pm +++ b/src/PVE/Network/SDN/Controllers/Plugin.pm @@ -63,48 +63,23 @@ sub parse_section_header { return undef; } -sub generate_sdn_config { - my ($class, $plugin_config, $node, $data, $ctime) = @_; - - die "please implement inside plugin"; -} - -sub generate_controller_config { +sub generate_frr_config { my ($class, $plugin_config, $controller_cfg, $id, $uplinks, $config) = @_; die "please implement inside plugin"; } - -sub generate_controller_zone_config { +sub generate_zone_frr_config { my ($class, $plugin_config, $controller, $controller_cfg, $id, $uplinks, $config) = @_; die "please implement inside plugin"; } -sub generate_controller_vnet_config { +sub generate_vnet_frr_config { my ($class, $plugin_config, $controller, $zoneid, $vnetid, $config) = @_; } -sub generate_controller_rawconfig { - my ($class, $plugin_config, $config) = @_; - - die "please implement inside plugin"; -} - -sub write_controller_config { - my ($class, $plugin_config, $config) = @_; - - die "please implement inside plugin"; -} - -sub controller_reload { - my ($class) = @_; - - die "please implement inside plugin"; -} - sub on_delete_hook { my ($class, $controllerid, $zone_cfg) = @_; -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel