<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2212 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2212.xml">
<!ENTITY RFC3393 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3393.xml">
<!ENTITY RFC8174 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8200 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY RFC8655 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8655.xml">
<!ENTITY RFC8938 SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8938.xml">
<!ENTITY I-D.ietf-detnet-large-scale-requirements SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.ietf-detnet-large-scale-requirements.xml">
<!ENTITY I-D.ietf-detnet-bounded-latency SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.ietf-detnet-bounded-latency.xml">
<!ENTITY I-D.yizhou-detnet-ipv6-options-for-cqf-variant SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.yizhou-detnet-ipv6-options-for-cqf-variant.xml">
<!ENTITY I-D.ietf-detnet-dataplane-taxonomy SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.ietf-detnet-dataplane-taxonomy.xml">
<!ENTITY I-D.ietf-mpls-mna-detnet SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.ietf-mpls-mna-detnet.xml">  
<!ENTITY I-D.ietf-mpls-mna-ps-hdr SYSTEM 
  "http://xml.resource.org/public/rfc/bibxml-ids/reference.I-D.ietf-mpls-mna-ps-hdr.xml">  
]>

<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> <!-- used by XSLT processors -->

<!-- OPTIONS, known as processing instructions (PIs) go here. -->
<!-- For a complete list and description of PIs,
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable PIs that most I-Ds might want to use. -->
<?rfc strict="yes" ?> <!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC): -->
<?rfc toc="yes"?> <!-- generate a ToC -->
<?rfc tocdepth="3"?> <!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references: -->
<?rfc symrefs="yes"?> <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?> <!-- sort the reference entries alphabetically -->
<!-- control vertical white space: 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?> <!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?> <!-- keep one blank line between list items -->
<!-- end of popular PIs -->

<rfc category="std" 
     docName="draft-ietf-detnet-stateless-fair-queuing-02" 
     ipr="trust200902">

<front>
 <title abbrev="C-SCORE">
       Latency Guarantee with Stateless Fair Queuing
 </title>

 <author fullname="Jinoo Joung" initials="J." surname="Joung">
  <organization>Sangmyung University</organization>
  <address>
   <!-- <postal> </postal> --> 
   <!-- <phone></phone>  -->
   <!-- <facsimile/> -->
   <email>jjoung@smu.ac.kr</email>
   <!-- <uri/> -->
  </address>
 </author>

 <author fullname="Jeong-dong Ryoo" initials="J" surname="Ryoo">
  <organization>ETRI</organization>
  <address>
    <email>ryoo@etri.re.kr</email>
  </address>
 </author>

 <author fullname="Taesik Cheung" initials="T" surname="Cheung">
   <organization>ETRI</organization>
   <address>
    <email>cts@etri.re.kr</email>
    </address>
 </author>

<author fullname="Yizhou Li" initials="Y" surname="Li">
   <organization>Huawei</organization>
   <address>
    <email>liyizhou@huawei.com</email>
    </address>
 </author>

 <author fullname="Peng Liu" initials="P" surname="Liu">
   <organization>China Mobile</organization>
   <address>
    <email>liupengyjy@chinamobile.com</email>
    </address>
 </author>



 <date />
<!--
 <date day="22" month="May" year="2019" />
-->

 <area>Routing Area</area>
 <workgroup>DetNet Working Group</workgroup>

 <keyword>DetNet</keyword> 
 <keyword>Asynchronous DetNet</keyword> 
 <keyword>Fair Queuing</keyword> 

 <abstract>
   <t>  
     This document specifies the implementation of the stateless fair queuing framework defined in Recommendations ITU-T Y.3129 <xref target="Y.3129"/> and Y.3148 <xref target="Y.3148"/>. 
	 The framework provides end-to-end (E2E) latency bounds to flows without requiring core nodes to maintain per-flow state. 
	 For each packet, the entrance node of a flow computes the ideal service completion time under a fluid model, referred to as the Finish Time (FT), 
	 and encodes it in the packet header. Each subsequent core node updates the FT by adding a delay factor that is determined by the flow and the nodes. 
	 Schedulers serve queued packets in ascending order of FT. This mechanism provides strong isolation among flows. 
	 The E2E latency bound of a flow depends on the flow's own parameters, such as its maximum burst size and service rate, and on link parameters, 
	 such as the link capacity and the maximum packet length among the flows sharing the link. 
	 This document specifies the required metadata and its encoding formats, the admission control procedure, 
	 and an approximation of stateless fair queuing using a strict priority (SP) scheduler.  
   </t>
   
 </abstract>
</front>

<middle>
 <section title="Introduction">
   <t>
   Recommendation ITU-T Y.3129 <xref target="Y.3129"/> specifies the
   requirements and framework for Deterministic Networking (DetNet)
   using a set of work-conserving packet schedulers that guarantee
   end-to-end (E2E) latency bounds to flows.  Recommendation ITU-T
   Y.3148 <xref target="Y.3148"/> further specifies the functional
   architecture, functional entities, operational procedures, and
   packet metadata required to fulfill the requirements and framework
   specified in Y.3129.
   </t>
   <t>
   In this framework, core nodes do not maintain per-flow state.  The
   edge node through which a flow enters the network, referred to as
   the entrance node, computes for each packet the ideal service
   completion time under a fluid model, referred to as the Finish Time
   (FT), and records it in the packet header.  Each subsequent core
   node updates the FT, without per-flow state, by adding a delay
   factor that is a function of the parameters of the flow and of the
   upstream nodes.  The scheduler serves queued packets in ascending
   order of FT.  This mechanism is referred to as stateless fair
   queuing, and the resulting framework is referred to as
   Work-conserving Stateless Core Fair Queuing (C-SCORE)
   <xref target="C-SCORE"/>.
   </t>
   <t>
   C-SCORE provides strong isolation among flows.  For a certain choice
   of the delay factor, a closed-form expression for the E2E latency
   bound of a flow can be derived.  This bound is identical to that of
   a network in which every node employs a stateful fair queuing
   scheduler.  It depends on the flow's intrinsic parameters, such as
   its maximum burst size and service rate, and on link parameters,
   such as the link capacity and the maximum packet length among the
   other flows sharing each output link with the flow.
   </t>
   <t>
   The key component of C-SCORE is the packet state carried as
   metadata.  Although C-SCORE does not maintain per-flow state at core
   nodes, it operates as a fair queuing scheduler, a class of
   schedulers known to provide the best flow isolation.  The metadata
   carried in the packet header is simple and can be updated either
   while the packet waits in the queue or before it enters the queue.
   </t>
   <t>
   To guarantee its performance, C-SCORE, like any other DetNet
   solution, requires that the total service rate of the flows on each
   link remain below the capacity of that link.  To ensure this,
   admission control is typically performed for each flow before data
   transmission.  Admission control consists of the following steps:
   </t>
   <ol spacing="normal" type="1">
   <li>signaling the service rate of the incoming flow;</li>
   <li>checking the current total service rate of each link along the
      path; and</li>
   <li>deciding whether to accept the flow.</li>
   </ol>
   <t>
   <xref target="Y.qos-sre-rf"/> specifies a framework, based on Y.3129, for
   identifying the service rates of active flows for admission control
   without maintaining per-flow state.  This stateless service rate
   estimation improves the scalability of the admission control
   process.  The framework relies on the metadata specified in Y.3129.
   </t>
   <t>
   [Editor's Note: The current versions of Y.3129 and Y.3148 define
   three metadata fields.  They are expected to be revised to define
   four.]
   </t>
   <t>
   This document specifies the implementation details for realizing
   C-SCORE, including:
   </t>
   <ul spacing="normal">
   <li>the metadata and its encoding formats;</li>
   <li>the admission control procedures; and</li>
   <li>an approximation of stateless fair queuing using a strict
      priority (SP) scheduler.</li>
   </ul>
 </section>

 <section title="Terminology">
  <section title="Terms Used in This Document">
   <t>
   </t>
  </section>
  <section title="Abbreviations">
   <t>
    <list style="empty">
	<t>
	BE:	Best Effort
	</t>
	<t>
	C-SCORE:	Work Conserving Stateless Core Fair Queuing 
	</t>
   <t>
   DetNet:  Deterministic Networking
   </t>
      <t>
E2E:  End to End
   </t>
   <t>
FQ:  Fair Queuing
   </t>
   <t>
