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

Reply via email to