<?xml version="1.0" encoding="iso-8859-1"?>
<!-- 

RCAS: version -02 as of 20150427 - 13:56 CET
-->

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="no" ?>
<?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"?>



<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- Keywords -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!-- Arch -->
<!ENTITY RFC4655 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4655.xml">

<!-- PCEP -->
<!ENTITY RFC5440 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5440.xml">
<!-- BRPC -->
<!ENTITY RFC5441 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5441.xml">
<!-- DSTE -->
<!ENTITY RFC5455 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5455.xml">
<!-- RBNF -->
<!ENTITY RFC5511 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5511.xml">
<!-- Pkey -->
<!ENTITY RFC5520 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5520.xml">
<!-- XRO  -->
<!ENTITY RFC5521 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5521.xml">
<!-- OF   -->
<!ENTITY RFC5541 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5541.xml">
<!-- GCO  -->
<!ENTITY RFC5557 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5557.xml">
<!-- Monitoring  -->
<!ENTITY RFC5886 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5886.xml">
<!-- P2MP -->
<!ENTITY RFC6006 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6006.xml">
<!-- Vendor -->
<!ENTITY RFC7150 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7150.xml">
]>



<rfc category="bcp" docName="draft-many-pce-pcep-bcp-02" ipr="trust200902">
  <front>
    <title abbrev="pcep-bcp">PCEP Best Current Practices - Message formats and extensions</title>
    <author fullname="Ramon Casellas" initials="R." surname="Casellas" role="editor">
      <organization>CTTC</organization>
      <address>
        <postal>
          <street>Av. Carl Friedrich Gauss n.7</street>
          <city>Castelldefels</city>
          <code>08860 Barcelona</code>
          <country>Spain</country>
        </postal>
        <phone>+34 93 645 29 00</phone>
        <email>ramon.casellas@cttc.es</email>
      </address>
    </author>

    <author fullname="Oscar Gonzalez de Dios" initials="O." surname="Gonzalez de Dios" role="editor">
      <organization>Telefónica I+D</organization>
      <address>
        <postal>
          <street>Don Ramon de la Cruz 82-84</street>
          <city>Madrid</city>
          <code>28045</code>
          <country>Spain</country>
        </postal>
        <phone>+34913128832</phone>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>

    <author fullname="Adrian Farrel" initials="A." surname="Farrel" role="editor">
      <organization>Old Dog Consulting</organization>
      <address>
        <email>adrian@olddog.co.uk</email>
      </address>
    </author>

    <author fullname="Cyril Margaria" initials="C." surname="Margaria">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>88 Centennial Ave, Piscataway Township</street>
          <city>New Jersey</city>
          <country>US</country>
        </postal>
        <email>cmargaria@juniper.net</email>
      </address>
    </author>

    <author initials="D" surname="Dhody" fullname="Dhruv Dhody">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Leela Palace</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560008</code>
          <country>INDIA</country>
        </postal>
        <email>dhruv.dhody@huawei.com</email>
      </address>
    </author>

    <author initials="X" surname="Zhang" fullname="Xian Zhang">
      <organization>Huawei Technologies</organization>
      <address>
        <email>zhang.xian@huawei.com</email>
      </address>
    </author>


    <date year="2015"/>
    <area>Routing</area>
    <workgroup>PCE Working Group</workgroup>
    <keyword>PCE</keyword>
    <keyword>bcp</keyword>
    <keyword>grammar</keyword>
    <keyword>RBNF</keyword>
    <abstract>
      <t>A core standards track RFC defines the main underlying mechanisms, 
        basic object format and message structure of the Path Computation 
        Element (PCE) Communications Protocol (PCEP). PCEP has been 
        later extended in several RFCs, focusing on specific 
        functionalities. The proliferation of such companion RFCs may
        cause ambiguity when implementing a PCE based solution. This document 
        aims at documenting best current practices and at providing a 
        reference RBNF grammar for PCEP messages, including object ordering 
        and precedence rules.</t>
    </abstract>
  </front>
  <middle>



<!-- 
===================================================================
 Introduction
