From 3e96b0ff1ade6375b5bca8e689b69a65f56160ca Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 5 Feb 2026 15:53:32 +0000 Subject: [PATCH] feat(schema): add BGP schema Add models for Autonomous System, BGP Router Config, Peer Groups, BGP Sessions, and Address Families. Supports underlay and EVPN overlay. Ref: #41 --- schemas/bgp.yml | 239 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 schemas/bgp.yml diff --git a/schemas/bgp.yml b/schemas/bgp.yml new file mode 100644 index 0000000..32e3b1a --- /dev/null +++ b/schemas/bgp.yml @@ -0,0 +1,239 @@ +# BGP Schema for EVPN-VXLAN Fabric +# Defines Autonomous System, Peer Groups, and BGP Sessions +--- +version: "1.0" +nodes: + # ============================================================================= + # Autonomous System + # ============================================================================= + - name: AutonomousSystem + namespace: Infra + description: BGP Autonomous System + label: Autonomous System + icon: mdi--cloud-outline + default_filter: asn__value + order_by: + - asn__value + display_labels: + - asn__value + - description__value + attributes: + - name: asn + kind: Number + unique: true + description: AS Number (e.g., 65000) + - name: description + kind: Text + optional: true + - name: as_type + kind: Dropdown + default_value: private + choices: + - name: private + label: Private + - name: public + label: Public + + # ============================================================================= + # BGP Router Configuration (per device) + # ============================================================================= + - name: BGPRouterConfig + namespace: Infra + description: BGP router configuration on a device + label: BGP Router Config + icon: mdi--router-wireless + display_labels: + - device__name__value + attributes: + - name: router_id + kind: IPHost + description: BGP Router ID + - name: default_ipv4_unicast + kind: Boolean + default_value: false + description: Enable default IPv4 unicast + - name: log_neighbor_changes + kind: Boolean + default_value: true + - name: ecmp_max_paths + kind: Number + default_value: 4 + description: Maximum ECMP paths + - name: ecmp_max_ecmp + kind: Number + default_value: 64 + description: Maximum ECMP routes + relationships: + - name: device + peer: InfraDevice + cardinality: one + kind: Parent + - name: local_asn + peer: InfraAutonomousSystem + cardinality: one + - name: peer_groups + peer: InfraBGPPeerGroup + cardinality: many + kind: Component + - name: sessions + peer: InfraBGPSession + cardinality: many + kind: Component + + # ============================================================================= + # BGP Peer Group + # ============================================================================= + - name: BGPPeerGroup + namespace: Infra + description: BGP peer group template + label: BGP Peer Group + icon: mdi--account-group + default_filter: name__value + display_labels: + - name__value + attributes: + - name: name + kind: Text + description: Peer group name (e.g., underlay, evpn) + - name: description + kind: Text + optional: true + - name: update_source + kind: Text + optional: true + description: Update source interface (e.g., Loopback0) + - name: ebgp_multihop + kind: Number + optional: true + description: eBGP multihop TTL + - name: send_community + kind: Dropdown + default_value: none + choices: + - name: none + label: None + - name: standard + label: Standard + - name: extended + label: Extended + - name: both + label: Both + - name: next_hop_self + kind: Boolean + default_value: false + - name: next_hop_unchanged + kind: Boolean + default_value: false + description: Keep next-hop unchanged (for route reflector) + - name: maximum_routes + kind: Number + optional: true + - name: maximum_routes_warning_only + kind: Boolean + default_value: true + - name: peer_group_type + kind: Dropdown + default_value: underlay + choices: + - name: underlay + label: Underlay IPv4 + - name: underlay_ibgp + label: Underlay iBGP + - name: evpn + label: EVPN Overlay + relationships: + - name: bgp_config + peer: InfraBGPRouterConfig + cardinality: one + kind: Parent + - name: remote_asn + peer: InfraAutonomousSystem + cardinality: one + optional: true + + # ============================================================================= + # BGP Session (Neighbor) + # ============================================================================= + - name: BGPSession + namespace: Infra + description: BGP neighbor session + label: BGP Session + icon: mdi--connection + default_filter: peer_address__value + display_labels: + - peer_address__value + attributes: + - name: peer_address + kind: IPHost + description: Neighbor IP address + - name: description + kind: Text + optional: true + - name: enabled + kind: Boolean + default_value: true + relationships: + - name: bgp_config + peer: InfraBGPRouterConfig + cardinality: one + kind: Parent + - name: peer_group + peer: InfraBGPPeerGroup + cardinality: one + optional: true + - name: remote_asn + peer: InfraAutonomousSystem + cardinality: one + optional: true + description: Override peer group remote-as + - name: peer_device + peer: InfraDevice + cardinality: one + optional: true + description: Remote peer device (for documentation) + + # ============================================================================= + # BGP Address Family Configuration + # ============================================================================= + - name: BGPAddressFamily + namespace: Infra + description: BGP address family configuration + label: BGP Address Family + icon: mdi--format-list-bulleted + display_labels: + - afi__value + - safi__value + attributes: + - name: afi + kind: Dropdown + choices: + - name: ipv4 + label: IPv4 + - name: ipv6 + label: IPv6 + - name: evpn + label: EVPN + description: Address Family Identifier + - name: safi + kind: Dropdown + default_value: unicast + choices: + - name: unicast + label: Unicast + - name: multicast + label: Multicast + description: Sub Address Family Identifier + relationships: + - name: bgp_config + peer: InfraBGPRouterConfig + cardinality: one + kind: Parent + - name: active_peer_groups + peer: InfraBGPPeerGroup + cardinality: many + description: Peer groups activated in this AF + - name: networks + peer: InfraIPAddress + cardinality: many + optional: true + description: Networks to advertise