FT:  Finish Time
   </t>
   <t>
   GPS:	Generalized Processor Sharing 
   </t>
	<t>
	HoQ:	Head of queue
	</t>
   <t>
	FIFO:  First-In First-Out
	</t>
	<t>
	MNA:	MPLS Network Actions
	</t>
	<t>
	NAS: 	Network Action Sub-Stack
   </t>
   <t>
   PIFO:	Push-In First-Out
   </t>
   <t>
   PRPS:	Packetized Rate Proportional Servers
   </t>
   <t>
   PSD:		Post-Stack Data
   </t>
   <t>
	RSpec:  Requested Specifications 
   </t>
   <t>
   TLV:		Type-Length-Value
   </t>
   <t>
	TSpec:  Traffic Specifications
   </t>
   <t>
   VC:		Virtual Clock
   </t>
   </list>
   </t>
  </section>
 </section>

 <section title="Conventions Used in This Document">
   <t>
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
   NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
   "MAY", and "OPTIONAL" 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 anchor="sec-assumptions">
  <name>Assumptions</name>

  <t>
    This document assumes that there are only two classes of traffic.
    High-priority traffic, equivalently DetNet traffic, requires
    guaranteed latency upper bounds.  All other traffic is considered
    low-priority, or Best Effort (BE), traffic.  This document
    addresses only high-priority traffic.  However, a BE packet in
    transmission is not preempted by high-priority traffic.
  </t>

  <t>
    All flows of DetNet traffic conform to their traffic specification
    (TSpec) parameters.  That is, for flow i with maximum burst size
    B_i and arrival rate a_i, the cumulative arrival from flow i during
    any time interval [t_1, t_2], where t_1 &lt; t_2, does not exceed
    B_i + (t_2 - t_1)a_i.
  </t>

  <t>
    The service rate actually allocated to flow i, denoted r_i, is
    greater than or equal to its arrival rate a_i.  As shown in
    Equation (4) in <xref target="sec-framework-FQ"/>, the E2E latency
    bound of a flow can be adjusted by adjusting its service rate.
    The symbol r is used interchangeably with r_i to denote the
    service rate of the flow under observation.  Similarly, B, a, and
    L are used to denote the parameters of the flow under
    observation.
  </t>

  <t>
    The total service rate allocated to all flows at a node does not
    exceed the capacity of the node's output link.  Consequently,
    resource reservation and admission control are required.
  </t>

  <t>
    The following terms are used in this document:
  </t>

  <ul spacing="normal">
    <li><strong>Node:</strong> An output port module of a switching
        device.  The term "server" is used equivalently.</li>
    <li><strong>Entrance node:</strong> For a given flow, the node at
        the edge of the network through which the flow enters the
        network.</li>
    <li><strong>Core node:</strong> For a given flow, a node in the
        network that the flow traverses and that is not the entrance
        node of that flow.  A single node can be the entrance node for
        one flow and a core node for another flow.</li>
    <li><strong>Arrival and service of a packet:</strong> A packet is
        considered to have arrived at a node when its last bit is
        received by the node, and to have been serviced when its last
        bit is transmitted from the node.</li>
  </ul>
</section>
 
   <section anchor="sec-framework">
  <name>Framework</name>
<!--
   <section anchor="sec-framework-FQ" title="Core Stateless Fair Queuing">
  <t>
    Fair queuing (FQ) schedulers assign each packet a Finish Time (FT),
    which determines its service order: the packet with the smallest
    FT in the buffer is served first.  The key idea of FQ is to
    compute the ideal service completion time of each packet in a
    hypothetical fluid service model and to use it as the service
    order in the actual packet-based scheduler.
  </t>

  <t>
    Although FQ schedulers provide excellent flow isolation, they
    require per-flow state, namely F(p-1), the FT of the preceding
    packet of the same flow.  Upon the arrival of each packet, the
    scheduler must identify the flow and retrieve the FT of the
    preceding packet of that flow.  The scheduler must also update the
    flow state to F(p) upon the departure of the packet.
  </t>

  <t>
    <xref target="Y.3129"/> and <xref target="Y.3148"/> specify an FQ
    scheduler that does not require per-flow state at core nodes.  At
    the entrance node, the FT of packet p is computed as shown in
    Equation (1), where the subscript 0 denotes the
    entrance node of the flow under observation.
  </t>

   <figure>
     <artwork align="center"><![CDATA[F_0(p) = max{F_0(p-1), A_0(p)}+L(p)/r.    (1)              
      ]]></artwork>
   </figure>

  <t>
    where:
  </t>

  <dl newline="false" spacing="compact">
    <dt>A_0(p):</dt>
    <dd>the arrival time of packet p at the entrance node;</dd>
    <dt>L(p):</dt>
    <dd>the length of packet p; and</dd>
    <dt>r:</dt>
    <dd>the service rate allocated to the flow.</dd>
  </dl>

  <t>
    At core node h, the FT of a packet is increased by a delay factor
    d_(h-1)(p), which depends on the upstream node h-1 and on the
    packet, as shown in Equation (2).
  </t>

   <figure>
     <artwork align="center"><![CDATA[F_h(p) = F_(h-1)(p) + d_(h-1)(p).    (2)                        
      ]]></artwork>
   </figure>

  <t>
    The framework achieves a bounded E2E latency by defining the delay
    factor as shown in Equation (3).
  </t>

   <figure>
     <artwork align="center"><![CDATA[ d_h(p) = L_h/R_h + L/r + delta_h(p),        (3)                         
      ]]></artwork>
   </figure>

  <t>
    where:
  </t>

  <dl newline="false" spacing="compact">
    <dt>L_h:</dt>
    <dd>the maximum packet length observed at node h over all
        flows;</dd>
    <dt>R_h:</dt>
    <dd>the link capacity of node h;</dd>
    <dt>L:</dt>
    <dd>the maximum packet length of the flow;</dd>
    <dt>r:</dt>
    <dd>the service rate allocated to the flow; and</dd>
    <dt>delta_h(p):</dt>
    <dd>the time difference function of packet p between node h and
        node h+1, defined as the difference between the service
        completion time of p at node h and the arrival time of p at
        node h+1.</dd>
  </dl>

  <t>
    The time difference function delta_h(p) includes the clock
    discrepancy and the propagation delay between node h and node
    h+1.  Since this function is relatively stable across packets, it
    can be approximated by a constant, delta_h.
  </t>

  <t>
    When d_h(p) is defined as in Equation (3), the
    latency bound in Equation (4) holds
    <xref target="KAUR"/> <xref target="C-SCORE"/>.
  </t>

   <figure>
   <artwork align="center"><![CDATA[D_h(p) <= (B-L)/r + sum_(j=0)^h{L_j/R_j + L/r} + sum_(j=0)^(h-1){delta_j(p)},(4)]]></artwork>
   </figure>

  <t>
    where D_h(p) is the latency experienced by packet p from its
    arrival at node 0 to its departure from node h, and B is the
    maximum burst size of the flow to which p belongs.  The last term
    of Equation (4) accounts for the clock
    discrepancies and the propagation delays between the nodes.  When
    the clock discrepancies are negligible, for example, with an
    absolute time reference, this term effectively represents the E2E
    propagation delay.
  </t>

  <t>
    The latency bound in Equation (4) is the same as
    that of a network in which every node employs a stateful FQ
    scheduler.  All parameters in the bound are intrinsic to the flow,
    except L_h/R_h and the propagation delays.
  </t>
  </section> -->
  
  <section anchor="sec-framework-FQ">
  <name>Core Stateless Fair Queuing</name>

  <t>
    Fair queuing (FQ) schedulers assign each packet a Finish Time (FT),
    which determines its service order: the packet with the smallest
    FT in the buffer is served first.  The key idea of FQ is to
    compute the ideal service completion time of each packet in a
    hypothetical fluid service model and to use it as the service
    order in the actual packet-based scheduler.
  </t>

  <t>
    Although FQ schedulers provide excellent flow isolation, they
    require per-flow state, namely F(p-1), the FT of the preceding
    packet of the same flow.  Upon the arrival of each packet, the
    scheduler must identify the flow and retrieve the FT of the
    preceding packet of that flow.  The scheduler must also update the
    flow state to F(p) upon the departure of the packet.
  </t>

  <t>
    <xref target="Y.3129"/> and <xref target="Y.3148"/> specify an FQ
    scheduler that does not require per-flow state at core nodes.  At
    the entrance node, the FT of packet p is computed as shown in
    Equation (1), where the subscript 0 denotes the entrance node of
    the flow under observation.
  </t>

  <artwork align="center"><![CDATA[
  F_0(p) = max{F_0(p-1), A_0(p)} + L(p)/r                    (1)
]]></artwork>

  <t>
    where:
  </t>

  <ul spacing="compact">
    <li><strong>A_0(p):</strong> The arrival time of packet p at the
        entrance node.</li>
    <li><strong>L(p):</strong> The length of packet p.</li>
    <li><strong>r:</strong> The service rate allocated to the
        flow.</li>
  </ul>

  <t>
    The FT of packet p for core node h is obtained by adding a delay
    factor d_(h-1)(p), which depends on the upstream node h-1 and on
    the packet, to the FT for node h-1, as shown in Equation (2).
  </t>

  <artwork align="center"><![CDATA[
  F_h(p) = F_(h-1)(p) + d_(h-1)(p)                           (2)
]]></artwork>

  <t>
    The framework achieves a bounded E2E latency by defining the delay
    factor as shown in Equation (3).
  </t>

  <artwork align="center"><![CDATA[
  d_h(p) = L_h/R_h + L/r + delta_h(p)                        (3)
]]></artwork>

  <t>
    where:
  </t>

  <ul spacing="compact">
    <li><strong>L_h:</strong> The maximum packet length observed at
        node h over all flows.</li>
    <li><strong>R_h:</strong> The link capacity of node h.</li>
    <li><strong>L:</strong> The maximum packet length of the
        flow.</li>
    <li><strong>r:</strong> The service rate allocated to the
        flow.</li>
    <li><strong>delta_h(p):</strong> The time difference of packet p
        between node h and node h+1, defined as the arrival time of p
        at node h+1 minus the service completion time of p at node h
        (see <xref target="sec-td"/>).</li>
  </ul>

  <t>
    The time difference delta_h(p) includes the clock discrepancy and
    the propagation delay between node h and node h+1.  Since it is
    relatively stable across packets, it can be approximated by a
    constant, delta_h.
  </t>

  <t>
    When d_h(p) is defined as in Equation (3), the latency bound in
    Equation (4) holds <xref target="KAUR"/> <xref target="C-SCORE"/>.
  </t>

  <artwork align="center"><![CDATA[
                         h                        h-1
  D_h(p) <= (B-L)/r + SUM {L_j/R_j + L/r}  +  SUM delta_j(p)  (4)
                        j=0                       j=0
]]></artwork>

  <t>
    where D_h(p) is the latency experienced by packet p from its
    arrival at node 0 to its departure from node h, and B is the
    maximum burst size of the flow to which p belongs.  The last term
    of Equation (4) accounts for the clock discrepancies and the
    propagation delays between the nodes.  When the clock
    discrepancies are negligible, for example, with an absolute time
    reference, this term effectively represents the E2E propagation
    delay.
  </t>

  <t>
    The latency bound in Equation (4) is the same as that of a network
    in which every node employs a stateful FQ scheduler.  All
    parameters in the bound are intrinsic to the flow, except
    L_h/R_h and the propagation delays.
  </t>
