<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC3692 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3692.xml">
<!ENTITY RFC5440 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5440.xml">
<!ENTITY RFC6709 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6709.xml">
<!ENTITY RFC8126 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC8281 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8281.xml">
<!ENTITY RFC8356 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8356.xml">
<!ENTITY I-D.ietf-pce-pceps-tls13 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-pce-pceps-tls13">
]>

<rfc docName="draft-farrel-pce-experimental-errors-02" category="std" ipr="trust200902" updates="5540">

<front>

<title abbrev="PCEP Experimental Error Codes">
   Allowing Experimental Error Codes in the Path Computation Element Protocol</title>

<author initials="A." surname="Farrel" fullname="Adrian Farrel">
  <organization>Old Dog Consulting</organization>
  <address>
    <email>adrian@olddog.co.uk</email>
  </address>
</author>

<author initials="H." surname="Zheng" fullname="Haomian Zheng">
  <organization>Huawei Technologies</organization>
  <address>
    <email>zhenghaomian@huawei.com</email>
  </address>
</author>

<date year="2024"/>
<workgroup>PCE Working Group</workgroup>

<abstract>

   <t>Experimental RFCs are often considered beneficial approaches to
      developing new protocol features. To that end, sub-ranges of
      code point registries are often designated as for experimental
      use.</t>

   <t>IANA assigns values to the Path Computation Element Communication
      Protocol (PCEP) parameters (messages, objects, TLVs).  According
      to RFC 5440 as updated by RFC 8356, the allocation policies for
      the registries for PCEP messages, objects, and TLV types are
      IETF Review with some sub-ranges of these registries being assigned
      for Experimental Use.  However, the registry of PCEP Error-Types
      and Error-values has only the IETF Review assignment policy meaning
      that experimentation is somewhat limited.</t>

   <t>This document updates RFC 5440 by designating a range of PCEP
      Error-Types for Experimental Use.</t>

</abstract>
</front>

