[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