</section>

  <section anchor="sec-rate-estimation">
    <name>Stateless Service Rate Estimation</name>

    <t>
      The C-SCORE framework can also be used to estimate the total
      service rate of the flows on a link.  This is based on the
      following two observations:
    </t>

    <ol spacing="normal" type="1">
      <li>The FTs of consecutive packets of a flow partition the time
          axis into non-overlapping intervals.  Therefore, for any
          given time instant, exactly one packet of the flow has an
          interval that contains that instant.</li>
      <li>The difference between the FTs of consecutive packets of a
          flow remains the same across nodes, since, with delta_h
          approximated as a constant, the FTs of all packets of the
          flow are increased by the same amount at each node.</li>
    </ol>

    <t>
      If each packet carries both its FT and the difference from the
      FT of the preceding packet, the packet whose interval contains a
      given time instant can be identified from the packet metadata
      alone.  By choosing a reference time for estimation, exactly one
      such packet is identified per flow.  Since the service rate of
      the flow is also carried in the packet as metadata, the service
      rates of these packets can be summed to obtain the total service
      rate of the link.
    </t>

    <t>
      <xref target="Y.qos-sre-rf"/> specifies such a framework, based
      on <xref target="Y.3129"/>, for identifying the service rates of
      active flows for admission control without maintaining per-flow
      state.  This framework relies on the metadata specified in
      <xref target="Y.3129"/>, in particular the difference between
      the FTs of the preceding and current packets, denoted as
      DeltaF(p) in this document.
    </t>
  </section>
 </section>

  <section title="Operational Procedures">
 
 <section anchor="sec-metadata">
  <name>Metadata</name>

  <t>
    <xref target="Y.3129"/>, <xref target="Y.3148"/>, and
    <xref target="Y.qos-sre-rf"/> specify the following metadata to be
    carried in each packet of a flow:
  </t>

  <ul spacing="normal">
    <li><strong>L:</strong> The maximum packet length of the
        flow.</li>
    <li><strong>r:</strong> The service rate allocated to the
        flow.</li>
    <li><strong>F_h(p):</strong> The FT of packet p to be used at node
        h.</li>
    <li><strong>DeltaF(p):</strong> The difference between the FT of
        packet p and the FT of the preceding packet of the same flow,
        that is, F_0(p) - F_0(p-1).</li>
  </ul>

  <t>
    L, r, and DeltaF(p) are set by the entrance node and remain
    unchanged along the path.  F_h(p) is dynamic and is updated at
    every node in accordance with Equation (2).
  </t>

  <t>
    [Editor's Note: The current versions of Y.3129 and Y.3148 define
    three metadata fields: L, r, and F_h(p).  They are expected to be
    revised to also include DeltaF(p).]
  </t>

  <t>
    When packet p arrives at core node h, it carries F_h(p), L, r, and
    DeltaF(p).  F_h(p) has been calculated in advance by node h-1
    using d_(h-1)(p), as shown in Equation (2).  Node h uses F_h(p) to
    determine the service order of the packet.  Before transmitting
    the packet, node h calculates F_(h+1)(p) = F_h(p) + d_h(p) and
    replaces F_h(p) with F_(h+1)(p) in the packet.  As shown in
    Equation (3), d_h(p) is the sum of the flow-specific term L/r,
    which is obtained from the packet metadata, and the node-specific
    terms L_h/R_h and delta_h, which are maintained by node h.  This
    update can be performed either before the packet enters the queue
    or while the packet waits in the queue.
  </t>

  <t>
    The entrance node calculates F_0(p) using Equation (1) and uses it
    to determine the service order of the packet at the entrance node.
    It then calculates F_1(p) = F_0(p) + d_0(p) and records F_1(p),
    together with L, r, and DeltaF(p), in the packet.
  </t>

  <t>
    The detailed operations for creating and updating the metadata at
    the entrance node and core nodes are specified in
    <xref target="Y.3129"/> and <xref target="Y.3148"/>.  These
    references also describe considerations for reducing the
    complexity of the entrance node.
  </t>
