Skip to main content

YANG Data Model for Preferred Path Routing
draft-qct-lsr-ppr-yang-01

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft whose latest revision state is "Expired".
Authors Yingzhen Qu , Uma Chunduri , Jeff Tantsura
Last updated 2019-03-10
RFC stream (None)
Formats
Stream Stream state (No stream defined)
Consensus boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-qct-lsr-ppr-yang-01
LSR Working Group                                                  Y. Qu
Internet-Draft                                               U. Chunduri
Intended status: Standards Track                              Huawei USA
Expires: September 11, 2019                                  J. Tantsura
                                                                  Apstra
                                                          March 10, 2019

               YANG Data Model for Preferred Path Routing
                       draft-qct-lsr-ppr-yang-01

Abstract

   This document defines YANG data modules for preferred path routing
   ([I-D.chunduri-lsr-isis-preferred-path-routing],
   [I-D.chunduri-lsr-ospf-preferred-path-routing]) configuration and
   operation.  The YANG modules are intended to be used on network
   elements to manage the configurations and operations of preferred
   path routing.

Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on September 11, 2019.

Copyright Notice

   Copyright (c) 2019 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

Qu, et al.             Expires September 11, 2019               [Page 1]
Internet-Draft                  ppr-yang                      March 2019

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Tree diagram  . . . . . . . . . . . . . . . . . . . . . .   2
   2.  PPR YANG Module . . . . . . . . . . . . . . . . . . . . . . .   2
   3.  ISIS PPR YANG Module  . . . . . . . . . . . . . . . . . . . .   6
   4.  OSPF PPR YANG Module  . . . . . . . . . . . . . . . . . . . .  18
   5.  Security Considerations . . . . . . . . . . . . . . . . . . .  54
   6.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  54
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  55
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  55
     8.1.  Normative References  . . . . . . . . . . . . . . . . . .  55
     8.2.  Informative References  . . . . . . . . . . . . . . . . .  56
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  56

1.  Introduction

   This document defines YANG data modules ([RFC6020], [RFC7950]) for
   preferred path routing configuration and operation.

   There are three YANG modules defined in this document.  Module ietf-
   ppr.yang defined the protocol independent part of configuration and
   operations.  Two IGP modules are defined as ietf-isis-ppr.yang and
   ietf-ospf-ppr.yang.

1.1.  Tree diagram

   Tree diagrams used in this document follow the notation defined in
   [I-D.ietf-netmod-yang-tree-diagrams].

2.  PPR YANG Module

   This YANG module defines protocol independent part of configuration
   and operation of preferred path routing (PPR) as defined in
   ([I-D.chunduri-lsr-isis-preferred-path-routing]).

