<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-chen-i2rs-mpls-ldp-info-model-00"
     ipr="trust200902">
  <front>
    <title abbrev="I2RS Information Model for MPLS LDP">I2RS Information Model
    for MPLS LDP</title>

    <author fullname="Xia Chen" initials="X. " surname="Chen">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>
          <city>Beijing</city>
          <code>100095</code>
          <country>China</country>
        </postal>
        <email>jescia.chenxia@huawei.com</email>
      </address>
    </author>

    <author fullname="Zhenbin Li" initials="Z. " surname="Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Bld., No.156 Beiqing Rd.</street>
          <city>Beijing</city>
          <code>100095</code>
          <country>China</country>
        </postal>
        <email>lizhenbin@huawei.com</email>
      </address>
    </author>
    <author fullname="Susan Hares" initials="S. " surname="Hares">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street></street>
          <city>Saline, MI</city>
          <code>48176</code>
          <country>US</country>
        </postal>
        <email>shares@ndzh.com</email>
      </address>
    </author>
	<author fullname="Russ White" initials="R. " surname="White">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street></street>
          <city> </city>
          <code></code>
          <country>US</country>
        </postal>
     <email>russ.white@ericsson.com</email>
      </address>
    </author>
    <author fullname="Jeff Tantsura" initials="J. " surname="Tantsura">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street></street>
          <city> </city>
          <code></code>
          <country></country>
        </postal>
        <email>jeff.tantsura@ericsson.com</email>
      </address>
    </author>
    <date month="October" year="2014"/>

    <abstract>
      <t>The Label Distribution Protocol (LDP) (<xref target="RFC5036"/>) is a
      protocol defined for distributing labels in MPLS domain. Traditionally
      LDP protocol may be managed via CLI, SNMP or NETCONF. The Interface to
      the Routing System's (I2RS) Programmatic interface (draft-ietf-i2rs-architecture)
	  provides an alternate way to control the configuration and diagnose
	  the operation of the LDP protocol.</t>

      <t>This document specifies an information model for the LDP protocol to
      facilitate the definition of a standardized data model, which can be
      used to define interfaces to the LDP from an entity that may even be
      external to the routing system. Based on standardized data model and
      interfaces, use cases of I2RS interface to LDP protocol 
      (draft-chen-i2rs-mpls-ldp-usecases) can be supported.</t>
    </abstract>

    <note title="Requirements Language">
      <t>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 <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>The Label Distribution Protocol (LDP) (<xref target="RFC5036"/>) is a
      protocol defined for distributing labels in MPLS domain. Traditionally
      LDP protocol may be managed via CLI, SNMP or NETCONF. With the expansion
      and complication of modern networks, the necessity for rapid and dynamic
      control has been increased. The Interface to the Routing System's (I2RS)
      Programmatic interface (<xref target="I-D.ietf-i2rs-architecture"/>)
      provides an alternate way to control the configuration and diagnose the
      operation of the LDP protocol and achieve this goal.</t>

      <t>This document specifies an information model for the LDP protocol to
      facilitate the definition of a standardized data model, which can be
      used to define interfaces to the LDP from an entity that may even be
      external to the routing system. Based on standardized data model and
      interfaces, use cases and requirements for I2RS interface to LDP
      Protocol <xref target="I-D.chen-i2rs-mpls-ldp-usecases"/> can be
      supported. </t>  
	  <t> Please note I2RS utilizes ephemeral configuration 
	  plus status information. This draft proposes needs of this
	  ephemeral configuration, and the authors of this draft intent to collaborate
	  with related work on yang configuration for MPLS LDP.</t>
    </section>

    <section title="LDP Data">
      <t>This section describes the data involved in the LDP information model
      in detail. LDP data includes information related to LDP instances, LDP
      entities, LDP peers, LDP sessions, LDP LSPs and LDP policies.</t>

      <t>There are two kinds of LDP entities which are used for LDP discovery.
      One kind of LDP entity uses interface to engage in LDP basic discovery
      which is to set up the sessions between directly connected LSRs. The
      other uses remote peer to engage in extended discovery which is to set
      up the sessions between non-directly connected LSRs.</t>

      <t>A high-level architecture of the LDP contents is shown as below.</t>

      <t><figure align="center">
          <artwork><![CDATA[                                LDP protocol
                                      |            
                                      |            
                                LDP instance   
                                      |0..N
                                      |
    +-----------+-------+--------+-------------+------+-----+-----+
    |0..N       |0..N   |0..N    |0..N         |0..N  |0..N |     |
    |           |       |        |             |      |     |     |
Interface  Remote Peer  |        |           Session Lsp  Policy Status
                       Peer  Peer Information 


            Figure 1: Architecture of LDP information model]]></artwork>
        </figure></t>

      <section title="LDP Instance">
        <t>In the context of LDP information model, LDP instance is virtual
        private network (VPN) instance or public network instance which
        contains the instance name of VPN or public network, the parameters of
        LDP instance and the data of LDP instance. Multiple instances MAY be
        supported in one network device.</t>

        <t>The corresponding YANG description of the top level is below.</t>

        <figure>
          <artwork><![CDATA[module: i2rs-mplsldp          
   +--rw mplsLdp
      +--rw ldpInstances
         +--rw ldpInstance* [vrfName]
            +--rw vrfName             string
            +--rw lsrid               inet:ipv4-address
            +--rw ldpInterfaces
            |     ...    
            +--rw ldpRemotePeers
            |     ...    
            +--rw ldpPeers
            |     ...    
            +--rw ldpPeerInfos                                            
            |     ...    
            +--rw ldpSessions
            |     ...    
            +--rw ldpLsps
            |     ...    
            +--rw ldpPolicy        
            |     ...    
            +--ro ldpInstanceStatus       
                  ...    ]]></artwork>
        </figure>

        <section title="LDP Instance Parameters">
          <t>o vrfName: A name uniquely identifying LDP instance which is from
          the name of VPN instance. If the name string is empty the instance
          means a public instance whose name is _public_.</t>

          <t>o lsrid: LSR ID of a LDP instance.</t>
        </section>

        <section title="LDP Interface">
          <t>LDP interface is one kind of LDP entity which is engaged in LDP
          basic discovery which is to set up the sessions between directly
          connected LSRs in LDP instance. </t>

          <t>This section describes the information model related to LDP
          interface which is shown in the Yang high-level description and
          interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpInterfaces
            |  +--rw ldpInterface* [ifName]
            |     +--rw ifName                     ifName
            |     +--rw helloSendTime?             uint16
            |     +--rw helloHoldTime?             uint16
            |     +--rw keepaliveSendTime?         uint16
            |     +--rw keepaliveHoldTime?         uint16
            |     +--rw igpSyncDelayTime?          uint32
            |     +--rw transportAddrInterface?    ifName
            |     +--rw localLsrIdAddrInterface?   ifName
            |     +--rw labelAdvMode?              ldpLabelDistMode ]]></artwork>
          </figure>

          <t>o ifName: the name of interface which is enabled as an LDP
          entity.</t>

          <t>o helloSendTime: the value of the timer for periodically sending
          hello packet. The value is in seconds.</t>

          <t>o helloHoldTime: the interval value of the Hello hold timer. The
          value is in seconds.</t>

          <t>o keepaliveSendTime: the value of the timer for periodically
          sending keepalive packet. The value is in seconds.</t>

          <t>o keepaliveHoldTime: the interval value of the keepalive hold
          timer. The value is in seconds.</t>

          <t>o igpSyncDelayTime: the interval value at which an interface
          waits to establish an LSP after an LDP session is set up. The value
          is in seconds.</t>

          <t>o transportAddrInterface: an interface address to be used as the
          transport address.</t>

          <t>o localLsrIdAddrInterface: an interface address to be used as
          local LSR-ID address.</t>

          <t>o labelAdvMode: the label distribution mode used by a session
          which is DU or DoD.</t>
        </section>

        <section title="LDP Remote Peer">
          <t>LDP Remote Peer is one kind of LDP entity which is engaged in
          extended discovery which is to set up the sessions between
          non-directly connected LSRs in LDP instance.</t>

          <t>This section describes the information model related to LDP
          remote peer which is shown in the Yang high-level description and
          interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpRemotePeers
            |  +--rw ldpRemotePeer* [remotePeerName]
            |     +--rw remotePeerName             string
            |     +--rw remoteIp?                  inet:ipv4-address
            |     +--rw helloSendTime?             uint16
            |     +--rw helloHoldTime?             uint16
            |     +--rw keepaliveSendTime?         uint16
            |     +--rw keepaliveHoldTime?         uint16
            |     +--rw igpSyncDelayTime?          uint32
            |     +--rw localLsrIdAddrInterface?   ifName           
            |     +--rw labelAdvMode?              ldpLabelDistMode  
            |     +--rw remoteIpAutoDoDRequest?    boolean ]]></artwork>
          </figure>

          <t>o remotePeerName: the name of a remote neighbor which is as an
          remote entity.</t>

          <t>o remoteIp: the IPv4 address of a remote neighbor which the LDP
          targeted hello packet will be sent to.</t>

          <t>o helloSendTime: the value of the timer for periodically sending
          hello packet. The value is in seconds.</t>

          <t>o helloHoldTime: the interval value of the Hello hold timer. The
          value is in seconds.</t>

          <t>o keepaliveSendTime: the value of the timer for periodically
          sending keepalive packet. The value is in seconds.</t>

          <t>o keepaliveHoldTime: the interval value of the keepalive hold
          timer. The value is in seconds.</t>

          <t>o igpSyncDelayTime: the interval value at which a remote peer
          waits to establish an LSP after an LDP session is set up. The value
          is in seconds.</t>

          <t>o localLsrIdAddrInterface: an interface address to be used as
          local LSR-ID address.</t>

          <t>o labelAdvMode: the label distribution mode used by a session
          which is DU or DoD.</t>

          <t>o remoteIpAutoDoDRequest: the policy of triggering LDP DoD
          requests for some prefixes.</t>
        </section>

        <section title="LDP Peer">
          <t>LDP Peer is used to configure local parameters which are used or
          sent to peer LSR for negotiation in LDP session establishment.</t>

          <t>This section describes the information model related to local
          parameters of specified LDP peer which is shown in the yang
          high-level description and interprets the meaning of each
          element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpPeers
            |  +--rw ldpPeer* [peerid]
            |     +--rw peerid                      inet:ipv4-address
            |     +--rw labelAdvMode?               ldpLabelDistMode
            |     +--rw localLsrIdAddrInterface?    ifName              
            |     +--rw announcementCapability?     boolean             
            |     +--rw mldpP2mpCapability?         boolean             
            |     +--rw mldpMBBCapability?          boolean      
            |     +--rw ldpSACCapability?           uint32           ]]></artwork>
          </figure>

          <t>o peerid: LDP peer ip address which composes the LDP LSR ID.</t>

          <t>o labelAdvMode: the label distribution mode used by a session
          which is DU or DoD.</t>

          <t>o localLsrIdAddrInterface: an interface address to be used as
          local lsr-id address.</t>

          <t>o announcementCapability: specifiy that if the announcement
          capability is supported locally which will be used to negotiate with
          peer.</t>

          <t>o mldpP2mpCapability: specify that if the p2mp capability is
          supported locally which will be used to negotiate with peer.</t>

          <t>o mldpMBBCapability: specify that if the mldp MBB capability is
          supported locally which will be used to negotiate with peer.</t>

          <t>o ldpSACCapability: specify that the application types of ldp
          SAC(State Advertisement Control) capability supported locally which
          will be used to negotiate with peer. SAC capability is defined in
          <xref target="I-D.ietf-mpls-ldp-ip-pw-capability"/>.</t>
        </section>

        <section title="LDP Peer Information">
          <t>LDP Peer information is peer parameters which are received from
          peer LSR or configured for the peer LSR.</t>

          <t>This section describes the information model related to
          information of LDP peer which is shown in the Yang high-level
          description and interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpPeerInfos                                            
            |  +--rw ldpPeerInfo* [peerLsrid]                           
            |     +--rw peerLsrid                   string
            |     +--rw peerMaxPduLen               uint16   
            |     +--rw peerLoopDetect              boolean   
            |     +--rw peerPVLimit                 uint16                                   
            |     +--rw peerFtFlag?                 boolean
            |     +--rw peerTportAddr?              inet:ipv4-address
            |     +--rw keepaliveHoldTime?          uint16            
            |     +--rw recoveryTime?               uint16
            |     +--rw reconnectTime?              uint16
            |     +--rw labelAdvMode?               ldpLabelDistMode 
            |     +--rw announcementCapability?     boolean
            |     +--rw mldpP2mpCapability?         boolean                
            |     +--rw mldpMBBCapability?          boolean 
            |     +--rw ldpSACCapability?           uint32      ]]></artwork>
          </figure>

          <t>o peerLsrid: peer LDP identifier which is a six octet quantity
          used to identify an LSR label space. The first four octets identify
          the LSR and must be a globally unique value, such as a 32-bit router
          Id assigned to the LSR. The last two octets identify a specific
          label space within the LSR.</t>

          <t>o peerMaxPduLen: max length of the PDU peer sends</t>

          <t>o peerLoopDetect: specify that if the peer support the loop
          detect capability.</t>

          <t>o peerPVLimit: specify that the path vector limit supported by
          the peer.</t>

          <t>o peerFtFlag: specify that if the peer support the FT(Fault
          Tolerance) capability.</t>

          <t>o peerTportAddr: transport address of peer used for transport
          connection.</t>

          <t>o keepaliveHoldTime: keepalive hold time of peer.</t>

          <t>o recoveryTime: recovery time used for graceful restart of
          peer.</t>

          <t>o reconnectTime: reconnect time used for graceful restart of
          peer.</t>

          <t>o labelAdvMode: the label distribution mode used by a session
          which is DU or DoD.</t>

          <t>o announcementCapability: specify that if the peer support the
          announcement capability.</t>

          <t>o mldpP2mpCapability: specify that if the peer support the p2mp
          capability.</t>

          <t>o mldpMBBCapability: specify that if the peer support the mldp
          MBB(Make Before Break) capability.</t>

          <t>o ldpSACCapability: specify the application types of ldp SAC
          capability of peer.</t>
        </section>

        <section title="LDP Session">
          <t>LDP session is established over a TCP transport connection.
          Normally in the LDP session initialization phase the session
          parameters are negotiated. LDP Capabilities in <xref
          target="RFC5661"/> defines a mechanism for advertising LDP
          enhancements at session initialization time, as well as a mechanism
          to enable and disable enhancements after LDP session
          establishment.</t>

          <t>This section describes the information model related to LDP
          session which is shown in the Yang high-level description and
          interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpSessions
            |  +--rw ldpSession* [peerLsrid]                           
            |     +--rw peerLsrid                   string
            |     +--rw localLsrid?                 string
            |     +--rw tcpSourceAddr?              inet:ipv4-address
            |     +--rw tcpDestAddr?                inet:ipv4-address
            |     +--ro sessionState?               enumeration
            |     +--ro sessionRole?                enumeration
            |     +--ro sessionType?                enumeration         
            |     +--rw negotiatedKaHoldTime?       uint32
            |     +--ro kaSent?                     uint32
            |     +--ro kaReceived?                 uint32
            |     +--rw sessionDistMode?            enumeration
            |     +--rw ftFlag?                     boolean           
            |     +--ro md5Flag?                    boolean          
            |     +--rw reconnetTime?               uint32  
            |     +--rw recoveryTime?               uint32     
            |     +--ro sessionAge?                 uint32                           
            |     +--rw announcementCapability?     boolean
            |     +--rw mldpP2mpCapability?         boolean                                
            |     +--rw mldpMBBCapability?          boolean 
            |     +--rw ldpSACCapability?           uint32              ]]></artwork>
          </figure>

          <t>o peerLsrid: peer LDP identifier which is a six octet quantity
          used to identify an LSR label space. The first four octets identify
          the LSR and must be a globally unique value, such as a 32-bit router
          Id assigned to the LSR. The last two octets identify a specific
          label space within the LSR.</t>

          <t>o localLsrid: local LDP identifier.</t>

          <t>o tcpSourceAddr: TCP connection source address used by a
          session.</t>

          <t>o tcpDestAddr: destination address of the TCP connection used by
          a session.</t>

          <t>o sessionState: session state according to the state machine.</t>

          <t>o sessionRole: session role of the LSR which is active or
          passive.</t>

          <t>o sessionType: session type which is local, remote or both.</t>

          <t>o negotiatedKaHoldTime: the value of the Keepalive hold timer
          negotiated by local and peer LSR.</t>

          <t>o kaSent: the number of keepalive messages which are sent.</t>

          <t>o kaReceived: the number of keepalive messages which are
          received.</t>

          <t>o sessionDistMode: the label distribution mode negotiated by
          local and peer LSR.</t>

          <t>o ftFlag: specify if the session support the FT capability.</t>

          <t>o md5Flag: specify if the session support the MD5 capability.</t>

          <t>o reconnetTime: reconnect time used for graceful restart. </t>

          <t>o recoveryTime: recovery time used for graceful restart.</t>

          <t>o sessionAge: duration since the session is set up. </t>

          <t>o announcementCapability: specify if the session support the
          announcement capability.</t>

          <t>o mldpP2mpCapability: specify if the session support the p2mp
          capability.</t>

          <t>o mldpMBBCapability: specify if the session support the mldp MBB
          capability.</t>

          <t>o ldpSACCapability: specify the application types of ldp
          SAC(State Advertisement Control ) capability of session.</t>
        </section>

        <section title="LDP LSP">
          <t>LDP LSP is the LSP established according to the LDP protocol. It
          has three types which are ingress, transit and egress LSP. The FEC
          may has multiple ingress or transit LSPs which have different
          outgoing interface and next hop.</t>

          <t>This section describes the information model related to LDP LSP
          which is shown in the Yang high-level description and interprets the
          meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--rw ldpLsps
            |  +--rw ldpLsp* [lspAddr prefixLength lspIndex lspType outIfaceName nextHop]   
            |     +--ro lspAddr                     inet:ipv4-address
            |     +--ro prefixLength                uint32
            |     +--ro lspIndex                    uint32
            |     +--ro lspType                     enumeration
            |     +--ro outIfaceName                ifName            
            |     +--ro nextHop                     inet:ipv4-address                                       
            |     +--ro inLabel?                    uint32                                                   
            |     +--ro outLabel?                   uint32      
            |     +--ro isFrrLsp?                   boolean            
            |     +--ro lspMtu?                     uint32                                 
            |     +--ro lspAge?                     uint32    ]]></artwork>
          </figure>

          <t>o lspAddr: prefix address of an LDP LSP.</t>

          <t>o prefixLength: prefix length of the prefix address of an
          LSP.</t>

          <t>o lspIndex: an LSP index.</t>

          <t>o lspType: LSP type which is ingress, transit or egress.</t>

          <t>o outIfaceName: outgoing interface.</t>

          <t>o nextHop: next hop address.</t>

          <t>o inLabel: the value of incoming label.</t>

          <t>o outLabel: the value of outgoing label.</t>

          <t>o isFrrLsp: specify if the LDP LSP is FRR LSP.</t>

          <t>o lspMtu: specifies an LSP MTU for the outgoing packet.</t>

          <t>o lspAge: duration since the LSP is setup.</t>
        </section>

        <section title="LDP Policy">
          <t>LDP policy can be used to limit the set up of LDP LSP by
          controlling the advertisement of LDP label mappings or other method.
          The outbound policy can be used for specified peer, a group of peers
          or all the peers.</t>

          <t>This section describes the information model related to LDP
          policy which is shown in the Yang high-level description and
          interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[         +--rw ldpPolicy        
            |  +--rw ldpOutBoundFecPeers
            |  |  +--rw ldpOutBoundFecPeer* [peerid]
            |  |     +--rw peerid             inet:ipv4-address
            |  |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |  |     +--rw fecIpPrefixName?   string    
            |  +--rw ldpOutBoundPeerFecGroups
            |  |  +--rw ldpOutBoundPeerFecGroup* [peerid]
            |  |     +--rw peerGroupName      string
            |  |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |  |     +--rw fecIpPrefixName?   string     
            |  +--rw ldpOutBoundFecPeerAll
            |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |     +--rw fecIpPrefixName?   string]]></artwork>
          </figure>

          <t>o peerid: LDP peer IP address which composes the LDP LSR ID.</t>

          <t>o fecPolicyMode: the mode which specifies the scope of FECs which
          is none, all or ip-prefix.</t>

          <t>o fecIpPrefixName: the name of IP prefix which represents the
          group of FECs whose label mappings can be sent. (Why is there only
          permit?)</t>

          <t>o peerGroupName: the name of IP prefix which represents the group
          of peers which use the same policy.</t>
        </section>

        <section title="LDP Status">
          <t>LDP Status is about the state or statistics of LDP data.</t>

          <t>This section describes the information model related to LDP
          status which is shown in the Yang high-level description and
          interprets the meaning of each element.</t>

          <figure>
            <artwork><![CDATA[            +--ro ldpInstanceStatus       
               +--ro sessionNum?             uint32
               +--ro adjacencyNum?           uint32
               +--ro interfaceNum?           uint32
               +--ro fecNum?                 uint32
               +--ro lspNum?                 uint32
               |  +--ro ingressLsp?          uint32
               |  +--ro egressLsp?           uint32
               |  +--ro transitLsp?          uint32
               |  +--ro totalLsp?            uint32 
               +--ro p2mpLspNum              
                  +--ro ingressLsp?          uint32
                  +--ro egressLsp?           uint32
                  +--ro transitLsp?          uint32
                  +--ro budLsp?              uint32
                  +--ro totalLsp?            uint32]]></artwork>
          </figure>

          <t>o sessionNum: number of sessions.</t>

          <t>o adjacencyNum: number of adjacencies.</t>

          <t>o interfaceNum: number of interfaces served as LDP interface
          entities.</t>

          <t>o fecNum: number of FECs.</t>

          <t>o ingressLsp: number of ingress P2P LDP LSPs or mLDP P2MP
          LSPs.</t>

          <t>o egressLsp: number of egress P2P LDP LSPs or mLDP P2MP LSPs.</t>

          <t>o transitLsp: number of transit P2P LDP LSPs or mLDP P2MP
          LSPs.</t>

          <t>o totalLsp: number of total P2P LDP LSPs or mLDP P2MP LSPs.</t>

          <t>o budLsp: number of bud mLDP P2MP LSPs.</t>
        </section>
      </section>
    </section>

    <section title="LDP notification">
      <t>The notification features within the I2RS interface would allow
      applications associated with an I2RS client to subscribe to a stream of
      state changes regarding LDP protocol from the I2RS Agent. An LDP
      protocol data-model MUST support sending asynchronous notifications. A
      brief list of suggested notifications is as below:</t>

      <t>o LDP session state change(up/down) notification</t>

      <t>o LDP Ingress LSP state change(up/down) notification for ip-prefix
      with prefix length being 32</t>

      <t>o LDP LSP count(total LSP number) reaches the upper limit
      notification</t>

      <t>o LDP LSP count(total LSP number) exceeds the threshold(threshold LSP
      number) notification</t>
    </section>

    <section title="I2RS YANG model of LDP">
      <t><figure>
          <artwork><![CDATA[module: i2rs-mplsldp          
   +--rw mplsLdp
      +--rw ldpInstances
         +--rw ldpInstance* [vrfName]
            +--rw vrfName             string
            +--rw lsrid               inet:ipv4-address
            +--rw ldpInterfaces
            |  +--rw ldpInterface* [ifName]
            |     +--rw ifName                     ifName
            |     +--rw helloSendTime?             uint16
            |     +--rw helloHoldTime?             uint16
            |     +--rw keepaliveSendTime?         uint16
            |     +--rw keepaliveHoldTime?         uint16
            |     +--rw igpSyncDelayTime?          uint32
            |     +--rw transportAddrInterface?    ifName
            |     +--rw localLsrIdAddrInterface?   ifName
            |     +--rw labelAdvMode?              ldpLabelDistMode   
            +--rw ldpRemotePeers
            |  +--rw ldpRemotePeer* [remotePeerName]
            |     +--rw remotePeerName             string
            |     +--rw remoteIp?                  inet:ipv4-address
            |     +--rw helloSendTime?             uint16
            |     +--rw helloHoldTime?             uint16
            |     +--rw keepaliveSendTime?         uint16
            |     +--rw keepaliveHoldTime?         uint16
            |     +--rw igpSyncDelayTime?          uint32
            |     +--rw localLsrIdAddrInterface?   ifName           
            |     +--rw labelAdvMode?              ldpLabelDistMode   
            |     +--rw remoteIpAutoDoDRequest?    boolean          
            +--rw ldpPeers
            |  +--rw ldpPeer* [peerid]
            |     +--rw peerid                      inet:ipv4-address                                
            |     +--rw labelAdvMode?               ldpLabelDistMode
            |     +--rw localLsrIdAddrInterface?    ifName           
            |     +--rw announcementCapability?     boolean          
            |     +--rw mldpP2mpCapability?         boolean          
            |     +--rw mldpMBBCapability?          boolean    
            |     +--rw ldpSACCapability?           uint32           
            +--rw ldpPeerInfos                                            
            |  +--rw ldpPeerInfo* [peerLsrid]                        
            |     +--rw peerLsrid                   string
            |     +--rw peerMaxPduLen               uint16   
            |     +--rw peerLoopDetect              boolean   
            |     +--rw peerPVLimit                 uint16                                   
            |     +--rw peerFtFlag?                 boolean
            |     +--rw peerTportAddr?              inet:ipv4-address
            |     +--rw keepaliveHoldTime?          uint16           
            |     +--rw recoveryTimer?              uint16
            |     +--rw reconnectTimer?             uint16
            |     +--rw labelAdvMode?               ldpLabelDistMode      
            |     +--rw announcementCapability?     boolean
            |     +--rw mldpP2mpCapability?         boolean        
            |     +--rw mldpMBBCapability?          boolean 
            |     +--rw ldpSACCapability?           uint32           
            +--rw ldpSessions
            |  +--rw ldpSession* [peerLsrid]                         
            |     +--rw peerLsrid                   string
            |     +--rw localLsrid?                 string
            |     +--rw tcpSourceAddr?              inet:ipv4-address
            |     +--rw tcpDestAddr?                inet:ipv4-address
            |     +--ro sessionState?               enumeration
            |     +--ro sessionRole?                enumeration
            |     +--ro sessionType?                enumeration          
            |     +--rw negotiatedKaHoldTime?       uint32
            |     +--ro kaSent?                     uint32
            |     +--ro kaReceived?                 uint32
            |     +--rw sessionDistMode?            enumeration
            |     +--rw ftFlag?                     boolean           
            |     +--ro md5Flag?                    boolean         
            |     +--rw reconnetTime?               uint32  
            |     +--rw recoveryTime?               uint32     
            |     +--ro sessionAge?                 string                            
            |     +--rw announcementCapability?     boolean
            |     +--rw mldpP2mpCapability?         boolean                                       
            |     +--rw mldpMBBCapability?          boolean 
            |     +--rw ldpSACCapability?           uint32           
            +--rw ldpLsps
            |  +--rw ldpLsp* [lspAddr prefixLength lspIndex lspType outIfaceName nextHop]  
            |     +--ro lspAddr                     inet:ipv4-address
            |     +--ro prefixLength                uint32
            |     +--ro lspIndex                    uint32
            |     +--ro lspType                     enumeration
            |     +--ro outIfaceName                ifName            
            |     +--ro nextHop                     inet:ipv4-address                                          
            |     +--ro inLabel?                    uint32                                                    
            |     +--ro outLabel?                   uint32      
            |     +--ro isFrrLsp?                   boolean            
            |     +--ro lspMtu?                     uint32                                        
            |     +--ro lspTimeStamp?               uint32    
            +--rw ldpPolicy   
            |  +--rw ldpOutBoundFecPeers
            |  |  +--rw ldpOutBoundFecPeer* [peerid]
            |  |     +--rw peerid             inet:ipv4-address
            |  |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |  |     +--rw fecIpPrefixName?   string     
            |  +--rw ldpOutBoundPeerFecGroups
            |  |  +--rw ldpOutBoundPeerFecGroup* [peerid]
            |  |     +--rw peerGroupName      string
            |  |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |  |     +--rw fecIpPrefixName?   string    
            |  +--rw ldpOutBoundFecPeerAll
            |     +--rw fecPolicyMode?     fecIpPrefixGroupType
            |     +--rw fecIpPrefixName?   string                                                                    
            +--ro ldpInstanceStatus       
               +--ro sessionNum?             uint32
               +--ro adjacencyNum?           uint32
               +--ro interfaceNum?           uint32
               +--ro fecNum?                 uint32
               +--ro lspNum?                 uint32
               |  +--ro ingressLsp?          uint32
               |  +--ro egressLsp?           uint32
               |  +--ro transitLsp?          uint32
               |  +--ro totalLsp?            uint32 
               +--ro p2mpLspNum              
                  +--ro ingressLsp?          uint32
                  +--ro egressLsp?           uint32
                  +--ro transitLsp?          uint32
                  +--ro budLsp?              uint32
                  +--ro totalLsp?            uint32

              Figure 2 The I2RS YANG model of LDP]]></artwork>
        </figure></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This draft includes no request to IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This document introduces no new security threat and SHOULD follow the
      security requirements as stated in <xref
      target="I-D.ietf-i2rs-architecture"/>.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>TBD</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.6020'?>

      <?rfc include='reference.RFC.6241'?>

      <?rfc include='reference.RFC.5036'?>

      <?rfc include='reference.I-D.ietf-i2rs-architecture'?>

      <?rfc include='reference.I-D.chen-i2rs-mpls-ldp-usecases'?>

      <?rfc include='reference.RFC.5443'?>

      <?rfc include='reference.I-D.ietf-mpls-ldp-ip-pw-capability'?>

      <?rfc include='reference.RFC.6388'?>

      <?rfc include='reference.RFC.6720'?>

      <?rfc include='reference.RFC.5661'?>
    </references>
  </back>
</rfc>