</section>

  <section anchor="header">
  <name>Header Format</name>

  <section anchor="header-ipv6">
    <name>IPv6 Header Format</name>

    <t>
      The IPv6 Hop-by-Hop (HbH) Options header <xref target="RFC8200"/>
      should be used for carrying the metadata.  It is a specific type
      of Extension Header designed for information that must be
      examined and processed by all the transit nodes along a packet's
      delivery path.  This header is identified by a Next Header value
      of 0 in the IPv6 main header.  The HbH Options header consists
      of a sequence of variable-length options, which are encoded in a
      Type-Length-Value (TLV) format.
    </t>
    <!--
      Next Header (8 bits) identifies the type of header immediately
      following this one.
      Header Ext Len (8 bits) specifies the length of the HbH Options
      header in 8-octet units (excluding the first 8 octets).
      Options (Variable length) contains one or more TLV-encoded
      options, which includes
      Option Type (8 bits) defines what the option is.
      The highest-order bits of this type tell a router what to do if
      it doesn't recognize the option (e.g., skip it, discard the
      packet, or send an ICMP error).
      Opt Data Len (8 bits) specifies the length of the data field.
      Option Data (Variable) is the actual information being passed to
      the routers.
    -->
    <t>
      In this document, the metadata (L, r, F_h(p), and DeltaF(p)) are
      stored in the Option Data fields of four separate options within
      a single HbH Options header, as shown in
      <xref target="fig_IPv6"/>.  The Option Type and Opt Data Len
      fields specify the C-SCORE metadata identifier and the length of
      the metadata, respectively.  The Option Type values are to be
      determined.  Since F_h(p) is updated at every hop, the Option
      Type for F_h(p) should have the third-highest-order bit set to 1,
      indicating that the Option Data may change en route
      <xref target="RFC8200"/>.  A PadN option is added as necessary
      so that the length of the HbH Options header is a multiple of 8
      octets.  In the example in <xref target="fig_IPv6"/>, the HbH
      Options header is 32 octets long, including a 4-octet PadN
      option, and the Hdr Ext Len field is set to 3.
    </t>

    <figure anchor="fig_IPv6">
      <name>IPv6 HbH Options Header Example for Four C-SCORE Metadata</name>
      <artwork 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  | Hdr Ext Len=3 | Option Type 1 |Opt Data Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Option Data 1 (L)         | Option Type 2 |Opt Data Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Option Data 2 (r)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type 3 |Opt Data Len=6 |    Option Data 3 (FT)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Option Data 3 (FT Continued)                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type 4 |Opt Data Len=6 |  Option Data 4 (Diff. of FTs) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Option Data 4 (Diff. of FTs Continued)              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opt Type=PadN |Opt Data Len=2 |               0               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
    </figure>

    <t>
      The following is the operational procedure in a transit node.
      The hardware parser sees Next Header 0 in the main IPv6 header
      and directs the packet to the metadata management function.
      This functional entity scans for the Option Types corresponding
      to C-SCORE.  L (16 bits, TBD), r (32 bits, TBD), F_h(p) (48
      bits, TBD), and DeltaF(p) (48 bits, TBD) are extracted and
      processed, and the new FT is calculated.  Since the offset of
      the FT field is fixed relative to the start of the HbH Options
      header, the functional entity can update the field with a
      single-cycle write before forwarding the packet.  No checksum
      recalculation is required, since IPv6 has no header checksum
      and extension headers are not covered by upper-layer
      checksums.
    </t>

    <t>
      Note that L, the maximum packet length of the flow, does not need
      to be precise at the byte level.  Similarly, r, the service rate
      of the flow, can be of a coarse granularity or even several
      discrete predefined levels.
    </t>

    <t>
      [Editor's Note: The encoding of these metadata, especially their lengths and Option Type values, will be specified
      in a future version of this document.]
    </t>
  </section>

  <section anchor="header-mpls">
    <name>MPLS Label Format</name>

    <t>
      <xref target="I-D.ietf-mpls-mna-detnet"/> specifies formats and
      mechanisms for using MPLS Network Actions (MNA) to support DetNet
      services, including bounded latency, low loss, and in-order
      delivery.  It specifies three information elements of DetNet
      packets: Flow identifier (Flow-ID), Sequence information
      (SeqNum), and Latency information (LatencyInfo).  The C-SCORE
      metadata correspond to the Latency information.
    </t>

    <t>
      Two approaches for carrying information elements are specified:
      In-Stack and Post-Stack MNA.  With In-Stack MNA, the
      DetNet-specific information is embedded directly within the MPLS
      label stack, as part of a Network Action Sub-Stack (NAS), before
      the Bottom of Stack (BoS).  A Network Action Indicator (NAI)
      signals that the subsequent Label Stack Entries (LSEs) in the
      sub-stack carry ancillary data rather than forwarding labels.
      With Post-Stack MNA, the DetNet-specific information is carried
      after the label stack, between the BoS and the start of the user
      payload, and an indicator in the label stack signals its
      presence.  Post-Stack MNA is better suited for large or
      variable-sized data that would otherwise make the label stack
      excessively deep.
    </t>

    <t>
      This document follows the Post-Stack approach, but the In-Stack
      approach is not excluded.  The Post-Stack MNA solution
      <xref target="I-D.ietf-mpls-mna-ps-hdr"/> consists of two
      components:
    </t>

    <ol spacing="normal" type="1">
      <li>The Post-Stack MPLS Header (PSMH) Presence Bit (P bit)
          carried in the In-Stack NAS.  Bit 20 of LSE Format B in the
          NAS is defined as the P bit, which indicates the presence of
          the PSMH after the BoS.</li>
      <li>The PSMH, which consists of the Post-Stack MPLS Base Header
          and one or more Post-Stack Network Actions (PSNAs).  The
          Post-Stack MPLS Base Header contains the Post-Stack First
          Nibble (PFN), the PSMH-Len field, and the Post-Stack MPLS
          Header Type.  PSMH-Len specifies the length of the PSMH in
          4-octet units, excluding the 4-octet Post-Stack MPLS Base
          Header.</li>
    </ol>

    <t>
      The C-SCORE metadata, L, r, F_h(p), and DeltaF(p), are carried in
      four separate PSNAs with the Hop-by-Hop scope, so that they are
      processed at every hop.  The number of bits required for each
      metadata field is for further study.  The Post-Stack Network
      Action Length (PS-NAL) of each PSNA is determined by the length
      of the metadata.  For example, if FT is 48 bits long, the PSNA
      for FT has a PS-NAL of 1, as shown in <xref target="fig_MNA"/>.
    </t>

    <figure anchor="fig_MNA">
      <name>Post-Stack MNA Example with Four PSNAs for Four C-SCORE Metadata</name>
      <artwork 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          MNA Label                    | TC  |0|    TTL        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opcode=2=NoOp|    0                    |1|HbH|1| NASL=0|U|NAL=0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  0x0  |Reserve|  PSMH-Len=7   | Type = MNA Post-Stack Header  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MNA-PS-OP1 |R|R|  PS-NAL=0   |     POST-STACK DATA = L       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MNA-PS-OP2 |R|R|  PS-NAL=1   |     POST-STACK DATA = r       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  POST-STACK DATA = r (Cont.)  |           Padding             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MNA-PS-OP3 |R|R|  PS-NAL=1   |     POST-STACK DATA = FT      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              POST-STACK DATA = FT (Continued)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MNA-PS-OP4 |R|R|  PS-NAL=1   |POST-STACK DATA = Diff. of FTs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        POST-STACK DATA = Diff. of FTs (Continued)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                           Payload                             |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
    </figure>

    <t>
      In the example in <xref target="fig_MNA"/>, the PSMH is located
      immediately after the BoS, that is, at a start offset of 0.  The
      fields are set as follows:
    </t>

    <ul spacing="compact">
      <li><strong>P bit = 1:</strong> In the In-Stack NAS, indicates
          the presence of the PSMH.</li>
      <li><strong>PSMH-Len = 7:</strong> The four PSNAs occupy seven
          4-octet units, excluding the Post-Stack MPLS Base
          Header.</li>
      <li><strong>MNA-PS-OP1 (TBD):</strong> The Post-Stack MNA Opcode
          for L.  PS-NAL = 0, since the 16-bit L fits in the first 4
          octets of the PSNA.</li>
      <li><strong>MNA-PS-OP2 (TBD):</strong> The Post-Stack MNA Opcode
          for r.  PS-NAL = 1, since the 32-bit r requires one
          additional 4-octet unit, of which 16 bits are padding.</li>
      <li><strong>MNA-PS-OP3 (TBD):</strong> The Post-Stack MNA Opcode
          for F_h(p).  PS-NAL = 1 for a 48-bit FT.</li>
      <li><strong>MNA-PS-OP4 (TBD):</strong> The Post-Stack MNA Opcode
          for DeltaF(p).  PS-NAL = 1 for a 48-bit DeltaF(p).</li>
    </ul>

    <t>
      The padding rules for Post-Stack Data that does not fill a
      multiple of 4-octet units are described in the document that
      defines the corresponding network action
      <xref target="I-D.ietf-mpls-mna-ps-hdr"/>.  For the C-SCORE
      metadata, the padding rules will be specified in a future
      version of <xref target="I-D.ietf-mpls-mna-detnet"/> or of this
      document.
    </t>

    <t>
      Note that, because of its stateless nature, C-SCORE does not
      require a Flow-ID to be carried in the packet.
    </t>
  </section>
</section>

<section anchor="sec-admission">
  <name>Admission Control for Latency Guarantee</name>

  <t>
    As described in <xref target="sec-assumptions"/>, the total service
    rate allocated to the flows on each link must not exceed the
    capacity of the link.  This section describes recommended
    admission control procedures for the C-SCORE framework.  The
    procedures use RSVP-like signaling with a PATH message sent from
    the entrance node toward the egress node and a RESV message sent
    in the reverse direction.  This document does not mandate a
    specific signaling protocol or message encoding.
  </t>

  <t>
    In both procedures, only the entrance node maintains per-flow
    state.  Core nodes do not maintain per-flow state; they obtain the
    total service rate of their outgoing links using the stateless
    service rate estimation mechanism specified in
    <xref target="Y.qos-sre-rf"/> (see
    <xref target="sec-rate-estimation"/>).
  </t>

  <section anchor="sec-admission-info">
    <name>Signaling Information</name>

    <t>
      A flow request from an application includes the following
      information:
    </t>

<ul spacing="normal">
  <li><strong>Traffic Specification (T-Spec):</strong> The arrival
      rate a, the maximum packet length L, and the maximum burst size
      B of the flow.</li>
  <li><strong>Requested Specification (R-Spec):</strong> The E2E
      latency bound D_req and, optionally, the E2E jitter bound
      required by the application.</li>
</ul>

<t>
  In addition to the T-Spec and R-Spec, a PATH message carries the
  following fields, which are updated hop by hop:
</t>

<ul spacing="normal">
  <li><strong>Hop count (H):</strong> The index of the last node that
      has processed the PATH message.  The entrance node sets H to 0,
      and each subsequent node increments H by 1.  When the PATH
      message reaches the egress node, the path consists of H+1 nodes,
      indexed from 0 to H.</li>
  <li><strong>Accumulated link term (S_LR):</strong> The sum of
      L_h/R_h over the nodes that have processed the PATH
      message.</li>
  <li><strong>Accumulated time difference (S_delta):</strong> The sum
      of delta_h over the links that the PATH message has traversed.
      Each node obtains delta_h as described in
      <xref target="sec-td"/>.</li>
  <li><strong>Requested service rate (r):</strong> Used in the basic
      procedure (<xref target="sec-admission-basic"/>).</li>
  <li><strong>Desired Rate (r_desired), Minimum Acceptable Rate
      (r_min), and Path-Available-Rate (r_path):</strong> Used in the
      rate discovery procedure
      (<xref target="sec-admission-discovery"/>).</li>
