[pve-devel] superseded: [PATCH access-control/cluster/docs/gui-tests/manager/network/proxmox{, -ve-rs, -perl-rs} v2 00/57] Add SDN Fabrics

Stefan Hanreich s.hanreich at proxmox.com
Thu May 22 18:33:53 CEST 2025


https://lore.proxmox.com/pve-devel/20250522161731.537011-1-s.hanreich@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/20250404135522.2603272-1-s.hanreich@proxmox.com/T/#mf4cf46c066d856cea819ac3e79d115a290f47466
> 
> Overview
> ========
> 
> This series allows the user to create routed networks ('fabrics') across their
> clusters, which can be used as the underlay network for a EVPN cluster, or for
> creating Ceph full mesh clusters easily.
> 
> This patch series adds the initial support for two routing protocols:
> * OpenFabric
> * OSPF
> 
> In the future we plan on moving the existing IS-IS and BGP controllers into the
> fabric structure. There are also plans for adding a new Wireguard fabric to
> this.
> 
> 
> Implementation
> ==============
> 
> Every fabric consists of one or more nodes, which themselves consists of one or
> more interfaces. Fabrics and nodes are modeled as different section config
> types, interfaces are an array contained in a node section. We have a separate
> configuration file for each fabric type. This is because the basic structure
> (fabric, node, interface) is the same, but the specific options vary wildly.
> This makes serialization / validation from the Rust side a lot easier.
> 
> For now, nodes in the fabric configuration are always PVE nodes, but in the
> future nodes could also represent external members of the fabric (e.g. in a
> potential wireguard fabric).
> 
> Settings can be configured on a fabric-level, so they apply to all interfaces,
> or overridden on a interface-level (hidden in the UI by default).
> 
> Most of the functionality is implemented by rust and exposed to the existing SDN
> module via perlmod. This includes configuration reading / writing, FRR config
> generation from the section config and API CRUD methods.
> 
> The API provides one common GET method, to get the configuration of all
> different fabric types (for the tree overview), but otherwise there are separate
> CRUD endpoints for every fabric type, to mimic the split of configuration files.
> Another upside of this is, that the generated rust structs for the API endpoints
> (for PDM) will be much nicer.
> 
> For the FRR-specific functionality we introduced a new proxmox-frr crate that
> models the different entities in the FRR configuration format (routers,
> interfaces, route-maps, ...) and provides serializers for those structs. For
> more information see the respective FRR commits. When applying the SDN
> configuration, perl calls into perlmod to utilize the proxmox-frr crate for
> generating the FRR configuration of the fabrics.
> 
> We also introduce a proxmox-sdn-types crate, where we extracted generic
> fabric types (e.g., openfabric::HelloInterval), so we can reuse them across
> multiple crates (proxmox-frr, proxmox-ve-config, ..).
> 
> The hierarchical nature of the configuration and the relationship between nodes
> inside the fabrics requires validation of sections relative to other sections.
> For this matter we introduced an intermediate configuration in the initial RFC,
> but that turned out to be unwieldy (lots of additional code & conversions).
> Because of this we introduced a Validation trait, that handles validation of
> section config data.
> 
> The UI allows users to easily create different types of 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.
> There are also options spanning whole fabrics: the "hello-interval" option on
> openfabric for example, can be set on the fabric and will be applied to every
> interface.
> 
> 
> Refactoring
> ===========
> This patch series required some rework of existing functionality, mostly how SDN
> generates the FRR configuration and writes /etc/network/interfaces. Prior the
> FRR configuration was generated exclusively from the controllers, but fabrics
> need to write it as well. Same goes for the interfaces file, which got written
> by the Zone plugin, but Fabrics need to write this file as well.
> 
> For this we moved the FRR and ifupdown config generation one level up to the SDN
> module, which now calls into the respective child modules to generate the FRR /
> ifupdown configuration.
> 
> 
> Dependencies
> ============
> pve-manager depends on pve-docs
> pve-manager depends on pve-network
> pve-network depends on proxmox-perl-rs
> pve-network depends on pve-cluster
> pve-network depends on pve-access-control
> proxmox-perl-rs depends on proxmox-ve-config
> proxmox-perl-rs depends on proxmox-frr
> proxmox-perl-rs depends on proxmox-network-types
> proxmox-ve-config depends on proxmox-frr
> proxmox-ve-config depends on proxmox-network-types
> proxmox-ve-config depends on proxmox-sdn-types
> proxmox-frr depends on proxmox-network-types
> proxmox-frr depends on proxmox-sdn-types
> proxmox-ve-config depends on proxmox-serde
> 
> pve-network commits 4-7 do not build independently, because it's one refactor
> but split across multiple commits so it's easier to follow the steps during the
> refactor 
> 
> Changelog v2:
> =============
>  * split proxmox-network-types (this is done in a separate series)
>   * move Cidr-types and hostname to proxmox-network-types in the proxmox repo
>   * rename the proxmox-ve-rs/proxmox-network-types crate to proxmox-sdn-types
>     and put all the openfabric/ospf common types There
>  * fix ospf route-map generation and loopback_prefixes
>  * fix integration tests and add some more
>  * add fabric_id to OSPF, which acts as a primary (but arbitrary) id. The area
>    also has to be unique, but is only a required property now.
>    * this makes permissions easier, as every protocol has a "fabric_id" property we can check
>    * the users can choose a arbitrary name for the fabric and are not limited just by numbers and ip-addresses
>  * improve documentation wording
>  * add screenshots to documentation
>  * implement permissions in pve-access-control and pve-network
>  * made CRUD order in API modules and Common module consistent
>  * improve pve-network API descriptions
>  * improve pve-network API return types
>    * add helpers for common options
>    * refactored duplicated API types into a single variable inside the API
>      modules
>  * rework FRR reload logic - it now reloads only when daemons file stayed the
>    same, otherwise it restarts
>  * add fabric_id and node_id properties to the node section in OpenFabric and
>    OSPF (this allows us to be more generic over both protocols, useful in e.g.
>    frontend and permissions)
>  * make frontend components generic over protocols
>  * drop similar-asserts and use insta instead for integration tests
>  * added missing htmlencodes to tooltips / warning messages / tree column outputs
>  * hide action icons when node / fabric gets deleted
>  * added directory index to the root fabric method
>  * add digest to update calls
>  * improved format for fabrics in running configuration 
>  * improved logic of set_daemon_status
>  * check for existence of /etc/frr/daemons before trying to read it
>  * OSPF interfaces now must have an IP or be unnumbered
> 
> Open issues:
> 
> Directory index is still missing for the ospf/openfabric subfolders, since we don't have
> a 'GET /' endpoint there - could be added in a followup?
> 
> Network interfaces that have an entry in the interfaces file with the manual
> stanza, do not get their IPs deconfigured when deleting the interfaces from a
> fabric. This issue is documented.
> 
> 
> Changelog v1:
> =============
> proxmox-ve-rs
> -------------
>  * remove intermediate-config, convert section-config directly to frr-types.
>  * add validation layer to validate the section-config
>  * simplify openfabric `net` to `router-id`
>  * add loopback prefixes to ensure that all router-ids are in a specific subnet
>  * generate router-map and access-lists to rewrite the source address of all
>    the routes received through openfabric and ospf
>  * add integration tests
>  * add option for ospf unnumbered
>  * only allow ipv4 on ospf
> 
> pve-network
> -------------
>  * rework frr config generation
>  * rework etc/network/interfaces config generation
>  * revert "return loopback interface"
> 
> proxmox-perl-rs
> -------------
>  * generate /etc/network/interfaces config to set ip-addresses
>  * auto-generate dummy interface for every fabric
> 
> pve-manager
> -------------
>  * simplify a lot
>  * remove interface entries in tree
>  * hide specific openfabric/ospf options (hello-interval, passive etc.)
> 
> frr (external)
> --------------
>  * fix --dummy_as_loopback bug (already on staging)
> 
> RFC
> ===
> Changelog v2:
> =============
> proxmox-ve-rs
> -------------
>  * serialize internal representation directly to the frr format 
>  * add integration tests to proxmox-frr
>  * change internal representation to use BTreeMap instead of HashMap (so that
>    the test output is ordered)
>  * move some stuff from proxmox-frr and proxmox-ve-config to proxmox-network-types
> 
> pve-network
> -----------
>  * generate frr config and append to running config directly (without going
>    through perl frr merging)
>  * check permissions on each fabric when listing
> 
> pve-manager
> -----------
>  * autogenerate net and router-id when selecting the first interface
> 
> pve-cluster
> -----------
>  * update the config files in status.c (pve-cluster) (thanks @Thomas)
> 
> frr (external)
> --------------
>  * got this one merged: https://github.com/FRRouting/frr/pull/18242, so we
>    *could* automatically add dummy interfaces
> 
> 
> Big thanks to Stefan Hanreich for his help and support throughout this series!
> 
> proxmox:
> 
> Gabriel Goller (1):
>   serde: add string_as_bool module for boolean string parsing
> 
>  proxmox-serde/src/lib.rs | 84 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 84 insertions(+)
> 
> 
> proxmox-ve-rs:
> 
> Gabriel Goller (14):
>   frr: create proxmox-frr crate
>   frr: add common frr types
>   frr: add openfabric types
>   frr: add ospf types
>   frr: add route-map types
>   frr: add generic types over openfabric and ospf
>   frr: add serializer for all FRR types
>   ve-config: add common section-config types for OpenFabric and OSPF
>   ve-config: add openfabric section-config
>   ve-config: add ospf section-config
>   ve-config: add FRR conversion helpers for openfabric and ospf
>   ve-config: add validation for section-config
>   ve-config: add section-config to frr types conversion
>   ve-config: add integrations tests
> 
> Stefan Hanreich (1):
>   sdn-types: initial commit
> 
>  Cargo.toml                                    |   9 +
>  proxmox-frr/Cargo.toml                        |  23 +
>  proxmox-frr/debian/changelog                  |   5 +
>  proxmox-frr/debian/control                    |  49 ++
>  proxmox-frr/debian/copyright                  |  18 +
>  proxmox-frr/debian/debcargo.toml              |   7 +
>  proxmox-frr/src/lib.rs                        | 218 +++++++
>  proxmox-frr/src/openfabric.rs                 |  93 +++
>  proxmox-frr/src/ospf.rs                       | 135 +++++
>  proxmox-frr/src/route_map.rs                  | 128 ++++
>  proxmox-frr/src/serializer.rs                 | 192 ++++++
>  proxmox-sdn-types/Cargo.toml                  |  14 +
>  proxmox-sdn-types/debian/changelog            |   5 +
>  proxmox-sdn-types/debian/control              |  39 ++
>  proxmox-sdn-types/debian/copyright            |  18 +
>  proxmox-sdn-types/debian/debcargo.toml        |   7 +
>  proxmox-sdn-types/src/lib.rs                  |   2 +
>  proxmox-sdn-types/src/net.rs                  | 382 ++++++++++++
>  proxmox-sdn-types/src/openfabric.rs           |  89 +++
>  proxmox-ve-config/Cargo.toml                  |  19 +-
>  proxmox-ve-config/debian/control              |  33 +-
>  proxmox-ve-config/src/sdn/fabric/mod.rs       | 571 ++++++++++++++++++
>  .../src/sdn/fabric/openfabric/frr.rs          |  24 +
>  .../src/sdn/fabric/openfabric/mod.rs          | 229 +++++++
>  .../src/sdn/fabric/openfabric/validation.rs   |  58 ++
>  proxmox-ve-config/src/sdn/fabric/ospf/frr.rs  |  21 +
>  proxmox-ve-config/src/sdn/fabric/ospf/mod.rs  | 220 +++++++
>  .../src/sdn/fabric/ospf/validation.rs         |  68 +++
>  proxmox-ve-config/src/sdn/mod.rs              |   1 +
>  .../tests/fabric/cfg/openfabric_default.cfg   |  24 +
>  .../cfg/openfabric_loopback_prefix_fail.cfg   |  24 +
>  .../fabric/cfg/openfabric_multi_fabric.cfg    |  33 +
>  .../cfg/openfabric_verification_fail.cfg      |  16 +
>  .../tests/fabric/cfg/ospf_default.cfg         |  16 +
>  ...f_interface_properties_validation_fail.cfg |  10 +
>  .../fabric/cfg/ospf_loopback_prefix_fail.cfg  |  23 +
>  .../tests/fabric/cfg/ospf_multi_fabric.cfg    |  33 +
>  .../fabric/cfg/ospf_verification_fail.cfg     |  17 +
>  proxmox-ve-config/tests/fabric/helper.rs      |  43 ++
>  proxmox-ve-config/tests/fabric/main.rs        | 132 ++++
>  .../fabric__openfabric_default_pve.snap       |  36 ++
>  .../fabric__openfabric_default_pve1.snap      |  32 +
>  .../fabric__openfabric_multi_fabric_pve1.snap |  48 ++
>  .../snapshots/fabric__ospf_default_pve.snap   |  31 +
>  .../snapshots/fabric__ospf_default_pve1.snap  |  27 +
>  .../fabric__ospf_multi_fabric_pve1.snap       |  48 ++
>  46 files changed, 3264 insertions(+), 6 deletions(-)
>  create mode 100644 proxmox-frr/Cargo.toml
>  create mode 100644 proxmox-frr/debian/changelog
>  create mode 100644 proxmox-frr/debian/control
>  create mode 100644 proxmox-frr/debian/copyright
>  create mode 100644 proxmox-frr/debian/debcargo.toml
>  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-frr/src/route_map.rs
>  create mode 100644 proxmox-frr/src/serializer.rs
>  create mode 100644 proxmox-sdn-types/Cargo.toml
>  create mode 100644 proxmox-sdn-types/debian/changelog
>  create mode 100644 proxmox-sdn-types/debian/control
>  create mode 100644 proxmox-sdn-types/debian/copyright
>  create mode 100644 proxmox-sdn-types/debian/debcargo.toml
>  create mode 100644 proxmox-sdn-types/src/lib.rs
>  create mode 100644 proxmox-sdn-types/src/net.rs
>  create mode 100644 proxmox-sdn-types/src/openfabric.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/mod.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/openfabric/frr.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/openfabric/mod.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/openfabric/validation.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/ospf/frr.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/ospf/mod.rs
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/ospf/validation.rs
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/openfabric_default.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/openfabric_loopback_prefix_fail.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/openfabric_multi_fabric.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/openfabric_verification_fail.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/ospf_default.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/ospf_interface_properties_validation_fail.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/ospf_loopback_prefix_fail.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/ospf_multi_fabric.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/ospf_verification_fail.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/helper.rs
>  create mode 100644 proxmox-ve-config/tests/fabric/main.rs
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__openfabric_default_pve.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__openfabric_default_pve1.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__openfabric_multi_fabric_pve1.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__ospf_default_pve.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__ospf_default_pve1.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__ospf_multi_fabric_pve1.snap
> 
> 
> proxmox-perl-rs:
> 
> Gabriel Goller (7):
>   perl-rs: sdn: initial fabric infrastructure
>   perl-rs: sdn: add CRUD helpers for OpenFabric fabric management
>   perl-rs: sdn: OpenFabric perlmod methods
>   perl-rs: sdn: implement Openfabric interface file generation
>   perl-rs: sdn: add CRUD helpers for OSPF fabric management
>   perl-rs: sdn: OSPF perlmod methods
>   perl-rs: sdn: implement OSPF interface file configuration generation
> 
>  pve-rs/Cargo.toml            |   7 +-
>  pve-rs/Makefile              |   3 +
>  pve-rs/debian/control        |   6 +
>  pve-rs/src/lib.rs            |   1 +
>  pve-rs/src/sdn/fabrics.rs    |  50 ++++
>  pve-rs/src/sdn/mod.rs        |   3 +
>  pve-rs/src/sdn/openfabric.rs | 462 +++++++++++++++++++++++++++++++++++
>  pve-rs/src/sdn/ospf.rs       | 438 +++++++++++++++++++++++++++++++++
>  8 files changed, 969 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 ++
>  src/pmxcfs/status.c | 2 ++
>  2 files changed, 4 insertions(+)
> 
> 
> pve-access-control:
> 
> Stefan Hanreich (1):
>   permissions: add ACL paths for SDN fabrics
> 
>  src/PVE/AccessControl.pm | 2 ++
>  1 file changed, 2 insertions(+)
> 
> 
> pve-network:
> 
> Gabriel Goller (1):
>   debian: add dependency to proxmox-perl-rs
> 
> Stefan Hanreich (18):
>   sdn: fix value returned by pending_config
>   fabrics: add fabrics module
>   refactor: controller: move frr methods into helper
>   frr: add new helpers for reloading frr configuration
>   controllers: implement new api for frr config generation
>   sdn: add frr config generation helper
>   test: isis: add test for standalone configuration
>   sdn: frr: add daemon status to frr helper
>   sdn: commit fabrics config to running configuration
>   fabrics: generate ifupdown configuration
>   api: fabrics: add common helpers
>   api: openfabric: add api endpoints
>   api: openfabric: add node endpoints
>   api: ospf: add fabric endpoints
>   api: ospf: add node endpoints
>   api: fabrics: add module / subfolder
>   test: fabrics: add test cases for ospf and openfabric + evpn
>   frr: bump frr config version to 10.2.1
> 
>  debian/control                                |   3 +
>  src/PVE/API2/Network/SDN.pm                   |   7 +
>  src/PVE/API2/Network/SDN/Fabrics.pm           | 208 ++++++++
>  src/PVE/API2/Network/SDN/Fabrics/Common.pm    | 126 +++++
>  src/PVE/API2/Network/SDN/Fabrics/Makefile     |   9 +
>  src/PVE/API2/Network/SDN/Fabrics/OSPF.pm      | 155 ++++++
>  src/PVE/API2/Network/SDN/Fabrics/OSPFNode.pm  | 163 ++++++
>  .../API2/Network/SDN/Fabrics/OpenFabric.pm    | 125 +++++
>  .../Network/SDN/Fabrics/OpenFabricNode.pm     | 181 +++++++
>  src/PVE/API2/Network/SDN/Makefile             |   3 +-
>  src/PVE/Network/SDN.pm                        | 140 +++++-
>  src/PVE/Network/SDN/Controllers.pm            |  67 +--
>  src/PVE/Network/SDN/Controllers/BgpPlugin.pm  |  21 +-
>  src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 295 +----------
>  src/PVE/Network/SDN/Controllers/IsisPlugin.pm |  21 +-
>  src/PVE/Network/SDN/Controllers/Plugin.pm     |  31 +-
>  src/PVE/Network/SDN/Fabrics.pm                | 133 +++++
>  src/PVE/Network/SDN/Frr.pm                    | 462 ++++++++++++++++++
>  src/PVE/Network/SDN/Makefile                  |   2 +-
>  src/PVE/Network/SDN/Zones.pm                  |  10 -
>  src/test/run_test_zones.pl                    |  11 +-
>  .../expected_controller_config                |   2 +-
>  .../expected_controller_config                |   2 +-
>  .../evpn/ebgp/expected_controller_config      |   2 +-
>  .../ebgp_loopback/expected_controller_config  |   2 +-
>  .../evpn/exitnode/expected_controller_config  |   2 +-
>  .../expected_controller_config                |   2 +-
>  .../expected_controller_config                |   2 +-
>  .../exitnode_snat/expected_controller_config  |   2 +-
>  .../expected_controller_config                |   2 +-
>  .../evpn/ipv4/expected_controller_config      |   2 +-
>  .../evpn/ipv4ipv6/expected_controller_config  |   2 +-
>  .../expected_controller_config                |   2 +-
>  .../evpn/ipv6/expected_controller_config      |   2 +-
>  .../ipv6underlay/expected_controller_config   |   2 +-
>  .../evpn/isis/expected_controller_config      |   2 +-
>  .../isis_loopback/expected_controller_config  |   2 +-
>  .../expected_controller_config                |  22 +
>  .../isis_standalone/expected_sdn_interfaces   |   1 +
>  .../zones/evpn/isis_standalone/interfaces     |  12 +
>  .../zones/evpn/isis_standalone/sdn_config     |  21 +
>  .../expected_controller_config                |   2 +-
>  .../multiplezones/expected_controller_config  |   2 +-
>  .../expected_controller_config                |  72 +++
>  .../openfabric_fabric/expected_sdn_interfaces |  56 +++
>  .../zones/evpn/openfabric_fabric/interfaces   |   6 +
>  .../zones/evpn/openfabric_fabric/sdn_config   |  85 ++++
>  .../ospf_fabric/expected_controller_config    |  66 +++
>  .../evpn/ospf_fabric/expected_sdn_interfaces  |  53 ++
>  src/test/zones/evpn/ospf_fabric/interfaces    |   6 +
>  src/test/zones/evpn/ospf_fabric/sdn_config    |  82 ++++
>  .../evpn/rt_import/expected_controller_config |   2 +-
>  .../evpn/vxlanport/expected_controller_config |   2 +-
>  53 files changed, 2221 insertions(+), 474 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/OSPF.pm
>  create mode 100644 src/PVE/API2/Network/SDN/Fabrics/OSPFNode.pm
>  create mode 100644 src/PVE/API2/Network/SDN/Fabrics/OpenFabric.pm
>  create mode 100644 src/PVE/API2/Network/SDN/Fabrics/OpenFabricNode.pm
>  create mode 100644 src/PVE/Network/SDN/Fabrics.pm
>  create mode 100644 src/PVE/Network/SDN/Frr.pm
>  create mode 100644 src/test/zones/evpn/isis_standalone/expected_controller_config
>  create mode 100644 src/test/zones/evpn/isis_standalone/expected_sdn_interfaces
>  create mode 100644 src/test/zones/evpn/isis_standalone/interfaces
>  create mode 100644 src/test/zones/evpn/isis_standalone/sdn_config
>  create mode 100644 src/test/zones/evpn/openfabric_fabric/expected_controller_config
>  create mode 100644 src/test/zones/evpn/openfabric_fabric/expected_sdn_interfaces
>  create mode 100644 src/test/zones/evpn/openfabric_fabric/interfaces
>  create mode 100644 src/test/zones/evpn/openfabric_fabric/sdn_config
>  create mode 100644 src/test/zones/evpn/ospf_fabric/expected_controller_config
>  create mode 100644 src/test/zones/evpn/ospf_fabric/expected_sdn_interfaces
>  create mode 100644 src/test/zones/evpn/ospf_fabric/interfaces
>  create mode 100644 src/test/zones/evpn/ospf_fabric/sdn_config
> 
> 
> pve-manager:
> 
> Gabriel Goller (4):
>   api: use new generalized frr and etc network config helper functions
>   fabric: add common interface panel
>   fabrics: Add main FabricView
>   utils: avoid line-break in pending changes message
> 
> Stefan Hanreich (7):
>   fabric: add OpenFabric interface properties
>   fabric: add OSPF interface properties
>   fabric: add generic node edit panel
>   fabric: add generic fabric edit panel
>   fabric: add OpenFabric fabric edit panel
>   fabric: add OSPF fabric edit panel
>   ui: permissions: add ACL paths for fabrics
> 
>  PVE/API2/Network.pm                           |   6 +-
>  www/manager6/Makefile                         |   8 +
>  www/manager6/Utils.js                         |   2 +-
>  www/manager6/data/PermPathStore.js            |   2 +
>  www/manager6/dc/Config.js                     |   8 +
>  www/manager6/sdn/FabricsView.js               | 419 ++++++++++++++++++
>  www/manager6/sdn/fabrics/Common.js            | 292 ++++++++++++
>  www/manager6/sdn/fabrics/FabricEdit.js        |  44 ++
>  www/manager6/sdn/fabrics/NodeEdit.js          | 224 ++++++++++
>  .../sdn/fabrics/openfabric/FabricEdit.js      |  37 ++
>  .../sdn/fabrics/openfabric/InterfacePanel.js  |  64 +++
>  www/manager6/sdn/fabrics/ospf/FabricEdit.js   |  40 ++
>  .../sdn/fabrics/ospf/InterfacePanel.js        |  27 ++
>  13 files changed, 1170 insertions(+), 3 deletions(-)
>  create mode 100644 www/manager6/sdn/FabricsView.js
>  create mode 100644 www/manager6/sdn/fabrics/Common.js
>  create mode 100644 www/manager6/sdn/fabrics/FabricEdit.js
>  create mode 100644 www/manager6/sdn/fabrics/NodeEdit.js
>  create mode 100644 www/manager6/sdn/fabrics/openfabric/FabricEdit.js
>  create mode 100644 www/manager6/sdn/fabrics/openfabric/InterfacePanel.js
>  create mode 100644 www/manager6/sdn/fabrics/ospf/FabricEdit.js
>  create mode 100644 www/manager6/sdn/fabrics/ospf/InterfacePanel.js
> 
> 
> pve-gui-tests:
> 
> Gabriel Goller (1):
>   pve: add sdn/fabrics screenshots
> 
>  create_fabrics_screenshots | 197 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 197 insertions(+)
>  create mode 100755 create_fabrics_screenshots
> 
> 
> pve-docs:
> 
> Gabriel Goller (1):
>   fabrics: add initial documentation for sdn fabrics
> 
>  pvesdn.adoc | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 206 insertions(+)
> 
> 
> Summary over all repositories:
>   126 files changed, 8117 insertions(+), 484 deletions(-)
> 





More information about the pve-devel mailing list