Qu, et al.             Expires September 11, 2019               [Page 2]
Internet-Draft                  ppr-yang                      March 2019

   module: ietf-ppr
     augment /rt:routing:
       +--rw preferred-path-routing
          +--rw preferred-path-mpls* [ppr-id]
          |  +--rw ppr-id    uint32
          |  +--rw pde-id*   uint32
          +--rw preferred-path-ipv4* [ppr-id]
          |  +--rw ppr-id    inet:ipv4-prefix
          |  +--rw pde-id*   inet:ipv4-prefix
          +--rw preferred-path-ipv6* [ppr-id]
          |  +--rw ppr-id    inet:ipv6-prefix
          |  +--rw pde-id*   inet:ipv6-prefix
          +--rw preferred-path-srv6* [ppr-id]
             +--rw ppr-id    inet:ipv6-prefix
             +--rw pde-id*   inet:ipv6-prefix

   <CODE BEGINS> file "ietf-ppr@2018-06-20.yang"
   module ietf-ppr {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-ppr";

     prefix ppr;

     import ietf-inet-types {
       prefix inet;
     }

     import ietf-yang-types {
       prefix "yang";
     }

     import ietf-routing-types {
       prefix "rt-types";
     }

     import ietf-routing {
       prefix rt;
     }

     organization
         "IETF LSR - Link State Routing Working Group";

     contact
       "WG Web:   <http://datatracker.ietf.org/group/lsr/>
        WG List:  <mailto:lsr@ietf.org>

        Author:   Yingzhen Qu

Qu, et al.             Expires September 11, 2019               [Page 3]
Internet-Draft                  ppr-yang                      March 2019

                  <mailto:yingzhen.qu@huawei.com>
                  Uma Chunduri
                  <mailto:uma.chunduri@huawei.com>";
     description
       "This Yang module defines the configuration and operational
        state for Preferred Path Routing common to all vendor
        implementations.

        This YANG model conforms to the Network Management
        Datastore Architecture (NDMA) as described in RFC XXXX.

        Copyright (c) 2018 IETF Trust and the persons identified as
        authors of the code.  All rights reserved.

        Redistribution and use in source and binary forms, with or
        without modification, is permitted pursuant to, and subject
        to the license terms contained in, the Simplified BSD License
        set forth in Section 4.c of the IETF Trust's Legal Provisions
        Relating to IETF Documents
        (http://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX;
        see the RFC itself for full legal notices.";

     reference "RFC XXXX";

     revision 2018-06-20 {
       description
         "Initial revision.";
       reference
         "RFC XXXX: A YANG Data Model for PPR.";
     }

     augment "/rt:routing" {
       description
         "This module augments routing-instace configuration
          with preferred path routing.";
       container preferred-path-routing {
         description
           "preferred path routing configuration.";

         list preferred-path-mpls {
           key "ppr-id";
           description
             "List of preferred path using MPLS data plane.";
           leaf ppr-id {
             type uint32;
             description

Qu, et al.             Expires September 11, 2019               [Page 4]
Internet-Draft                  ppr-yang                      March 2019

               "PPR ID, A 20 bit label or 32 bit SID.";
           }
           leaf-list pde-id {
             type uint32;
             description
               "List of PPR Path Description Element (PDE).";
           }
         }

         list preferred-path-ipv4 {
           key "ppr-id";
           description
             "List of preferred path using IPv4 data plane.";
           leaf ppr-id {
             type inet:ipv4-prefix;
             description
               "PPR ID, IPv4 address format.";
           }
           leaf-list pde-id {
             type inet:ipv4-prefix;
             description
               "List of PPR Path Description Element (PDE).";
           }
         }

         list preferred-path-ipv6 {
           key "ppr-id";
           description
             "List of preferred path using IPv6 data plane.";
           leaf ppr-id {
             type inet:ipv6-prefix;
             description
               "PPR ID, IPv6 address format.";
           }
           leaf-list pde-id {
             type inet:ipv6-prefix;
             description
               "List of PPR Path Description Element (PDE).";
           }
         }

         list preferred-path-srv6 {
           key "ppr-id";
           description
             "List of preferred path using SRv6 data plane.";
           leaf ppr-id {
             type inet:ipv6-prefix;
             description

Qu, et al.             Expires September 11, 2019               [Page 5]
Internet-Draft                  ppr-yang                      March 2019

               "PPR ID, SRv6 SID format.";
           }
           leaf-list pde-id {
             type inet:ipv6-prefix;
             description
               "List of PPR Path Description Element (PDE).";
           }
         }
       }
     }
   }
   <CODE ENDS>

3.  ISIS PPR YANG Module

   This YANG module defines ISIS configuration and operation of
   preferred path routing (PPR) as defined in
   ([I-D.chunduri-lsr-isis-preferred-path-routing]).  It augments base
   ISIS module defined in [I-D.ietf-isis-yang-isis-cfg].

   module: ietf-isis-ppr
     augment /rt:routing/rt:control-plane-protocols
             /rt:control-plane-protocol/isis:isis:
       +--rw ppr
          +--rw enable?   boolean
     augment /rt:routing/rt:control-plane-protocols
             /rt:control-plane-protocol/isis:isis/isis:database
             /isis:level-db/isis:lsp:
       +--ro ppr-tlvs
          +--ro ppr-tlv*
             +--ro flags?                   bits
             +--ro fragment-id?             uint8
             +--ro ppr-prefix-sub-tlv
             |  +--ro mt-id?                     uint16
             |  +--ro prefix-len?                uint8
             |  +--ro mask-len?                  uint8
             |  +--ro isis-prefix?               inet:ip-address
             |  +--ro ppr-prefix-sub-sub-tlvs
             |     +--ro unknown-tlv*
             |        +--ro type?     uint8
             |        +--ro length?   uint8
             |        +--ro value?    yang:hex-string
             +--ro ppr-id-sub-tlv
             |  +--ro flags?             bits
             |  +--ro ppr-id-type?       enumeration
             |  +--ro ppr-id-len?        uint8
             |  +--ro ppr-id-mask-len?   uint8
             |  +--ro ppr-id-algo?       uint8

Qu, et al.             Expires September 11, 2019               [Page 6]
Internet-Draft                  ppr-yang                      March 2019

             |  +--ro (ppr-id)?
             |     +--:(mpls-id)
             |     |  +--ro mpls-id?           uint32
             |     +--:(ipv4-id)
             |     |  +--ro ipv4-id?           inet:ipv4-prefix
             |     +--:(srv6-ipv6-id)
             |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
             +--ro ppr-pde-sub-tlvs*
             |  +--ro pde-type?               enumeration
             |  +--ro ppr-pde-flags?          bits
             |  +--ro pde-id-type?            enumeration
             |  +--ro pde-id-len?             uint8
             |  +--ro (pde-id)?
             |  |  +--:(mpls-id)
             |  |  |  +--ro mpls-id?                uint32
             |  |  +--:(ipv4-id)
             |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
             |  |  +--:(srv6-ipv6-id)
             |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
             |  +--ro ppr-pde-sub-sub-tlvs
             |     +--ro unknown-tlv*
             |        +--ro type?     uint8
             |        +--ro length?   uint8
             |        +--ro value?    yang:hex-string
             +--ro ppr-attribute-sub-tlv
                +--ro traffic-accounting-sub-tlv
                |  +--ro type?   uint8
                +--ro traffic-statis-sub-tlv
                |  +--ro type?   uint8
                +--ro ipv4-routerid-sub-tlv
                |  +--ro type?     uint8
                |  +--ro length?   uint8
                |  +--ro value?    inet:ipv4-address
                +--ro ipv6-routerid-sub-tlv
                |  +--ro type?     uint8
                |  +--ro length?   uint8
                |  +--ro value?    inet:ipv6-address
                +--ro ppr-metric-sub-tlv
                   +--ro type?     uint8
                   +--ro length?   uint8
                   +--ro value?    uint32

<CODE BEGINS> file "ietf-isis-ppr@2019-03-10.yang"
module ietf-isis-ppr {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-isis-ppr";

Qu, et al.             Expires September 11, 2019               [Page 7]
Internet-Draft                  ppr-yang                      March 2019

  prefix isis-ppr;

  import ietf-inet-types {
    prefix inet;
  }

  import ietf-yang-types {
    prefix "yang";
  }

  import ietf-routing {
    prefix rt;
  }

  import ietf-isis {
    prefix "isis";
  }

  organization
      "IETF LSR - Link State Routing Working Group";

  contact
    "WG Web:   <http://datatracker.ietf.org/group/lsr/>
     WG List:  <mailto:lsr@ietf.org>

     Author:   Yingzhen Qu
               <mailto:yingzhen.qu@huawei.com>
               Uma Chunduri
               <mailto:uma.chunduri@huawei.com>";
  description
    "This Yang module defines the configuration and operational
     state for Preferred Path Routing common to all vendor
     implementations.

     This YANG model conforms to the Network Management
     Datastore Architecture (NDMA) as described in RFC XXXX.

     Copyright (c) 2018 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

Qu, et al.             Expires September 11, 2019               [Page 8]
Internet-Draft                  ppr-yang                      March 2019

     This version of this YANG module is part of RFC XXXX;
     see the RFC itself for full legal notices.";

  reference "RFC XXXX";

  revision 2019-03-10 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A YANG Data Model for ISIS PPR.";
  }

   /* Groupings */
  grouping tlv {
    description
      "TLV";
    leaf type {
      type uint8;
      description "TLV type.";
    }
    leaf length {
      type uint8;
      description "TLV length (octets).";
    }
    leaf value {
      type yang:hex-string;
      description "TLV value.";
    }
  }

  grouping general-tlvs {
    description
      "Unknown TLVs grouping - Used for unknown TLVs or
       unknown sub-TLVs.";

      list unknown-tlv {
        description "General TLV.";
        uses tlv;
      }
  }

  grouping ppr-prefix-sub-tlv {
    description "ISIS destination prefix.";

    container ppr-prefix-sub-tlv {
      leaf mt-id {
        type uint16 {
          range "0 .. 4095";

Qu, et al.             Expires September 11, 2019               [Page 9]
Internet-Draft                  ppr-yang                      March 2019

        }
        description
          "This leaf defines the identifier
          of a topology.";
      }
      leaf prefix-len {
        type uint8;
        description "The length of the profix in bytes.";
      }
      leaf mask-len {
        type uint8;
        description "The length of the profix in bits.";
      }
      leaf isis-prefix {
        type inet:ip-address;
        description "FEC Prefix.";
      }
      container ppr-prefix-sub-sub-tlvs {
        uses general-tlvs;
        description "PPR Prefix sub sub-tlvs.";
      }
      description
        "PPR Prefix sub-tlv.";
    }
  }

  grouping ppr-id-sub-tlv {
    description
      "PPR ID: the actual data plane identifier in the packet header.";

    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.";
      }

Qu, et al.             Expires September 11, 2019              [Page 10]
Internet-Draft                  ppr-yang                      March 2019

      leaf ppr-id-type {
        type enumeration {
            enum mpls {
              value 1;
              description
                "PPR ID in mpls label format.";
            }
            enum ipv4 {
              value 2;
              description
                "PPR ID in IPv4 address format.";
            }
            enum ipv6 {
              value 3;
              description
                "PPR ID in ipv6 address format.";
            }
            enum srv6 {
              value 4;
              description
                "PPR ID in SRv6 SID format.";
            }
        }
        description "Type of PPR ID.";
      }
      leaf ppr-id-len {
        type uint8;
        description
          "Length of the PPR ID.";
      }
      leaf ppr-id-mask-len {
        type uint8;
        description "The length of the profix in bits.";
      }
      leaf ppr-id-algo {
        type uint8;
        description "The SPF algorithm.";
      }
      choice ppr-id {
        leaf mpls-id {
          type uint32;
          description "MPLS Label format.";
        }
        leaf ipv4-id {
          type inet:ipv4-prefix;
          description "IPv4 format.";
        }
        leaf srv6-ipv6-id {

Qu, et al.             Expires September 11, 2019              [Page 11]
Internet-Draft                  ppr-yang                      March 2019

          type inet:ipv6-prefix;
          description "SRv6 or IPv6 format.";
        }
          description "Preferred Path ID.";
      }
      description "PPR ID sub tlv.";
    }

  }

  grouping ppr-pde-sub-tlv {
    description
      "This sub-tlv represents the PPR Path Description Element (PDE).";

    list ppr-pde-sub-tlvs {
      description "PPR PDE sub tlvs.";
      leaf pde-type {
        type enumeration {
          enum topological {
           value 1;
           description
             "Topological PDE.";
          }
          enum non-topological {
            value 2;
            description
              "Non-topological PDE.";
          }
        }
        description "Type of PDE.";
      }
      leaf ppr-pde-flags {
        type bits {
          bit L {
            position 0;
            description
              "If set, the PPR path is a Loose-PPR.";
          }
          bit D {
            position 1;
            description
              "If set, the PDE is topological and this PDE represents
               the node PPR-prfix";
          }
        }
        description "Flags.";
      }
      leaf pde-id-type {

Qu, et al.             Expires September 11, 2019              [Page 12]
Internet-Draft                  ppr-yang                      March 2019

        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 {
            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 {
        type uint8;
        description
          "Length of the PDE ID.";
      }
      choice pde-id {
        leaf mpls-id {
          type uint32;
          description "MPLS Label format.";

Qu, et al.             Expires September 11, 2019              [Page 13]
Internet-Draft                  ppr-yang                      March 2019

        }
        leaf ipv4-id {
          type inet:ipv4-prefix;
          description "IPv4 format.";
        }
        leaf srv6-ipv6-id {
          type inet:ipv6-prefix;
          description "SRv6 or IPv6 format.";
        }
          description "Preferred Path ID.";
      }
      container ppr-pde-sub-sub-tlvs {
        uses general-tlvs;
        description "PPR PDE sub sub-tlvs.";
      }
    }
  }

  grouping ppr-attribute-sub-tlv {
    description "Grouping for PPR attribute sub-tlvs.";

    container ppr-attribute-sub-tlv {
      description "PPR attribute sub-tlv.";

    container traffic-accounting-sub-tlv {
      description
        "packet traffic acccounting sub-tlv. Specifies to create
         a counter to count number of packets forwarded to this
         PPR-ID on each node in the path description.";
      leaf type {
        type uint8;
        default 1;
        description "Type 1 sub-tlv.";
      }
    }
    container traffic-statis-sub-tlv {
      description
        "Specifies to create a counter to count number of bytes
        forwarded on this PPR-ID specified in the network header
        (e.g.  IPv4, IPv6) on each node in the path description.";
      leaf type {
        type uint8;
        default 2;
        description "Traffic statistics in bytes sub-tlv.";
      }
    }
    container ipv4-routerid-sub-tlv {
      description "PPR-prefix originating node's IPv4 router ID.";

Qu, et al.             Expires September 11, 2019              [Page 14]
Internet-Draft                  ppr-yang                      March 2019

      leaf type {
        type uint8;
        default 3;
        description "PPR-prefix originating node's IPv4 router ID.";
      }
      leaf length {
        type uint8;
        default 4;
        description "Lenght is 4 bytes.";
      }
      leaf value {
        type inet:ipv4-address;
        description "IPv4 router ID.";
      }
    }
    container ipv6-routerid-sub-tlv {
      description "PPR-prefix originating node's IPv6 router ID.";
      leaf type {
        type uint8;
        default 4;
        description "PPR-prefix originating node's IPv6 router ID.";
      }
      leaf length {
        type uint8;
        default 16;
        description "Length is 16 bytes.";
      }
      leaf value {
        type inet:ipv6-address;
        description "IPv6 router ID.";
      }
    }
    container ppr-metric-sub-tlv {
      description
        "The metric of this path represented through the PPR-ID.";
      leaf type {
        type uint8;
        default 5;
        description "Metric sub-tlv.";
      }
      leaf length {
        type uint8;
        default 4;
        description "4 bytes.";
      }
      leaf value {
        type uint32;
        description "Metirc of the PPR-ID.";

Qu, et al.             Expires September 11, 2019              [Page 15]
Internet-Draft                  ppr-yang                      March 2019

      }
    }
    }
  }

  grouping ppr-tlvs {
    description "PPR TLV encodings.";

    container ppr-tlvs {
      description "List of PPR TLVs.";
      list ppr-tlv {
        description "List of PPR TLVs.";
        leaf flags {
          type bits {
            bit S {
              position 0;
              description
                "If set, the PPR TLV must be flooded across
                 the entire routing domain.";
            }
            bit D {
              position 1;
              description
                "If set, the PPR TLV is leaked from ISIS level-2
                 to level-1.";
            }
            bit A {
              position 2;
              description
                "If set, it is to signal that the prefixes and PPR IDs
                 advertised in this TLV are directly connected to
                 their originators.";
            }
            bit L {
               position 3;
               description
                 "L bit MUST be set if a path has only one fragment or if
                  it is the last Fragment of the path.";
            }
          }
          description "Flags.";
        }
        leaf fragment-id {
          type uint8 {
            range "0 .. 127";
          }
          description
            "Identifiler of the fragment.";

Qu, et al.             Expires September 11, 2019              [Page 16]
Internet-Draft                  ppr-yang                      March 2019

        }
        uses ppr-prefix-sub-tlv;
        uses ppr-id-sub-tlv;
        uses ppr-pde-sub-tlv;
        uses ppr-attribute-sub-tlv;
      }
    }
  }

  /* Configuration */
  augment "/rt:routing/rt:control-plane-protocols"
        + "/rt:control-plane-protocol/isis:isis" {
    when "../rt:type = 'isis:isis'" {
      description
        "This augments the ISIS routing protocol when used.";
    }
    description
      "This augments the ISIS protocol configuration
       with preferred path routing.";

    container ppr {
      description
        "ISIS PPR.";
      leaf enable {
        type boolean;
        description
          "Enable PPR.";
      }
    }
  }

  /* Database */
  augment "/rt:routing/" +
        "rt:control-plane-protocols/rt:control-plane-protocol"+
        "/isis:isis/isis:database/isis:level-db/isis:lsp" {
        when "/rt:routing/rt:control-plane-protocols/"+
        "rt:control-plane-protocol/rt:type = 'isis:isis'" {
      description
      "This augment ISIS routing protocol when used";
    }
        description
     "This augments ISIS protocol LSDB.";
    uses ppr-tlvs;

  }
}
<CODE ENDS>

Qu, et al.             Expires September 11, 2019              [Page 17]
Internet-Draft                  ppr-yang                      March 2019

4.  OSPF PPR YANG Module

   This YANG module defines OSPF configuration and operation of
   preferred path routing (PPR) as defined in
   ([I-D.chunduri-lsr-ospf-preferred-path-routing]).  It augments the
   base OSPF module defined in [I-D.ietf-ospf-yang].  Both OSPFv2 and
   OSPFv3 are included.

  module: ietf-ospf-ppr
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf:
      +--rw ppr
         +--rw enable?   boolean
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:interfaces/ospf:interface/ospf:database
            /ospf:link-scope-lsa-type/ospf:link-scope-lsas
            /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2
            /ospf:body/ospf:opaque/ospf:extended-prefix-tlvs
            /ospf:extended-prefix-tlv:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix

Qu, et al.             Expires September 11, 2019              [Page 18]
Internet-Draft                  ppr-yang                      March 2019

            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas
            /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2
            /ospf:body/ospf:opaque/ospf:extended-prefix-tlvs
            /ospf:extended-prefix-tlv:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8

Qu, et al.             Expires September 11, 2019              [Page 19]
Internet-Draft                  ppr-yang                      March 2019

            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address

Qu, et al.             Expires September 11, 2019              [Page 20]
Internet-Draft                  ppr-yang                      March 2019

               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:database
            /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
            /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque
            /ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)