</ul>

    <t>
      Using these fields, the E2E latency bound in Equation (4) for a
      service rate r can be written as follows:
    </t>

    <artwork align="center"><![CDATA[
  D(r) = (B + H*L)/r + S_LR + S_delta                        (5)
]]></artwork>

    <t>
      Accumulating S_LR and S_delta separately, rather than a single
      per-hop latency value, allows the egress node to evaluate the
      latency bound for any candidate service rate.  This is required
      for the rate discovery procedure.
    </t>
  </section>

  <section anchor="sec-admission-basic">
    <name>Basic Admission Procedure</name>

    <t>
      In the basic procedure, the application requests a specific
      service rate r, where r &gt;= a.
    </t>

    <ol spacing="normal" type="1">
      <li>The application requests a flow from the entrance node with
          the T-Spec, the R-Spec, and the requested service rate
          r.</li>
      <li>The entrance node acts as the admission controller.  It
          checks whether r is within the available capacity of its
          own outgoing link.  If so, it creates tentative per-flow
          state for the flow, sets H = 0, S_LR = L_0/R_0, and S_delta
          = 0, and sends a PATH message toward the egress node.
          Otherwise, it rejects the request.</li>
      <li>Each core node h estimates the total service rate of its
          outgoing link using the mechanism specified in
          <xref target="Y.qos-sre-rf"/> and checks whether adding r
          keeps the total within the aggregate bandwidth threshold of
          the link.  If not, the core node returns a PATH error
          message to the entrance node and does not forward the PATH
          message.</li>
      <li>If the check succeeds, the core node increments H, adds
          delta_(h-1) to S_delta and L_h/R_h to S_LR, and forwards the
          PATH message to the next node.</li>
      <li>The egress node performs the same check and update as a
          core node, and then computes the E2E latency bound D(r)
          using Equation (5).  If D(r) &lt;= D_req, the egress node
          generates a RESV message carrying r.  Otherwise, it returns
          a PATH error message to the entrance node.</li>
	  <li>The egress node sends the RESV message to the entrance node.
          Since core nodes do not maintain per-flow state, they do not
		  need to process the RESV message.</li>
      <li>When the RESV message reaches the entrance node, the flow is
          admitted.  The entrance node commits r to its per-flow state
          and starts marking the packets of the flow with the metadata
          specified in this document, performing initial shaping if
          necessary.</li>
    </ol>
  </section>

  <section anchor="sec-admission-discovery">
    <name>Admission Procedure with Rate Discovery</name>

    <t>
      The RSVP-like signaling can also be used to discover and
      negotiate an appropriate service rate for a flow.  The PATH
      message identifies the link with the smallest residual capacity
      on the path, so the maximum rate that can be supported without
      violating the latency bounds of existing flows is determined in
      a single round trip.
    </t>

    <ol spacing="normal" type="1">
      <li>The application requests a flow from the entrance node with
          the T-Spec, the R-Spec, a Desired Rate r_desired, and a
          Minimum Acceptable Rate r_min, where r_desired &gt;= r_min
          &gt;= a.</li>
      <li>The entrance node acts as the admission controller.  It
          computes the residual capacity r_avail_0 of its own outgoing
          link, sets r_path = min(r_desired, r_avail_0), and
          initializes H, S_LR, and S_delta as in <xref
          target="sec-admission-basic"/>.  If r_path &lt; r_min, it
          rejects the request.  Otherwise, it creates tentative
          per-flow state and sends a PATH message toward the egress
          node.</li>
      <li>Each core node h computes the residual capacity r_avail_h of
          its outgoing link as the aggregate bandwidth threshold of
          the link minus the total service rate of the flows already
          admitted.  The total service rate is estimated using the
          mechanism specified in <xref target="Y.qos-sre-rf"/>.</li>
      <li>The core node updates r_path = min(r_path, r_avail_h).  If
          the updated r_path &lt; r_min, the core node returns a PATH
          error message to the entrance node and does not forward the
          PATH message.  Otherwise, it updates H, S_LR, and S_delta as
          in <xref target="sec-admission-basic"/> and forwards the
          PATH message.</li>
      <li>When the PATH message reaches the egress node, r_path
          represents the maximum service rate that the entire E2E path
          can support at that moment.</li>
      <li>The egress node selects the service rate r_opt as described
          in <xref target="sec-admission-rate-selection"/>.  If no
          rate satisfies the conditions, it returns a PATH error
          message to the entrance node.</li>
	  <li>The egress node sends a RESV message carrying r_opt to the entrance node.</li>
      <li>When the RESV message reaches the entrance node, the flow is
          admitted.</li>
      <li>The entrance node commits r = r_opt to its per-flow state
          and starts marking the packets of the flow.</li>
    </ol>

<section anchor="sec-admission-rate-selection">
  <name>Selection of the Service Rate</name>

  <t>
    The highest supportable rate is not always the most appropriate
    rate.  The egress node selects r_opt such that r_opt is not
    greater than r_path and not smaller than the arrival rate a, the
    Minimum Acceptable Rate r_min, and the rate required for the E2E
    latency bound in Equation (5) to satisfy D_req.  If no such rate
    exists, the egress node rejects the request.
  </t>

  <t>
    Within this range, the egress node can select r_opt based on the
    following criteria:
  </t>

  <ul spacing="normal">
    <li><strong>Latency requirements:</strong> A higher service rate
        results in smaller FT increments and thus a smaller per-hop
        latency bound.  A rate higher than the minimum required rate
        provides a margin against variations in delta_h.</li>
    <li><strong>Buffer constraints:</strong> The buffer required at
        core nodes depends on the maximum burst size B and the
        service rate r.  The selected rate needs to be consistent
        with B so that the buffers at core nodes do not
        overflow.</li>
    <li><strong>Network availability:</strong> The egress node can
        choose a rate lower than r_path to leave capacity for flows
        that may join later.</li>
  </ul>

  <t>
    Since core nodes need only the committed rate r carried in the
    packet metadata, the rate discovery and selection logic is
    confined to the control plane and the edge nodes.  In large-scale
    networks, the same mechanism can be used for aggregate rate
    discovery, where r_path represents the available capacity for a
    bundle of flows that share the same path.  In this way, the
    admission process maps the current congestion state of the path
    onto a single service rate parameter.
  </t>
</section>
  </section>

  <section anchor="sec-admission-considerations">
    <name>Operational Considerations</name>

    <ul spacing="normal">
	<li><strong>Concurrent admission requests:</strong> The service rate
    estimation in <xref target="Y.qos-sre-rf"/> reflects a flow only
    after its packets are transmitted.  If multiple PATH messages
    traverse the same link at about the same time, each of them may
    observe the same residual capacity, and the link may be
    overbooked.  To prevent this, a core node can maintain a single
    aggregate counter of pending reservations, rather than per-flow
    state.  The core node adds the requested rate (r, or r_path in
    the rate discovery procedure) to the counter when it forwards a
    PATH message and includes the counter when computing the
    residual capacity.  The rate is removed from the counter after a
    timeout that is long enough for the packets of the newly admitted
    flow to be reflected in the service rate estimation.</li>
      <li><strong>Error handling:</strong> When the entrance node
          receives a PATH error or RESV error message, it removes the
          tentative per-flow state and notifies the application that
          the request was rejected.  The application can retry with
          relaxed requirements, for example, a larger D_req or a
          smaller r_min.</li>
      <li><strong>Flow removal:</strong> When a flow terminates, the
          entrance node removes the per-flow state and stops marking
          the packets of the flow.  Since core nodes do not maintain
          per-flow state, no explicit teardown message is required at
          core nodes.  The flow is no longer counted by the service
          rate estimation once its last packet has been
          transmitted.</li>
      <li><strong>Idle flows:</strong> An admitted flow that is
          temporarily idle may not be counted by the service rate
          estimation.  If the flow resumes transmission, the total
          service rate of a link may exceed the aggregate bandwidth
          threshold.  Operators can mitigate this by setting the
          aggregate bandwidth threshold sufficiently below the link
          capacity, or by having the entrance node maintain the
          presence of the flow during idle periods.</li>
    </ul>
  </section>
</section>

