Add a new basic Fabrics module that can be used for reading and
writing the fabrics configuration file.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
src/PVE/Network/SDN/Fabrics.pm | 49 ++
src/PVE/Network/SDN/Makefile | 2 +-
2 files chang
VXLAN zones can now use fabrics instead of having to specify peers
manually. Since the network selector doesn't implement deleteEmpty,
we have to manually handle deleted properties in the VXLAN input
panel.
Signed-off-by: Stefan Hanreich
---
www/manager6/sdn/zones/VxlanEdit.js | 52 +
https://lore.proxmox.com/pve-devel/20250522161731.537011-1-s.hanre...@proxmox.com/T/#t
On 4/4/25 15:55, Stefan Hanreich wrote:
> This commit moves some IP address and MAC address types from
> proxmox-ve-config to proxmox, so they can be used re-used across our
> code base.
>
> The code in this co
Define an OSPF-specific InterfacePanel for future use (currently there
are no protocol-specific properties for OSPF interfaces).
Co-authored-by: Stefan Hanreich
Signed-off-by: Gabriel Goller
---
www/manager6/Makefile | 1 +
www/manager6/sdn/fabrics/ospf/InterfacePanel.
Implements a shared interface selector panel for openfabric and ospf
fabrics. This GridPanel combines data from two sources: the node
network interfaces (/nodes//network) and the fabrics section
configuration, displaying a merged view of both sources.
It implements the following warning states:
-
https://lore.proxmox.com/pve-devel/20250522161731.537011-1-s.hanre...@proxmox.com/T/#t
On 4/4/25 18:28, Gabriel Goller wrote:
> This series allows the user to add fabrics such as OpenFabric and OSPF over
> their clusters.
>
> This series relies on:
> https://lore.proxmox.com/pve-devel/2025040413
With the package bumped to 10.2.2 we need to generate the
configuration with the matching version, otherwise frr-reload.py fails
to create a delta of the configuration because of the version
mismatch. Reloading still works, but there is an ugly warning in the
reload log, that might throw off users.
The FabricConfig transforms the flat section configuration into its
hierarchical representation, which makes querying and validating the
fabrics configuration more ergonomic.
It provides the CRUD methods for safely manipulating the fabric
configuration, while checking for possible errors. It is in
In PVE we use the GET /nodes/{node}/network API endpoint to return all
currently configured network interfaces on a specific node. In order
to be able to use SDN fabrics in Ceph and the migration settings, we
add a helper method that returns all fabrics formatted in the same
format as the pre-exist
This component extends the InterfacePanel and adds Openfabric specific
form fields. Hello Multiplier is hidden by default, but can be
activated in the column settings of the DataGrid.
Co-authored-by: Stefan Hanreich
Signed-off-by: Gabriel Goller
---
www/manager6/Makefile
Currently, the ifupdown config generation is handled solely by the
zones plugin. Since the fabrics need to generate ifupdown
configuration as well, we create a new helper in the SDN module. It
then in turn calls into the zone and fabrics plugin, and merges the
generated raw configuration before wri
Extends the common FabricEdit component and adds the OSPF-specific
items to it.
Co-authored-by: Stefan Hanreich
Signed-off-by: Gabriel Goller
---
www/manager6/Makefile | 1 +
www/manager6/sdn/fabrics/ospf/FabricEdit.js | 20
2 files changed, 21 insert
This API module provides CRUD functionality for fabrics. The list
endpoint works analogous to the existing SDN endpoints with their
pending / running parameters.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
src/PVE/API2/Network/SDN/Fabrics.pm| 8 +
src/PVE/API2/Ne
Add permission path /sdn/fabrics/{fabric_id}. There are currently only
SDN-specific permissions for the fabric itself, not the nodes. For
displaying / editing the nodes, the existing permissions Sys.Audit or
Sys.Modify on /nodes/{node} are required, because they are already
used for viewing / editi
Define the protocol-specific properties for OSPF and add the concrete
section types to the Fabric and Node enum. Currently only area is
included, which is also the only property that is required by FRR. We
wanted to start with a minimal set of properties and add any options
later on, depending on f
This module exposes the functionality provided proxmox-ve-config for
the SDN fabrics to perl. We add initial support for reading and
writing the section config stored in /etc/pve/sdn/fabrics.cfg as well
as the running configuration, stored in /etc/pve/sdn/.running-config.
It also provides a helper
SDN fabrics can be used to configure IP addresses on interfaces
directly, so we need to generate the respective ifupdown2
configuration from the fabrics configuration. We also set some
additional properties that are required for interfaces that are part
of a fabric (IP forwarding). We use dummy int
With how the config generation worked before, it was not possible to
create a standalone isis controller, since the FRR config was only
generated with an existing EVPN controller. Since each controller is
now responsible for creating its own configuration, it is possible to
create a standalone isis
Provide a new option to the EVPN controller, fabric, that can be used
to define a fabric as the underlay network for the EVPN controller.
When applying the configuration, the EVPN controller then
automatically generates the peer list and from the fabric
configuration, rather than users having to sp
Add generic base component to add and edit Fabrics, which contains the
fields required for every protocol. The properties for every protocol
are stored in different components and each extend this one.
Co-authored-by: Stefan Hanreich
Signed-off-by: Gabriel Goller
---
www/manager6/Makefile
Expose the newly created ACL path for fabrics in the UI, so users can
configure them.
Signed-off-by: Stefan Hanreich
---
www/manager6/data/PermPathStore.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/www/manager6/data/PermPathStore.js
b/www/manager6/data/PermPathStore.js
index 72da2e9da
Adds a new method to the SDN module that is responsible for generating
and writing the FRR configuration for all SDN plugins combined. It
utilizes the newly introduced FRR helper as well as the newly
introduced API for the controllers to generate an frr_config instead
of generating the configuratio
NodeSection functions identically to the FabricSection type. It
contains all the common properties that nodes from all protocols have.
Protocol-specific properties can be defined via the type parameter of
NodeSection. It also provides generic implementations for ApiType, so
if the type parameter im
Add support to generate FRR configurations (using proxmox-frr types)
from a valid FabricConfig. Introduce a feature flag for an optional
dependency on proxmox-frr for the FRR types. Add the FrrConfigBuild
struct, which currently holds a Valid but will
eventually contain all configurations that outp
From: Gabriel Goller
Add initial documentation for the SDN fabrics, as well as additional
documentation for all available protocols, Openfabric and OSPF. The
screenshots are generated using pve-gui-tests.
Signed-off-by: Stefan Hanreich
---
pvesdn.adoc | 227
Pass the 'include_sdn' type to the network selectors used in the
datacenter migration settings panel, as well as the ceph wizard, to
enable users to select SDN Vnets, as well as fabrics in the UI.
Signed-off-by: Stefan Hanreich
---
www/manager6/ceph/CephInstallWizard.js | 2 ++
www/manager6/dc/O
From: Gabriel Goller
Add a few screenshots for the sdn->fabrics panel:
* fabric overview
* openfabric fabric creation
* ospf fabric creation
* openfabric node creation
* ospf node creation
Signed-off-by: Gabriel Goller
---
create_fabrics_screenshots | 198 +
In order to be able to show SDN networks in the network selector
dropdowns, we introduce a new type ('include_sdn') to the API endpoint
that lists network interfaces of a node. The return value for existing
parameters stays unchanged to preserve backwards-compatibility.
Callers have to explicitly p
This component is the base EditWindow for Nodes of all protocols.
It utilizes the existing network endpoint for getting information on
the interfaces of the nodes, as well as the existing pveNodeSelector
component for displaying a node dropdown. In the future we could
provide a single endpoint that
Add two additional test cases for EVPN zones, which use fabrics as the
underlay network - one for OSPF, one for OpenFabric. Those test cases
utilize the newly introduced fabric option in the EVPN controller.
Existing configurations, that use peers, are already covered by other
test cases.
The test
Extend the generic NodeEdit panel for OSPF. Currently there are no
node-specific properties for OSPF, so leave the additionalItems empty.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
www/manager6/Makefile | 1 +
www/manager6/sdn/fabrics/ospf/NodeEdit.js
Up until now the EVPN controller contained all the helper methods as
well as the configuration generation logic for FRR. Since we need to
write FRR configuration with the fabrics as well, move the FRR helper
files into its own FRR module, so they can be used by the EVPN plugin
as well as the future
From: Gabriel Goller
With the introduction of fabrics, frr configuration generation and
etc/network/interfaces generation has been reworked and renamed for
better clarity, since now not only zones / controllers are responsible
for generating the ifupdown / FRR configuration. Switch this endpoint
Add the three model definitions for SDN fabrics in a shared Common
module, so they can be accessed by all UI components for the SDN
fabrics.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
www/manager6/Makefile | 1 +
www/manager6/sdn/fabrics/Common.js | 36 +
There is one endpoint (/all) at the top-level that fetches both types
of fabric entities (fabrics & nodes) and lists them separately. This
is used for the main view, in order to avoid having to do two API
calls. It works analogous to the existing root-level SDN API calls
with the running / pending
The network endpoint of the PVE API allows selecting interfaces by
type, but the network selector widget currently does not support
passing the type to the API call.
This is required for the SDN fabrics, which introduced a new special
type to this endpoint that additionally selects all SDN interfa
Add a new property to the VXLAN zone, that can contain the name of a
fabric. This automatically generates the peer-list from the fabric,
instead of having to manually write a comma-separated IP list. This
changes the peer field to optional from required. Either the peers or
the fabric field needs t
The GET endpoint lists all nodes from all fabrics - for listing the
nodes of a specific fabric or editing nodes another submodule will be
introduced below the node submodule in a future commit.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
src/PVE/API2/Network/SDN/Fabrics.pm
With the old FRR config generation logic, we never wrote an empty FRR
configuration if all controllers got deleted. This meant that deleting
all controllers still left the previous FRR configuration on the
nodes, never disabling BGP / IS-IS. The new logic now writes an empty
configuration if there
With the changes to how we handle the frr config generation,
controllers are now no longer responsible for serializing and writing
the FRR configuration. Instead, we pass the existing frr_config perl
hash to every controller, where controllers append their respective
configuration.
This requires a
From: Gabriel Goller
We call perlmod rust functions directly from pve-network.
Signed-off-by: Gabriel Goller
---
debian/control | 17 ++---
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/debian/control b/debian/control
index 9ddbb13..41f8ca9 100644
--- a/debian/cont
Some of the types defined in this crate have been moved to
proxmox-network-types so they can be re-used across crates. This is a
preparation for the fabrics patch series, where those types will get
used by addtional, new, crates.
Remove the types that have been moved and adjust the imports for the
Save the fabrics configuration in the running configuration, when
applying the SDN configuration. This causes the FRR configuration to
be actually generated for the openfabric and ospf plugins, since the
FRR configuration is generated from the running configuration.
Co-authored-by: Gabriel Goller
The FabricConfig from proxmox-ve-config implements CRUD functionality
for Fabrics and Nodes stored in the section config. We expose them via
perlmod, so they can be used in the API endpoints defined in perl.
they map 1:1 to the respective API endpoints.
They are simply calling the respective imple
From: Gabriel Goller
TreeView that shows all the fabrics and nodes in a hierarchical
structure. It also shows all the pending changes from the
running-config. From here all entities in the fabrics can be added /
edited and deleted, utilizing the previously created EditWindow
components for Fabric
Expose the new fabric field added to the EVPN controller in the UI.
Users can now select any fabric in the EVPN controller, instead of
having to specify peers manually. This simplifies setting up an EVPN
zone via SDN fabrics considerably.
Since the peers field can now be empty, we have to adapt th
This commit adds the protocol-specific properties, that are required
for an Openfabric fabric. They correspond to the respective properties
in the FRR fabricd configuration. For more information, see the FRR
documentation [1].
While the hello interval and csnp interval could be set on a
per-interf
Add helper methods for populating a FabricConfig from the section
config, as well as converting it back into the respective section
config structs.
By utilizing the Valid type, we can ensure that only valid
configurations get written via the provided write_section_config
method, since it is only i
The Section type represents the configuration as stored in
'/etc/pve/sdn/fabrics.cfg'. It can contain a mix of fabric and node
sections, which are in turn unique to each protocol. We utilize the
generic FabricSection and NodeSection types to define every possible
section type in the section config.
Overview
This series allows the user to easily use dynamic routing protocols such as
OpenFabric and OSPF in their clusters. It also integrates existing features,
such as Ceph with the new SDN fabrics feature to enable users simple
configuration of e.g. full-mesh Ceph clusters via the Web
From: Gabriel Goller
Remove line-break when showing the current status of SDN configuration
objects. Otherwise the column would contain an additional newline,
making the row too large.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
www/manager6/Utils.js | 2 +-
1 file chang
Add a component that extends the common FabricEdit component and adds
the OpenFabric-specific items to it. Those are currently the Hello
Interval and CSNP interval, which can be configured globally for all
members of the fabric.
Since OSPF currently does not provide IPv6 support (yet), we also mov
From: Gabriel Goller
Add generic FRR types that contain openfabric and ospf variants. Also
add the FrrConfig, which holds the whole FRR configuration in a single
struct, which will then be serialized to the FRR configuration file.
Signed-off-by: Gabriel Goller
---
proxmox-frr/src/lib.rs
From: Gabriel Goller
Only a very limited subset of the FRR route-maps is implemented here
intially, only what is currently needed for the fabrics feature. Once
standalone route-maps will make it into PVE, we will build on the
structs defined here and add possibly the full featureset. The main
use
Extend the common NodeEdit panel with the Openfabric specific
properties. While IPv6 is a property that can be configured on all
nodes in the config, it is currently not supported for OSPF so we only
show it for Openfabric nodes.
Co-authored-by: Gabriel Goller
Signed-off-by: Stefan Hanreich
---
From: Gabriel Goller
This crate holds FRR-types, so rust-types that closely resemble
FRR-configuration items. These types can then simply be converted to
strings (and the final FRR config) by serializing. This has minimal
dependencies and it's only internal dependency is proxmox-network-types,
wh
Provides CRUD functionality for editing nodes inside a fabric, as well
as an endpoint for listing all the nodes. The URL structure is modeled
after the fact that a node can only be uniquely identified by its ID
as well as the ID of the fabric that contains the node.
Since fabrics can be used to ed
The fabrics patch series moved some generic network types into its own
crate, so they can be reused across crates. Migrate proxmox-firewall
to use the new proxmox-network-types crate instead of
proxmox_ve_config. No functional changes intended.
Signed-off-by: Stefan Hanreich
---
Cargo.toml
From: Gabriel Goller
Add integration tests for the full cycle from section-config to FRR
config file for both openfabric and ospf. It tests everything
end-to-end, from reading the configuration file to converting it into
a FabricConfig and then serializing an FRR configuration from it.
Signed-of
The API macro required the enum variants to either have a oneOf or
ObjectSchema, but did not allow allOf schemas. There's not really a
reason to not allow allOf as well, since they implement
ObjectSchemaType as well and represent an ObjectSchema, just like
oneOf and ObjectSchema do.
This is in pre
Provide a JSONSchema for the new two entity types, fabric and node.
While both are stored in the same configuration file, there are two
separate API submodules for fabrics and nodes, so we need to separate
the schema definitions as well.
The schemas are equivalent to the API types defined in Rust.
Add functions that allow reading and manipulating values in the
/etc/frr/daemons file. We need this for en/disabling daemons depending
on which fabric types are configured. We enable daemons dynamically,
depending on the currently configured fabrics. If a daemon is enabled
but all fabrics using it
The SDN fabrics configuration needs to validate properties of structs
that are dependent on their context. For instance the IP of a node
needs to be contained in the referenced fabric. Simple schema
validation is not sufficient for proper validation of the complete
fabrics configuration.
In order
The reload and restart parts of the original reload_controller_config
have been split into two functions, in order to make error handling
in the new apply function easier.
The new apply function tries to reload via frr-reload.py and if that
fails, it falls back to restarting the frr service.
Sinc
For special types that were encoded by the encode_value function in
SDN, we returned the encoded value in the API, rather than the actual
value. Since we use the encoded value only for comparison, we need to
return the original value instead of the encoded value.
Signed-off-by: Stefan Hanreich
--
This commit moves some IP address and MAC address types from
proxmox-ve-config to proxmox, so they can be used re-used across our
code base.
The code in this commit is mostly the same as in proxmox-ve-config
('bc9253d8'), but I have made a few changes:
* Added additional documentation to some of
In a previous commit we already added the openfabric / ospf
configuration files, but the configuration format changed since then,
so we replace them with the single configuration file used by the
fabrics now.
Also add a postinst script that removes the leftover folder from that
change.
Signed-off
We use proxmox-ve-config to generate a FRR config and serialize it
with the proxmox-frr crate in order to return it to perl in its
internally used format (an array of strings). The Perl SDN module in
turn merges it with the FRR configuration generated by Perl modules
and persists it to the FRR conf
Add an api submodule to the section config module, that provides the
types that are intended to be returned and accepted by the Perl API in
Proxmox VE. This allows us to decouple the format returned in the API
from the configuration format.
This is particularly relevant in the case of the NodeSect
This crate contains SDN specific types, so they can be re-used across
multiple crates (The initial use-case being shared types between
proxmox-frr and proxmox-ve-config).
This initial commit contains types for the following entities:
* OpenFabric Hello Interval/Multiplier and CSNP Interval
* Netwo
The fabrics configuration consists of two different entity types:
fabrics and nodes. This commit adds support for the fabrics inside
this section configuration.
There are properties required for all fabrics, regardless of type,
which are the ID of the fabric as well as the IP prefix of the fabric.
From: Gabriel Goller
Add OSPF-specific FRR types. This also reuses the types from
proxmox-network-types.
The NetworkType FRR option is implemented here, but not exposed to the
interface, as we want to keep it simple for the users. If they do not
set an IP, then the interface is considered to be
A simple String wrapper that represents the name of a network
interface. We are restricting the interface name to ASCII-only
characters via the regex, since otherwise the length check would fail,
due to String being Unicode. While network interface names can be
arbitrary bytes and don't correspond
From: Gabriel Goller
Implement OpenFabric-specific variants of common enums that
encapsulate protocol properties defined in proxmox-network-types. The
primary addition is OpenFabricInterface, which stores
protocol-specific timing parameters: HelloInterval (neighbor discovery
frequency), CsnpInter
From: Gabriel Goller
Add common FRR configuration types such as FrrWord,
CommonInterfaceName, etc. These are some common types that are used by
both openfabric and ospf and the generic types that span the two
protocols. The FrrWord is a simple primitive in FRR, which is a
ascii-string that doesn'
proxmox_serde provides helpers for parsing optional numbers / booleans
coming from perl, so move to using them instead of implementing our
own versions here. No functional changes intended.
Signed-off-by: Stefan Hanreich
---
proxmox-ve-config/Cargo.toml | 1 +
proxmox-ve-config/deb
Implement ApiType and UpdaterType in order to be able to directly use
the CIDR and MacAddress types in the API. Their schema is a string and
they get (de-)serialized by the respective FromStr / Display
implementations.
Signed-off-by: Stefan Hanreich
---
proxmox-network-types/Cargo.toml |
Add two types that transparently wrap the std structs for IPv4 and
IPv6 addresses as well as MacAddress, so they can be used directly in
structs with the API macro. Similar to their CIDR counterparts, they
have a StringSchema and are (de-)serialized via the respective
FromStr and Display implementa
Am 14.05.25 um 11:36 schrieb Fiona Ebner:
> As reported in the enterprise support, the usage percentage presented
> by Proxmox VE can be quite different from what Ceph itself shows when
> compression is used on the pool. The reason is that Proxmox VE used
> the 'stored' value as a basis for the cal
This commit formats the entire code using the `dart format .` command.
Signed-off-by: Shan Shaji
---
lib/widgets/pve_guest_migrate_widget.dart | 6 --
lib/widgets/pve_guest_overview_header.dart | 6 --
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/widgets/pve_guest_
--- Begin Message ---
This is part of my work on qcow2 external snapshot, but could improve current
qcow2 linked clone
This patch serie move qemu_img_create to common helpers,
and enable preallocation on backed_image to increase performance
This require l2_extended=on on the backed image
I have
--- Begin Message ---
and use it for plugin linked clone
This also enable extended_l2=on, as it's mandatory for backing file
preallocation.
Preallocation was missing previously, so it should increase performance
for linked clone now (around x5 in randwrite 4k)
cluster_size is set to 128k, as it
--- Begin Message ---
Signed-off-by: Alexandre Derumier
---
src/PVE/Storage/Common.pm | 53 ++
src/PVE/Storage/GlusterfsPlugin.pm | 2 +-
src/PVE/Storage/Plugin.pm | 47 +-
3 files changed, 55 insertions(+), 47 deletions(-)
d
This patch splits the `_MobileResourceFilterSheet` into multiple widgets
and since the `main_layout_slim.dart` file is large, the widget has been
moved to it's own file under the widgets folder.
Signed-off-by: Shan Shaji
---
changes since v1:
* Removed all formatting changes
* Only includes
> Alexandre Derumier via pve-devel hat am
> 19.05.2025 12:23 CEST geschrieben:
> This is part of my work on qcow2 external snapshot, but could improve current
> qcow2 linked clone
>
> This patch serie move qemu_img_create to common helpers,
> and enable preallocation on backed_image to increa
--- Begin Message ---
I have done some tests with suballocated cluster and base image without
backing_file, indeed, I'm seeing a small performance degradation on big
1TB image.
with a 30GB image, I'm around 22000 iops 4k randwrite/randread (with
or without l2_extended=on)
with a 1TB image, the
As of flutter v3.22 the `background` property is deprecated. Also the
`withOpacity` function is also deprecated as of flutter v3.27.
This commit replaces the use of `background` property with
`surfaceContainer` to align with the changes made in the following
change [0] in `pve_flutter_frontend`. A
> Denis Kanchev hat am 22.05.2025 08:55 CEST
> geschrieben:
>
>
> The parent of the storage migration process gets killed.
>
> It seems that this is the desired behavior and as far i understand it
> correctly - the child worker is detached from the parent and it has
> nothing to do with it
This commit applys the `dart fix` command to fix all the dart
analysis issues associated with renaming `MaterialState` to
`WidgetState`.
According to the flutter official docs [0] the `MaterialState` and it's
related APIs have been moved out of the material library and renamed to
`WidgetState`. Th
Thank you so much for the review. I will seperate this into multiple
patches.
On Wed May 21, 2025 at 1:12 PM CEST, Dominik Csapak wrote:
> not a super big issue, but 2 hunks seem to be unrelated to the commit message
> (see inline)
>
> it would be much nicer to have the commits clean, so I'd a
90 matches
Mail list logo