<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-yang-pce-pcep-over-quic-06" category="std" consensus="true" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="PCEP over QUIC">PCEP over QUIC</title>

    <author initials="F." surname="Yang" fullname="Feng Yang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>Xuanwumen West Street</street>
          <city>Beijing</city>
          <country>CN</country>
        </postal>
        <email>yangfeng@chinamobile.com</email>
      </address>
    </author>
    <author initials="C." surname="Lin" fullname="Changwang Lin">
      <organization>New H3C Technologies</organization>
      <address>
        <postal>
          <street>Yongjia North Rd</street>
          <city>Beijing</city>
          <country>CN</country>
        </postal>
        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>
    <author initials="S." surname="Sidor" fullname="Samuel Sidor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Pribinova 10</street>
          <city>Bratislava</city>
          <code>811 09</code>
          <country>SK</country>
        </postal>
        <email>ssidor@cisco.com</email>
      </address>
    </author>
    <author initials="X." surname="Zhang" fullname="Xiaoqiu Zhang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>Xuanwumen West Street</street>
          <city>Beijing</city>
          <country>CN</country>
        </postal>
        <email>zhangxiaoqiu@chinamobile.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="29"/>

    <area>RTG</area>
    <workgroup>pce</workgroup>
    <keyword>pcep</keyword> <keyword>quic</keyword>

    <abstract>



<t>This document specifies the use of QUIC streams to implement the PCEP protocol for efficient and secure data transmission.</t>



    </abstract>



  </front>

  <middle>



<section anchor="introduction"><name>Introduction</name>

<t>The Path Computation Element Communication Protocol (PCEP) <xref target="RFC5440"></xref> facilitates communication between Path Computation Clients (PCCs) and Path Computation Elements (PCEs), as well as among PCEs, to optimize network routing and resource utilization.</t>

<t>QUIC (Quick UDP Internet Connections) <xref target="RFC9369"></xref> is a transport protocol based on UDP, offering low-latency connections, multiplexing, improved congestion control, and built-in encryption, similar to TLS <xref target="RFC7301"></xref>.</t>

<t>Implementing PCEP over QUIC offers several key benefits:</t>

<t><ul>
  <li>Faster Connection Establishment: QUIC's quick handshake reduces connection setup times.</li>
  <li>No Head-of-Line Blocking: Multiple PCEP sessions can run concurrently over a single connection.</li>
  <li>Improved Packet Loss Recovery: QUIC's efficient mechanisms ensure reliable data transmission.</li>
  <li>Enhanced Security: Built-in encryption ensures the confidentiality and integrity of PCEP messages.</li>
  <li>High Resiliency: Support for multiple sessions within a single connection enhances system reliability.</li>
</ul></t>

<t>In summary, using QUIC for PCEP enhances efficiency, security, and reliability in network routing communications.</t>

<t>This document primarily describes the protocol adaptations necessary for using a QUIC connection with the PCEP protocol. The protocol process fully adheres to the specifications described in RFC 5440.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>


</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>PCEPoQ: PCEP using QUIC.</t>

</section>
<section anchor="summary-of-operations"><name>Summary of Operations</name>

<section anchor="establish-pcepquic-connection"><name>Establish PCEP/QUIC Connection</name>

<t>The process of establishing a PCEP session is described in <xref target="RFC5440"></xref>.</t>

<t>Before two PCEPoQ speakers start exchanging routing information, they must establish a PCEP session.  It is established in two phases:</t>

<t>First, a QUIC connection is established at the transport layer as described in <xref target="RFC9000"></xref>.  When setting up a QUIC connection, PCEPoQ uses UDP port number TBD1 and employs TLS for security. During the TLS handshake, the Application-Layer Protocol Negotiation (ALPN) token "pcepoq" is used.</t>

<t>Second, establish a PCEPoQ session over this transport connection. For PCC-to-PCE communication, the PCC acts as the QUIC Client, and the PCE serves as the QUIC Server.  For PCE-to-PCE communication, the PCE that actively initiates the connection operates as the QUIC Client, while the PCE receiving the connection functions as the QUIC Server.</t>

</section>
<section anchor="establish-pcepquic-control-channel"><name>Establish PCEP/QUIC Control Channel</name>

<t>After PCEPoQ session is established, the PCEPoQ speaker establishes a bidirectional stream for the "PCEPoQ control channel." The control channel is used to establish a PCEPoQ relationship between PCC and PCE, or between PCEs over QUIC. Open messages are used to establish the PCEPoQ control channel. After the channel is established, Keepalive messages are sent to maintain the control channel. Close messages are used to terminate the control channel. Notify messages are used to send specified notifications. When an error occurs, a PCErr message is sent through the PCEPoQ control channel to notify the PCEPoQ peer.</t>

</section>
<section anchor="establish-pcepquic-data-channel"><name>Establish PCEP/QUIC Data Channel</name>

<t>After establishing the control channel, each PCEPoQ speaker may create data channels using unidirectional QUIC streams.  These data channels are used to carry PCEReq and PCERep messages.  For IPv4 and IPv6 address families, separate data channels can also be established.  The advantage of separating the control channel from the data channels is that it allows for higher priority handling of the control channel's traffic, ensuring timely processing of control messages without delay caused by handling data messages.  Moreover, if PCEPoQ supports other address families in the future, using separate data channels can ensure that different address families do not interfere with each other.</t>

<t>Multiple PCEPoQ sessions <bcp14>MAY</bcp14> share the same QUIC connection. The "pcepoq" ALPN token is not session-specific.</t>

</section>
</section>
<section anchor="protocol-definitions"><name>Protocol Definitions</name>

<section anchor="pcep-over-quic-capability"><name>PCEP over QUIC Capability</name>

<t>Once a QUIC connection is established between a PCC and a PCE, or between two PCEs, the PCEPoQ speakers initiate the PCEPoQ session establishment process, during which various session parameters are negotiated. These parameters are carried within Open messages and include the Keepalive timer, DeadTimer, and policy rules that specify the conditions under which path computation requests may be sent to the PCE, as well as the supported PCEPoQ capabilities and other detailed capabilities. If the PCEPoQ session establishment phase fails because the PCEPoQ peers disagree on the session parameters or one of the PCEPoQ peers does not respond after the expiration of the establishment timer, successive retries are permitted. However, an implementation should use an exponential back-off procedure for session establishment retries.</t>