<section anchor="sec-td">
  <name>Compensation of Time Difference between Nodes</name>

  <t>
    As described in <xref target="sec-framework"/>, there is a time
    difference between adjacent nodes, which includes the clock
    discrepancy and the propagation delay between them.  The time
    difference of packet p between node h and node h+1 is defined as
    follows:
  </t>

  <artwork align="center"><![CDATA[
  delta_h(p) = A_(h+1)(p) - C_h(p)                           (6)
]]></artwork>

  <t>
    where A_(h+1)(p) is the arrival time of packet p measured by the
    clock of node h+1, and C_h(p) is the service completion time of
    packet p measured by the clock of node h.
  </t>

  <t>
    The FT does not need to be precise, since it is used only to
    determine the service order of packets.  If the propagation delay
    between the nodes is constant and the clocks of the nodes do not
    drift relative to each other, delta_h(p) is the same for all
    packets and can be replaced by a constant, delta_h.  In practice,
    clocks may drift slowly.  Therefore, delta_h needs to be updated
    only occasionally, for example, periodically or when a change in
    the measured value exceeds a configured threshold.
  </t>

  <section anchor="sec-td-measurement">
    <name>Measurement of Time Difference</name>

    <t>
      To obtain delta_(h-1), node h needs C_(h-1)(p), the service
      completion time of a packet at the upstream node h-1.  Node h
      computes delta_(h-1) from C_(h-1)(p) and its own measurement of
      A_h(p), using Equation (6).  Since both the clock discrepancy
      and the propagation delay are included in delta_(h-1), node h
      does not need to separate them.
    </t>

    <t>
      C_(h-1)(p) can be provided to node h in one of the following
      ways:
    </t>

    <ul spacing="normal">
      <li><strong>Piggybacking:</strong> Node h-1 records C_(h-1)(p)
          in the metadata of selected packets.  C_(h-1)(p) can be
          provided on demand, at the request of node h, or
          periodically.</li>
      <li><strong>Explicit messages:</strong> Nodes h-1 and h exchange
          dedicated timing messages.  The message format can follow
          that of the Network Time Protocol (NTP) <xref
          target="RFC5905"/>.  However, the procedure is simpler than
          that of NTP.  NTP estimates the clock offset alone, using
          round-trip measurements under the assumption of symmetric
          delay.  Here, only the combined one-way value
          delta_(h-1) is required, so a single one-way measurement is
          sufficient.</li>
    </ul>
<!--
    <t>
      [Editor's Note: The detailed procedure for obtaining
      C_(h-1)(p) at node h, including the metadata or message format,
      will be specified in a future version of this document.]
    </t>
-->
  </section>

  <section anchor="sec-td-noncompliant">
    <name>Time Difference between Non-adjacent Nodes</name>

    <t>
      The time difference between non-adjacent nodes can be obtained
      in the same manner.  This is useful when nodes that do not
      support C-SCORE exist between two C-SCORE nodes.  In this case,
      however, the measured time difference also includes the variable
      queuing delays at the non-compliant nodes and is therefore not
      stable across packets.  One possible approach is to sample the
      time difference over a sufficiently long interval and to use
      the maximum sampled value as delta_h.  The latency bound in
      Equation (4) then holds only if the maximum queuing delay at the
      non-compliant nodes is bounded and is captured by the sampled
      maximum.
    </t>
  </section>
</section>
 </section>
 
<section anchor="sec-characteristics">
  <name>Characteristics</name>

  <section anchor="sec-taxonomy">
    <name>Taxonomy</name>

    <t>
      According to the taxonomy suggested by
      <xref target="I-D.ietf-detnet-dataplane-taxonomy"/>, the
      framework in this document, C-SCORE, is a flow-level, rate-based,
      work-conserving, asynchronous, non-periodic, and in-time
      solution.
    </t>

    <t>
      <xref target="I-D.ietf-detnet-dataplane-taxonomy"/> also defines
      seven suitable categories for deterministic networking.  A
      category is defined as a set of solutions grouped by one or more
      criteria, where a criterion is a principle or standard by which a
      solution can be judged or assigned to a certain category.
    </t>

    <t>
      According to this categorization, C-SCORE belongs to the
      "flow-level rate-based unbounded" category, which is one of the
      seven suitable categories.
    </t>
  </section>

  <section anchor="sec-strengths">
    <name>Strengths</name>

    <t>
      The dominant factor in the per-hop latency of C-SCORE is the
      maximum packet length of the flow divided by its service rate.
      This factor is independent of the parameters of other flows.  As
      such, the most distinguishing strength of C-SCORE is its flow
      isolation capability.  A fine-tuned E2E latency bound can be
      assigned to a flow by controlling the flow's own parameters, such
      as its service rate.  Once a latency bound is assigned to a flow,
      it remains almost the same in spite of changes in the network
      situation, such as other flows joining and leaving.
    </t>

    <t>
      C-SCORE is work-conserving and thus benefits from statistical
      multiplexing gain without wasting bandwidth, which is a key to
      the success of the Internet.  The consequence is a smaller
      average latency.  The observed maximum latency is also much
      smaller than the theoretical latency bound.  Note that, with a
      work-conserving solution, observing the theoretical latency bound
      is extremely difficult in real situations.  This is because the
      worst-case latency results from a combination of multiple rare
      events, e.g., a maximum burst from a flow colliding with the
      maximum bursts from all other flows at every node.  In contrast,
      with non-work-conserving solutions, latencies close to the
      bounds are commonly observed.
    </t>

    <t>
      C-SCORE is rate-based, and thus its admission control is simple,
      since the admission condition depends only on the service rates
      of flows.  This process aligns well with existing protocols.
    </t>

    <t>
      Overall, C-SCORE is suitable for large-scale networks at any
      utilization level, with various types of flows joining and
      leaving dynamically.
    </t>
  </section>
</section>

 <section anchor="sec-approx">
  <name>Approximate C-SCORE Using Strict Priority Schedulers</name>

  <section anchor="sec-approx-general">
    <name>General Description</name>

    <t>
      C-SCORE requires a priority queue that sorts the packets in the
      queue in accordance with their FTs.  Compared with the strict
      priority (SP) schedulers used in current switching nodes, this
      may limit the overall data plane scalability as well as the deployability of the solution.  
	  SP schedulers are commonly implemented in the hardware chips of
      current switching nodes.  They usually consist of 8 to 32 queues
      and serve packets in a higher-priority queue first whenever such
      packets are present.  Packets in the same queue are served on a
      first-in, first-out (FIFO) basis.
    </t>

    <t>
      It is therefore desirable to implement C-SCORE with such an SP
      scheduler.  This section specifies the architecture and
      algorithms of the approximate C-SCORE using rotating SP
      schedulers, as well as the E2E latency bound of a network of
      approximate C-SCORE nodes.
    </t>
  </section>

  <section anchor="sec-approx-arch">
    <name>Transit Node Architecture</name>

    <t>
      This section specifies the architecture of an approximate C-SCORE
      transit node, in which an SP scheduler with a limited number of
      queues behaves as an approximate priority queue.
    </t>

    <t>
      The input port module classifies packets into DetNet flows and
      best-effort (BE) flows.  Packets of DetNet flows are put into one
      of N queues in the output port module, which operate as rotating
      SP scheduler queues.  If queue k, where 0 &lt;= k &lt;= N-1, has
      the highest priority at time t, then queue (k+N-1) mod N has the
      lowest priority at t.  Packets of BE flows are put into a
      separate BE queue in the output port module.  The BE queue is
      served only when there is no packet in queues 0 to N-1.
    </t>

    <t>
      Time is partitioned into discrete intervals of uniform length S,
      called slots.  Each slot is allocated to one of the N queues.
      Let T_i denote the end boundary of slot i.  An arriving packet p
      is assigned to slot i if its FT, F_h(p), falls within the
      interval (T_(i-1), T_i].  The packet is buffered in the
      corresponding queue and served in FIFO order within the queue.
      The SP scheduler gives precedence to the queue that corresponds
      to the earliest slot.  At the end of each slot, the priorities of
      the queues rotate: the queue of the slot that has just ended
      becomes the lowest-priority queue and is reused for the slot N
      slots later.  The scheduler is work-conserving and serves packets
      at the line rate whenever the system is backlogged.
    </t>

    <t>
      This section assumes that the FT of every packet falls within the
      range covered by the N slots.  In other words, it is assumed that
      no packet has an FT beyond the slot boundaries covered by the N
      queues, or equivalently, that N*S is large enough to cover the
      FTs of all packets that can be present in the node at the same
      time.
    </t>
  </section>

  <section anchor="sec-approx-alg">
    <name>Algorithms</name>

    <t>
      To provide differentiated quality of service, the per-hop latency
      needs to be adjusted according to the service rates of the flows.
      With a sufficiently small slot length S, the system can provide
      tiered latency bounds based on the number of slots spanned by
      L/r, the maximum virtual service interval of a flow.  For a flow
      with (n-1)S &lt; L/r &lt;= nS, the per-hop latency in an
      idealized preemptive system is bounded by (n+1)S.  Flows with
      higher service rates, that is, smaller L/r, therefore receive
      lower latency, which aligns latency performance with bandwidth
      allocation.
    </t>

    <t>
      In an idealized preemptive system, the scheduler ensures that all
      packets mapped to a slot are fully served before the end boundary
      of the slot, T_i.  Consequently, the service interval of any
      packet is contained within its assigned slot.  In a realistic
      non-preemptive system, however, the service completion can be
      delayed by up to L_h/R_h, where L_h is the maximum packet length
      and R_h is the link capacity at node h.  Thus, the service of the
      packet is guaranteed to complete no later than T_i + L_h/R_h.
    </t>

    <t>
      The slot length S is chosen such that S &gt;= min_p{L(p)/r(p)}.
      While a smaller S generally reduces the E2E latency, reducing S
      below this lower bound, which is determined by the minimum packet
      transmission time relative to the flow rate, yields no additional
      scheduling benefit.  In practice, N hardware queues are allocated
      and managed cyclically to accommodate the slots.  Consequently,
      the selection of S involves a trade-off: a larger S allows a
      smaller number of physical queues N, at the expense of reduced
      scheduling precision.
    </t>

    <t>
      The approximate C-SCORE follows the architecture of C-SCORE.
      That is, Equations (1) and (2) are still used.  However, the
      delay factor in Equation (3) is replaced by the one in
      Equation (7).
    </t>

    <artwork align="center"><![CDATA[
  d_h(p) = L_h/R_h + (n_h+1)S_h + delta_h(p)                (7)
]]></artwork>

    <t>
      where S_h is the slot length at node h, and n_h is the integer
      that satisfies (n_h-1)S_h &lt; L/r &lt;= n_h*S_h for the flow
      under observation, that is, n_h = ceiling(L/(r*S_h)).
    </t>
  </section>

  <section anchor="sec-approx-bound">
    <name>E2E Latency Bound of the Approximate C-SCORE</name>

    <t>
      In a network of approximate C-SCORE nodes, the E2E latency of
      packet p is bounded as shown in Equation (8).
    </t>

    <artwork align="center"><![CDATA[
                   H                           H-1
  D_H(p) <= B/r + SUM {(n_j+1)S_j + L_j/R_j} + SUM delta_j(p)   (8)
                  j=0                          j=0
]]></artwork>

    <t>
      where D_H(p) is the latency experienced by packet p from its
      arrival at node 0 to its departure from node H, the last node on
      the path, and B is the maximum burst size of the flow.  As in
      Equation (4), the last term accounts for the clock discrepancies
      and the propagation delays between the nodes.  When the clock
      discrepancies are negligible, for example, with an absolute time
      reference, this term effectively represents the E2E propagation
      delay.
    </t>

    <t>
      Since n_j*S_j &lt; L/r + S_j, the per-hop term (n_j+1)S_j in
      Equation (8) exceeds the corresponding term L/r in Equation (4)
      by less than 2S_j.  Therefore, as S_j decreases, the latency
      bound of the approximate C-SCORE approaches that of C-SCORE,
      except for an additional L/r in the first term.
    </t>
  </section>