<middle>

   <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>

      <t>The Path Computation Element Communication Protocol (PCEP) <xref target="RFC5440" />
         provides mechanisms for Path Computation Elements (PCEs) to perform
         path computations in response to Path Computation Client (PCC)
         requests, or autonomously in the case of stateful PCEs [RFC8281]. The computed paths
         are used when provisioning connectivity through Traffic Engineered networks.</t>

      <t>In Section 9 of <xref target="RFC5440" />, IANA assigns values to the PCEP parameters.
         The allocation policy for each of these parameters specified in RFC 5440
         is IETF Review <xref target="RFC8126" />.</t>

      <t>In consideration of the benefits of making experiments with PCEP and
         the utility of experimental codepoints <xref target="RFC3692" />,
         codepoint ranges for PCEP messages, objects, and TLV types for
         Experimental Use <xref target="RFC8126" /> are designated in <xref target="RFC8356" />.</t>

      <t>However, protocol experiments may also need to return protocol error messages
         indicating experiment-specific error cases. It will often be the case that
         previously assigned error codes (in the PCEP-ERROR Object Error Types and Values
         sub-registry) can be used to indicate the error cases within an experiment, but
         there may also be cases where new, experimental error codes are needed.</t>

      <t>In order to run experiments, it is important that the codepoint values used
         in the experiments do not collide with existing codepoints or any future
         allocations.</t>

      <t>This document updates <xref target="RFC5440" /> by changing the allocation policy
         for the registry of PCEP Error-Types to mark some of the codepoints as assigned
         for Experimental Use.  As stated in <xref target="RFC3692" />, experiments using
         these codepoints are not intended to be used in general deployments,
         and due care must be taken to ensure that two experiments using the
         same codepoints are not run in the same environment.</t>

      <section anchor="before" numbered="true" toc="default">
         <name>Consideration of RFC 8356</name>

         <t>It is worth noting that <xref target="RFC8356" /> deliberately chose to make
            experimental codepoints available only in the PCEP messages, objects, and TLV types
            registries. Appendix A of that document gives a brief explanation of why that
            decision was taken stating that, "The justification for this decision is that,
            if an experiment finds that it wants to use a new codepoint in another PCEP
            sub-registry, it can implement the same function using a new experimental
            object or TLV instead."</t>

         <t>While it is true that an experimental implementation could assign an
            experimental PCEP object and designate it the "experimental errors object",
            using it to carry arbitrary contents including experimental error codes, such
            an approach would cause unnecessary divergence in the code. The allowance of
            experimental Error-Types is a better approach that will more easily
            enable migration of successful experiments onto the Standards Track.</t>

      </section>

   </section>

   <section anchor="error-types" numbered="true" toc="default">
      <name>Experimental Error-Types</name>

      <t>This document allows for the designation of four PCEP Error-Type codepoints (252-255) for
         Experimental Use.</t>

      <t><xref target="iana" /> provides the IANA considerations for this designation. <xref target="advice" />
         gives advice about how to construct an experiment using these codepoints.</t>

   </section>

   <section anchor="advice" numbered="true" toc="default">
      <name>Advice on Experimentation</name>

      <t>An experiment that wishes to return experimental error codes should use one of the
         experimental Error-Type values as defined in this document. The experiment should
         agree, between all participating parties, which Error-Type to use and which
         Error-values to use within that Error-Type. The experiment will describe what the
         meanings of those Error-Type / Error-value pairs are. Those Error-Type and Error-values
         should not be recorded in any public (especially any IETF) documentation. Textual or
         symbolic names for the Error-Types and Error-values may be used to help keep the
         documentation clear.</t>

      <t>If multiple experiments are taking place at the same time using the same
         implementations, care must be taken to keep the sets of Error-Type / Error-value
         distinct.</t>

      <t>Note that there is no scope for experimental Error-values within existing
         non-experimental Error-Types. This reduces the complexity of the registry and of
         implementations. Experiments should place all experimental Error-values
         under the chosen experimental Error-Types.</t>

      <t>If, at some future time, the experiment is declared a success and moved to IETF work
         targeting publication on the Standards Track, each pair of Error-Type / Error-value
         will need to be assigned by IANA from the registry. In some cases, this will involve assigning
         a new Error-Type with its subtended Error-values. In other case, use may be made
         of an existing Error-Type with new subtended Error-values being assigned. The resulting change
         to code in an implementation is as simple as changing the numeric values of the
         Error-Types and Error-values.</t>

   </section>

   <section anchor="unknown" numbered="true" toc="default">
      <name>Handling of Unknown Experimentation</name>

      <t>A PCEP implementation that receives an experimental Error-Type in a PCEP
         message and does not recognise the Error-Type (i.e., is not part of the
         experiment) will treat the error as it would treat any other unknown
         Error-Type (such as from a new protocol extension). An implementation
         that is notified of a PCEP error will normally close the PCEP session
         (see <xref target="RFC5440" />). In general, PCEP implementations are
         not required to take specific action based on Error-Types, but
         may log the errors for diagnostic purposes.</t>

      <t>An implementation that is part of an experiment may receive an
         experimental Error-Type, but not recognise the Error-value. This could
         happen because of any of:
         <ul>
           <li>A faulty implementation.</li>
           <li>Two implementations not being synchronised with respect to which
               Error-values to use in the experiment.</li>
           <li>More than one experiment being run at the same time.</li>
         </ul></t>

      <t>As with unknown Error-Types, an implementation receiving an unknown Error-value
         is not expected to do more than log the received error, and may close the
         PCEP session.</t>

   </section>

   <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>

      <t>IANA maintains a registry called "Path Computation Element Protocol (PCEP) Numbers"
         with a sub-registry named "PCEP-ERROR Object Error Types and Values". IANA is
         requested to change the assignment policy for this sub-registry to read:

         <ul>
           <li>Error-Types
              <ul>
                 <li>0-251   : IETF Review</li>
                 <li>252-255 : Experimental Use</li>
              </ul></li>
           <li>Error-value
              <ul>
                 <li>For all IETF Review Error-Types : IETF Review</li>
                 <li>For all Experimental Use Error-Types : Experimental Use</li>
              </ul></li>
         </ul></t>

      <t>Additionally, IANA is requested to make an entry in the table as follows:
          <artwork align="center" name="" type="" alt="">
            <![CDATA[
Error-Type | Meaning            | Error-value            | Reference
-----------+--------------------+------------------------+-----------
252-255    | Experimental Use   | 0-255 Experimental Use | [this.I-D]
           | Not to be assigned | Not to be assigned     |
            ]]>
          </artwork></t>

   </section>

   <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>

      <t>This document does not introduce any new security considerations to
         the existing protocol.  Refer to <xref target="RFC5440" /> and
         <xref target="I-D.ietf-pce-pceps-tls13" /> for further details of the
         specific security measures applicable to PCEP.</t>

      <t><xref target="RFC3692" /> asserts that the existence of experimental codepoints
         introduces no new security considerations.  However, implementations
         accepting experimental error codepoints need to take care in how they parse
         and process them in case they come, accidentally, from another experiment.
         Further, an implementation accepting experimental codepoints needs to consider
         the security aspects of the experimental extensions. <xref target="RFC6709" />
         provides various design considerations for protocol extensions (including those
         designated as experimental).</t>

   </section>

   <section anchor="manage" numbered="true" toc="default">
      <name>Manageability Considerations</name>

      <t>The main manageability impacts of this work are as follows:

         <ul>
            <li>Implementations participating in any experiment should be made
                such that the Error-Type and Error-value numbers can be easily changed. This
                will enable quick modification if there are any collisions with
                other experiments.</li>

            <li>All implementations that receive and report Error-Types and Error-values
                (including protocol analysers) should report numeric values and state
                "unknown" if they do not know a specific interpretation of an error.
                This is not a new requirement or behavior, but is called out here as
                it is important for this case.</li>

          </ul></t>

   </section>

   <section anchor="acks" numbered="true" toc="default">
      <name>Acknowledgements</name>

      <t>Thanks to Dhruv Dhody for discussions that led to the creation of this document.</t>

   </section>

</middle>

<back>

<references title="Normative References">

   &RFC5440;
   &RFC8356;

</references>

<references title="Informative References">

   &RFC3692;
   &RFC6709;
   &RFC8126;
   &RFC8281;
   &I-D.ietf-pce-pceps-tls13;

</references>

</back>
</rfc>
