<?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.29 (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-03" 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="T." surname="Han" fullname="Tingting Han">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>Xuanwumen West Street</street>
          <city>Beijing</city>
          <country>CN</country>
        </postal>
        <email>hantingting@chinamobile.com</email>
      </address>
    </author>

    <date year="2025" month="September" day="26"/>

    <area>RTG</area>
    <workgroup>pce</workgroup>
    <keyword>pcep</keyword> <keyword>quic</keyword>

    <abstract>


<?line 91?>

<t>This document specifies the use of QUIC streams to implement the PCEP protocol for efficient and secure data transmission.</t>



    </abstract>



  </front>

  <middle>


<?line 95?>

<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) 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.</t>

<t>Implementing PCEP over QUIC offers several key benefits:</t>

<t><list style="symbols">
  <t>Faster Connection Establishment: QUIC's quick handshake reduces connection setup times.</t>
  <t>No Head-of-Line Blocking: Multiple PCEP sessions can run concurrently over a single connection.</t>
  <t>Improved Packet Loss Recovery: QUIC's efficient mechanisms ensure reliable data transmission.</t>
  <t>Enhanced Security: Built-in encryption ensures the confidentiality and integrity of PCEP messages.</t>
  <t>High Resiliency: Support for multiple sessions within a single connection enhances system reliability.</t>
</list></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>

<?line -18?>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>PCEPoQ: PCEP using QUIC.</t>

<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. PCC over QUIC acts as the QUIC client, and PCE over QUIC serves as the QUIC server.</t>

</section>
<section anchor="establish-pcepquic-control-channel"><name>Establish PCEP/QUIC Control Channel</name>