</section>
 <section anchor="sec-noncompliant">
  <name>Considerations for Non-compliant Nodes</name>

  <t>
    A network can contain non-compliant end nodes and transit nodes.
    For example, some end nodes may not support the signaling required
    for admission control.  The network can also contain legacy nodes,
    or nodes that implement data plane enhancement solutions other
    than C-SCORE.  The compensation of the time difference across
    non-compliant transit nodes is described in
    <xref target="sec-td-noncompliant"/>.
  </t>

  <t>
    [Editor's Note: How the presence of non-compliant nodes can be
    compensated for, and how much these nodes degrade the performance
    of C-SCORE, will be discussed in a future version of this
    document.]
  </t>
</section>

<section anchor="sec-itu">
  <name>Relationships to ITU-T Standards</name>

  <t>
    This document is based on two ITU-T Recommendations,
    <xref target="Y.3129"/> and <xref target="Y.3148"/>, and one draft
    ITU-T Recommendation, <xref target="Y.qos-sre-rf"/>.
  </t>

  <t>
    Recommendation ITU-T Y.3129 specifies the requirements and
    framework for C-SCORE.  The requirements address the generation,
    update, and properties of the FT.  The framework describes a
    mechanism that guarantees E2E latency bounds while meeting these
    requirements.  It specifies how to obtain the FT at core nodes,
    how to select the delay factor, and how to configure a network for
    latency guarantees.
  </t>

  <t>
    Recommendation ITU-T Y.3148 specifies the functional architecture,
    functional entities, operational procedures, and packet metadata
    required to fulfill the requirements and framework specified in
    Recommendation ITU-T Y.3129.  The operational procedures cover
    stateless FQ at the entrance node and core nodes, including the
    creation and update of the FT values of packets.
  </t>

  <t>
    Draft Recommendation ITU-T Y.qos-sre-rf specifies the requirements
    and framework for identifying the service rates of active flows for
    admission control without maintaining per-flow state, based on the
    packet metadata defined in <xref target="Y.3129"/>.
  </t>

  <t>
    This document bridges the gap between these ITU-T standards and
    deployable protocols.  Specifically, it specifies:
  </t>

  <ul spacing="compact">
    <li>the metadata (<xref target="sec-metadata"/>) and the
        corresponding header formats for IPv6 and MPLS
        (<xref target="header"/>);</li>
    <li>the admission control procedures
        (<xref target="sec-admission"/>); and</li>
    <li>the approximation of C-SCORE using SP schedulers
        (<xref target="sec-approx"/>).</li>
  </ul>
</section>

 <section anchor="secIANA" title="IANA Considerations">
   <t>
   <!-- There are no IANA actions required by this document. -->
   There might be matters that require IANA considerations associated with metadata. If necessary, relevant text will be added in a later version.

   </t>
 </section>

 <section anchor="secSec" title="Security Considerations">
   <t>
   This section will be described later. 
   </t>
 </section>

 <section anchor="Acknowledgements" title="Acknowledgements">
   <t>
   </t>
 </section>

 <section anchor="secCon" title="Contributor">
   <t>
   </t>
 </section>

</middle>

<back>
 <references title="Normative References">
   &RFC2119;
   &RFC8174;
   &RFC8200;

   &I-D.ietf-mpls-mna-detnet;
   &I-D.ietf-mpls-mna-ps-hdr;
   
     <reference anchor="Y.3129"> 
     <front>
       <title>Requirements and framework for stateless fair queuing in large scale networks including IMT-2020 and beyond
       </title>
       <author>
         <organization>International Telecommunication Union</organization> 
       </author>
      <date year="2024" month="April"/>
    </front>
    <seriesInfo name="ITU-T" value="Recommendation Y.3129"/>
  </reference>
  <reference anchor="Y.3148"> 
     <front>
       <title>Functional architecture for stateless fair queuing in large scale networks including IMT-2020 and beyond
       </title>
       <author>
         <organization>International Telecommunication Union</organization> 
       </author>
      <date year="2025" month="August"/>
    </front>
    <seriesInfo name="ITU-T" value="Recommendation Y.3148"/>
  </reference>
       <reference anchor="Y.qos-sre-rf"> 
     <front>
       <title>Requirements and framework for service rates estimation with packet metadata for stateless admission control
       </title>
       <author>
         <organization>International Telecommunication Union</organization> 
       </author>
      <date year="2026" month="July"/>
    </front>
    <seriesInfo name="ITU-T" value="Draft Recommendation Y.qos-sre-rf"/>
  </reference>
<!--
   &RFC8655;
   &RFC8938;
   &I-D.ietf-detnet-large-scale-requirements;
   &I-D.ietf-detnet-bounded-latency;

-->

 </references>

 <references title="Informative References">
 
    &I-D.ietf-detnet-dataplane-taxonomy;
	
<!--   &RFC2212;
   &RFC3393;
   &I-D.yizhou-detnet-ipv6-options-for-cqf-variant;  
   <reference anchor="IEEE802.1Qch"> 
     <front>
       <title>IEEE Standard for Local and metropolitan area networks - 
       Bridges and Bridged Networks - Amendment 29: 
       Cyclic Queuing and Forwarding
       </title>
       <author>
         <organization>IEEE</organization> 
       </author>
      <date year="2017" month="June" day="28"/>
    </front>
    <seriesInfo name="IEEE" value="802.1Qch-2017"/>
    <seriesInfo name="DOI" value="10.1109/IEEESTD.2017.7961303"/>
  </reference>

   <reference anchor="IEEE802.1Qcr"> 
     <front>
       <title>IEEE Standard for Local and metropolitan area networks -
       Bridges and Bridged Networks - Amendment 34: 
       Asynchronous Traffic Shaping
       </title>
       <author>
         <organization>IEEE</organization> 
       </author>
      <date year="2020" month="November" day="6"/>
    </front>
    <seriesInfo name="IEEE" value="802.1Qcr-2020"/>
    <seriesInfo name="DOI" value="10.1109/IEEESTD.2020.9253013"/>
  </reference>

   <reference anchor="Y.3113"> 
     <front>
       <title>Framework for Latency Guarantee in Large Scale Networks 
              Including IMT-2020 Network
       </title>
       <author>
         <organization>International Telecommunication Union</organization> 
       </author>
      <date year="2021" month="February"/>
    </front>
    <seriesInfo name="ITU-T" value="Recommendation Y.3113"/>
  </reference>