Qu, et al.             Expires September 11, 2019              [Page 21]
Internet-Draft                  ppr-yang                      March 2019

            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:interfaces/ospf:interface/ospf:database
            /ospf:link-scope-lsa-type/ospf:link-scope-lsas
            /ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:inter-area-prefix:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16

Qu, et al.             Expires September 11, 2019              [Page 22]
Internet-Draft                  ppr-yang                      March 2019

            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8

Qu, et al.             Expires September 11, 2019              [Page 23]
Internet-Draft                  ppr-yang                      March 2019

                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas
            /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:inter-area-prefix:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs

Qu, et al.             Expires September 11, 2019              [Page 24]
Internet-Draft                  ppr-yang                      March 2019

            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:database
            /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
            /ospf:version/ospf:ospfv3/ospf:ospfv3/ospf:body
            /ospf:inter-area-prefix:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?

Qu, et al.             Expires September 11, 2019              [Page 25]
Internet-Draft                  ppr-yang                      March 2019

            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:interfaces/ospf:interface/ospf:database
            /ospf:link-scope-lsa-type/ospf:link-scope-lsas
            /ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:intra-area-prefix:
      +--ro ppr-tlvs

Qu, et al.             Expires September 11, 2019              [Page 26]
Internet-Draft                  ppr-yang                      March 2019

         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8