<t>To negotiate PCEPoQ-related capabilities, this document extends the PCEPoQ Capability TLV <xref target="f1"/>.</t>

<figure anchor="f1">
<name>PCEPoQ Capability TLV</name><artwork type="ascii-art" align="center"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type (TBD2)         |          Length (4)           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Capability                       |D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Type      : 2 bytes (TBD2)
    Length    : 2 bytes (4)
    Capability:
      D: Bit 0, support data channel, this document

]]></artwork></figure>

<t>When sending an Open message to establish a PCEPoQ session, the local PCEPoQ capabilities are included. If capability negotiation fails, the PCEPoQ session establishment is aborted. After a failure, if no other sessions exist, a QUIC connection may choose to remain open or close based on specific implementation, though this document does not elaborate further.</t>

</section>
<section anchor="maintenance-of-control-channel"><name>Maintenance of Control Channel</name>

<t>Once a PCEPoQ session has been established, a PCE or PCC over QUIC may want to know that its PCEPoQ peer is still available for use.</t>

<t>PCEPoQ includes a keepalive mechanism based on a Keepalive timer, a DeadTimer, and a Keepalive message. The PCEP Keepalive message is sent through the PCEPoQ control channel.</t>

<t>If no Keepalive message is received within the DeadTimer period, the PCEPoQ session <bcp14>SHOULD</bcp14> be reset and a new session <bcp14>SHOULD</bcp14> be attempted. While resetting the PCEPoQ session, the corresponding PCEPoQ data channel should also be reset.</t>

<t>The Notification message can be sent by either a PCE to a PCC, or by a PCC to a PCE, or by a PCE to a PCE, to notify of a specific event. This message is transmitted through the PCEPoQ control channel.</t>

<t>There are several circumstances in which a PCE over QUIC may want to notify a PCC or PCE over QUIC of a specific event.  For example, suppose that the PCE over QUIC suddenly gets overloaded, potentially leading to unacceptable response times.</t>

<t>The PCE over QUIC may want to notify one or more PCCs/PCEs over QUIC that some of their requests (listed in the notification) will not be satisfied or may experience unacceptable delays.  Upon receiving such notification, the PCC/PCE over QUIC may decide to redirect its path computation requests to another PCE over QUIC should an alternate PCE be available.  Similarly, a PCC/PCE over QUIC may desire to notify a PCE over QUIC of a particular event such as the cancellation of pending requests.</t>

</section>
<section anchor="pcepoq-connection-termination"><name>PCEPoQ Connection Termination</name>

<t>When one of the PCEP over QUIC peers wishes to terminate a PCEPoQ session, it first sends a Close message.  This message is transmitted through the PCEPoQ control channel.  The sender then closes the PCEPoQ session.  Upon receiving the Close Message, the recipient closes the corresponding PCEPoQ session.</t>

<t>If there are no other PCEPoQ sessions, the QUIC connection can be closed or kept permanently active depending on the implementation. This document assumes that the QUIC connection remains open. The following state machine descriptions are based on this assumption and will not restate it.</t>

<t>The PCEP over QUIC Error message is sent in several situations: when a protocol error condition is met or when the request is not compliant with the PCEP over QUIC specification (e.g., capability not supported, reception of a message with a mandatory missing object, policy violation, unexpected message, unknown request reference).</t>

<t>This message is transmitted through the PCEPoQ control channel.</t>

</section>
<section anchor="pcepoq-framing-layer"><name>PCEPoQ Framing Layer</name>

<t>Some PCEPoQ messages, although sent in the control channel, are meant for a function channel, such as the responding Open message or Keepalive message for a function channel.  These messages need to carry the corresponding function channel/stream ID information.</t>

<t>There are two types of PCEPoQ Frames: Control and Data.</t>

<t>Data frames have the following format:</t>

<figure><artwork><![CDATA[
PCEPoQ Data Frame Format {
   Type (16) = 0,
   Length (16),
   Frame Payload (...)
}

PCEPoQ Control Frame Format {
  Type (16) = 1,
  Length (16),
  Stream ID (62),
  padding (2) = 0,
  Frame Payload (...)
}

]]></artwork></figure>

<t>Type: two octets, identifying the frame type.</t>

<t>Length: The two-byte unsigned integer that describes the length in bytes of the frame payload.</t>

<t>Stream ID: A 62-bit integer indicating the receiving stream ID of this message.</t>

<t>Frame Payload: PCEP messages.</t>

<t><xref target="t1"/> lists the frame type to be used when PCEP messages are sent in different channels.</t>

<table anchor="t1">
<name>PCEPoQ Frame Type Mapping</name>
<thead>
<tr>
<th>&#160;</th>
<th>Control Channel</th>
<th>Data Channel</th>
</tr>
</thead>
<tbody>
<tr>
<td>Open</td>
<td>Control</td>
<td>Data</td>
</tr>
<tr>
<td>Keepalive</td>
<td>Control</td>
<td>Data</td>
</tr>
<tr>
<td>Notification</td>
<td>Control</td>
<td>Data</td>
</tr>
<tr>
<td>PCErr</td>
<td>Control</td>
<td>Data</td>
</tr>
<tr>
<td>PCReq</td>
<td>/</td>
<td>Data</td>
</tr>
<tr>
<td>PCRep</td>
<td>/</td>
<td>Data</td>
</tr>
<tr>
<td>Close</td>
<td>Control</td>
<td>Data</td>
</tr>
</tbody>
</table>

</section>
<section anchor="path-computation-request-and-reply"><name>Path Computation Request and Reply</name>

<t>Once a PCC/PCE has successfully established a PCEPoQ session with one or more PCEs, if an event is triggered that requires the computation of a set of paths, the PCC/PCE first selects one or more PCEs. Once the PCC/PCE has selected a PCE, it sends a path computation request to the PCE (PCReq message) by PCEPoQ connection.</t>

<t>The PCReq message can only be sent and received through the PCEPoQ data channel.  If this message is received on the control channel, it will be ignored.</t>

