<?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-te-info-model-00"
     ipr="trust200902">
  <front>
    <title abbrev="I2RS Information Model for MPLS TE">I2RS Information Model
    for MPLS TE</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>Traditionally MPLS TE networks may be managed via CLI, SNMP or
      NETCONF. There are two types of TE LSP: static CR-LSP and dynamic TE LSP
      created by protocol of RSVP-TE. Static CR-LSP is configured with
      forwarding items such as interface, label and bandwidth, etc. node by
      node. Dynamic TE LSP is configured with MPLS TE parameters which are
      used to calculate path and set up TE LSP by protocol. Both
      configurations are complex.</t>

      <t>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 MPLS TE.
      These interactions to control MPLS TE links and diagnose their operation
      include: MPLS TE configuration, MPLS TE protection, traffic
      switching-over, traffic detection, and fault detection.</t>

      <t>This document specifies an information model for MPLS TE to
      facilitate the definition of a standardized data model which can be used
      to define interfaces to the MPLS TE from an entity that may even be
      external to the routing system. Based on standardized data model and
      interfaces, use cases of MPLS TE defined by 
	  draft-huang-i2rs-mpls-te-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>Traditionally MPLS TE networks may be managed via CLI, SNMP or
      NETCONF. There are two types of TE LSP: static CR-LSP and dynamic TE LSP
      created by protocol of RSVP-TE. Static CR-LSP is configured with
      forwarding items such as interface, label and bandwidth, etc. node by
      node. Dynamic TE LSP is configured with MPLS TE parameters which are
      used to calculate path and set up TE LSP by protocol. Both
      configurations are complex.</t>

      <t>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 MPLS TE and
      achieve this goal. These interactions to control MPLS TE links and
      diagnose their operation include: MPLS TE configuration, MPLS TE
      protection, traffic switching-over, traffic detection, and fault
      detection.</t>

      <t>This document specifies an information model for MPLS TE to
      facilitate the definition of a standardized data model, which can be
      used to define interfaces to the MPLS TE from an entity that may even be
      external to the routing system. Based on standardized data model and
      interfaces, use cases and requirements for an interface to MPLS TE
      defined by <xref target="I-D.huang-i2rs-mpls-te-usecases"/> and <xref
      target="I-D.hares-i2rs-usecase-reqs-summary"/> 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 intend to collaborate
	  with related work on yang configuration for MPLS TE.</t>
    </section>

    <section title="MPLS TE Data">
      <t>This section describes the data involved in the MPLS TE information
      model in detail. MPLS TE data includes information related to Static CR
      LSPs, dynamic RSVP-TE LSPs and explicit path constraints for setting up
      RSVP-TE LSPs.</t>

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

      <t><figure align="center">
          <artwork><![CDATA[                                 MPLS TE  
                                    |
                                    |
    +---------------+---------------+------------+----------------+
    |0..N           |0..N           |0..N        |0..N            |0..N  
    |               |               |            |                |      
explicit path  rsvp te tunnel    rsvp te lsp  static tunnel  static cr lsp        


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

      <section title="MPLS TE">
        <t>MPLS TE information model includes information related to Static CR
        LSPs, dynamic RSVP-TE LSPs and explicit path constraints for setting
        up RSVP-TE LSPs.</t>

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

        <figure>
          <artwork><![CDATA[module: i2rs-mplste
   +--rw mplsTe
      +--rw explicitPaths
      |     ... 
      +--rw rsvpTeTunnels
      |     ... 
      +--rw rsvpTeLsps
      |     ... 
      +--rw staticTunnels
      |     ... 
      +--rw staticCRLsps                  
            ... ]]></artwork>
        </figure>

        <section title="Explicit Path">
          <t>The I2RS client should be able to manually calculate a
          re-optimization of the MPLS TE network and send the new constraints
          including the calculated path to each node via the I2RS agent with
          an indication to re-signal the TE LSPs with make-before-break
          method.</t>

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

          <figure>
            <artwork><![CDATA[      +--rw explicitPaths
      |  +--rw explicitPath* [explicitPathName]
      |     +--rw explicitPathName    string
      |     +--rw explicitPathHops
      |        +--rw explicitPathHop* [mplsTunnelHopIndex]
      |           +--rw mplsTunnelHopIndex       uint32
      |           +--rw mplsTunnelHopIpAddr      inet:ipv4-address
      |           +--rw mplsTunnelHopType?       enumeration
      |           +--rw mplsTunnelHopAddrType?   enumeration ]]></artwork>
          </figure>

          <t>o explicitPathName: the name of an explicit path.</t>

          <t>o mplsTunnelHopIndex: hop index of an explicit path.</t>

          <t>o mplsTunnelHopIpAddr: IP address of one hop.</t>

          <t>o mplsTunnelHopType: an LSP route selection types based on the
          local hop which can be strict, loose and excluding. Strict type:
          Only an LSP route that includes the local hop can be selected. Loose
          type: An LSP route that includes the local node is selected
          preferentially. If the local hop does not meet path limits, it will
          be not included in the selected route. Excluding type: Only an LSP
          route that does not include the local hop can be selected.</t>

          <t>o mplsTunnelHopAddrType: address type.</t>
        </section>

        <section title="RSVP-TE Tunnel">
          <t>When the network uses dynamic RSVP-TE tunnel the I2RS client can
          configure the explicit path and other constraints of multiple tunnel
          paths to the I2RS agent. And the RSVP-TE tunnel information includes
          the state of the tunnel and the protection-related information.</t>

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

          <figure>
            <artwork><![CDATA[      +--rw rsvpTeTunnels
      |  +--rw rsvpTeTunnel* [tunnelName]
      |     +--rw tunnelName                   string
      |     +--ro mplsTunnelIngressLSRId?      inet:ipv4-address
      |     +--rw mplsTunnelEgressLSRId?       inet:ipv4-address
      |     +--rw mplsTunnelIndex?             uint16
      |     +--rw mplsTunnelBandwidth?         uint32
      |     +--rw mplsTeTunnelSetupPriority?   uint8
      |     +--rw holdPriority?                uint8
      |     +--rw hotStandbyEnable?            boolean
      |     +--rw hsbRevertiveMode?            enumeration
      |     +--rw hotStandbyWtr?               uint32
      |     +--rw ordinaryEnable?              boolean
      |     +--rw bestEffortEnable?            boolean
      |     +--rw disableCspf?                 boolean
      |     +--rw tunnelPaths
      |     |  +--rw tunnelPath* [pathType]
      |     |     +--rw pathType            enumeration
      |     |     +--rw explicitPathName?   string
      |     |     +--ro includeAll?         string
      |     |     +--rw includeAny?         string
      |     |     +--rw excludeAny?         string
      |     |     +--rw hopLimit?           uint32
      |     |     +--ro lspId?              uint32
      |     |     +--ro lspState?           enumeration
      |     |     +--ro modifyLspId?        uint32            
      |     +--rw resvStyle?                   enumeration
      |     +--rw tieBreaking?                 enumeration
      |     +--rw pathMetricType?              enumeration
      |     +--ro hotStandbySwitchReason?      enumeration
      |     +--ro adminStatus?                 enumeration
      |     +--ro operStatus?                  enumeration
      |     +--ro workingLspType?              enumeration  
      |     +--ro workingLspId?                uint32      
      |     +--rw frrAttr
      |     |  +--rw frrEnable?          boolean
      |     |  +--rw bwProtEnable?       boolean
      |     |  +--rw frrBandwidth?       uint32
      |     |  +--rw frrSetupPriority?   uint32
      |     |  +--rw frrHoldPriority?    uint32
      |     +--rw bypassAttr
      |        +--rw bypassEnable?       boolean
      |        +--rw bypassProtectIFs
      |           +--rw bypassProtectIF* [bypassProtectIFName]
      |              +--rw bypassProtectIFName    ifName    ]]></artwork>
          </figure>

          <t>o tunnelName: a tunnel name is unique among all tunnels
          established on a network node.</t>

          <t>o mplsTunnelIngressLSRId: ingress LSR ID of the tunnel.</t>

          <t>o mplsTunnelEgressLSRId: egress LSR ID of the tunnel.</t>

          <t>o mplsTunnelIndex: Session ID of a tunnel.</t>

          <t>o mplsTunnelBandwidth: tunnel bandwidth.</t>

          <t>o mplsTeTunnelSetupPriority: tunnel setup priority.</t>

          <t>o holdPriority: tunnel holding priority.</t>

          <t>o hotStandbyEnable: specifies hot standby capability for
          protecting TE tunnels.</t>

          <t>o hsbRevertiveMode: hot standby revertive mode. There are two
          revert modes which are revertive or non-revertive.</t>

          <t>o hotStandbyWtr: time of waiting recovering back to primary LSP.
          When hot-standby backup is in use, after primary LSP restores, the
          traffic will switch to primary LSP after waiting some time instead
          of switching to primary LSP immediately. This is to avoid frequent
          switching between primary LSP and backup LSP caused by network
          flapping.</t>

          <t>o ordinaryEnable: specifies tunnel ordinary backup protection
          capability. When it is enabled and the primary LSP fails, a backup
          LSP that meets certain limits will be set up. Then the traffic on
          the primary LSP will be switched to the backup LSP.</t>

          <t>o bestEffortEnable: specifies best-effort path protection of
          tunnels. When best-effort path is enabled for a TE tunnel, and both
          active and standby LSP fail, an LSP will be set up in the best
          effort method.</t>

          <t>o disableCspf: disable CSPF of a tunnel.</t>

          <t>o tunnelPath: information of tunnel paths belong to specified
          tunnel. There can be maximum four tunnel paths with different path
          type coexisting. Every tunnel path has independent path constraint
          and is associated with one set up LSP.</t>

          <t>o pathType: path type of a tunnel path. The available options are
          primary(used by primary LSP), hot-standby(used by hot-standby backup
          LSP), ordinary(used by ordinary backup LSP), and best-effort(used by
          best-effort LSP).</t>

          <t>o explicitPathName: name of an explicit path which is used for
          the tunnel path.</t>

          <t>o includeAll: Administrative group attribute of an LSP
          (IncludeAll).</t>

          <t>o includeAny: Administrative group attribute of an LSP
          (IncludeAny).</t>

          <t>o excludeAny: Administrative group attribute of an LSP
          (ExcludeAny).</t>

          <t>o hopLimit: number of limit of hops in a tunnel path.</t>

          <t>o lspId: LSP ID of a tunnel path.</t>

          <t>o lspState: the state of LSP.</t>

          <t>o modifyLspId: modified LSP ID of a tunnel path.</t>

          <t>o resvStyle: Tunnel reservation styles. SE style: shared explicit
          style; FF: fixed filter style.</t>

          <t>o tieBreaking: routing rules for a tunnel with multiple
          equal-cost routes which can be random, least fill and most fill.
          Random: Select a link randomly. Least fill: Select the link with
          smallest bandwidth usage. Most fill: Select the link with biggest
          bandwidth usage. By default, routing rules are inherited from the
          global MPLS TE routing rules. If multiple paths meet certain limits,
          a path will be selected based on the preceding rules.</t>

          <t>o pathMetricType: referenced metric type of one link for
          calculating path when creating TE tunnels. The available options are
          DEFAULT, IGP and TE.</t>

          <t>o hotStandbySwitchReason: the reason of hot-standby LSP
          switch.</t>

          <t>o adminStatus: administrative state of a tunnel which is UP or
          Down.</t>

          <t>o operStatus: operation status of a tunnel which is UP or
          Down.</t>

          <t>o workingLspType: type of working LSP which is primary,
          hot-standby, ordinary or best-effort.</t>

          <t>o workingLspId: LSP ID of working LSP.</t>

          <t>o frrEnable: specifies fast reroute capability.</t>

          <t>o bwProtEnable: The tunnel with fast reroute capability requests
          bandwidth protection.</t>

          <t>o frrBandwidth: FRR-protection bandwidth requested by an active
          tunnel.</t>

          <t>o frrSetupPriority: Setup priority of FRR protection tunnels.</t>

          <t>o frrHoldPriority: holding priority of FRR protection
          tunnels.</t>

          <t>o bypassEnable: bypass tunnel enabling or disabling.</t>

          <t>o bypassProtectIFName: Specifies the name of an interface that
          can be protected by a tunnel enabled with the bypass function.</t>
        </section>

        <section title="RSVP-TE LSP">
          <t>By collecting the LSP information of RSVP-TE protocol from the
          I2RS agent I2RS client can monitor the RSVP-TE LSP.</t>

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

          <figure>
            <artwork><![CDATA[      +--ro rsvpTeLsps
      |  +--ro rsvpTeLsp* [mplsTunnelIngressLSRId mplsTunnelEgressLSRId mplsSessionID mplsLSPID]
      |     +--ro mplsTunnelIngressLSRId         inet:ipv4-address
      |     +--ro mplsTunnelEgressLSRId          inet:ipv4-address
      |     +--ro mplsSessionID                  uint16
      |     +--ro mplsLSPID                      uint16
      |     +--ro tunnelName?                    string
      |     +--ro mplsTunnelRole?                enumeration
      |     +--ro incomingIfName?                string
      |     +--ro outgoingIfName?                string
      |     +--ro mplsTunnelSetupPrio?           uint8
      |     +--ro mplsTunnelHoldingPrio?         uint8
      |     +--ro mplsTunnelBandwidth?           uint32
      |     +--ro mplsTunnelEHops                       
      |     |  +--ro mplsTunnelEHop* [mplsTunnelEHopIndex]
      |     |     +--rw mplsTunnelEHopIndex       uint32
      |     |     +--rw mplsTunnelEHopIpAddr      inet:ipv4-address
      |     |     +--rw mplsTunnelEHopType?       enumeration
      |     |     +--rw mplsTunnelEHopAddrType?   enumeration      
      |     +--ro mplsTunnelARHops
      |     |  +--ro mplsTunnelARHop* [mplsTunnelARHopIndex]
      |     |     +--ro mplsTunnelARHopIndex              uint32
      |     |     +--ro incommingType?                    boolean
      |     |     +--ro mplsTunnelARHopIpAddr?            inet:ipv4-address
      |     |     +--ro mplsTunnelARHopLabel?             uint32
      |     |     +--ro mplsTunnelLocalProtectInUse?      boolean
      |     |     +--ro mplsTunnelARHopLocalProtectType?  enumeration
      |     |     +--ro mplsTunnelARHopBwProt?            boolean            
      |     +--ro mplsTunnelHopTableName?                 string
      |     +--ro mplsCHops
      |     |  +--ro mplsCHop* [mplsTunnelCRPathIndex mplsTunnelCRHopIndex]
      |     |     +--ro mplsTunnelCRPathIndex             uint32
      |     |     +--ro mplsTunnelCRHopIndex              uint32
      |     |     +--ro mplsTunnelCRHopIsInclude?         boolean
      |     |     +--ro mplsTunnelCRHopType?              enumeration
      |     |     +--ro mplsTunnelLocalProtectInUse?      boolean
      |     |     +--ro mplsTunnelCRHopAddrType?          enumeration
      |     |     +--ro mplsTunnelCRHopIpAddr?            inet:ipv4-address               
      |     +--ro mplsTunnelLocalProtectEnable?           boolean   
      |     +--ro mplsTunnelLocalProtectInUse?            enumeration                             
      |     +--ro bypassTunnelName?                       string            
      |     +--ro mplsTunnelMergingPermitted?             boolean      
      |     +--ro mplsTunnelIncludeAllAffinity?           string      
      |     +--ro mplsTunnelIncludeAnyAffinity?           string      
      |     +--ro mplsTunnelExcludeAnyAffinity?           string      
      |     +--ro lspMTU?                                 uint32                                    
      |     +--ro mplsTunnelOperStatus?                   enumeration                                          
      |     +--ro inLabel?                                uint32              
      |     +--ro outLabel?                               uint32                                                      
      |     +--ro nextHop?                                inet:ipv4-address                                                            
      |     +--ro xcindex?                                uint32  ]]></artwork>
          </figure>

          <t>o mplsTunnelIngressLSRId: ingress LSR ID of the tunnel.</t>

          <t>o mplsTunnelEgressLSRId: egress LSR ID of the tunnel.</t>

          <t>o mplsSessionID: session ID of a tunnel.</t>

          <t>o mplsLSPID: LSP ID of a tunnel path.</t>

          <t>o tunnelName: a tunnel name is unique among all tunnels
          established on a network node.</t>

          <t>o mplsTunnelRole: the types of the LSP nodes, including ingress,
          transit, and egress nodes.</t>

          <t>o incomingIfName: the name of incoming interface.</t>

          <t>o outgoingIfName: the name of outgoing interface.</t>

          <t>o mplsTunnelSetupPrio: setup priority of an LSP.</t>

          <t>o mplsTunnelHoldingPrio: hold priority of an LSP.</t>

          <t>o mplsTunnelBandwidth: bandwidth of a tunnel.</t>

          <t>o mplsTunnelEHop: explicit path information included in Explicit
          Route Object.</t>

          <t>o mplsTunnelEHopIndex: hop index of an explicit path.</t>

          <t>o mplsTunnelEHopIpAddr: IP address of one hop.</t>

          <t>o mplsTunnelEHopType: an LSP route selection types based on the
          local hop which can be strict, loose and excluding. Strict type:
          Only an LSP route that includes the local hop can be selected. Loose
          type: An LSP route that includes the local node is selected
          preferentially. If the local hop does not meet path limits, it will
          be not included in the selected route. Excluding type: Only an LSP
          route that does not include the local hop can be selected.</t>

          <t>o mplsTunnelEHopAddrType: address type.</t>

          <t>o mplsTunnelARHop: actual path of an LSP.</t>

          <t>o mplsTunnelARHopIndex: hop index of actual path.</t>

          <t>o incommingType: specify whether the hop is an inbound
          interface.</t>

          <t>o mplsTunnelARHopIpAddr: IP address of the actual hop.</t>

          <t>o mplsTunnelARHopLabel: Label of the actual hop.</t>

          <t>o mplsTunnelLocalProtectInUse: FRR protection state.</t>

          <t>o mplsTunnelARHopLocalProtectType: FRR protection type.</t>

          <t>o mplsTunnelARHopBwProt: FRR bandwidth protection.</t>

          <t>o mplsTunnelHopTableName: explicit path name of an LSP.</t>

          <t>o mplsCHop: path calculated by CSPF according to LSP
          constraints.</t>

          <t>o mplsTunnelCRPathIndex: index of path calculated by CSPF.</t>

          <t>o mplsTunnelCRHopIndex: index of hop of path calculated by
          CSPF.</t>

          <t>o mplsTunnelCRHopIsInclude: specify if it is this hop a include
          hop.</t>

          <t>o mplsTunnelCRHopType: hop type calculated by CSPF. The available
          options are strict and loose.</t>

          <t>o mplsTunnelLocalProtectInUse: FRR protection state.</t>

          <t>o mplsTunnelCRHopAddrType: address type of hop of path calculated
          by CSPF. The available options are IPv4 and IPv6.</t>

          <t>o mplsTunnelCRHopIpAddr: IP address of hop of path calculated by
          CSPF.</t>

          <t>o mplsTunnelLocalProtectEnable: specifies the enabling or
          disabling state of FRR for an LSP.</t>

          <t>o mplsTunnelLocalProtectInUse: specifies the FRR protection state
          of this LSP.</t>

          <t>o bypassTunnelName: name of the bypass tunnel that protects the
          LSP.</t>

          <t>o mplsTunnelMergingPermitted: specify whether the LSP permits
          bandwidth sharing.</t>

          <t>o mplsTunnelIncludeAllAffinity: specifies the Include-all
          (administrative group attribute) of an LSP.</t>

          <t>o mplsTunnelIncludeAnyAffinity: specifies the Include-any
          (administrative group attribute) of an LSP.</t>

          <t>o mplsTunnelExcludeAnyAffinity: specifies the Exclude-any
          (administrative group attribute) of an LSP.</t>

          <t>o lspMTU: specifies an LSP MTU.</t>

          <t>o mplsTunnelOperStatus: operation status of an LSP.</t>

          <t>o inLabel: incoming label of the transit or egress LSP.</t>

          <t>o outLabel: out label of the ingress or transit LSP.</t>

          <t>o nextHop: next hop address of the ingress or transit LSP.</t>

          <t>o xcindex: LSP index of the LSP.</t>
        </section>

        <section title="Static Tunnel">
          <t>Network programming software managing the static CR-LSP devices
          may incorporate an I2RS Client along with a path calculation entity,
          a label management entity, and a bandwidth management entity. The
          I2RS Client should be able to communicate the static configuration
          to the network nodes, and monitor the status of the CR-LSPs. The
          static tunnel supports primary LSP and standby LSP.</t>

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

          <figure>
            <artwork><![CDATA[      +--rw staticTunnels
      |  +--rw staticTunnel* [tunnelName]
      |     +--rw tunnelName                   string
      |     +--rw tunnelIngressLSRId?          inet:ipv4-address
      |     +--rw tunnelEgressLSRId?           inet:ipv4-address
      |     +--rw tunnelIndex?                 uint16      
      |     +--rw tunnelBandwidth?             uint32 
      |     +--rw staticCRLSPs                             
      |     |  +--rw staticCRLSP* [lspName]
      |     |     +--rw lspType                enumeration      
      |     |     +--rw lspName                string
      |     |     +--ro lspState               enumeration
      |     +--rw revertMode?                  uint32       
      |     +--rw wtrValue?                    uint32       
      |     +--rw holdoffValue?                uint32  ]]></artwork>
          </figure>

          <t>o tunnelName: a static tunnel name is unique among all tunnels
          established on a network node.</t>

          <t>o tunnelIngressLSRId: ingress LSR ID of the static tunnel.</t>

          <t>o tunnelEgressLSRId: egress LSR ID of the static tunnel.</t>

          <t>o tunnelIndex: session ID of the static tunnel.</t>

          <t>o tunnelBandwidth: bandwidth of the static tunnel.</t>

          <t>o staticCRLSP: static CR-LSP belonging to the same static
          tunnel</t>

          <t>o lspType: type of static CR-LSP, working LSP or protection
          LSP.</t>

          <t>o lspName: name of static CR-LSP.</t>

          <t>o lspState: state of static CR-LSP.</t>

          <t>o revertMode: two modes, one is non-revertive that traffic do not
          switch to primary LSP when primary LSP is up and the other is
          revertive that traffic switch to primary LSP when primary LSP is
          up.</t>

          <t>o wtrValue: wait-to-restore time of traffic switch to primary LSP
          when primary LSP is up.</t>

          <t>o holdoffValue: hold off time of traffic switch to standby LSP
          when the primary LSP is down.</t>
        </section>

        <section title="Static CR-LSP">
          <t>The static CR-LSP includes the information configured statically
          of the label, bandwidth, out interface etc. The LSP information
          downloaded to i2rs agent is different according to different
          role.</t>

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

          <figure>
            <artwork><![CDATA[      +--rw staticCRLsps
      |  +--rw staticCRLsp* [lspName]
      |     +--rw lspName                      string
      |     +--rw lsrRole                      enumeration  
      |     +--ro destinationAddress?          inet:ipv4-address          
      |     +--rw bandwitdh                    uint32           
      |     +--ro incomingIfName?              ifName
      |     +--rw inLabel?                     uint32
      |     +--rw outgoingIfName?              ifName   
      |     +--rw nextHop?                     inet:ipv4-address
      |     +--rw outLabel?                    uint32
      |     +--rw mtu?                         uint32       ]]></artwork>
          </figure>

          <t>o lspName: name of static CR-LSP.</t>

          <t>o lsrRole: role of LSP which is ingress, transit and egress.</t>

          <t>o destinationAddress: address of destination tunnel.</t>

          <t>o bandwitdh: bandwidth of the static CR-LSP.</t>

          <t>o incomingIfName: name of incoming interface for transit or
          egress LSP.</t>

          <t>o inLabel: incoming label of transit or egress LSP.</t>

          <t>o outgoingIfName: name of outgoing interface for ingress or
          transit LSP.</t>

          <t>o nextHop: next hop of ingress or transit LSP.</t>

          <t>o outLabel: out label of ingress or transit LSP.</t>

          <t>o mtu: mtu of static LSP.</t>
        </section>
      </section>
    </section>

    <section title="I2RS YANG model of MPLS TE">
      <t><figure>
          <artwork><![CDATA[module: i2rs-mplste
   +--rw mplsTe
      +--rw explicitPaths
      |  +--rw explicitPath* [explicitPathName]
      |     +--rw explicitPathName    string
      |     +--rw explicitPathHops
      |        +--rw explicitPathHop* [mplsTunnelHopIndex]
      |           +--rw mplsTunnelHopIndex       uint32
      |           +--rw mplsTunnelHopIpAddr      inet:ipv4-address
      |           +--rw mplsTunnelHopType?       enumeration
      |           +--rw mplsTunnelHopAddrType?   enumeration
      +--rw rsvpTeTunnels
      |  +--rw rsvpTeTunnel* [tunnelName]
      |     +--rw tunnelName                   string
      |     +--ro mplsTunnelIngressLSRId?      inet:ipv4-address
      |     +--rw mplsTunnelEgressLSRId?       inet:ipv4-address
      |     +--rw mplsTunnelIndex?             uint16
      |     +--rw mplsTunnelBandwidth?         uint32
      |     +--rw mplsTeTunnelSetupPriority?   uint8
      |     +--rw holdPriority?                uint8
      |     +--rw hotStandbyEnable?            boolean
      |     +--rw hsbRevertiveMode?            enumeration
      |     +--rw hotStandbyWtr?               uint32
      |     +--rw ordinaryEnable?              boolean
      |     +--rw bestEffortEnable?            boolean
      |     +--rw disableCspf?                 boolean        
      |     +--rw tunnelPaths                             
      |     |  +--rw tunnelPath* [pathType]
      |     |     +--rw pathType            enumeration
      |     |     +--rw explicitPathName?   string
      |     |     +--ro includeAll?         string
      |     |     +--rw includeAny?         string
      |     |     +--rw excludeAny?         string
      |     |     +--rw hopLimit?           uint32
      |     |     +--ro lspId?              uint32
      |     |     +--ro lspState?           enumeration
      |     |     +--ro modifyLspId?        uint32            
      |     +--rw resvStyle?                   enumeration
      |     +--rw tieBreaking?                 enumeration
      |     +--rw pathMetricType?              enumeration
      |     +--ro hotStandbySwitchReason?      enumeration
      |     +--ro adminStatus?                 enumeration
      |     +--ro operStatus?                  enumeration
      |     +--ro workingLspType?              enumeration 
      |     +--ro workingLspId?                uint32     
      |     +--rw frrAttr
      |     |  +--rw frrEnable?          boolean
      |     |  +--rw bwProtEnable?       boolean
      |     |  +--rw frrBandwidth?       uint32
      |     |  +--rw frrSetupPriority?   uint32
      |     |  +--rw frrHoldPriority?    uint32
      |     +--rw bypassAttr
      |        +--rw bypassEnable?       boolean
      |        +--rw bypassProtectIFs
      |           +--rw bypassProtectIF* [bypassProtectIFName]
      |              +--rw bypassProtectIFName    ifName     
      +--ro rsvpTeLsps
      |  +--ro rsvpTeLsp* [mplsTunnelIngressLSRId mplsTunnelEgressLSRId mplsSessionID mplsLSPID]
      |     +--ro mplsTunnelIngressLSRId         inet:ipv4-address
      |     +--ro mplsTunnelEgressLSRId          inet:ipv4-address
      |     +--ro mplsSessionID                  uint16
      |     +--ro mplsLSPID                      uint16
      |     +--ro tunnelName?                    string
      |     +--ro mplsTunnelRole?                enumeration
      |     +--ro incomingIfName?                string
      |     +--ro outgoingIfName?                string
      |     +--ro mplsTunnelSetupPrio?           uint8
      |     +--ro mplsTunnelHoldingPrio?         uint8
      |     +--ro mplsTunnelBandwidth?           uint32
      |     +--ro mplsTunnelEHops                       
      |     |  +--ro mplsTunnelEHop* [mplsTunnelEHopIndex]
      |     |     +--rw mplsTunnelEHopIndex       uint32
      |     |     +--rw mplsTunnelEHopIpAddr      inet:ipv4-address
      |     |     +--rw mplsTunnelEHopType?       enumeration
      |     |     +--rw mplsTunnelEHopAddrType?   enumeration      
      |     +--ro mplsTunnelARHops
      |     |  +--ro mplsTunnelARHop* [mplsTunnelARHopIndex]
      |     |     +--ro mplsTunnelARHopIndex              uint32
      |     |     +--ro incommingType?                    boolean
      |     |     +--ro mplsTunnelARHopIpAddr?            inet:ipv4-address
      |     |     +--ro mplsTunnelARHopLabel?             uint32
      |     |     +--ro mplsTunnelLocalProtectInUse?      boolean
      |     |     +--ro mplsTunnelARHopLocalProtectType?  enumeration
      |     |     +--ro mplsTunnelARHopBwProt?            boolean            
      |     +--ro mplsTunnelHopTableName?                 string
      |     +--ro mplsCHops
      |     |  +--ro mplsCHop* [mplsTunnelCRPathIndex mplsTunnelCRHopIndex]
      |     |     +--ro mplsTunnelCRPathIndex             uint32
      |     |     +--ro mplsTunnelCRHopIndex              uint32
      |     |     +--ro mplsTunnelCRHopIsInclude?         boolean
      |     |     +--ro mplsTunnelCRHopType?              enumeration
      |     |     +--ro mplsTunnelLocalProtectInUse?      boolean
      |     |     +--ro mplsTunnelCRHopAddrType?          enumeration
      |     |     +--ro mplsTunnelCRHopIpAddr?            inet:ipv4-address               
      |     +--ro mplsTunnelLocalProtectEnable?           boolean   
      |     +--ro mplsTunnelLocalProtectInUse?            enumeration                             
      |     +--ro bypassTunnelName?                       string            
      |     +--ro mplsTunnelMergingPermitted?             boolean      
      |     +--ro mplsTunnelIncludeAllAffinity?           string      
      |     +--ro mplsTunnelIncludeAnyAffinity?           string      
      |     +--ro mplsTunnelExcludeAnyAffinity?           string      
      |     +--ro lspMTU?                                 uint32                                    
      |     +--ro mplsTunnelOperStatus?                   enumeration                                          
      |     +--ro inLabel?                                uint32                                              
      |     +--ro outLabel?                               uint32                                                      
      |     +--ro nextHop?                                inet:ipv4-address                                                            
      |     +--ro xcindex?                                uint32 
      +--rw staticTunnels
      |  +--rw staticTunnel* [tunnelName]
      |     +--rw tunnelName                   string
      |     +--rw tunnelIngressLSRId?          inet:ipv4-address
      |     +--rw tunnelEgressLSRId?           inet:ipv4-address
      |     +--rw tunnelIndex?                 uint16      
      |     +--rw tunnelBandwidth?             uint32 
      |     +--rw staticCRLSPs                             
      |     |  +--rw staticCRLSP* [lspName]
      |     |     +--rw lspType                enumeration      
      |     |     +--rw lspName                string
      |     |     +--ro lspState               enumeration
      |     +--rw revertMode?                  uint32       
      |     +--rw wtrValue?                    uint32       
      |     +--rw holdoffValue?                uint32       
      +--rw staticCRLsps
      |  +--rw staticCRLsp* [lspName]
      |     +--rw lspName                      string
      |     +--rw lsrRole                      enumeration  
      |     +--ro destinationAddress?          inet:ipv4-address          
      |     +--rw bandwitdh                    uint32              
      |     +--ro incomingIfName?              ifName
      |     +--rw inLabel?                     uint32
      |     +--rw outgoingIfName?              ifName   
      |     +--rw nextHop?                     inet:ipv4-address
      |     +--rw outLabel?                    uint32
      |     +--rw mtu?                         uint32

              Figure 2 The I2RS YANG model of MPLS TE]]></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 [I-D.ietf-i2rs-architecture].</t>
    </section>
  </middle>

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

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

      <?rfc include='reference.I-D.huang-i2rs-mpls-te-usecases'?>

      <?rfc include='reference.I-D.hares-i2rs-usecase-reqs-summary'?>
    </references>
  </back>
</rfc>