Qu, et al.             Expires September 11, 2019              [Page 27]
Internet-Draft                  ppr-yang                      March 2019

               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas
            /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:intra-area-prefix:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*

Qu, et al.             Expires September 11, 2019              [Page 28]
Internet-Draft                  ppr-yang                      March 2019

            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:database
            /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa
            /ospf:version/ospf:ospfv3/ospf:ospfv3/ospf:body
            /ospf:intra-area-prefix:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address

Qu, et al.             Expires September 11, 2019              [Page 29]
Internet-Draft                  ppr-yang                      March 2019

            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8

Qu, et al.             Expires September 11, 2019              [Page 30]
Internet-Draft                  ppr-yang                      March 2019

               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:interfaces/ospf:interface/ospf:database
            /ospf:link-scope-lsa-type/ospf:link-scope-lsas
            /ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:as-external:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32

Qu, et al.             Expires September 11, 2019              [Page 31]
Internet-Draft                  ppr-yang                      March 2019

            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas
            /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:as-external:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv

Qu, et al.             Expires September 11, 2019              [Page 32]
Internet-Draft                  ppr-yang                      March 2019

            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols

Qu, et al.             Expires September 11, 2019              [Page 33]
Internet-Draft                  ppr-yang                      March 2019

            /rt:control-plane-protocol/ospf:ospf/ospf:database
            /ospf:as-scope-lsa-type/ospf:as-scope-lsas
            /ospf:as-scope-lsa/ospf:version/ospf:ospfv3
            /ospf:ospfv3/ospf:body/ospf:as-external:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16