<t>Upon receiving a path computation request from a PCC/PCE, the PCE initiates a path computation. The result is then sent to the PCC/PCE via a PCRep message through the PCEPoQ data channel.</t>

<t>The PCRep message can only be sent and received through the PCEPoQ data channel.  If this message is received on the control channel, it will be ignored.</t>

</section>
</section>
<section anchor="pcepoq-finite-state-machine-fsm"><name>PCEPoQ Finite State Machine (FSM)</name>

<section anchor="events-for-the-pcepoq-fsm"><name>Events for the PCEPoQ FSM</name>

<section anchor="optional-events-linked-to-optional-session-attributes"><name>Optional Events Linked to Optional Session Attributes</name>

<t>The Inputs to the PCEPoQ FSM are events.  Events can either be mandatory or optional.  Some optional events are linked to optional session attributes.  Optional session attributes enable several groups of FSM functionality.</t>

<t>The linkage between FSM functionality, events, and the optional session attributes are described below.</t>

<figure><artwork><![CDATA[
Group 1: Automatic Administrative Events (Start/Stop)

  Optional Session Attributes: AllowAutoStart,
                               AllowAutoStop,
                               DampPeerOscillations,
                               IdleHoldTime, 
                               IdleHoldTimer

Group 2: Unconfigured Peers

  Optional Session Attributes: AcceptConnectionsUnconfiguredPeers

Group 3: QUIC processing

  Optional Session Attributes: PassiveQuicEstablishment, 
                               TrackQuicState

Group 4:  PCEPoQ Message Processing

  Optional Session Attributes: DelayOpen, 
                               DelayOpenTime,
                               DelayOpenTimer,
                               SendNotificationWithoutOpen,
                               CollisionDetectEstablishedState
 
]]></artwork></figure>

</section>
<section anchor="administrative-events"><name>Administrative Events</name>

<t>Event 1: ManualStart</t>

<t>Event 2: ManualStop</t>

<t>Event 3: AutoStart</t>

<t>Event 4: ManualStart_with_PassiveQuicEstablishment</t>

<t>Event 5: AutoStart_with_PassiveQuicEstablishment</t>

<t>Event 6: AutoStart_with_DampPeerOscillations</t>

<t>Event 7: AutoStart_with_DampPeerOscillations_and_PassiveQuicEstablishment</t>

<t>Event 8: AutoStop</t>

</section>
<section anchor="timer-events"><name>Timer Events</name>

<t>Event 9: ConnectRetryTimer_Expires</t>

<t>Event 10: HoldTimer_Expires</t>

<t>Event 11: KeepaliveTimer_Expires</t>

<t>Event 12: DelayOpenTimer_Expires</t>

<t>Event 13: IdleHoldTimer_Expires</t>

</section>
<section anchor="quic-connection-based-events"><name>QUIC Connection-Based Events</name>

<t>Event 14: QuicConnection_Valid</t>

<t>Event 15: QUIC_CR_Invalid</t>

<t>Event 16: QUIC_CR_Acked</t>

<t>Event 17: QuicConnectionConfirmed</t>

<t>Event 18: QuicConnectionFails</t>

</section>
<section anchor="pcepoq-message-based-events"><name>PCEPoQ Message-Based Events</name>

<t>Event 19: PCEPOpen</t>

<t>Event 20: PCEPOpen_with_DelayOpenTimer_Running</t>

<t>Event 21: PCEPHeaderErr</t>

<t>Event 22: PCEPOpenMsgErr</t>

<t>Event 23: OpenCollisionDump</t>

<t>Event 24: NotifMsgVerErr</t>

<t>Event 25: NotifMsg</t>

<t>Event 26: KeepaliveMsg</t>

<t>Event 27: NotificationMsg</t>

<t>Event 28: ErrorMsg</t>

</section>
</section>
<section anchor="description-of-fsm"><name>Description of FSM</name>

<t>The section describes the PCEPoQ finite state machine (FSM).</t>

<figure anchor="f2">
<name>PCEPoQ Finite State Machine</name><artwork type="ascii-art" align="center"><![CDATA[
            +-----------+<------+
+-----------| SessionUP |<---+  |
|           +-----------+    |  |
|                            |  |
|        +->+-----------+    |  |
|        |  | KeepWait  |----+  |
|        +--|           |<---+  |
|  +--------+-----------+    |  |
|  |             |           |  |
|  |             V           |  |
|  |     +->+-----------+----+  |
|  |     |  | OpenWait  |-------+
|  |     +--|           |<------+
|  |  +-----+-----------+<---+  |
|  |  |          |           |  |
|  |  |          V           |  |
|  |  |  +->+-----------+    |  |
|  |  |  |  |  Pending  |----+  |
|  |  |  +--+-----------+<---+  |
|  |  |          |           |  |
|  |  |          V           |  |
|  |  +----->+-------+       |  |
|  +-------->| Idle  |-------+  |
+----------->+-------+----------+

]]></artwork></figure>

<t>PCEPoQ defines the following set of variables:</t>

<t>Connect: the timer (in seconds) started after having initialized a QUIC connection using the PCEPoQ-registered UDP port. The value of the Connect timer is 60 seconds.</t>

<t>ConnectRetry: the number of times the system has tried to establish a QUIC connection with a PCEPoQ peer without success.</t>

<t>ConnectMaxRetry: the maximum number of times the system tries to establish a QUIC connection using the PCEPoQ-registered UDP port before going back to the Idle state. The value of the ConnectMaxRetry is 5.</t>

<t>OpenWait: the timer that corresponds to the amount of time a PCEPoQ peer will wait to receive a PCEPoQ Open message from the PCEPoQ peer after the expiration of which the system releases the PCEPoQ resource and goes back to the Idle state. The OpenWait timer has a fixed value of 60 seconds.</t>

<t>KeepWait: the timer that corresponds to the amount of time a PCEPoQ peer will wait to receive a Keepalive or a PCEoQErr message from the PCEPoQ peer after the expiration of which the system releases the PCEPoQ resource and goes back to the Idle state. The KeepWait timer has a fixed value of 60 seconds.</t>

<t>OpenRetry: the number of times the system has received a PCEPoQ Open message with unacceptable PCEPoQ session characteristics.</t>