<t>After PCEPoQ session established, the PCEPoQ speaker establishes a bidirectional stream for the "PCEPoQ control channel." The control channel is used to establish a PCEPoQ relationship between the PCC and the PCE 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 PCEErr 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>For different PCEPoQ sessions, the same QUIC connection is used. 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, the PCC and PCE over QUIC 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 align="center" anchor="f1" title="PCEPoQ Capability TLV"><artwork type="ascii-art"><![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 the capability negotiation fails, the PCEPoQ session establishment fails. After a failure, 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 should be reset and a new session should 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, 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 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 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 over QUIC may decide to redirect its path computation requests to another PCE over QUIC should an alternate PCE be available.  Similarly, a PCC 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, and the following sections on the state machine are based on this assumption and will not repeat 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 Data 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 Data 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>The following table <xref target="t1"/> lists the frame type to be used when BGP messages are sent in different channels.</t>

<texttable align="center" anchor="t1" title="PCEPoQ Frame Type Mapping">
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='left'>Control Channel</ttcol>
      <ttcol align='left'>Function Channel</ttcol>
      <c>OPEN</c>
      <c>Control</c>
      <c>Data</c>
      <c>KEEPALIVE</c>
      <c>Control</c>
      <c>Data</c>
      <c>NOTIFICATION</c>
      <c>Control</c>
      <c>Data</c>
      <c>PCErr</c>
      <c>Control</c>
      <c>Data</c>
      <c>PCReq</c>
      <c>/</c>
      <c>Data</c>
      <c>PCRep</c>
      <c>/</c>
      <c>Data</c>
      <c>Close</c>
      <c>Control</c>
      <c>Data</c>
</texttable>

</section>
<section anchor="path-computation-request-and-reply"><name>Path Computation Request and Reply</name>

<t>Once a PCC 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 first selects one or more PCEs. Once the PCC 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, the PCE initiates a path computation. The result is then sent to the PCC 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: AllowAutomaticStart,
                               AllowAutomaticStop,
                               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: AutomaticStart</t>

<t>Event 4: ManualStart_with_PassiveQuicEstablishment</t>

<t>Event 5: AutomaticStart_with_PassiveQuicEstablishment</t>

<t>Event 6: AutomaticStart_with_DampPeerOscillations</t>

<t>Event 7: AutomaticStart_with_DampPeerOscillations_and_PassiveQUICEstablishment</t>

<t>Event 8: AutomaticStop</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 align="center" anchor="f2" title="PCEPoQ Finite State Machine"><artwork type="ascii-art"><![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 an 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 an 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 Idle state, PCEPoQ resources are allocated (memory, potential process, etc.) but no PCEPoQ messages are accepted from any PCEPoQ peer.</t>

<t>The following set of variables are initialized:</t>

<t><list style="symbols">
  <t>QUICRetry=0,</t>
  <t>LocalOK=0,</t>
  <t>RemoteOK=0,</t>
  <t>OpenRetry=0.</t>
</list></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 AutomaticStart event (Event 3), the local system:</t>

<t><list style="symbols">
  <t>Initiates a QUIC connection with the PCEP peer,</t>
  <t>starts the ConnectRetryTimer with the initial value,</t>
  <t>changes its state to Pending.</t>
</list></t>

<t>The ManualStop event (Event 2) and AutomaticStop (Event 8) event are ignored in the Idle state.</t>

<t>In response to a ManualStart_with_PassiveQuicEstablishment event (Event 4) or AutomaticStart_with_PassiveQuicEstablishment event (Event 5), the local system:</t>

<t><list style="symbols">
  <t>Initiates a QUIC connection with the PCEP peer,</t>
  <t>sets the ConnectRetryCounter to zero,</t>
  <t>starts the ConnectRetryTimer with the initial value,</t>
  <t>changes its state to OpenWait.</t>
</list></t>

<t>If the DampPeerOscillations attribute is set to TRUE, the following three additional events may occur within the Idle state:</t>

<t><list style="symbols">
  <t>AutomaticStart_with_DampPeerOscillations (Event 6),</t>
  <t>AutomaticStart_with_DampPeerOscillations_and_PassiveQuicEstablishment (Event 7),</t>
  <t>IdleHoldTimer_Expires (Event 13).</t>
</list></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><list style="symbols">
  <t>drops the QUIC connection,</t>
  <t>releases all PCEP resources,</t>
  <t>sets ConnectRetryCounter to zero,</t>
  <t>stops the ConnectRetryTimer and sets ConnectRetryTimer to zero, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to the ConnectRetryTimer_Expires event (Event 9), the local system:</t>

<t><list style="symbols">
  <t>drops the QUIC connection,</t>
  <t>restarts the ConnectRetryTimer,</t>
  <t>stops the DelayOpenTimer and resets the timer to zero,</t>
  <t>initiates a QUIC connection to the other PCEP peer,</t>
  <t>continues to listen for a connection that may be initiated by the remote PCEP peer, and</t>
  <t>stays in the Pending state.</t>
</list></t>

<t>If the DelayOpenTimer_Expires event (Event 12) occurs in the Connect state, the local system:</t>

<t><list style="symbols">
  <t>sends an OPEN message to its peer,</t>
  <t>sets the HoldTimer to a large value, and</t>
  <t>changes its state to OpenWait.</t>
</list></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><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>sets the DelayOpenTimer to the initial value, and</t>
  <t>stays in the Pending state.</t>
</list></t>

<t>If the DelayOpen attribute is set to FALSE, the local system:</t>

<t><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>completes PCEP initialization</t>
  <t>sends an OPEN message to its peer,</t>
  <t>sets the HoldTimer to a large value, and</t>
  <t>changes its state to OpenWait.</t>
</list></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><list style="symbols">
  <t>restarts the ConnectRetryTimer with the initial value,</t>
  <t>stops the DelayOpenTimer and resets its value to zero,</t>
  <t>continues to listen for a connection that may be initiated by the remote PCEP peer, and</t>
  <t>Remain its state Pending.</t>
</list></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><list style="symbols">
  <t>stops the ConnectRetryTimer to zero,</t>
  <t>drops the QUIC connection,</t>
  <t>releases all PCEP resources, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If an OPEN message is received while the DelayOpenTimer is running (Event 20), the local system:</t>

<t><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>completes the PCEP initialization,</t>
  <t>stops and clears the DelayOpenTimer (sets the value to zero),</t>
  <t>sends an OPEN message,</t>
  <t>sends a KEEPALIVE message,</t>
  <t>and changes its state to KeepWait.</t>
</list></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 will be "external".</t>

<t>If PCEP message header checking (Event 21) or OPEN message checking detects an error (Event 22), the local system:</t>

<t><list style="symbols">
  <t>(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</t>
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>stops and resets the DelayOpenTimer (sets to zero),</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><list style="symbols">
  <t>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>performs peer oscillation damping if the DampPeerOscillations attribute is set to True, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to any other events (Events 8, 10-11, 13, 19, 23,
25-28), the local system:</t>

<t><list style="symbols">
  <t>if the ConnectRetryTimer is running, stops and resets the ConnectRetryTimer (sets to zero),</t>
  <t>if the DelayOpenTimer is running, stops and resets the DelayOpenTimer (sets to zero),</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>performs peer oscillation damping if the DampPeerOscillations attribute is set to True, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>If the DelayOpenTimer is running and the SendNOTIFICATIONwithoutOPEN session attribute is set, the local system sends a PCErr with a Cease,</t>
  <t>releases all PCEP resources including stopping the DelayOpenTimer</t>
  <t>drops the QUIC connection,</t>
  <t>sets ConnectRetryCounter to zero,</t>
  <t>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to a ConnectRetryTimer_Expires event (Event 9), the local system:</t>

<t><list style="symbols">
  <t>restarts the ConnectRetryTimer (with initial value),</t>
  <t>initiates a QUIC connection to the other PCEP peer,</t>
  <t>continues to listen for a TCP connection that may be initiated by a remote PCEP peer, and</t>
  <t>changes its state to OpenWait.</t>
</list></t>

<t>If the local system receives a DelayOpenTimer_Expires event (Event 12), the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>stops and clears the DelayOpenTimer (set to zero),</t>
  <t>completes the PCEP initialization,</t>
  <t>sends the OPEN message to its remote peer,</t>
  <t>sets its hold timer to a large value, and</t>
  <t>changes its state to OpenWait.</t>
</list></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 TCP 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><list style="symbols">
  <t>stops the ConnectRetryTimer and sets the ConnectRetryTimer to zero,</t>
  <t>sets the DelayOpenTimer to the initial value (DelayOpenTime), and</t>
  <t>stays in the Pending state.</t>
</list></t>

<t>If the DelayOpen attribute is set to FALSE, the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>completes the PCEP initialization,</t>
  <t>sends the OPEN message to its peer,</t>
  <t>sets its HoldTimer to a large value, and</t>
  <t>changes its state to OpenWait.</t>
</list></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><list style="symbols">
  <t>restarts the ConnectRetryTimer (with the initial value),</t>
  <t>stops and clears the DelayOpenTimer (sets the value to zero),</t>
  <t>releases all PCEP resource,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>optionally performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If an OPEN message is received and the DelayOpenTimer is running (Event 20), the local system:</t>

<t><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>stops and clears the DelayOpenTimer (sets to zero),</t>
  <t>completes the PCEP initialization,</t>
  <t>sends an OPEN message,</t>
  <t>sends a KEEPALIVE message,</t>
  <t>if the HoldTimer value is non-zero,</t>
  <t>starts the KeepaliveTimer to initial value,</t>
  <t>resets the HoldTimer to the negotiated value, else if the HoldTimer is zero</t>
  <t>resets the KeepaliveTimer (set to zero),</t>
  <t>resets the HoldTimer to zero, and</t>
  <t>changes its state to KeepWait.</t>
</list></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 will be external.</t>

<t>If PCEP message header checking (Event 21) or OPEN message checking detects an error (Event 22), the local system:</t>

<t><list style="symbols">
  <t>(optionally) sends a PCErr message with the appropriate error code if the SendNOTIFICATIONwithoutOPEN attribute is set to TRUE,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>stops the ConnectRetryTimer (if running) and sets the ConnectRetryTimer to zero,</t>
  <t>stops and resets the DelayOpenTimer (sets to zero),</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the DelayOpenTimer is not running, the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to any other event (Events 8, 10-11, 13, 19, 23, 25-28), the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by one,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends the Close with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>sets the ConnectRetryCounter to zero, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If an AutomaticStop event (Event 8) is issued in the OpenWait state, the local system:</t>

<t><list style="symbols">
  <t>sends the Close with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all the PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the HoldTimer_Expires (Event 10), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr message with the error code Hold Timer Expired,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>closes the PCEP connection,</t>
  <t>restarts the ConnectRetryTimer,</t>
  <t>continues to listen for a connection that may be initiated by the remote PCEP peer, and</t>
  <t>changes its state to Pending.</t>
</list></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><list style="symbols">
  <t>resets the DelayOpenTimer to zero,</t>
  <t>sets the PCEP ConnectRetryTimer to zero,</t>
  <t>sends a KEEPALIVE message, and</t>
  <t>sets a KeepaliveTimer (via the text below)</t>
  <t>sets the HoldTimer according to the negotiated value,</t>
  <t>changes its state to KeepWait.</t>
</list></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><list style="symbols">
  <t>sends a PCErr message with the appropriate error code,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends a PCErr with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If a PCErr message is received with a version error (Event 24), the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to any other event (Events 9, 11-13, 20, 25-28), the local system:</t>

<t><list style="symbols">
  <t>sends the PCErr with the Error Code Finite State Machine Error,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends the PCErr message with a Cease,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>sets the ConnectRetryCounter to zero,</t>
  <t>sets the ConnectRetryTimer to zero, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to the AutomaticStop event initiated by the system (Event 8), the local system:</t>

<t><list style="symbols">
  <t>sends the PCErr message with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the HoldTimer_Expires event (Event 10) occurs before a KEEPALIVE message is received, the local system:</t>

<t><list style="symbols">
  <t>sends the PCErr message with the Error Code Hold Timer Expired,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the local system receives a KeepaliveTimer_Expires event (Event 11), the local system:</t>

<t><list style="symbols">
  <t>sends a KEEPALIVE message,</t>
  <t>restarts the KeepaliveTimer, and</t>
  <t>remains in the KeepWait state.</t>
</list></t>

<t>In the event of a QUICConnection_Valid event (Event 14), or the success of a TCP 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><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the local system receives a PCErr message with a version error (NotifMsgVerErr (Event 24)), the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends a PCErr with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends a PCErr message with the appropriate error code,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends a PCErr with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the local system receives a KEEPALIVE message (KeepAliveMsg(Event 26)), the local system:</t>

<t><list style="symbols">
  <t>restarts the HoldTimer and</t>
  <t>changes its state to SessionUP.</t>
</list></t>

<t>In response to any other event (Events 9, 12-13, 20, 27-28), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr with a code of Finite State Machine Error,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></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><list style="symbols">
  <t>sends the Close message with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>deletes all routes associated with this connection,</t>
  <t>releases PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>sets the ConnectRetryCounter to zero, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to an AutomaticStop event (Event 8), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero</t>
  <t>deletes all routes associated with this connection,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>One reason for an AutomaticStop event is: A PCEP receives an PCNtf messages with a number of prefixes for a given peer such that the total prefixes received exceeds the maximum number of prefixes configured.  The local system automatically disconnects the peer.</t>

<t>If the HoldTimer_Expires event occurs (Event 10), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr message with the Error Code Hold Timer Expired,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the KeepaliveTimer_Expires event occurs (Event 11), the local system:</t>

<t><list style="symbols">
  <t>sends a KEEPALIVE message, and</t>
  <t>restarts its KeepaliveTimer, unless the negotiated HoldTime value is zero.</t>
</list></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><list style="symbols">
  <t>sends a PCErr with a Cease,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>deletes all routes associated with this connection,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the local system receives a PCErr message (Event 24 or Event 25) or a QUICConnectionFails (Event 18) from the underlying TCP, the local system:</t>

<t><list style="symbols">
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>deletes all routes associated with this connection,</t>
  <t>releases all the PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>If the local system receives a KEEPALIVE message (Event 26), the local system:</t>

<t><list style="symbols">
  <t>restarts its HoldTimer, if the negotiated HoldTime value is non-zero, and</t>
  <t>remains in the SessionUP state.</t>
</list></t>

<t>If the local system receives an PCNtf message (Event 27), the local system:</t>

<t><list style="symbols">
  <t>processes the message,</t>
  <t>restarts its HoldTimer, if the negotiated HoldTime value is non-zero, and</t>
  <t>remains in the SessionUP state.</t>
</list></t>

<t>If the local system receives an PCNtf message, and the PCNtf message error handling procedure detects an error (Event 28), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr message with an error,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>deletes all routes associated with this connection,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

<t>In response to any other event (Events 9, 12-13, 20-22), the local system:</t>

<t><list style="symbols">
  <t>sends a PCErr message with the Error Code Finite State Machine Error,</t>
  <t>deletes all routes associated with this connection,</t>
  <t>sets the ConnectRetryTimer to zero,</t>
  <t>releases all PCEP resources,</t>
  <t>drops the QUIC connection,</t>
  <t>increments the ConnectRetryCounter by 1,</t>
  <t>(optionally) performs peer oscillation damping if the DampPeerOscillations attribute is set to TRUE, and</t>
  <t>changes its state to Idle.</t>
</list></t>

</section>
</section>
</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 conduct 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 the QUIC protocol are described in the corresponding section in <xref target="RFC9000"></xref>.</t>

<t>Security considerations for the TLS handshake used to secure QUIC are described in <xref target="RFC9001"></xref>.</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>

<texttable align="center" anchor="t2" title="UDP Port for PCEPoQ">
      <ttcol align='left'>Service Name</ttcol>
      <ttcol align='left'>PCEPoQ</ttcol>
      <c>Port Number</c>
      <c>TBD1</c>
      <c>Transport Protocol</c>
      <c>udp</c>
      <c>Description</c>
      <c>PCEP over QUIC</c>
</texttable>

</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>

<texttable align="center" anchor="t3" title="PCEPoQ Capability Registration">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>TBD2</ttcol>
      <c>Description</c>
      <c>PCEPoQ Capability</c>
      <c>Reference</c>
      <c>This Document</c>
      <c>Change Controller</c>
      <c>IETF</c>
</texttable>

<figure><artwork><![CDATA[
Capability:
    D: Bit 0, support data channel, this document
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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 title='Informative References' anchor="sec-informative-references">



<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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
93h+luQsKg1gBdXlEByGIAw3zsFrBTzlYuWkO5prcdF1qe6cuJ0A1V9g6fiV
R89UVtzMADoMzoJOAsUiM8Ii4C5ppl/HNgW+U+A+9WLolR+546eCzQ5B+XAh
Pypmzjn8/fJ4+HpnZ+en3vpxRqdXZEXlU++GXl1T3rKPthQBURtbdd//iWZ4
cnB+UJvds2f05OUFpnCNOQ0ZFgU0PVamEACdSNRPyaEYBOyZVzK3R28O+5aP
s3Uls9vQl+KcTlEBqkdILVT3QuOIBjvnOOolPb2ZLbaQZPmdJnwp9V44HTk/
95pyrAdcnT6r1RFG+wNUb4DKVJ8HqahUtx+HbgLGYuv7Fe8+F7vmeecGpOOz
zrAcCiPmhUnjop0oCaNCTKCZSRmP7A18AVaGuioSJXNm96UJKXT7Scb6GiVe
QaSzg1Jrdk+9BczNoOlc+RgUNzs4vThvl2Unh/mWHnOhLlTdSn2ZJv/cIk2F
xoqWk3kFc2QSaj4aVAqxrDp/pEyQnwMzBFa6SqVv6gyEgxxCr6KdoZd61yB4
gN9Gpz+U9O7lNxVaRzxCFd7iJUIn0PDTaJFK0HcU9cNzoMhvz/f3d34yuK4Q
hzWqQ+5I8D+Qo1aj3N0KvTVS433DtLDmpSTV40u7T0TJoaYX7nHI+6ZK/0QA
7r04ORodV8deQdp71ZfLLVBsktaPl5fFgxZ2fjgQb0Cn7ICgn6fEmbaI7rh5
Kvz+8v8DC5Maor65AAA=

-->

</rfc>