Qu, et al.             Expires September 11, 2019              [Page 34]
Internet-Draft                  ppr-yang                      March 2019

            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:interfaces/ospf:interface/ospf:database
            /ospf:link-scope-lsa-type/ospf:link-scope-lsas
            /ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:nssa:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)

Qu, et al.             Expires September 11, 2019              [Page 35]
Internet-Draft                  ppr-yang                      March 2019

            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
            /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas
            /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
            /ospf:body/ospf:nssa:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits

Qu, et al.             Expires September 11, 2019              [Page 36]
Internet-Draft                  ppr-yang                      March 2019

            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits
            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8

Qu, et al.             Expires September 11, 2019              [Page 37]
Internet-Draft                  ppr-yang                      March 2019

               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32
    augment /rt:routing/rt:control-plane-protocols
            /rt:control-plane-protocol/ospf:ospf/ospf:database
            /ospf:as-scope-lsa-type/ospf:as-scope-lsas
            /ospf:as-scope-lsa/ospf:version/ospf:ospfv3
            /ospf:ospfv3/ospf:body/ospf:nssa:
      +--ro ppr-tlvs
         +--ro ppr-tlv*
            +--ro flags?                   bits
            +--ro af?                      iana-rt-types:address-family
            +--ro ppr-prefix-sub-tlv
            |  +--ro mt-id?                     uint8
            |  +--ro prefix-len?                uint8
            |  +--ro mask-len?                  uint8
            |  +--ro ospf-prefix?               inet:ip-address
            |  +--ro ppr-prefix-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-id-sub-tlv
            |  +--ro flags?             bits
            |  +--ro ppr-id-type?       enumeration
            |  +--ro ppr-id-len?        uint8
            |  +--ro ppr-id-mask-len?   uint8
            |  +--ro ppr-id-algo?       uint8
            |  +--ro (ppr-id)?
            |     +--:(mpls-id)
            |     |  +--ro mpls-id?           uint32
            |     +--:(ipv4-id)
            |     |  +--ro ipv4-id?           inet:ipv4-prefix
            |     +--:(srv6-ipv6-id)
            |        +--ro srv6-ipv6-id?      inet:ipv6-prefix
            +--ro ppr-pde-sub-tlvs*
            |  +--ro pde-type?               enumeration
            |  +--ro ppr-pde-flags?          bits