<t>The following two state variables are defined:</t>

<t>RemoteOK: a boolean that is set to 1 if the system has received an acceptable PCEPoQ Open message.</t>

<t>LocalOK: a boolean that is set to 1 if the system has received a PCEPoQ Keepalive message acknowledging that the PCEPoQ Open message sent to the peer was valid.</t>

<section anchor="idle-state"><name>Idle State:</name>

<t>The idle state is the initial PCEPoQ state where the PCEPoQ (also referred to as "the system") waits for an initialization event that can either be manually triggered by the user(configuration) or automatically triggered by various events. In the Idle state, PCEPoQ resources are allocated (memory, process, etc.), but no PCEPoQ messages are accepted from any peer.</t>

<t>The following set of variables are initialized:</t>

<t><ul>
  <li>QUICRetry=0,</li>
  <li>LocalOK=0,</li>
  <li>RemoteOK=0,</li>
  <li>OpenRetry=0.</li>
</ul></t>

<t>In this state, PCEP FSM refuses all incoming PCEP connections for this peer. No resources are allocated to the peer. In response to a ManualStart event (Event 1) or an AutoStart event (Event 3), the local system:</t>

<t><ul>
  <li>Initiates a QUIC connection with the PCEP peer,</li>
  <li>starts the ConnectRetryTimer with the initial value,</li>
  <li>changes its state to Pending.</li>
</ul></t>

<t>The ManualStop event (Event 2) and AutoStop (Event 8) event are ignored in the Idle state.</t>

<t>In response to a ManualStart_with_PassiveQuicEstablishment event (Event 4) or AutoStart_with_PassiveQuicEstablishment event (Event 5), the local system:</t>

<t><ul>
  <li>Initiates a QUIC connection with the PCEP peer,</li>
  <li>sets the ConnectRetryCounter to zero,</li>
  <li>starts the ConnectRetryTimer with the initial value,</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>If the DampPeerOscillations attribute is set to TRUE, the following three additional events may occur within the Idle state:</t>

<t><ul>
  <li>AutoStart_with_DampPeerOscillations (Event 6),</li>
  <li>AutoStart_with_DampPeerOscillations_and_PassiveQuicEstablishment (Event 7),</li>
  <li>IdleHoldTimer_Expires (Event 13).</li>
</ul></t>

<t>Upon receiving these 3 events, the local system will use these events to prevent peer oscillations. The method of preventing persistent peer oscillation is outside the scope of this document.</t>

<t>Any other event (Events 9-12, 15-28) received in the Idle state does not cause change in the state of the local system.</t>

</section>
<section anchor="pending-state"><name>Pending State:</name>

<t>In this state, PCEP FSM is waiting for the QUIC connection to be completed.</t>

<t>The start events (Events 1, 3-7) are ignored in the Pending state.</t>

<t>In response to a ManualStop event (Event 2), the local system:</t>

<t><ul>
  <li>drops the QUIC connection,</li>
  <li>releases all PCEP resources,</li>
  <li>sets ConnectRetryCounter to zero,</li>
  <li>stops the ConnectRetryTimer and sets ConnectRetryTimer to zero, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to the ConnectRetryTimer_Expires event (Event 9), the local system:</t>

<t><ul>
  <li>drops the QUIC connection,</li>
  <li>restarts the ConnectRetryTimer,</li>
  <li>stops the DelayOpenTimer and resets the timer to zero,</li>
  <li>initiates a QUIC connection to the other PCEP peer,</li>
  <li>continues to listen for a QUIC connection that may be initiated by the remote PCEP peer, and</li>
  <li>stays in the Pending state.</li>
</ul></t>

<t>If the DelayOpenTimer_Expires event (Event 12) occurs in the Connect state, the local system:</t>

<t><ul>
  <li>sends an Open message to its peer,</li>
  <li>sets the HoldTimer to a large value, and</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>If the PCEP FSM receives a QuicConnection_Valid event (Event 14), the QUIC connection is processed, and the connection remains in the Pending state.</t>

<t>If the PCEP FSM receives a QUIC_CR_Invalid event (Event 15), the local system rejects the QUIC connection, and the connection remains in the Pending state.</t>

<t>If the QUIC connection succeeds (Event 16 or Event 17), the local system checks the DelayOpen attribute prior to processing. If the DelayOpen attribute is set to TRUE, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>sets the DelayOpenTimer to the initial value, and</li>
  <li>stays in the Pending state.</li>
</ul></t>

<t>If the DelayOpen attribute is set to FALSE, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>completes PCEP initialization</li>
  <li>sends an Open message to its peer,</li>
  <li>sets the HoldTimer to a large value, and</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>A HoldTimer value of 4 minutes is suggested.</t>

<t>If the QUIC connection fails (Event 18), the local system checks the DelayOpenTimer. If the DelayOpenTimer is running, the local system:</t>

<t><ul>
  <li>restarts the ConnectRetryTimer with the initial value,</li>
  <li>stops the DelayOpenTimer and resets its value to zero,</li>
  <li>continues to listen for a QUIC connection that may be initiated by the remote PCEP peer, and</li>
  <li>Remains in the Pending state.</li>
</ul></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer to zero,</li>
  <li>drops the QUIC connection,</li>
  <li>releases all PCEP resources, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If an Open message is received while the DelayOpenTimer is running (Event 20), the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>completes the PCEP initialization,</li>
  <li>stops and clears the DelayOpenTimer (sets the value to zero),</li>
  <li>sends an Open message,</li>
  <li>sends a Keepalive message,</li>
  <li>and changes its state to KeepWait.</li>
</ul></t>

<t>If the value of the Autonomous System field is the same as the local Autonomous System number, set the connection status to an internal; otherwise set it to "external".</t>

<t>If PCEP message header checking (Event 21) or Open message checking detects an error (Event 22), the local system:</t>

<t><ul>
  <li>(optionally) If the SendNotificationWithoutOpen attribute is set to TRUE, then the local system first sends a Notification message with the appropriate error code, and then</li>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If a PCErr message is received with a version error (Event 24), the
