< draft-qct-lsr-ppr-yang-01.txt   draft-qct-lsr-ppr-yang-02.txt >
LSR Working Group Y. Qu LSR Working Group Y. Qu
Internet-Draft U. Chunduri Internet-Draft U. Chunduri
Intended status: Standards Track Huawei USA Intended status: Standards Track Futurewei
Expires: September 11, 2019 J. Tantsura Expires: January 8, 2020 J. Tantsura
Apstra Apstra
March 10, 2019 July 7, 2019
YANG Data Model for Preferred Path Routing YANG Data Model for Preferred Path Routing
draft-qct-lsr-ppr-yang-01 draft-qct-lsr-ppr-yang-02
Abstract Abstract
This document defines YANG data modules for preferred path routing This document defines YANG data modules for preferred path routing
([I-D.chunduri-lsr-isis-preferred-path-routing], ([I-D.chunduri-lsr-isis-preferred-path-routing],
[I-D.chunduri-lsr-ospf-preferred-path-routing]) configuration and [I-D.chunduri-lsr-ospf-preferred-path-routing]) configuration and
operation. The YANG modules are intended to be used on network operation. The YANG modules are intended to be used on network
elements to manage the configurations and operations of preferred elements to manage the configurations and operations of preferred
path routing. path routing.
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 https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months 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 September 11, 2019. This Internet-Draft will expire on January 8, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 20 skipping to change at page 2, line 20
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 . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 2
2. PPR YANG Module . . . . . . . . . . . . . . . . . . . . . . . 2 2. PPR YANG Module . . . . . . . . . . . . . . . . . . . . . . . 2
3. ISIS PPR YANG Module . . . . . . . . . . . . . . . . . . . . 6 3. ISIS PPR YANG Module . . . . . . . . . . . . . . . . . . . . 11
4. OSPF PPR YANG Module . . . . . . . . . . . . . . . . . . . . 18 4. OSPF PPR YANG Module . . . . . . . . . . . . . . . . . . . . 22
5. Security Considerations . . . . . . . . . . . . . . . . . . . 54 5. Security Considerations . . . . . . . . . . . . . . . . . . . 57
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 54 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 58
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 58
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.1. Normative References . . . . . . . . . . . . . . . . . . 55 8.1. Normative References . . . . . . . . . . . . . . . . . . 58
8.2. Informative References . . . . . . . . . . . . . . . . . 56 8.2. Informative References . . . . . . . . . . . . . . . . . 59
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 59
1. Introduction 1. Introduction
This document defines YANG data modules ([RFC6020], [RFC7950]) for This document defines YANG data modules ([RFC6020], [RFC7950]) for
preferred path routing configuration and operation. preferred path routing configuration and operation.
There are three YANG modules defined in this document. Module ietf- There are three YANG modules defined in this document. Module ietf-
ppr.yang defined the protocol independent part of configuration and ppr.yang defined the protocol independent part of configuration and
operations. Two IGP modules are defined as ietf-isis-ppr.yang and operations. Two IGP modules are defined as ietf-isis-ppr.yang and
ietf-ospf-ppr.yang. ietf-ospf-ppr.yang.
skipping to change at page 3, line 7 skipping to change at page 3, line 4
[I-D.ietf-netmod-yang-tree-diagrams]. [I-D.ietf-netmod-yang-tree-diagrams].
2. PPR YANG Module 2. PPR YANG Module
This YANG module defines protocol independent part of configuration This YANG module defines protocol independent part of configuration
and operation of preferred path routing (PPR) as defined in and operation of preferred path routing (PPR) as defined in
([I-D.chunduri-lsr-isis-preferred-path-routing]). ([I-D.chunduri-lsr-isis-preferred-path-routing]).
module: ietf-ppr module: ietf-ppr
augment /rt:routing: augment /rt:routing:
+--rw preferred-path-routing +--rw preferred-path-routing
+--rw preferred-path-mpls* [ppr-id] +--rw preferred-path-lists* [name]
| +--rw ppr-id uint32 +--rw name string
| +--rw pde-id* uint32 +--rw preferred-path-mpls* [ppr-id]
+--rw preferred-path-ipv4* [ppr-id] | +--rw ppr-prefix? inet:ip-prefix
| +--rw ppr-id inet:ipv4-prefix | +--rw ppr-id uint32
| +--rw pde-id* inet:ipv4-prefix | +--rw algo? uint8
+--rw preferred-path-ipv6* [ppr-id] | +--rw ppr-pde* [pde-id]
| +--rw ppr-id inet:ipv6-prefix | | +--rw pde-id uint32
| +--rw pde-id* inet:ipv6-prefix | | +--rw pde-id-type? ppr-pde-id-type
+--rw preferred-path-srv6* [ppr-id] | | +--rw loose? boolean
+--rw ppr-id inet:ipv6-prefix | | +--rw pde-type? ppr-pde-type
+--rw pde-id* inet:ipv6-prefix | +--rw attributes
| +--rw count-packets? boolean
| +--rw count-bytes? boolean
| +--rw ppr-metric? uint32
+--rw preferred-path-ipv4* [ppr-id]
| +--rw ppr-prefix? inet:ipv4-prefix
| +--rw ppr-id inet:ipv4-prefix
| +--rw algo? uint8
| +--rw ppr-pde* [pde-id]
| | +--rw pde-id inet:ipv4-address
| | +--rw pde-id-type? ppr-pde-id-type
| | +--rw loose? boolean
| | +--rw pde-type? ppr-pde-type
| +--rw attributes
| +--rw count-packets? boolean
| +--rw count-bytes? boolean
| +--rw ppr-metric? uint32
+--rw preferred-path-ipv6* [ppr-id]
| +--rw ppr-id inet:ipv6-prefix
| +--rw algo? uint8
| +--rw ppr-prefix? inet:ipv6-prefix
| +--rw ppr-pde* [pde-id]
| | +--rw pde-id inet:ipv6-prefix
| | +--rw pde-id-type? ppr-pde-id-type
| | +--rw loose? boolean
| | +--rw pde-type? ppr-pde-type
| +--rw attributes
| +--rw count-packets? boolean
| +--rw count-bytes? boolean
| +--rw ppr-metric? uint32
+--rw preferred-path-srv6* [ppr-id]
+--rw ppr-id inet:ipv6-prefix
+--rw algo? uint8
+--rw ppr-pde* [pde-id]
| +--rw pde-id inet:ipv6-address
+--rw pde-id-type? ppr-pde-id-type
+--rw loose? boolean
+--rw pde-type? ppr-pde-type
+--rw attributes
+--rw count-packets? boolean
+--rw count-bytes? boolean
+--rw ppr-metric? uint32
<CODE BEGINS> file "ietf-ppr@2018-06-20.yang" <CODE BEGINS> file "ietf-ppr@2019-07-07.yang"
module ietf-ppr { module ietf-ppr {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-ppr"; namespace "urn:ietf:params:xml:ns:yang:ietf-ppr";
prefix ppr; prefix ppr;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-yang-types {
prefix "yang";
}
import ietf-routing-types {
prefix "rt-types";
}
import ietf-routing { import ietf-routing {
prefix rt; prefix rt;
} }
organization organization
"IETF LSR - Link State Routing Working Group"; "IETF LSR - Link State Routing Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/group/lsr/> "WG Web: <http://datatracker.ietf.org/group/lsr/>
WG List: <mailto:lsr@ietf.org> WG List: <mailto:lsr@ietf.org>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yingzhen.qu@huawei.com> <mailto:yingzhen.qu@feturewei.com>
Uma Chunduri Uma Chunduri
<mailto:uma.chunduri@huawei.com>"; <mailto:uma.chunduri@futurewei.com>";
description description
"This Yang module defines the configuration and operational "This Yang module defines the configuration and operational
state for Preferred Path Routing common to all vendor state for Preferred Path Routing common to all vendor
implementations. implementations.
This YANG model conforms to the Network Management This YANG model conforms to the Network Management
Datastore Architecture (NDMA) as described in RFC XXXX. Datastore Architecture (NDMA) as described in RFC XXXX.
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices."; see the RFC itself for full legal notices.";
reference "RFC XXXX"; reference "RFC XXXX";
revision 2018-06-20 { revision 2019-07-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for PPR."; "RFC XXXX: A YANG Data Model for PPR.";
} }
typedef ppr-pde-type {
type enumeration {
enum topological {
value "1";
description "Topological PPR PDE.";
}
enum non-topological {
value "2";
description "Non-Topological PPR PED.";
}
}
description
"PPR PDE type.";
}
typedef ppr-pde-id-type {
type enumeration {
enum sidlabel {
value "1";
description
"PPR ID in mpls label format.";
}
enum prefix-sid {
value "2";
description
"SR-MPLS prefix SID.";
}
enum adj-sid {
value "3";
description
"SR-MPLS adjacency SID.";
}
enum ipv4-node {
value "4";
description
"IPv4 node address.";
}
enum ipv4-p2p {
value "5";
description
"IPv5 P2P interface address.";
}
enum ipv4-lan {
value "6";
description
"IPv4 Lan interface address.";
}
enum ipv6-node {
value "7";
description
"IPv6 node address.";
}
enum ipv6-p2p {
value "8";
description
"IPv6 P2P interface address.";
}
enum ipv6-lan {
value "9";
description
"IPv6 LAN interface address.";
}
enum srv6-node-sid {
value "10";
description
"PDE ID in SRv6 node SID format.";
}
enum srv6-adj-sid {
value "11";
description
"PDE ID in SRv6 node SID format.";
}
}
description "Type of PPR ID.";
}
/* Groupings*/
grouping ppr-attributes {
leaf count-packets {
type boolean;
description
"create a counter to count number of packets
forwarded on this PPR-ID on each node in the
path description.";
}
leaf count-bytes {
type boolean;
description
"create a conter to count number of bytes.";
}
leaf ppr-metric {
type uint32;
description
"Metric of the path prepsented by the PPR-ID.";
}
description
"Groupings for PPR attributes.";
}
grouping pde-attributes {
leaf pde-id-type {
type ppr-pde-id-type;
description
"PDE forwarding identifier type.";
}
leaf loose {
type boolean;
default "true";
description
"If set, the next topological PDE is loose.";
}
leaf pde-type {
type ppr-pde-type;
description "PPR PDE type.";
}
description
"Groupings for PDE attributes.";
}
augment "/rt:routing" { augment "/rt:routing" {
description description
"This module augments routing-instace configuration "This module augments routing-instace configuration
with preferred path routing."; with preferred path routing.";
container preferred-path-routing { container preferred-path-routing {
description description
"preferred path routing configuration."; "preferred path routing configuration.";
list preferred-path-lists {
key "name";
description
"Preferred path lists.";
leaf name {
type string;
description "PPR path list ID.";
}
list preferred-path-mpls { list preferred-path-mpls {
key "ppr-id"; key "ppr-id";
description description
"List of preferred path using MPLS data plane."; "List of preferred path using MPLS data plane.";
leaf ppr-prefix {
type inet:ip-prefix;
description
"PPR Prefix representing the destination of the path.";
}
leaf ppr-id { leaf ppr-id {
type uint32; type uint32;
description description
"PPR ID, A 20 bit label or 32 bit SID."; "PPR ID, A 20 bit label or 32 bit SID.";
} }
leaf-list pde-id { leaf algo {
type uint32; type uint8;
description
"SPF algorithm.";
}
list ppr-pde {
key "pde-id";
leaf pde-id {
type uint32;
description
"PDE identifiler.";
}
uses pde-attributes;
description description
"List of PPR Path Description Element (PDE)."; "List of PPR Path Description Element (PDE).";
} }
container attributes {
uses ppr-attributes;
description "PPR attributes.";
}
} }
list preferred-path-ipv4 { list preferred-path-ipv4 {
key "ppr-id"; key "ppr-id";
description description
"List of preferred path using IPv4 data plane."; "List of preferred path using IPv4 data plane.";
leaf ppr-prefix {
type inet:ipv4-prefix;
description
"PPR Prefix representing the destination of the path.";
}
leaf ppr-id { leaf ppr-id {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description description
"PPR ID, IPv4 address format."; "PPR ID, IPv4 address format.";
} }
leaf-list pde-id { leaf algo {
type inet:ipv4-prefix; type uint8;
description
"SPF algorithm.";
}
list ppr-pde {
key "pde-id";
leaf pde-id {
type inet:ipv4-address;
description
"PDE identifier.";
}
uses pde-attributes;
description description
"List of PPR Path Description Element (PDE)."; "List of PPR Path Description Element (PDE).";
} }
container attributes {
uses ppr-attributes;
description "PPR attributes.";
}
} }
list preferred-path-ipv6 { list preferred-path-ipv6 {
key "ppr-id"; key "ppr-id";
description description
"List of preferred path using IPv6 data plane."; "List of preferred path using IPv6 data plane.";
leaf ppr-id { leaf ppr-id {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"PPR ID, IPv6 address format."; "PPR ID, IPv6 address format.";
} }
leaf-list pde-id { leaf algo {
type uint8;
description
"SPF algorithm.";
}
leaf ppr-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"The prefix at the tail-end of the advertised PPR.";
}
list ppr-pde {
key "pde-id";
leaf pde-id {
type inet:ipv6-prefix;
description
"PDE identifier.";
}
uses pde-attributes;
description
"List of PPR Path Description Element (PDE)."; "List of PPR Path Description Element (PDE).";
} }
container attributes {
uses ppr-attributes;
description "PPR attributes.";
}
} }
list preferred-path-srv6 { list preferred-path-srv6 {
key "ppr-id"; key "ppr-id";
description description
"List of preferred path using SRv6 data plane."; "List of preferred path using SRv6 data plane.";
leaf ppr-id { leaf ppr-id {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"PPR ID, SRv6 SID format."; "PPR ID, SRv6 SID format.";
} }
leaf-list pde-id { leaf algo {
type inet:ipv6-prefix; type uint8;
description
"SPF algorithm.";
}
list ppr-pde {
key "pde-id";
leaf pde-id {
type inet:ipv6-address;
description
"PDE identifier.";
}
description description
"List of PPR Path Description Element (PDE)."; "List of PPR Path Description Element (PDE).";
} }
uses pde-attributes;
container attributes {
uses ppr-attributes;
description "PPR attributes.";
}
} }
}
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3. ISIS PPR YANG Module 3. ISIS PPR YANG Module
This YANG module defines ISIS configuration and operation of This YANG module defines ISIS configuration and operation of
preferred path routing (PPR) as defined in preferred path routing (PPR) as defined in
([I-D.chunduri-lsr-isis-preferred-path-routing]). It augments base ([I-D.chunduri-lsr-isis-preferred-path-routing]). It augments base
ISIS module defined in [I-D.ietf-isis-yang-isis-cfg]. ISIS module defined in [I-D.ietf-isis-yang-isis-cfg].
module: ietf-isis-ppr module: ietf-isis-ppr
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/isis:isis: /rt:control-plane-protocol/isis:isis:
+--rw ppr +--rw ppr
+--rw enable? boolean +--rw ppr-enable* [name]
+--rw enable? boolean
+--rw name -> /rt:routing/ppr:preferred-path-routing
/preferred-path-lists/name
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/isis:isis/isis:database /rt:control-plane-protocol/isis:isis/isis:database
/isis:level-db/isis:lsp: /isis:levels/isis:lsp:
+--ro ppr-tlvs +--ro ppr-tlvs
+--ro ppr-tlv* +--ro ppr-tlv*
+--ro flags? bits +--ro flags? bits
+--ro fragment-id? uint8 +--ro fragment-id? uint8
+--ro mt-id? uint16
+--ro algorithm? uint8
+--ro ppr-prefix-sub-tlv +--ro ppr-prefix-sub-tlv
| +--ro mt-id? uint16
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro isis-prefix? inet:ip-address | +--ro isis-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro sub-tlv-length? uint8
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-attribute-sub-tlv +--ro ppr-attribute-sub-tlv
+--ro traffic-accounting-sub-tlv +--ro traffic-accounting-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
+--ro traffic-statis-sub-tlv +--ro traffic-statis-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
skipping to change at page 7, line 46 skipping to change at page 12, line 48
| +--ro value? inet:ipv4-address | +--ro value? inet:ipv4-address
+--ro ipv6-routerid-sub-tlv +--ro ipv6-routerid-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? inet:ipv6-address | +--ro value? inet:ipv6-address
+--ro ppr-metric-sub-tlv +--ro ppr-metric-sub-tlv
+--ro type? uint8 +--ro type? uint8
+--ro length? uint8 +--ro length? uint8
+--ro value? uint32 +--ro value? uint32
<CODE BEGINS> file "ietf-isis-ppr@2019-03-10.yang" <CODE BEGINS> file "ietf-isis-ppr@2019-07-07.yang"
module ietf-isis-ppr { module ietf-isis-ppr {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-isis-ppr"; namespace "urn:ietf:params:xml:ns:yang:ietf-isis-ppr";
prefix isis-ppr; prefix isis-ppr;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-yang-types { import ietf-yang-types {
skipping to change at page 8, line 22 skipping to change at page 13, line 22
} }
import ietf-routing { import ietf-routing {
prefix rt; prefix rt;
} }
import ietf-isis { import ietf-isis {
prefix "isis"; prefix "isis";
} }
import ietf-ppr {
prefix "ppr";
}
organization organization
"IETF LSR - Link State Routing Working Group"; "IETF LSR - Link State Routing Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/group/lsr/> "WG Web: <http://datatracker.ietf.org/group/lsr/>
WG List: <mailto:lsr@ietf.org> WG List: <mailto:lsr@ietf.org>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yingzhen.qu@huawei.com> <mailto:yingzhen.qu@futurewei.com>
Uma Chunduri Uma Chunduri
<mailto:uma.chunduri@huawei.com>"; <mailto:uma.chunduri@futurewei.com>";
description description
"This Yang module defines the configuration and operational "This Yang module defines the configuration and operational
state for Preferred Path Routing common to all vendor state for Preferred Path Routing common to all vendor
implementations. implementations.
This YANG model conforms to the Network Management This YANG model conforms to the Network Management
Datastore Architecture (NDMA) as described in RFC XXXX. Datastore Architecture (NDMA) as described in RFC XXXX.
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices."; see the RFC itself for full legal notices.";
reference "RFC XXXX"; reference "RFC XXXX";
revision 2019-03-10 { revision 2019-07-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for ISIS PPR."; "RFC XXXX: A YANG Data Model for ISIS PPR.";
} }
/* Groupings */ /* Groupings */
grouping tlv { grouping tlv {
description description
"TLV"; "TLV";
skipping to change at page 9, line 47 skipping to change at page 15, line 4
unknown sub-TLVs."; unknown sub-TLVs.";
list unknown-tlv { list unknown-tlv {
description "General TLV."; description "General TLV.";
uses tlv; uses tlv;
} }
} }
grouping ppr-prefix-sub-tlv { grouping ppr-prefix-sub-tlv {
description "ISIS destination prefix."; description "ISIS destination prefix.";
container ppr-prefix-sub-tlv { container ppr-prefix-sub-tlv {
leaf mt-id {
type uint16 {
range "0 .. 4095";
}
description
"This leaf defines the identifier
of a topology.";
}
leaf prefix-len { leaf prefix-len {
type uint8; type uint8;
description "The length of the profix in bytes."; description "The length of the profix in bytes.";
} }
leaf mask-len { leaf mask-len {
type uint8; type uint8;
description "The length of the profix in bits."; description "The length of the profix in bits.";
} }
leaf isis-prefix { leaf isis-prefix {
type inet:ip-address; type inet:ip-address;
skipping to change at page 10, line 36 skipping to change at page 15, line 31
description description
"PPR Prefix sub-tlv."; "PPR Prefix sub-tlv.";
} }
} }
grouping ppr-id-sub-tlv { grouping ppr-id-sub-tlv {
description description
"PPR ID: the actual data plane identifier in the packet header."; "PPR ID: the actual data plane identifier in the packet header.";
container ppr-id-sub-tlv { container ppr-id-sub-tlv {
leaf flags {
type bits {
bit L {
position 0;
description
"If set, the PPR path is a Loose-PPR.";
}
bit A {
position 1;
description
"If set, all non-PPR path nodes in the ISIS area/domain
MUST add a FIB entry for the PPR-ID with NH set to the
shortest path NH for the prefix being advertised.";
}
}
description "Flags.";
}
leaf ppr-id-type { leaf ppr-id-type {
type enumeration { type enumeration {
enum mpls { enum mpls {
value 1; value 1;
description description
"PPR ID in mpls label format."; "PPR ID in mpls label format.";
} }
enum ipv4 { enum ipv4 {
value 2; value 2;
description description
skipping to change at page 11, line 38 skipping to change at page 16, line 18
} }
leaf ppr-id-len { leaf ppr-id-len {
type uint8; type uint8;
description description
"Length of the PPR ID."; "Length of the PPR ID.";
} }
leaf ppr-id-mask-len { leaf ppr-id-mask-len {
type uint8; type uint8;
description "The length of the profix in bits."; description "The length of the profix in bits.";
} }
leaf ppr-id-algo {
type uint8;
description "The SPF algorithm.";
}
choice ppr-id { choice ppr-id {
leaf mpls-id { leaf mpls-id {
type uint32; type uint32;
description "MPLS Label format."; description "MPLS Label format.";
} }
leaf ipv4-id { leaf ipv4-id {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description "IPv4 format."; description "IPv4 format.";
} }
leaf srv6-ipv6-id { leaf srv6-ipv6-id {
skipping to change at page 12, line 42 skipping to change at page 17, line 17
} }
description "Type of PDE."; description "Type of PDE.";
} }
leaf ppr-pde-flags { leaf ppr-pde-flags {
type bits { type bits {
bit L { bit L {
position 0; position 0;
description description
"If set, the PPR path is a Loose-PPR."; "If set, the PPR path is a Loose-PPR.";
} }
bit D { bit N {
position 1; position 1;
description description
"If set, the PDE is topological and this PDE represents "If set, the PDE is topological and this PDE represents
the node PPR-prfix"; the node PPR-prfix";
} }
bit E {
position 2;
description
"Egress Bit. By default this bit MUST be unset.";
}
} }
description "Flags."; description "Flags.";
} }
leaf pde-id-type { leaf pde-id-type {
type enumeration { type ppr:ppr-pde-id-type;
enum sidlabel { description "Type of PPR PDE ID.";
value 1;
description
"PPR ID in mpls label format.";
}
enum prefix-sid {
value 2;
description
"SR-MPLS prefix SID.";
}
enum adj-sid {
value 3;
description
"SR-MPLS adjacency SID.";
}
enum ipv4 {
value 4;
description
"PDE ID in IPv4 address format.";
}
enum ipv6 {
value 5;
description
"PDE ID in IPv6 address format.";
}
enum srv6-node-sid {
value 6;
description
"PDE ID in SRv6 node SID format.";
}
enum srv6-adj-sid {
value 7;
description
"PDE ID in SRv6 node SID format.";
}
}
description "Type of PPR ID.";
} }
leaf pde-id-len { leaf pde-id-len {
type uint8; type uint8;
description description
"Length of the PDE ID."; "Length of the PDE ID.";
} }
choice pde-id { choice pde-id {
leaf mpls-id { leaf mpls-id {
type uint32; type uint32;
description "MPLS Label format."; description "MPLS Label format.";
skipping to change at page 14, line 4 skipping to change at page 17, line 44
} }
leaf pde-id-len { leaf pde-id-len {
type uint8; type uint8;
description description
"Length of the PDE ID."; "Length of the PDE ID.";
} }
choice pde-id { choice pde-id {
leaf mpls-id { leaf mpls-id {
type uint32; type uint32;
description "MPLS Label format."; description "MPLS Label format.";
} }
leaf ipv4-id { leaf ipv4-id {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description "IPv4 format."; description "IPv4 format.";
} }
leaf srv6-ipv6-id { leaf srv6-ipv6-id {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description "SRv6 or IPv6 format."; description "SRv6 or IPv6 format.";
} }
description "Preferred Path ID."; description "Preferred Path ID.";
} }
leaf sub-tlv-length{
type uint8;
description
"Length of all sub-TLVs followed.";
}
container ppr-pde-sub-sub-tlvs { container ppr-pde-sub-sub-tlvs {
uses general-tlvs; uses general-tlvs;
description "PPR PDE sub sub-tlvs."; description "PPR PDE sub sub-tlvs.";
} }
} }
} }
grouping ppr-attribute-sub-tlv { grouping ppr-attribute-sub-tlv {
description "Grouping for PPR attribute sub-tlvs."; description "Grouping for PPR attribute sub-tlvs.";
skipping to change at page 16, line 19 skipping to change at page 20, line 16
grouping ppr-tlvs { grouping ppr-tlvs {
description "PPR TLV encodings."; description "PPR TLV encodings.";
container ppr-tlvs { container ppr-tlvs {
description "List of PPR TLVs."; description "List of PPR TLVs.";
list ppr-tlv { list ppr-tlv {
description "List of PPR TLVs."; description "List of PPR TLVs.";
leaf flags { leaf flags {
type bits { type bits {
bit S { bit F {
position 0; position 0;
description description
"If set, the PPR TLV must be flooded across "If set, the PPR TLV must be flooded across
the entire routing domain."; the entire routing domain.";
} }
bit D { bit D {
position 1; position 1;
description description
"If set, the PPR TLV is leaked from ISIS level-2 "If set, the PPR TLV is leaked from ISIS level-2
to level-1."; to level-1.";
} }
bit A { bit A {
position 2; position 2;
description description
"If set, it is to signal that the prefixes and PPR IDs "If set, it is to signal that the prefixes and PPR IDs
advertised in this TLV are directly connected to advertised in this TLV are directly connected to
their originators."; their originators.";
} }
bit L { bit U {
position 3; position 3;
description description
"L bit MUST be set if a path has only one fragment or if "U bit MUST be set if a path has only one fragment or
it is the last Fragment of the path."; if it is the last Fragment of the path.";
} }
} }
description "Flags."; description "Flags.";
} }
leaf fragment-id { leaf fragment-id {
type uint8 { type uint8 {
range "0 .. 127"; range "0 .. 127";
} }
description description
"Identifiler of the fragment."; "Identifiler of the fragment.";
}
leaf mt-id {
type uint16 {
range "0 .. 4095";
}
description
"This leaf defines the identifier
of a topology as in RFC 5120.";
}
leaf algorithm {
type uint8;
description
"The SPF algorithm.";
} }
uses ppr-prefix-sub-tlv; uses ppr-prefix-sub-tlv;
uses ppr-id-sub-tlv; uses ppr-id-sub-tlv;
uses ppr-pde-sub-tlv; uses ppr-pde-sub-tlv;
uses ppr-attribute-sub-tlv; uses ppr-attribute-sub-tlv;
} }
} }
} }
/* Configuration */ /* Configuration */
skipping to change at page 17, line 30 skipping to change at page 21, line 39
} }
description description
"This augments the ISIS protocol configuration "This augments the ISIS protocol configuration
with preferred path routing."; with preferred path routing.";
container ppr { container ppr {
description description
"ISIS PPR."; "ISIS PPR.";
leaf enable { leaf enable {
type boolean; type boolean;
default false;
description description
"Enable PPR."; "Enable PPR.";
}
list ppr-advertise {
key "name";
leaf name {
type leafref {
path "/rt:routing/ppr:preferred-path-routing/"
+ "ppr:preferred-path-lists/ppr:name";
}
description
"PPR path list name.";
}
description
"Enable PPR path advertisement.";
} }
} }
} }
/* Database */ /* Database */
augment "/rt:routing/" + augment "/rt:routing/"
"rt:control-plane-protocols/rt:control-plane-protocol"+ + "rt:control-plane-protocols/rt:control-plane-protocol"
"/isis:isis/isis:database/isis:level-db/isis:lsp" { + "/isis:isis/isis:database/isis:levels/isis:lsp" {
when "/rt:routing/rt:control-plane-protocols/"+ when "/rt:routing/rt:control-plane-protocols/"+
"rt:control-plane-protocol/rt:type = 'isis:isis'" { "rt:control-plane-protocol/rt:type = 'isis:isis'" {
description description
"This augment ISIS routing protocol when used"; "This augment ISIS routing protocol when used";
} }
description description
"This augments ISIS protocol LSDB."; "This augments ISIS protocol LSDB.";
uses ppr-tlvs; uses ppr-tlvs;
} }
skipping to change at page 18, line 16 skipping to change at page 22, line 41
This YANG module defines OSPF configuration and operation of This YANG module defines OSPF configuration and operation of
preferred path routing (PPR) as defined in preferred path routing (PPR) as defined in
([I-D.chunduri-lsr-ospf-preferred-path-routing]). It augments the ([I-D.chunduri-lsr-ospf-preferred-path-routing]). It augments the
base OSPF module defined in [I-D.ietf-ospf-yang]. Both OSPFv2 and base OSPF module defined in [I-D.ietf-ospf-yang]. Both OSPFv2 and
OSPFv3 are included. OSPFv3 are included.
module: ietf-ospf-ppr module: ietf-ospf-ppr
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf: /rt:control-plane-protocol/ospf:ospf:
+--rw ppr +--rw ppr
+--rw enable? boolean +--rw ppr-enable* [name]
+--rw enable? boolean
+--rw name -> /rt:routing/ppr:preferred-path-routing
/preferred-path-lists/name
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
/ospf:interfaces/ospf:interface/ospf:database /ospf:interfaces/ospf:interface/ospf:database
/ospf:link-scope-lsa-type/ospf:link-scope-lsas /ospf:link-scope-lsa-type/ospf:link-scope-lsas
/ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2
/ospf:body/ospf:opaque/ospf:extended-prefix-tlvs /ospf:body/ospf:opaque/ospf:extended-prefix-tlvs
/ospf:extended-prefix-tlv: /ospf:extended-prefix-tlv:
+--ro ppr-tlvs +--ro ppr-tlvs
+--ro ppr-tlv* +--ro ppr-tlv*
+--ro flags? bits +--ro flags? bits
+--ro af? iana-rt-types:address-family +--ro af? iana-rt-types:address-family
+--ro ppr-prefix-sub-tlv +--ro ppr-prefix-sub-tlv
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
skipping to change at page 18, line 40 skipping to change at page 23, line 21
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 20, line 13 skipping to change at page 24, line 40
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 21, line 33 skipping to change at page 26, line 11
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 23, line 6 skipping to change at page 27, line 31
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 24, line 26 skipping to change at page 28, line 50
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 25, line 46 skipping to change at page 30, line 21
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 27, line 19 skipping to change at page 31, line 41
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 28, line 39 skipping to change at page 33, line 12
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 30, line 11 skipping to change at page 34, line 31
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 31, line 32 skipping to change at page 35, line 51
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 33, line 4 skipping to change at page 37, line 22
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 34, line 5 skipping to change at page 38, line 22
+--ro ipv6-routerid-sub-tlv +--ro ipv6-routerid-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? inet:ipv6-address | +--ro value? inet:ipv6-address
+--ro ppr-metric-sub-tlv +--ro ppr-metric-sub-tlv
+--ro type? uint8 +--ro type? uint8
+--ro length? uint8 +--ro length? uint8
+--ro value? uint32 +--ro value? uint32
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:database /rt:control-plane-protocol/ospf:ospf/ospf:database
/ospf:as-scope-lsa-type/ospf:as-scope-lsas /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
/ospf:as-scope-lsa/ospf:version/ospf:ospfv3 /ospf:version/ospf:ospfv3/ospf:ospfv3/ospf:body
/ospf:ospfv3/ospf:body/ospf:as-external: /ospf:as-external:
+--ro ppr-tlvs +--ro ppr-tlvs
+--ro ppr-tlv* +--ro ppr-tlv*
+--ro flags? bits +--ro flags? bits
+--ro af? iana-rt-types:address-family +--ro af? iana-rt-types:address-family
+--ro ppr-prefix-sub-tlv +--ro ppr-prefix-sub-tlv
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 35, line 45 skipping to change at page 40, line 13
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 37, line 17 skipping to change at page 41, line 32
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 38, line 18 skipping to change at page 42, line 32
+--ro ipv6-routerid-sub-tlv +--ro ipv6-routerid-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? inet:ipv6-address | +--ro value? inet:ipv6-address
+--ro ppr-metric-sub-tlv +--ro ppr-metric-sub-tlv
+--ro type? uint8 +--ro type? uint8
+--ro length? uint8 +--ro length? uint8
+--ro value? uint32 +--ro value? uint32
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:database /rt:control-plane-protocol/ospf:ospf/ospf:database
/ospf:as-scope-lsa-type/ospf:as-scope-lsas /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
/ospf:as-scope-lsa/ospf:version/ospf:ospfv3 /ospf:version/ospf:ospfv3/ospf:ospfv3/ospf:body/ospf:nssa:
/ospf:ospfv3/ospf:body/ospf:nssa:
+--ro ppr-tlvs +--ro ppr-tlvs
+--ro ppr-tlv* +--ro ppr-tlv*
+--ro flags? bits +--ro flags? bits
+--ro af? iana-rt-types:address-family +--ro af? iana-rt-types:address-family
+--ro ppr-prefix-sub-tlv +--ro ppr-prefix-sub-tlv
| +--ro mt-id? uint8 | +--ro mt-id? uint8
| +--ro prefix-len? uint8 | +--ro prefix-len? uint8
| +--ro mask-len? uint8 | +--ro mask-len? uint8
| +--ro ospf-prefix? inet:ip-address | +--ro ospf-prefix? inet:ip-address
| +--ro ppr-prefix-sub-sub-tlvs | +--ro ppr-prefix-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
| +--ro unknown-tlv* | +--ro unknown-tlv*
| +--ro type? uint16 | +--ro type? uint16
| +--ro length? uint16 | +--ro length? uint16
| +--ro value? yang:hex-string | +--ro value? yang:hex-string
+--ro ppr-id-sub-tlv +--ro ppr-id-sub-tlv
| +--ro flags? bits
| +--ro ppr-id-type? enumeration | +--ro ppr-id-type? enumeration
| +--ro ppr-id-len? uint8 | +--ro ppr-id-len? uint8
| +--ro ppr-id-mask-len? uint8 | +--ro ppr-id-mask-len? uint8
| +--ro ppr-id-algo? uint8 | +--ro ppr-id-algo? uint8
| +--ro (ppr-id)? | +--ro (ppr-id)?
| +--:(mpls-id) | +--:(mpls-id)
| | +--ro mpls-id? uint32 | | +--ro mpls-id? uint32
| +--:(ipv4-id) | +--:(ipv4-id)
| | +--ro ipv4-id? inet:ipv4-prefix | | +--ro ipv4-id? inet:ipv4-prefix
| +--:(srv6-ipv6-id) | +--:(srv6-ipv6-id)
| +--ro srv6-ipv6-id? inet:ipv6-prefix | +--ro srv6-ipv6-id? inet:ipv6-prefix
+--ro ppr-pde-sub-tlvs* +--ro ppr-pde-sub-tlvs*
| +--ro pde-type? enumeration | +--ro pde-type? enumeration
| +--ro ppr-pde-flags? bits | +--ro ppr-pde-flags? bits
| +--ro pde-id-type? enumeration | +--ro pde-id-type? ppr:ppr-pde-id-type
| +--ro pde-id-len? uint8 | +--ro pde-id-len? uint8
| +--ro (pde-id)? | +--ro (pde-id)?
| | +--:(mpls-id) | | +--:(mpls-id)
| | | +--ro mpls-id? uint32 | | | +--ro mpls-id? uint32
| | +--:(ipv4-id) | | +--:(ipv4-id)
| | | +--ro ipv4-id? inet:ipv4-prefix | | | +--ro ipv4-id? inet:ipv4-prefix
| | +--:(srv6-ipv6-id) | | +--:(srv6-ipv6-id)
| | +--ro srv6-ipv6-id? inet:ipv6-prefix | | +--ro srv6-ipv6-id? inet:ipv6-prefix
| +--ro ppr-pde-sub-sub-tlvs | +--ro ppr-pde-sub-sub-tlvs
| +--ro unknown-tlvs | +--ro unknown-tlvs
skipping to change at page 39, line 37 skipping to change at page 43, line 49
| +--ro value? inet:ipv4-address | +--ro value? inet:ipv4-address
+--ro ipv6-routerid-sub-tlv +--ro ipv6-routerid-sub-tlv
| +--ro type? uint8 | +--ro type? uint8
| +--ro length? uint8 | +--ro length? uint8
| +--ro value? inet:ipv6-address | +--ro value? inet:ipv6-address
+--ro ppr-metric-sub-tlv +--ro ppr-metric-sub-tlv
+--ro type? uint8 +--ro type? uint8
+--ro length? uint8 +--ro length? uint8
+--ro value? uint32 +--ro value? uint32
<CODE BEGINS> file "ietf-ospf-ppr@2018-06-20.yang" <CODE BEGINS> file "ietf-ospf-ppr@2019-07-07.yang"
module ietf-ospf-ppr { module ietf-ospf-ppr {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-ppr"; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-ppr";
prefix ospf-ppr; prefix ospf-ppr;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-yang-types {
prefix "yang";
}
import ietf-routing-types {
prefix "rt-types";
reference "RFC 8291 - Common YANG Data Types for the
Routing Area";
}
import iana-routing-types { import iana-routing-types {
prefix "iana-rt-types"; prefix "iana-rt-types";
reference "RFC 8291 - Common YANG Data Types for the reference "RFC 8291 - Common YANG Data Types for the
Routing Area"; Routing Area";
} }
import ietf-routing { import ietf-routing {
prefix rt; prefix rt;
} }
import ietf-segment-routing-common {
prefix sr-cmn;
}
import ietf-ospf { import ietf-ospf {
prefix "ospf"; prefix "ospf";
} }
import ietf-ppr {
prefix "ppr";
}
organization organization
"IETF LSR - Link State Routing Working Group"; "IETF LSR - Link State Routing Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/group/lsr/> "WG Web: <http://datatracker.ietf.org/group/lsr/>
WG List: <mailto:lsr@ietf.org> WG List: <mailto:lsr@ietf.org>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yingzhen.qu@huawei.com> <mailto:yingzhen.qu@futurewei.com>
Uma Chunduri Uma Chunduri
<mailto:uma.chunduri@huawei.com>"; <mailto:uma.chunduri@futurewei.com>";
description description
"This Yang module defines the configuration and operational "This Yang module defines the configuration and operational
state for Preferred Path Routing common to all vendor state for Preferred Path Routing common to all vendor
implementations. implementations.
This YANG model conforms to the Network Management This YANG model conforms to the Network Management
Datastore Architecture (NDMA) as described in RFC XXXX. Datastore Architecture (NDMA) as described in RFC XXXX.
Copyright (c) 2017 IETF Trust and the persons identified as Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices."; see the RFC itself for full legal notices.";
reference "RFC XXXX"; reference "RFC XXXX";
revision 2018-06-20 { revision 2019-07-07 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for OSPFv2 and OSPFv3 PPR."; "RFC XXXX: A YANG Data Model for OSPFv2 and OSPFv3 PPR.";
} }
grouping ppr-prefix-sub-tlv { grouping ppr-prefix-sub-tlv {
description "Grouping for OSPF prefix sub-tlv."; description "Grouping for OSPF prefix sub-tlv.";
container ppr-prefix-sub-tlv { container ppr-prefix-sub-tlv {
skipping to change at page 42, line 14 skipping to change at page 46, line 17
"OSPF PPR prefix sub-tlv."; "OSPF PPR prefix sub-tlv.";
} }
} }
grouping ppr-id-sub-tlv { grouping ppr-id-sub-tlv {
description description
"PPR ID: the actual data plane identifier in the packet header."; "PPR ID: the actual data plane identifier in the packet header.";
container ppr-id-sub-tlv { container ppr-id-sub-tlv {
description "PPR ID sub tlv."; description "PPR ID sub tlv.";
leaf flags {
type bits {
bit L {
position 0;
description
"If set, the PPR path is a Loose-PPR.";
}
bit A {
position 1;
description
"If set, all non-PPR path nodes in the OSPF area/domain
MUST add a FIB entry for the PPR-ID with NH set to the
shortest path NH for the prefix being advertised.";
}
}
description "Flags.";
}
leaf ppr-id-type { leaf ppr-id-type {
type enumeration { type enumeration {
enum mpls { enum mpls {
value 1; value 1;
description description
"PPR ID in mpls label format."; "PPR ID in mpls label format.";
} }
enum ipv4 { enum ipv4 {
value 2; value 2;
description description
"PPR ID in IPv4 address format."; "PPR ID in IPv4 address format.";
} }
enum srv6 { enum ipv6 {
value 3; value 3;
description description
"PPR ID in SRv6 SID format."; "PPR ID in ipv6 address format.";
} }
enum ipv6 { enum srv6 {
value 4; value 4;
description description
"PPR ID in ipv6 address format."; "PPR ID in SRv6 SID format.";
} }
} }
description "Type of PPR ID."; description "Type of PPR ID.";
} }
leaf ppr-id-len { leaf ppr-id-len {
type uint8; type uint8;
description description
"Length of the PPR ID."; "Length of the PPR ID.";
} }
leaf ppr-id-mask-len { leaf ppr-id-mask-len {
skipping to change at page 44, line 28 skipping to change at page 48, line 12
position 0; position 0;
description description
"If set, the PPR path is a Loose-PPR."; "If set, the PPR path is a Loose-PPR.";
} }
bit D { bit D {
position 1; position 1;
description description
"If set, the PDE is topological and this PDE represents "If set, the PDE is topological and this PDE represents
the node PPR-prfix"; the node PPR-prfix";
} }
bit E {
position 2;
description
"Egress Bit. By default this bit MUST be unset.";
}
} }
description "Flags."; description "Flags.";
} }
leaf pde-id-type { leaf pde-id-type {
type enumeration { type ppr:ppr-pde-id-type;
enum sidlabel {
value 1;
description
"PPR ID in mpls label format.";
}
enum prefix-sid {
value 2;
description
"SR-MPLS prefix SID.";
}
enum adj-sid {
value 3;
description
"SR-MPLS adjacency SID.";
}
enum ipv4 {
value 4;
description
"PDE ID in IPv4 address format.";
}
enum ipv6 {
value 5;
description
"PDE ID in IPv6 address format.";
}
enum srv6-node-sid {
value 6;
description
"PDE ID in SRv6 node SID format.";
}
enum srv6-adj-sid {
value 7;
description
"PDE ID in SRv6 node SID format.";
}
}
description "Type of PDE ID."; description "Type of PDE ID.";
} }
leaf pde-id-len { leaf pde-id-len {
type uint8; type uint8;
description description
"Length of the PDE ID."; "Length of the PDE ID.";
} }
choice pde-id { choice pde-id {
leaf mpls-id { leaf mpls-id {
type uint32; type uint32;
skipping to change at page 48, line 43 skipping to change at page 51, line 45
description description
"This augments the OSPF routing protocol when used."; "This augments the OSPF routing protocol when used.";
} }
description description
"This augments the OSPF protocol configuration "This augments the OSPF protocol configuration
with preferred path routing."; with preferred path routing.";
container ppr { container ppr {
description description
"OSPF PPR."; "OSPF PPR.";
leaf enable { list ppr-enable {
type boolean; key "name";
leaf enable {
type boolean;
description
"Enable PPR.";
}
leaf name {
type leafref {
path "/rt:routing/ppr:preferred-path-routing/"
+ "ppr:preferred-path-lists/ppr:name";
}
description
"PPR path list name.";
}
description description
"Enable PPR."; "Enable PPR.";
} }
} }
} }
/* Database */ /* Database */
augment "/rt:routing/" augment "/rt:routing/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/" + "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:areas/ospf:area/" + "ospf:ospf/ospf:areas/ospf:area/"
skipping to change at page 55, line 16 skipping to change at page 58, line 27
TBD. TBD.
8. References 8. References
8.1. Normative References 8.1. Normative References
[I-D.chunduri-lsr-isis-preferred-path-routing] [I-D.chunduri-lsr-isis-preferred-path-routing]
Chunduri, U., Li, R., White, R., Tantsura, J., Contreras, Chunduri, U., Li, R., White, R., Tantsura, J., Contreras,
L., and Y. Qu, "Preferred Path Routing (PPR) in IS-IS", L., and Y. Qu, "Preferred Path Routing (PPR) in IS-IS",
draft-chunduri-lsr-isis-preferred-path-routing-02 (work in draft-chunduri-lsr-isis-preferred-path-routing-03 (work in
progress), February 2019. progress), May 2019.
[I-D.chunduri-lsr-ospf-preferred-path-routing] [I-D.chunduri-lsr-ospf-preferred-path-routing]
Chunduri, U., Qu, Y., White, R., Tantsura, J., and L. Chunduri, U., Qu, Y., White, R., Tantsura, J., and L.
Contreras, "Preferred Path Routing (PPR) in OSPF", draft- Contreras, "Preferred Path Routing (PPR) in OSPF", draft-
chunduri-lsr-ospf-preferred-path-routing-02 (work in chunduri-lsr-ospf-preferred-path-routing-03 (work in
progress), February 2019. progress), May 2019.
[I-D.ietf-isis-yang-isis-cfg] [I-D.ietf-isis-yang-isis-cfg]
Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L. Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L.
Lhotka, "YANG Data Model for IS-IS Protocol", draft-ietf- Lhotka, "YANG Data Model for IS-IS Protocol", draft-ietf-
isis-yang-isis-cfg-35 (work in progress), March 2019. isis-yang-isis-cfg-35 (work in progress), March 2019.
[I-D.ietf-ospf-yang] [I-D.ietf-ospf-yang]
Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem,
"YANG Data Model for OSPF Protocol", draft-ietf-ospf- "YANG Data Model for OSPF Protocol", draft-ietf-ospf-
yang-21 (work in progress), January 2019. yang-23 (work in progress), July 2019.
[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, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5246] Dierks, T., "The Transport Layer Security (TLS) Protocol [RFC5246] Dierks, T., "The Transport Layer Security (TLS) Protocol
Version 1.2", RFC 5246, August 2008. Version 1.2", RFC 5246, August 2008.
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the
Network Configuration Protocol (NETCONF)", RFC 6020, Network Configuration Protocol (NETCONF)", RFC 6020,
October 2010. October 2010.
skipping to change at page 56, line 20 skipping to change at page 59, line 33
8.2. Informative References 8.2. Informative References
[I-D.ietf-netmod-yang-tree-diagrams] [I-D.ietf-netmod-yang-tree-diagrams]
Bjorklund, M. and L. Berger, "YANG Tree Diagrams", draft- Bjorklund, M. and L. Berger, "YANG Tree Diagrams", draft-
ietf-netmod-yang-tree-diagrams-06 (work in progress), ietf-netmod-yang-tree-diagrams-06 (work in progress),
February 2018. February 2018.
Authors' Addresses Authors' Addresses
Yingzhen Qu Yingzhen Qu
Huawei USA Futurewei
2330 Central Expressway 2330 Central Expressway
Santa Clara, CA 95050 Santa Clara, CA 95050
USA USA
Email: yingzhen.qu@huawei.com Email: yingzhen.qu@futurewei.com
Uma Chunduri Uma Chunduri
Huawei USA Futurewei
2330 Central Expressway 2330 Central Expressway
Santa Clara, CA 95050 Santa Clara, CA 95050
USA USA
Email: uma.chunduri@huawei.com Email: uma.chunduri@futurewei.com
Jeff Tantsura Jeff Tantsura
Apstra Apstra
Email: jefftant.ietf@gmail.com Email: jefftant.ietf@gmail.com
 End of changes. 116 change blocks. 
264 lines changed or deleted 426 lines changed or added

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