Qu, et al.             Expires September 11, 2019              [Page 38]
Internet-Draft                  ppr-yang                      March 2019

            |  +--ro pde-id-type?            enumeration
            |  +--ro pde-id-len?             uint8
            |  +--ro (pde-id)?
            |  |  +--:(mpls-id)
            |  |  |  +--ro mpls-id?                uint32
            |  |  +--:(ipv4-id)
            |  |  |  +--ro ipv4-id?                inet:ipv4-prefix
            |  |  +--:(srv6-ipv6-id)
            |  |     +--ro srv6-ipv6-id?           inet:ipv6-prefix
            |  +--ro ppr-pde-sub-sub-tlvs
            |     +--ro unknown-tlvs
            |        +--ro unknown-tlv*
            |           +--ro type?     uint16
            |           +--ro length?   uint16
            |           +--ro value?    yang:hex-string
            +--ro ppr-attribute-sub-tlv
               +--ro traffic-accounting-sub-tlv
               |  +--ro type?   uint8
               +--ro traffic-statis-sub-tlv
               |  +--ro type?   uint8
               +--ro ipv4-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv4-address
               +--ro ipv6-routerid-sub-tlv
               |  +--ro type?     uint8
               |  +--ro length?   uint8
               |  +--ro value?    inet:ipv6-address
               +--ro ppr-metric-sub-tlv
                  +--ro type?     uint8
                  +--ro length?   uint8
                  +--ro value?    uint32

 <CODE BEGINS> file "ietf-ospf-ppr@2018-06-20.yang"
 module ietf-ospf-ppr {
   yang-version 1.1;
   namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-ppr";

   prefix ospf-ppr;

   import ietf-inet-types {
     prefix inet;
   }

   import ietf-yang-types {
     prefix "yang";
   }

Qu, et al.             Expires September 11, 2019              [Page 39]
Internet-Draft                  ppr-yang                      March 2019

   import ietf-routing-types {
     prefix "rt-types";
     reference "RFC 8291 - Common YANG Data Types for the
                Routing Area";
   }

   import iana-routing-types {
     prefix "iana-rt-types";
     reference "RFC 8291 - Common YANG Data Types for the
                Routing Area";
   }

   import ietf-routing {
     prefix rt;
   }

   import ietf-segment-routing-common {
     prefix sr-cmn;
   }

   import ietf-ospf {
     prefix "ospf";
   }

   organization
       "IETF LSR - Link State Routing Working Group";

   contact
     "WG Web:   <http://datatracker.ietf.org/group/lsr/>
      WG List:  <mailto:lsr@ietf.org>

      Author:   Yingzhen Qu
                <mailto:yingzhen.qu@huawei.com>
                Uma Chunduri
                <mailto:uma.chunduri@huawei.com>";
   description
     "This Yang module defines the configuration and operational
      state for Preferred Path Routing common to all vendor
      implementations.

      This YANG model conforms to the Network Management
      Datastore Architecture (NDMA) as described in RFC XXXX.

      Copyright (c) 2017 IETF Trust and the persons identified as
      authors of the code.  All rights reserved.

      Redistribution and use in source and binary forms, with or
      without modification, is permitted pursuant to, and subject

Qu, et al.             Expires September 11, 2019              [Page 40]
Internet-Draft                  ppr-yang                      March 2019

      to the license terms contained in, the Simplified BSD License
      set forth in Section 4.c of the IETF Trust's Legal Provisions
      Relating to IETF Documents
      (http://trustee.ietf.org/license-info).

      This version of this YANG module is part of RFC XXXX;
      see the RFC itself for full legal notices.";

   reference "RFC XXXX";

   revision 2018-06-20 {
     description
       "Initial revision.";
     reference
       "RFC XXXX: A YANG Data Model for OSPFv2 and OSPFv3 PPR.";
   }

   grouping ppr-prefix-sub-tlv {
     description "Grouping for OSPF prefix sub-tlv.";

     container ppr-prefix-sub-tlv {
       leaf mt-id {
         type uint8 {
           range "0 .. 255";
         }
         description
           "This leaf defines the identifier
           of a topology.";
       }
       leaf prefix-len {
         type uint8;
         description "The length of the profix in bytes.";
       }
       leaf mask-len {
         type uint8;
         description "The length of the profix in bits.";
       }
       leaf ospf-prefix {
         type inet:ip-address;
         description "OSPF Prefix.";
       }
       container ppr-prefix-sub-sub-tlvs {
         uses ospf:unknown-tlvs;
         description
           "PPR-Prefix sub-tlvs.";
       }
       description

Qu, et al.             Expires September 11, 2019              [Page 41]
Internet-Draft                  ppr-yang                      March 2019

         "OSPF PPR prefix sub-tlv.";
     }
   }

   grouping ppr-id-sub-tlv {
     description
       "PPR ID: the actual data plane identifier in the packet header.";

     container 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 {
         type enumeration {
             enum mpls {
               value 1;
               description
                 "PPR ID in mpls label format.";
             }
             enum ipv4 {
               value 2;
               description
                 "PPR ID in IPv4 address format.";
             }
             enum srv6 {
               value 3;
               description
                 "PPR ID in SRv6 SID format.";
             }
             enum ipv6 {
               value 4;
               description

Qu, et al.             Expires September 11, 2019              [Page 42]
Internet-Draft                  ppr-yang                      March 2019

                 "PPR ID in ipv6 address format.";
             }
         }
         description "Type of PPR ID.";
       }
       leaf ppr-id-len {
         type uint8;
         description
           "Length of the PPR ID.";
       }
       leaf ppr-id-mask-len {
         type uint8;
         description "The length of the profix in bits.";
       }
       leaf ppr-id-algo {
         type uint8;
         description "The SPF algorithm.";
       }
       choice ppr-id {
         leaf mpls-id {
           type uint32;
           description "MPLS Label format.";
         }
         leaf ipv4-id {
           type inet:ipv4-prefix;
           description "IPv4 format.";
         }
         leaf srv6-ipv6-id {
           type inet:ipv6-prefix;
           description "SRv6 or IPv6 format.";
         }
           description "Preferred Path ID.";
       }
     }

   }

   grouping ppr-pde-sub-tlv {
     description
       "This sub-tlv represents the PPR Path Description
        Element (PDE).";

     list ppr-pde-sub-tlvs {
       description "PPR PDE sub tlvs.";
       leaf pde-type {
         type enumeration {
           enum topological {
            value 1;

Qu, et al.             Expires September 11, 2019              [Page 43]
Internet-Draft                  ppr-yang                      March 2019

            description
              "Topological PDE.";
           }
           enum non-topological {
             value 2;
             description
               "Non-topological PDE.";
           }
         }
         description "PDE type.";
       }
       leaf ppr-pde-flags {
         type bits {
           bit L {
             position 0;
             description
               "If set, the PPR path is a Loose-PPR.";
           }
           bit D {
             position 1;
             description
               "If set, the PDE is topological and this PDE represents
                the node PPR-prfix";
           }
         }
         description "Flags.";
       }
       leaf 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 {
               value 4;
               description
                 "PDE ID in IPv4 address format.";

Qu, et al.             Expires September 11, 2019              [Page 44]
Internet-Draft                  ppr-yang                      March 2019

             }
             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.";
       }
       leaf pde-id-len {
         type uint8;
         description
           "Length of the PDE ID.";
       }
       choice pde-id {
         leaf mpls-id {
           type uint32;
           description "MPLS Label format.";
         }
         leaf ipv4-id {
           type inet:ipv4-prefix;
           description "IPv4 format.";
         }
         leaf srv6-ipv6-id {
           type inet:ipv6-prefix;
           description "SRv6 or IPv6 format.";
         }
           description "Preferred Path ID.";
       }
       container ppr-pde-sub-sub-tlvs {
         uses ospf:unknown-tlvs;
         description "PPR PDE sub sub-tlv.";
       }
     }
   }

   grouping ppr-attribute-sub-tlv {
     description "Grouping for PPR attribute sub-tlvs.";

Qu, et al.             Expires September 11, 2019              [Page 45]
Internet-Draft                  ppr-yang                      March 2019

     container ppr-attribute-sub-tlv {
       description "PPR attribute sub-tlv.";

     container traffic-accounting-sub-tlv {
       description
         "packet traffic acccounting sub-tlv. Specifies to create
          a counter to count number of packets forwarded to this
          PPR-ID on each node in the path description.";
       leaf type {
         type uint8;
         default 1;
         description "Type 1 sub-tlv.";
       }
     }
     container traffic-statis-sub-tlv {
       description
         "Specifies to create a counter to count number of bytes
         forwarded on this PPR-ID specified in the network header
         (e.g.  IPv4, IPv6) on each node in the path description.";
       leaf type {
         type uint8;
         default 2;
         description "Traffic statistics in bytes sub-tlv.";
       }
     }
     container ipv4-routerid-sub-tlv {
       description "PPR-prefix originating node's IPv4 router ID.";
       leaf type {
         type uint8;
         default 3;
         description "PPR-prefix originating node's IPv4 router ID.";
       }
       leaf length {
         type uint8;
         default 4;
         description "TLV length is 4.";
       }
       leaf value {
         type inet:ipv4-address;
         description "IPv4 router ID.";
       }
     }
     container ipv6-routerid-sub-tlv {
       description "PPR-prefix originating node's IPv6 router ID.";
       leaf type {
         type uint8;
         default 4;
         description "PPR-prefix originating node's IPv6 router ID.";

Qu, et al.             Expires September 11, 2019              [Page 46]
Internet-Draft                  ppr-yang                      March 2019

       }
       leaf length {
         type uint8;
         default 16;
         description "TLV length is 16.";
       }
       leaf value {
         type inet:ipv6-address;
         description "IPv6 router ID.";
       }
     }
     container ppr-metric-sub-tlv {
       description
         "The metric of this path represented through the PPR-ID.";
       leaf type {
         type uint8;
         default 5;
         description "Metric sub-tlv.";
       }
       leaf length {
         type uint8;
         default 4;
         description "4 bytes.";
       }
       leaf value {
         type uint32;
         description "Metirc of the PPR-ID.";
       }
     }
     }
   }

   grouping ppr-tlvs {
     description "PPR TLV in extended prefix opaque LSAs.";

     container ppr-tlvs {
       description "List of PPR TLVs.";
       list ppr-tlv {
         description "OSPF PPR TLV.";
         leaf flags {
           type bits {
             bit IA {
               position 0;
               description
                 "Inter-Area flag.";
             }
             bit A {
               position 1;

Qu, et al.             Expires September 11, 2019              [Page 47]
Internet-Draft                  ppr-yang                      March 2019

               description
                 "If set, it is to signal that the prefixes and PPR
                  IDs advertised in this TLV are directly connected
                  to their originators.";
             }
           }
           description "Flags.";
         }
         leaf af {
           type iana-rt-types:address-family;
           description
             "Address family of the OSPF instance.";
         }

         uses ppr-prefix-sub-tlv;
         uses ppr-id-sub-tlv;
         uses ppr-pde-sub-tlv;
         uses ppr-attribute-sub-tlv;
       }

     }

   }

   /* Configuration */
   augment "/rt:routing/rt:control-plane-protocols"
         + "/rt:control-plane-protocol/ospf:ospf" {
     when "../rt:type = 'ospf:ospfv2' or "
        + "../rt:type = 'ospf:ospfv3'" {
       description
         "This augments the OSPF routing protocol when used.";
     }
     description
       "This augments the OSPF protocol configuration
        with preferred path routing.";

     container ppr {
       description
         "OSPF PPR.";
       leaf enable {
         type boolean;
         description
           "Enable PPR.";
       }
     }
   }

   /* Database */