local system checks the DelayOpenTimer. If the DelayOpenTimer is
running, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>stops and resets the DelayOpenTimer (sets to zero),</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>performs peer oscillation damping if the DampPeerOscillations attribute is set to True, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to any other events (Events 8, 10-11, 13, 19, 23,
25-28), the local system:</t>

<t><ul>
  <li>if the ConnectRetryTimer is running, stops and resets the ConnectRetryTimer (sets to zero),</li>
  <li>if the DelayOpenTimer is running, stops and resets the DelayOpenTimer (sets to zero),</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>performs peer oscillation damping if the DampPeerOscillations attribute is set to True, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>The start events (Events 1, 3-7) are ignored in the Pending state.</t>

<t>In response to a ManualStop event (Event 2), the local system:</t>

<t><ul>
  <li>If the DelayOpenTimer is running and the SendNotificationWithoutOpen session attribute is set, the local system sends a PCErr with a Cease,</li>
  <li>releases all PCEP resources including stopping the DelayOpenTimer</li>
  <li>drops the QUIC connection,</li>
  <li>sets ConnectRetryCounter to zero,</li>
  <li>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to a ConnectRetryTimer_Expires event (Event 9), the local system:</t>

<t><ul>
  <li>restarts the ConnectRetryTimer (with initial value),</li>
  <li>initiates a QUIC connection to the other PCEP peer,</li>
  <li>continues to listen for a QUIC connection that may be initiated by a remote PCEP peer, and</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>If the local system receives a DelayOpenTimer_Expires event (Event 12), the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>stops and clears the DelayOpenTimer (set to zero),</li>
  <li>completes the PCEP initialization,</li>
  <li>sends the Open message to its remote peer,</li>
  <li>sets its hold timer to a large value, and</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>A HoldTimer value of 4 minutes is also suggested for this state transition.</t>

<t>If the local system receives a QuicConnection_Valid event (Event 14), the local system processes the QUIC connection flags and stays in the Pending state.</t>

<t>If the local system receives a QUIC_CR_Invalid event (Event 15), the local system rejects the QUIC connection and stays in the Pending State.</t>

<t>In response to the success of a QUIC connection (Event 16 or Event 17), the local system checks the DelayOpen optional attribute prior to processing.</t>

<t>If the DelayOpen attribute is set to TRUE, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero,</li>
  <li>sets the DelayOpenTimer to the initial value (DelayOpenTime), and</li>
  <li>stays in the Pending state.</li>
</ul></t>

<t>If the DelayOpen attribute is set to FALSE, the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>completes the PCEP initialization,</li>
  <li>sends the Open message to its peer,</li>
  <li>sets its HoldTimer to a large value, and</li>
  <li>changes its state to OpenWait.</li>
</ul></t>

<t>A HoldTimer value of 4 minutes is suggested as a "large value" for the HoldTimer.</t>

<t>If the local system receives a QUICConnectionFails event (Event 18), the local system:</t>

<t><ul>
  <li>restarts the ConnectRetryTimer (with the initial value),</li>
  <li>stops and clears the DelayOpenTimer (sets the value to zero),</li>
  <li>releases all PCEP resource,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>optionally performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If an Open message is received and the DelayOpenTimer is running (Event 20), the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>stops and clears the DelayOpenTimer (sets to zero),</li>
  <li>completes the PCEP initialization,</li>
  <li>sends an Open message,</li>
  <li>sends a Keepalive message,</li>
  <li>if the HoldTimer value is non-zero,</li>
  <li>starts the KeepaliveTimer to initial value,</li>
  <li>resets the HoldTimer to the negotiated value, else if the HoldTimer is zero</li>
  <li>resets the KeepaliveTimer (set to zero),</li>
  <li>resets the HoldTimer to zero, and</li>
  <li>changes its state to KeepWait.</li>
</ul></t>

<t>If the value of the Autonomous System field is the same as the local Autonomous System number, set the connection status to an internal connection; otherwise it is "external".</t>

<t>If PCEP message header checking (Event 21) or Open message checking detects an error (Event 22), the local system:</t>

<t><ul>
  <li>(optionally) sends a PCErr message with the appropriate error code if the SendNotificationWithoutOpen attribute is set to TRUE,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If a PCErr message is received with a version error (Event 24), the local system checks the DelayOpenTimer.  If the DelayOpenTimer is running, the local system:</t>

<t><ul>
  <li>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</li>
  <li>stops and resets the DelayOpenTimer (sets to zero),</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to any other event (Events 8, 10-11, 13, 19, 23, 25-28), the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by one,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

</section>
<section anchor="openwait"><name>OpenWait:</name>

<t>In this state, PCEP FSM waits for an Open message from its peer. The start events (Events 1, 3-7) are ignored in the OpenWait state.</t>

<t>If a ManualStop event (Event 2) is issued in the OpenWait state, the local system:</t>

<t><ul>
  <li>sends the Close with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>sets the ConnectRetryCounter to zero, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If an AutoStop event (Event 8) is issued in the OpenWait state, the local system:</t>

<t><ul>
  <li>sends the Close with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all the PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the HoldTimer_Expires (Event 10) event occurs, the local system:</t>

<t><ul>
  <li>sends a PCErr message with the error code Hold Timer Expired,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If a QUICConnection_Valid (Event 14), QUIC_CR_Acked (Event 16), or a QUICConnectionConfirmed event (Event 17) is received, a second QUIC connection may be in progress.</t>

<t>This second QUIC connection is tracked per Connection Collision processing until an Open message is received.</t>

<t>A QUIC Connection Request for an Invalid port (QUIC_CR_Invalid (Event 15)) is ignored.</t>

<t>If a QUICConnectionFails event (Event 18) is received, the local system:</t>

<t><ul>
  <li>closes the PCEP connection,</li>
  <li>restarts the ConnectRetryTimer,</li>
  <li>continues to listen for a QUIC connection that may be initiated by the remote PCEP peer, and</li>
  <li>changes its state to Pending.</li>
</ul></t>

<t>When an Open message is received, all fields are checked for correctness. If there are no errors in the Open message (Event 19), the local system:</t>

