This series allows the user to add fabrics such as OpenFabric and OSPF over their clusters.
Note that this is a very early RFC and its sole purpose is to get some initial feedback and architectural suggestions. Overview -------- Add a new section to the sdn panel in the datacenter options which allows creating OpenFabric and OSPF fabrics. One can add Nodes to the fabrics by selecting them from a dropdown which shows all the nodes in the cluster. Additionally the user can then select the interfaces of the node which should be added to the fabric. There are also protocol-specific options such as "passive", "hello-interval" etc. available to select on the interface. Implementation -------------- Add config files for every fabric type, so currently we add sdn/ospf.cfg and sdn/openfabric.cfg. These config file get read by pve-network and the raw section config gets passed to rust (proxmox-perl-rs), where we parse it using helpers and schemas from proxmox-ve-config crate (proxmox-ve-rs repo). The config parsed from the section-config is then converted into a better representation (no PropertyString, embed Nodes into Fabrics, etc.), which is also guaranteed to be correct (everything is typed and the values are semantically checked). This intermediate representation can then be converted into a `FrrConfig`, which lives in the proxmox-frr crate (proxmox-ve-rs repo). This representation is very close to the real frr config (eg contains routers, interfaces, etc.) and can either be converted to a `PerlFrr` config (which will be used by pve-network to merge with the existin config) or (optional and experimental) into a string, which would be the actual frr config as it can be found in `frr.conf`. This series also relies on: https://lore.proxmox.com/pve-devel/20250205161340.740740-1-g.gol...@proxmox.com/ Open Questions/Issues: * generate openfabric net from the selected interface ip (the net is quite hard to get right otherwise). * Reminder to apply configuration -> Probably add a "state" column which shows "new" (when not applied) like in the sdn/controllers grid. * Add ability for the user to create a "standard" setup, where he can select a node and we automatically add an ip address to the loopback address and add the loopback interface as passive to the openfabric/ospf fabric. (Maybe we are able to get frr to support dummy interfaces in the meantime, which would be even better.) * Check if we want continue using the pve-network perl frr merging code or if we want to transition to rust -> vtysh. So the config gets flushed to the daemon directly using vtysh, this allows the user to change the frr config manually and their settings not getting overwritten by us (we also avoid reloading the daemon). * Write some extensive documentation on what the Fabrics can/cannot do. proxmox-ve-rs: Gabriel Goller (3): add crate with common network types add proxmox-frr crate with frr types add intermediate fabric representation Cargo.toml | 7 + proxmox-frr/Cargo.toml | 25 + proxmox-frr/src/common.rs | 54 ++ proxmox-frr/src/lib.rs | 223 ++++++++ proxmox-frr/src/openfabric.rs | 137 +++++ proxmox-frr/src/ospf.rs | 148 ++++++ proxmox-network-types/Cargo.toml | 15 + proxmox-network-types/src/lib.rs | 1 + proxmox-network-types/src/net.rs | 239 +++++++++ proxmox-ve-config/Cargo.toml | 10 +- proxmox-ve-config/debian/control | 4 +- proxmox-ve-config/src/sdn/fabric/common.rs | 90 ++++ proxmox-ve-config/src/sdn/fabric/mod.rs | 68 +++ .../src/sdn/fabric/openfabric.rs | 494 ++++++++++++++++++ proxmox-ve-config/src/sdn/fabric/ospf.rs | 375 +++++++++++++ proxmox-ve-config/src/sdn/mod.rs | 1 + 16 files changed, 1885 insertions(+), 6 deletions(-) create mode 100644 proxmox-frr/Cargo.toml create mode 100644 proxmox-frr/src/common.rs create mode 100644 proxmox-frr/src/lib.rs create mode 100644 proxmox-frr/src/openfabric.rs create mode 100644 proxmox-frr/src/ospf.rs create mode 100644 proxmox-network-types/Cargo.toml create mode 100644 proxmox-network-types/src/lib.rs create mode 100644 proxmox-network-types/src/net.rs create mode 100644 proxmox-ve-config/src/sdn/fabric/common.rs create mode 100644 proxmox-ve-config/src/sdn/fabric/mod.rs create mode 100644 proxmox-ve-config/src/sdn/fabric/openfabric.rs create mode 100644 proxmox-ve-config/src/sdn/fabric/ospf.rs proxmox-perl-rs: Gabriel Goller (1): fabrics: add CRUD and generate fabrics methods pve-rs/Cargo.toml | 5 +- pve-rs/Makefile | 3 + pve-rs/src/lib.rs | 1 + pve-rs/src/sdn/fabrics.rs | 202 ++++++++++++++++ pve-rs/src/sdn/mod.rs | 3 + pve-rs/src/sdn/openfabric.rs | 454 +++++++++++++++++++++++++++++++++++ pve-rs/src/sdn/ospf.rs | 425 ++++++++++++++++++++++++++++++++ 7 files changed, 1092 insertions(+), 1 deletion(-) create mode 100644 pve-rs/src/sdn/fabrics.rs create mode 100644 pve-rs/src/sdn/mod.rs create mode 100644 pve-rs/src/sdn/openfabric.rs create mode 100644 pve-rs/src/sdn/ospf.rs pve-cluster: Gabriel Goller (1): cluster: add sdn fabrics config files src/PVE/Cluster.pm | 2 ++ 1 file changed, 2 insertions(+) pve-network: Gabriel Goller (3): add config file and common read/write methods merge the frr config with the fabrics frr config on apply add api endpoints for fabrics src/PVE/API2/Network/SDN.pm | 7 + src/PVE/API2/Network/SDN/Fabrics.pm | 57 +++ src/PVE/API2/Network/SDN/Fabrics/Common.pm | 111 +++++ src/PVE/API2/Network/SDN/Fabrics/Makefile | 9 + .../API2/Network/SDN/Fabrics/OpenFabric.pm | 460 ++++++++++++++++++ src/PVE/API2/Network/SDN/Fabrics/Ospf.pm | 433 +++++++++++++++++ src/PVE/API2/Network/SDN/Makefile | 3 +- src/PVE/Network/SDN.pm | 8 +- src/PVE/Network/SDN/Controllers.pm | 1 - src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 3 - src/PVE/Network/SDN/Controllers/Frr.pm | 13 + src/PVE/Network/SDN/Fabrics.pm | 86 ++++ src/PVE/Network/SDN/Makefile | 2 +- 13 files changed, 1186 insertions(+), 7 deletions(-) create mode 100644 src/PVE/API2/Network/SDN/Fabrics.pm create mode 100644 src/PVE/API2/Network/SDN/Fabrics/Common.pm create mode 100644 src/PVE/API2/Network/SDN/Fabrics/Makefile create mode 100644 src/PVE/API2/Network/SDN/Fabrics/OpenFabric.pm create mode 100644 src/PVE/API2/Network/SDN/Fabrics/Ospf.pm create mode 100644 src/PVE/Network/SDN/Fabrics.pm pve-manager: Gabriel Goller (3): sdn: add Fabrics view sdn: add fabric edit/delete forms network: return loopback interface on network endpoint PVE/API2/Cluster.pm | 7 +- PVE/API2/Network.pm | 9 +- www/manager6/.lint-incremental | 0 www/manager6/Makefile | 8 + www/manager6/dc/Config.js | 8 + www/manager6/sdn/FabricsView.js | 359 ++++++++++++++++++ www/manager6/sdn/fabrics/Common.js | 222 +++++++++++ .../sdn/fabrics/openfabric/FabricEdit.js | 67 ++++ .../sdn/fabrics/openfabric/InterfaceEdit.js | 92 +++++ .../sdn/fabrics/openfabric/NodeEdit.js | 187 +++++++++ www/manager6/sdn/fabrics/ospf/FabricEdit.js | 60 +++ .../sdn/fabrics/ospf/InterfaceEdit.js | 46 +++ www/manager6/sdn/fabrics/ospf/NodeEdit.js | 191 ++++++++++ 13 files changed, 1244 insertions(+), 12 deletions(-) create mode 100644 www/manager6/.lint-incremental create mode 100644 www/manager6/sdn/FabricsView.js create mode 100644 www/manager6/sdn/fabrics/Common.js create mode 100644 www/manager6/sdn/fabrics/openfabric/FabricEdit.js create mode 100644 www/manager6/sdn/fabrics/openfabric/InterfaceEdit.js create mode 100644 www/manager6/sdn/fabrics/openfabric/NodeEdit.js create mode 100644 www/manager6/sdn/fabrics/ospf/FabricEdit.js create mode 100644 www/manager6/sdn/fabrics/ospf/InterfaceEdit.js create mode 100644 www/manager6/sdn/fabrics/ospf/NodeEdit.js Summary over all repositories: 50 files changed, 5409 insertions(+), 26 deletions(-) -- Generated by git-murpp 0.7.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel