module ietf-mpls-mldp-extended {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended";
prefix "mldp-ext";
import ietf-inet-types {
prefix "inet";
reference "RFC 6991: Common YANG Data Types";
}
import ietf-interfaces {
prefix "if";
reference "RFC 8343: A YANG Data Model for Interface Management";
}
import ietf-routing {
prefix "rt";
reference
"RFC 8349: A YANG Data Model for Routing Management (NMDA
version)";
}
import ietf-routing-types {
prefix "rt-types";
reference
"RFC 8294: Common YANG Data Types for the Routing Area";
}
import ietf-mpls-ldp {
prefix "ldp";
reference "RFC XXXX: A YANG Data Model for MPLS LDP";
// RFC Editor: replace the XXXX with actual LDP YANG RFC number at
// time of publication and remove this note.
}
import ietf-mpls-ldp-extended {
prefix "ldp-ext";
reference "RFC XXXX: A YANG Data Model for MPLS LDP";
// RFC Editor: replace the XXXX with actual LDP YANG RFC number at
// time of publication and remove this note.
}
import ietf-mpls-mldp {
prefix "mldp";
reference "RFC XXXX: Base YANG Data Model for MPLS mLDP";
// RFC Editor: replace the XXXX with actual mLDP YANG RFC number at
// time of publication and remove this note.
}
organization
"IETF MPLS Working Group";
contact
"WG Web:
WG List:
Editor: Kamran Raza
Editor: Sowmya Krishnaswamy
Editor: Xufeng Liu
Editor: Santosh Esale
Editor: Loa Andersson
Editor: Jeff Tantsura
";
description
"This YANG module defines the extended components for the
management of Multi-Protocol Label Switching (MPLS) Multipoint
LDP (mLDP).
Copyright (c) 2018 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.";
// RFC Editor: replace XXXX with actual RFC number and remove
// this note
revision 2018-10-22 {
description
"Initial revision.";
reference
"RFC XXXX: Extended YANG Data Model for MPLS mLDP";
// RFC Editor: replace XXXX with actual RFC number and remove
// this note
}
/*
* Features
*/
feature capability-mldp-hsmp {
description
"This feature indicates that the system allows to configure
mLDP hub-and-spoke-multipoint capability.";
}
feature capability-mldp-node-protection {
description
"This feature indicates that the system allows to configure
mLDP node-protection capability.";
}
feature mldp-mofrr {
description
"This feature indicates that the system supports mLDP
Multicast only FRR (MoFRR).";
}
feature per-peer-capability {
description
"This feature indicates that the system allows to configure
mLDP capabilities at the per peer level.";
}
/*
* Typedefs
*/
typedef mofrr-role {
type enumeration {
enum none {
description "MOFRR is not enabled.";
}
enum primary {
description "This LSP is primary.";
}
enum backup {
description "This LSP is backup.";
}
}
description
"This type represents the MOFRR (Multicast only FRR) role
status of a LSP.";
}
/*
* Groupings
*/
grouping mldp-ext-binding-label-state-attributes {
description
"mLDP label binding attributes";
list peer {
key "direction peer advertisement-type";
description
"List of advertised and received peers";
uses mldp:mldp-binding-label-peer-state-attributes;
leaf mofrr-role {
when "../direction = 'upstream'" {
description
"For upstream.";
}
type mofrr-role;
description
"The MOFRR status of this LSP";
}
} // peer
} // mldp-ext-binding-label-state-attributes
grouping mldp-ext-capabilities {
description
"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 (PLR) capable for Multipoimt LSP
node protection";
}
container merge-point {
description
"Merge Point capable for Multipoint 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-ext-capabilities
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 Multicast-only FRR (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 prefix-list";
}
} // recursive-fec
} // mldp-ext-per-af-config-attibutes
grouping recursive-fec-attibutes {
description
"mLDP recursive FEC attibutes.";
leaf recur-root-address {
type inet:ip-address;
description
"Recursive root address";
reference
"RFC6512: Using Multipoint LDP When the
Backbone Has No Route to the Root";
}
leaf recur-rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher in the VPN-Recursive
Opaque Value";
reference
"RFC6512: Using Multipoint LDP When the
Backbone Has No Route to the Root";
}
leaf multipoint-type {
type mldp:multipoint-type;
description
"The type of mutipoint: p2mp or mp2mp";
}
} // recursive-fec-attibutes
/*
* Configuration data and operational state data nodes
*/
// Global capability
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/ldp:capability/mldp:mldp" {
description "Augmentation for MLDP global capability.";
uses mldp-ext-capabilities;
}
// Peer capability
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability" {
description "Augmentation for MLDP peer capability.";
container mldp {
if-feature per-peer-capability;
description
"mLDP capabilities";
uses mldp:mldp-capabilities;
}
}
// IPv4 config
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "mldp:ipv4" {
description "Augmentation for MLDP IPv4 configuration";
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:opaque-element-lspid/mldp:fec-label" {
description
"Augmentation for MLDP IPv4 configured-leaf-lsps
configuration for opaque-element-lspid";
list recursive-fec {
key
"recur-root-address recur-rd";
description
"List of recursive opaque values";
uses recursive-fec-attibutes;
} // fec-label
}
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "mldp:ipv4/mldp:configured-leaf-lsps" {
description
"Augmentation for MLDP IPv4 configured-leaf-lsps
configuration";
container opaque-element-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
list fec-label {
key
"root-address source-address group-address " +
"rd recur-root-address recur-rd";
description
"List of FEC to label bindings";
leaf root-address {
type inet:ipv4-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 rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-element-transit
container opaque-element-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"root-address rp group-address rd recur-root-address "
+ "recur-rd";
description
"List of FEC to label bindings";
leaf root-address {
type inet:ipv4-address;
description
"Root address";
}
leaf rp {
type inet:ip-address;
description
"Rendezvous-Point (RP) address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-element-bidir
}
// 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";
uses mldp-ext-per-af-config-attibutes;
}
// Global forwarding-nexthop
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/"
+ "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family" {
description
"Augmentation for MLDP nexthop forwarding interface";
leaf mldp-disable {
type boolean;
description
"Disable mLDP forwarding on this interface";
}
}
/*
* Operational state data nodes
*/
// 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:roots/mldp:root/mldp:bindings/"
+ "mldp:opaque-element-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";
}
}
// Peer capability state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/"
+ "ldp:capability/mldp:mldp" {
description
"Augmentation for MLDP received peer state capability.";
container hub-and-spoke {
description
"Configure hub-and-spoke-multipoint capability.";
reference
"RFC7140: LDP Extensions for Hub and Spoke Multipoint
Label Switched Path";
leaf enable {
type boolean;
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 (PLR) capable for Multipoint LSP
node protection";
}
leaf merge-point {
type boolean;
description
"Merge Point capable for Multipoint 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:roots/mldp:root/mldp:bindings" {
description "Augmentation for MLDP IPv4 bindings.";
container opaque-element-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 rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-element-transit
container opaque-element-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
"Rendezvous Point (RP) address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-element-bidir
}
// IPv6 bindings state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "ipv6/roots/root/bindings" {
description "Augmentation for MLDP IPv6 bindings.";
container opaque-element-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 rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-element-transit
container opaque-element-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
"Rendezvous Point (RP) address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-element-bidir
}
// IPv4 bindings opaque-element-lspid state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/"
+ "mldp:opaque-element-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";
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
}
// IPv6 bindings opaque-element-lspid state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "ipv6/roots/root/bindings/opaque-element-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";
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
}
/*
* Per AF augmentation
*/
// IPv6 augmentation
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families" {
description "Augmentation for MLDP IPv6 address family.";
container ipv6 {
description
"IPv6 information";
container roots {
config false;
description
"IPv6 multicast LSP roots";
list root {
key "root-address";
description
"List of roots for configured multicast LSPs";
leaf root-address {
type inet:ipv6-address;
description
"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 if: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-element-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";
}
leaf multipoint-type {
type mldp:multipoint-type;
description
"The type of mutipoint: p2mp or mp2mp";
}
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-element-lspid
} // bindings
} // list root
} // roots
container configured-leaf-lsps {
description
"Configured multicast LSPs";
container opaque-element-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";
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 multipoint-type {
type mldp:multipoint-type;
description
"The type of mutipoint: p2mp or mp2mp";
}
list recursive-fec {
key
"recur-root-address recur-rd";
description
"List of recursive opaque values";
uses recursive-fec-attibutes;
} // fec-label
} // fec-label
} // opaque-element-lspid
container opaque-element-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
list fec-label {
key
"root-address source-address group-address "
+ "rd recur-root-address recur-rd";
description
"List of FEC to label bindings";
leaf root-address {
type inet:ipv6-address;
description
"Root address";
}
leaf source-address {
type inet:ip-address;
description
"Source address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-element-transit
container opaque-element-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"root-address rp group-address rd recur-root-address "
+ "recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet:ipv6-address;
description
"Root address";
}
leaf rp {
type inet:ip-address;
description
"Rendezvous Point (RP) address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-element-bidir
} // configured-leaf-lsps
} // ipv6
}
/*
* Global augmentation
*/
/*
* Notifications
*/
augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element/"
+ "mldp:opaque-element-lspid/mldp:opaque-element-lspid" {
description
"Augmentation for MLDP notification for opaque-element-lspid.";
container recursive-fec {
description
"Container of recursive opaque values";
uses recursive-fec-attibutes;
} // fec-label
}
augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element" {
description
"Augmentation for MLDP notification.";
case opaque-element-transit {
container opaque-element-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
leaf root-address {
type inet:ip-address;
description
"Root address";
}
leaf source-address {
type inet:ip-address;
description
"Source address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // opaque-element-transit
} // opaque-element-transit
case opaque-element-bidir {
container opaque-element-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
leaf root-address {
type inet:ip-address;
description
"Root address";
}
leaf rp {
type inet:ip-address;
description
"Rendezvous Point (RP) address";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address";
}
leaf rd {
type rt-types:route-distinguisher;
description
"Route Distinguisher";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // opaque-element-bidir
} // opaque-element-bidir
}
}