<t><ul>
  <li>resets the DelayOpenTimer to zero,</li>
  <li>sets the PCEP ConnectRetryTimer to zero,</li>
  <li>sends a Keepalive message, and</li>
  <li>sets a KeepaliveTimer as described below,</li>
  <li>sets the HoldTimer according to the negotiated value,</li>
  <li>changes its state to KeepWait.</li>
</ul></t>

<t>If the negotiated hold time value is zero, then the HoldTimer and KeepaliveTimer are not started. If the value of the Autonomous System field is the same as the local Autonomous System number, then the connection is an "internal" connection; otherwise, it is an "external" connection. If the PCEP message header checking (Event 21) or Open message checking detects an error (Event 22), the local system:</t>

<t><ul>
  <li>sends a PCErr message with the appropriate error code,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>Collision detection mechanisms need to be applied when a valid PCEP Open message is received (Event 19 or Event 20). A CollisionDetectDump event occurs when the PCEP implementation determines, by means outside the scope of this document, that a connection collision has occurred. If a connection in the OpenWait state is determined to be the connection that must be closed, an OpenCollisionDump (Event 23) is signaled to the state machine. If such an event is received in the OpenWait state, the local system:</t>

<t><ul>
  <li>sends a PCErr with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If a PCErr message is received with a version error (Event 24), the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to any other event (Events 9, 11-13, 20, 25-28), the local system:</t>

<t><ul>
  <li>sends the PCErr with the Error Code Finite State Machine Error,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

</section>
<section anchor="keepwait-state"><name>KeepWait State:</name>

<t>In this state, PCEP waits for a Keepalive or PCErr message.</t>

<t>Any start event (Events 1, 3-7) is ignored in the KeepWait state.</t>

<t>In response to a ManualStop event (Event 2) initiated by the operator, the local system:</t>

<t><ul>
  <li>sends the PCErr message with a Cease,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>sets the ConnectRetryCounter to zero,</li>
  <li>sets the ConnectRetryTimer to zero, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to the AutoStop event initiated by the system (Event 8), the local system:</t>

<t><ul>
  <li>sends the PCErr message with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the HoldTimer_Expires event (Event 10) occurs before a Keepalive message is received, the local system:</t>

<t><ul>
  <li>sends the PCErr message with the Error Code Hold Timer Expired,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a KeepaliveTimer_Expires event (Event 11), the local system:</t>

<t><ul>
  <li>sends a Keepalive message,</li>
  <li>restarts the KeepaliveTimer, and</li>
  <li>remains in the KeepWait state.</li>
</ul></t>

<t>In the event of a QUICConnection_Valid event (Event 14), or the success of a QUIC connection (Event 16 or Event 17) while in KeepWait, the local system needs to track the second connection.</t>

<t>If a QUIC connection is attempted with an invalid port (Event 15), the local system will ignore the second connection attempt.</t>

<t>If the local system receives a QUICConnectionFails event (Event 18) from the underlying QUIC or a PCErr message (Event 25), the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a PCErr message with a version error (NotifMsgVerErr (Event 24)), the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a valid Open message (PCEPOpen (Event 19)), the collision detect function is processed. If this connection is to be dropped due to connection collision, the local system:</t>

<t><ul>
  <li>sends a PCErr with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If an Open message is received, all fields are checked for correctness. If the PCEP message header checking (PCEPHeaderErr (Event 21)) or Open message checking detects an error (PCEPOpenMsgErr (Event 22)), the local system:</t>

<t><ul>
  <li>sends a PCErr message with the appropriate error code,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If, during the processing of another Open message, the PCEP implementation determines, by a means outside the scope of this document, that a connection collision has occurred and this connection is to be closed, the local system will issue an OpenCollisionDump event (Event 23). When the local system receives an OpenCollisionDump event (Event 23), the local system:</t>

<t><ul>
  <li>sends a PCErr with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a Keepalive message (KeepaliveMsg(Event 26)), the local system:</t>

<t><ul>
  <li>restarts the HoldTimer and</li>
  <li>changes its state to SessionUP.</li>
</ul></t>

<t>In response to any other event (Events 9, 12-13, 20, 27-28), the local system:</t>

<t><ul>
  <li>sends a PCErr with a code of Finite State Machine Error,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

</section>
<section anchor="sessionup-state"><name>SessionUP State:</name>

<t>In the SessionUP state, the PCEP FSM can exchange PCReq, PCRep, PCErr, and Keepalive messages with its peer.</t>

<t>Any Start event (Events 1, 3-7) is ignored in the SessionUP state. In response to a ManualStop event (initiated by an operator) (Event 2), the local system:</t>

<t><ul>
  <li>sends the Close message with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>deletes all routes associated with this connection,</li>
  <li>releases PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>sets the ConnectRetryCounter to zero, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to an AutoStop event (Event 8), the local system:</t>

<t><ul>
  <li>sends a PCErr with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero</li>
  <li>deletes all routes associated with this connection,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>One reason for an AutoStop event is when a PCEP instance receives a PCNtf message that exceeds the configured maximum number of prefixes. The local system automatically disconnects the peer.</t>

<t>If the HoldTimer_Expires event occurs (Event 10), the local system:</t>

<t><ul>
  <li>sends a PCErr message with the Error Code Hold Timer Expired,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the KeepaliveTimer_Expires event occurs (Event 11), the local system:</t>

<t><ul>
  <li>sends a Keepalive message, and</li>
  <li>restarts its KeepaliveTimer, unless the negotiated HoldTime value is zero.</li>
</ul></t>

<t>Each time the local system sends a Keepalive or PCNtf message, it restarts its KeepaliveTimer, unless the negotiated HoldTime value is zero.</t>

<t>A QUICConnection_Valid (Event 14), received for a valid port, will cause the second connection to be tracked.</t>

<t>An invalid QUIC connection (QUIC_CR_Invalid event (Event 15)) will be ignored.</t>

<t>In response to an indication that the QUIC connection is successfully established (Event 16 or Event 17), the second connection <bcp14>SHALL</bcp14> be tracked until it sends an Open message.</t>

<t>If a valid Open message (PCEPOpen (Event 19)) is received, and if the CollisionDetect SessionUP State optional attribute is TRUE, the Open message will be checked to see if it collides with any other connection. If the PCEP implementation determines that this connection needs to be terminated, it will process an OpenCollisionDump event (Event 23). If this connection needs to be terminated, the local system:</t>

<t><ul>
  <li>sends a PCErr with a Cease,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>deletes all routes associated with this connection,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a PCErr message (Event 24 or Event 25) or a QUICConnectionFails (Event 18) from the underlying QUIC, the local system:</t>

<t><ul>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>deletes all routes associated with this connection,</li>
  <li>releases all the PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>If the local system receives a Keepalive message (Event 26), the local system:</t>

<t><ul>
  <li>restarts its HoldTimer, if the negotiated HoldTime value is non-zero, and</li>
  <li>remains in the SessionUP state.</li>
</ul></t>

<t>If the local system receives a PCNtf message (Event 27), the local system:</t>

<t><ul>
  <li>processes the message,</li>
  <li>restarts its HoldTimer, if the negotiated HoldTime value is non-zero, and</li>
  <li>remains in the SessionUP state.</li>
</ul></t>

<t>If the local system receives a PCNtf message, and the PCNtf message error handling procedure detects an error (Event 28), the local system:</t>

<t><ul>
  <li>sends a PCErr message with an error,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>deletes all routes associated with this connection,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

<t>In response to any other event (Events 9, 12-13, 20-22), the local system:</t>

<t><ul>
  <li>sends a PCErr message with the Error Code Finite State Machine Error,</li>
  <li>deletes all routes associated with this connection,</li>
  <li>sets the ConnectRetryTimer to zero,</li>
  <li>releases all PCEP resources,</li>
  <li>drops the QUIC connection,</li>
  <li>increments the ConnectRetryCounter by 1,</li>
  <li>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</li>
  <li>changes its state to Idle.</li>
</ul></t>

</section>
</section>
</section>
<section anchor="pcepoq-fsm-for-stateful-pcep"><name>PCEPoQ FSM for Stateful PCEP</name>

<t><xref target="RFC8231"></xref> describes the stateful PCEP negotiation process. Based on QUIC, after achieving SessionUP through the same negotiation process as stateless PCEPoQUIC, a data channel is established. Through this data channel, PCInitiate (LSP Initiate Request), PCUpd (Path Computation LSP Update Request), and PCRpt (Path Computation LSP State Report) messages are exchanged, thereby enabling LSP lifecycle management and state synchronization functions.</t>

</section>
<section anchor="stream-multiplexing"><name>Stream Multiplexing</name>

<t>QUIC offers stream multiplexing but does not provide a mechanism for exchanging stream priority information. Instead, it relies on receiving priority information from the application. PCEPoQ separates streams into control and data channels, assigning different priorities to each, ensuring that control messages receive higher priority processing.</t>

</section>
<section anchor="network-migration"><name>Network Migration</name>

<t>QUIC connections are not strictly bound to a single network path. Connection migration uses connection identifiers to allow connections to transfer to a new network path. In the current version of QUIC, only clients can migrate. The PCEPoQ protocol inherits this feature, allowing PCC over QUIC to perform network migration. PCE over QUIC should not identify PCC over QUIC by network address but rather use connection identifiers to recognize different PCC over QUIC instances.</t>

</section>
<section anchor="flow-control"><name>Flow Control</name>

<t>QUIC's flow control mechanism manages individual streams as well as the entire connection. A QUIC receiver controls the maximum amount of data a sender can transmit on any single stream and across all streams at any given time. PCEPoQ utilizes QUIC's flow control mechanism, separating control streams from data streams by using a control channel and a data channel.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Security considerations for QUIC are described in <xref target="RFC9000"></xref>, and for the TLS handshake used to secure QUIC in <xref target="RFC9001"></xref>. Implementations that enable 0-RTT <bcp14>MUST</bcp14> implement anti-replay measures as described in Section 8 of <xref target="RFC9001"></xref>. Implementations may consider a fallback mechanism for TCP-based PCEP (as defined in <xref target="RFC5440"></xref>) when QUIC cannot be established.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="udp-port-for-pcepoq"><name>UDP Port for PCEPoQ</name>

<t>IANA is requested to assign a UDP port (TBD1) from the "Service Name and Transport Protocol Port Number Registry" as follows:</t>

<table anchor="t2">
<name>UDP Port for PCEPoQ</name>
<thead>
<tr>
<th>Service Name</th>
<th>PCEPoQ</th>
</tr>
</thead>
<tbody>
<tr>
<td>Port Number</td>
<td>TBD1</td>
</tr>
<tr>
<td>Transport Protocol</td>
<td>udp</td>
</tr>
<tr>
<td>Description</td>
<td>PCEP over QUIC</td>
</tr>
</tbody>
</table>

</section>
<section anchor="registration-of-the-pcep-identification-string"><name>Registration of the PCEP Identification String</name>

<t>This document creates a new registration for the identification of PCEP in the "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" registry.</t>

<t>The "pcepoq" string identifies PCEP over QUIC:</t>

<t>protocol: PCEP over QUIC</t>

<t>Identification Sequence: "pcepoq"</t>

<t>Specification: This document</t>

</section>
<section anchor="pcepoq-capability-tlv"><name>PCEPoQ Capability TLV</name>

<t>IANA is asked to assign a new TLV code from PCEP TLV Type Indicators <xref target="RFC5440"></xref> for the PCEP over QUIC Capability as follows:</t>

<table anchor="t3">
<name>PCEPoQ Capability Registration</name>
<thead>
<tr>
<th>Value</th>
<th>TBD2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Description</td>
<td>PCEPoQ Capability</td>
</tr>
<tr>
<td>Reference</td>
<td>This Document</td>
</tr>
<tr>
<td>Change Controller</td>
<td>IETF</td>
</tr>
</tbody>
</table>

<figure><artwork><![CDATA[
Capability:
    D: Bit 0, support data channel, this document
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


<references anchor="sec-combined-references">
<name>References</name>

    <references anchor="sec-normative-references">
<name>Normative References</name>



<reference anchor="RFC8231">
  <front>
    <title>Path Computation Element Communication Protocol (PCEP) Extensions for Stateful PCE</title>
    <author fullname="E. Crabbe" initials="E." surname="Crabbe"/>
    <author fullname="I. Minei" initials="I." surname="Minei"/>
    <author fullname="J. Medved" initials="J." surname="Medved"/>
    <author fullname="R. Varga" initials="R." surname="Varga"/>
    <date month="September" year="2017"/>
    <abstract>
      <t>The Path Computation Element Communication Protocol (PCEP) provides mechanisms for Path Computation Elements (PCEs) to perform path computations in response to Path Computation Client (PCC) requests.</t>
      <t>Although PCEP explicitly makes no assumptions regarding the information available to the PCE, it also makes no provisions for PCE control of timing and sequence of path computations within and across PCEP sessions. This document describes a set of extensions to PCEP to enable stateful control of MPLS-TE and GMPLS Label Switched Paths (LSPs) via PCEP.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8231"/>
  <seriesInfo name="DOI" value="10.17487/RFC8231"/>
</reference>
<reference anchor="RFC5440">
  <front>
    <title>Path Computation Element (PCE) Communication Protocol (PCEP)</title>
    <author fullname="JP. Vasseur" initials="JP." role="editor" surname="Vasseur"/>
    <author fullname="JL. Le Roux" initials="JL." role="editor" surname="Le Roux"/>
    <date month="March" year="2009"/>
    <abstract>
      <t>This document specifies the Path Computation Element (PCE) Communication Protocol (PCEP) for communications between a Path Computation Client (PCC) and a PCE, or between two PCEs. Such interactions include path computation requests and path computation replies as well as notifications of specific states related to the use of a PCE in the context of Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) Traffic Engineering. PCEP is designed to be flexible and extensible so as to easily allow for the addition of further messages and objects, should further requirements be expressed in the future. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5440"/>
  <seriesInfo name="DOI" value="10.17487/RFC5440"/>
</reference>
<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="RFC9001">
  <front>
    <title>Using TLS to Secure QUIC</title>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9001"/>
  <seriesInfo name="DOI" value="10.17487/RFC9001"/>
</reference>
<reference anchor="RFC9369">
  <front>
    <title>QUIC Version 2</title>
    <author fullname="M. Duke" initials="M." surname="Duke"/>
    <date month="May" year="2023"/>
    <abstract>
      <t>This document specifies QUIC version 2, which is identical to QUIC version 1 except for some trivial details. Its purpose is to combat various ossification vectors and exercise the version negotiation framework. It also serves as a template for the minimum changes in any future version of QUIC.</t>
      <t>Note that "version 2" is an informal name for this proposal that indicates it is the second version of QUIC to be published as a Standards Track document. The protocol specified here uses a version number other than 2 in the wire image, in order to minimize ossification risks.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9369"/>
  <seriesInfo name="DOI" value="10.17487/RFC9369"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references anchor="sec-informative-references">
<name>Informative References</name>



<reference anchor="RFC7301">
  <front>
    <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
    <author fullname="S. Friedl" initials="S." surname="Friedl"/>
    <author fullname="A. Popov" initials="A." surname="Popov"/>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="E. Stephan" initials="E." surname="Stephan"/>
    <date month="July" year="2014"/>
    <abstract>
      <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7301"/>
  <seriesInfo name="DOI" value="10.17487/RFC7301"/>
</reference>



    </references>

</references>



  </back>

<!-- ##markdown-source:
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
RuW013utg370VWTLd/mAEOo7kxYNR4cUkvJXdRsJBvUKOaf9pH4Rk5hUz6El
45Db9t/Urzm9fG5oMWTagKtS31eCsItQjhJhxfq8KnrgXF5HRzgtXIPp+cAU
ff51I45xF1jB+tjMj5TgC/vrQq8qsogAPa12gQal0PvizXKTxwIuDFWuqQBJ
29CYxUYzaNFRqAUWNcCFc8GQvb7794Yx7oVcPDVX+DtELXdxhKWj4BHhpW/m
dmB9ru6Q2BuF+vRSj3cBM4sWwr3G1pRTTdtb7Z7Yqx43hWfdOFFReZozQ6ru
bTxIKh4+jktdh3M6e3idDVwdtuSecwy36T9un6bGM6WiTrnGUJovD1W0aD5V
FI+dB14Bak777mij75z1YzRgh3wgHoLrReVeWOdQHaKPD1W2Tt2sbjxbHfeL
Br36cjnSk1Ce+waTDwje/X5IxrodXA+vedMR/X4XsZrtrTVwGusaq8zaK8DH
w+9jYtN40Ca9/yqY6yE95jiOZZtGLazHPV/EkWm1/TWvbasvoZ4y4tcmyLR/
jxVp9Vibr7tNsrWFqnI2/3qryB4Oz1lXSO+7n7QCAdX4peYCDDT0AHz7qnJr
zBnUwR83y90yu0zVGU0NedFaefDScasY06ePEj3hEV20/qT5mM3KcPdXpzQL
Jv8dHMNtqyS/sum1yeQSYMjh9ULgq758Ti3HucdqMrV7DCjS1DRMUca05xZN
WUYHSk2kxrmshNNCjqrprL7tTFkpjNFtaGrZgjs6WIJdVXO7uvaHWYFUnspF
N7tGdBsGX+2U1UJH7f+WHJPyVWU/Q2UbPVwlOHfPWrWC9Scfra/qPWuIiwjq
A2ktbLCtrwd00YHyHh37nICeOWO/gk1TPoz9SUFLA14A15R7r4n4fI1GHnIx
3l3R5RWYn3PcsQUB3gkDdI9GtjDBr6DgF5Aec5c6tmDNI2EgoO5EdJYzrovX
eY+A2KmlpQtskMbdFgQCOFvejMm5KelOG29WbdpIXFrYdWr5kvbu/2eBXS9U
Lx2ffUi6Hp2XS2yNE447Uz6LiTOHjK+/7glxtO0SR3u1Bo5WERlaFoDHtn8F
0D4TQCvPiHcQNGm9sNB1s3yKDiH9pM53o3uiOnytUYcHquPOE5YnfvK+O726
iiG3+kmWyyC3CmFLzs8sITd3m11sgLb2GvtDq8uGPh87CiSvqEdhyxK+ySfP
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

-->

</rfc>

