This module contains general data definitions for use in EVPN. The model contains the configuration and state attributes importe...
Version: 2021-06-11
module openconfig-evpn { yang-version 1; namespace "http://openconfig.net/yang/evpn"; prefix oc-evpn; import openconfig-yang-types { prefix oc-yang; } import openconfig-extensions { prefix oc-ext; } import openconfig-network-instance-types { prefix oc-ni-types; } import openconfig-evpn-types { prefix oc-evpn-types; } import openconfig-inet-types { prefix oc-inet; } import openconfig-interfaces { prefix oc-if; } import openconfig-bgp-types { prefix oc-bgp-types; } organization "OpenConfig working group"; contact "OpenConfig working group netopenconfig@googlegroups.com"; description "This module contains general data definitions for use in EVPN. The model contains the configuration and state attributes imported by the OpenConfig network instance module that is the primary holder of these properties. The module describes the configuration and state parameters to support the instantiation of the MAC-VRF concept defined in the RFC 7432: BGP MPLS-Based Ethernet VPN. The EVPN concept allows the Media Access Control (MAC) addresses forwarding through the control plane on a PE. Within the OpenConfig model, a single network instance represents an individual MAC VRF. Whilst it is possible that there may be cases where a single MAC VRF may support multiple broadcast domains, this is not currently supported and requires an extension of the model."; revision "2021-06-11" { description "Structural update for arp-proxy and nd-proxy."; reference "0.2.0"; } revision "2020-11-24" { description "Initial revision."; reference "0.1.0"; } oc-ext:openconfig-version "0.2.0"; grouping evpn-config-top { description "Configuration attributes of the EVPN Instance"; container evpn-instances { description "Configuration attributes of the EVPN Instance"; list evpn-instance { key "evi"; description "An EVPN instance (EVI) comprises Customer Edge devices (CEs) that are connected to Provider Edge devices (PEs). One network instance (representing a single MAC VRF) can participate in one or more EVPN Instances. For each EVPN instance in which the forwarding instance participates an EVPN instance needs to be created. The model supports BGP MPLS-Based Ethernet VPNs (RFC 7432) and Network Virtualization Overlay Solution Using Ethernet VPN (RFC 8365). The use of MPLS or VXLAN is selected via the encapsulation container within EVPN instance. One use case requiring participating in two EVIs is the Interconnect Solution for EVPN Overlay networks (see draft-ietf-bess-dci-evpn-overlay-10)"; leaf evi { type leafref { path "../config/evi"; } description "EVPN Intance (EVI) identifier"; } container config { description "EVPN Configuration parameters for the participation in an EVPN Intance."; uses evpn-evi-common-config; } // container config container state { config false; description "EVPN State parameters for the participation in an EVPN Intance."; uses evpn-evi-common-config; } // container state uses evpn-import-export-policy-top; uses evpn-evi-overlay-top; uses evpn-evi-pbb-top; } // list evpn-instance } // container evpn-instances } // grouping evpn-config-top grouping evpn-import-export-policy-top { description "Top Level grouping for the import and export route targets in a EVPN Instance."; container import-export-policy { description "Top container to set the import and export policies associated with a EVI"; container config { description "Configuration parameters to set the import and export policies associated with a EVI"; uses evpn-import-export-config; } // container config container state { config false; description "State parameters of the import and export policies associated with a EVI"; uses evpn-import-export-config; } // container state } // container import-export-policy } // grouping evpn-import-export-policy-top grouping evpn-ethernet-segment-df-config { description "Configuration parameters for the Designated forwarding Election"; leaf df-election-method { type enumeration { enum "DEFAULT" { value 0; description "The default Designated Forwarder Election election method"; } enum "HIGHEST_RANDOM_WEIGHT" { value 1; description "The highest random weight (HRW) method"; reference "RFC8584: Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } enum "PREFERENCE" { value 2; description "The preference based method"; reference "RFC8584: Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } } description "Select the Designated Forwarder Election (DF) election method"; reference "RFC 7432: BGP MPLS-Based Ethernet VPN. RFC 8584:Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } leaf preference { when "../df-election-method = 'PREFERENCE'" { description "The preference value is only applicable to the preference based method"; } type uint16; description "Defines a 2-octet value that indicates the PE preference to become the DF in the Ethernet-Segment."; reference "RFC8584: Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } leaf revertive { when "../df-election-method = 'PREFERENCE'" { description "The revertive value is only applicable to the preference method"; } type boolean; default "true"; description "The 'preempt' or 'revertive' behavior. This option will allow a non-revertive behavior in the DF election."; reference "RFC8584: Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } leaf election-wait-time { when "../df-election-method = 'PREFERENCE'" { description "The Designated Forwarder Election wait-time is only applicable to the preference method"; } type uint32; description "Designated Forwarder Election wait-time. When the DF timer expires, the PE device selects the DF based on the highest preference value"; reference "RFC8584: Framework for Ethernet VPN Designated Forwarder Election Extensibility"; } } // grouping evpn-ethernet-segment-df-config grouping evpn-ethernet-segment-df-top { description "Top grouping for the configuration and state parameters for the Designated forwarding Election"; container df-election { description "Top container for the configuration and state parameters for the Designated forwarding Election"; container config { description "Configuration parameters for the Designated forwarding Election"; uses evpn-ethernet-segment-df-config; } // container config container state { config false; description "Configuration parameters for the Designated forwarding Election"; uses evpn-ethernet-segment-df-config; } // container state } // container df-election } // grouping evpn-ethernet-segment-df-top grouping evpn-ethernet-segment-config { description "Configuration attributes for the Ethernet Segment."; leaf name { type string; description "Ethernet Segment name"; } leaf esi-type { type oc-evpn-types:esi-type; default "TYPE_0_OPERATOR_CONFIGURED"; description "ESI Type is a 1-octet field (most significant octet) that specifies the format of the remaining 9 octets (ESI Value)."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN page-16"; } leaf esi { type union { type oc-evpn-types:esi; type enumeration { enum "AUTO" { value 0; description "This ESI type indicates an auto-generated ESI value."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN"; } } } description "Ethernet Segment Identifier (ESI) value. For ESI Type 0: The esi leaf value is directly configured by the operator. For ESI Type 1: The AUTO enum must be used. For ESI Type 2: The AUTO enum must be used. For ESI Type 3: The directly configured or AUTO enum must be used. For ESI Type 4: The directly configured or AUTO enum must be used. For ESI Type 5: The directly configured or AUTO enum must be used."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN."; } leaf redundancy-mode { type identityref { base oc-evpn-types:EVPN_REDUNDANCY_MODE; } description "Multihoming options for load balancing of traffic in the Ethernet Segment."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN"; } uses oc-if:interface-ref-common; } // grouping evpn-ethernet-segment-config grouping evpn-ethernet-segment-top { description "Top-level grouping for ethernet segments. An Ethernet Segment is referenced by a name and an ESI"; container ethernet-segments { description "Top-level container for ethernet segments. An Ethernet Segment is referenced by a name and an ESI"; list ethernet-segment { key "name"; description "List of Ethernet Segments."; leaf name { type leafref { path "../config/name"; } description "Ethernet Segment Name "; } container config { description "Configuration data for the Ethernet Segments."; uses evpn-ethernet-segment-config; } // container config container state { config false; description "Operational state data for the Ethernet Segments."; uses evpn-ethernet-segment-config; } // container state uses evpn-ethernet-segment-df-top; } // list ethernet-segment } // container ethernet-segments } // grouping evpn-ethernet-segment-top grouping evpn-arp-proxy-top { description "Top Container related to ARP-Proxy"; container arp-proxy { description "Top Container related to ARP-Proxy"; container config { description "Configuration data related to ARP-Proxy."; uses evpn-arp-proxy-config; } // container config container state { config false; description "State data related to ARP-Proxy."; uses evpn-arp-proxy-config; } // container state } // container arp-proxy } // grouping evpn-arp-proxy-top grouping evpn-nd-proxy-top { description "Top Container related to ND-Proxy"; container nd-proxy { description "Top Container related to ND-Proxy."; container config { description "Configuration data related to ND-Proxy."; uses evpn-nd-proxy-config; } // container config container state { config false; description "State data related to ND-Proxy."; uses evpn-nd-proxy-config; } // container state } // container nd-proxy } // grouping evpn-nd-proxy-top grouping evpn-arp-proxy-config { description "Configuration data related to ARP-Proxy"; leaf enable { type boolean; default "false"; description "Enable (TRUE) or disable (FALSE) ARP proxy. If true a proxy server on the network answers the Address Resolution Protocol (ARP) queries for an IP address that is not on that network."; } leaf arp-suppression { type boolean; default "false"; description "Enable (TRUE) or disable (FALSE) ARP suppression. If true the Address Resolution Protocol (ARP) queries for an IP address that is not on that network are suppressed. Address Resolution Protocol (ARP) suppression is a technique used to reduce the amount of ARP broadcast flooding within individual VXLAN segments, that is between VMs connected to the same logical switch."; reference "draft-ietf-bess-evpn-proxy-arp-nd-13 RFC 7432: BGP MPLS-Based Ethernet VPN"; } leaf ip-mobility-threshold { type uint16; description "Enable (TRUE) or disable (FALSE). It is possible for a given host or end-station (as defined by its IP address) to move from one Ethernet segment to another. The number of IP mobility events that are detected for a given IP address within the detection-threshold before it is identified as a duplicate IP address. Once the detection threshold is reached, updates for the IP address are suppressed."; } leaf duplicate-ip-detection-interval { type uint16; description "The time interval used in detecting a duplicate IP address. Duplicate ip detection number of host moves allowed within interval period"; } } // grouping evpn-arp-proxy-config grouping evpn-nd-proxy-config { description "Configuration data related to Neighbor Discovery (ND) proxy"; leaf enable { type boolean; default "false"; description "Enable (TRUE) or disable (FALSE) Neighbor Discovery (ND) proxy. If true a proxy server on the network answers the NDP packets for an IP address that is not on that network."; reference "draft-ietf-bess-evpn-proxy-arp-nd-13 RFC 7432: BGP MPLS-Based Ethernet VPN"; } leaf nd-suppression { type boolean; default "false"; description "Enable (TRUE) or disable (FALSE) Neighbor Discovery suppression. If true the NDP queries for an IP address that is not on that network are suppressed. NDP suppression is a technique used to reduce the amount of NDP Packets flooding within individual VXLAN segments, that is between VMs connected to the same logical switch."; } leaf ip-mobility-threshold { type uint16; description "Enable (TRUE) or disable (FALSE). It is possible for a given host or end-station (as defined by its IP address) to move from one Ethernet segment to another. The number of IP mobility events that are detected for a given IP address within the detection-threshold before it is identified as a duplicate IP address. Once the detection threshold is reached, updates for the IP address are suppressed."; } leaf duplicate-ip-detection-interval { type uint16; description "The time interval used in detecting a duplicate IP address. Duplicate ip detection number of host moves allowed within interval period"; } } // grouping evpn-nd-proxy-config grouping evpn-mac-vrf-config { description "Configuration data related to mac-vrf"; leaf anycast-gateway-mac { type oc-yang:mac-address; description "Configure the anycast gateway MAC address that all VTEPs use for the network instance. When a VM sends an Address Resolution Protocol (ARP) request for the anycast gateway IP address in a VXLAN virtual network, the VTEP responds with the configured anycast MAC address."; } leaf flood-unknown-unicast-supression { type boolean; default "false"; description "Enable (TRUE) or disable (FALSE) the Unknown Unicast Flooding Suppression. If the Unknown Unicast Flooding Suppression is on, the unicast traffic towards an unknown host will be dropped."; } } // grouping evpn-mac-vrf-config grouping evpn-mac-mobility-config { description "Configuration data related to mac-vrf"; leaf mac-mobility { type boolean; description "Enable (TRUE) or disable (FALSE). It is possible for a given host or end-station (as defined by its MAC address) to move from one Ethernet segment to another; this is referred to as 'MAC Mobility' or 'MAC move. The configuration attributes includes: mac-mobility-window and mac-mobility-threshold"; } leaf mac-mobility-window { type uint16 { range "0..600"; } default "180"; description "The time interval used in detecting a duplicate MAC address. The value can be from 5 through 600 seconds. The default is 180 seconds"; reference "RFC 7432: BGP MPLS-Based Ethernet VPN section-15"; } leaf mac-mobility-threshold { type uint8 { range "0..50"; } default "5"; description "The number of MAC mobility events that are detected for a given MAC address within the detection-window before it is identified as a duplicate MAC address. Once the detection threshold is reached, updates for the MAC address are suppressed."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN section-15"; } leaf ip-mobility-threshold { type uint16; description "Enable (TRUE) or disable (FALSE). It is possible for a given host or end-station (as defined by its IP address) to move from one Ethernet segment to another. The number of IP mobility events that are detected for a given IP address within the detection-threshold before it is identified as a duplicate IP address. Once the detection threshold is reached, updates for the IP address are suppressed."; } leaf duplicate-ip-detection-interval { type uint16; description "The time interval used in detecting a duplicate IP address. Duplicate ip detection number of host moves allowed within interval period"; } } // grouping evpn-mac-mobility-config grouping evpn-mac-mobility-top { description "Top grouping the configuration and state data related to mac mobility."; container mac-mobility { description "Top grouping the configuration and state data related to mac mobility."; container config { description "Configuration data related to mac mobility."; uses evpn-mac-mobility-config; } // container config container state { config false; description "State data related to mac mobility."; uses evpn-mac-mobility-config; } // container state } // container mac-mobility } // grouping evpn-mac-mobility-top grouping evpn-evi-common-config { description "Top-Level parameters related the configuration of EVPN to partipate in one EVPN instance"; leaf evi { type string; description "EVPN Instance (EVI) identifier"; } leaf encapsulation-type { type identityref { base oc-ni-types:ENCAPSULATION; } description "The on-the-wire encapsulation that should be used when exchanging traffic from this network instance to/from destinations belonging to the EVI. The use of MPLS or VXLAN is selected using this container."; } leaf service-type { type identityref { base oc-evpn-types:EVPN_TYPE; } description "Specifies the type of EVPN that is being created according to the values in the EVPN_TYPES identity. The options are VLAN-based, VLAN-Bundle or VLAN-aware. VLAN-Based services consists of an EVPN instance of only a single broadcast domain, the proper network-instance type used for this kind of services is L2VSI."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN"; } leaf multicast-group { type oc-inet:ip-address; description "Multicast group address for BUM traffic"; } leaf multicast-mask { type oc-inet:ip-address; description "Multicast group address mask"; } leaf replication-mode { type enumeration { enum "STATIC_INGRESS_REPLICATION" { value 0; description "Static ingress replication mode."; } enum "BGP" { value 1; description "BGP EVPN ingress replication mode. It includes the ability to signal a P2MP LSP for the EVPN Inclusive Provider Tunnel for BUM traffic"; } enum "MULTICAST" { value 2; description "Multicast enabled in the underlay for BUM traffic"; } } description "Replication mode to handle BUM traffic"; } leaf route-distinguisher { type union { type oc-ni-types:route-distinguisher; type enumeration { enum "AUTO" { value 0; description "Enable auto route-distinguisher generation. When used for evpn and if not configured, the RD is auto-derived with the format <ip-address>:<evi> where ip-address is the ipv4 address associated to the system loopback or sub-interface."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN page-18"; } } } description "Route Distinguisher (RD) associated to the EVPN-instance. An RD MUST be assigned for a given EVPN-instance on a PE. This RD MUST be unique across all EVPN-instances on a PE. The route-distinguisher at this level overrides the route-distinguisher value defined under network-instance/config."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN page-18"; } } // grouping evpn-evi-common-config grouping evpn-import-export-config { description "Parameters for import and export policy"; leaf-list export-route-target { type union { type oc-bgp-types:bgp-ext-community-type; type enumeration { enum "AUTO" { value 0; description "Enable auto route-target generation. When used for EVPN and if not configured, the RT is auto-derived with the format <asn>:<evi> where 'asn' is the autonomous-system configured in the network-instance default. Auto-derived route targets simplify the configuration of VLAN services for EVPN, especially in VLAN-aware bundle services where you can have multiple VLANs, multiple bridge domains and the VLANS for a given service are not present on all PE devices."; } } } description "Export Route Target (RT) in the network-instance on a PE."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN page-19"; } leaf-list import-route-target { type union { type oc-bgp-types:bgp-ext-community-type; type enumeration { enum "AUTO" { value 0; description "Enable auto route-target generation. When used for EVPN and if not configured, the RT is auto-derived with the format <asn>:<evi> where 'asn' is the autonomous-system configured in the network-instance default. Auto-derived route targets simplify the configuration of VLAN services for EVPN, especially in VLAN aware bundle services where you can have multiple VLANs, multiple bridge domains and the VLANS for a given service are not present on all PE devices."; } } } description "Import Route Target (RT) in the network-instance on a PE."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN page-19"; } } // grouping evpn-import-export-config grouping evpn-evi-overlay-top { description "Top grouping related the configuration of Network Virtualization Overlay Solution Using Ethernet VPN"; container vxlan { description "Top container related to Overlay Solution in EVPN."; container config { description "Configuration data related to Overlay Solution in EVPN."; uses evpn-evi-overlay-config; } // container config container state { config false; description "State data related to Overlay Solution in EVPN."; uses evpn-evi-overlay-config; } // container state uses evpn-vxlan-anycast-config; } // container vxlan } // grouping evpn-evi-overlay-top grouping evpn-evi-overlay-config { description "Parameters related the configuration of Network Virtualization Overlay Solution Using Ethernet VPN"; leaf vni { type oc-evpn-types:vni-id; description "Virtual Network Identifier (VNI) associated to the EVI. This VNI is used for ingress and egress in the VXLAN domain."; } leaf overlay-endpoint-network-instance { type leafref { path "/network-instances/network-instance/name"; } description "The network instance to resolve the overlay-endpoint within."; } leaf overlay-endpoint { type leafref { path "/network-instances/network-instance[name=current()/../overlay-endpoint-network-instance]/connection-points/connection-point/endpoints/endpoint/config/endpoint-id"; } description "Associate the EVI with an VXLAN Endpoint defined under connection points. The network instance to resolve the overlay-endpoint within."; } leaf host-reachability-bgp { type boolean; description "Enable or Disable the BGP control plane to be used to exchange updates from the NVE interface"; } leaf multicast-group { type oc-inet:ip-address; description "Multicast group address for BUM traffic"; } leaf multicast-mask { type oc-inet:ip-address; description "Multicast group address mask"; } } // grouping evpn-evi-overlay-config grouping evpn-vxlan-anycast-config { description "Anycast source interface top grouping"; container anycast-source-interface { description "Anycast source interface references"; container config { description "Anycast source interface configuration references"; uses oc-if:interface-ref-common; } // container config container state { config false; description "Anycast source interface state references"; uses oc-if:interface-ref-common; } // container state } // container anycast-source-interface } // grouping evpn-vxlan-anycast-config grouping evpn-parameters-pbb-isid-config { description "I-component identifier configuration parameters. In PBB-EVPN [RFC7623] the use of GWs where I-components and associated B-components are part of EVI instances is required."; leaf i-sid { type uint32 { range "0..16777215"; } description "Service Instance Identifier 24 bits and global within a PBB network. I-SID defines the service instance that the frame should be mapped to."; reference "RFC 7080: Virtual Private LAN Service (VPLS) Interoperability with Provider Backbone Bridges."; } } // grouping evpn-parameters-pbb-isid-config grouping evpn-parameters-pbb-config { description "I-component identifier configuration parameters. In PBB-EVPN [RFC7623] the use of GWs where I-components and associated B-components are part of EVI instances is required. These parameters includes the association between I and B components."; leaf b-component-name { type string; description "Type of the associated b-component"; } leaf backbone-src-mac { type oc-yang:mac-address; description "EVPN will run independently in both components, the I-component MAC-VRF and B-component MAC-VRF. The backbone-src-mac assigns the b-component MAC."; } } // grouping evpn-parameters-pbb-config grouping evpn-parameters-pbb-icomponent-config { description "Parameters to configure components contained in a backbone edge bridge that containes the customer space (customer MAC addresses,S-VLAN)."; container i-components { description "i-components container definition."; list i-component { key "i-sid"; description "list of i-components"; leaf i-sid { type leafref { path "../config/i-sid"; } description "I-SID represents a unique service identifier associated with service instances"; } container config { description "Configuration variables for the i-sid"; uses evpn-parameters-pbb-isid-config; } // container config container state { config false; description "State variables for the i-sid"; uses evpn-parameters-pbb-isid-config; } // container state } // list i-component } // container i-components } // grouping evpn-parameters-pbb-icomponent-config grouping evpn-evi-pbb-config { description "Provider Backbone Bridging (PBB) parameters grouping"; reference "IEEE 802.1ah Provider Backbone Bridge"; list b-component { key "b-component-name"; description "List of B-components. The b-component learns and forwards traffic on the backbone in order to reduce the number of BGP MAC Advertisement routes by aggregating Customer/Client MAC (C-MAC) addresses via Provider Backbone MAC (B-MAC) address."; reference "RFC 7623: Provider Backbone Bridging Combined with Ethernet VPN (PBB-EVPN)."; leaf b-component-name { type leafref { path "../config/b-component-name"; } description "Provider Backbone Bridging component name."; } container config { description "Configuration variables for the b-components."; uses evpn-parameters-pbb-config; } // container config container state { config false; description "State variables for the b-components."; uses evpn-parameters-pbb-config; } // container state uses evpn-parameters-pbb-icomponent-config; } // list b-component } // grouping evpn-evi-pbb-config grouping evpn-evi-pbb-top { description "Grouping for pbb configuration parameters"; container pbb { description "Container for EVPN with PBB PE functionality for scaling over MPLS,"; uses evpn-evi-pbb-config; } // container pbb } // grouping evpn-evi-pbb-top grouping evpn-vxlan-parameters-config { description "Type agnostic configuration parameters relating to the overlay of the network instance"; leaf description { type string; description "Description to identify the VXLAN tunnel endpoint It is a unique name identifying the overlay endpoint"; } leaf enabled { type boolean; description "VXLAN tunnel endpoint administrative state."; } leaf source-interface { type string; description "Source loopback interface name"; } } // grouping evpn-vxlan-parameters-config grouping evpn-overlays-grp-top { description "Parameters relating to the overlay tunnel endpoints"; container config { description "Configuration parameters relating to the overlay tunnel endpoints of the network instance"; uses evpn-vxlan-parameters-config; } // container config container state { config false; description "State parameters relating to the overlay tunnel endpoints of the network instance"; uses evpn-vxlan-parameters-config; } // container state } // grouping evpn-overlays-grp-top } // module openconfig-evpn
© 2023 YumaWorks, Inc. All rights reserved.