Qu, et al.             Expires September 11, 2019              [Page 48]
Internet-Draft                  ppr-yang                      March 2019

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/ospf:area/"
         + "ospf:interfaces/ospf:interface/ospf:database/"
         + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
         + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/"
         + "ospf:ospfv2/ospf:body/ospf:opaque/"
         + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
     when "../../../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv2'" {
       description
         "This augmentation is only valid for OSPFv2.";
     }
     description
       "PPR specific TLVs for OSPFv2 type 9 opaque LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/"
         + "ospf:area/ospf:database/"
         + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
         + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/"
         + "ospf:ospfv2/ospf:body/ospf:opaque/"
         + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
     when "../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv2'" {
       description
         "This augmentation is only valid for OSPFv2.";
     }
     description
       "PPR specific TLVs for OSPFv2 type 10 opaque LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:database/"
         + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
         + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/"
         + "ospf:ospfv2/ospf:body/ospf:opaque/"
         + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" {
     when "../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv2'" {
       description
         "This augmentation is only valid for OSPFv2.";
     }

Qu, et al.             Expires September 11, 2019              [Page 49]
Internet-Draft                  ppr-yang                      March 2019

     description
       "PPR specific TLVs for OSPFv2 type 11 opaque LSA.";
     uses ppr-tlvs;
   }

   /* OSPFv3 inter-area-prefix-lsa */
   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/ospf:area/"
         + "ospf:interfaces/ospf:interface/ospf:database/"
         + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
         + "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:inter-area-prefix" {
     when "../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }

     description
       "SR specific TLVs for OSPFv3 link scope Inter-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/"
         + "ospf:area/ospf:database/"
         + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
         + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:inter-area-prefix" {
     when "../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 area scope Inter-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:database/"
         + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
         + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:inter-area-prefix" {
     when "../../../../../../../../"

Qu, et al.             Expires September 11, 2019              [Page 50]
Internet-Draft                  ppr-yang                      March 2019

        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 as scope Inter-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   /* OSPFv3 intra-area-prefix-lsa */
     augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/ospf:area/"
         + "ospf:interfaces/ospf:interface/ospf:database/"
         + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
         + "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:intra-area-prefix" {
     when "../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }

     description
       "SR specific TLVs for OSPFv3 link scope Intra-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/"
         + "ospf:area/ospf:database/"
         + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
         + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:intra-area-prefix" {
     when "../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 area scope Inter-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:database/"

Qu, et al.             Expires September 11, 2019              [Page 51]
Internet-Draft                  ppr-yang                      March 2019

         + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
         + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:intra-area-prefix" {
     when "../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 as scope Intra-Area-Prefix-LSA.";
     uses ppr-tlvs;
   }

   /* OSPFv3 external-lsa */
     augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/ospf:area/"
         + "ospf:interfaces/ospf:interface/ospf:database/"
         + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
         + "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:as-external" {
     when "../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }

     description
       "SR specific TLVs for OSPFv3 link scope AS-External-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/"
         + "ospf:area/ospf:database/"
         + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
         + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:as-external" {
     when "../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 area scope AS-External-LSA.";
     uses ppr-tlvs;

Qu, et al.             Expires September 11, 2019              [Page 52]
Internet-Draft                  ppr-yang                      March 2019

   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:database/"
         + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
         + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:as-external" {
     when "../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 as scope AS-External-LSA.";
     uses ppr-tlvs;
   }

   /* OSPFv3 Type-7 NSSA */
     augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/ospf:area/"
         + "ospf:interfaces/ospf:interface/ospf:database/"
         + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
         + "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:nssa" {
     when "../../../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }

     description
       "SR specific TLVs for OSPFv3 link scope Type-7-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:areas/"
         + "ospf:area/ospf:database/"
         + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
         + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:nssa" {
     when "../../../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description

Qu, et al.             Expires September 11, 2019              [Page 53]
Internet-Draft                  ppr-yang                      March 2019

         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 area scope Type-7-LSA.";
     uses ppr-tlvs;
   }

   augment "/rt:routing/"
         + "rt:control-plane-protocols/rt:control-plane-protocol/"
         + "ospf:ospf/ospf:database/"
         + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
         + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/"
         + "ospf:ospfv3/ospf:body/ospf:nssa" {
     when "../../../../../../../../"
        + "rt:type = 'ospf:ospfv3'" {
       description
         "This augmentation is only valid for OSPFv3.";
     }
     description
       "SR specific TLVs for OSPFv3 as scope Type-7-LSA.";
     uses ppr-tlvs;
   }
 }
 <CODE ENDS>