=================================================================== 
-->
    <section title="Introduction and Motivation">

      <t>The RBNF notation, defined in <xref target="RFC5511"/>, is used to
        specify the message format for the Path Computation Element
        communication Protocol (PCEP). The core of PCEP has been defined in
        <xref target="RFC5440"/> and later extended, notably, in <xref
          target="RFC7150"/> to support Vendor Extensions; in <xref
          target="RFC5455"/>, adding a CLASSTYPE object to support
        Diffserv-aware Traffic Engineering (DS-TE); in <xref
          target="RFC5520"/>, for topology confidentiality by means of
        Path-Keys; in <xref target="RFC5521"/>, in support of exclusions; in
        <xref target="RFC5541"/> to convey specific Objective Functions; in
        <xref target="RFC5557"/>, for Global Concurrent Optimization, in <xref
          target="RFC5886"/>, for monitoring and in <xref target="RFC6006"/>
        for point-to-multipoint (P2MP) computation.</t>

      <t>At the time of writing, several I.-D. are also addressing specific
        aspects, such as PCEP extensions for GMPLS networks <xref target="I-D.ietf-pce-gmpls-pcep-extensions"/>,
        for hierarchical PCE <xref target="I-D.ietf-pce-hierarchy-extensions"/> or for
        multi-layer, multi-region networks <xref target="I-D.ietf-pce-inter-layer-ext"/>.
        Stateful PCE capabilites are also being defined in <xref target="I-D.ietf-pce-stateful-pce"/>,
        including the case where a PCE is able to initiate the establishment and
        release of LSPs in <xref target="I-D.ietf-pce-pce-initiated-lsp"/>.</t>

      <t>Most PCEP RFCs describe specific protocol extensions and, as such,
        they focus on their constructs extending some base RFCs. Although
        it is not the intention of each individual draft or RFC
        to provide the latest and most complete/full definition of the
        protocol messages, in practice combining all the extensions as
        defined in the respective RFCs is complex, and open to interpretation.</t>

      <t>Message rules are sometimes provided within the text, resulting in
        ambiguity. Moreover, the fact that extensions may be defined in
        parallel may be a problem.  The canonical example is the case
        where RFC X defines construct p ::= A and subsequent RFC Y
        extends RFC X stating that object C MUST follow object A and RFC
        Z also extends RFC X stating that object D MUST follow object
        A.</t>

      <t>This document describes current practice when implementing existing 
        PCEP RFCs. This involves extending the existing RBNF notations using
        more verbose constructs where appropiate, while being semantically
        equivalent, in order to avoid ambiguity and to facilitate message 
        validation.</t>

      <section title="Object Ordering Issues and Inconsistencies">
        <t>The use of RBNF <xref target="RFC5511"/> states that the ordering of
          objects and constructs in an assignment is explicit, and
          protocol specifications MAY opt to state that ordering is only
          RECOMMENDED (the elements of a list of objects and constructs
          MAY be received in any order).</t>

        <t>The core PCEP document <xref target="RFC5440"/> states in Section 6
          that an implementation MUST form the PCEP messages using the
          object ordering specified in <xref target="RFC5440"/>. </t>

        <t><xref target="RFC5886"/> equally states that "An implementation MUST
          form the PCEP messages using the object ordering specified in
          this document."</t>

        <t><xref target="RFC5521"/> only states that "the XRO is OPTIONAL and
          MAY be carried within Path Computation Request (PCReq) and Path Computation
          Reply (PCRep) messages." and no ordering is provided. For example, it does not
          mention SVEC objects or rules.</t>

        <t><xref target="RFC5541"/> specifies that "the OF object MAY be carried 
          within a PCReq message.  If an objective function is to be applied
          to a set of synchronized path computation requests, the OF object 
          MUST be carried just after the corresponding SVEC (Synchronization 
          VECtor) object and MUST NOT be repeated for each elementary request.  
          Similarly, if a metric is to be applied to a set of synchronized 
          requests, the METRIC object MUST follow the SVEC object and MUST 
          NOT be repeated for each elementary request. (...) An OF object 
          specifying an objective function that applies to an individual path 
          computation request (non-synchronized case) MUST follow the RP object 
          for which it applies". It should be understood that this last sentence
          introduces ambiguity and if interpreted as the OF object MUST strictly 
          follow (right after) the RP object, it contradicts <xref target="RFC5440"/>
          where the RP object is followed by the ENDPOINTS object.</t>

        <t>RFCs that extend the core PCEP protocol are not consistent with the
          object ordering. </t>
          <!-- 
          For example, <xref target="RFC5520"/> defines:</t>

        <figure>
          <artwork><![CDATA[
<segment-computation> ::= 
	<ENDPOINTS>
	[<LSPA>]
	[<BANDWIDTH>]
	[<BANDWIDTH>]
	[<metric-list>]
	(snip)]]>
           </artwork>
        </figure>

        <t>and states that "the format of the message for use in normal path
          computation is unmodified". However, <xref target="RFC5520"/> was not
          updated to reflect that the BANDWIDTH object used for
          reoptimization was moved to appear after the RRO for which it
          applies, as given in <xref target="RFC5440"/> (updated in 
        Errata ID: 3582):

        <figure>
          <artwork><![CDATA[
<request>::= <RP>
             <ENDPOINTS>
             [<LSPA>]
             [<BANDWIDTH>]
             [<metric-list>]
             [<RRO>[<BANDWIDTH>]]
             [<IRO>]
             [<LOAD-BALANCING>] ]]>
          </artwork>
      </figure></t>
      -->

	<t><xref target="RFC5541"/> in section 3.2 is not consistent with
	 the ordering of OF and metric-list:</t>
        <figure>
	  <artwork><![CDATA[
<svec-list>      ::= <SVEC>
                     [<OF>]
                     [<metric-list>]
 
<request>        ::= <RP>
                     (snip)
                     [<metric-list>]
                     [<OF>]

<attribute-list> ::= [<OF>]
                     [<LSPA>]
                     [<BANDWIDTH>]
                     [<metric-list>] ]]>
                     </artwork>
        </figure>

        <t>In view of the above considerations, this  document aims at
          providing an object ordering for PCEP messages so implementations can
          interoperate.</t>
      </section>

      <section title="Inconsistent Naming">
        <t>PCEP RFCs may use inconsistent or ambiguous naming. For example <xref
            target="RFC5440"/> defines the Open message as having a common
          header and an OPEN object, and later uses Open to refer to the object
          that may appear in a PCErr message.</t>

        <figure>
          <artwork><![CDATA[
<Open Message>  ::= <Common Header>
                    <OPEN>

<PCErr Message> ::= <Common Header>
                    (<error-obj-list> [<Open>]) | <error>
                    [<error-list>]
]]></artwork>
        </figure>

        <t>It is common that a sequence or repetition of an object OBJ is noted
          as obj-list. It may happen that in extensions to core documents, the
          naming is kept although it no longer applies to such a sequence. For
          example, <xref target="RFC5886"/> states:</t>

        <figure>
          <artwork><![CDATA[
<svec-list> ::= <SVEC>
                [<OF>]
                [<svec-list>]

and later

<svec-list> ::= <SVEC>
                [<svec-list>]
          ]]></artwork>
	</figure>
      </section>


      <section title="Semantics and Exclusive Rules">
        <t>The current RBNF notation does not capture the semantics/intent of
          the messages; notably, when two options are mutually exclusive and at
          least one is mandatory. In most cases, this is noted as both options
          being optional. For example <xref target="RFC5440"/> states:</t> 
	<figure>
          <artwork><![CDATA[
<response>::=<RP>
            [<NO-PATH>]
            [<attribute-list>]
            [<path-list>]
 ]]></artwork>
        </figure>

        <t>with this example, a message that contains a response of the form
          <![CDATA[<RP><NO-PATH><ERO><..> ]]> (that is, a NO-PATH object
                followed by a path) is correct and successfully parsed.
                Likewise, a response with just an RP object is valid. Although
                the actual text within the  RFC may state the intention and
                disambiguate the grammar, the RBNF notation can be improved
                to better capture the semantics, message structure and original intent.
                Such enhancements allow the automated validation of message
                elements.</t>

        <t>Similarly, if the intent is to specific a rule such as metric-pce
          which includes a PCE-ID object followed by a PROC-TIME object and/or an
          OVERLOAD object, the syntax:</t>

        <figure>
          <artwork><![CDATA[
<metric-pce> ::= <PCE-ID> [<PROC-TIME>] [<OVERLOAD>]
]]></artwork>
        </figure>

        <t>allows, amongst other combinations, that neither PROC-TIME nor
          OVERLOAD appears, which is not the intended behavior (there should be
          at least one metric). The alternative</t>

        <figure>
          <artwork><![CDATA[
<metric-pce> ::= <PCE-ID> <metric-argument-list>
<metric-argument-list> ::= <metric-argument> [<metric-argument-list>]
<metric-argument> ::= <PROC-TIME> | <OVERLOAD>]]></artwork>
        </figure>
        <t>or equivalently</t>
        <figure>
          <artwork><![CDATA[
<metric-pce> ::= <PCE-ID> (<metric-argument>...)
<metric-argument> ::= <PROC-TIME> | <OVERLOAD>
]]>
	  </artwork>
        </figure>

        <t>does not reflect that each metric-argument should appear at most
          once. This can be addressed verbosely:</t>

        <figure>
          <artwork><![CDATA[
<metric-pce> ::= <PCE-ID> 
                ( <PROC-TIME> | <OVERLOAD> | <PROC-TIME><OVERLOAD> )

<metric-pce> ::= <PCE-ID> 
                ( <PROC-TIME>[<OVERLOAD>] | [<PROC-TIME>]<OVERLOAD> )]]>
	  </artwork>
        </figure>

        <t>Here the semantic is that we require any object of the set
          {PROC-TIME, OVERLOAD} to be present, and there should be at least
          one. Note that currently there are only a few cases where the
          "non-empty set" case arises.</t>
      </section>
    </section>

