--- 1/draft-ietf-mpls-mldp-yang-02.txt 2017-11-12 22:13:13.155327460 -0800 +++ 2/draft-ietf-mpls-mldp-yang-03.txt 2017-11-12 22:13:13.259329914 -0800 @@ -1,106 +1,105 @@ MPLS Working Group K. Raza Internet-Draft S. Krishnaswamy Intended status: Standards Track Cisco Systems, Inc. -Expires: March 18, 2018 +Expires: May 15, 2018 X. Liu Jabil S. Esale Juniper Networks - X. Chen + L. Andersson Huawei Technologies Jeff Tantsura + Individual - September 14, 2017 + November 11, 2017 YANG Data Model for MPLS mLDP - draft-ietf-mpls-mldp-yang-02 + draft-ietf-mpls-mldp-yang-03 Abstract This document describes a YANG data model for Multi-Protocol Label Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The mLDP data model augments the LDP data model. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- - Drafts is at http://datatracker.ietf.org/drafts/current/. + Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on March 18, 2018. + This Internet-Draft will expire on May 15, 2018. Copyright Notice Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents - (http://trustee.ietf.org/license-info) in effect on the date of + (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. FEC Types . . . . . . . . . . . . . . . . . . . . . . . . 6 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 7 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 7 - 4.2. mldp global container . . . . . . . . . . . . . . . . . . 9 + 4.2. mldp global container . . . . . . . . . . . . . . . . . . 8 4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 9 - 4.4. Configuration Tree . . . . . . . . . . . . . . . . . . . 10 - 4.4.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 10 - 4.4.2. Extended . . . . . . . . . . . . . . . . . . . . . . 11 - 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 13 - 5.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 13 - 5.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 14 - 5.3. Derived states . . . . . . . . . . . . . . . . . . . . . 17 - 5.3.1. Root state . . . . . . . . . . . . . . . . . . . . . 18 - 5.3.2. Bindings state . . . . . . . . . . . . . . . . . . . 19 - 5.3.3. Capabilities state . . . . . . . . . . . . . . . . . 22 - 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 22 - 6.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 22 - 6.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 22 - 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 - 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 23 + 4.4. Configuration Tree . . . . . . . . . . . . . . . . . . . 9 + 4.4.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 9 + 4.4.2. Extended . . . . . . . . . . . . . . . . . . . . . . 10 + 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 12 + 5.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 12 + 5.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 13 + 5.3. Derived states . . . . . . . . . . . . . . . . . . . . . 16 + 5.3.1. Root state . . . . . . . . . . . . . . . . . . . . . 16 + 5.3.2. Bindings state . . . . . . . . . . . . . . . . . . . 17 + 5.3.3. Capabilities state . . . . . . . . . . . . . . . . . 20 + 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 20 + 6.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 20 + 6.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 21 + 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 + 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 22 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 23 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 23 - 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 33 - 10. Security Considerations . . . . . . . . . . . . . . . . . . . 54 - 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54 - 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 54 - 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 54 - 13.1. Normative References . . . . . . . . . . . . . . . . . . 54 - 13.2. Informative References . . . . . . . . . . . . . . . . . 56 + 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 32 + 10. Security Considerations . . . . . . . . . . . . . . . . . . . 55 + 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 + 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 + 13. Normative References . . . . . . . . . . . . . . . . . . . . 55 Appendix A. Additional Contributors . . . . . . . . . . . . . . 56 - Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 1. Introduction This document introduces a YANG data model for MPLS Multipoint Label Distribution Protocol (mLDP). The mLDP model being defined here is dependent on LDP YANG data model [I-D.ietf-mpls-ldp-yang]. This implies that an opertor will need to use base LDP module to configure and manage control plane for mLDP. For example, an operator would enable LDP discovery on MPLS interface to establish LDP/mLDP peering on which mLDP bindings could be exchanged. Similarly, an operator @@ -115,20 +114,29 @@ following constructs for managing the mLDP protocol: o Configuration o Operational State o Executables (Actions) o Notifications + The modeling in this document complies with the Network Management + Datastore Architecture (NMDA) [I-D.ietf-netmod-revised-datastores]. + The operational state data is combined with the associated + configuration data in the same hierarchy + [I-D.ietf-netmod-rfc6087bis]. When protocol states are retrieved + from the NMDA operational state datastore, the returned states cover + all "config true" (rw) and "config false" (ro) nodes defined in the + schema. + This document is organized to define the data model for each of the above constructs in the sequence as listed above. 1.1. Base and Extended Like LDP model, the configuration and state items are divided into following two broad categories: o Base @@ -141,22 +149,22 @@ category contains all other non-base features (such as recursive FEC support, protection etc.). All the items in a base category are mandatory and hence no "if-feature" is allowed under the "base" category. While "base" model support will suffice for small deployments, large deployments will require not only the "base" module support but also "extended" support for some selected and required features. The base and extended catogories are defined in their own modules ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of - which augmenting LDP base model ietf-mpls-ldp as defined under ietf- - mpls-ldp [I-D.ietf-mpls-ldp-yang]. + which augments the LDP base model as defined under ietf-mpls-ldp + module [I-D.ietf-mpls-ldp-yang]. Like LDP, mLDP "base" model configuration and state covers ipv4 address-family only, with ipv6 address-family related configuration and state be covered in "extended" model. 2. Specification of Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. @@ -168,39 +176,38 @@ protocols/ldp:mpls-ldp defined in [I-D.ietf-mpls-ldp-yang]. The document also defines "ietf-mpls-mldp-extended" module that models the extended mLDP features under YANG. Following diagram depicts high level mLDP yang tree organization and hierarchy with respect to LDP: +-- rw routing +-- rw control-plane-protocols +-- rw mpls-ldp - +-- rw some_container - | +-- rw config - | | +-- rw .... // ldp base - | | +-- rw ldp-ext:.... // ldp extended - | | ... - | | +-- rw mldp - | | +-- rw ... // mldp base - | | +-- rw mldp-ext:.... // mldp extended - | | ... - | +-- ro state - | | +-- ro .... // ldp base - | | +-- ro ldp-ext:.... // ldp extended - | | ... - | | +-- ro mldp - | | +-- ro ... // mldp base - | | +-- ro mldp-ext:.... // mldp extended - | | ... - +-- rw ... - | + +-- rw some_ldp_container + | +-- rw mldp + | +-- rw ... // mldp base + | | +-- rw ... + | | +-- ro ... + | | +-- + | +-- rw mldp-ext:... // mldp extended + | | +-- rw ... + | | +-- ro ... + | | +-- + +-- ro some_ldp_container + +-- ro mldp + +-- ro ... // mldp base + | +-- ro ... + | +-- + +-- ro mldp-ext:... // mldp extended + +-- ro ... + +-- notifications: +--- n mpls-mldp-some_event +--- n ... Figure 1 3.1. Scope Following are the main mLDP areas and features that are within the @@ -389,351 +397,324 @@ support will also be provided. o Forwarding: By default, mLDP is allowed to select any of the LDP enabled interface as a downstream interface towards a nexthop (LDP/mLDP peer) for MP LSP programming. However, a configuration option is provided to allow mLDP to exclude a given interface from such a selection. Note that such a configuration option will be useful only when there are more than one interfaces available for the downstream selection. - This goes without saying that mLDP configuration tree follows the - same approach as LDP, where the tree comprise leafs for intended - configuration. - 4.4. Configuration Tree 4.4.1. Base Following is a simplified graphical representation of the data model for mLDP base configuration module: ietf-mpls-mldp -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability: + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: +--rw mldp +--rw p2mp | +--rw enable? boolean +--rw mp2mp | +--rw enable? boolean +--rw make-before-break +--rw enable? boolean +--rw switchover-delay? uint16 +--rw timeout? uint16 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: +--rw mldp - +--rw config - | +--rw enable? boolean + +--rw enable? boolean +--rw address-families +--rw ipv4 +--rw configured-leaf-lsps - +--rw p2mp - | +--rw roots - | +--rw root* [root-address] - | +--rw root-address inet:ipv4-address - | +--rw (lsp-key-type)? - | +--:(lsp-id) - | +--rw opaque-type-lspid - | +--rw lsp* [lsp-id] - | +--rw lsp-id uint16 - +--rw mp2mp - +--rw roots - +--rw root* [root-address] - +--rw root-address inet:ipv4-address - +--rw (lsp-key-type)? - +--:(lsp-id) +--rw opaque-type-lspid - +--rw lsp* [lsp-id] - +--rw lsp-id uint16 + +--rw fec-label* [root-address lsp-id] + +--rw root-address inet:ipv4-address + +--rw lsp-id uint32 + +--rw multipoint-type? multipoint-type Figure 3 4.4.2. Extended Following is a simplified graphical representation of the data model for mLDP extended configuration -module: ietf-mpls-mldp-extended -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability/mldp:mldp: - +--rw hub-and-spoke {capability-mldp-hsmp}? - | +--rw enable? boolean - +--rw node-protection {capability-mldp-node-protection}? - +--rw plr? boolean - +--rw merge-point +module: ietf-mpls-mldp + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: + +--rw mldp + +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? + | +--rw mldp-ext:enable? boolean + +--rw mldp-ext:node-protection {capability-mldp-node-protection}? + +--rw mldp-ext:plr? boolean + +--rw mldp-ext:merge-point + +--rw mldp-ext:enable? boolean + +--rw mldp-ext:targeted-session-teardown-delay? uint16 + + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: + +--rw mldp +--rw enable? boolean - +--rw targeted-session-teardown-delay? uint16 + +--rw address-families + +--rw ipv4 + | +--rw configured-leaf-lsps + | | +--rw mldp-ext:opaque-type-transit + | | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] + | | | +--rw mldp-ext:root-address inet:ipv4-address + | | | +--rw mldp-ext:source-address inet:ip-address + | | | +--rw mldp-ext:group-address inet:ip-address-no-zone + | | | +--rw mldp-ext:rd route-distinguisher + | | | +--rw mldp-ext:recur-root-address inet:ip-address + | | | +--rw mldp-ext:recur-rd route-distinguisher + | | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + | | +--rw mldp-ext:opaque-type-bidir + | | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] + | | +--rw mldp-ext:root-address inet:ipv4-address + | | +--rw mldp-ext:rp inet:ip-address + | | +--rw mldp-ext:group-address inet:ip-address-no-zone + | | +--rw mldp-ext:rd route-distinguisher + | | +--rw mldp-ext:recur-root-address inet:ip-address + | | +--rw mldp-ext:recur-rd route-distinguisher + | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? + | | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref + | +--rw mldp-ext:recursive-fec + | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref + +--rw mldp-ext:ipv6 + +--rw mldp-ext:configured-leaf-lsps + | +--rw mldp-ext:opaque-type-lspid + | | +--rw mldp-ext:fec-label* [root-address lsp-id] + | | +--rw mldp-ext:root-address inet:ipv6-address + | | +--rw mldp-ext:lsp-id uint32 + | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + | | +--rw mldp-ext:recursive-fec* [recur-root-address recur-rd] + | | +--rw mldp-ext:recur-root-address inet:ip-address + | | +--rw mldp-ext:recur-rd route-distinguisher + | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + | +--rw mldp-ext:opaque-type-transit + | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] + | | +--rw mldp-ext:root-address inet:ipv6-address + | | +--rw mldp-ext:source-address inet:ip-address + | | +--rw mldp-ext:group-address inet:ip-address-no-zone + | | +--rw mldp-ext:rd route-distinguisher + | | +--rw mldp-ext:recur-root-address inet:ip-address + | | +--rw mldp-ext:recur-rd route-distinguisher + | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + | +--rw mldp-ext:opaque-type-bidir + | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] + | +--rw mldp-ext:root-address inet:ipv6-address + | +--rw mldp-ext:rp inet:ip-address + | +--rw mldp-ext:group-address inet:ip-address-no-zone + | +--rw mldp-ext:rd route-distinguisher + | +--rw mldp-ext:recur-root-address inet:ip-address + | +--rw mldp-ext:recur-rd route-distinguisher + | +--rw mldp-ext:multipoint-type? mldp:multipoint-type + +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? + | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref + +--rw mldp-ext:recursive-fec + +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/ldp:capability: + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability: +--rw mldp {per-peer-capability}? +--rw p2mp | +--rw enable? boolean +--rw mp2mp | +--rw enable? boolean +--rw make-before-break +--rw enable? boolean +--rw switchover-delay? uint16 +--rw timeout? uint16 -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4: - +--rw config - +--rw multicast-only-frr {mldp-mofrr}? - | +--rw prefix-list? ldp-ext:prefix-list-ref - +--rw recursive-fec - +--rw prefix-list? ldp-ext:prefix-list-ref - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps/mldp:p2mp/mldp:roots/mldp:root/mldp:lsp-key-type: - +--:(source-group) - +--rw opaque-type-transit - +--rw lsp* [source-address group-address] - +--rw source-address inet:ipv4-address - +--rw group-address inet:ipv4-address-no-zone - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps/mldp:mp2mp/mldp:roots/mldp:root/mldp:lsp-key-type: - +--:(source-group) - +--rw opaque-type-transit - +--rw lsp* [source-address group-address] - +--rw source-address inet:ipv4-address - +--rw group-address inet:ipv4-address-no-zone - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family/ldp-ext:config: + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family: +--rw mldp-disable? boolean -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families: - +--rw ipv6 - +--rw config - +--rw multicast-only-frr {mldp-mofrr}? - | +--rw prefix-list? ldp-ext:prefix-list-ref - +--rw recursive-fec - +--rw prefix-list? ldp-ext:prefix-list-ref - Figure 4 5. Operational State Operational state of mLDP can be queried and obtained from various - read-only mdlp "state" containers that augment ldp state containers. - - Please note this state tree refers both the configuration "applied" - state as well as the "derived" state related to the mLDP protocol. - [Ed note: Future revision will realign] + read-only mdlp "state" containers that augment ldp containers. 5.1. Base Following is a simplified graphical representation of the data model for mLDP base operational state: module: ietf-mpls-mldp - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability: - +--ro mldp - +--ro p2mp - | +--ro enable? boolean - +--ro mp2mp - | +--ro enable? boolean - +--ro make-before-break - +--ro enable? boolean - +--ro switchover-delay? uint16 - +--ro timeout? uint16 - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:received-peer-state/ldp:capability: + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: +--ro mldp +--ro p2mp | +--ro enable? boolean +--ro mp2mp | +--ro enable? boolean +--ro make-before-break +--ro enable? boolean augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: +--rw mldp - +--ro state - | +--ro enable? boolean + +--rw enable? boolean +--rw address-families +--rw ipv4 - +--ro state +--ro roots +--ro root* [root-address] +--ro root-address inet:ipv4-address +--ro is-self? boolean +--ro reachability* [address interface] | +--ro address inet:ipv4-address - | +--ro interface ldp:mpls-interface-ref - | +--ro peer? leafref + | +--ro interface if:interface-ref + | +--ro peer? -> ../../../../../../../../ldp:peers/peer/lsr-id +--ro bindings +--ro opaque-type-lspid +--ro fec-label* [lsp-id] +--ro lsp-id uint32 +--ro multipoint-type? multipoint-type +--ro peer* [direction peer advertisement-type] +--ro direction ldp:downstream-upstream - +--ro peer leafref + +--ro peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id +--ro advertisement-type ldp:advertised-received +--ro label? rt-types:mpls-label +--ro mbb-role? enumeration + +--ro mldp-ext:mofrr-role? mofrr-role Figure 5 5.2. Extended Following is a simplified graphical representation of the data model for mLDP extended operational state: -module: ietf-mpls-mldp-extended +module: ietf-mpls-mldp -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability/mldp:mldp: - +--ro hub-and-spoke {capability-mldp-hsmp}? - | +--ro enable? boolean - +--ro node-protection {capability-mldp-node-protection}? - +--ro plr? boolean - +--ro merge-point - +--ro enable? boolean - +--ro targeted-session-teardown-delay? uint16 + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:capability: +--ro mldp - +--ro p2mp - | +--ro enable? boolean - +--ro mp2mp - | +--ro enable? boolean - +--ro make-before-break - +--ro enable? boolean - +--ro switchover-delay? uint16 - +--ro timeout? uint16 - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:state: - +--ro multicast-only-frr {mldp-mofrr}? - | +--ro prefix-list? ldp-ext:prefix-list-ref - +--ro recursive-fec - +--ro prefix-list? ldp-ext:prefix-list-ref - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings/mldp:opaque-type-lspid/mldp:fec-label/mldp:peer: - +--ro mofrr-role? mofrr-role - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family/ldp-ext:state: - +--ro mldp-disable? boolean - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:received-peer-state/ldp:capability/mldp:mldp: - +--ro hub-and-spoke - | +--ro enable? boolean - +--ro node-protection - +--ro plr? boolean - +--ro merge-point? boolean - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings: - +--ro opaque-type-transit - | +--ro fec-label* [source-address group-address rd recur-root-address recur-rd] - | +--ro source-address inet:ip-address - | +--ro group-address inet:ip-address-no-zone - | +--ro rd route-distinguisher - | +--ro recur-root-address inet:ip-address - | +--ro recur-rd route-distinguisher - | +--ro multipoint-type? mldp:multipoint-type - | +--ro peer* [direction peer advertisement-type] - | +--ro direction ldp:downstream-upstream - | +--ro peer leafref - | +--ro advertisement-type ldp:advertised-received - | +--ro label? rt-types:mpls-label - | +--ro mbb-role? enumeration - | +--ro mofrr-role? mofrr-role - +--ro opaque-type-bidir - +--ro fec-label* [rp group-address rd recur-root-address recur-rd] - +--ro rp inet:ip-address - +--ro group-address inet:ip-address-no-zone - +--ro rd route-distinguisher - +--ro recur-root-address inet:ip-address - +--ro recur-rd route-distinguisher - +--ro multipoint-type? mldp:multipoint-type - +--ro peer* [direction peer advertisement-type] - +--ro direction ldp:downstream-upstream - +--ro peer leafref - +--ro advertisement-type ldp:advertised-received - +--ro label? rt-types:mpls-label - +--ro mbb-role? enumeration - +--ro mofrr-role? mofrr-role - -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings/mldp:opaque-type-lspid/mldp:fec-label: - +--ro recursive-fec* [recur-root-address recur-rd] - +--ro recur-root-address inet:ip-address - +--ro recur-rd route-distinguisher - +--ro multipoint-type? mldp:multipoint-type - +--ro peer* [direction peer advertisement-type] - +--ro direction ldp:downstream-upstream - +--ro peer leafref - +--ro advertisement-type ldp:advertised-received - +--ro label? rt-types:mpls-label - +--ro mbb-role? enumeration - +--ro mofrr-role? mofrr-role + +--ro mldp-ext:hub-and-spoke + | +--ro mldp-ext:enable? boolean + +--ro mldp-ext:node-protection + +--ro mldp-ext:plr? boolean + +--ro mldp-ext:merge-point? boolean -augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families: - +--rw ipv6 - +--ro state - +--ro roots - +--ro root* [root-address] - +--ro root-address inet:ipv6-address - +--ro is-self? boolean - +--ro reachability* [address interface] - | +--ro address inet:ipv6-address - | +--ro interface ldp:mpls-interface-ref - | +--ro peer? leafref - +--ro bindings - +--ro opaque-type-lspid - | +--ro fec-label* [lsp-id] - | +--ro lsp-id uint32 - | +--ro multipoint-type? mldp:multipoint-type - | +--ro peer* [direction peer advertisement-type] - | | +--ro direction ldp:downstream-upstream - | | +--ro peer leafref - | | +--ro advertisement-type ldp:advertised-received - | | +--ro label? rt-types:mpls-label - | | +--ro mbb-role? enumeration - | | +--ro mofrr-role? mofrr-role - | +--ro recursive-fec* [recur-root-address recur-rd] - | +--ro recur-root-address inet:ip-address - | +--ro recur-rd route-distinguisher - | +--ro multipoint-type? mldp:multipoint-type - | +--ro peer* [direction peer advertisement-type] - | +--ro direction ldp:downstream-upstream - | +--ro peer leafref - | +--ro advertisement-type ldp:advertised-received - | +--ro label? rt-types:mpls-label - | +--ro mbb-role? enumeration - | +--ro mofrr-role? mofrr-role - +--ro opaque-type-transit - | +--ro fec-label* [source-address group-address rd recur-root-address recur-rd] - | +--ro source-address inet:ip-address - | +--ro group-address inet:ip-address-no-zone - | +--ro rd route-distinguisher - | +--ro recur-root-address inet:ip-address - | +--ro recur-rd route-distinguisher - | +--ro multipoint-type? mldp:multipoint-type - | +--ro peer* [direction peer advertisement-type] - | +--ro direction ldp:downstream-upstream - | +--ro peer leafref - | +--ro advertisement-type ldp:advertised-received - | +--ro label? rt-types:mpls-label - | +--ro mbb-role? enumeration - | +--ro mofrr-role? mofrr-role - +--ro opaque-type-bidir - +--ro fec-label* [rp group-address rd recur-root-address recur-rd] - +--ro rp inet:ip-address - +--ro group-address inet:ip-address-no-zone - +--ro rd route-distinguisher - +--ro recur-root-address inet:ip-address - +--ro recur-rd route-distinguisher - +--ro multipoint-type? mldp:multipoint-type - +--ro peer* [direction peer advertisement-type] - +--ro direction ldp:downstream-upstream - +--ro peer leafref - +--ro advertisement-type ldp:advertised-received - +--ro label? rt-types:mpls-label - +--ro mbb-role? enumeration - +--ro mofrr-role? mofrr-role + augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: + +--rw mldp + +--rw enable? boolean + +--rw address-families + +--rw ipv4 + | +--ro roots + | +--ro root* [root-address] + | +--ro root-address inet:ipv4-address + | +--ro bindings + | +--ro opaque-type-lspid + | | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] + | | +--ro mldp-ext:recur-root-address inet:ip-address + | | +--ro mldp-ext:recur-rd route-distinguisher + | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | | +--ro mldp-ext:peer* [direction peer advertisement-type] + | | +--ro mldp-ext:direction ldp:downstream-upstream + | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | | +--ro mldp-ext:advertisement-type ldp:advertised-received + | | +--ro mldp-ext:label? rt-types:mpls-label + | | +--ro mldp-ext:mbb-role? enumeration + | | +--ro mldp-ext:mofrr-role? mofrr-role + | +--ro mldp-ext:opaque-type-transit + | | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] + | | +--ro mldp-ext:source-address inet:ip-address + | | +--ro mldp-ext:group-address inet:ip-address-no-zone + | | +--ro mldp-ext:rd route-distinguisher + | | +--ro mldp-ext:recur-root-address inet:ip-address + | | +--ro mldp-ext:recur-rd route-distinguisher + | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | | +--ro mldp-ext:peer* [direction peer advertisement-type] + | | +--ro mldp-ext:direction ldp:downstream-upstream + | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | | +--ro mldp-ext:advertisement-type ldp:advertised-received + | | +--ro mldp-ext:label? rt-types:mpls-label + | | +--ro mldp-ext:mbb-role? enumeration + | | +--ro mldp-ext:mofrr-role? mofrr-role + | +--ro mldp-ext:opaque-type-bidir + | +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] + | +--ro mldp-ext:rp inet:ip-address + | +--ro mldp-ext:group-address inet:ip-address-no-zone + | +--ro mldp-ext:rd route-distinguisher + | +--ro mldp-ext:recur-root-address inet:ip-address + | +--ro mldp-ext:recur-rd route-distinguisher + | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | +--ro mldp-ext:peer* [direction peer advertisement-type] + | +--ro mldp-ext:direction ldp:downstream-upstream + | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | +--ro mldp-ext:advertisement-type ldp:advertised-received + | +--ro mldp-ext:label? rt-types:mpls-label + | +--ro mldp-ext:mbb-role? enumeration + | +--ro mldp-ext:mofrr-role? mofrr-role + +--rw mldp-ext:ipv6 + +--ro mldp-ext:roots + +--ro mldp-ext:root* [root-address] + +--ro mldp-ext:root-address inet:ipv6-address + +--ro mldp-ext:is-self? boolean + +--ro mldp-ext:reachability* [address interface] + | +--ro mldp-ext:address inet:ipv6-address + | +--ro mldp-ext:interface if:interface-ref + | +--ro mldp-ext:peer? -> ../../../../../../../../ldp:peers/peer/lsr-id + +--ro mldp-ext:bindings + +--ro mldp-ext:opaque-type-lspid + | +--ro mldp-ext:fec-label* [lsp-id] + | +--ro mldp-ext:lsp-id uint32 + | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | +--ro mldp-ext:peer* [direction peer advertisement-type] + | | +--ro mldp-ext:direction ldp:downstream-upstream + | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | | +--ro mldp-ext:advertisement-type ldp:advertised-received + | | +--ro mldp-ext:label? rt-types:mpls-label + | | +--ro mldp-ext:mbb-role? enumeration + | | +--ro mldp-ext:mofrr-role? mofrr-role + | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] + | +--ro mldp-ext:recur-root-address inet:ip-address + | +--ro mldp-ext:recur-rd route-distinguisher + | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | +--ro mldp-ext:peer* [direction peer advertisement-type] + | +--ro mldp-ext:direction ldp:downstream-upstream + | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | +--ro mldp-ext:advertisement-type ldp:advertised-received + | +--ro mldp-ext:label? rt-types:mpls-label + | +--ro mldp-ext:mbb-role? enumeration + | +--ro mldp-ext:mofrr-role? mofrr-role + +--ro mldp-ext:opaque-type-transit + | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] + | +--ro mldp-ext:source-address inet:ip-address + | +--ro mldp-ext:group-address inet:ip-address-no-zone + | +--ro mldp-ext:rd route-distinguisher + | +--ro mldp-ext:recur-root-address inet:ip-address + | +--ro mldp-ext:recur-rd route-distinguisher + | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + | +--ro mldp-ext:peer* [direction peer advertisement-type] + | +--ro mldp-ext:direction ldp:downstream-upstream + | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + | +--ro mldp-ext:advertisement-type ldp:advertised-received + | +--ro mldp-ext:label? rt-types:mpls-label + | +--ro mldp-ext:mbb-role? enumeration + | +--ro mldp-ext:mofrr-role? mofrr-role + +--ro mldp-ext:opaque-type-bidir + +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] + +--ro mldp-ext:rp inet:ip-address + +--ro mldp-ext:group-address inet:ip-address-no-zone + +--ro mldp-ext:rd route-distinguisher + +--ro mldp-ext:recur-root-address inet:ip-address + +--ro mldp-ext:recur-rd route-distinguisher + +--ro mldp-ext:multipoint-type? mldp:multipoint-type + +--ro mldp-ext:peer* [direction peer advertisement-type] + +--ro mldp-ext:direction ldp:downstream-upstream + +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id + +--ro mldp-ext:advertisement-type ldp:advertised-received + +--ro mldp-ext:label? rt-types:mpls-label + +--ro mldp-ext:mbb-role? enumeration + +--ro mldp-ext:mofrr-role? mofrr-role Figure 6 5.3. Derived states Following are main areas for which mLDP operational derived state is defined: o Root @@ -751,41 +732,40 @@ LSP setup. Similarly, when protection mechanisms like MBB or MoFRR are in place, the path designation as active/standby or primary/ backup is also done on per LSP basis. It is to be noted that a given root can be shared amongst multiple P2MP and/or MP2MP LSPs. Moreover, an LSP can be signaled to more than one root for RNR purposes. The following diagram illustrates a root database on a branch/transit LSR: - root 1.1.1.1: + root 203.0.113.1: path1: - RIB: GigEthernet 1/0, 12.1.0.2; - LDP: peer 192.168.0.1:0 + RIB: GigEthernet 1/0, 198.51.100.1; + LDP: peer 192.0.2.1:0 path2: - RIB: GigEthernet 2/0, 12.2.0.2; - LDP: peer 192.168.0.3:0 + RIB: GigEthernet 2/0, 198.51.100.16; + LDP: peer 192.0.2.2:0 - root 2.2.2.2: + root 203.0.113.2: path1: - RIB: 3.3.3.3; (NOTE: This is a recursive path) - LDP: peer 192.168.0.3:0 (NOTE: T-mLDP peer) + RIB: 198.51.100.100; (NOTE: This is a recursive path) + LDP: peer 192.0.2.100:0 (NOTE: T-mLDP peer) - root 9.9.9.9: - . . . . + root . . . . Figure 7 A root entry on a root LSR itself will be presented as follows: - root 9.9.9.9: + root 203.0.113.10: is-self Figure 8 5.3.2. Bindings state Binding state provides information on mLDP FEC-label bindings for both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding derived state is presented in a FEC-centric view per address-family, and provides information on both inbound (received) and outbound @@ -797,35 +777,34 @@ and MoFRR (primary or backup). Following captures a high level tree hierarchy for mLDP bindings state: +--rw mpls-ldp! +--rw global +--rw mldp +--rw address-families +--rw ipv4 (or ipv6) - +--ro state +--ro roots +--ro root* [root-address] +--ro .... +--ro bindings +--ro opaque-type-xxx | +--ro fec-label* [type-specific-key] | +--ro some_key_1 ... | +--ro some_key_2 ... | +--ro multipoint-type? multipoint-type | +--ro peer* [direction peer advertisement-type] | | +--ro direction ldp:downstream-upstream | | +--ro peer leafref | | +--ro advertisement-type ldp:advertised-received - | | +--ro label? rt-types:mpls-label + | | +--ro label? mpls:mpls-label | | +--ro mbb-role? enumeration | | +--ro mldp-ext:mofrr-role? mofrr-role +--ro opaque-type-yyy | +--ro fec-label* [type-specific-key] | +--ro some_key_1 ... ... Figure 9 mLDP binding state is organized and presented per root address, and @@ -851,49 +830,49 @@ opaque types as defined in [RFC6512] o In case of a recursive FEC, the address-family of the recur-root- address could be different than the address-family of the root address of original encapsulated MP FEC The following diagram illustrates the FEC-label binding information structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ transit LSR: - FEC (root 2.2.2.2, S=192.168.1.1, G=224.1.1.1): + FEC (root 203.0.113.1, S=198.51.100.1, G=224.1.1.1): type: p2mp upstream: advertised: - peer 192.168.0.1:0, label 16000 (local) + peer 192.0.2.1:0, label 16000 (local) downstream: received: - peer 192.168.0.2:0, label 17000 (remote) - peer 192.168.0.3:0, label 18000 (remote) + peer 192.0.2.2:0, label 17000 (remote) + peer 192.0.2.3:0, label 18000 (remote) Figure 10 The following diagram illustrates the FEC-label binding information structure for a similar MP2MP LSP on a branch/transit LSR: - FEC (root 2.2.2.2, RP=192.168.9.9, G=224.1.1.1): + FEC (root 203.0.113.2, RP=198.51.100.2, G=224.1.1.1): type: mp2mp upstream: advertised: - peer 192.168.0.1:0, label 16000 (local) + peer 192.0.2.1:0, label 16000 (local) received: - peer 192.168.0.1:0, label 17000 (remote) + peer 192.0.2.1:0, label 17000 (remote) downstream: advertised: - peer 192.168.0.2:0, label 16001 (local), MBB role=active - peer 192.168.0.3:0, label 16002 (local), MBB role=standby + peer 192.0.2.2:0, label 16001 (local), MBB role=active + peer 192.0.2.3:0, label 16002 (local), MBB role=standby received: - peer 192.168.0.2:0, label 17001 (remote) - peer 192.168.0.3:0, label 18001 (remote) + peer 192.0.2.2:0, label 17001 (remote) + peer 192.0.2.3:0, label 18001 (remote) Figure 11 5.3.3. Capabilities state Like LDP, mLDP capabilities state comprise two types of information: o global: augments ldp:global/ldp:state/ldp:capability. o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability @@ -905,90 +884,114 @@ 6.1. Base Following is a simplified graphical representation of the base data model for mLDP notifications: module: ietf-mpls-mldp notifications: +---n mpls-mldp-fec-event +--ro event-type? ldp:oper-status-event-type - +--ro tree-type? multipoint-type - +--ro root? inet:ip-address - +--ro (lsp-key-type)? - +--:(lsp-id) - +--ro lsp-id? uint16 + +--ro (opaque-type)? + +--:(opaque-type-lspid) + +--ro opaque-type-lspid + +--ro root-address? inet:ip-address + +--ro lsp-id? uint32 + +--ro multipoint-type? multipoint-type + +--ro mldp-ext:recursive-fec + +--ro mldp-ext:recur-root-address? inet:ip-address + +--ro mldp-ext:recur-rd? route-distinguisher + +--ro mldp-ext:multipoint-type? mldp:multipoint-type Figure 12 6.2. Extended Following is a simplified graphical representation of the extended data model for mLDP notifications: module: ietf-mpls-mldp - - augment /mldp:mpls-mldp-fec-event/mldp:lsp-key-type: - +--:(source-group-based) - +---- source-address? inet:ip-address - +---- group-address? inet:ip-address +notifications: + +---n mpls-mldp-fec-event + +--ro event-type? ldp:oper-status-event-type + +--ro (opaque-type)? + +--:(mldp-ext:opaque-type-transit) + | +--ro mldp-ext:opaque-type-transit + | +--ro mldp-ext:root-address? inet:ip-address + | +--ro mldp-ext:source-address? inet:ip-address + | +--ro mldp-ext:group-address? inet:ip-address-no-zone + | +--ro mldp-ext:rd? route-distinguisher + | +--ro mldp-ext:recur-root-address? inet:ip-address + | +--ro mldp-ext:recur-rd? route-distinguisher + | +--ro mldp-ext:multipoint-type? mldp:multipoint-type + +--:(mldp-ext:opaque-type-bidir) + +--ro mldp-ext:opaque-type-bidir + +--ro mldp-ext:root-address? inet:ip-address + +--ro mldp-ext:rp? inet:ip-address + +--ro mldp-ext:group-address? inet:ip-address-no-zone + +--ro mldp-ext:rd? route-distinguisher + +--ro mldp-ext:recur-root-address? inet:ip-address + +--ro mldp-ext:recur-rd? route-distinguisher + +--ro mldp-ext:multipoint-type? mldp:multipoint-type Figure 13 7. Actions Currently, no RPCs/actions are defined for mLDP. 8. Open Items Following is a list of open items that are to be discussed and addressed in future revisions of this document: - o Align operational state modeling with other routing protocols and - [I-D.openconfig-netmod-opstate] - o Specify default values for configuration parameters o Extend the "Configured Leaf LSPs" for various type of opaque-types o Extend mLDP notifications for other types of opaque values as well o Make MP LSP configuration and state model consistent 9. YANG Specification Following is the actual YANG definition (module) for mLDP constructs defined earlier in the document. 9.1. Base - file "ietf-mpls-mldp@2017-03-12.yang" + file "ietf-mpls-mldp@2017-10-19.yang" module ietf-mpls-mldp { namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; prefix "mldp"; import ietf-inet-types { prefix "inet"; } + import ietf-interfaces { + prefix "if"; + } + + import ietf-mpls-ldp { + prefix "ldp"; + } + import ietf-routing { prefix "rt"; } + import ietf-routing-types { prefix "rt-types"; } - import ietf-mpls-ldp { - prefix "ldp"; - } - organization "IETF MPLS Working Group"; contact "WG Web: WG List: WG Chair: Loa Andersson WG Chair: Ross Callon @@ -1013,26 +1016,27 @@ Editor: Himanshu Shah "; description "This YANG module defines the essential components for the management of Multi-Protocol Label Switching (MPLS) Multipoint LDP (mLDP)."; - revision 2017-03-12 { + revision 2017-10-19 { description "Initial revision."; reference "RFC XXXX: YANG Data Model for MPLS mLDP."; } + /* * Typedefs */ typedef multipoint-type { type enumeration { enum p2mp { description "Point to multipoint."; } enum mp2mp { description "Multipoint to multipoint."; @@ -1083,43 +1085,51 @@ "Switchover delay in seconds."; } leaf timeout { type uint16; units seconds; description "Timeout in seconds."; } } } // mldp-capabilities - grouping mldp-fec-event { description "A mLDP FEC event."; - leaf tree-type { - type multipoint-type; + choice opaque-type { description - "p2mp or mp2mp."; - } - leaf root { + "The type of opaque value element."; + case opaque-type-lspid { + container opaque-type-lspid { + description + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6388: Label Distribution Protocol + Extensions for Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + leaf root-address { type inet:ip-address; description "Root address."; } - choice lsp-key-type { - description - "LSP ID based or source-group based ."; - case lsp-id { leaf lsp-id { - type uint16; + type uint32; + description "ID to identify the LSP."; + } + leaf multipoint-type { + type multipoint-type; description - "ID to identify the LSP."; + "The type of mutipoint, p2mp or mp2mp."; } + } // container opaque-type-lspid } } } // mldp-fec-event grouping mldp-binding-label-peer-state-attributes { description "mLDP label binding per peer attributes."; leaf direction { type ldp:downstream-upstream; description @@ -1162,106 +1173,47 @@ } } description "The MBB status of this LSP."; } } // mldp-binding-label-peer-state-attributes grouping mldp-binding-label-state-attributes { description "mLDP label binding attributes."; - - leaf multipoint-type { - type multipoint-type; - description - "The type of mutipoint, p2mp or mp2mp."; - } list peer { key "direction peer advertisement-type"; description "List of advertised and received peers."; uses mldp-binding-label-peer-state-attributes; } // peer } // mldp-binding-label-state-attributes - grouping mldp-ipv4-configured-lsp-roots { - description - "mLDP IPv4 roots containers."; - - container roots { - description - "Configured IPv4 multicast LSPs."; - list root { - key "root-address"; - description - "List of roots for configured multicast LSPs."; - - leaf root-address { - type inet:ipv4-address; - description - "Root address."; - } - - choice lsp-key-type { - description - "LSP ID based or source-group based ."; - case lsp-id { - container opaque-type-lspid { - description - "The type of opaque value element is - the generic LSP identifier"; - list lsp { - key "lsp-id"; - description - "List of LSPs."; - leaf lsp-id { - type uint16; - description "ID to identify the LSP."; - } - } // list lsp - } // opaque-type-lspid - - } // case lsp-id - } // choice lsp-key-type - } // list root - } // roots - } // mldp-ipv4-configured-lsp-roots - /* - * Configuration data nodes + * Configuration data and operational state data nodes */ augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability" { + + "ldp:mpls-ldp/ldp:global/ldp:capability" { description "Augmentation for MLDP global capability."; container mldp { description "Multipoint capabilities."; uses mldp-capabilities; } } /* * Operational state data nodes */ augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability" { - description "Augmentation for MLDP global capability."; - container mldp { - description - "Multipoint capabilities."; - uses mldp-capabilities; - } - } - - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/" - + "ldp:received-peer-state/ldp:capability" { + + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" + + "ldp:capability" { description "Augmentation for MLDP received peer state capability."; container mldp { description "Multipoint capabilities."; container p2mp { description "Configure point-to-multipoint capability."; leaf enable { @@ -1298,53 +1249,35 @@ augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global" { description "MLDP global augmentation."; container mldp { description "mLDP attributes at per instance level. Defining attributes here does not enable any MP capabilities. MP capabilities need to be explicitly enabled under container capability."; - container config { - description - "Configuration data."; - leaf enable { - type boolean; - description - "Enable mLDP."; - } - } - container state { - config false; - description - "Operational state data."; leaf enable { type boolean; description "Enable mLDP."; } - } container address-families { description "Per-af params."; container ipv4 { description "IPv4 information."; - container state { - config false; - description - "Operational state data."; - container roots { + config false; description "IPv4 multicast LSP roots."; list root { key "root-address"; description "List of roots for configured multicast LSPs."; leaf root-address { type inet:ipv4-address; description @@ -1361,28 +1294,28 @@ key "address interface"; description "A next hop for reachability to root, as a RIB view."; leaf address { type inet:ipv4-address; description "The next hop address to reach root."; } leaf interface { - type ldp:mpls-interface-ref; + type if:interface-ref; description "Interface connecting to next-hop."; } leaf peer { type leafref { path - "../../../../../../../../../ldp:peers/" + "../../../../../../../../ldp:peers/" + "ldp:peer/ldp:lsr-id"; } description "LDP peer from which this next hop can be reached."; } } container bindings { description @@ -1398,41 +1331,66 @@ Paths."; list fec-label { key "lsp-id"; description "List of FEC to label bindings."; leaf lsp-id { type uint32; description "ID to identify the LSP."; } + leaf multipoint-type { + type multipoint-type; + description + "The type of mutipoint, p2mp or mp2mp."; + } uses mldp-binding-label-state-attributes; } // fec-label } // opaque-type-lspid } // bindings } // list root } // roots - } // state + container configured-leaf-lsps { description "Configured multicast LSPs."; - - container p2mp { + container opaque-type-lspid { description - "Configured point-to-multipoint LSPs."; - uses mldp-ipv4-configured-lsp-roots; + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6388: Label Distribution Protocol + Extensions for Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + list fec-label { + key + "root-address lsp-id"; + description + "List of FEC to label bindings."; + leaf root-address { + type inet:ipv4-address; + description + "Root address."; } - container mp2mp { + leaf lsp-id { + type uint32; + description "ID to identify the LSP."; + } + leaf multipoint-type { + type multipoint-type; description - "Configured multipoint-to-multipoint LSPs."; - uses mldp-ipv4-configured-lsp-roots; + "The type of mutipoint, p2mp or mp2mp."; } + + } // fec-label + } // opaque-type-lspid } // configured-leaf-lsps } // ipv4 } // list address-family } // mldp } /* * Notifications */ notification mpls-mldp-fec-event { @@ -1445,36 +1403,41 @@ uses mldp-fec-event; } } Figure 14 9.2. Extended - file "ietf-mpls-mldp-extended@2017-03-12.yang" + file "ietf-mpls-mldp-extended@2017-10-19.yang" module ietf-mpls-mldp-extended { namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended"; prefix "mldp-ext"; + import ietf-inet-types { prefix "inet"; } + import ietf-interfaces { + prefix "if"; + } + import ietf-routing { prefix "rt"; } - import ietf-mpls-ldp { prefix "ldp"; } + import ietf-mpls-ldp-extended { prefix "ldp-ext"; } import ietf-mpls-mldp { prefix "mldp"; } organization "IETF MPLS Working Group"; @@ -1507,21 +1470,21 @@ Editor: Himanshu Shah "; description "This YANG module defines the essential components for the management of Multi-Protocol Label Switching (MPLS) Multipoint LDP (mLDP)."; - revision 2017-03-12 { + revision 2017-10-19 { description "Initial revision."; reference "RFC XXXX: YANG Data Model for MPLS mLDP."; } /* * Features */ feature capability-mldp-hsmp { @@ -1577,25 +1539,20 @@ status of a LSP."; } /* * Groupings */ grouping mldp-ext-binding-label-state-attributes { description "mLDP label binding attributes."; - leaf multipoint-type { - type mldp:multipoint-type; - description - "The type of mutipoint, p2mp or mp2mp."; - } list peer { key "direction peer advertisement-type"; description "List of advertised and received peers."; uses mldp:mldp-binding-label-peer-state-attributes; leaf mofrr-role { when "../direction = 'upstream'" { description "For upstream."; @@ -1737,221 +1693,237 @@ description "Recursive FEC policy."; leaf prefix-list { type ldp-ext:prefix-list-ref; description "Enables recursive FEC for the specified access list."; } } // recursive-for } // mldp-ext-per-af-config-attibutes + grouping recursive-fec-attibutes { + description + "mLDP recursive FEC attibutes."; + leaf recur-root-address { + type inet:ip-address; + description + "Recursive root address."; + reference + "RFC6512: Using Multipoint LDP When the + Backbone Has No Route to the Root"; + } + leaf recur-rd { + type route-distinguisher; + description + "Route Distinguisher in the VPN-Recursive + Opaque Value."; + reference + "RFC6512: Using Multipoint LDP When the + Backbone Has No Route to the Root"; + } + leaf multipoint-type { + type mldp:multipoint-type; + description + "The type of mutipoint, p2mp or mp2mp."; + } + } // recursive-fec-attibutes + /* - * Configuration data nodes + * Configuration data and operational state data nodes */ - // Global capability config + // Global capability augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability/" - + "mldp:mldp" { + + "ldp:mpls-ldp/ldp:global/ldp:capability/mldp:mldp" { description "Augmentation for MLDP global capability."; uses mldp-ext-capabilities; } - // Peer capability config + // Peer capability augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/ldp:capability" { + + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability" { description "Augmentation for MLDP peer capability."; container mldp { if-feature per-peer-capability; description "mLDP capabilities."; uses mldp:mldp-capabilities; } } // IPv4 config augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" + "mldp:ipv4" { description "Augmentation for MLDP IPv4 configuration."; - container config { - description - "Configuration data."; uses mldp-ext-per-af-config-attibutes; } - } // IPv4 configured-leaf-lsps config augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:configured-leaf-lsps/mldp:p2mp/mldp:roots/" - + "mldp:root/mldp:lsp-key-type" { + + "mldp:ipv4/mldp:configured-leaf-lsps/mldp:opaque-type-lspid/" + + "mldp:fec-label" { + description + "Augmentation for MLDP IPv4 configured-leaf-lsps + configuration for opaque-type-lspid."; + list recursive-fec { + key + "recur-root-address recur-rd"; + description + "List of recursive opaque values."; + uses recursive-fec-attibutes; + } // fec-label + } + + augment "/rt:routing/rt:control-plane-protocols/" + + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" + + "mldp:ipv4/mldp:configured-leaf-lsps" { description "Augmentation for MLDP IPv4 configured-leaf-lsps configuration."; - case source-group { + container opaque-type-transit { description "The type of opaque value element is the transit IPv4 source."; - - list lsp { - key "source-address group-address"; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched Paths."; + list fec-label { + key + "root-address source-address group-address " + + "rd recur-root-address recur-rd"; description - "List of LSPs."; - leaf source-address { + "List of FEC to label bindings."; + leaf root-address { type inet:ipv4-address; description + "Root address."; + } + leaf source-address { + type inet:ip-address; + description "Source address."; } leaf group-address { - type inet:ipv4-address-no-zone; + type inet:ip-address-no-zone; description "Group address."; } - } - } - } // case source-group - } - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:configured-leaf-lsps/mldp:mp2mp/mldp:roots/" - + "mldp:root/mldp:lsp-key-type" { + leaf rd { + type route-distinguisher; description - "Augmentation for MLDP IPv4 configured-leaf-lsps - configuration."; - case source-group { - container opaque-type-transit { + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; + } + uses recursive-fec-attibutes; + } // fec-label + } // opaque-type-transit + + container opaque-type-bidir { description - "The type of opaque value element is the transit IPv4 - source."; - list lsp { - key "source-address group-address"; + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + list fec-label { + key + "root-address rp group-address rd recur-root-address " + + "recur-rd"; description - "List of LSPs."; - leaf source-address { + "List of FEC to label bindings."; + leaf root-address { type inet:ipv4-address; description - "Source address."; + "Root address."; + } + leaf rp { + type inet:ip-address; + description + "RP address."; } leaf group-address { - type inet:ipv4-address-no-zone; + type inet:ip-address-no-zone; description "Group address."; } + leaf rd { + type route-distinguisher; + description + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; } + uses recursive-fec-attibutes; + } // fec-label + } // opaque-type-bidir } - } // case source-group - } + // IPv6 config augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" + "ipv6" { description "Augmentation for MLDP IPv4 configuration."; - container config { - description - "Configuration data."; uses mldp-ext-per-af-config-attibutes; } - } - // Global forwarding-nexthop config + // Global forwarding-nexthop augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/" - + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family/" - + "ldp-ext:config" { + + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family" { description "Augmentation for MLDP nexthop forwarding interface."; leaf mldp-disable { type boolean; description "Disable mLDP forwarding on the interface."; } } /* * Operational state data nodes */ - // Global capability state - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability/" - + "mldp:mldp" { - description "Augmentation for MLDP global capability."; - - uses mldp-ext-capabilities; - } - - // Peer capability state - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:capability" { - description "Augmentation for MLDP peer capability."; - container mldp { - description - "mLDP capabilities."; - uses mldp:mldp-capabilities; - } - } - // IPv4 state - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:state" { - description "Augmentation for MLDP IPv4 state."; - - uses mldp-ext-per-af-config-attibutes; - } - // IPv4 state for per peer bindings augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings/" + + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" + "mldp:opaque-type-lspid/mldp:fec-label/mldp:peer" { description "Augmentation for MLDP IPv4 state."; leaf mofrr-role { when "../mldp:direction = 'upstream'" { description "For upstream."; + } type mofrr-role; description "The MOFRR status of this LSP."; } } - // IPv6 state - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "ipv6/state" { - description "Augmentation for MLDP IPv6 state."; - - uses mldp-ext-per-af-config-attibutes; - } - - // Global forwarding-nexthop config - augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/" - + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family/" - + "ldp-ext:state" { - description - "Augmentation for MLDP nexthop forwarding interface."; - leaf mldp-disable { - type boolean; - description - "Disable mLDP forwarding on the interface."; - } - - } - // Peer capability state augment "/rt:routing/rt:control-plane-protocols/" - + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/" - + "ldp:received-peer-state/ldp:capability/mldp:mldp" { + + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" + + "ldp:capability/mldp:mldp" { description "Augmentation for MLDP received peer state capability."; container hub-and-spoke { description "Configure hub-and-spoke-multipoint capability."; reference "RFC7140: LDP Extensions for Hub and Spoke Multipoint Label Switched Path"; leaf enable { type boolean; @@ -1974,27 +1946,26 @@ type boolean; description "Merge Point capable for MP LSP node protection."; } // merge-point } // node-protection } // IPv4 bindings state augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings" { + + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings" { description "Augmentation for MLDP IPv4 bindings."; container opaque-type-transit { description "The type of opaque value element is the transit IPv4 source."; - reference "RFC6826: Multipoint LDP In-Band Signaling for Point-to-Multipoint and Multipoint-to-Multipoint Label Switched Paths."; list fec-label { key "source-address group-address " + "rd recur-root-address recur-rd"; description "List of FEC to label bindings."; @@ -2011,39 +1982,22 @@ leaf rd { type route-distinguisher; description "Route Distinguisher."; reference "RFC7246: Multipoint Label Distribution Protocol In-Band Signaling in a Virtual Routing and Forwarding (VRF) Table Context."; } - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; - } // fec-label } // opaque-type-transit container opaque-type-bidir { description "The type of opaque value element is the generic LSP identifier"; reference "RFC6826: Multipoint LDP In-Band Signaling for Point-to-Multipoint and @@ -2067,46 +2021,30 @@ leaf rd { type route-distinguisher; description "Route Distinguisher."; reference "RFC7246: Multipoint Label Distribution Protocol In-Band Signaling in a Virtual Routing and Forwarding (VRF) Table Context."; } - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; } // fec-label } // opaque-type-bidir } // IPv6 bindings state augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "ipv6/state/roots/root/bindings" { + + "ipv6/roots/root/bindings" { description "Augmentation for MLDP IPv6 bindings."; container opaque-type-transit { config false; description "The type of opaque value element is the transit IPv6 source."; reference "RFC6826: Multipoint LDP In-Band Signaling for Point-to-Multipoint and Multipoint-to-Multipoint Label Switched @@ -2130,37 +2068,21 @@ leaf rd { type route-distinguisher; description "Route Distinguisher."; reference "RFC7246: Multipoint Label Distribution Protocol In-Band Signaling in a Virtual Routing and Forwarding (VRF) Table Context."; } - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; } // fec-label } // opaque-type-transit container opaque-type-bidir { config false; description "The type of opaque value element is the generic LSP identifier"; reference @@ -2186,127 +2108,72 @@ leaf rd { type route-distinguisher; description "Route Distinguisher."; reference "RFC7246: Multipoint Label Distribution Protocol In-Band Signaling in a Virtual Routing and Forwarding (VRF) Table Context."; } - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; } // fec-label } // opaque-type-bidir } // IPv4 bindings opaque-type-lspid state augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "mldp:ipv4/mldp:state/mldp:roots/mldp:root/mldp:bindings/" + + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" + "mldp:opaque-type-lspid/mldp:fec-label" { description "Augmentation for MLDP IPv4 bindings with opaque type LSP ID."; list recursive-fec { key "recur-root-address recur-rd"; description "List of recursive opaque values."; - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; } // fec-label } // IPv6 bindings opaque-type-lspid state augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" - + "ipv6/state/roots/root/bindings/opaque-type-lspid/" - + "fec-label" { + + "ipv6/roots/root/bindings/opaque-type-lspid/fec-label" { description "Augmentation for MLDP IPv6 bindings with opaque type LSP ID."; list recursive-fec { - key - "recur-root-address recur-rd"; + key "recur-root-address recur-rd"; config false; description "List of recursive opaque values."; - leaf recur-root-address { - type inet:ip-address; - description - "Recursive root address."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - } - leaf recur-rd { - type route-distinguisher; - description - "Route Distinguisher in the VPN-Recursive - Opaque Value."; - reference - "RFC6512: Using Multipoint LDP When the - Backbone Has No Route to the Root"; - - } + uses recursive-fec-attibutes; uses mldp-ext-binding-label-state-attributes; } // fec-label } /* * Per AF augmentation */ // IPv6 augmentation augment "/rt:routing/rt:control-plane-protocols/" + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families" { description "Augmentation for MLDP IPv6 address family."; container ipv6 { description "IPv6 information."; - container state { - config false; - description - "Operational state data."; - container roots { + config false; description "IPv6 multicast LSP roots."; list root { key "root-address"; description "List of roots for configured multicast LSPs."; leaf root-address { type inet:ipv6-address; description @@ -2323,28 +2190,28 @@ key "address interface"; description "A next hop for reachability to root, as a RIB view."; leaf address { type inet:ipv6-address; description "The next hop address to reach root."; } leaf interface { - type ldp:mpls-interface-ref; + type if:interface-ref; description "Interface connecting to next-hop."; } leaf peer { type leafref { path - "../../../../../../../../../ldp:peers/" + "../../../../../../../../ldp:peers/" + "ldp:peer/ldp:lsr-id"; } description "LDP peer from which this next hop can be reached."; } } container bindings { description @@ -2360,71 +2227,268 @@ Paths."; list fec-label { key "lsp-id"; description "List of FEC to label bindings."; leaf lsp-id { type uint32; description "ID to identify the LSP."; } + leaf multipoint-type { + type mldp:multipoint-type; + description + "The type of mutipoint, p2mp or mp2mp."; + } + uses mldp-ext-binding-label-state-attributes; } // fec-label + } // opaque-type-lspid } // bindings } // list root } // roots - } // state + container configured-leaf-lsps { description "Configured multicast LSPs."; - container p2mp { + container opaque-type-lspid { description - "Configured point-to-multipoint LSPs."; - uses mldp-ipv6-configured-lsp-roots; + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6388: Label Distribution Protocol + Extensions for Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + list fec-label { + key + "root-address lsp-id"; + description + "List of FEC to label bindings."; + leaf root-address { + type inet:ipv6-address; + description + "Root address."; } - container mp2mp { + leaf lsp-id { + type uint32; + description "ID to identify the LSP."; + } + leaf multipoint-type { + type mldp:multipoint-type; description - "Configured multipoint-to-multipoint LSPs."; - uses mldp-ipv6-configured-lsp-roots; + "The type of mutipoint, p2mp or mp2mp."; + } + list recursive-fec { + key + "recur-root-address recur-rd"; + description + "List of recursive opaque values."; + uses recursive-fec-attibutes; + } // fec-label + } // fec-label + } // opaque-type-lspid + + container opaque-type-transit { + description + "The type of opaque value element is the transit IPv4 + source."; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched Paths."; + list fec-label { + key + "root-address source-address group-address " + + "rd recur-root-address recur-rd"; + description + "List of FEC to label bindings."; + leaf root-address { + type inet:ipv6-address; + description + "Root address."; + } + leaf source-address { + type inet:ip-address; + description + "Source address."; + } + leaf group-address { + type inet:ip-address-no-zone; + description + "Group address."; + } + leaf rd { + type route-distinguisher; + description + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; + } + uses recursive-fec-attibutes; + } // fec-label + } // opaque-type-transit + + container opaque-type-bidir { + description + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + list fec-label { + key + "root-address rp group-address rd recur-root-address " + + "recur-rd"; + description + "List of FEC to label bindings."; + leaf root-address { + type inet:ipv6-address; + description + "Root address."; + } + leaf rp { + type inet:ip-address; + description + "RP address."; + } + leaf group-address { + type inet:ip-address-no-zone; + description + "Group address."; + } + leaf rd { + type route-distinguisher; + description + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; } + uses recursive-fec-attibutes; + } // fec-label + } // opaque-type-bidir } // configured-leaf-lsps } // ipv6 } /* * Global augmentation */ /* * Notifications */ - augment "/mldp:mpls-mldp-fec-event/mldp:lsp-key-type" { - description ""; - case source-group-based { + + augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type/" + + "mldp:opaque-type-lspid/mldp:opaque-type-lspid" { + description + "Augmentation for MLDP notification for opaque-type-lspid."; + container recursive-fec { + description + "Container of recursive opaque values."; + uses recursive-fec-attibutes; + } // fec-label + } + + augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type" { + description + "Augmentation for MLDP notification."; + case opaque-type-transit { + container opaque-type-transit { + description + "The type of opaque value element is the transit IPv4 + source."; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched Paths."; + leaf root-address { + type inet:ip-address; + description + "Root address."; + } leaf source-address { type inet:ip-address; description - "LSP source address."; + "Source address."; } leaf group-address { + type inet:ip-address-no-zone; + description + "Group address."; + } + leaf rd { + type route-distinguisher; + description + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; + } + uses recursive-fec-attibutes; + } // opaque-type-transit + } // opaque-type-transit + + case opaque-type-bidir { + container opaque-type-bidir { + description + "The type of opaque value element is + the generic LSP identifier"; + reference + "RFC6826: Multipoint LDP In-Band Signaling for + Point-to-Multipoint and + Multipoint-to-Multipoint Label Switched + Paths."; + leaf root-address { type inet:ip-address; description - "Multicast group address."; + "Root address."; } - } // case source-group + leaf rp { + type inet:ip-address; + description + "RP address."; + } + leaf group-address { + type inet:ip-address-no-zone; + description + "Group address."; + } + leaf rd { + type route-distinguisher; + description + "Route Distinguisher."; + reference + "RFC7246: Multipoint Label Distribution + Protocol In-Band Signaling in a Virtual + Routing and Forwarding (VRF) Table + Context."; + } + uses recursive-fec-attibutes; + } // opaque-type-bidir + } // opaque-type-bidir } } - Figure 15 10. Security Considerations This mLDP model shares the same security considerations as captured in LDP Yang model [I-D.ietf-mpls-ldp-yang]. 11. IANA Considerations This document does not extend mLDP protocol specifiction and hence @@ -2431,123 +2495,90 @@ there are no IANA considerations. Note to the RFC Editor: Please remove IANA section before the publication. 12. Acknowledgments The authors would like to acknowledge Ladislav Lhotka for his useful comments as the YANG Doctor. -13. References - -13.1. Normative References +13. Normative References [I-D.ietf-mpls-ldp-yang] Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. Shah, "YANG Data Model for MPLS LDP", draft-ietf-mpls-ldp- yang-02 (work in progress), September 2017. + [I-D.ietf-netmod-revised-datastores] + Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., + and R. Wilton, "Network Management Datastore + Architecture", draft-ietf-netmod-revised-datastores-06 + (work in progress), October 2017. + + [I-D.ietf-netmod-rfc6087bis] + Bierman, A., "Guidelines for Authors and Reviewers of YANG + Data Model Documents", draft-ietf-netmod-rfc6087bis-14 + (work in progress), September 2017. + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, - . - - [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., - "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, - October 2007, . - - [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. - Le Roux, "LDP Capabilities", RFC 5561, - DOI 10.17487/RFC5561, July 2009, - . - - [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for - the Network Configuration Protocol (NETCONF)", RFC 6020, - DOI 10.17487/RFC6020, October 2010, - . - - [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., - and A. Bierman, Ed., "Network Configuration Protocol - (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, - . + . [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. Thomas, "Label Distribution Protocol Extensions for Point- to-Multipoint and Multipoint-to-Multipoint Label Switched Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, - . + . [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, - November 2011, . + November 2011, . [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, "Using Multipoint LDP When the Backbone Has No Route to the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, - . - - [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration - Protocol (NETCONF) Access Control Model", RFC 6536, - DOI 10.17487/RFC6536, March 2012, - . + . [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. Napierala, "Multipoint LDP In-Band Signaling for Point-to- Multipoint and Multipoint-to-Multipoint Label Switched Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, - . + . [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP Multipoint Extensions on Targeted LDP Sessions", RFC 7060, DOI 10.17487/RFC7060, November 2013, - . + . [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP Extensions for Hub and Spoke Multipoint Label Switched Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, - . + . [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, W., Gulko, A., and J. Tantsura, "Multipoint Label Distribution Protocol In-Band Signaling in a Virtual Routing and Forwarding (VRF) Table Context", RFC 7246, DOI 10.17487/RFC7246, June 2014, - . + . [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, - . + . [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and Q. Zhao, "Multipoint LDP (mLDP) Node Protection", RFC 7715, DOI 10.17487/RFC7715, January 2016, - . - -13.2. Informative References - - [I-D.ietf-rtgwg-policy-model] - Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, - "Routing Policy Configuration Model for Service Provider - Networks", draft-ietf-rtgwg-policy-model-01 (work in - progress), April 2016. - - [I-D.iwijnand-mpls-mldp-multi-topology] - Wijnands, I. and K. Raza, "mLDP Extensions for Multi - Topology Routing", draft-iwijnand-mpls-mldp-multi- - topology-03 (work in progress), June 2013. - - [I-D.openconfig-netmod-opstate] - Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling - of Operational State Data in YANG", draft-openconfig- - netmod-opstate-01 (work in progress), July 2015. + . Appendix A. Additional Contributors Matthew Bocci Nokia matthew.bocci@nokia.com Authors' Addresses Kamran Raza