-->
<!--
   &I-D.ietf-detnet-dataplane-taxonomy;
-->   
<!--
   <reference anchor="ADN"> 
     <front>
       <title>Asynchronous deterministic network based on the DiffServ 
              architecture
       </title>
       <author initials="J" surname="Joung"> </author>
       <author initials="J" surname="Kwon"> </author>
       <author initials="J" surname="Ryoo"> </author>
       <author initials="T" surname="Cheung"> </author>
      <date year="2022"/>
    </front>
    <seriesInfo name="IEEE Access, " 
                value="vol. 10, pp. 15068-15083,
                       doi:10.1109/ACCESS.2022.3146398"/>
  </reference>

   <reference anchor="BN"> 
     <front>
       <title>Zero jitter for deterministic networks 
              without time-synchronization
       </title>
       <author initials="J" surname="Joung"> </author>
       <author initials="J" surname="Kwon"> </author>
      <date year="2021"/>
    </front>
    <seriesInfo name="IEEE Access," 
                value="vol. 9, pp. 49398-49414, 
                       doi:10.1109/ACCESS.2021.3068515"/>
  </reference>

   <reference anchor="ANDREWS"> 
     <front>
       <title>Instability of FIFO in the permanent sessions model 
              at arbitrarily small network loads
       </title>
       <author initials="M" surname="Andrews"> </author>
      <date year="2009" month="July"/>
    </front>
    <seriesInfo name="ACM Trans. Algorithms," 
                value="vol. 5, no. 3, pp. 1-29,
                       doi: 10.1145/1541885.1541894"/>
  </reference>

   <reference anchor="BOUILLARD"> 
     <front>
       <title>Deterministic network calculus: 
              From theory to practical implementation
       </title>
       <author initials="A" surname="Bouillard"> </author>
       <author initials="M" surname="Boyer"> </author>
       <author initials="E" surname="Le Corronc"> </author>
      <date year="2018"/>
    </front>
    <seriesInfo name="in Networks and Telecommunications. Hoboken, NJ, USA:" 
                value="Wiley,
                       doi: 10.1002/9781119440284"/>
  </reference>
  -->
  
   <reference anchor="C-SCORE"> 
     <front>
       <title>Scalable flow isolation with work conserving stateless core fair queuing for deterministic networking
       </title>
       <author initials="J" surname="Joung"> </author>
       <author initials="J" surname="Kwon"> </author>
       <author initials="J" surname="Ryoo"> </author>
       <author initials="T" surname="Cheung"> </author>
      <date year="2023"/>
    </front>
    <seriesInfo name="IEEE Access, " 
                value="vol. 11, pp. 105225 - 105247,
                       doi:10.1109/ACCESS.2023.3318479"/>
  </reference>
<!--  
   <reference anchor="GOLESTANI"> 
     <front>
       <title>A self-clocked fair queueing scheme for broadband applications
       </title>
       <author initials="S. J." surname="Golestani"> </author>
       <date year="1994"/>
    </front>
    <seriesInfo name="in Proc. INFOCOM, " 
                value="vol. 1, pp. 636-646,
                       doi: 10.1109/INFCOM.1994.337677"/>
  </reference>
    

  <reference anchor="FAIR"> 
     <front>
       <title>Framework for delay guarantee in multi-domain networks 
              based on interleaved regulators
       </title>
       <author initials="J" surname="Joung"> </author>
      <date year="2020" month="March"/>
    </front>
    <seriesInfo name="Electronics," 
                value="vol. 9, no. 3, p. 436,
                       doi:10.3390/electronics9030436"/>
  </reference>
-->  

  <reference anchor="KAUR"> 
     <front>
       <title>Core-stateless guaranteed rate scheduling algorithms
       </title>
       <author initials="J" surname="Kaur"> </author>
       <author initials="H.M" surname="Vin"> </author>
       <date year="2001" />
    </front>
    <seriesInfo name="in Proc. INFOCOM," 
                value="vol.3, pp. 1484-1492"/>
  </reference>
<!--  
  <reference anchor="LBF"> 
     <front>
       <title>High-precision latency forwarding over packet-programmable 
              networks
       </title>
       <author initials="A" surname="Clenm"> </author>
       <author initials="T" surname="Eckert"> </author>
      <date year="2020" month="April"/>
    </front>
    <seriesInfo name="NOMS 2020 - " 
                value="IEEE/IFIP Network Operations and Management Symposium"/>
  </reference>

  <reference anchor="LEBOUDEC"> 
     <front>
       <title>A theory of traffic regulators for deterministic networks 
              with application to interleaved regulators
       </title>
       <author initials="J" surname="Le Boudec"> </author>
      <date year="2019" month="December"/>
    </front>
    <seriesInfo name="IEEE/ACM Trans. Networking," 
                value="vol. 26, no. 6, pp. 2721-2733, 
                       doi:10.1109/TNET.2018.2875191"/>
  </reference>

  <reference anchor="THOMAS"> 
     <front>
       <title>On cyclic dependencies and regulators in time-sensitive networks
       </title>
       <author initials="L" surname="Thomas"> </author>
       <author initials="J" surname="Le Boudec"> </author>
       <author initials="A" surname="Mifdaoui"> </author>
      <date year="2019" month="December"/>
    </front>
    <seriesInfo name="in Proc. IEEE Real-Time Syst. Symp. (RTSS)," 
                value="York, U.K., pp. 299-311"/>
  </reference>

  <reference anchor="PAREKH"> 
     <front>
       <title>A generalized processor sharing approach to flow control 
              in integrated services networks: the single-node case
       </title>
       <author initials="A" surname="Parekh"> </author>
       <author initials="R" surname="Gallager"> </author>
      <date year="1993" month="June"/>
    </front>
    <seriesInfo name="IEEE/ACM Trans. Networking," 
                value="vol. 1, no. 3, pp. 344-357"/>
  </reference>

  <reference anchor="STILIADIS-RPS"> 
     <front>
       <title>Rate-proportional servers: A design methodology for 
              fair queueing algorithms
       </title>
       <author initials="D" surname="Stiliadis"> </author>
       <author initials="A" surname="Anujan"> </author>
      <date year="1998"/>
    </front>
    <seriesInfo name="IEEE/ACM Trans. Networking," 
                value="vol. 6, no. 2, pp. 164-174"/>
  </reference>
  
    <reference anchor="STILIADIS-LRS"> 
     <front>
       <title>Latency-rate servers: A general model for analysis of traffic scheduling algorithms
       </title>
       <author initials="D" surname="Stiliadis"> </author>
       <author initials="A" surname="Anujan"> </author>
      <date year="1998"/>
    </front>
    <seriesInfo name="IEEE/ACM Trans. Networking," 
                value="vol. 6, no. 5, pp. 611-624"/>
  </reference>

  <reference anchor="STOICA"> 
     <front>
       <title>Providing guaranteed services without per flow management
       </title>
       <author initials="I" surname="Stoica"> </author>
       <author initials="H" surname="Zhang"> </author>
      <date year="1999"/>
    </front>
    <seriesInfo name="ACM SIGCOMM Computer Communication Review," 
                value="vol. 29, no. 4, pp. 81-94"/>
  </reference>

  <reference anchor="ZHANG"> 
     <front>
       <title>Virtual clock: A new traffic control algorithm for 
              packet switching networks
       </title>
       <author initials="L" surname="Zhang"> </author>
      <date year="1990" />
    </front>
    <seriesInfo name="in Proc. ACM symposium on Communications architectures 
                      &amp; protocols," 
                value="pp. 19-29"/>
  </reference>
-->
  
<reference anchor="RFC5905" target="https://www.rfc-editor.org/info/rfc5905">
  <front>
    <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
    <author initials="D." surname="Mills" fullname="D. Mills"/>
    <author initials="J." surname="Martin" fullname="J. Martin" role="editor"/>
    <author initials="J." surname="Burbank" fullname="J. Burbank"/>
    <author initials="W." surname="Kasch" fullname="W. Kasch"/>
    <date year="2010" month="June"/>
  </front>
  <seriesInfo name="RFC" value="5905"/>
  <seriesInfo name="DOI" value="10.17487/RFC5905"/>
</reference>

 </references>
</back>

</rfc>

