From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 95A0F1FF165 for <inbox@lore.proxmox.com>; Thu, 22 May 2025 18:34:29 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B4C77C3DC; Thu, 22 May 2025 18:34:30 +0200 (CEST) Message-ID: <75901eec-3ce0-411d-b863-26e226cd160c@proxmox.com> Date: Thu, 22 May 2025 18:33:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>, Gabriel Goller <g.goller@proxmox.com> References: <20250404162908.563060-1-g.goller@proxmox.com> Content-Language: en-US From: Stefan Hanreich <s.hanreich@proxmox.com> In-Reply-To: <20250404162908.563060-1-g.goller@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.684 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [zones.pm, ospf.pm, network.pm, ospfnode.pm, main.rs, ospf.rs, frr.rs, helper.rs, fabrics.pm, cluster.pm, fabrics.rs, evpnplugin.pm, sdn.pm, serializer.rs, openfabric.pm, bgpplugin.pm, frr.pm, validation.rs, net.rs, openfabricnode.pm] Subject: [pve-devel] superseded: [PATCH access-control/cluster/docs/gui-tests/manager/network/proxmox{, -ve-rs, -perl-rs} v2 00/57] Add SDN Fabrics X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> 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(-) > _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel