module ietf-mpls-mldp-extended {
namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended";
prefix "mldp-ext";
import ietf-inet-types {
prefix "inet";
}
import ietf-interfaces {
prefix "if";
}
import ietf-routing {
prefix "rt";
}
import ietf-mpls-ldp {
prefix "ldp";
}
import ietf-mpls-ldp-extended {
prefix "ldp-ext";
}
import ietf-mpls-mldp {
prefix "mldp";
}
organization
"IETF MPLS Working Group";
contact
"WG Web:
WG List:
WG Chair: Loa Andersson
WG Chair: Ross Callon
WG Chair: George Swallow
Editor: Kamran Raza
Editor: Rajiv Asati
Editor: Xufeng Liu
Editor: Santosh Esale
Editor: Xia Chen
Editor: Himanshu Shah
";
description
"This YANG module defines the essential components for the
management of Multi-Protocol Label Switching (MPLS) Multipoint
LDP (mLDP).";
revision 2017-10-19 {
description
"Initial revision.";
reference
"RFC XXXX: YANG Data Model for MPLS mLDP.";
}
/*
* 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 route-distinguisher {
type string {
}
description
"Type definition for route distinguisher.";
reference
"RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
}
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 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-ext-capabilities
grouping mldp-ipv6-configured-lsp-roots {
description
"mLDP IPv6 roots containers.";
container roots {
description
"Configured IPv6 multicast LSPs.";
list root {
key "root-address";
description
"List of roots for configured multicast LSPs.";
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
grouping recursive-fec-attibutes {
description
"mLDP recursive FEC attibutes.";
leaf recur-root-address {
type inet:ip-address;
description
"Recursive root address.";
reference
"RFC6512: Using Multipoint LDP When the
Backbone Has No Route to the Root";
}
leaf recur-rd {
type route-distinguisher;
description
"Route Distinguisher in the VPN-Recursive
Opaque Value.";
reference
"RFC6512: Using Multipoint LDP When the
Backbone Has No Route to the Root";
}
leaf multipoint-type {
type mldp:multipoint-type;
description
"The type of mutipoint, p2mp or mp2mp.";
}
} // recursive-fec-attibutes
/*
* Configuration data 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-type-lspid/"
+ "mldp:fec-label" {
description
"Augmentation for MLDP IPv4 configured-leaf-lsps
configuration for opaque-type-lspid.";
list recursive-fec {
key
"recur-root-address recur-rd";
description
"List of recursive opaque values.";
uses recursive-fec-attibutes;
} // fec-label
}
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "mldp:ipv4/mldp:configured-leaf-lsps" {
description
"Augmentation for MLDP IPv4 configured-leaf-lsps
configuration.";
container opaque-type-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
list fec-label {
key
"root-address source-address group-address "
+ "rd recur-root-address recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet: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 route-distinguisher;
description
"Route Distinguisher.";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"root-address rp group-address rd recur-root-address "
+ "recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet: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.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-type-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 the 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-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.";
}
}
// 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 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: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.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
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.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-type-bidir
}
// IPv6 bindings state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "ipv6/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.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir {
config false;
description
"The type of opaque value element is
the generic LSP identifier";
reference
"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.";
}
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-type-bidir
}
// IPv4 bindings opaque-type-lspid state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "mldp:ipv4/mldp: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.";
uses recursive-fec-attibutes;
uses mldp-ext-binding-label-state-attributes;
} // fec-label
}
// IPv6 bindings opaque-type-lspid state
augment "/rt:routing/rt:control-plane-protocols/"
+ "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/"
+ "ipv6/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.";
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-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.";
}
leaf multipoint-type {
type mldp:multipoint-type;
description
"The type of mutipoint, p2mp or mp2mp.";
}
uses mldp-ext-binding-label-state-attributes;
} // fec-label
} // opaque-type-lspid
} // bindings
} // list root
} // roots
container configured-leaf-lsps {
description
"Configured multicast LSPs.";
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";
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-type-lspid
container opaque-type-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
list fec-label {
key
"root-address source-address group-address "
+ "rd recur-root-address recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet:ipv6-address;
description
"Root address.";
}
leaf source-address {
type inet:ip-address;
description
"Source address.";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address.";
}
leaf rd {
type route-distinguisher;
description
"Route Distinguisher.";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-type-transit
container opaque-type-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
list fec-label {
key
"root-address rp group-address rd recur-root-address "
+ "recur-rd";
description
"List of FEC to label bindings.";
leaf root-address {
type inet:ipv6-address;
description
"Root address.";
}
leaf rp {
type inet:ip-address;
description
"RP address.";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address.";
}
leaf rd {
type route-distinguisher;
description
"Route Distinguisher.";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // fec-label
} // opaque-type-bidir
} // configured-leaf-lsps
} // ipv6
}
/*
* Global augmentation
*/
/*
* Notifications
*/
augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type/"
+ "mldp:opaque-type-lspid/mldp:opaque-type-lspid" {
description
"Augmentation for MLDP notification for opaque-type-lspid.";
container recursive-fec {
description
"Container of recursive opaque values.";
uses recursive-fec-attibutes;
} // fec-label
}
augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type" {
description
"Augmentation for MLDP notification.";
case opaque-type-transit {
container opaque-type-transit {
description
"The type of opaque value element is the transit IPv4
source.";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched Paths.";
leaf root-address {
type inet:ip-address;
description
"Root address.";
}
leaf source-address {
type inet:ip-address;
description
"Source address.";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address.";
}
leaf rd {
type route-distinguisher;
description
"Route Distinguisher.";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // opaque-type-transit
} // opaque-type-transit
case opaque-type-bidir {
container opaque-type-bidir {
description
"The type of opaque value element is
the generic LSP identifier";
reference
"RFC6826: Multipoint LDP In-Band Signaling for
Point-to-Multipoint and
Multipoint-to-Multipoint Label Switched
Paths.";
leaf root-address {
type inet:ip-address;
description
"Root address.";
}
leaf rp {
type inet:ip-address;
description
"RP address.";
}
leaf group-address {
type inet:ip-address-no-zone;
description
"Group address.";
}
leaf rd {
type route-distinguisher;
description
"Route Distinguisher.";
reference
"RFC7246: Multipoint Label Distribution
Protocol In-Band Signaling in a Virtual
Routing and Forwarding (VRF) Table
Context.";
}
uses recursive-fec-attibutes;
} // opaque-type-bidir
} // opaque-type-bidir
}
}