5.  Security Considerations

   The YANG modules specified in this document define a schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF [RFC6241] or RESTCONF [RFC8040].  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) [RFC6242].  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   [RFC5246].

   The NETCONF access control model [RFC6536] provides the means to
   restrict access for particular NETCONF or RESTCONF users to a pre-
   configured subset of all available NETCONF or RESTCONF protocol
   operations and content.

6.  Acknowledgements

   TBD.

Qu, et al.             Expires September 11, 2019              [Page 54]
Internet-Draft                  ppr-yang                      March 2019

7.  IANA Considerations

   TBD.

8.  References

8.1.  Normative References

   [I-D.chunduri-lsr-isis-preferred-path-routing]
              Chunduri, U., Li, R., White, R., Tantsura, J., Contreras,
              L., and Y. Qu, "Preferred Path Routing (PPR) in IS-IS",
              draft-chunduri-lsr-isis-preferred-path-routing-02 (work in
              progress), February 2019.

   [I-D.chunduri-lsr-ospf-preferred-path-routing]
              Chunduri, U., Qu, Y., White, R., Tantsura, J., and L.
              Contreras, "Preferred Path Routing (PPR) in OSPF", draft-
              chunduri-lsr-ospf-preferred-path-routing-02 (work in
              progress), February 2019.

   [I-D.ietf-isis-yang-isis-cfg]
              Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L.
              Lhotka, "YANG Data Model for IS-IS Protocol", draft-ietf-
              isis-yang-isis-cfg-35 (work in progress), March 2019.

   [I-D.ietf-ospf-yang]
              Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem,
              "YANG Data Model for OSPF Protocol", draft-ietf-ospf-
              yang-21 (work in progress), January 2019.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC5246]  Dierks, T., "The Transport Layer Security (TLS) Protocol
              Version 1.2", RFC 5246, August 2008.

   [RFC6020]  Bjorklund, M., "YANG - A Data Modeling Language for the
              Network Configuration Protocol (NETCONF)", RFC 6020,
              October 2010.

   [RFC6241]  Enns, R., "Network Configuration Protocol (NETCONF)",
              RFC 6241, June 2011.

   [RFC6242]  Wasserman, M., "Using the NETCONF Protocol over Secure
              Shell (SSH)", RFC 6242, June 2011.

   [RFC6536]  Bierman, A., "Network Configuration Protocol (NETCONF)
              Access Control Model", RFC 6536, March 2012.

Qu, et al.             Expires September 11, 2019              [Page 55]
Internet-Draft                  ppr-yang                      March 2019

   [RFC7950]  Bjorklund, M., "The YANG 1.1 Data Modeling Language",
              RFC 7950, August 2016.

   [RFC8040]  Bierman, A., "RESTCONF Protocol", RFC 8040, January 2017.

8.2.  Informative References

   [I-D.ietf-netmod-yang-tree-diagrams]
              Bjorklund, M. and L. Berger, "YANG Tree Diagrams", draft-
              ietf-netmod-yang-tree-diagrams-06 (work in progress),
              February 2018.

Authors' Addresses

   Yingzhen Qu
   Huawei USA
   2330 Central Expressway
   Santa Clara, CA  95050
   USA

   Email: yingzhen.qu@huawei.com

   Uma Chunduri
   Huawei USA
   2330 Central Expressway
   Santa Clara, CA  95050
   USA

   Email: uma.chunduri@huawei.com

   Jeff Tantsura
   Apstra

   Email: jefftant.ietf@gmail.com

Qu, et al.             Expires September 11, 2019              [Page 56]