<!-- 
===================================================================
Initial Considerations
=================================================================== 
-->
    <section title="Initial Considerations">
      <t>This document does not modify the content of defined PCEP objects and
        TLVs.</t>

      <t>This document is not normative, the normative definition is included
        in the existing specs. This does not preclude integration with a future
        revision of such documents.</t>
    </section>


<!-- 
===================================================================
 Requirements Language
=================================================================== 
-->
    <section title="Requirements Language">
      <t> 
        This draft does not provide any new extensions to PCEP, but it 
        includes requirements specified by existing RFCs for illustrative purpose. </t>
      <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"/>. </t>
    </section>


<!-- ===================================================================
     RBNF grammars 
     =================================================================== -->
    <section title="RBNF Grammars">
      <t>This section provides the proposed RBNF notation for the PCEP messages. 
        Specific constructs or grammar rules that appear in several messages or
        deserve special considerations are described first.</t>

      <section title="Common Constructs">

	<section title="Object Sequences">
          <figure>
            <artwork><![CDATA[
<of-list>              ::= <OF> [<of-list>]

<metric-list>          ::= <METRIC> [<metric-list>]

<vendor-info-list>     ::= <VENDOR-INFORMATION> [<vendor-info-list>] 

<pce-id-list>          ::= <PCE-ID> [<pce-id-list>] 
      -- (note: named pce-list in original)]]>
            </artwork>
          </figure>
        </section>

        <section title="Synchronized Vectors">
          <t>
            <list style="hanging" hangIndent="6">
              <t hangText="SVEC tuple:">
                <vspace />
                A svec-tuple is a construct that associates a SVEC object with
                one or more constraining objects. The selected order follows
                the relative order of having OF and metric-list after the SVEC
                object, and the name svec-list has been changed since it no
                longer means a list of SVEC objects.</t>
            </list>
          </t>

          <figure>
            <artwork><![CDATA[
<svec-tuple> ::= <SVEC>
                 [<OF>]
                 [<metric-list>]
                 [<vendor-info-list>]
                 [<GC>]
                 [<XRO>]

<svec-tuple-list> ::= <svec-tuple> [<svec-tuple-list>]]]>
            </artwork>
          </figure>
          <t>Note that, again, as an example <xref target="RFC7150"/> defines:</t>

          <figure>
            <artwork><![CDATA[
<svec-list> ::= <SVEC>
                 [<OF>]
                 [<GC>]
                 [<XRO>]
                 [<metric-list>]
                 [<vendor-info-list>]
                 [<svec-list>] ]]>
            </artwork>
          </figure>
          <t>There are two problems, ordering and naming. So, we use the afore
            defined svec-tuple-list. The construct is updated to reflect the
            new name and to have the same relative order in the attributes that
            constrain a individual request </t>

        </section>


        <section title="Monitoring Metrics">
          <t>A metric-pce-id is a rule that associates a PCE identified by its
            PCE-ID to a list of metric arguments.</t>

          <figure>
            <artwork><![CDATA[
<metric-pce-id> ::= <PCE-ID> 
                   (<PROC-TIME> [<OVERLOAD>] | 
                   [<PROC-TIME>] <OVERLOAD> )

<metric-pce-id-list> ::= <metric-pce-id> [<metric-pce-id-list>] ]]></artwork>
	  </figure>
        </section>

        <section title="Monitoring Requests and Responses">
          <t>See <xref target="RFC5886"/> for the definition of specific/general and in-band/out-of-band.</t>
          <figure>
            <artwork><![CDATA[

<monitoring> ::= <MONITORING> <PCC-ID-REQ>

<monitoring-request> ::= <monitoring> [<pce-id-list>]

<monitoring-response> ::= <monitoring> 
          (<specific-monitoring-metrics-list> | 
           <general-monitoring-metrics-list>)

<specific-monitoring-metrics-list> ::= 
          <specific-monitoring-metrics> 
          [<specific-monitoring-metrics-list>]

<general-monitoring-metrics-list>  ::= 
          <general-monitoring-metrics> 
          [<general-monitoring-metrics-list>]

<specific-monitoring-metrics> ::= 
          <RP> <monitoring-metrics>

<general-monitoring-metrics>  ::= 
          <monitoring-metrics>

<monitoring-metrics> ::= 
          <metric-pce-id-list>]]></artwork>
        </figure>
      </section>


      <section title="Attributes">
        <t>Attributes are used to constrain a request, or to qualify a path
          (defined later in this document). However, it is not straightforward
          to define an attributes construct, since it may change for P2P or
          P2MP paths, and some objects (e.g. BANDWIDTH) may appear multiple
          times, with different semantics:
        <list>
          <t>In <xref target="RFC5440"/> the BANDWIDTH object
            can optionally appear as a path attribute or as a request constraint.</t>
          <t>In <xref target="RFC5440"/> the RRO object is only used in
            requests "The RRO is exclusively carried within a PCReq message"
            for reoptimization. In such contexts, the RRO and an optional BANDWIDTH objects
            are bound together, in the so called rro-bw-pair construct which 
            is also an attribute.</t>
          <t>In some contexts (stateful) paths are defined as having an
            optional RRO object, outside the PCEP attributes construct.</t>
          <t>In P2MP paths, multiple RRO objects may appear.</t>
        </list></t>

        <figure>
          <artwork><![CDATA[

      -- Note: it is expected that each attribute may appear 
      -- just once, even if the RBNF grammar allows it. If an 
      -- object is allowed to repeat a list is used (e.g.
      -- metric-list
      
      -- Note: the ordering is implied by the notation below. 

-- For P2P reoptimizations
<rro-bw-pair>     ::= <RRO> [<BANDWIDTH>]

-- For P2MP reoptimizations
<rro-list-bw>     ::= <rro-list>[<BANDWIDTH>]
            
-- Some attributes only apply to P2MP computations
<attribute>      ::= 
          <CLASSTYPE> |
          <LSPA> |
          <OF> |
          <BANDWIDTH> |
          <metric-list> |
          <vendor-info-list> |
          <IRO> |
          <BNC> |             -- Only in P2MP
          <XRO> |
          <RRO> |             -- Used in Reports
          <rro-bw-pair> |     -- Only in P2P
          <rro-list-bw> |     -- Only in P2MP
          <LOAD-BALANCING> |
          <INTER-LAYER> |
          <SWITCH-LAYER> |
          <REQ-ADAP-CAP> 

<attributes> ::= <attribute> [<attributes>]


		]]></artwork>
        </figure>

      </section>

      <section title="Paths">

        <t>A path is defined consistently as a qualified ERO (or ERO/SERO for
          P2MP). Similar path constructs appear, notably, in PCEP responses, in
          solicited/unsolicited state reports and in update requests.  The
          following remarks apply:</t>

        <t>The &lt;path&gt; construct is then defined as:</t>
          <figure>
            <artwork><![CDATA[

<ero-sero-list> ::= (<ERO> | <SERO>) [<ero-sero-list>]

<path>      ::= <ERO> [<attributes>]

<p2mp-path> ::= <ero-sero-list> [<attributes>]

<path-list> ::= <path>|<p2mp-path> [<path-list>]

              ]]></artwork>
          </figure>
      </section>
      </section>

      <section title="PCEP Messages">
      <section title="PCEP Open Message">
        <figure>
          <artwork><![CDATA[
<Open Message> ::= <Common Header>
                   <OPEN>
		]]></artwork>
        </figure>
      </section>


      <section title="PCEP Keep Alive (KeepAlive) Message">
        <figure>
          <artwork><![CDATA[
<KeepAlive Message>::= <Common Header>
	]]></artwork>
        </figure>
      </section>


      <section title="PCEP Request (PCReq) Message">
        <t>Note that the actual parsing depends on the content (flags) of the
          Request Parameters (RP) object, notably expansion and P2MP. In some
          cases, this may be considered redundant, e.g. the presence of a
          PATH_KEY object and the corresponding flag. </t>

      <t>[Editor's note: from a notation perspective, we lack a way to express
        "if object a field x has value v then include object b, else include
        object c". RNBF extensions can be considered in future revisions of the
        PCEP protocol, e.g. defining new constructs :
        <figure>
          <artwork><![CDATA[(<a with x=v> <b>) | (<a with x!=v> <c>) ]]></artwork>
        </figure> this issue is still open.]</t>

	<t>The PCReq message contains a possibly monitored list of requests, some 
	of which may be grouped by SVEC tuples.</t>
        <figure>
          <artwork><![CDATA[
<PCReq Message>::= <Common Header>
                   [<monitoring-request>]                   
                   [<svec-tuple-list>]
                   <request-list>

where:

<request-list>     ::= <request> [<request-list>] 

-- A request is either an expansion, a P2P request or a P2MP request

<request>          ::= <expansion> | 
                       <p2p_computation> |
                       <p2mp_computation>

<expansion>        ::= <RP><PATH-KEY>

<p2p_computation>  ::= <RP><ENDPOINTS>
                      [<LSP>]
                      [<attributes>]

<p2mp_computation> ::= <RP><tree-list>
                       [<attributes>]

-- For a P2P computation 
-- in RFC6006 there is a bw per tree, 
-- it is intended to be an optimization for an RRO list

<tree>          ::= <ENDPOINTS>(<rro-bw-pair>|<rro-list-bw>)

<tree-list> ::= <tree> [<tree-list>]

<tree> ::= <ENDPOINTS> <rro-bw-pair> 

		]]></artwork>
        </figure>
      </section>



      <section title="PCEP Reply (PCRep) Message">
        <figure>
          <artwork><![CDATA[
<PCRep Message> ::= <Common Header>
                    [<svec-tuple-list>]
                    <response-list>

-- Note: should clarify the use of SVEC tuple list

where

<response-list> ::= <response> [<response-list>]

-- An individual response may include monitoring info

<response>  ::= <RP> [<monitoring>] [<LSP>]
               (<success> | <failure>) [<monitoring-metrics>]


-- Note: should clarify P2MP attributes. P2MP response
-- also includes endpoint-path-pair-list. TBD

<success>   ::= <path-list>

<failure>   ::= <NO-PATH> [<attributes>]
      
      ]]></artwork>
        </figure>
      </section>




      <section title="PCEP Monitoring Request (PCMonReq) Message">
        <t>
          <list>
            <t>The PCMonReq message is defined in <xref target="RFC5886"/> for
              out-of-band monitoring requests.</t>

            <t><xref target="RFC5886"/> specifies that there is one mandatory
              object but the grammar also includes PCC-ID-REQ as mandatory.</t>

            <t>[Ed note:does it make sense to include a pce-id-list and a
              svec-list/request-list at the same time?]</t>
          </list>
        </t>
        <figure>
          <artwork><![CDATA[
<PCMonReq Message>    ::= <Common Header>
                          <monitoring-request>
		          [[<svec-tuple-list>] <request-list>]

		]]></artwork>
        </figure>
      </section>




      <section title="PCEP Monitoring Reply (PCMonRep) Message">
        <t>
          <list>
            <t>The PCMonRep message is defined in <xref target="RFC5886"/> for
              out-of-band monitoring responses.</t>

            <t><xref target="RFC5886"/> specifies that there is one mandatory
              object but the grammar also includes PCC-ID-REQ as mandatory.</t>

            <t><xref target="RFC5886"/> does not allow bundling several
              specific monitoring responses. A PCMonReq message causes N
              PCMonRep messages.</t>
          </list>
        </t>
        <figure>
          <artwork><![CDATA[
<PCMonRep Message> ::= <Common Header> 
                       <monitoring-response>
			   ]]></artwork>
        </figure>
      </section>



      <section title="PCEP Notify (PCNtf) Message">
        <figure>
          <artwork><![CDATA[
<PCNtf Message> ::= <Common Header> 
		    ( <solicited-notify> | <unsolicited-notify> )

where

<solicited-notify>   ::= <request-id-list> <notification-list>

<unsolicited-notify> ::= <notification-list> 

<request-id-list>    ::= <RP> [<request-id-list>]

<notification-list>  ::= <NOTIFICATION> [<notification-list>] ]]></artwork>
        </figure>
      </section>


      <section title="PCEP Error (PCErr) Message">
        <t>
          <list>
            <t>Errors can occur during PCEP handshake, or bound to one or more
              requests.</t>
            <t>An error during handshake is never solicited, i.e., not
              associated to a list of requests.</t>
            <t>A solicited error binds one or more Requests (RPs) to one or
              more PCEP-ERROR objects.</t>
          </list>
        </t>


        <figure>
          <artwork>
            <![CDATA[
<PCErr Message> ::= 
              <Common Header> 
	    ( <solicited-error> | <unsolicited-error> )

where

-- Solicited error is bound to a Request Paramters (RP) list or 
-- to a Stateful Request Parameters (SRP) list

<solicited-error> ::= <request-id-list> | <stateful-request-id-list>

-- Unsolicited Error can be due to handshake or asynchronous

<unsolicited-error> ::= <handshake-error> | <pcep-error-list> 

-- Handshake Error is bound to an OPEN object

<handshake-error>   ::= <pcep-error-list> <OPEN>


<request-id-list>   ::= <RP> [<request-id-list>]

<stateful-request-id-list> ::= <SRP>[<stateful-request-id-list>] 

<pcep-error-list>   ::= <PCEP-ERROR> [<pcep-error-list>]]]>
          </artwork>
        </figure>
      </section>


      <section title="PCEP Report (PCRpt) Message">
        <t>
          The PCRpt format is defined in <xref target="I-D.ietf-pce-stateful-pce"/>.
          Note, however, that the end-of-sync, solicited-report and unsolicited-report are introduced
          for convenience, and that the RRO object is already part of the attributes construct.
        </t>

        <figure>
          <artwork><![CDATA[
<PCRpt Message> ::= <Common Header>
                     <state-report-list>
Where:

<state-report-list> ::= <state-report> [<state-report-list>]

<state-report> ::= 
    <end-of-sync> | 
    <solicited-report> | 
    <unsolicited-report>

-- LSP flags signal end of synchronization

<end-of-sync> ::= <LSP>
   
<solicited-report>   ::= <SRP> <LSP> <path>
   
<unsolicited-report> ::= <LSP> <path>
        ]]>
          </artwork>
        </figure>
      </section>




      <section title="PCEP Update (PCUpd) Message">
        <t>
          As <xref target="I-D.ietf-pce-stateful-pce"/>.
        </t>
        <figure>
          <artwork><![CDATA[
<PCUpd Message> ::= <Common Header>
                    <udpate-request-list>
                      
Where:

<update-request-list> ::= <update-request>[<update-request-list>]

<update-request> ::= <SRP>
                     <LSP>
                     <path> ]]>
          </artwork>
        </figure>
      </section>



      <section title="PCEP Initiate (PCInitiate) Message">
        <t>As <xref target="I-D.ietf-pce-pce-initiated-lsp"/>. Note that
        the &lt;path&gt; construct is used here.</t>

        <figure>
          <artwork>
            <![CDATA[
<PCInitiate Message> ::= <Common Header>
                         <PCE-initiated-lsp-request-list>
Where:

<PCE-initiated-lsp-request-list> ::= <PCE-initiated-lsp-request> 
    [<PCE-initiated-lsp-request-list>]

-- A request can be an instantiation or a deletion. SRP / LSP 
-- flags are used to select
<PCE-initiated-lsp-request> ::= 
    <PCE-initiated-lsp-instantiation> | 
    <PCE-initiated-lsp-deletion>)

<PCE-initiated-lsp-instantiation> ::= <SRP>
                                      <LSP>
                                      <ENDPOINTS>
                                      <path>

<PCE-initiated-lsp-deletion> ::= <SRP>
                                 <LSP>


]]>
          </artwork>
        </figure>
      </section>
    </section>
  </section>


