draft-ietf-mpls-mldp-yang-00.txt   draft-ietf-mpls-mldp-yang-01.txt 
MPLS Working Group K. Raza MPLS Working Group K. Raza
Internet-Draft S. Krishnaswamy Internet-Draft S. Krishnaswamy
Intended status: Standards Track Cisco Systems, Inc. Intended status: Standards Track Cisco Systems, Inc.
Expires: May 16, 2017 Expires: September 14, 2017
X. Liu X. Liu
Kuatro Technologies Jabil
S. Esale S. Esale
Juniper Networks Juniper Networks
X. Chen X. Chen
Huawei Technologies Huawei Technologies
Jeff Tantsura Jeff Tantsura
November 12, 2016 March 13, 2017
YANG Data Model for MPLS mLDP YANG Data Model for MPLS mLDP
draft-ietf-mpls-mldp-yang-00 draft-ietf-mpls-mldp-yang-01
Abstract Abstract
This document describes a YANG data model for Multi-Protocol Label This document describes a YANG data model for Multi-Protocol Label
Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The
mLDP data model augments the LDP data model. mLDP data model augments the LDP data model.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
skipping to change at page 1, line 43 skipping to change at page 1, line 43
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 16, 2017. This Internet-Draft will expire on September 14, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Specification of Requirements . . . . . . . . . . . . . . . . 3 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Specification of Requirements . . . . . . . . . . . . . . . . 4
4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 4 3.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2. mldp container . . . . . . . . . . . . . . . . . . . . . 6 3.2. FEC Types . . . . . . . . . . . . . . . . . . . . . . . . 6
4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 6 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 7
4.4. YANG tree . . . . . . . . . . . . . . . . . . . . . . . . 7 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 7
5. Operational State . . . . . . . . . . . . . . . . . . . . . . 9 4.2. mldp global container . . . . . . . . . . . . . . . . . . 9
5.1. Derived states . . . . . . . . . . . . . . . . . . . . . 13 4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 9
5.1.1. Root state . . . . . . . . . . . . . . . . . . . . . 13 4.4. Configuration Tree . . . . . . . . . . . . . . . . . . . 10
5.1.2. Bindings state . . . . . . . . . . . . . . . . . . . 14 4.4.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.3. Capabilities state . . . . . . . . . . . . . . . . . 18 4.4.2. Extended . . . . . . . . . . . . . . . . . . . . . . 11
6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 18 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 13
7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 14
9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 19 5.3. Derived states . . . . . . . . . . . . . . . . . . . . . 17
10. Security Considerations . . . . . . . . . . . . . . . . . . . 43 5.3.1. Root state . . . . . . . . . . . . . . . . . . . . . 18
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 5.3.2. Bindings state . . . . . . . . . . . . . . . . . . . 19
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 44 5.3.3. Capabilities state . . . . . . . . . . . . . . . . . 22
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 22
13.1. Normative References . . . . . . . . . . . . . . . . . . 44 6.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 22
13.2. Informative References . . . . . . . . . . . . . . . . . 45 6.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 22
Appendix A. Additional Contributors . . . . . . . . . . . . . . 46 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 23
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
Appendix A. Additional Contributors . . . . . . . . . . . . . . 56
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56
1. Introduction 1. Introduction
This document introduces a YANG data model for MPLS Multipoint Label This document introduces a YANG data model for MPLS Multipoint Label
Distribution Protocol (mLDP). The mLDP model being defined here is Distribution Protocol (mLDP). The mLDP model being defined here is
highly dependent on LDP YANG data model 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
[I-D.ietf-mpls-ldp-mldp-yang]. This implies that an opertor will and manage control plane for mLDP. For example, an operator would
need to use base LDP module to configure and manage control plane for enable LDP discovery on MPLS interface to establish LDP/mLDP peering
mLDP. For example, an operator would enable LDP discovery on MPLS on which mLDP bindings could be exchanged. Similarly, an operator
interface to establish LDP/mLDP peering on which mLDP bindings could could query state information for an LDP peer in order to verify
be exchanged. Similarly, an operator could query state information peering attributes etc.
for an LDP peer in order to verify peering attributes etc.
Moreover, it is important to note here that any assumptions made in Moreover, it is important to note here that any assumptions made in
the LDP model also hold true in this document, unless otherwise the LDP model also hold true in this document, unless otherwise
explicitly stated. explicitly stated.
This document specifies mLDP model under ietf-mpls-mldp that augments Like its parent LDP data model, this mLDP model also defines the
LDP model as defined under ietf-mpls-ldp following constructs for managing the mLDP protocol:
[I-D.ietf-mpls-ldp-mldp-yang]. Like its base LDP data model, this
model also defines the following constructs for managing the mLDP
protocol:
o Configuration o Configuration
o Operational State o Operational State
o Executables (Actions) o Executables (Actions)
o Notifications o Notifications
This document is organized to define the data model for each of the This document is organized to define the data model for each of the
above constructs in the sequence as listed above. 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
o Extended
The "base" category contains the basic and fundamental features that
are covered in mLDP base specification [RFC6388] alongwith few
significant extension like targeted mLDP [RFC7060], constituting the
minumum requirements for an mLDP deployment. Whereas, the "extended"
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].
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 2. Specification of Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. Overview 3. Overview
This document defines a new module named "ietf-mpls-mldp" for mLDP
YANG base data model that augments /rt:routing/rt:control-plane-
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 ...
|
notifications:
+--- n mpls-mldp-some_event
+--- n ...
Figure 1
3.1. Scope
Following are the main mLDP areas and features that are within the Following are the main mLDP areas and features that are within the
scope of this model: scope of this model:
o mLDP Base Specification [RFC6388] o Base:
o mLDP Recursive FEC [RFC6512] * mLDP Base Specification [RFC6388]
o Targeted mLDP [RFC7060] * Targeted mLDP [RFC7060]
o mLDP Fast-Reroute (FRR): * Configured Leaf LSPs (manually provisioned)
* Node Protection [RFC7715] o Extended:
* Multicast-only
o In-band Signaling: * mLDP Recursive FEC [RFC6512]
* mLDP Fast-Reroute (FRR):
* mLDP In-band Signaling [RFC6826] + Node Protection [RFC7715]
* mLDP In-band signaling in a VRF [RFC7246] + Multicast-only
* mLDP In-band Signaling with Wildcards [RFC7438] * In-band Signaling:
o Hub-and-Spoke Multipoint LSPs [RFC7140] + mLDP In-band Signaling [RFC6826]
o Configured Leaf LSPs (manually provisioned) + mLDP In-band signaling in a VRF [RFC7246]
+ mLDP In-band Signaling with Wildcards [RFC7438]
* Hub-and-Spoke Multipoint LSPs [RFC7140]
[Ed Note: Some of the topics in the above list are to be addressed/ [Ed Note: Some of the topics in the above list are to be addressed/
extended in a later revision of this document]. extended in a later revision of this document].
3.2. FEC Types
The FEC for Multipoint LSP is presented as (root-address, opaque-
type). The following is the table for various type of MP opaque
values with their keys, as covered in the configuration and state
model:
+-------------------------+--------------------+------------+
| Opaque Type | Key | RFC |
+-------------------------+--------------------+------------+
| Generic LSP Identifier | LSP Id | [RFC6388] |
| Transit IPv4 Source | Source, Group | [RFC6826] |
| Transit IPv6 Source | Source, Group | [RFC6826] |
| Transit IPv4 Bidir | RP, Group | [RFC6826] |
| Transit IPv6 Bidir | RP, Group | [RFC6826] |
| Transit VPNv4 Source | Source, Group, RD | [RFC7246] |
| Transit VPNv6 Source | Source, Group, RD | [RFC7246] |
| Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] |
| Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] |
| Recursive Opaque | Root | [RFC6512] |
| VPN-Recursive Opaque | Root, RD | [RFC6512] |
+-------------------------+--------------------+------------+
Table 1: MP Opaque Types and keys
It is to be noted that there are three basic types (LSP Id, Source,
and Bidir) and then there are variants (VPN, recursive, VPN-
recursive) on top of these basic types.
The "base" model includes only the "Generic LSP Identifier" opaque
type (for ipv4), while rest of the above types are covered by the
"extended" model.
4. Configuration 4. Configuration
4.1. Configuration Hierarchy 4.1. Configuration Hierarchy
In terms of overall configuration layout, following figure highlights Following is the high-level configuration organization for base and
extensions to LDP configuration model to incorporate mLDP: extended mLDP:
module: ietf-mpls-ldp
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+-- mpls-ldp +-- mpls-ldp
+-- global +-- global
| +-- ...
| +-- ...
| +-- mldp (augmentation)
| | +-- ...
| | +-- ...
| | +-- address-family* [afi]
| | +-- ...
| | +-- ...
| | +-- configured-leaf-lsps
| | +-- p2mp
| | | +-- ...
| | | +-- ...
| | +-- mp2mp
| | +-- ...
| | +-- ...
| +-- capability
| +-- ...
| +-- ...
| +-- mldp (augmentation)
| +-- ...
| +-- ...
+-- peers
+-- ... +-- ...
+-- ... +-- ...
+-- peer* +-- mldp
+-- ... | +-- ...
+-- ... | +-- ...
+-- capability | +-- address-families
+-- ... | +-- ipv4
+-- ... | | +-- ...
+-- mldp | | +-- mldp-ext: ...
+-- ... | | +-- ...
+-- ... | | +-- configured-leaf-lsps
| | +-- ...
| | +-- ...
| | +-- mldp-ext: ...
| | +-- ...
| +-- mldp-ext: ipv6
| +-- ...
| +-- ...
| +-- configured-leaf-lsps
| +-- ...
| +-- ...
+-- capability
| +-- mldp
| +-- ...
| +-- mldp-ext: ...
| +-- ...
+-- forwarding-nexthop
+--- interfaces
+--- interface* [name]
+--- mldp-ext: ...
Figure 1 Figure 2
From above hierarchy, we can categorize mLDP configuration parameters From above hierarchy, we can categorize mLDP configuration parameters
into two types: into two types:
o Parameters that are mLDP specific o Parameters that are mLDP specific
o Parameters that leverage/extend LDP containers and parameters o Parameters that leverage/extend LDP containers and parameters
Following subsections first describe mLDP specific configuration Following subsections first describe mLDP specific configuration
parameters, followed by those leveraging LDP. parameters, followed by those leveraging LDP. It is to be noted that
these parameters are defined under their respective base or extended
module as per their categorization.
4.2. mldp container 4.2. mldp global container
mldp container is an augmentation of LDP global container and holds mldp container is an augmentation of LDP global container and holds
the configuration related to items that are mLDP specific. The main the configuration related to items that are mLDP specific. The main
items under this container are: items under this container are:
o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp
container is enabled under LDP. Given that mLDP requires LDP container is enabled under LDP. Given that mLDP requires LDP
signalling, it is not sensible to allow disabling LDP control signalling, it is not sensible to allow disabling LDP control
plane under a (VRF) network-instance while requiring mLDP to be plane under a (VRF) network-instance while requiring mLDP to be
enabled for the same. However, if a user wants only to allow enabled for the same. However, if a user wants only to allow
skipping to change at page 7, line 35 skipping to change at page 10, line 35
(LDP/mLDP peer) for MP LSP programming. However, a configuration (LDP/mLDP peer) for MP LSP programming. However, a configuration
option is provided to allow mLDP to exclude a given interface from option is provided to allow mLDP to exclude a given interface from
such a selection. Note that such a configuration option will be such a selection. Note that such a configuration option will be
useful only when there are more than one interfaces available for useful only when there are more than one interfaces available for
the downstream selection. the downstream selection.
This goes without saying that mLDP configuration tree follows the This goes without saying that mLDP configuration tree follows the
same approach as LDP, where the tree comprise leafs for intended same approach as LDP, where the tree comprise leafs for intended
configuration. configuration.
4.4. YANG tree 4.4. Configuration Tree
The following figure captures the YANG tree for mLDP configuration.
module: ietf-mpls-mldp 4.4.1. Base
augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: Following is a simplified graphical representation of the data model
+--rw mldp {mldp}? for mLDP base configuration
+--rw config
| +--rw enable? boolean
+--rw address-family* [afi]
+--rw afi ldp:ldp-address-family
+--rw config
| +--rw multicast-only-frr {mldp-mofrr}?
| | +--rw prefix-list? ldp:prefix-list-ref
| +--rw recursive-fec
| +--rw prefix-list? ldp:prefix-list-ref
+--rw configured-leaf-lsps
+--rw p2mp
| +--rw roots-ipv4
| | +--rw root* [root-address]
| | +--rw root-address inet:ipv4-address
| | +--rw lsp* [lsp-id source-address group-address]
| | +--rw lsp-id uint16
| | +--rw source-address inet:ipv4-address
| | +--rw group-address inet:ipv4-address-no-zone
| +--rw roots-ipv6
| +--rw root* [root-address]
| +--rw root-address inet:ipv6-address
| +--rw lsp* [lsp-id source-address group-address]
| +--rw lsp-id uint16
| +--rw source-address inet:ipv6-address
| +--rw group-address inet:ipv6-address-no-zone
+--rw mp2mp
+--rw roots-ipv4
| +--rw root* [root-address]
| +--rw root-address inet:ipv4-address
| +--rw lsp* [lsp-id source-address group-address]
| +--rw lsp-id uint16
| +--rw source-address inet:ipv4-address
| +--rw group-address inet:ipv4-address-no-zone
+--rw roots-ipv6
+--rw root* [root-address]
+--rw root-address inet:ipv6-address
+--rw lsp* [lsp-id source-address group-address]
+--rw lsp-id uint16
+--rw source-address inet:ipv6-address
+--rw group-address inet:ipv6-address-no-zone
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:config/ldp:capability:
+--rw mldp +--rw mldp
+--rw p2mp +--rw p2mp
| +--rw enable? boolean | +--rw enable? boolean
+--rw mp2mp +--rw mp2mp
| +--rw enable? boolean | +--rw enable? boolean
+--rw make-before-break +--rw make-before-break
| +--rw enable? boolean +--rw enable? boolean
| +--rw switchover-delay? uint16 +--rw switchover-delay? uint16
| +--rw timeout? uint16 +--rw timeout? uint16
+--rw hub-and-spoke {capability-mldp-hsmp}?
augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global:
+--rw mldp
+--rw config
| +--rw enable? boolean | +--rw enable? boolean
+--rw node-protection {capability-mldp-node-protection}? +--rw address-families
+--rw plr? boolean +--rw ipv4
+--rw merge-point +--rw configured-leaf-lsps
+--rw enable? boolean +--rw p2mp
+--rw targeted-session-teardown-delay? uint16 | +--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
augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/ldp:interfaces/ldp:interface/ldp:address-family/ldp:config: Figure 3
+--rw mldp-disable? boolean {mldp}?
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
+--rw enable? boolean
+--rw targeted-session-teardown-delay? uint16
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:config/ldp:capability:
+--rw mldp {mldp}? +--rw mldp {per-peer-capability}?
+--rw p2mp +--rw p2mp
| +--rw enable? boolean | +--rw enable? boolean
+--rw mp2mp +--rw mp2mp
| +--rw enable? boolean | +--rw enable? boolean
+--rw make-before-break +--rw make-before-break
| +--rw enable? boolean +--rw enable? boolean
| +--rw switchover-delay? uint16 +--rw switchover-delay? uint16
| +--rw timeout? uint16 +--rw timeout? uint16
+--rw hub-and-spoke {capability-mldp-hsmp}?
| +--rw enable? boolean
+--rw node-protection {capability-mldp-node-protection}?
+--rw plr? boolean
+--rw merge-point
+--rw enable? boolean
+--rw targeted-session-teardown-delay? uint16
Figure 2 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:
+--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 5. Operational State
Operational state of mLDP can be queried and obtained from various Operational state of mLDP can be queried and obtained from various
read-only mdlp "state" containers that augment ldp state containers. read-only mdlp "state" containers that augment ldp state containers.
Please note this state tree refers both the configuration "applied" Please note this state tree refers both the configuration "applied"
state as well as the "derived" state related to the mLDP protocol. state as well as the "derived" state related to the mLDP protocol.
[Ed note: Future revision will realign] [Ed note: Future revision will realign]
5.1. Base
Following is a simplified graphical representation of the data model Following is a simplified graphical representation of the data model
for mLDP operational state: for mLDP base operational state:
module: ietf-mpls-mldp 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:
+--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: augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global:
+--rw mldp {mldp}? +--rw mldp
+--ro state +--ro state
| +--ro enable? boolean | +--ro enable? boolean
+--rw address-family* [afi] +--rw address-families
+--ro state +--rw ipv4
+--ro multicast-only-frr {mldp-mofrr}? +--ro state
| +--ro prefix-list? ldp:prefix-list-ref
+--ro recursive-fec
| +--ro prefix-list? ldp:prefix-list-ref
+--ro ipv4
| +--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 bindings
| +--ro opaque-type-lspid
| | +--ro fec-label* [root-address lsp-id recur-root-address recur-rd]
| | +--ro root-address inet:ipv4-address
| | +--ro lsp-id uint32
| | +--ro recur-root-address inet:ip-address
| | +--ro recur-rd route-distinguisher
| | +--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? mpls:mpls-label
| | +--ro mbb-role? enumeration
| | +--ro mofrr-role? enumeration
| +--ro opaque-type-transit
| | +--ro fec-label* [root-address source-address group-address ... ]
| | +--ro root-address inet:ipv4-address
| | +--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? multipoint-type
| | +--ro peer* [direction peer advertisement-type]
| | +--ro direction ldp:downstream-upstream
| | +--ro peer leafref
| | +--ro advertisement-type ldp:advertised-received
| | +--ro label? mpls:mpls-label
| | +--ro mbb-role? enumeration
| | +--ro mofrr-role? enumeration
| +--ro opaque-type-bidir
| +--ro fec-label* [root-address rp group-address ... ]
| +--ro root-address inet:ipv4-address
| +--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? multipoint-type
| +--ro peer* [direction peer advertisement-type]
| +--ro direction ldp:downstream-upstream
| +--ro peer leafref
| +--ro advertisement-type ldp:advertised-received
| +--ro label? mpls:mpls-label
| +--ro mbb-role? enumeration
| +--ro mofrr-role? enumeration
+--ro ipv6
+--ro roots +--ro roots
| +--ro root* [root-address] +--ro root* [root-address]
| +--ro root-address inet:ipv6-address +--ro root-address inet:ipv4-address
| +--ro is-self? boolean +--ro is-self? boolean
| +--ro reachability* [address interface] +--ro reachability* [address interface]
| +--ro address inet:ipv6-address | +--ro address inet:ipv4-address
| +--ro interface ldp:mpls-interface-ref | +--ro interface ldp:mpls-interface-ref
| +--ro peer? leafref | +--ro peer? leafref
+--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 advertisement-type ldp:advertised-received
+--ro label? rt-types:mpls-label
+--ro mbb-role? enumeration
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
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: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
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 bindings
+--ro opaque-type-lspid +--ro opaque-type-lspid
| +--ro fec-label* [root-address lsp-id recur-root-address recur-rd] | +--ro fec-label* [lsp-id]
| +--ro root-address inet:ipv6-address | +--ro lsp-id uint32
| +--ro lsp-id uint32 | +--ro multipoint-type? mldp:multipoint-type
| +--ro recur-root-address inet:ip-address
| +--ro recur-rd route-distinguisher
| +--ro multipoint-type? multipoint-type
| +--ro peer* [direction peer advertisement-type] | +--ro peer* [direction peer advertisement-type]
| +--ro direction ldp:downstream-upstream | | +--ro direction ldp:downstream-upstream
| +--ro peer leafref | | +--ro peer leafref
| +--ro advertisement-type ldp:advertised-received | | +--ro advertisement-type ldp:advertised-received
| +--ro label? mpls:mpls-label | | +--ro label? rt-types:mpls-label
| +--ro mbb-role? enumeration | | +--ro mbb-role? enumeration
| +--ro mofrr-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 opaque-type-transit
| +--ro fec-label* [root-address source-address group-address ... ] | +--ro fec-label* [source-address group-address rd recur-root-address recur-rd]
| +--ro root-address inet:ipv6-address
| +--ro source-address inet:ip-address | +--ro source-address inet:ip-address
| +--ro group-address inet:ip-address-no-zone | +--ro group-address inet:ip-address-no-zone
| +--ro rd route-distinguisher | +--ro rd route-distinguisher
| +--ro recur-root-address inet:ip-address | +--ro recur-root-address inet:ip-address
| +--ro recur-rd route-distinguisher | +--ro recur-rd route-distinguisher
| +--ro multipoint-type? multipoint-type | +--ro multipoint-type? mldp:multipoint-type
| +--ro peer* [direction peer advertisement-type] | +--ro peer* [direction peer advertisement-type]
| +--ro direction ldp:downstream-upstream | +--ro direction ldp:downstream-upstream
| +--ro peer leafref | +--ro peer leafref
| +--ro advertisement-type ldp:advertised-received | +--ro advertisement-type ldp:advertised-received
| +--ro label? mpls:mpls-label | +--ro label? rt-types:mpls-label
| +--ro mbb-role? enumeration | +--ro mbb-role? enumeration
| +--ro mofrr-role? enumeration | +--ro mofrr-role? mofrr-role
+--ro opaque-type-bidir +--ro opaque-type-bidir
+--ro fec-label* [root-address rp group-address ... ] +--ro fec-label* [rp group-address rd recur-root-address recur-rd]
+--ro root-address inet:ipv6-address
+--ro rp inet:ip-address +--ro rp inet:ip-address
+--ro group-address inet:ip-address-no-zone +--ro group-address inet:ip-address-no-zone
+--ro rd route-distinguisher +--ro rd route-distinguisher
+--ro recur-root-address inet:ip-address +--ro recur-root-address inet:ip-address
+--ro recur-rd route-distinguisher +--ro recur-rd route-distinguisher
+--ro multipoint-type? multipoint-type +--ro multipoint-type? mldp:multipoint-type
+--ro peer* [direction peer advertisement-type] +--ro peer* [direction peer advertisement-type]
+--ro direction ldp:downstream-upstream +--ro direction ldp:downstream-upstream
+--ro peer leafref +--ro peer leafref
+--ro advertisement-type ldp:advertised-received +--ro advertisement-type ldp:advertised-received
+--ro label? mpls:mpls-label +--ro label? rt-types:mpls-label
+--ro mbb-role? enumeration +--ro mbb-role? enumeration
+--ro mofrr-role? enumeration +--ro mofrr-role? mofrr-role
augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/ldp:interfaces/ldp:interface/ldp:address-family/ldp:state:
+--ro mldp-disable? boolean {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
+--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:state/ldp:capability:
+--ro mldp {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
+--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:state/ldp:received-peer-state/ldp:capability:
+--ro mldp {mldp}?
+--ro p2mp
| +--ro enable? boolean
+--ro mp2mp
| +--ro enable? boolean
+--ro make-before-break
| +--ro enable? boolean
+--ro hub-and-spoke
| +--ro enable? boolean
+--ro node-protection
+--ro plr? boolean
+--ro merge-point? boolean
Figure 3 Figure 6
5.1. Derived states 5.3. Derived states
Following are main areas for which mLDP operational derived state is Following are main areas for which mLDP operational derived state is
defined: defined:
o Root o Root
o Bindings (FEC-label) o Bindings (FEC-label)
o Capabilities o Capabilities
5.1.1. Root state 5.3.1. Root state
Root address is a fundamental construct for MP FEC bindings and LSPs. Root address is a fundamental construct for MP FEC bindings and LSPs.
The root state provides information on all the known roots in a given The root state provides information on all the known roots in a given
address-familty, and their information on the root reachability (as address-familty, and their information on the root reachability (as
learnt from RIB). In case of multi-path reachability to a root, the learnt from RIB). In case of multi-path reachability to a root, the
selection of upstream path is done on per-LSP basis at the time of selection of upstream path is done on per-LSP basis at the time of
LSP setup. Similarly, when protection mechanisms like MBB or MoFRR LSP setup. Similarly, when protection mechanisms like MBB or MoFRR
are in place, the path designation as active/standby or primary/ 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 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. root can be shared amongst multiple P2MP and/or MP2MP LSPs.
skipping to change at page 14, line 31 skipping to change at page 18, line 44
LDP: peer 192.168.0.3:0 LDP: peer 192.168.0.3:0
root 2.2.2.2: root 2.2.2.2:
path1: path1:
RIB: 3.3.3.3; (NOTE: This is a recursive path) RIB: 3.3.3.3; (NOTE: This is a recursive path)
LDP: peer 192.168.0.3:0 (NOTE: T-mLDP peer) LDP: peer 192.168.0.3:0 (NOTE: T-mLDP peer)
root 9.9.9.9: root 9.9.9.9:
. . . . . . . .
Figure 4 Figure 7
A root entry on a root LSR itself will be presented as follows: A root entry on a root LSR itself will be presented as follows:
root 9.9.9.9: root 9.9.9.9:
is-self is-self
Figure 5 Figure 8
5.1.2. Bindings state 5.3.2. Bindings state
Binding state provides information on mLDP FEC-label bindings for Binding state provides information on mLDP FEC-label bindings for
both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding
derived state is presented in a FEC-centric view per address-family, derived state is presented in a FEC-centric view per address-family,
and provides information on both inbound (received) and outbound and provides information on both inbound (received) and outbound
(advertised) bindings. The FEC is presented as (root-address, (advertised) bindings. The FEC is presented as (root-address,
opaque-type-data) and the direction (upstream or downstream) is opaque-type-data) as described earlier in section Section 3.2, and
picked with respect to root reachability. In case of MBB or/and the direction (upstream or downstream) is picked with respect to root
MoFRR, the role of a given peer binding is also provided with respect reachability. In case of MBB or/and MoFRR, the role of a given peer
to MBB (active or standby) or/and MoFRR (primary or backup). binding is also provided with respect to MBB (active or standby) or/
and MoFRR (primary or backup).
This document covers following type of opaque values with their keys
in the operational model of mLDP bindings:
+-------------------------+--------------------+------------+
| Opaque Type | Key | RFC |
+-------------------------+--------------------+------------+
| Generic LSP Identifier | LSP Id | [RFC6388] |
| Transit IPv4 Source | Source, Group | [RFC6826] |
| Transit IPv6 Source | Source, Group | [RFC6826] |
| Transit IPv4 Bidir | RP, Group | [RFC6826] |
| Transit IPv6 Bidir | RP, Group | [RFC6826] |
| Transit VPNv4 Source | Source, Group, RD | [RFC7246] |
| Transit VPNv6 Source | Source, Group, RD | [RFC7246] |
| Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] |
| Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] |
| Recursive Opaque | Root | [RFC6512] |
| VPN-Recursive Opaque | Root, RD | [RFC6512] |
+-------------------------+--------------------+------------+
Table 1: MP Opaque Types and keys
It is to be noted that there are three basic types (LSP Id, Source,
and Bidir) and then there are variants (VPN, recursive, VPN-
recursive) on top of these basic types.
Following captures a high level tree hierarchy for mLDP bindings Following captures a high level tree hierarchy for mLDP bindings
state: state:
+--rw mldp (augmentation of ldp:global) +--rw mpls-ldp!
+--rw address-family* [afi] +--rw global
+--rw afi address-family +--rw mldp
+--rw address-families
+--rw ipv4 (or ipv6)
+--ro state +--ro state
+--ro ipv4 (or ipv6) +--ro roots
+--ro bindings +--ro root* [root-address]
+--ro opaque-type-xxx [root-address, type-specific-key] +--ro ....
+--ro root-address +--ro bindings
+--ro ... +--ro opaque-type-xxx
+--ro recur-root-address inet:ipv4-address | +--ro fec-label* [type-specific-key]
+--ro recur-rd route-distinguisher | +--ro some_key_1 ...
+--ro multipoint-type? multipoint-type | +--ro some_key_2 ...
+--ro peer* [direction peer advertisement-type] | +--ro multipoint-type? multipoint-type
+--ro direction downstream-upstream | +--ro peer* [direction peer advertisement-type]
+--ro peer leafref | | +--ro direction ldp:downstream-upstream
+--ro advertisement-type advertised-received | | +--ro peer leafref
+--ro label? mpls:mpls-label | | +--ro advertisement-type ldp:advertised-received
+--ro mbb-role? enumeration | | +--ro label? rt-types:mpls-label
+--ro mofrr-role? enumeration | | +--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 6 Figure 9
In the above tree, the type-specific-key varies with the base type as mLDP binding state is organized and presented per root address, and
listed in earlier Table 1. For example, if the opaque type is hence the bindings container hang off a root node in the model. The
Generic LSP Identifier, then the type-specific-key will be a uint32 bindings state is made available for FECs pertaining to different
value corresponding to the LSP. Please see the complete model for types of opaque types, with some state avaiable under "base" tree and
all other types. the rest under "extended".
Moreover, the binding tree defines only three types of sub-trees In the above tree, the various opaque types alongwith their type
(i.e. lspid, src, and bidir) which is able to map the respective specific key(s) refer to the table Table 1 captured earlier in the
variants (vpn, recursive, and vpn-recusrive) accordingly. For document. For example, if the opaque type is Generic LSP Identifier,
example, the key for opaque-type-src is [R, S, G, rd, recur-R, recur- then the type-specific-key will be a uint32 LSP-Id key. Please see
RD], where basic type will specify (R, S,G,-, -, -), VPN type will the complete model for all other types.
specify (R, S,G, rd, -, -), recursive type will specify [R, S,G, -,
recur-R, -] and VPN-recursive type will specify [R, S,G, -, recur-R,
recur-rd].
It is important to take note of the following: It is important to take note of the following:
o The address-family ipv4/ipv4 applies to "root" address in the mLDP o The address-family ipv4/ipv4 applies to "root" address in the mLDP
binding tree. The other addresses (source, group, RP etc) do not binding tree. The other addresses (source, group, RP etc) do not
have to be of the same address family type as the root. have to be of the same address family type as the root.
o The "recur-root-address" field applies to Recursive opaque type, o The "recur-root-address" field applies to Recursive opaque type,
and (recur-root-address, recur-rd) fields applies to VPN-Recursive and (recur-root-address, recur-rd) fields applies to VPN-Recursive
opaque types as defined in [RFC6512] opaque types as defined in [RFC6512]
skipping to change at page 17, line 23 skipping to change at page 21, line 27
FEC (root 2.2.2.2, S=192.168.1.1, G=224.1.1.1): FEC (root 2.2.2.2, S=192.168.1.1, G=224.1.1.1):
type: p2mp type: p2mp
upstream: upstream:
advertised: advertised:
peer 192.168.0.1:0, label 16000 (local) peer 192.168.0.1:0, label 16000 (local)
downstream: downstream:
received: received:
peer 192.168.0.2:0, label 17000 (remote) peer 192.168.0.2:0, label 17000 (remote)
peer 192.168.0.3:0, label 18000 (remote) peer 192.168.0.3:0, label 18000 (remote)
Figure 7 Figure 10
The following diagram illustrates the FEC-label binding information The following diagram illustrates the FEC-label binding information
structure for a similar MP2MP LSP on a branch/transit LSR: 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 2.2.2.2, RP=192.168.9.9, G=224.1.1.1):
type: mp2mp type: mp2mp
upstream: upstream:
advertised: advertised:
peer 192.168.0.1:0, label 16000 (local) peer 192.168.0.1:0, label 16000 (local)
received: received:
peer 192.168.0.1:0, label 17000 (remote) peer 192.168.0.1:0, label 17000 (remote)
downstream: downstream:
advertised: advertised:
peer 192.168.0.2:0, label 16001 (local), MBB role=active 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.168.0.3:0, label 16002 (local), MBB role=standby
received: received:
peer 192.168.0.2:0, label 17001 (remote) peer 192.168.0.2:0, label 17001 (remote)
peer 192.168.0.3:0, label 18001 (remote) peer 192.168.0.3:0, label 18001 (remote)
Figure 8 Figure 11
5.1.3. Capabilities state 5.3.3. Capabilities state
Like LDP, mLDP capabilities state comprise two types of information: Like LDP, mLDP capabilities state comprise two types of information:
o global: augments ldp:global/ldp:state/ldp:capability. o global: augments ldp:global/ldp:state/ldp:capability.
o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability
6. Notifications 6. Notifications
mLDP notification module consists of notification related to changes mLDP notification module consists of notification related to changes
in the operational state of an mLDP FEC. Following is a simplified in the operational state of an mLDP FEC.
graphical representation of the data model for mLDP notifications:
6.1. Base
Following is a simplified graphical representation of the base data
model for mLDP notifications:
module: ietf-mpls-mldp module: ietf-mpls-mldp
notifications: notifications:
+---n mpls-mldp-fec-event +---n mpls-mldp-fec-event
+--ro event-type? ldp:oper-status-event-type +--ro event-type? ldp:oper-status-event-type
+--ro tree-type? multipoint-type +--ro tree-type? multipoint-type
+--ro root? inet:ip-address +--ro root? inet:ip-address
+--ro (lsp-key-type)? +--ro (lsp-key-type)?
+--:(lsp-id-based) +--:(lsp-id)
| +--ro lsp-id? uint16 +--ro lsp-id? uint16
+--:(source-group-based)
+--ro source-address? inet:ip-address
+--ro group-address? inet:ip-address
Figure 9 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
Figure 13
7. Actions 7. Actions
Currently, no RPCs/actions are defined for mLDP. Currently, no RPCs/actions are defined for mLDP.
8. Open Items 8. Open Items
Following is a list of open items that are to be discussed and Following is a list of open items that are to be discussed and
addressed in future revisions of this document: addressed in future revisions of this document:
o Revisit and cut down on the scope of the document and number of
features it is trying to cover
o Split the model into a base and extended items
o Align operational state modeling with other routing protocols and o Align operational state modeling with other routing protocols and
[I-D.openconfig-netmod-opstate] [I-D.openconfig-netmod-opstate]
o Specify default values for configuration parameters o Specify default values for configuration parameters
o Add statistics for mLDP root LSPs and bindings
o Extend the "Configured Leaf LSPs" for various type of opaque-types 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 Extend mLDP notifications for other types of opaque values as well
o Make MP LSP configuration and state model consistent
9. YANG Specification 9. YANG Specification
Following is the actual YANG definition for mLDP constructs defined Following is the actual YANG definition (module) for mLDP constructs
earlier in the document. defined earlier in the document.
<CODE BEGINS> file "ietf-mpls-mldp@2016-11-01.yang" --> 9.1. Base
module ietf-mpls-mldp { <CODE BEGINS> file "ietf-mpls-mldp@2017-03-12.yang"
namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp";
prefix mldp;
import ietf-inet-types { module ietf-mpls-mldp {
prefix "inet"; namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp";
} prefix "mldp";
import ietf-routing { import ietf-inet-types {
prefix "rt"; prefix "inet";
} }
import ietf-mpls { import ietf-routing {
prefix "mpls"; prefix "rt";
} }
import ietf-routing-types {
prefix "rt-types";
}
import ietf-mpls-ldp { import ietf-mpls-ldp {
prefix "ldp"; prefix "ldp";
} }
organization organization
"IETF MPLS Working Group"; "IETF MPLS Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/mpls/> "WG Web: <http://tools.ietf.org/wg/teas/>
WG List: <mailto:mpls@ietf.org> WG List: <mailto:teas@ietf.org>
WG Chair: Loa Andersson WG Chair: Loa Andersson
<mailto:loa@pi.nu> <mailto:loa@pi.nu>
WG Chair: Ross Callon WG Chair: Ross Callon
<mailto:rcallon@juniper.net> <mailto:rcallon@juniper.net>
WG Chair: George Swallow WG Chair: George Swallow
<mailto:swallow.ietf@gmail.com> <mailto:swallow.ietf@gmail.com>
Editor: Kamran Raza Editor: Kamran Raza
<mailto:skraza@cisco.com> <mailto:skraza@cisco.com>
Editor: Rajiv Asati Editor: Rajiv Asati
<mailto:rajiva@cisco.com> <mailto:rajiva@cisco.com>
Editor: Xufeng Liu Editor: Xufeng Liu
<mailto:xliu@kuatrotech.com> <mailto:Xufeng_Liu@jabil.com>
Editor: Santosh Esale Editor: Santosh Esale
<mailto:sesale@juniper.net> <mailto:sesale@juniper.net>
Editor: Xia Chen Editor: Xia Chen
<mailto:jescia.chenxia@huawei.com> <mailto:jescia.chenxia@huawei.com>
Editor: Himanshu Shah Editor: Himanshu Shah
<mailto:hshah@ciena.com> <mailto:hshah@ciena.com>";
Editor: Sowmya Krishnaswamy description
<mailto:sowkrish@cisco.com>"; "This YANG module defines the essential components for the
management of Multi-Protocol Label Switching (MPLS) Multipoint
LDP (mLDP).";
description revision 2017-03-12 {
"This YANG module defines the essential components for the description
management of Multi-Protocol Label Switching (MPLS) Multipoint "Initial revision.";
LDP (mLDP)."; 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.";
}
}
description
"p2mp or mp2mp.";
}
revision 2016-11-01 { /*
description * Groupings
"Initial revision."; */
reference
"RFC XXXX: YANG Data Model for MPLS mLDP.";
}
/* grouping mldp-capabilities {
* Features description
*/ "mLDP capabilities.";
container p2mp {
description
"Configure point-to-multipoint capability.";
leaf enable {
type boolean;
description
"Enable point-to-multipoint.";
}
}
container mp2mp {
description
"Configure multipoint-to-multipoint capability.";
leaf enable {
type boolean;
description
"Enable multipoint-to-multipoint.";
}
}
container make-before-break {
description
"Configure make-before-break capability.";
leaf enable {
type boolean;
description
"Enable make-before-break.";
feature capability-mldp-hsmp { }
description leaf switchover-delay {
"This feature indicates that the system allows to configure type uint16;
mLDP hub-and-spoke-multipoint capability."; units seconds;
} description
"Switchover delay in seconds.";
}
leaf timeout {
type uint16;
units seconds;
description
"Timeout in seconds.";
}
}
} // mldp-capabilities
feature capability-mldp-node-protection { grouping mldp-fec-event {
description description
"This feature indicates that the system allows to configure "A mLDP FEC event.";
mLDP node-protection capability."; leaf tree-type {
} type multipoint-type;
description
"p2mp or mp2mp.";
}
leaf root {
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;
description
"ID to identify the LSP.";
}
}
}
} // mldp-fec-event
feature mldp { grouping mldp-binding-label-peer-state-attributes {
description description
"This feature indicates that the system supports Multicast "mLDP label binding per peer attributes.";
LDP (mLDP)."; leaf direction {
} type ldp:downstream-upstream;
description
"Downstream or upstream.";
}
leaf peer {
type leafref {
path
"/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id";
}
description
"LDP peer from which this binding is received,
or to which this binding is advertised.";
}
leaf advertisement-type {
type ldp:advertised-received;
description
"Advertised or received.";
}
leaf label {
type rt-types:mpls-label;
description
"Advertised (outbound) or received (inbound) label.";
}
leaf mbb-role {
when "../direction = 'upstream'" {
description
"For upstream.";
}
type enumeration {
enum none {
description "MBB is not enabled.";
}
enum active {
description "This LSP is active.";
}
enum inactive {
description "This LSP is inactive.";
}
}
description
"The MBB status of this LSP.";
}
} // mldp-binding-label-peer-state-attributes
feature mldp-mofrr { grouping mldp-binding-label-state-attributes {
description description
"This feature indicates that the system supports mLDP "mLDP label binding attributes.";
Multicast only FRR (MoFRR).";
}
/* leaf multipoint-type {
* Typedefs type multipoint-type;
*/ description
typedef multipoint-type { "The type of mutipoint, p2mp or mp2mp.";
type enumeration { }
enum p2mp { list peer {
description "Point to multipoint."; key "direction peer advertisement-type";
} description
enum mp2mp { "List of advertised and received peers.";
description "Multipoint to multipoint."; uses mldp-binding-label-peer-state-attributes;
} } // peer
} } // mldp-binding-label-state-attributes
description
"p2mp or mp2mp.";
}
typedef route-distinguisher { grouping mldp-ipv4-configured-lsp-roots {
type string { description
} "mLDP IPv4 roots containers.";
description
"Type definition for route distinguisher.";
reference
"RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
}
/* container roots {
* Groupings description
*/ "Configured IPv4 multicast LSPs.";
list root {
key "root-address";
description
"List of roots for configured multicast LSPs.";
grouping mldp-capabilities { leaf root-address {
description type inet:ipv4-address;
"mLDP capabilities."; description
"Root address.";
}
container p2mp { choice lsp-key-type {
description description
"Configure point-to-multipoint capability."; "LSP ID based or source-group based .";
leaf enable { case lsp-id {
type boolean; container opaque-type-lspid {
description description
"Enable point-to-multipoint."; "The type of opaque value element is
} the generic LSP identifier";
} list lsp {
container mp2mp { key "lsp-id";
description description
"Configure multipoint-to-multipoint capability."; "List of LSPs.";
leaf enable { leaf lsp-id {
type boolean; type uint16;
description description "ID to identify the LSP.";
"Enable multipoint-to-multipoint."; }
} } // list lsp
} } // opaque-type-lspid
container make-before-break {
description
"Configure make-before-break capability.";
leaf enable {
type boolean;
description
"Enable make-before-break.";
}
leaf switchover-delay {
type uint16;
units seconds;
description
"Switchover delay in seconds.";
}
leaf timeout {
type uint16;
units seconds;
description
"Timeout in seconds.";
}
}
container hub-and-spoke {
if-feature capability-mldp-hsmp;
description
"Configure hub-and-spoke-multipoint capability.";
reference
"RFC7140: LDP Extensions for Hub and Spoke Multipoint
Label Switched Path";
leaf enable {
type boolean;
description
"Enable hub-and-spoke-multipoint.";
}
}
container node-protection {
if-feature capability-mldp-node-protection;
description
"Configure node-protection capability.";
reference
"RFC7715: mLDP Node Protection.";
leaf plr {
type boolean;
description
"Point of Local Repair capable for MP LSP node
protection.";
}
container merge-point {
description
"Merge Point capable for MP LSP node protection.";
leaf enable {
type boolean;
description
"Enable merge point capability.";
}
leaf targeted-session-teardown-delay {
type uint16;
units seconds;
description
"Targeted session teardown delay.";
}
} // merge-point
}
} // mldp-capabilities
grouping mldp-configured-lsp-roots { } // case lsp-id
description } // choice lsp-key-type
"mLDP roots containers."; } // list root
} // roots
} // mldp-ipv4-configured-lsp-roots
container roots-ipv4 { /*
* Configuration data nodes
*/
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability" {
description "Augmentation for MLDP global capability.";
container mldp {
description
"Multipoint capabilities.";
uses mldp-capabilities;
}
}
when "../../../afi = 'ipv4'" { /*
description * Operational state data nodes
"Only for IPv4."; */
} augment "/rt:routing/rt:control-plane-protocols/"
description + "ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability" {
"Configured IPv4 multicast LSPs."; description "Augmentation for MLDP global capability.";
list root { container mldp {
key "root-address"; description
description "Multipoint capabilities.";
"List of roots for configured multicast LSPs."; uses mldp-capabilities;
}
}
leaf root-address { augment "/rt:routing/rt:control-plane-protocols/"
type inet:ipv4-address; + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/"
description + "ldp:received-peer-state/ldp:capability" {
"Root address."; description
} "Augmentation for MLDP received peer state capability.";
container mldp {
description
"Multipoint capabilities.";
list lsp { container p2mp {
must "(lsp-id = 0 and source-address != '0.0.0.0' and " description
+ "group-address != '0.0.0.0') or " "Configure point-to-multipoint capability.";
+ "(lsp-id != 0 and source-address = '0.0.0.0' and " leaf enable {
+ "group-address = '0.0.0.0')" { type boolean;
description description
"A LSP can be identified by either <lsp-id> or "Enable point-to-multipoint.";
<source-address, group-address>.";
}
key "lsp-id source-address group-address";
description
"List of LSPs.";
leaf lsp-id {
type uint16;
description "ID to identify the LSP.";
}
leaf source-address {
type inet:ipv4-address;
description
"Source address.";
}
leaf group-address {
type inet:ipv4-address-no-zone;
description
"Group address.";
}
} // list lsp
} // list root
} // roots-ipv4
container roots-ipv6 { }
}
container mp2mp {
description
"Configure multipoint-to-multipoint capability.";
leaf enable {
type boolean;
description
"Enable multipoint-to-multipoint.";
}
}
container make-before-break {
description
"Configure make-before-break capability.";
leaf enable {
type boolean;
description
"Enable make-before-break.";
}
}
} // mldp
}
when "../../../afi = 'ipv6'" { /*
description * Global augmentation
"Only for IPv6."; */
} augment "/rt:routing/rt:control-plane-protocols/"
description + "ldp:mpls-ldp/ldp:global" {
"Configured IPv6 multicast LSPs."; 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.";
list root { container config {
key "root-address"; description
description "Configuration data.";
"List of roots for configured multicast LSPs."; leaf enable {
type boolean;
description
"Enable mLDP.";
}
}
container state {
config false;
description
"Operational state data.";
leaf enable {
type boolean;
description
"Enable mLDP.";
}
}
leaf root-address { container address-families {
type inet:ipv6-address; description
description "Per-af params.";
"Root address.";
}
list lsp { container ipv4 {
must "(lsp-id = 0 and source-address != '::' and " description
+ "group-address != '::') or " "IPv4 information.";
+ "(lsp-id != 0 and source-address = '::' and " container state {
+ "group-address = '::')" { config false;
description description
"A LSP can be identified by either <lsp-id> or "Operational state data.";
<source-address, group-address>.";
}
key "lsp-id source-address group-address";
description
"List of LSPs.";
leaf lsp-id {
type uint16;
description "ID to identify the LSP.";
}
leaf source-address {
type inet:ipv6-address;
description
"Source address.";
}
leaf group-address {
type inet:ipv6-address-no-zone;
description
"Group address.";
}
} // list lsp
} // list root
} // roots-ipv6
} // mldp-configured-lsp-roots
grouping mldp-fec-event { container roots {
description description
"A mLDP FEC event."; "IPv4 multicast LSP roots.";
leaf tree-type { list root {
type multipoint-type; key "root-address";
description description
"p2mp or mp2mp."; "List of roots for configured multicast LSPs.";
}
leaf root {
type inet:ip-address;
description
"Root address.";
}
choice lsp-key-type {
description
"LSP ID based or source-group based .";
case lsp-id-based {
leaf lsp-id {
type uint16;
description
"ID to identify the LSP.";
}
}
case source-group-based {
leaf source-address {
type inet:ip-address;
description
"LSP source address."; leaf root-address {
} type inet:ipv4-address;
leaf group-address { description
type inet:ip-address; "Root address.";
description }
"Multicast group address.";
}
} // case source-group-based
}
} // mldp-fec-event
grouping mldp-binding-label-state-attributes { leaf is-self {
description type boolean;
"mLDP label binding attributes."; description
"This is the root.";
}
leaf multipoint-type { list reachability {
type multipoint-type; key "address interface";
description description
"The type of mutipoint, p2mp or mp2mp."; "A next hop for reachability to root,
} as a RIB view.";
list peer { leaf address {
key "direction peer advertisement-type"; type inet:ipv4-address;
description description
"List of advertised and received peers."; "The next hop address to reach root.";
leaf direction { }
type ldp:downstream-upstream; leaf interface {
description type ldp:mpls-interface-ref;
"Downstream or upstream."; description
} "Interface connecting to next-hop.";
leaf peer { }
type leafref { leaf peer {
path type leafref {
"../../../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; path
} "../../../../../../../../../ldp:peers/"
description + "ldp:peer/ldp:lsr-id";
"LDP peer from which this binding is received, }
or to which this binding is advertised."; description
} "LDP peer from which this next hop can be
leaf advertisement-type { reached.";
type ldp:advertised-received; }
description }
"Advertised or received.";
}
leaf label {
type mpls:mpls-label;
description
"Advertised (outbound) or received (inbound) label.";
}
leaf mbb-role {
when "../direction = 'upstream'" {
description
"For upstream.";
}
type enumeration {
enum none {
description "MBB is not enabled.";
}
enum active {
description "This LSP is active.";
}
enum inactive {
description "This LSP is inactive.";
}
}
description
"The MBB status of this LSP.";
}
leaf mofrr-role {
when "../direction = 'upstream'" {
description
"For upstream.";
}
type enumeration {
enum none {
description "MOFRR is not enabled.";
}
enum primary {
description "This LSP is primary.";
}
enum backup {
description "This LSP is backup.";
}
}
description
"The MOFRR status of this LSP.";
}
} // peer
} // mldp-binding-label-state-attributes
/* container bindings {
* Configuration data nodes description
*/ "mLDP FEC to label bindings.";
augment "/rt:routing/rt:control-plane-protocols/" container opaque-type-lspid {
+ "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability" { description
description "Augmentation for MLDP global capability."; "The type of opaque value element is
container mldp { the generic LSP identifier";
description reference
"Multipoint capabilities."; "RFC6388: Label Distribution Protocol
uses mldp-capabilities; Extensions for Point-to-Multipoint and
} Multipoint-to-Multipoint Label Switched
} 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.";
}
uses mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-lspid
} // bindings
} // list root
} // roots
} // state
container configured-leaf-lsps {
description
"Configured multicast LSPs.";
augment "/rt:routing/rt:control-plane-protocols/" container p2mp {
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/ldp:capability" { description
description "Augmentation for MLDP peer capability."; "Configured point-to-multipoint LSPs.";
container mldp { uses mldp-ipv4-configured-lsp-roots;
if-feature mldp; }
description container mp2mp {
"mLDP capabilities."; description
uses mldp-capabilities; "Configured multipoint-to-multipoint LSPs.";
} uses mldp-ipv4-configured-lsp-roots;
} }
} // configured-leaf-lsps
} // ipv4
} // list address-family
} // mldp
}
augment "/rt:routing/rt:control-plane-protocols/" /*
+ "ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/" * Notifications
+ "ldp:interfaces/ldp:interface/ldp:address-family/" */
+ "ldp:config" { notification mpls-mldp-fec-event {
description description
"Augmentation for MLDP nexthop forwarding interface."; "Notification event for a change of FEC status.";
leaf mldp-disable { leaf event-type {
if-feature mldp; type ldp:oper-status-event-type;
type boolean; description "Event type.";
description }
"Disable mLDP forwarding on the interface."; uses mldp-fec-event;
} }
} }
/* <CODE ENDS>
* 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/" Figure 14
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:capability" {
description "Augmentation for MLDP peer capability.";
container mldp {
if-feature mldp;
description
"mLDP capabilities.";
uses mldp-capabilities;
}
}
augment "/rt:routing/rt:control-plane-protocols/" 9.2. Extended
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/"
+ "ldp:received-peer-state/ldp:capability" {
description
"Augmentation for MLDP received peer state capability.";
container mldp {
if-feature mldp;
description
"Multipoint capabilities.";
container p2mp { <CODE BEGINS> file "ietf-mpls-mldp-extended@2017-03-12.yang"
description
"Configure point-to-multipoint capability.";
leaf enable {
type boolean;
description
"Enable point-to-multipoint.";
}
} module ietf-mpls-mldp-extended {
container mp2mp { namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended";
description prefix "mldp-ext";
"Configure multipoint-to-multipoint capability."; import ietf-inet-types {
leaf enable { prefix "inet";
type boolean; }
description
"Enable multipoint-to-multipoint.";
}
}
container make-before-break {
description
"Configure make-before-break capability.";
leaf enable {
type boolean;
description
"Enable make-before-break.";
}
}
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;
description
"Enable hub-and-spoke-multipoint.";
}
}
container node-protection {
description
"Configure node-protection capability.";
reference
"RFC7715: mLDP Node Protection.";
leaf plr {
type boolean;
description
"Point of Local Repair capable for MP LSP node
protection.";
}
leaf merge-point {
type boolean;
description
"Merge Point capable for MP LSP node protection.";
} // merge-point
} // node-protection
} // mldp import ietf-routing {
} prefix "rt";
}
augment "/rt:routing/rt:control-plane-protocols/" import ietf-mpls-ldp {
+ "ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/" prefix "ldp";
+ "ldp:interfaces/ldp:interface/ldp:address-family/" }
+ "ldp:state" { import ietf-mpls-ldp-extended {
description prefix "ldp-ext";
"Augmentation for MLDP nexthop forwarding interface."; }
leaf mldp-disable {
if-feature mldp;
type boolean;
description
"Disable mLDP forwarding on the interface.";
}
}
/* import ietf-mpls-mldp {
* Global augmentation prefix "mldp";
*/ }
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global" {
description "MLDP global augmentation.";
container mldp {
if-feature 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 { organization
description "IETF MPLS Working Group";
"Configuration data."; contact
leaf enable { "WG Web: <http://tools.ietf.org/wg/teas/>
type boolean; WG List: <mailto:teas@ietf.org>
description
"Enable mLDP.";
}
}
container state {
config false;
description
"Operational state data."; WG Chair: Loa Andersson
leaf enable { <mailto:loa@pi.nu>
type boolean;
description
"Enable mLDP.";
}
}
list address-family { WG Chair: Ross Callon
key "afi"; <mailto:rcallon@juniper.net>
description
"Per-af params.";
leaf afi {
type ldp:ldp-address-family;
description
"Address family type value.";
}
container config { WG Chair: George Swallow
description <mailto:swallow.ietf@gmail.com>
"Configuration data.";
container multicast-only-frr {
if-feature mldp-mofrr;
description
"Multicast only FRR (MoFRR) policy.";
leaf prefix-list {
type ldp:prefix-list-ref;
description
"Enables MoFRR for the specified access list.";
}
} // multicast-only-frr
container recursive-fec {
description
"Recursive FEC policy.";
leaf prefix-list {
type ldp:prefix-list-ref;
description
"Enables recursive FEC for the specified access
list.";
}
} // recursive-for
}
container state {
config false;
description
"Operational state data.";
container multicast-only-frr {
if-feature mldp-mofrr;
description Editor: Kamran Raza
"Multicast only FRR (MoFRR) policy."; <mailto:skraza@cisco.com>
leaf prefix-list { Editor: Rajiv Asati
type ldp:prefix-list-ref; <mailto:rajiva@cisco.com>
description
"Enables MoFRR for the specified access list.";
}
} // multicast-only-frr
container recursive-fec {
description
"Recursive FEC policy.";
leaf prefix-list {
type ldp:prefix-list-ref;
description
"Enables recursive FEC for the specified access
list.";
}
} // recursive-fec
container ipv4 { Editor: Xufeng Liu
when "../../afi = 'ipv4'" { <mailto:Xufeng_Liu@jabil.com>
description
"Only for IPv4.";
}
description
"IPv4 state information.";
container roots {
description
"IPv4 multicast LSP roots.";
list root {
key "root-address";
description
"List of roots for configured multicast LSPs.";
leaf root-address { Editor: Santosh Esale
type inet:ipv4-address; <mailto:sesale@juniper.net>
description
"Root address.";
}
leaf is-self { Editor: Xia Chen
type boolean; <mailto:jescia.chenxia@huawei.com>
description
"This is the root.";
}
list reachability { Editor: Himanshu Shah
key "address interface"; <mailto:hshah@ciena.com>";
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;
description
"Interface connecting to next-hop.";
}
leaf peer {
type leafref {
path
"../../../../../../../../../ldp:peers/"
+ "ldp:peer/ldp:lsr-id";
}
description
"LDP peer from which this next hop can be
reached.";
}
}
} // list root
} // roots
container bindings {
description
"mLDP FEC to label bindings.";
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.";
list fec-label {
key
"root-address lsp-id "
+ "recur-root-address recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet:ipv4-address;
description
"Root address.";
}
leaf lsp-id {
type uint32;
description "ID to identify the LSP.";
}
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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-lspid
container opaque-type-transit { description
description "This YANG module defines the essential components for the
"The type of opaque value element is management of Multi-Protocol Label Switching (MPLS) Multipoint
the generic LSP identifier"; LDP (mLDP).";
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:ipv4-address;
description
"Root address.";
}
leaf source-address {
type inet:ip-address;
description
"Source address.";
} revision 2017-03-12 {
leaf group-address { description
type inet:ip-address-no-zone; "Initial revision.";
description reference
"Group address."; "RFC XXXX: YANG Data Model for MPLS mLDP.";
} }
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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir { /*
description * Features
"The type of opaque value element is */
the generic LSP identifier"; feature capability-mldp-hsmp {
reference description
"RFC6826: Multipoint LDP In-Band Signaling for "This feature indicates that the system allows to configure
Point-to-Multipoint and mLDP hub-and-spoke-multipoint capability.";
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:ipv4-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.";
}
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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-bidir feature capability-mldp-node-protection {
} // bindings description
} // ipv4 "This feature indicates that the system allows to configure
mLDP node-protection capability.";
}
container ipv6 { feature mldp-mofrr {
when "../../afi = 'ipv6'" { description
description "This feature indicates that the system supports mLDP
"Only for IPv6."; Multicast only FRR (MoFRR).";
} }
description
"IPv6 state information.";
container roots {
description
"IPv6 multicast LSP roots.";
list root {
key "root-address";
description
"List of roots for configured multicast LSPs.";
leaf root-address { feature per-peer-capability {
type inet:ipv6-address; description
description "This feature indicates that the system allows to configure
"Root address."; mLDP capabilities at the per peer level.";
} }
leaf is-self { /*
type boolean; * Typedefs
description */
"This is the root."; typedef route-distinguisher {
} type string {
}
description
"Type definition for route distinguisher.";
reference
"RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
}
list reachability { typedef mofrr-role {
key "address interface"; type enumeration {
description enum none {
"A next hop for reachability to root, description "MOFRR is not enabled.";
as a RIB view."; }
leaf address { enum primary {
type inet:ipv6-address; description "This LSP is primary.";
description }
"The next hop address to reach root."; enum backup {
} description "This LSP is backup.";
leaf interface { }
type ldp:mpls-interface-ref; }
description description
"Interface connecting to next-hop."; "This type represents the MOFRR (Multicast only FRR) role
} status of a LSP.";
leaf peer { }
type leafref {
path
"../../../../../../../../../ldp:peers/"
+ "ldp:peer/ldp:lsr-id";
}
description
"LDP peer from which this next hop can be
reached.";
}
}
} // list root
} // roots
container bindings {
description
"mLDP FEC to label bindings.";
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.";
list fec-label {
key
"root-address lsp-id "
+ "recur-root-address recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet:ipv6-address;
description
"Root address.";
}
leaf lsp-id {
type uint32;
description "ID to identify the LSP.";
}
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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-lspid
container opaque-type-transit { /*
description * Groupings
"The type of opaque value element is */
the generic LSP identifier"; grouping mldp-ext-binding-label-state-attributes {
reference description
"RFC6826: Multipoint LDP In-Band Signaling for "mLDP label binding attributes.";
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.";
}
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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir { leaf multipoint-type {
description type mldp:multipoint-type;
"The type of opaque value element is description
the generic LSP identifier"; "The type of mutipoint, p2mp or mp2mp.";
reference }
"RFC6826: Multipoint LDP In-Band Signaling for list peer {
Point-to-Multipoint and key "direction peer advertisement-type";
Multipoint-to-Multipoint Label Switched description
Paths."; "List of advertised and received peers.";
list fec-label { uses mldp:mldp-binding-label-peer-state-attributes;
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 mofrr-role {
leaf group-address { when "../direction = 'upstream'" {
type inet:ip-address-no-zone; description
description "For upstream.";
"Group address."; }
} type mofrr-role;
leaf rd { description
type route-distinguisher; "The MOFRR status of this LSP.";
description }
"Route Distinguisher."; } // peer
reference } // mldp-ext-binding-label-state-attributes
"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 mldp-binding-label-state-attributes;
} // fec-label
} // opaque-type-bidir
} // bindings
} // ipv6
} // state
container configured-leaf-lsps { grouping mldp-ext-capabilities {
description description
"Configured multicast LSPs."; "mLDP extended capabilities.";
container hub-and-spoke {
if-feature capability-mldp-hsmp;
description
"Configure hub-and-spoke-multipoint capability.";
reference
"RFC7140: LDP Extensions for Hub and Spoke Multipoint
Label Switched Path";
leaf enable {
type boolean;
description
"Enable hub-and-spoke-multipoint.";
}
}
container node-protection {
if-feature capability-mldp-node-protection;
description
"Configure node-protection capability.";
reference
"RFC7715: mLDP Node Protection.";
leaf plr {
type boolean;
description
"Point of Local Repair capable for MP LSP node
protection.";
}
container merge-point {
description
"Merge Point capable for MP LSP node protection.";
leaf enable {
type boolean;
description
"Enable merge point capability.";
}
leaf targeted-session-teardown-delay {
type uint16;
units seconds;
description
"Targeted session teardown delay.";
container p2mp { }
description } // merge-point
"Configured point-to-multipoint LSPs."; }
uses mldp-configured-lsp-roots; } // mldp-ext-capabilities
} grouping mldp-ipv6-configured-lsp-roots {
container mp2mp { description
description "mLDP IPv6 roots containers.";
"Configured multipoint-to-multipoint LSPs.";
uses mldp-configured-lsp-roots;
}
} // configured-leaf-lsps
} // list address-family
} // mldp
}
/* container roots {
* Notifications description
*/ "Configured IPv6 multicast LSPs.";
notification mpls-mldp-fec-event {
description
"Notification event for a change of FEC status.";
leaf event-type {
type ldp:oper-status-event-type;
description "Event type.";
}
uses mldp-fec-event;
}
}
<CODE ENDS> list root {
key "root-address";
description
"List of roots for configured multicast LSPs.";
Figure 10 leaf root-address {
type inet:ipv6-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
case source-group {
container opaque-type-transit {
description
"The type of opaque value element is the transit IPv6
source.";
list lsp {
key "source-address group-address";
description
"List of LSPs.";
leaf source-address {
type inet:ipv6-address;
description
"Source address.";
}
leaf group-address {
type inet:ipv6-address-no-zone;
description
"Group address.";
}
}
}
} // case source-group
} // choice lsp-key-type
} // list root
} // roots
} // mldp-ipv6-configured-lsp-roots
grouping mldp-ext-per-af-config-attibutes {
description
"mLDP per address family configuration attibutes.";
container multicast-only-frr {
if-feature mldp-mofrr;
description
"Multicast only FRR (MoFRR) policy.";
leaf prefix-list {
type ldp-ext:prefix-list-ref;
description
"Enables MoFRR for the specified access list.";
}
} // multicast-only-frr
container recursive-fec {
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
/*
* Configuration data nodes
*/
// Global capability config
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability/"
+ "mldp:mldp" {
description "Augmentation for MLDP global capability.";
uses mldp-ext-capabilities;
}
// Peer capability config
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/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" {
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";
description
"List of LSPs.";
leaf source-address {
type inet:ipv4-address;
description
"Source address.";
}
leaf group-address {
type inet:ipv4-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" {
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";
description
"List of LSPs.";
leaf source-address {
type inet:ipv4-address;
description
"Source address.";
}
leaf group-address {
type inet:ipv4-address-no-zone;
description
"Group address.";
}
}
}
} // 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
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" {
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: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" {
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;
description
"Enable hub-and-spoke-multipoint.";
}
}
container node-protection {
description
"Configure node-protection capability.";
reference
"RFC7715: mLDP Node Protection.";
leaf plr {
type boolean;
description
"Point of Local Repair capable for MP LSP node
protection.";
}
leaf merge-point {
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" {
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.";
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.";
}
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 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
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"rp group-address rd recur-root-address recur-rd";
description
"List of FEC to label bindings.";
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.";
}
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 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" {
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
Paths.";
list fec-label {
key
"source-address group-address "
+ "rd recur-root-address recur-rd";
description
"List of FEC to label bindings.";
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.";
}
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 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
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"rp group-address rd recur-root-address recur-rd";
description
"List of FEC to label bindings.";
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.";
}
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 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: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 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" {
description
"Augmentation for MLDP IPv6 bindings with opaque type LSP ID.";
list recursive-fec {
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 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 {
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
"Root address.";
}
leaf is-self {
type boolean;
description
"This is the root.";
}
list reachability {
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;
description
"Interface connecting to next-hop.";
}
leaf peer {
type leafref {
path
"../../../../../../../../../ldp:peers/"
+ "ldp:peer/ldp:lsr-id";
}
description
"LDP peer from which this next hop can be
reached.";
}
}
container bindings {
description
"mLDP FEC to label bindings.";
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.";
list fec-label {
key
"lsp-id";
description
"List of FEC to label bindings.";
leaf lsp-id {
type uint32;
description "ID to identify the LSP.";
}
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 {
description
"Configured point-to-multipoint LSPs.";
uses mldp-ipv6-configured-lsp-roots;
}
container mp2mp {
description
"Configured multipoint-to-multipoint LSPs.";
uses mldp-ipv6-configured-lsp-roots;
}
} // configured-leaf-lsps
} // ipv6
}
/*
* Global augmentation
*/
/*
* Notifications
*/
augment "/mldp:mpls-mldp-fec-event/mldp:lsp-key-type" {
description "";
case source-group-based {
leaf source-address {
type inet:ip-address;
description
"LSP source address.";
}
leaf group-address {
type inet:ip-address;
description
"Multicast group address.";
}
} // case source-group
}
}
<CODE ENDS>
Figure 15
10. Security Considerations 10. Security Considerations
This mLDP model shares the same security considerations as captured This mLDP model shares the same security considerations as captured
in LDP Yang model [I-D.ietf-mpls-ldp-mldp-yang]. in LDP Yang model [I-D.ietf-mpls-ldp-yang].
11. IANA Considerations 11. IANA Considerations
This document does not extend mLDP protocol specifiction and hence This document does not extend mLDP protocol specifiction and hence
there are no IANA considerations. there are no IANA considerations.
Note to the RFC Editor: Please remove IANA section before the Note to the RFC Editor: Please remove IANA section before the
publication. publication.
12. Acknowledgments 12. Acknowledgments
The authors would like to acknowledge Ladislav Lhotka for his useful The authors would like to acknowledge Ladislav Lhotka for his useful
comments as the YANG Doctor. comments as the YANG Doctor.
13. References 13. References
13.1. Normative References 13.1. Normative References
[I-D.ietf-mpls-ldp-mldp-yang] [I-D.ietf-mpls-ldp-yang]
Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H.
Shah, "YANG Data Model for MPLS LDP and mLDP", draft-ietf- Shah, "YANG Data Model for MPLS LDP", draft-ietf-mpls-ldp-
mpls-ldp-mldp-yang-00 (work in progress), August 2016. yang-00 (work in progress), November 2016.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <http://www.rfc-editor.org/info/rfc2119>.
[RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed.,
"LDP Specification", RFC 5036, DOI 10.17487/RFC5036, "LDP Specification", RFC 5036, DOI 10.17487/RFC5036,
October 2007, <http://www.rfc-editor.org/info/rfc5036>. October 2007, <http://www.rfc-editor.org/info/rfc5036>.
skipping to change at page 46, line 23 skipping to change at page 56, line 35
Topology Routing", draft-iwijnand-mpls-mldp-multi- Topology Routing", draft-iwijnand-mpls-mldp-multi-
topology-03 (work in progress), June 2013. topology-03 (work in progress), June 2013.
[I-D.openconfig-netmod-opstate] [I-D.openconfig-netmod-opstate]
Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling
of Operational State Data in YANG", draft-openconfig- of Operational State Data in YANG", draft-openconfig-
netmod-opstate-01 (work in progress), July 2015. netmod-opstate-01 (work in progress), July 2015.
Appendix A. Additional Contributors Appendix A. Additional Contributors
Danial Johari
Cisco Systems Inc.
Email: dajohari@cisco.com
Matthew Bocci Matthew Bocci
Alcatel-Lucent Nokia
matthew.bocci@alcatel-lucent.com matthew.bocci@nokia.com
Authors' Addresses Authors' Addresses
Kamran Raza Kamran Raza
Cisco Systems, Inc. Cisco Systems, Inc.
Email: skraza@cisco.com Email: skraza@cisco.com
Rajiv Asati Rajiv Asati
Cisco Systems, Inc. Cisco Systems, Inc.
Email: rajiva@cisco.com Email: rajiva@cisco.com
skipping to change at page 46, line 40 skipping to change at page 57, line 4
Authors' Addresses Authors' Addresses
Kamran Raza Kamran Raza
Cisco Systems, Inc. Cisco Systems, Inc.
Email: skraza@cisco.com Email: skraza@cisco.com
Rajiv Asati Rajiv Asati
Cisco Systems, Inc. Cisco Systems, Inc.
Email: rajiva@cisco.com Email: rajiva@cisco.com
Sowmya Krishnaswamy Sowmya Krishnaswamy
Cisco Systems, Inc. Cisco Systems, Inc.
Email: sowkrish@cisco.com Email: sowkrish@cisco.com
Xufeng Liu Xufeng Liu
Kuatro Technologies Jabil
Email: xliu@kuatrotech.com Email: xufeng_liu@jabil.com
Jeff Tantsura Jeff Tantsura
Email: jefftant@gmail.com Email: jefftant.ietf@gmail.com
Santosh Esale Santosh Esale
Juniper Networks Juniper Networks
Email: sesale@juniper.net Email: sesale@juniper.net
Xia Chen Xia Chen
Huawei Technologies Huawei Technologies
Email: jescia.chenxia@huawei.com Email: jescia.chenxia@huawei.com
Loa Andersson Loa Andersson
 End of changes. 169 change blocks. 
1505 lines changed or deleted 1940 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/