<!-- 
===================================================================
        Management Considerations
=================================================================== 
-->
    <section title="Management Considerations">
      <t>This document does not define additional management considerations.</t>
    </section>

<!-- 
===================================================================
        Security Considerations
=================================================================== 
-->
    <section title="Security Considerations">
      <t>This document does not define additional security considerations.</t>
    </section>




<!-- 
===================================================================
   CONTRIBUTING AUTHORS
=================================================================== 
-->
    <section title="Contributing Authors">
      <t>
        <list>
          <t>
            Robert Varga<vspace blankLines="0"/>
            Pantheon<vspace blankLines="0"/>
            robert.varga@pantheon.sk<vspace blankLines="0"/>
          </t>
        </list>
      </t>

      <t>
        <list>
          <t>
            Jonathan Harwick<vspace blankLines="0"/>
            Metaswitch<vspace blankLines="0"/>
            Jonathan.Hardwick@metaswitch.com<vspace blankLines="0"/>
          </t>
        </list>
      </t>

      <t>
        <list>
          <t>
            Olivier Dugeon<vspace blankLines="0"/>
            Orange<vspace blankLines="0"/>
            olivier.dugeon@orange.com<vspace blankLines="0"/>
          </t>
        </list>
      </t>

      <t>
        <list>
          <t>
            Julien Meuric<vspace blankLines="0"/>
            Orange<vspace blankLines="0"/>
            julien.meuric@orange.com<vspace blankLines="0"/>
          </t>
        </list>
      </t>

      <t>
        <list>
          <t>
            Ina Minei<vspace blankLines="0"/>
            Google<vspace blankLines="0"/>
            inaminei@google.com<vspace blankLines="0"/>
          </t>
        </list>
      </t>

    </section>


<!-- 
===================================================================
 ACKNOWLEDGEMENTS
=================================================================== 
-->
    <section title="Acknowledgments">
      <t>This work was supported in part by the PACE Support Action (http://ict-pace.net/) project under
        grant agreement number 619712.</t>
    </section>
  </middle>



<!-- 
===================================================================
 REFERENCES
=================================================================== 
-->
  <back>
    <references title="Normative References">
      &RFC2119;
      &RFC5440;
      &RFC5455;
      &RFC5511;
      &RFC5520;
      &RFC5521;
      &RFC5541;
      &RFC5557;
      &RFC5886;
      &RFC6006;
      &RFC7150;
      <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pce-gmpls-pcep-extensions-09.xml"?> 
      <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pce-hierarchy-extensions-01.xml"?> 
      <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pce-inter-layer-ext-08.xml"?> 
      <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pce-stateful-pce-09.xml"?> 
      <?rfc include="http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pce-pce-initiated-lsp-01.xml"?> 
    </references>
  </back>
</rfc>

