<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ravi-ippm-csig-00" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="CSIG">Congestion Signaling (CSIG)</title>

    <author initials="A." surname="Ravi" fullname="Abhiram Ravi">
      <organization>Google LLC</organization>
      <address>
        <email>abhiramr@google.com</email>
      </address>
    </author>
    <author initials="N." surname="Dukkipati" fullname="Nandita Dukkipati">
      <organization>Google LLC</organization>
      <address>
        <email>nanditad@google.com</email>
      </address>
    </author>
    <author initials="N." surname="Mehta" fullname="Naoshad Mehta">
      <organization>Google LLC</organization>
      <address>
        <email>naoshad@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Kumar" fullname="Jai Kumar">
      <organization>Broadcom Inc.</organization>
      <address>
        <email>jai.kumar@broadcom.com</email>
      </address>
    </author>

    <date year="2023" month="August" day="31"/>

    <area>Internet</area>
    <workgroup>Networking Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document presents Congestion Signaling (CSIG), an in-band network telemetry protocol that allows end-hosts to obtain visibility into fine-grained network signals for congestion control, traffic management, and network debuggability in the network.  CSIG provides a simple, low-overhead, and extensible packet header mechanism to obtain fixed-length summaries from bottleneck devices along a packet path. This summarized information is collected over L2 CSIG-tags in a compare-and-replace manner across network devices along the path.   Receivers can reflect this information back to senders via L4+ CSIG reflection headers.</t>

<t>CSIG builds upon the successful aspects of prior work such as switch in-band network telemetry (INT) that incorporates multibit signals in live data packets. At the same time, CSIG&#39;s end-to-end mechanism for carrying the signals via fixed size header is simple, practical and deployable akin to Explicit Congestion Notification (ECN).</t>

<t>In addition to a detailed description of the end-to-end protocol, this document also motivates the use cases for CSIG and the rationale for design choices made in CSIG. It describes a set of signals of interest to applications (minimum available bandwidth, maximum link utilization, and maximum hop delay), methods to compute these signals in network devices, and how these signals can be leveraged in applications. Additionally, it describes how attributes about the bottleneck&#39;s location can be carried and made useful to applications. It also provides the framework to incorporate future signals. Finally, this document addresses incremental deployment, backward compatibility and nuances of CSIG&#39;s applicability in a range of scenarios.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>Many network control loops, including Congestion Control, Traffic
Engineering and Network Operations, make decisions based on the
congestion experienced by application flows.  The signals used to
determine congestion are often implicitly derived from end-to-end signals, approximated over larger timescales than desired, or obtained out-of-band from the network.  This can lead to suboptimal performance for applications or inefficiency in network usage.  CSIG (Congestion Signaling) provides direct, real-time, inband signals that network control loops can incorporate for performance and efficiency.</t>

<t>A number of congestion control algorithms (CCA) are deployed in
datacenters, including Swift <xref target="SWIFT"></xref>, BBR <xref target="BBR"></xref>, DCTCP <xref target="RFC8257"></xref>,
DCQCN <xref target="DCQCN"></xref> and HPCC++ <xref target="I-D.miao-tsv-hpcc"></xref>.  These CCA vary in the
congestion signals they use and in how they increase/decrease flow
rates in response to the signals.  Swift uses precise measurements of
round-trip time (RTT) to modulate its congestion window.  BBR uses a
combination of flow&#39;s delivery rate and RTT measurements.  DCTCP and
DCQCN rely on Explicit Congestion Notification (ECN <xref target="RFC3168"></xref>) from
switches that indicate if the queue build up is above a threshold.
HPCC++ leverages per-hop queue depth and transmit bytes along the
flow&#39;s path, obtained via inband telemetry probes, to update flow
rates.</t>

<t>Despite the advances in sophisticated signals on when to slow down
transfers, there continue to be blind-spots for CCA when it comes to
increasing flow rates, e.g., What is the appropriate starting rate
for a flow?  How quickly should a flow ramp up in the absence of
congestion?  Without explicit information from the network, end-to-
end CCA have come to rely on heuristics that can either undershoot or
overshoot the bottleneck bandwidth, which can lead to slower Flow
Completion Times (FCT) or increased round-trip times or packet
losses.  At the same time, applications&#39; appetite for fast network
performance is rising: AI/ML applications are pushing for fast
network transfers and avoid idling expensive Tensor Processing Units (TPUs) and Graphics Processing Units (GPUs). Similarly Storage disaggregation needs fast transfers to make a remote Storage device appear as a local device at host.</t>

<t>In this document we introduce Congestion Signaling (CSIG) to
explicitly notify the hosts of the bottleneck link metrics. There are several important use cases for CSIG, including:</t>

<t><list style="symbols">
  <t>Congestion Control Algorithms for making decisions on sending rate: CCA at senders can use CSIG for quickly and safely ramping up to the maximum feasible rate as determined by the bottleneck link, and react with precision to the bottleneck hop both in the presence and absence of congestion. The motivation for quick ramp-up stems from making maximal use of datacenter bandwidth, and decreasing latency even for large transfers. There are several ways in which CSIG can help complete transfers quickly, e.g., transfers belonging to an ML collective communication can ramp up quickly to maximally use all network bandwidth and complete close to the ideal transfer completion time.</t>
  <t>Traffic Management systems including Traffic Engineering (TE), Load Balancing and Multipathing too benefit from CSIG. TE systems infer congested flows through an offline multi-minute process via superimposition of network traffic stats, topology and routing information. With CSIG, TE has more up to date information on the congested points and the application flows experiencing congestion. Using such finer-grained information can lead to more efficient and timely provisioning for bursty traffic. Similarly, CSIG-enabled multipathed transport flows can choose paths in real time with the most available bandwidth.</t>
  <t>Troubleshooting and Performance Optimization. We also envision CSIG to assist with debugging the network-level performance of datacenter applications. Large-scale applications, including ML training workloads, open thousands of connections at the transport layer. When the network is slow for an application, it is almost impossible to identify the bottleneck hops without joining many data sources across switches and hosts. Because CSIG conveys the path bottleneck characteristics, it is valuable in pinpointing choke points in the network. Knowledge of these choke points can lead to better bandwidth provisioning, timely repair processes, and real-time control, such as better load balancing.</t>
</list></t>

<t>CSIG  provides simple, fixed-length summaries of bottleneck links along a path, such as maximum hop delay, minimum available bandwidth, and maximum link utilization. Information is collected at L2 from network devices along a packet path. Each data receiver then returns the collected information to the data sender via L4 transport options or payloads. CSIG uses a simple compare-and-replace operation at network devices, which allows it to scale with network topology, link speeds, and packet rates.</t>

<t>CSIG builds on the successful aspects of prior explicit feedback schemes, but is more capable. CSIG carries rich multi-bit switch telemetry in live data packets, drawing from the advancements in in-band network telemetry, also generally known as INT. At the same time, CSIG retains the fixed-size headers and reflection in L4 transports akin to Explicit Congestion Notification (ECN). The industry has three key variants of INT: the one first specified in P4.org <xref target="P4-INT"></xref>, the IOAM (In Situ Operations, Administration, and Maintenance) standard <xref target="RFC9378"></xref> in IETF and the Inband Flow Analyzer (IFA) spec <xref target="I-D.kumar-ippm-ifa"></xref> that is used in HPCC deployment <xref target="HPCCPLUS"></xref>. While they differ in the header definitions and encapsulation mechanisms, they all commonly stack up multiple per-switch telemetry data per-hop in the path of a packet. The packet size grows proportional to the metrics per switch and the number of forwarding devices along its path. Depending on the use case and header definition, the per-packet overhead ranges from 20B to above 100B. The large and variable size header overhead incurs challenges in end-to-end MTU limit conformation and parsing of the packet header data in the forwarding or receiving devices.</t>

<t>There exist several efforts to address the challenges incurred in INT variants, including: 1) carrying INT data in synthetically generated non-data packets also known as probe packets, and 2) carrying only the fixed-size INT instructions (e.g., specifying which data to collect per hop) in data packets, while hop devices generate separate report packets that deliver the requested per-hop data. While these techniques reduced the per-data-packet overhead, they did not fundamentally reduce the total amount of bytes or PPS overhead on the network devices or the data collector. TCP-INT <xref target="TCP-INT"></xref> was developed in parallel to carry fixed-size min/max/sum aggregate metric over the hops together with a hop locator in live data packets. However, it is limited to TCP Options, hence not applicable to various modern transports for AI/HPC, and furthermore there is no flexible way to introduce a new metric. CSIG&#39;s type-value format ensures a constant size overhead with future-proofness. The guaranteed constant size is small enough to fit into the 4B or 8B tag, enabling the unique placement of CSIG in L2, which frees the operators from the concerns around tunneling and encryption in deploying CSIG.</t>

<t>In the rest of the document, we describe the design of end-to-end CSIG at hosts and network devices.</t>

<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>ABW:</dt>
  <dd>
    <t>Available Bandwidth</t>
  </dd>
  <dt>AQM:</dt>
  <dd>
    <t>Active Queue Management</t>
  </dd>
  <dt>CCA:</dt>
  <dd>
    <t>Congestion Control Algorithms</t>
  </dd>
  <dt>Connection / Flow:</dt>
  <dd>
    <t>A 5-tuple transport connection, e.g. TCP connection</t>
  </dd>
  <dt>CSIG:</dt>
  <dd>
    <t>Congestion Signaling</t>
  </dd>
  <dt>CSIG data fields:</dt>
  <dd>
    <t>Fields in the CSIG tag excluding the TPID.</t>
  </dd>
  <dt>CSIG packets:</dt>
  <dd>
    <t>Packets that contain the CSIG-tag and optionally the CSIG reflection header</t>
  </dd>
  <dt>CSIG-capable path:</dt>
  <dd>
    <t>Path is termed CSIG-capable if all transit devices along the path support the CSIG protocol and end hosts have at least pass-through support for CSIG packets</t>
  </dd>
  <dt>CSIG-tagged packets:</dt>
  <dd>
    <t>Packets that contain the CSIG-tag in the packet header</t>
  </dd>
  <dt>CSIG-domain:</dt>
  <dd>
    <t>Secure network deployment domain where all devices in the domain have complete CSIG support or pass-through CSIG support</t>
  </dd>
  <dt>PD:</dt>
  <dd>
    <t>Per-hop delay</t>
  </dd>
  <dt>E2E:</dt>
  <dd>
    <t>End-to-End</t>
  </dd>
  <dt>IPSec:</dt>
  <dd>
    <t>Internet Protocol Security</t>
  </dd>
  <dt>MTU:</dt>
  <dd>
    <t>Maximum Transmission Unit</t>
  </dd>
  <dt>MSS:</dt>
  <dd>
    <t>Maximum Segment Size</t>
  </dd>
  <dt>NIC:</dt>
  <dd>
    <t>Network Interface Card</t>
  </dd>
  <dt>Packet Path:</dt>
  <dd>
    <t>The port-by-port network path taken by a given packet specified as a sequence of device interfaces</t>
  </dd>
  <dt>PSP:</dt>
  <dd>
    <t>PSP Security Protocol</t>
  </dd>
  <dt>TPID:</dt>
  <dd>
    <t>Tag Protocol ID</t>
  </dd>
  <dt>TE:</dt>
  <dd>
    <t>Traffic Engineering</t>
  </dd>
  <dt>Transit device:</dt>
  <dd>
    <t>Any switch, router or middlebox in the path of a CSIG packet</t>
  </dd>
  <dt>WRR:</dt>
  <dd>
    <t>Weighted Round Robin</t>
  </dd>
</dl>

</section>
</section>
<section anchor="assumptions"><name>Design Principles</name>

<t>CSIG was conceived to address problems in congestion control, traffic management and network debuggability in production networks.  We describe below the design principles that shaped CSIG, with simplicity and ease of deployment being at the forefront. <xref target="designrationale"/> discusses the rationale behind the specific design choices made in CSIG.</t>

<t><list style="symbols">
  <t>Simple Signals driven by Use Cases: Simple device port or queue
metrics that solve concrete use cases are at the heart of CSIG&#39;s
design principles.  This simplicity is not only important to
applications, but also keeps the area, power and cost of
implementation low on network devices.  Signals in CSIG are designed to be implementable in ASICs at line rate.  Signals that track per-flow state at the switch, for example, are harder to implement and deploy, and are hence avoided in CSIG.  CSIG is also flexible enough to accommodate new signals and use cases beyond those
described in this document.</t>
  <t>End-to-End Perspective: CSIG&#39;s design stems from an end-to-end perspective of requirements and trade-offs for both applications and the network. This document covers the necessary end-to-end aspects and the resulting design choices that make CSIG both useful to applications and practical to deploy.</t>
  <t>Small and Fixed Packet Overhead: It is important that the packet
size does not increase as it traverses the network, which means
that the MTU does not need to be changed.  Any overhead that is
introduced should be fixed and small, minimizing the cost
of implementation in switch / NIC pipelines.  Low protocol overhead
also means low bandwidth overhead for small packets, minimizing
impact to packet-per-second (PPS) load and bandwidth efficiency.
We make very few assumptions about which packets and devices CSIG
is enabled on.  Device implementations must be able to process CSIG on packets at line rate with minimal CPU involvement.  Keeping the
overhead small and fixed allows for CSIG to be enabled on every
single packet at line rate.  This is important because deployments may choose to enable CSIG on every packet rather than on a small sample of packets.</t>
  <t>Works easily under Tunneling and Encryption: Tunnels are broadly used in modern deployments e.g., Traffic-engineering systems and Cloud traffic frequently use tunnels. CSIG is designed to easily support end-to-end signaling on devices even in the presence of complex tunneling deployments. This is in contrast to other in-band telemetry schemes that put more pressure on the ASICs to relocate metadata across inner and outer headers to work in the presence of tunnels. In addition, CSIG also works with encrypted packets, including PSP, IPSec and 802.1AE MAC Security.</t>
  <t>Incremental Deployability: CSIG allows incremental deployment, where the mechanism can be deployed gradually into domains where some devices may support the new protocol and others may not.  This document addresses interoperability in heterogeneous networks, and addresses backward compatibility with legacy devices. We envision CSIG to be broadly valuable across wired networks, although our target domain for initial usage is datacenter networks. We make minimal assumptions about the network architecture around tunneling, number of hops (diameter), routing, topology etc. Configuring CSIG for end-to-end consistency in a private network, or deployments over the Internet are not in scope for this document.</t>
</list></t>

</section>
<section anchor="conventions"><name>Conventions</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in RFC 2119 <xref target="RFC2119"></xref>. 
In this document, these words will appear with that interpretation only when in ALL CAPS. Lower case uses of these words are not to be    interpreted as carrying significance described in RFC 2119.</t>

</section>
<section anchor="csigprotocol"><name>Congestion Signaling Protocol</name>

<t>CSIG protocol defines two components in the packet header to achieve
end to end congestion signaling in a production network.</t>

<t><list style="symbols">
  <t>CSIG-tag: An L2 protocol that end hosts and transit devices
participate in.</t>
  <t>CSIG Reflection: A flexible L4+ protocol that only end hosts
participate in.</t>
</list></t>

<t>CSIG-tag is the core component of the CSIG specification.  It enables
end hosts to request network signals of interest and for transit
devices to provide these signals to end hosts over the specified
packet header bits.</t>

<t>However, to achieve end-to-end CSIG, CSIG-tag MAY be combined with
the CSIG reflection protocol to expose the signals of interest to the
relevant endpoints or consumers where the signals are needed.</t>

<t>This section first describes the header formats for CSIG-tag and CSIG
reflection.  Then it describes the life of a CSIG packet, outlining
the different roles of network devices in the context of CSIG, and
how these two packet header mechanisms work together to achieve end-
to-end signaling.</t>

<section anchor="csighdr"><name>CSIG-tag Header Format</name>

<t>CSIG tag is a fixed size tag at the layer 2 header.</t>

<t>CSIG-tag placement in various packet encapsulations is shown below
for completeness.  It is always the last tag in the layer 2 header.</t>

<t>ARPA:  dstmac / srcmac / csig-tag / ethertype / payload</t>

<t>802.1q:  dstmac / srcmac / vlan-tag / csig-tag / ethertype / payload</t>

<t>802.1ad:  dstmac / srcmac / vlan-tag / vlan-tag / csig-tag /
ethertype / payload</t>

<t>802.1ad tunnel:  dstmac / srcmac / vlan-tag / vlan-tag / vlan-tag /
vlan-tag / csig-tag / ethertype / payload</t>

<t>802.1ae:  dstmac / srcmac / security-tag / vlan-tag / csig-tag /
ethertype / payload</t>

<t>Consequently, the placement / offset of the CSIG tag is not affected
by the headers and payload at layers 3 and above. Layer 2.5 headers, such as MPLS, are also placed after the CSIG tag and do not impact its offset.</t>

<t>CSIG-tag is defined in two variants - Compact and Expanded. Each variant has a dedicated TPID codepoint to allow devices to infer which variant is in use.
Each variant supports a distinct set of requirements with respect to production deployment and identifies contrasting trade-off points in the solution space. Deployment considerations are discussed in <xref target="incrementaldeployment"/>.</t>

<t>Structurally, the compact CSIG-tag variant resembles a single VLAN tag and the expanded CSIG-tag variant resembles a double VLAN tag. This structural similarity is intentional and the reasons are elaborated in <xref target="backwardcompatibility"/>.</t>

<section anchor="compactcsig"><name>Compact Format</name>

<t>CSIG-tag compact format is as shown, with 2B allocated for the CSIG Tag Protocol ID (TPID) and 2B allocated for the data fields.</t>

<figure title="CSIG-tag Compact version" anchor="compactcsigfig"><artwork><![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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             TPID              |  T  |R|    S    |      LM     |       
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |0-15|  TPID  : IEEE allocated Tag Protocol ID for 4 Byte CSIG tag
   |16-18| T     : Signal Type (0:min(ABW), 1: min(ABW/C), 2:max(PD))
   |19|    R     : Reserved
   |20-24| S     : Signal Value: Bucketed (32 configurable buckets)
   |25-31| LM    : Locator Metadata of bottleneck device / port
]]></artwork></figure>

</section>
<section anchor="expandedcsig"><name>Expanded Format</name>

<t>CSIG-tag expanded format is as shown, with 2B allocated for the Tag Protocol ID (TPID) and 6B allocated for the data fields</t>

<figure title="CSIG-tag Expanded version" anchor="expandedcsigfig"><artwork><![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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             TPID              |               LM              |       
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
   |   T   |                  S                    |       R       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |0-15|  TPID : IEEE allocated Tag Protocol ID for 8 Byte CSIG tag
   |16-31| LM   : Locator Metadata of bottleneck device / port
   |0-3|   T    : Signal Type (0:min(ABW), 1: min(ABW/C), 2:max(PD))
   |4-23|  S    : Signal Value: Uniformly quantized
   |24-31| R    : Reserved for future use
]]></artwork></figure>

</section>
<section anchor="csig-tag-data-fields-description"><name>CSIG-tag Data fields Description</name>

<t>This section describes the format and usage of data fields within the CSIG-tag</t>

<section anchor="signal-type"><name>Signal Type</name>

<t>The Signal Type field T is three (four) bits long in the compact
(expanded) format and indicates the type of signal being carried in
the CSIG-tag.  End hosts set the signal type T and request it on each packet of interest.  Up to 8 signal types are supported in the compact
format, and up to 16 signal types are supported in the expanded
format.  This draft concretely defines three signals: min(ABW),
min(ABW/C) and max(PD), elaborated in <xref target="signals"/> and <xref target="usecases"/>. The remaining codepoints are reserved for future signals, and may be defined and used in future versions of CSIG.</t>

<t>A single packet can carry at most one Congestion Signal.  However,
end hosts MAY obtain multiple signals for a single 5-tuple flow by
requesting different signal types on alternating packets of a flow or
in a round-robin fashion across packets.  Therefore, end hosts need
not tie a single flow to a specific signal type, and MAY obtain all
supported CSIG signals for a single flow.</t>

</section>
<section anchor="signal-value"><name>Signal Value</name>

<t>The Signal Value field S is 5 bits (20 bits) long in the compact
(expanded) format and captures the value of the signal specified by
Signal Type T.  End hosts set the initial Signal Value S alongside
the requested Signal Type T, and each transit device along the packet
path in the network MAY modify S in accordance with the e2e signal
being computed.  E.g., For signals that are min() aggregations, end
hosts set the initial value of S to the maximum allowable value of
the signal or its encoding thereof, and transit devices perform
compare-and-replace to compute the min() across signals of individual
devices on the packet path.</t>

<t>In the compact format, the 5-bit Signal Value is bucketed with 32 fully configurable buckets. Each bucket is configured with (low, high) value range. This configuration is specific to each Signal Type and MAY vary across Signal Types.  This allows the Signal Value representation to be tailored to the specific needs of each Signal Type.  For example, in typical use cases of available bandwidth, it is more useful to have higher granularity at lower values of the signal (i.e., when ABW is close to 0) than at higher values of the signal.  This is because lower values of ABW have greater impact on application control decisions e.g., knowing whether there was 0 Gbps vs 1 Gbps available on a path makes a larger difference than knowing if there was 399 Gbps vs 400 Gbps available.  <xref target="encodings"/> shows how the buckets could be defined in order to provide such a non-linear encoding of value-ranges to buckets.  Such configurable encodings allow capturing useful information about the signal with fewer bits and is a core feature of the compact CSIG format.</t>

<t>In the expanded format, Signal Value is uniformly quantized into a 20
bit value.  The unit of quantization is configurable on a per Signal
Type basis, depending on the minimum and maximum value that needs to
be represented with the given bits.  The higher bit length allows for
enhanced signal granularity and fewer configuration knobs in domains
where the expanded CSIG format is viable to deploy (<xref target="greenfield"/>).  20-bits are sufficient to represent a wide range of values with high granularity. As an example, with a 8Mbps quantum for min(ABW), the signal value field can represent up to a max of 8Tbps. With a 128ns quantum for max(PD), the signal value field can represent up to a max of 128ms. More discussion on signal-specific quanta is in <xref target="encodings"/>.</t>

<t>Signal quantization / bucketing parameters are configured directly at
the transit devices where the signal is computed.  End hosts do not
explicitly request or negotiate these parameters. As described in <xref target="signals"/>, all devices MUST be configured with the same quantization / bucketing parameters for each signal type, in order to correctly compute the requested signal along packet paths.</t>

</section>
<section anchor="locatormetadata"><name>Locator Metadata</name>

<t>Locator Metadata field LM is an optional 7 bits (16 bits) in the
compact (expanded) format.  It captures relevant metadata about the
bottleneck port or device, where the notion of bottleneck is specific
to individual signal types.  Locator Metadata MAY include compressed
attributes about the bottleneck that is relevant for the use case
e.g., capacity of the bottleneck port, stage of the bottleneck device
in the data center topology, orientation of the bottleneck port -
uplink / downlink.  LM MAY also include expanded attributes of the bottleneck (e.g., port ID, TTL). This document provides recommendations for the type of information that locator metadata MAY carry, but it does not require any specific set of metadata to be supported.  Metadata that is useful and viable to support will depend on the production setting, which is out of scope for this document.  Instances of CSIG deployment MAY include locator metadata with custom-defined metadata beyond those described in this document.  <xref target="lmimplementation"/> discusses requirements for supporting LM in devices.</t>

<t>End hosts initialize LM to a default value.  Transit devices that do
not update the Signal Value S on a given packet MUST NOT alter LM on
the packet.  Transit devices that update S on a packet MUST update
LM on the same packet.</t>

</section>
</section>
</section>
<section anchor="csig-reflection-header-format"><name>CSIG Reflection Header Format</name>

<t>CSIG reflection enables consumption of tag data fields at the point
where the signals are needed for telemetry or control.  This
mechanism is particularly relevant for sender-driven / source-based
telemetry and control.  For receiver-driven transports and
controllers, CSIG reflection may not be necessary as the signals on
the CSIG tag are available at the receiver without reflection (See
<xref target="lifeofapacket"/>).</t>

<t>This document provides recommendations on how CSIG reflection SHOULD
be implemented, and provides the framework to make the implementation
deployment-specific.</t>

<t>CSIG reflection header is a separate header from the CSIG tag,
implemented at layer 4 or above.  The location of the header and the
choice of which packets carry the header are transport-specific.  As
an example, the header can be carried on TCP ACK packets from the
receiver back to the sender.  Note that the presence of ACK
coalescing, piggybacked ACKs, Selective Acknowledgements (SACK) etc.
can impact the behavior of CSIG reflection.  More generally, there
may not be a 1:1 mapping between forward and reverse path packets.
In a scenario where the transport implements ACK coalescing, the CSIG
reflection header SHOULD reflect the latest CSIG-tag data fields
received across the packets being acknowledged or a more advanced
summary of the CSIG-tag data fields across the packets being
acknowledged.  It is important to note that since Signal Type is
chosen on a per-packet granularity, a coalesced ACK may acknowledge
multiple packets that carry different signal types in their CSIG-
tags.  In such a scenario, the reflection header MAY only reflect one
of the signals.  The sender transport should choose Signal Type for packets in a way that ensures that it can continue to receive all signals of interest.</t>

<t>CSIG reflection header MAY include all of the CSIG data fields i.e.,
2B for the compact version and 6B for the expanded version.  However,
one could optimize header space and include only a subset of the data
fields if the consumer is interested only in a subset of signals or
locator metadata.</t>

<t>CSIG reflection is an end-host-only protocol and transit devices do
not participate in it.  Therefore, CSIG reflection header can be
incorporated in portions of the packet that are e2e encrypted via PSP
or IPSec.</t>

<t>The following subsections discuss locations in the packet header
where CSIG reflection could be implemented for different transports</t>

<section anchor="reflection-in-tcp"><name>Reflection in TCP</name>

<t>Reflection in TCP is typically achieved via TCP options. CSIG Reflection can be implemented via a new TCP Option, identified by a unique Kind.</t>

<figure title="CSIG Reflection TCP Option" anchor="reflectiontcp"><artwork><![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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Kind     |    Length     |       CSIG data fields         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

   Kind              : Unique codepoint to recognize TCP CSIG option
   Length            : Length in bytes of the CSIG data fields 
                       carried in the options payload
   CSIG data fields  : Values reflected from receiver to sender
]]></artwork></figure>

</section>
<section anchor="reflection-in-non-tcp-transports"><name>Reflection in non-TCP Transports</name>

<t>Several transports such as QUIC <xref target="RFC9000"></xref> and PonyExpress <xref target="PONYEXPRESS"></xref> are built atop UDP. Reflection in UDP can be achieved by including CSIG data fields in the UDP payload from receiver to sender. For unidirectional UDP traffic, an out-of-band reverse connection from the receiver to the sender may be necessary for CSIG reflection.</t>

<t>As an example, PonyExpress <xref target="PONYEXPRESS"></xref> is a custom transport implemented within a userspace host networking stack. It supports a flexible L4 wire protocol that periodically changes as new features are added (Sec 3.1 in Snap). CSIG reflection can be implemented as additional bytes within this wire format.</t>

<figure title="PonyExpress CSIG Reflection header" anchor="reflectionudp"><artwork><![CDATA[
                   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6                                
                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   |    Flags    | CSIG data fields|
                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>For simplicity and to avoid the need for negotiation, the CSIG reflection header can be carried on all packets independent of whether CSIG is enabled on them. The <spanx style="verb">Valid</spanx> bit in the Flags field can be set to 1 for packets that carry valid data fields in the reflection header. In certain deployments, negotiation is unavoidable for a variety of reasons. <xref target="negotiation"/> provides details regarding options for negotiation.</t>

</section>
</section>
<section anchor="lifeofapacket"><name>CSIG Operation - Life of a packet</name>

<t>This section describes the end-to-end operation of CSIG with the
walkthrough of the life a packet.  It assumes that all nodes in the path are CSIG-capable and omits the negotiation phase.  Details of negotiation are covered in 
in <xref target="negotiation"/></t>

<figure title="Life of a CSIG packet. Underlined values show the forward path bottlenecks 
for the corresponding signal types" anchor="walkthrough"><artwork><![CDATA[
                            Forward Path
     --------------------------------------------------------->

     <---------------------------------------------------------
                            Reverse Path

+------+   +-----+   +------+  +------+  +------+  +-----+   +------+
| Host +---+ ToR +---+ Aggr +--+ Core +--+ Aggr +--+ ToR +---+ Host |
+------+   +-----+   +------+  +------+  +------+  +-----+   +------+

        C:   800G      100G      100G      100G      40G

      ABW:   100G       95G       70G       90G      20G
                                                     ---
    ABW/C:  12.5%       95%       70%       90%      50%
            -----
        D:   10us       3us      18us       5us      8us
                                 ----
]]></artwork></figure>

<section anchor="forward-path"><name>Forward Path</name>

<t>The sender end-host first constructs a CSIG-tagged packet for a flow of interest and sends out the packet with the tag data fields initialized. The transport determines these initial values for the packet, including Signal Type to request and default values for the other data fields.  Each transit device performs a compare-and-replace on the CSIG-tag to optionally update the Signal Value and Locator Metadata fields on the tag.  As the packet traverses through the network, the CSIG-tag data fields accumulate the desired aggregation of the requested signal.</t>

</section>
<section anchor="reverse-path"><name>Reverse Path</name>

<t>When the CSIG-tagged packet reaches the receiver end-host, the data fields in the CSIG tag are extracted and delivered to the transport layer at the receiver.  The transport stores the data fields of the packet to be reflected, or a summary of these fields across packets.  It reflects these data fields in the layer-4 CSIG reflection header on packets traversing the reverse path from receiver to sender. The CSIG reflection header is unmodified as the packet travels from receiver to sender.  The sender extracts the CSIG data fields from the CSIG reflection header of the incoming packet, and hands it to the transport layer for use in applications at the sender.  As a result, the sender transport learns the desired signal for a flow within approximately one round-trip time.</t>

</section>
<section anchor="multiple-signals"><name>Multiple signals</name>

<t>The transport layer has a significant role to play in making CSIG usable. Although the CSIG data fields are carried on packets, the measurements are ultimately relevant at the flow / connection level for specific paths. 
If the sender transport desires to obtain multiple signals for the same flow, it MAY choose Signal Type on a per-packet basis (e.g., in a round robin fashion across the flow&#39;s packets), and internally keep
track of all of the requested signals as part of the flow&#39;s state
variables.  This approach allows the sender transport to use all supported CSIG signals for use cases such as congestion control, load balancing and multipathing.</t>

</section>
</section>
<section anchor="device-roles"><name>Device Roles</name>

<t>CSIG has three participating entities, each with their own roles and
responsibilities for achieving end-to-end congestion signaling.</t>

<section anchor="sender-host"><name>Sender host</name>

<t>The sender host is responsible for</t>

<t>(i) Constructing CSIG-tagged packets for flows of interest and initializing the CSIG-tag data fields on each packet as specified by the transport, and</t>

<t>(ii) Parsing the CSIG reflection header received in incoming packets
and extracting CSIG data fields for use in the sender transport / applications.</t>

<t>Only the sender is allowed to insert CSIG-tags into packets.</t>

</section>
<section anchor="transit-device"><name>Transit device</name>

<t>Transit devices are responsible for</t>

<t>(i) Computing and tracking Congestion signals such as ABW and ABW/C of each port and hop delay per packet</t>

<t>(ii) Parsing the CSIG-tag based on the TPID code point on incoming
packets to identify the Signal type being requested, and</t>

<t>(iii) Performing compare-and-replace on the Signal value and locator
metadata fields on the CSIG-tag based on the aggregation
corresponding to the requested signal type (min / max)</t>

<t>Transit devices MUST NOT add CSIG tags to incoming packets that are
not already CSIG-tagged.  Transit devices MAY delete the CSIG tag
before forwarding the packet.  This functionality can be exercised
when downstream devices are not CSIG-capable.  Further discussion on
this topic is in <xref target="incrementaldeployment"/> on Incremental Deployment of CSIG.</t>

</section>
<section anchor="receiver-host"><name>Receiver host</name>

<t>The receiver host is responsible for</t>

<t>(i) Extracting the CSIG-tag on incoming packets and exposing the data
fields to the transport layer and/or receiver-driven applications</t>

<t>(ii) Inserting and populating the CSIG Reflection header at the
transport layer for packets traversing the reverse path to the
sender.</t>

</section>
<section anchor="host-roles-for-bidirectional-flows"><name>Host roles for bidirectional flows</name>

<t>Note that for bi-directional flows, the Sender and Receiver are
specific to each direction within the flow.  For a bi-directional
flow between hosts A and B,</t>

<t>(i) A plays the Sender host role and B plays the Receiver host role
for data packets traveling from A to B, and similarly</t>

<t>(ii) B plays the Sender host role and A plays the Receiver host role
for data packets traveling from B to A.</t>

<t>In this scenario, packets traversing from A to B contain both a CSIG-
tag that captures the congestion signals on the forward A--&gt;B path,
and a CSIG reflection header that captures the CSIG data fields of
the reverse B--&gt;A path.  Equivalently, packets traversing from B to A
contain both a CSIG-tag that captures the congestion signals on the
forward B--&gt;A path, and a CSIG reflection header that captures the
CSIG data fields of the reverse A--&gt;B path</t>

</section>
</section>
</section>
<section anchor="signals"><name>Signals in CSIG</name>

<t>As described in the previous section, Signal Type indicates the type
of congestion signal that CSIG-tag carries on each packet.  Up to
8 signal types are supported by the compact format and up to 16
signal types are supported by the expanded format.</t>

<t>In this section, we concretely define three signals driven by use
cases described in <xref target="usecases"/>.  While <xref target="usecases"/> covers how these three
signals are useful to applications, this section focuses on precise
definitions of these signals and how they may be implemented on
transit devices.</t>

<t>Note for future extensions: Signals in CSIG are intended to be aggregation functions of
individual per-hop or per-port signals across the path of a packet.
The typical definition of such signals with max / min aggregations
captures the notion of a path bottleneck for different definitions of
bottleneck.  However, structurally, the format supports arbitrary read-modify-write operations, including aggregations such as max, min, count and sum, allowing future use cases to leverage this structure for new signals.</t>

<section anchor="minimum-available-bandwidth-minabw"><name>Minimum Available Bandwidth - min(ABW)</name>

<t>min(ABW) captures the minimum absolute available bandwidth (in bps) across all the ports in the packet path. Available bandwidth is defined per egress port on each device.</t>

<section anchor="abwcomputation"><name>ABW Computation</name>

<t>ABW can be computed using one of many algorithm variants, each having implications on HW or SW implementation complexity, timescales of computation and accuracy of the signal. 
In its rudimentary form, the raw ABW for a given egress port <spanx style="verb">p</spanx> over a time interval <spanx style="verb">delta_t</spanx> can be computed as follows:</t>

<figure><artwork><![CDATA[
// delta_txbit is the number of bits that exited on the wire 
utilization_bps[p] = (delta_txbit[p]) / delta_t; 
// capacity_bps[p] captures the link speed of port p
abw_bps[p] = capacity_bps[p] - utilization_bps[p];
]]></artwork></figure>

<t>Implementation of these computations relies on at least one of the following capabilities in the devices:</t>

<t><list style="symbols">
  <t>Timer-based computations: Most networking ASICs maintain hardware counters that track the number of bits that exit on each egress port. To compute available bandwidth, a periodic-timer thread in SW or HW triggers the computation and update of available bandwidth every <spanx style="verb">delta_t</spanx> time interval , where  <spanx style="verb">delta_t</spanx> is a configurable parameter.</t>
  <t>Per-packet computations: In this alternative, available bandwidth is computed and updated on every packet that is processed via the egress pipeline, typically in HW e.g., via Exponential Weighted Moving Average (EWMA) estimation where the weights are configurable. <spanx style="verb">delta_t</spanx> is not an explicit parameter in this approach, and is implicitly determined by EWMA weights.</t>
</list></t>

<t>Variants such as Discounted Rate Estimator (DRE) <xref target="CONGA"/> use a combination of per-packet updates and timer-based approaches.</t>

</section>
</section>
<section anchor="maximum-link-utilization-maxuc-or-minabwc"><name>Maximum link utilization - max(U/C) or min(ABW/C)</name>

<t>ABW/C captures the fraction or percentage of available bandwidth on a given link relative to the link&#39;s capacity.  min(ABW/C) captures the link utilization bottleneck along the path of the packet. This signal is most relevant in paths with heterogeneous link speeds, where it distinguishes itself from min(ABW). min(ABW/C) is equivalent to max(U/C), where</t>

<figure><artwork><![CDATA[
U = utilization of a given egress port in bps
C = capacity of a given egress port in bps
ABW = available bandwidth of a given egress port in bps
]]></artwork></figure>

<t>Therefore, max(U/C) = max (1 - ABW/C) = 1 - min(ABW/C)</t>

<section anchor="abwc-computation"><name>ABW/C Computation</name>

<t>ABW/C can be computed from ABW as follows:</t>

<figure><artwork><![CDATA[
// Represents fraction of available bandwidth on port p
// relative to the port's capacity.
abwc_frac[p] = abw_bps[p] / capacity_bps[p];
]]></artwork></figure>

<t>Algorithms for ABW computation described in <xref target="abwcomputation"/> also apply to ABW/C computation, except that the resulting value is normalized by the port capacity. Quantization / bucketing is performed after normalization.</t>

</section>
<section anchor="minabw-vs-minabwc-bottlenecks"><name>min(ABW) vs min(ABW/C) bottlenecks</name>

<t>On paths with heterogeneous link speeds, min(ABW) and min(ABW/C) bottlenecks are not necessarily the same ports. Figure 2 shows an example where these two bottlenecks are different. Each type of bottleneck has its own value, as demonstrated in <xref target="usecases"/>.</t>

</section>
</section>
<section anchor="shared-requirements-for-minabw-and-minabwc"><name>Shared requirements for min(ABW) and min(ABW/C)</name>

<section anchor="algorithm-requirements"><name>Algorithm Requirements</name>

<t>To support min(ABW) or min(ABW/C) in CSIG, the device SHOULD support raw ABW computation with a configurable delta_t, and MAY support additional algorithms such as EWMA or DRE. This requirement enables the consistent interpretation of <spanx style="verb">timescale</spanx> over which available bandwidth is computed. This consistent interpretation allows end-hosts to tune their control decisions based on this timescale e.g., in relation to the flow&#39;s RTT.</t>

</section>
<section anchor="timescale-and-accuracy-requirements"><name>Timescale and Accuracy Requirements</name>

<t>CSIG does not set strict requirements on the delta_t values to be
supported by the implementation, except that it SHOULD be
configurable to cover the range of RTTs in the network e.g., {10us, 100us, 1ms, 10ms, 100ms, 1s etc.}.  Although one
would expect all devices on a packet path to compute ABW at similar
timescales to provide a consistent path-wide view, CSIG does NOT set
strict requirements on the consistency of delta_t parameters chosen
across the devices of a packet path.  Choices of signal accuracy and
timescales are a function of the use case and are not enforced by
CSIG.  End hosts MAY use EWMA across packets of a flow to calculate
ABW or ABW/C over a longer timescale when CSIG on each packet carries
ABW or ABW/C over shorter timescales.  This technique is useful when
flows traversing a given egress port span a wide range of RTTs while
ABW computation over the egress port is fixed to a chosen timescale
at each transit device.</t>

</section>
<section anchor="bucketing-quantization-requirements"><name>Bucketing / Quantization Requirements</name>

<t>The computed ABW or ABW/C values MUST be compressed to fit in the available Signal value bits on the CSIG-tag. The device MUST support 32 fully configurable ABW buckets and ABW/C buckets for compact CSIG, and configurable quanta for uniform quantization in expanded CSIG. All devices along the packet path MUST be configured with the same buckets / quanta per signal type in order to correctly compute min(ABW) or min(ABW/C) along the path. <xref target="encodings"/> provides examples of these configurations.</t>

<t>Each transit device performs a compare-and-replace, i.e., updates the signal value on the CSIG tag if the incoming ABW or ABW/C signal value on the packet is higher than the device&#39;s locally computed ABW or ABW/C value for the packet&#39;s egress port, post bucketization / quantization. E.g.,</t>

<figure><artwork><![CDATA[
// Update the signal value on packet if current hop is the bottleneck
pkt->csig_tag->abw = min(pkt->csig_tag->abw, egr_port->abw)
]]></artwork></figure>

</section>
<section anchor="qos-requirements"><name>QoS requirements</name>

<t>min(ABW) and min(ABW/C) are unambiguous signals with low implementation complexity on network devices. For simplicity, these definitions intentionally do NOT distinguish across QoS classes that may share the egress port. Available bandwidth per QoS class on an egress port is complex to define and meaningfully interpret since it depends on the scheduling policy (Strict Priority / WRR / Deficit WRR), buffer carving configuration and other policies (e.g., AQM) associated with QoS. <xref target="usecases"/> describes the applications of min(ABW) and min(ABW/C) as defined. We leave QoS-based variations of these signals and their potential use cases as future work.</t>

</section>
</section>
<section anchor="maximum-per-hop-delay-maxpd"><name>Maximum Per-hop Delay - max(PD)</name>

<t>max(PD) captures the maximum per-hop delay experienced by a packet among all the hops in the packet path. Per-hop delay PD is the time spent by the packet in the device pipeline. It MAY include link layer delays or it MAY only include the delays observed in the forwarding pipeline.</t>

<section anchor="per-hop-delay-computation"><name>Per-hop Delay Computation</name>
<t>Unlike ABW and ABW/C which are per-port signals, PD is a per-packet signal. It consists of PHY, MAC and switch pipeline delay experienced by the packet. Pipeline delay is the most relevant component as it captures congestion related queueing delay. Device implementations MAY track ingress and egress timestamps explicitly for each packet and perform a diff in the final stages of the pipeline. Precise definitions of these stages depend on the architecture of the device. For example, some devices could leverage existing timestamping support from tail timestamping capabilities for this purpose.</t>

</section>
<section anchor="requirements"><name>Requirements</name>

<section anchor="algorithm-requirements-1"><name>Algorithm Requirements</name>

<t>To support max(PD) in CSIG, the device SHOULD support per-packet tracking of delay experienced through the device.</t>

</section>
<section anchor="accuracy-requirements"><name>Accuracy Requirements</name>

<t>It is desirable to have minimal gaps in the components of packet delays captured by the device. However, CSIG does NOT set strict requirements on the accuracy of PD to be supported by the implementation.</t>

</section>
<section anchor="bucketing-quantization-requirements-1"><name>Bucketing / Quantization Requirements</name>

<t>The computed delay values MUST be compressed to fit in the available Signal value bits on the CSIG-tag. The device MUST support 32 fully configurable delay buckets for compact CSIG, and configurable quanta for uniform quantization in expanded CSIG. All devices along the packet path MUST be configured with the same buckets / quanta to correctly compute max(PD) along the path.</t>

<t>Each transit device performs a compare-and-replace, i.e., updates the signal value on the CSIG tag if the incoming delay signal value on the packet is higher than the device&#39;s locally computed delay for the packet, post bucketization / quantization. E.g.,</t>

<figure><artwork><![CDATA[
// Update the signal value on packet if current hop is the bottleneck
pkt->csig_tag->pd = min(pkt->csig_tag->pd, device->pkt->pd)
]]></artwork></figure>

</section>
<section anchor="qos-requirements-1"><name>QoS requirements</name>
<t>Delay experienced by the packet on a device, as defined, is implicitly a QoS-specific signal. This is because the packet is subject to QoS policies as it traverses through the device pipeline, including prioritization, scheduling and buffering. For example, a high priority packet may see smaller delays than low priority packets. Therefore, the delay measured for the packet SHOULD include components in the pipeline where QoS policies are applied.</t>

</section>
</section>
</section>
<section anchor="lmimplementation"><name>Locator Metadata Implementation</name>

<t>Locator metadata (LM) captures information about the bottleneck
device or port, as described in <xref target="locatormetadata"/>.  In this section, we
discuss requirements for supporting LM in CSIG, and provide
recommendations for commonly useful attributes to carry in LM.</t>

<section anchor="requirements-1"><name>Requirements</name>

<t>A single deployment MAY choose a subset of the attributes in
<xref target="attributes"/> and/or newly defined attributes beyond those listed in
<xref target="attributes"/> to include in LM.  However, the total size of the individual attributes MUST be within 7 bits for Compact CSIG and within 16 bits for Expanded CSIG.</t>

<t>CSIG does not set strict requirements on the LM internal format i.e.,
how the individual attributes are organized among the available LM
bits.  However, this LM internal format MUST be consistent across
devices in the deployment domain so that the end hosts can
consistently interpret these bits.  The LM internal format MAY be
specific to each signal type.</t>

<t>Devices SHOULD support configuring per-port values for LM to be
written on the CSIG-tag.  Devices MAY provide more granular
configurability of LM based on Signal type as well.  CSIG packets
egressing on a given port that have their Signal Value updated by the
device MUST be updated with the LM corresponding to the port and
Signal Type.</t>

</section>
<section anchor="attributes"><name>Attributes</name>

<t>Attributes can be designed to capture the level of resolution desired
by use cases for pinpointing the bottleneck.  Attributes may be
encoded to fit within the limited number of LM bits available in
CSIG.</t>

<t>We separate the list of attributes into compact attributes and
expanded attributes.  Compact attributes are motivated by the
limited number of LM bits available in Compact CSIG, and therefore
capture only the essential information about the bottleneck that is
necessary for the use cases i.e., to inform control decisions or
telemetry.  Expanded attributes provide higher resolution information
about the bottleneck, and can aid in directly pinpointing bottleneck
devices or ports.  Expanded attributes typically require more bits and
are hence more suited for Expanded CSIG.</t>

<t>Examples of attributes are listed below.</t>

<section anchor="compact-attributes"><name>Compact Attributes</name>

<t><list style="symbols">
  <t>Link capacity: Encodes the capacity of the bottleneck link.  In
typical deployments, the number of link speeds deployed is a small
set, can be encoded using &lt;= 5 bits.</t>
  <t>Stage of the bottleneck: Encodes the stage of the topology where
the bottleneck device / port is located.  For example, in a
5-stage clos topology, the stage of the device can be encoded with
3 bits.</t>
  <t>Link orientation: Encodes the direction of a port in the context
of the network topology.  For example, with three categories -
uplinks, downlinks and side-links - link orientation can be
encoded using 2 bits.</t>
</list></t>

</section>
<section anchor="expanded-attributes"><name>Expanded Attributes</name>

<t><list style="symbols">
  <t>Port ID: Encodes a unique identifier for each port within a
deployment domain.</t>
  <t>Device ID: Encodes a unique identifier for each device within a
deployment domain.</t>
  <t>TTL (Time-to-live): Captures the TTL value of the packet at the
bottleneck device, represented using 8-bits.  End hosts can use
this attribute to infer the hop number at which the packet was
bottlenecked.</t>
</list></t>

<t>LM attributes and encoding schemes are ultimately deployment specific
and use-case specific.  CSIG supports a flexible specification of LM
to accommodate a variety of requirements and future applications.</t>

</section>
</section>
</section>
</section>
<section anchor="incrementaldeployment"><name>Incremental Deployment of CSIG.</name>

<t>Most production networks are heterogeneous, with a mix of network
devices across generations.  This document addresses the brownfield
deployment of CSIG in a heterogeneous network, where there may be a
mix of devices that offer varying degrees of support for CSIG packet
construction and processing.</t>

<section anchor="csig-stripping-a-per-egress-port-primitive"><name>CSIG Stripping: A per egress-port primitive</name>

<t>Before describing incremental deployment, we introduce the idea of
CSIG stripping, an action primitive which is foundational to
deploying CSIG in a heterogeneous environment.</t>

<t>Devices that support CSIG MUST be capable of removing the CSIG tag
before forwarding the packet.  Devices MUST allow configuring CSIG-
stripping on a per egress-port basis.  If a port is configured to
strip CSIG, then all CSIG-tagged packets that egress on this port
must have the tag removed before being forwarded.</t>

<t>In the following sections, we describe how this capability can enable
incremental deployment.</t>

</section>
<section anchor="levelsofcsigsupport"><name>Levels of CSIG Support</name>

<t>We first classify devices into three simplified categories based on
their level of CSIG support.  In the subsequent sections we describe
how CSIG can interoperate with each category of device.  Note that
the level of support is a function of the tag placement and whether
the compact or expanded CSIG tag format is used as shown in
<xref target="csighdr"/>.</t>

<section anchor="discard"><name>Discard</name>

<t>Devices in this category are not capable of recognizing or parsing
CSIG tagged packets.  If such packets are received, they will simply
be dropped.</t>

</section>
<section anchor="pass-through"><name>Pass-through</name>
<t>Devices in this category are able to recognize and parse CSIG tagged
packets, and transparently forward the packet with the tag intact or
with the tag stripped to neighboring devices (in the case of transit devices) or to the end host transport layer (in the case of end hosts).  However, they do not support updating the
CSIG data fields on the tag.</t>

<t>Some devices that do not natively support CSIG may be configured to
support pass-through mode for CSIG if they support VLAN tags with
configurable TPIDs.  This is discussed in more detail in 
<xref target="backwardcompatibility"/>.</t>

</section>
<section anchor="complete"><name>Complete</name>
<t>Devices in this category support the complete CSIG protocol,
including recognition, parsing, forwarding, tag-stripping, signal
computation, and signal updates on the tag.  However, only a subset
of signal types may be supported.</t>

<section anchor="software-assisted-support"><name>Software-assisted support</name>
<t>It is noteworthy that in some devices that do not natively support
CSIG, resources available for VLAN tag processing can be repurposed
to support CSIG for certain signal types using a combination of
software and hardware capabilities.  We refer to this level of
support as software-assisted support.  This capability is discussed
in more detail in <xref target="backwardcompatibility"/>.</t>

</section>
<section anchor="native-support"><name>Native support</name>
<t>Devices that natively support CSIG are explicitly equipped with the
hardware capabilities required to implement the CSIG protocol.</t>

<t>A CSIG domain is a deployment domain where all network devices have complete support or pass-through support for CSIG.</t>

</section>
</section>
</section>
<section anchor="interoperability-in-brownfield-deployments"><name>Interoperability in Brownfield Deployments</name>

<t>In this section, we first define the requirements for CSIG
Interoperability in brownfield deployments. Then, we consider devices with all levels of support described in <xref target="levelsofcsigsupport"/> and describe how these devices MAY be configured to achieve interoperability. Note that the following descriptions apply separately to both Compact and Expanded CSIG-tags.</t>

<texttable title="Interoperability with devices having different levels of CSIG support" anchor="tab-interop">
      <ttcol align='left'>Device category</ttcol>
      <ttcol align='left'>Interop support</ttcol>
      <c>Discard</c>
      <c>Upstream devices must strip CSIG tags before packets reach this device</c>
      <c>Pass-through support only</c>
      <c>Device may strip tag or transparently forward with tag unmodified depending on e2e signal accuracy requirements</c>
      <c>Native CSIG support</c>
      <c>Device updates CSIG-tag as per protocol</c>
      <c>SW-assisted CSIG support</c>
      <c>Device updates CSIG-tag using VLAN match/action with approximate signals computed in S/W agent</c>
</texttable>

<section anchor="requirements-for-interoperability"><name>Requirements for interoperability</name>

<t>Forwarding: The fundamental requirement is that no CSIG-tagged packet
should be dropped in the network due to a lack of CSIG support on a
device.  This requirement means packets with CSIG-tags MUST never
reach devices in the Discard category, or MUST have their CSIG-tag
stripped before reaching such devices.</t>

<t>Negotiation: End hosts / flows SHOULD ensure that the path (including
end hosts and transit devices) is CSIG-capable before enabling CSIG-
tagging on packets.  Devices in the Discard category should not require any changes in order to achieve negotiation. This requirement is to ensure correctness of data fields in end-to-end CSIG operation, and to interoperate with legacy devices or software stacks.</t>

</section>
<section anchor="forwarding"><name>Forwarding</name>

<t>To achieve forwarding interoperability requirements for CSIG, CSIG
stripping may be exercised as shown below</t>

<t><list style="symbols">
  <t>When a neighboring device connected to a given egress port is a
Discard device and cannot parse CSIG packets, this egress port
MUST be configured to strip the tag on outgoing packets to ensure
that the packet does not get dropped downstream.</t>
  <t>When a device supports Pass-through only or does not support the
requested signal type on a CSIG packet, egress ports on this
device MAY be configured to strip the tag on outgoing packets to
ensure that CSIG does not carry inaccurate information.  In some
use cases where it is acceptable for CSIG to miss capturing
signals on certain hops, pass-through devices MAY transparently
forward the packet with the CSIG tag intact.</t>
  <t>At the boundary of a CSIG domain, device ports that are connected to devices outside of the CSIG domain MUST strip the tag to ensure that packets exiting the domain do not contain CSIG-tags.  Only egress ports connected to devices within the CSIG domain SHOULD retain CSIG-tags on outgoing packets.</t>
</list></t>

<t>CSIG packets and non-CSIG packets can be used together in a
brownfield setting.  This requirement means that end hosts MUST be
capable of transmitting and receiving both CSIG packets and non-CSIG
packets, including for the same flow.  A packet marked with CSIG-tag
at the sender host may arrive at the receiver host without the tag.
In addition, Compact CSIG and Expanded CSIG packets may be used
together on the same network.</t>

</section>
<section anchor="negotiation"><name>Negotiation</name>

<t>Support for sending and receiving CSIG-tagged packets may require
software and/or hardware changes on transit devices and end hosts.
In many deployments, particularly those requiring hardware upgrades
to support CSIG (such as Switch or NIC support), version stragglers
continue to exist for long time horizons for a variety of reasons,
and interoperability with such stragglers is a critical requirement.
Without negotiation for CSIG capability, devices that are not CSIG-
compliant may drop CSIG packets and thus blackhole traffic.
Negotiating for CSIG-capability of a path is critical to ensure that
CSIG protocol operates safely end-to-end in a brownfield
deployment.</t>

<t>A path is considered CSIG-capable if end-hosts have at least Pass-through CSIG support and transit devices have Complete CSIG support (native or software-assisted).  Before sending CSIG-tagged packets on a network flow, end-hosts must negotiate for path CSIG-capability.  We discuss one approach to negotiation for path CSIG-capability, which involves two parts: negotiation for transit device support and negotiation for end host support.</t>

<section anchor="negotiation-for-transit-device-support"><name>Negotiation for transit device support</name>

<t>In this section, we describe one simple approach to negotiate CSIG support on transit devices with CSIG stripping.</t>

<t>CSIG stripping can be used to implicitly achieve negotiation by
removing the CSIG-tag from the packet header at or before devices on
the packet path that do not have the desired level of CSIG support.
If the receiver end host receives a CSIG-tagged packet, it serves as
an explicit indication that all devices on the packet path, including
transit devices and end-hosts, have the desired CSIG support.  If the
receiver end host receives a packet without a CSIG-tag, it is an
indication that one or more devices do not have the desired CSIG
support, or that the packet was not tagged at the sender to begin with.  This indication can be implicitly reported to the sender via an
empty / invalid CSIG reflection header and the sender can determine
whether the packet path was CSIG-capable.</t>

<t>This approach assumes that
each device has knowledge about the level of CSIG support in its
immediate neighboring devices, which is viable through configuration in typical private SDN networks. In the absence of centralization, mechanisms such as a new LLDP TLV may be defined to advertise aspects of CSIG support on the device, including compact vs expanded CSIG-tag support, signal types that are supported, pass-through vs complete support etc. We leave the details of such an LLDP extension for future extensions of the protocol.</t>

</section>
<section anchor="explicitneg"><name>Negotiation for end host support</name>

<t>A sender end host may need to explicitly negotiate with the remote end-host to ensure that the host networking stack at the remote host has the desired level of CSIG support.  Ideally such explicit CSIG negotiation should be performed during or before
the initial connection handshake, after which CSIG is enabled /
disabled on packets post connection establishment. It may also be necessary to explicitly negotiate the use of CSIG Reflection in transports, separately from the negotiation for path CSIG-capability. For example, in TCP, negotiation is required to use the CSIG Reflection TCP Option. We leave the details of such negotiation schemes for future extensions of the protocol.</t>

</section>
</section>
</section>
<section anchor="backwardcompatibility"><name>Backward Compatibility via Software-assisted CSIG</name>

<t>Transit devices without native CSIG support MAY participate in CSIG
protocol via a Software-assisted approach.  This allows brownfield
deployments to reap incremental benefits of CSIG without having to
upgrade a significant fraction of device HW on their networks.</t>

<t>Since compact and expanded CSIG tags are structurally similar to
single VLAN-tags and double VLAN-tags respectively, VLAN resources in
a transit device can be repurposed to support CSIG updates.  More
specifically, configurable TPIDs for VLAN tags can be used to treat
CSIG tags as VLAN tags, and VLAN match/action resources for tag
updates in the device can be leveraged to support updating CSIG data
fields on the tag.</t>

<t>For signals such as ABW and ABW/C, a software agent running on the
CPU of a transit device can periodically compute these signals based
on hardware byte counters, and program VLAN match/action rules in the
dataplane to update CSIG data fields based on the computed signals.
Since the match/action rules are in the dataplane, CSIG packets can
be processed at line rate without CPU involvement.  However the
match/action rules themselves can be updated at a slower cadence via
the software agent.</t>

<t>Compact CSIG is designed to enable software-assisted backward
compatibility while operating within the constraints of commonly
available VLAN resources on transit devices.  Backward compatibility
via software is a fundamental feature in the design of Compact CSIG.</t>

<t>Note that it may not be possible to track signal types such as hop
delay per packet in a software agent.  However, approximations of the
signal based on available hardware counters and registers (such as
latency histograms) can be implemented in the agent if software-
assisted support is desired for such signal types.</t>

</section>
<section anchor="greenfield"><name>Greenfield deployments</name>

<t>In greenfield deployments of CSIG domains, all devices in the domain
natively support the CSIG protocol.</t>

<t>Expanded CSIG is designed to leverage greenfield deployments where
backward compatibility, negotiation and interoperability are not
requirements.  It provides enhanced signal resolution via higher bit
width for signal values and locator metadata in comparison to Compact
CSIG.  Expanded CSIG can also support up to 16 signal types.</t>

<t>Devices in Greenfield CSIG domains MUST support CSIG stripping at the
domain boundary to ensure that CSIG packets don&#39;t exit the domain.</t>

</section>
</section>
<section anchor="designrationale"><name>Design Rationale</name>

<t>CSIG&#39;s design choices are shaped by an end-to-end perspective of what
matters to applications and where tradeoffs can be made towards
simplicity and practicality.  In this section, we discuss the
rationale behind CSIG&#39;s design and the advantages it provides over
existing state of the art.</t>

<section anchor="whylayer2"><name>Choice of Layer 2</name>

<t>CSIG-tag offsets at layer 2 are independent of headers and payload at
layer 3 and above, which means that only a small set of tag
placement offsets need to be supported for reading and updating the
header.  This makes device implementations of CSIG simpler.  In
contrast, in-band network telemetry schemes implemented at layer 3
or higher require support for a large set of packet formats as this set grows by the cross-product of formats / encapsulations at each layer.  This complexity forces device implementations to restrict support for only a fraction of packet formats / encapsulations, hindering the adoption and deployment of such schemes.  CSIG-tagging, on the other hand, is simpler to support and deploy since it is at layer 2 and has a fixed offset despite various formats / encapsulation at layer 3 and above.</t>

<t>The choice of layer 2 also makes compatibility with in-network tunneling and encryption simpler, which are common features in data center deployments.</t>

<t><list style="symbols">
  <t>CSIG-tags are, by design, compatible with PSP encrypted packets and IPSec encrypted packets, where Layer 4 headers and payloads may be encrypted.</t>
  <t>CSIG tags are carried through Layer 3 tunnels e.g., IP-in-IP, VxLAN, Geneve, at a fixed offset in the packet header. This avoids the need to copy and relocate CSIG tags across inner / outer headers during encapsulation and decapsulation of packets, which would be necessary if implemented instead at layers 3 or higher.</t>
  <t>CSIG tags are placed as the last header in the Layer 2 header stack to ensure compatibility with layer 2 and layer 2.5 tunneled domains as well. The placement of CSIG tags in MACSec and other Layer 2 encapsulations is shown in the table in <xref target="csighdr"/>.</t>
</list></t>

<t>Most in-band network telemetry schemes are not backward compatible.
However, CSIG tag&#39;s structural similarity to VLAN tags enables
backward compatibility with many devices that don&#39;t have native CSIG
support as described in <xref target="backwardcompatibility"/>.  This allows deployments to reap
the benefits of CSIG without having to upgrade a significant portion
of their network hardware.</t>

<t>In addition, since expanded CSIG is limited to 8B, i.e., the size of
double VLAN tags, the packet parsing depth required on devices to
read and process headers at layer 3 and above is not affected.</t>

<t>In summary, the choice of Layer 2 for CSIG-tag is a key part of CSIG&#39;s simplicity and efficiency, since it keeps device implementations simple while supporting multiple encapsulations and backward compatibility.</t>

</section>
<section anchor="separation-of-headers-for-csig-tag-and-reflection"><name>Separation of headers for CSIG-tag and reflection</name>

<t>CSIG&#39;s design separates the CSIG-tag and CSIG reflection headers into
distinct layers.  This decoupling enables end hosts to develop
different transport-specific implementations of CSIG reflection while
sharing the underlying CSIG-tag mechanism.  This means that transit
device behaviors are not impacted by innovations in CSIG reflection.</t>

<t>In addition, this decoupling enables the separate tracking of forward
and reverse path bottlenecks.  This is important since CCAs typically
prefer to react to congestion on the forward path only and not react
to congestion on the reverse path.  In contrast, in-band schemes that
mix signaling and reflection into the same header do not provide
distinctions between forward and reverse path.</t>

</section>
<section anchor="fixed-size-headers"><name>Fixed-size headers</name>

<t>CSIG&#39;s fixed-size headers constitute less than 0.2% bandwidth
overhead in packets with 4k or 9k MTU.  This means that there is no need for fragmentation or increasing MTU size for the purposes of supporting multiple congestion signals. Furthermore, the performance of network device packets per second (PPS) is minimally impacted by the inclusion of CSIG tag and reflection headers.</t>

<t>The low overhead allows CSIG to be enabled on all live data packets
or explicit probe packets or sampled packets.  This is an
important capability because it allows for the direct quantification
of the bottlenecks experienced by the data packets themselves instead
of having to rely on probes.  However, leveraging CSIG on probes or sampled
packets is still an option for deployments that require such
visibility.</t>

<t>CSIG is designed to perform compare-and-replace (or more generally read-modify-write for future extensions), with a fixed size
header.  Therefore, CSIG is not limited by the number of hops in a
network path (i.e., diameter of the network) unlike schemes that
append information at each hop.</t>

</section>
<section anchor="signal-design"><name>Signal Design</name>

<t>CSIG&#39;s signal design focuses on simple, aggregate signals that are
driven by use cases, as demonstrated in <xref target="signals"/> and <xref target="usecases"/>.</t>

<t>CSIG allows a single packet to carry only one congestion signal.  To
obtain multiple signals at the end hosts, it takes advantage of the
fact that the end host can request different signal types across
multiple packets of a flow.  In contrast, other schemes tend to
overload each packet with a lot of information, including metadata
about multiple signals, which can be limiting.  Moreover, CSIG-tag&#39;s
format is also extensible, which means that it can be adapted to
support additional signal types and locator metadata in the future
without compromising the advantages of CSIG&#39;s design.</t>

<t>A unique feature of Compact CSIG&#39;s design is the ability to fully
configure signal value buckets, which allows for efficient signal
representations with a limited number of bits.  For example, the
encodings can be adjusted to provide greater granularity at value
ranges that are more important to the application, and lower
granularity at ranges that are less important.  Similarly, locator
metadata can be efficiently represented by carrying fewer bits of
relevant compressed attributes of the bottleneck that are important
to applications.  Expanded CSIG, on the other hand, uses uniform
signal quantization for more accuracy and provides even more
flexibility in defining signals and locator metadata with a larger
bit width.</t>

</section>
</section>
<section anchor="usecases"><name>Use Cases defined by Bottleneck Signals</name>

<t>The use cases for CSIG are motivated by congestion control, traffic management and network debuggability. These use cases have always
existed in production before CSIG, often using signals that are
measured end-to-end (such as packet loss and delay), or out-of-band
signals from network devices such as port utilization.  CSIG provides
a boost in performance, efficiency and debuggability by augmenting
existing use cases with explicit in-band measurements.</t>

<t>In this document, we present the use cases for the three signals
defined in <xref target="signals"/>.  At the crux of a signal is the definition of
bottleneck.  Over time we envision use cases for other signals that
would define a bottleneck, e.g., the maximum number of co-sharing
flows on a link.  For each of these new signals, locator metadata can
continue to provide attributes about the bottleneck port such as port
capacity.</t>

<section anchor="congestion-control"><name>Congestion Control</name>

<t>CCA can make use of CSIG signals in at least two different ways.
First, existing CCA can use CSIG values to address blindspots in end-
to-end signals such as packet loss, delay, and delivery rates.  This
use case is immediately relevant as most production networks deploy
some form of end-to-end congestion control including Swift <xref target="SWIFT"></xref>,
and BBR <xref target="BBR"></xref>.  A second way to use CSIG is to design entirely new
congestion control algorithms that use CSIG as their primary signal.
We focus below on the former category.</t>

<t>E2E CCA comes in various forms and for simplicity we describe the use
cases taking Swift CC <xref target="SWIFT"></xref> as the baseline.  Swift is delay-based
congestion control that uses accurate round-trip time (RTT)
measurements done via the NIC hardware timestamps.  These signals can
be applied to other CCA and are NOT limited to Swift.</t>

<t>The interpretation and applications of CSIG for congestion control in lossless networks and networks that use packet spraying is a topic for future research.</t>

<section anchor="using-maximum-per-hop-delay-in-e2e-cc"><name>Using maximum per-hop delay in E2E CC</name>

<t>E2E RTT measurements used in Swift include the queueing delays on all
hops along the flows&#39; path, including the forward and reverse paths.
A consequence of using a lumped delay signal is that a flow reduces
its sending rate in response to delays that it may not be able to
directly control. Furthermore, in deployments where there can be multiple congested links along the path of a flow, it is desirable to modulate the sending rate of a flow in response to just the maximum of the per-hop delays, max(PD), along a flows&#39; path.
Replacing the end-to-end measured delay with bottleneck delay into
Swift&#39;s equation yields the following:</t>

<figure><artwork><![CDATA[
// Reduce the congestion window when bottleneck hop delay
// exceeds a chosen target hop delay
if (max(PD) > target_delay) then
  md = beta * (max(PD) - target_delay) / max(PD)
  cwnd = (1 - md) *cwnd
]]></artwork></figure>

<t>Poseidon <xref target="POSEIDON"></xref> is a CC proposed in literature that exemplifies
the use of maximum per-hop delay in reducing its congestion window.
By incorporating bottleneck information in congestion control
response, POSEIDON flows achieve higher flow throughputs in presence
of reverse path congestion, and congestion across multiple network
hops.  Algorithm 1 in <xref target="POSEIDON"></xref> details the use of maximum per-hop
delay in both the increase and the decrease of the congestion window.</t>

</section>
<section anchor="using-maximum-link-utilization-in-e2e-cc"><name>Using maximum link utilization in E2E CC</name>

<t>E2E CC uses heuristics to determine by how much to increase the
congestion window, e.g., in the case of Swift, when the measured
round-trip time is lower than the target delay, Swift increments the
congestion window by one per round-trip time.  BBR <xref target="BBR"></xref> increases
the rate as a function of the flow&#39;s measured delivery rate.</t>

<t>The problem with these heuristics is that they don&#39;t get the rate or
window adjustments just right and either under or overshoot.
Undershooting the rate would mean that transfers take longer to
complete even when the bottleneck link has a low utilization, while
overshooting can cause an unnecessary increase in queueing delay and
packet losses.</t>

<t>In the following example, we integrate the maximum utilization signal
into Swift&#39;s congestion window update equation to ramp up adaptively
faster when the bottleneck link has low utilization.  The congestion
window evolution is represented below:</t>

<figure><artwork><![CDATA[
// Increase congestion window in proportion
// to the utilization headroom
if (rtt < target_rtt) then
  fcwnd <-- fcwnd + additive_increment 
            + kLambda . fcwnd . (1 - max(U/C)) 
]]></artwork></figure>

<t>As an example, the fixed additive increase in Swift of rate &lt;-- rate
+ Additive Increment, means that it takes 200 RTTs to take 80 Gbps of
bandwidth with an Additive Increment of 400 Mbps.  The fast ramp-up
with CSIG using the bottleneck link utilization takes &lt;10 RTTs
to safely ramp to 80 Gbps.</t>

</section>
<section anchor="using-minimum-available-bandwidth-in-e2e-cc"><name>Using minimum available bandwidth in E2E CC</name>

<t>E2E CC uses heuristics to determine the initial transfer rate for
newly established connections.  Starting too slowly would cause the
transfer to take longer than necessary while wasting available
bandwidth, whereas starting too quickly would cause queue delays and
packet drops.  The same dilemma exists for transfers that are
starting on a connection that has been idle for multiple round-trip
times.</t>

<t>In networks where we know ahead of time that the degree of
multiplexing is low i.e., just a handful of flows co-existing on the
link at any point in time, transfers complete quickly when they
&quot;jump-start&quot; to use up all of the bottleneck bandwidth.  This is
especially helpful when transports employ robust loss recovery
mechanisms such that even if the queue overflows, any lost packets
can be quickly recovered.</t>

<t>As an example, on an empty network of 200Gbps, a single transfer can
use up the entire 200Gbps in the second RTT, after the CSIG feedback
in the first RTT indicates the availability of 200Gbps at the
bottleneck link.</t>

<t>CSIG&#39;s min(ABW) bottleneck bandwidth allows transfers to start safely
at line-rate.</t>

</section>
</section>
<section anchor="traffic-management"><name>Traffic Management</name>

<t>CSIG encodes the most notable information about the path for each
flow by carrying bottleneck link signals and bottleneck locator
metadata.  This path-level information, which is obtained directly
from application data packets rather than synthetic probes, is directly
attributable to the flow and is valuable for traffic engineering and
application performance debugging.</t>

<section anchor="load-balancing-and-multipathing"><name>Load Balancing and Multipathing</name>

<t>Datacenter topologies employ a diverse set of paths between any
source-destination pairs.  Transports employ techniques such as
Protective Load Balancing <xref target="PLB"></xref> and Multipathing <xref target="RFC8684"></xref> to spread
traffic across the multitude of paths.  Load balancing and
multipathing in transports use a combination of end-to-end signals
and heuristics to select which paths to use and how much traffic to
channel in each of the paths.</t>

<t>Using CSIG signals from bottleneck links along the diverse set of
paths, load balancing and multipathing schemes can select high
quality paths with lower congestion, and spread traffic across them
in a congestion-aware manner.</t>

<t>Locator metadata can also be used to distinguish between incast congestion and core network congestion, which can then be used to adjust load balancing / multipathing actions. For instance, the stage of the bottleneck and link orientation attributes are enough to determine whether the last hop is the bottleneck or not. When the last hop is the bottleneck, flow-level load balancing / multipathing actions may not be effective and may, in fact, worsen incasts. Such cases may require application-level load balancing or job scheduling techniques to distribute traffic. However, when congestion is instead known to be in the core network, flow-level load balancing / multipathing actions can route around congested areas and improve performance.</t>

</section>
<section anchor="traffic-engineering"><name>Traffic Engineering</name>

<t>Traffic Engineering carves out paths with apt bandwidth across
aggregate source-destination pairs.  Examples within a datacenter
include Datacenter Network Interconnection Layer (DCNI) <xref target="JUPITEREVOL"></xref>.  CSIG can be used to provide
fine-grained path level information, including short timescale microburst congestion, to TE systems.  By using summarized CSIG signals aggregated both spatially and temporally across flows, TE can select paths and balance traffic at the datacenter level to accommodate bursty traffic, e.g., from ML.</t>

</section>
</section>
<section anchor="application-performance-debugging"><name>Application Performance Debugging</name>

<t>Applications often complain that the network is slow, but it can be challenging to identify the specific segment of the network that is causing the problem. This is especially true with the scale of datacenters, where flows can traverse up to nine hops <xref target="JUPITEREVOL"></xref>.  Figuring out where the bottleneck is and the timescales at which the path
poses a bottleneck is like searching for a needle in a haystack for an
application with thousands of flows across various source-destination
pairs.</t>

<t>On application network flows, CSIG information, with its bottleneck
locator, can quickly and precisely answer why the flows are slow and
where the network / path bottlenecks are.</t>

<t>CSIG can also be enabled on mesh prober systems similar to <xref target="PINGMESH"></xref>
to augment end-to-end probe measurements between any two servers with
bottleneck information to aid troubleshooting.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Only trusted sender hosts MUST be allowed to construct, initialize and insert a CSIG tag into packets for authorized flows. Based on deployments, the authorization can be done at the NICs or at the switches, akin to firewall rules. CSIG stripping may also be employed as fencing rules at domain boundaries to ensure that unauthorized CSIG-tags are not traversing across these boundaries.</t>

<t>A rogue or broken network-device in a private network might put in arbitrary CSIG values, or insert a CSIG tag in packets on a transit node. We expect there to be checks and balances to identify and take non-functioning or rogue network devices out of a private network, as they can impose greater harm than distributing misleading CSIG values.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>There are no IANA considerations. CSIG Tag Protocol Identifier (TPID)  is requested from IEEE.</t>

</section>
<section anchor="conclusions"><name>Conclusions</name>

<t>With the increased deployment of applications that are sensitive to delay and bandwidth usage in data centers, e.g., AI/ML/HPC workloads and RDMA based applications, relying solely on end-to-end signals is insufficient under dynamically changing traffic patterns. Simple and timely signals from network devices to end-hosts can augment and optimize end-host transports to make optimal use of datacenter bandwidth. CSIG is a simple, practical and deployable protocol for distributing congestion information in networks that builds on the successful aspects of prior work and is grounded in use-cases of congestion control, traffic management and network debuggability.</t>

</section>
<section anchor="acknowledgements-contributors"><name>Acknowledgements / Contributors</name>

<t>We would first like to thank Weida Huang, Tyler Griggs, MJ Akhbari, Surendra Anubolu, Jeongkeun Lee and KK Yap for their critical contributions towards the end-to-end design of CSIG.</t>

<t>We would also like to acknowledge the following individuals for their various engineering and design contributions that shaped CSIG and its use cases: Christopher Alfeld, Neelesh Bansod, Jis Ben, Neal Cardwell, Yongzhou Chen, Yuchung Cheng, Dal Chand Choudhary, Mick Fingleton, Mahmudul Hasan, Jeffrey Ji, Marc De Kruijf, Praveen Kumar, Rich Lane, Chang Liu, Morley Mao, Carl Mauer, Sachin Menezes, Nipen Mody, Masoud Moshref, Alex Rumyantsev, Gerald Schmidt, Arjun Singh, Arjun Singhvi, Babru Thatikunta, Jeff Tikkanen, Frank Uyeda, Brian Vasquez, Rui Wang, Hassan Wassel, Yong Xia, Zhengxu Xia, Kevin Yang, Liangcheng Yu.</t>

<t>We would like to thank Arjun Singh, David Wetherall, Neal Cardwell, Akash Deshpande and Arvind Krishnamurthy for their feedback on several portions of this document.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC8257'>
  <front>
    <title>Data Center TCP (DCTCP): TCP Congestion Control for Data Centers</title>
    <author fullname='S. Bensley' initials='S.' surname='Bensley'/>
    <author fullname='D. Thaler' initials='D.' surname='Thaler'/>
    <author fullname='P. Balasubramanian' initials='P.' surname='Balasubramanian'/>
    <author fullname='L. Eggert' initials='L.' surname='Eggert'/>
    <author fullname='G. Judd' initials='G.' surname='Judd'/>
    <date month='October' year='2017'/>
    <abstract>
      <t>This Informational RFC describes Data Center TCP (DCTCP): a TCP congestion control scheme for data-center traffic. DCTCP extends the Explicit Congestion Notification (ECN) processing to estimate the fraction of bytes that encounter congestion rather than simply detecting that some congestion has occurred. DCTCP then scales the TCP congestion window based on this estimate. This method achieves high-burst tolerance, low latency, and high throughput with shallow- buffered switches. This memo also discusses deployment issues related to the coexistence of DCTCP and conventional TCP, discusses the lack of a negotiating mechanism between sender and receiver, and presents some possible mitigations. This memo documents DCTCP as currently implemented by several major operating systems. DCTCP, as described in this specification, is applicable to deployments in controlled environments like data centers, but it must not be deployed over the public Internet without additional measures.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8257'/>
  <seriesInfo name='DOI' value='10.17487/RFC8257'/>
</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='RFC3168'>
  <front>
    <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
    <author fullname='K. Ramakrishnan' initials='K.' surname='Ramakrishnan'/>
    <author fullname='S. Floyd' initials='S.' surname='Floyd'/>
    <author fullname='D. Black' initials='D.' surname='Black'/>
    <date month='September' year='2001'/>
    <abstract>
      <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3168'/>
  <seriesInfo name='DOI' value='10.17487/RFC3168'/>
</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='RFC8684'>
  <front>
    <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
    <author fullname='A. Ford' initials='A.' surname='Ford'/>
    <author fullname='C. Raiciu' initials='C.' surname='Raiciu'/>
    <author fullname='M. Handley' initials='M.' surname='Handley'/>
    <author fullname='O. Bonaventure' initials='O.' surname='Bonaventure'/>
    <author fullname='C. Paasch' initials='C.' surname='Paasch'/>
    <date month='March' year='2020'/>
    <abstract>
      <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
      <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
      <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8684'/>
  <seriesInfo name='DOI' value='10.17487/RFC8684'/>
</reference>

<reference anchor='PONYEXPRESS'>
  <front>
    <title>Snap: a microkernel approach to host networking</title>
    <author fullname='Michael Marty' initials='M.' surname='Marty'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Marc de Kruijf' initials='M.' surname='de Kruijf'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Jacob Adriaens' initials='J.' surname='Adriaens'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Christopher Alfeld' initials='C.' surname='Alfeld'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Sean Bauer' initials='S.' surname='Bauer'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Carlo Contavalli' initials='C.' surname='Contavalli'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Michael Dalton' initials='M.' surname='Dalton'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Nandita Dukkipati' initials='N.' surname='Dukkipati'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='William C. Evans' initials='W.' surname='Evans'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Steve Gribble' initials='S.' surname='Gribble'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Nicholas Kidd' initials='N.' surname='Kidd'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Roman Kononov' initials='R.' surname='Kononov'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Carl Mauer' initials='C.' surname='Mauer'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Emily Musick' initials='E.' surname='Musick'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Lena Olson' initials='L.' surname='Olson'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Erik Rubow' initials='E.' surname='Rubow'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Michael Ryan' initials='M.' surname='Ryan'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Kevin Springborn' initials='K.' surname='Springborn'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Paul Turner' initials='P.' surname='Turner'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Valas Valancius' initials='V.' surname='Valancius'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Xi Wang' initials='X.' surname='Wang'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google, Inc.</organization>
    </author>
    <date month='October' year='2019'/>
  </front>
  <seriesInfo name='Proceedings of the 27th ACM Symposium on Operating Systems' value='Principles'/>
  <seriesInfo name='DOI' value='10.1145/3341301.3359657'/>
</reference>

<reference anchor='BBR'>
  <front>
    <title>BBR: congestion-based congestion control</title>
    <author fullname='Neal Cardwell' initials='N.' surname='Cardwell'>
      <organization>Google</organization>
    </author>
    <author fullname='Yuchung Cheng' initials='Y.' surname='Cheng'>
      <organization>Google</organization>
    </author>
    <author fullname='C. Stephen Gunn' initials='C.' surname='Gunn'>
      <organization>Google</organization>
    </author>
    <author fullname='Soheil Hassas Yeganeh' initials='S.' surname='Yeganeh'>
      <organization>Google</organization>
    </author>
    <author fullname='Van Jacobson' initials='V.' surname='Jacobson'>
      <organization>Google</organization>
    </author>
    <date month='January' year='2017'/>
  </front>
  <seriesInfo name='Communications of the ACM' value='vol. 60, no. 2, pp. 58-66'/>
  <seriesInfo name='DOI' value='10.1145/3009824'/>
</reference>

<reference anchor='PLB'>
  <front>
    <title>PLB: congestion signals are simple and effective for network load balancing</title>
    <author fullname='Mubashir Adnan Qureshi' initials='M.' surname='Qureshi'>
      <organization>Google</organization>
    </author>
    <author fullname='Yuchung Cheng' initials='Y.' surname='Cheng'>
      <organization>Google</organization>
    </author>
    <author fullname='Qianwen Yin' initials='Q.' surname='Yin'>
      <organization>Google</organization>
    </author>
    <author fullname='Qiaobin Fu' initials='Q.' surname='Fu'>
      <organization>Google</organization>
    </author>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google</organization>
    </author>
    <author fullname='Masoud Moshref' initials='M.' surname='Moshref'>
      <organization>Google</organization>
    </author>
    <author fullname='Junhua Yan' initials='J.' surname='Yan'>
      <organization>Google</organization>
    </author>
    <author fullname='Van Jacobson' initials='V.' surname='Jacobson'>
      <organization>Google</organization>
    </author>
    <author fullname='David Wetherall' initials='D.' surname='Wetherall'>
      <organization>Google</organization>
    </author>
    <author fullname='Abdul Kabbani' initials='A.' surname='Kabbani'>
      <organization>Google</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the ACM SIGCOMM 2022' value='Conference'/>
  <seriesInfo name='DOI' value='10.1145/3544216.3544226'/>
</reference>

<reference anchor='DCQCN'>
  <front>
    <title>Congestion Control for Large-Scale RDMA Deployments</title>
    <author fullname='Yibo Zhu' initials='Y.' surname='Zhu'>
      <organization>U.C. Santa Barbara, Santa Barbara, CA, USA</organization>
    </author>
    <author fullname='Haggai Eran' initials='H.' surname='Eran'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Daniel Firestone' initials='D.' surname='Firestone'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Chuanxiong Guo' initials='C.' surname='Guo'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Marina Lipshteyn' initials='M.' surname='Lipshteyn'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Yehonatan Liron' initials='Y.' surname='Liron'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Jitendra Padhye' initials='J.' surname='Padhye'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Shachar Raindel' initials='S.' surname='Raindel'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Mohamad Haj Yahia' initials='M.' surname='Yahia'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Ming Zhang' initials='M.' surname='Zhang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <date month='August' year='2015'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 45, no. 4, pp. 523-536'/>
  <seriesInfo name='DOI' value='10.1145/2829988.2787484'/>
</reference>

<reference anchor='SWIFT'>
  <front>
    <title>Swift: Delay is Simple and Effective for Congestion Control in the Datacenter</title>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Nandita Dukkipati' initials='N.' surname='Dukkipati'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Keon Jang' initials='K.' surname='Jang'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Hassan M. G. Wassel' initials='H.' surname='Wassel'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Xian Wu' initials='X.' surname='Wu'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Behnam Montazeri' initials='B.' surname='Montazeri'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Yaogong Wang' initials='Y.' surname='Wang'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Kevin Springborn' initials='K.' surname='Springborn'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Christopher Alfeld' initials='C.' surname='Alfeld'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Michael Ryan' initials='M.' surname='Ryan'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='David Wetherall' initials='D.' surname='Wetherall'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google LLC</organization>
    </author>
    <date month='July' year='2020'/>
  </front>
  <seriesInfo name='Proceedings of the Annual conference of the ACM Special Interest Group on Data Communication on the applications, technologies, architectures, and protocols for computer' value='communication'/>
  <seriesInfo name='DOI' value='10.1145/3387514.3406591'/>
</reference>

<reference anchor='CONGA'>
  <front>
    <title>CONGA: distributed congestion-aware load balancing for datacenters</title>
    <author fullname='Mohammad Alizadeh' initials='M.' surname='Alizadeh'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Tom Edsall' initials='T.' surname='Edsall'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Sarang Dharmapurikar' initials='S.' surname='Dharmapurikar'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Ramanan Vaidyanathan' initials='R.' surname='Vaidyanathan'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Kevin Chu' initials='K.' surname='Chu'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Andy Fingerhut' initials='A.' surname='Fingerhut'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Vinh The Lam' initials='V.' surname='Lam'>
      <organization>Google, Mountain View, CA, USA</organization>
    </author>
    <author fullname='Francis Matus' initials='F.' surname='Matus'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Rong Pan' initials='R.' surname='Pan'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Navindra Yadav' initials='N.' surname='Yadav'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='George Varghese' initials='G.' surname='Varghese'>
      <organization>Microsoft, Mountain View, CA, USA</organization>
    </author>
    <date month='August' year='2014'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 44, no. 4, pp. 503-514'/>
  <seriesInfo name='DOI' value='10.1145/2740070.2626316'/>
</reference>

<reference anchor='JUPITEREVOL'>
  <front>
    <title>Jupiter evolving: transforming google's datacenter network via optical circuit switches and software-defined networking</title>
    <author fullname='Leon Poutievski' initials='L.' surname='Poutievski'>
      <organization>Google</organization>
    </author>
    <author fullname='Omid Mashayekhi' initials='O.' surname='Mashayekhi'>
      <organization>Google</organization>
    </author>
    <author fullname='Joon Ong' initials='J.' surname='Ong'>
      <organization>Google</organization>
    </author>
    <author fullname='Arjun Singh' initials='A.' surname='Singh'>
      <organization>Google</organization>
    </author>
    <author fullname='Mukarram Tariq' initials='M.' surname='Tariq'>
      <organization>Google</organization>
    </author>
    <author fullname='Rui Wang' initials='R.' surname='Wang'>
      <organization>Google</organization>
    </author>
    <author fullname='Jianan Zhang' initials='J.' surname='Zhang'>
      <organization>Google</organization>
    </author>
    <author fullname='Virginia Beauregard' initials='V.' surname='Beauregard'>
      <organization>Google</organization>
    </author>
    <author fullname='Patrick Conner' initials='P.' surname='Conner'>
      <organization>Google</organization>
    </author>
    <author fullname='Steve Gribble' initials='S.' surname='Gribble'>
      <organization>Google</organization>
    </author>
    <author fullname='Rishi Kapoor' initials='R.' surname='Kapoor'>
      <organization>Google</organization>
    </author>
    <author fullname='Stephen Kratzer' initials='S.' surname='Kratzer'>
      <organization>Google</organization>
    </author>
    <author fullname='Nanfang Li' initials='N.' surname='Li'>
      <organization>Google</organization>
    </author>
    <author fullname='Hong Liu' initials='H.' surname='Liu'>
      <organization>Google</organization>
    </author>
    <author fullname='Karthik Nagaraj' initials='K.' surname='Nagaraj'>
      <organization>Google</organization>
    </author>
    <author fullname='Jason Ornstein' initials='J.' surname='Ornstein'>
      <organization>Google</organization>
    </author>
    <author fullname='Samir Sawhney' initials='S.' surname='Sawhney'>
      <organization>Google</organization>
    </author>
    <author fullname='Ryohei Urata' initials='R.' surname='Urata'>
      <organization>Google</organization>
    </author>
    <author fullname='Lorenzo Vicisano' initials='L.' surname='Vicisano'>
      <organization>Google</organization>
    </author>
    <author fullname='Kevin Yasumura' initials='K.' surname='Yasumura'>
      <organization>Google</organization>
    </author>
    <author fullname='Shidong Zhang' initials='S.' surname='Zhang'>
      <organization>Google</organization>
    </author>
    <author fullname='Junlan Zhou' initials='J.' surname='Zhou'>
      <organization>Google</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the ACM SIGCOMM 2022' value='Conference'/>
  <seriesInfo name='DOI' value='10.1145/3544216.3544265'/>
</reference>

<reference anchor='PINGMESH'>
  <front>
    <title>Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis</title>
    <author fullname='Chuanxiong Guo' initials='C.' surname='Guo'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Lihua Yuan' initials='L.' surname='Yuan'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Dong Xiang' initials='D.' surname='Xiang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Yingnong Dang' initials='Y.' surname='Dang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Ray Huang' initials='R.' surname='Huang'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Dave Maltz' initials='D.' surname='Maltz'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Zhaoyi Liu' initials='Z.' surname='Liu'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Vin Wang' initials='V.' surname='Wang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Bin Pang' initials='B.' surname='Pang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Hua Chen' initials='H.' surname='Chen'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Zhi-Wei Lin' initials='Z.' surname='Lin'>
      <organization>Microsoft, Redmond, USA</organization>
    </author>
    <author fullname='Varugis Kurien' initials='V.' surname='Kurien'>
      <organization>Midfin Systems, Redmond, WA, USA</organization>
    </author>
    <date month='August' year='2015'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 45, no. 4, pp. 139-152'/>
  <seriesInfo name='DOI' value='10.1145/2829988.2787496'/>
</reference>


<reference anchor="POSEIDON" target="https://www.usenix.org/conference/nsdi23/presentation/wang-weitao">
  <front>
    <title>Poseidon: Efficient, Robust, and Practical Datacenter CC via Deployable INT</title>
    <author initials="W." surname="Wang" fullname="Weitao Wang">
      <organization></organization>
    </author>
    <author initials="M." surname="Moshref" fullname="Masoud Moshref">
      <organization></organization>
    </author>
    <author initials="Y." surname="Li" fullname="Yuliang Li">
      <organization></organization>
    </author>
    <author initials="G." surname="Kumar" fullname="Gautam Kumar">
      <organization></organization>
    </author>
    <author initials="E." surname="Ng" fullname="Eugene Ng">
      <organization></organization>
    </author>
    <author initials="N." surname="Cardwell" fullname="Neal Cardwell">
      <organization></organization>
    </author>
    <author initials="N." surname="Dukkipati" fullname="Nandita Dukkipati">
      <organization></organization>
    </author>
    <date year="2023"/>
  </front>
</reference>



<reference anchor='I-D.kumar-ippm-ifa'>
   <front>
      <title>Inband Flow Analyzer</title>
      <author fullname='Jai Kumar' initials='J.' surname='Kumar'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Surendra Anubolu' initials='S.' surname='Anubolu'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='John Lemon' initials='J.' surname='Lemon'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Rajeev Manur' initials='R.' surname='Manur'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Hugh Holbrook' initials='H.' surname='Holbrook'>
         <organization>Arista Networks</organization>
      </author>
      <author fullname='Anoop Ghanwani' initials='A.' surname='Ghanwani'>
         <organization>Dell EMC</organization>
      </author>
      <author fullname='Dezhong Cai' initials='D.' surname='Cai'>
         <organization>AliBaba Inc.</organization>
      </author>
      <author fullname='Heidi Ou' initials='H.' surname='Ou'>
         <organization>AliBaba Inc.</organization>
      </author>
      <author fullname='Yizhou Li' initials='Y.' surname='Li'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Xiaojun Wang' initials='X.' surname='Wang'>
         </author>
      <date day='7' month='March' year='2023'/>
      <abstract>
	 <t>   Inband Flow Analyzer (IFA) records flow specific information from an
   end station and/or switches across a network.  This document
   discusses the method to collect data on a per hop basis across a
   network and perform localized or end to end analytics operations on
   the data.  This document also describes a transport-agnostic header
   definition that may be used for tunneled and non-tunneled flows
   alike.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-kumar-ippm-ifa-06'/>
   
</reference>


<reference anchor='I-D.miao-tsv-hpcc'>
   <front>
      <title>HPCC++: Enhanced High Precision Congestion Control</title>
      <author fullname='Rui Miao' initials='R.' surname='Miao'>
         <organization>Alibaba Group</organization>
      </author>
      <author fullname='Surendra Anubolu' initials='S.' surname='Anubolu'>
         <organization>Broadcom, Inc.</organization>
      </author>
      <author fullname='Rong Pan' initials='R.' surname='Pan'>
         <organization>Intel, Corp.</organization>
      </author>
      <author fullname='Jeongkeun Lee' initials='J.' surname='Lee'>
         <organization>Intel, Corp.</organization>
      </author>
      <author fullname='Barak Gafni' initials='B.' surname='Gafni'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Yuval Shpigelman' initials='Y.' surname='Shpigelman'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Jeff Tantsura' initials='J.' surname='Tantsura'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Guy Caspary' initials='G.' surname='Caspary'>
         <organization>Cisco Systems</organization>
      </author>
      <date day='17' month='May' year='2023'/>
      <abstract>
	 <t>   Congestion control (CC) is the key to achieving ultra-low latency,
   high bandwidth and network stability in high-speed networks.
   However, the existing high-speed CC schemes have inherent limitations
   for reaching these goals.

   In this document, we describe HPCC++ (High Precision Congestion
   Control), a new high-speed CC mechanism which achieves the three
   goals simultaneously.  HPCC++ leverages inband telemetry to obtain
   precise link load information and controls traffic precisely.  By
   addressing challenges such as delayed signaling during congestion and
   overreaction to the congestion signaling using inband and granular
   telemetry, HPCC++ can quickly converge to utilize all the available
   bandwidth while avoiding congestion, and can maintain near-zero in-
   network queues for ultra-low latency.  HPCC++ is also fair and easy
   to deploy in hardware, implementable with commodity NICs and
   switches.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-miao-tsv-hpcc-02'/>
   
</reference>


<reference anchor="HPCCPLUS" target="https://www.broadcom.com/blog/high-precision-congestion-control">
  <front>
    <title>High-precision congestion control (HPCC++) deployment at Alibaba leveraging In-band Flow Analyzer (IFA)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="P4-INT" target="https://p4.org/p4-spec/docs/INT_v2_1.pdf">
  <front>
    <title>In-band Network Telemetry (INT) Dataplane Specification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='TCP-INT'>
  <front>
    <title>TCP-INT: lightweight network telemetry with TCP transport</title>
    <author fullname='Grzegorz Jereczek' initials='G.' surname='Jereczek'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Theo Jepsen' initials='T.' surname='Jepsen'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Simon Wass' initials='S.' surname='Wass'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Bimmy Pujari' initials='B.' surname='Pujari'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Jerry Zhen' initials='J.' surname='Zhen'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Jeongkeun Lee' initials='J.' surname='Lee'>
      <organization>Intel Corporation</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the SIGCOMM &apos;22 Poster and Demo' value='Sessions'/>
  <seriesInfo name='DOI' value='10.1145/3546037.3546064'/>
</reference>

<reference anchor='RFC9378'>
  <front>
    <title>In Situ Operations, Administration, and Maintenance (IOAM) Deployment</title>
    <author fullname='F. Brockners' initials='F.' role='editor' surname='Brockners'/>
    <author fullname='S. Bhandari' initials='S.' role='editor' surname='Bhandari'/>
    <author fullname='D. Bernier' initials='D.' surname='Bernier'/>
    <author fullname='T. Mizrahi' initials='T.' role='editor' surname='Mizrahi'/>
    <date month='April' year='2023'/>
    <abstract>
      <t>In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document provides a framework for IOAM deployment and provides IOAM deployment considerations and guidance.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9378'/>
  <seriesInfo name='DOI' value='10.17487/RFC9378'/>
</reference>




    </references>



<section anchor="encodings"><name>Example encodings of CSIG signals</name>

<t>The following table demonstrates an example encoding of a 3-bit signal value. Note that this is an example ONLY. The encoding that is meaningful to a certain deployment is specific to the use cases in consideration. Note that CSIG tag supports 5 bit (20 bit) signal value size for the compact (expanded) formats.</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>min(ABW/C)</ttcol>
      <ttcol align='left'>min(ABW)</ttcol>
      <ttcol align='left'>max(PD)</ttcol>
      <c>0x0</c>
      <c>0%-1%</c>
      <c>0-1Gbps</c>
      <c>0-10us</c>
      <c>0x1</c>
      <c>1%-5%</c>
      <c>1-5Gbps</c>
      <c>10-50us</c>
      <c>0x2</c>
      <c>5%-10%</c>
      <c>5-10Gbps</c>
      <c>50-100us</c>
      <c>0x3</c>
      <c>10%-20%</c>
      <c>10-20Gbps</c>
      <c>100-200us</c>
      <c>0x4</c>
      <c>20%-50%</c>
      <c>20-50Gbps</c>
      <c>200-400us</c>
      <c>0x5</c>
      <c>50%-75%</c>
      <c>50-75Gbps</c>
      <c>400-800us</c>
      <c>0x6</c>
      <c>75%-90%</c>
      <c>75-90Gbps</c>
      <c>800-2000us</c>
      <c>0x7</c>
      <c>90%-100%</c>
      <c>&gt;90 Gbps</c>
      <c>&gt;2000us</c>
</texttable>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+W9W3Mb19Uo+L5/RZdVqZCfAfAiyZZ5ksyhSMpmTEoMSUUn
41I5DaABdAR0I90NUrSsqXma53mdv3d+yazr3mt3NyQ5X07NmRmlKgaB7n1d
9+twOHRN3iyzo+SkLOZZ3eRlkdzk8yJd5sU82Tm5Of9+16XjcZXdwTPwl5uW
kyJdwRvTKp01wyq9y4f5er0aTup8Ptzfd4+SadrA74f7B4fD/YPhweP2V9Hf
ztVNWkx/TpdlAV811SZzLl9X9LFuDvf3v9s/dGmVpUfJedFkVZE17n5+lLzM
mvuyeofrfCP//b4qN2v37j48OTzFVbpJ2hwl2fu1qzfjVV7XsM3mYQ3TnZ/d
vnBuUk7h9aNkUw/TepLnbp0fJfDvUTJJC/g2S9KqSh+SnXyWpMtl8pDVu0lZ
JYu0XiSLrMpgR8kwacoJf6jLqqmyWS1/PazojwQfOMKX4aM+ckTTTLNZulk2
NTyhv/NL/LhLN82irI5cQv+G8t8kyQt44niUXMMt+C/5eo7Hi7xKV/FPZQW7
/L4s58ssubg48d9nqzRfHiUpv1P91zk9MpqUq/4pX46S0827d/k6bdrzvoTL
zJu05/fPTF7wi9MvmfwyWzRpZ+KyXqTT1m+fnZRe+uycfx4lP25WadWa889p
3vqe5ntelekUxgIwnIzkh/bM/0jz0Tt89b+O5Wma3RVltYJTu8vwtq9fnDw7
fPrtUXJ6cntylfA33+3v78uPjw++eSYfDw8OvtNXvnn2BD9evXr5t7P/dnV9
dnMDI7w6Hx3sjw4Onjzde/z4ycHj/YPR48dPv/vm6bfw6PPn161HAO+eHT7B
US6et356+uTJ4cE3I/rv4TfwyOnJX05exg8dPjv87rtnz0aH3z779smzJ7T/
mzfnL27bK3n27dODJ6PHT/a/efrdATx08url98etsb59sr//7f7o8JvDb2DH
8NCfX1+d355dn/311cUn1vbNU1z++cvvL89ufvjE8r77hg7r5uz89BVsg26K
yGJylHx1VdZZPi2Lo+RsNssneVY0g+S6HANtGiQAsslVlU6afJIuk9O0SScZ
Up7k5CS5ywEJsvWyfEjHMNT5y9uvaORtuMwQ9SYDHCiTN2kx3/LEZVqXGwBz
AFygEFse+ttmmcMQyUWebHnie1gHkAcLve1HzjbzrMiSl9tW8jKDTZ+k1fQ+
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
FCgyBQHteLHRBadmT/shynyNarrLmki7DiYGvAnBx6BvnX76ELRzVbutpzad
sPkAym6ikvmdO6IaarphCVkqyBQxaxfENYUhpRWMWNkG2iChq1cvszkSF+OE
8bIeddqo1cEY4BmdcLdh+caM00GDXgmBQ+uMBUcEa19+LijV5Igh2zLVR057
tD8tr6q5Mz35wgAFTi9KXhIflXShUgXWVHrNo1QC1xNghjI1k3rRUkvquDIv
o7J+enXOwCqHIWqowRz/EOQOJfdGdteyaG8ujjgRcSAsieNjF4KG5fqLFpLJ
zOx4YPfqjVzeT90nK33J1p1F0zi+QsNWmLtR/y/vVpQmc6AgueDV9EnuOZXe
ztaNV4GY15fJKq81rBNpgKn2paoORo8PYlHZCoQRs3afslWEmD0yWPBlHasr
FCl99WBq07NYr4Fscsq+M1kEwB4RNw0KxHGDJtYOOCgzOv9AIbjfjVwBpnn4
Iob8smiZWj8tSKFJQiVNI0DoXZlx3dtV+Z6M8bh9oKHRNrbgIrZqir4UJXbD
waxzbrhC3iejTEjb4u28TToD+nRERmNnrG106au88SUZ2XomTupFsnWlwc4V
zBWdSswYCxGi8Kp3qkp6vhjV2mbLFLVurCrqVdhqGEu/a9dYNWBQm01Jih50
Y58ijcPvRGjuhq0DcryaEYOrFwFDyb/hy8mHR7ZtiXM3Rt2sRYiNT7LPrI4r
kAuL7AsYYRa0bOGbZdFpIsgeOblZOgQq/hT506MOwhyWxlPiovwkm/W8SkGV
65hJdjSr/IaTJGBlL89P9Jndge/siEn48zm2DXa25SRF8NOxcEAx5qIsgHn9
orF9fa13uMpih5US2HAxNT+ZlNTBQNFJLFaO3BuBEtuCxlPLYGQZxEaoqMAr
WdGWObW4h8tCJtVFh2axASULpc8FFV7n/mOjIMgJWgSBywdfSWk3NProFmJC
5iLricgzsNQ6naF+beQdclv1OgvJ5uLnETOD6t9KB/KZyckn8dXXiIp4bSRc
93W2pHdPIrOmPr7DFicrYnmdCW3M4ghUBOpDmZJFIJb8udB7WDZpv3rb2ihV
SU04eDbUaZAqVsDyhdXJuh5DS98Ivkl8cVcu7xBy7kvCtPqo834rYt4eXftR
b5n3BkE1433RmP02K28Cwo2SD6R/v6276iE3nmwHTyuuMP6mxbWiqPKutI8Z
8x0PKanGvuvD2nYYRaDEQrzqMdZyBaZpvBQsMPZk75/Uxgz9fjrtP2D7i0it
Wv6mv4UNdRqgbDcMdXe2TJXUJqXaFNpfy5RYaK3ZcNF26Uul9Azng+6O2g7H
mYi+n9iJEeiQSIatDVTGLFx7A1QtrlIrtHay7T9k1nB4SaQYt8X/+5QFYTnN
WAygUNd5zqYQ75oJyzHdBwW6qkwyjeIWjtTatXDZak1ZrICx1E5uS31biVPU
l3EWXz3Mac+7NqzhRlrlwKV/W2jYYNqsORtQhGVtfItqE/HYC6JU17+pXb5a
ZVNC2R5X4CAEOtzl7LAU0h2n56IAKwF464pCPJOb05c+smWkXut07HuzY0Wx
ypciGoCAicJJXpviM9xF9+Li9Cq5vfirylgaKI/q6fQOi39j3D3G+TQdC1Mo
sMLxT0G09M2k69gpTfTCQ1rkzPEc3busWsrPXd31JWCtlJA6zGvx/ex4owVv
0def7S9K62O81PmxjZ63CT/Il0pEgFh+pBQG314riMjU4pGELI8FgZp7TQ3p
a5OFxlwtTYlDw3o6jAbRm96nZxZp/QWUFAjQNKNAVTotTw/pIUv9g20vFL2a
coyLp/KOkwm4Y5dpJEOtfRbpO8z5oTpZDPbs/A0NKfcwG8X3plQxglK+zGCY
PTpe5vWC5CXMFiYVBEuBRf1ftx22xh/rScRtcEOj3YF1jngW9yUix6gTV3p7
ctVpbGm9cJqh1V5Q6Bn8GSiPbkri/b4MzsnZ9lxck6yPqW+SCHLXXSyVwPvd
md22Esq1ih4HAGU/xH3VWVlVIZq7fXfXoNTat9vhUlW9MnXNYSDpOopVG2cF
UDpD03SdYl1vSieaVqtjk62cJ5wBS/IWYkP2RBk0TarhMDH+tE6AjpQcNwWf
tVoTxU5wLhQ6Hdg8QX7CcjOOvsTUC4QX9A8P2EMR/O954dK2DNrxuCdtVVK8
H3C6l6VpjcAFqbvxGJFvv20MSdBC2Diz4zo8y7berlclbIBk6HTu1CETV0KQ
qTQLPdqJj3TxUS6uG+WizXk/0YIGExWDyk9enGpTFGJspzCaq9esIfYcdNzN
WVJ3m6iWBYWmudKU3MV+zL7urk+6A2hc9Z3VZunPxeE218u0II1eSuJ2onyi
VjLeT+XrdjPc4m8983Ctdr4DnWsQK9qYmjXOTLVaVE/RDe8N+YhneGiilDEl
18gW2kfPzPD1qs5Ih1MIk1wkFBySGvsZoRw4JRkIKAexo/jm0JhnTU6SnK/5
RcyJesI+lNi5iNpxzSz1XAA8GGsjx91iMWWtwU15kS4ExLQwtavFoZqthDma
1yFZ9BvTmEHvsJMm4QFVcINE58zWR7ZjSi5CCoj4eHFlzQ1pCHlRvIgENUWS
Rbl27UZMbNponbmJWQqOUsOMtAeDB8twRt0i1Gyqm+O1wF9q83JYnQPrzgEz
aAhR6t2+tudaYYCwOJ+Fm3adaCit2yB5OaYzAJ8Dc87vqyzrxooAe5z7Hz6S
sj/vf1C5D9ul60GkeOoF0m+uEwPUF7ET209b4O2LdWxZDKfPjHthLpZfeo1+
Yo5z1o/GrTFDFbACZMFJcPCYVC2EaUngGueN47JKM0+cNb/StMwK6dN5ITUN
8pqLSwqk+xJ/0alQuhfKi4FTcDOQ9v0a96m5Z3tfcc2JlnlFEkXE5eA9LS2h
PiKd07L4vVRRDzdPCRGnjMXXEgyfAYjx1Vb6zUe27/xe7xyTpn0fLBC/11Kr
KHK9wvWp9MC94oFVA3Zyvfey1WmTI48rsptOs3I285R4hXJSUyLY1K7V6n5N
AtMkFXter+FLDHxkCfE7HGdATPm8w6ZU7QflNC24mk1uAAzrFTpfi4aaM/pk
8UqCzrmwJGWrUDDtYQKHeb94oNDaQzlGbrgFWyTTscbdHgr/4/gXye5gg0Qt
AcYP1IkRjpHfeMzlJ8clFoFnvcc4ezSGc0U9ICWxHaSdEO6tS1AFMqrUMqMu
Xqn3YUTBvbwslZBXoH75KKJ2uSKvFdIPFef8USpmWlOX5eGYjaCShab5mF7X
sDTWH9Zjh84Rzcnk8AIb7IdhINU8032vfZtpAMCam9QSnDRAr0i6l24+mJUz
lAwffFHf2MOcp3Rdb5ahNSwZcGg5PmQzlJSjUqBbD4W0Bkmrt8uWO7N6QGvp
7YUMEgRkKoEhsMsdoiXuz2YKMZvhU5XEq6GEdgxUYuNKbahUUzEQuTQr+oZx
QyG5PAZjCo0lyYEqeTKYIZKtsYkMOnowm2bLjswdB/AWW1omdIdyQnU2pLYM
gS0BCi0fAF4eskCwznzhEJizeuCTkk0OTFExFqlU2iEqTcwATV8Um2lCN6lh
Q3DzplgqZPwgNGXgF7UUW8zVzZVObhwauKTzq5ts0v1NM7iYoDzpIwnei+lf
HvlVBVVQO/mq0etCTpkPppYqwudXQzi08ytQ996DFDlIvs8w9mnAknB0o3H5
OaUJrDTflflUWqwIdZmU6wcRsThL1i6P0+FyWEgFAAEyPEKhbFRMQS0oITC0
33hc8bbPezUrBcsNyGWxzAZyWRroSg3H4QlL3xkS8fRdrpfoF9M22FIQQ8BS
vmUTmo1b6oCoRRv5PHoql0KRMCwN+EIMiAaWhpsVYkzE8QlCUai6qAtq0a88
pOuIwioZ+3HuDmU8fp5Gq7e0I98ts5GLC4nBQn9fG7OEGiXwPOCcgqovJcq3
yIzaQasIIVvi7EEph9wQxipkA+9bUdPbQudj60+PyYdzwT9r6kn6TT1UAKcs
JAk7GHe8WsI5ciGcgYlt1pbBtQ4DTPTsuVbaIuWUy8Y4Y9MRs0jkuOByzrA9
OE1vNqRyF3KopaNeOSa9M1CgHkrt+7TMZhQww9uQXvc896QjI3m3OEUSIed4
lz0k2hFbhLSW6Jehdx2rWz0MAiPClttbma54PVmxNjWIfBvxNosvpl2AZiss
d7y+YSOuEB89lWgzTO/U6NqWotUKHJpE+pf6PVOcjOi4yOxEiZZPHc5AlV0v
mVhyff8Q8cOBS0B6QbP20b3eJB2qfG2T38xauJw3VrBVqWODIsjywbrrg1vI
i4lBNhVrhAbWgTQO6FJWgZDkpGOxVgFcobxTslW0V9PGk2bLSbA/T8ulmFKM
Et7m+KpMt1jTnsJkhcHK4LwQhRnqTk6OTU0Ot/aZPxjY2zDj86U+y7ijKLfC
IZmv0FBZVC17X7JrY12nK0UrPSYHI+Z4+2boLUjUpFaJcRJuJU5cLcKlYMYN
GKT5rK69fVyCEy9QQBgS8VGQ9VA/6/5Gpqy8QcPlkuqXYiW2/dHh70L9Y4d6
10L6dUUh2k+wtkTy3bvk8vZ1H5BxpCTSIxZCyGtRpXPTIK1iw31KVBCGYbLp
y7qxEdsm3UQEo9tSdaQtoFe+ZJz4tFLxnsaJTMEVhcICQC2c6s7V1Q2FZksl
TyxAZdCBHWGT5aYWwuNjMFtXLGc8YskZs8f9SQpX04DRceYdZSWnf2PRiqgn
r+McYGm8VZXjsHS0o5A/yqbjKrpg+IDHGBP1pMUD80YXo4fOlUuk8qLWf9Bi
JbZlTE99w7iLcDDqipyHowTGXKHBi2oDwG6iSmNizPIGfv+Q2avv6U6NKjGz
GCBXdC9qzGklBgTHoKZOFu4urwMv6bOnaXnevnbvOxp8weUjuBRQu1dnr4tu
19elYEEeod0q877WoS4JyYGKGHLGoSyP1qBOnQK1pB+QEDLNpTlbXGdmF5gF
FXSOaFW6XnP0mqn7JBo2zKL8lk1obK5ynqyIZU14qulAywx/4BuUBreIbzIf
tc7lCOstHYW0OzFn1LU6DHGMKcNxqnUGteyv1ibk+PSih2zg2ZeuHFPEsKcu
vh55qz4dReY0pPF6S5Wau2fEc9ol7ciUJhHwJrcn7k/MJfP87J3mJG2ew+qF
v8WMEiuIWJOVytabFphbliTPmUu2cR1qcZViWu1jUKVO3XJUz4MintGPWHoF
Y0gKhgvVCchAICgwXvZZyvJGR4UFrJs4udx0WYrPa4uxmPg74Z1TXYCqEZer
vA5GGm9gDPItwy9FaUoFInW2tNwrQX6UgrJKU7GkHNYl9mntrcK0UvvXGzoC
3VVhWmHC+XJDInfpDXaqvkkNoigqAQHRN+oIR/uPTS2aihZVm6P7FsbRwoQk
20u5Q1dxwLOP3SGKF3iJiC/GijyQO7nPKtcasT0WyRp+LFj/jba0H+ilOn+p
WohLz4ijzHw1pvED4zfF92b37GOgFsxRFfhK/ZW+klK3KJpfn1+aaxnK2w6H
XsMd0T8pKa0OsKiy9EwZiO16ZDwpSBLxd8fFmHz2Mtd9R+O3aZXQQQKFFTTA
VljFMyE5jlwNrzHDSBqUz7QX5/NwAtq++8MjT19ZfIlrLvoU9aguoaGrUutv
oGHYaCkAfPNVToIUNt7M5z645pac52EujoBe3qcPNVv+mRuYElASgyp3McOK
nJzO2WE1vmiwcZH4uHohlMtSyvmT83OXAiaBggzLGcn3PpWHYobaKfF+LPI7
hU6Vvnan3K9LAebYrmOF04FRqWUN5mzIvbMh0ZnyCtUNYhKTqDpNCHpljUR2
zbbSEJqsVa7IRSO45MOnwj2TZcr2uncKNjFPHvmko0m1ec88K7QTZU+16cUe
N0d/dSfNsHAtWOOJBOt4IcLszJ1K2zRttxIVfmRLKkc5cIuPQDAn5VA0Z+mq
RbHsUg7xhRaa810VTNfzQRfVpFKtz7PwjddMvba+8pncMMPAiwutNtmPFVDp
hFEJhJyTY6KFaGyPwtz0WHLTURpD4YOkgQg0ci+wbsIgtHPQATeadhi66Enx
swTTUKf1umx8XqcT1GnH1RgMGjD6DBSTcmp4XEnYEWomPp+ONXqJoyXCLiQ7
lS60fdXeWLR3VLmEhHSukqNI3SVDRsq5uc9nTfLTzZvzF7dvOcPl+fPr5Cf4
v7eUIyVKIJyYRu+pLE4WHOL7iISkvQB0uJ7pTDtIIj9+FLZbY2ebKkeDnMqf
VP0KBWdONDV2ihXFvXBOL8YAHJ7xtZUrdotYb46U3YsaJ0W5B4LgjvEKRNhw
IicneihqXMeQDW47Io+QhgT3yi18+vatm60Tn05ZoWt8yDmCiOI717e3u85S
JTQZZ77rNaY1+ciQ0E2FtSMTWCWBSFKwHe+GSQQejjYFxHYZxj5LuxBtvN0O
s5h2OhvRhXHd8x54IkAnMSYUIQx8zdy7dsBZVymJKGRebco18ESjIiIFxl4t
Ur3odc3pyH39iWBuhgKGBjjPiMhzbB7mQfKlma5AcYObWmwNjtTI0GmCqOLv
27kQkd2sbXsC2nJMpiSqq8Z2Fi3gs9ysKKHY9pDQUgPSdRGY8gYYqEOxTbOO
JBc34eLTdcbYp90C2mFNUhHM+RK/clEtcxCJUK2YGDFTabBDy7SEwdVcWrXT
PzuVxKe82wdmBTRr6XtT2B2FVpOtvaFwHnEsDea1d18PtDPIQBaU2usauWuy
UOh1GZrohR++B5IVoiqnDFlwhAQ2v6eO3IwbDxxY2Nh6M7bvtK8CafAEnpnC
Hqk5pu0erBvRt7ERKxYVDp0mUWhtWg/ms2RHO6L8SR75mSU0nLhwXHJjhZ07
xoDSyX+E54et5/d8TzB+aXJf4GvUqHs13U3+A79w7gpWkwNhSn66enVzdn76
6uVbxlygk8CSOLQWqQAQlyptfMRP9j6TCoW1M9HoWzGZQJ/IQlN3D3DknlNf
r7ICGSFt1auOjDUUJdUmU04BbJDoLqR6heaASQQH9z5lt/R6w7yehcJJ5igh
1Jjlwzy+p47OK25kj0RadRUpDHW91c5OBziDOVqNed9+ZM4fGSVDixEWLceZ
jxuaZvKF4E7PefaRVyqSbDvLtygsXDnxtEW2qVBymogoIAlJKJljXafVhjP5
/LJQDe8sYRA6JtMSZbmEdQNGGKICgq+uzT+pxvW97bQjKCMil6f6yg56V4Fr
Rq6LVu/WDBiZqgKR3wsDM1GwtK+MJQLQ7+uIygShT1guWnCX2cpnxNSZPdE8
OA0exIk8zyTzhQgnVmKkpbMhgzdHVLMCIJYY/JxkAPKGkeqGYLsoS+D6r/E7
+qzUkSOWSYlAW5RxjM0oQg6lbG33WzqfnkTKub+nVkV1ibtBdDIANRCPnV+O
JmiyCR4l8MKESCj8AIjEHJvKyxs5O/ManS0FFgqHs5gz9w0KFOAtrIu9idxR
Svq74CLR5p4noPUeZsHoSjLZUfCqm6U1ZwB94nBaRyNdPMKMesvZna/zX8fm
HhSQA/8519PqLpoNBerol+fFbGWPAO3vVVmuPK+pmib5g/IN+CPiMjPiGP/9
//g/5dPXYqG8y372WJe4dmmqr5N3F+lqPE2Tkbw3Ep4D3Oj13snubuLccU0R
nMaMJ24CnSGCDcZ0pM54NX8YDumD+zo51qd9oe1By9rKxuvD/X1uD41ngtD+
bD/5frwm01nofsrWpKJnVJz7CYxxOVb5PEEIIMgYbtYuJCpvvOW1DRL2HnhV
fzjgVVENBE6vJ1DDAAteXywjo48OYDrtadz6G+l4YzLclA7w4QKfddxryGeo
ZVOTuIbbv2lS9k42ZUkJC/A0Uxffpcv5UfXElb4gLQ8UgCMk7lPW0v3OwqVI
SBpWJ7Kz/nOTT961piUKopKzoR9YQ0FvjVzQU5hztUrZOlCH/HYmhmpE8/OR
1cSk7knbGVRgAfvzqZTE8aJA4DLc3Z0pl1eXWBQHioVZuElKTlLkLcjyvDuF
S6IjeOqw70WjIoGavF7EEVIyxGKPKowvIIlnAnKw2j0ktYcAEPdVPCTUD4SY
Msw4MDv3dN8frlC3B/fVP0C1GdKJfKW2AiSIy2WPadnfXfDNOkruysl/uMiW
a+32bhIVE5QmS8CAcoz7IvMkVqJF3uraeb8sgCJ7kgZ+fPf4MJ3BgHa6JKuK
OJVF69G9ydAUNdQiRiW3Pab8bTV8wi6BhiBKDoLXzcM4auhyJKyMoM1EX1D5
R6wtgPCaP+ozH2agGWD4j1OnDlX9RHVXEtAlqETwwxfz0Bm6vRzIyOfdlr5z
cd8tqXPGoEDJyCZEyUni01AkHCBIt2LqvvSmbnFMZqYvCBm1QGuVcL++Njsk
ZWvLCzJSRj6ONgm1vgD7W8uNonCHow85YThyBPp0dXaDohAnyrQja7cxj8Ru
fjgA3/mxfijgDyCt4q8fcOlcGUetoqomq+TIKSc1mR99MS11HGTFHFbDAdbU
Xsesw4Z2sLVcWx9g8z4gIc/TJfyo4TeXRDXShsr9OXcKu5CAYum9ghV0BeOw
LS8rPT6EvVmEKBzAJMfZXcMpSh1SoXid5hwO1sHgBpCVvIreYuquqrKR9IzW
Yn+6unj+trvkn65fnDz75tmTtwSMa4w5cHpMonoRiOE7zYZrdrF5JuEZxvY4
hIjK2FF+NJGydu1la05QbwCFmkfstM4w/EWgic9MSCM96/UkWTZK1gA4BUGj
Nb2rXckxm4/s3ASPLTSwFpr45hyNhMb79gkk0QmoJx1pouwC1WMHMu+SW1Li
ZrSbfVZ1FGG+kaR7IyuXC7eU54cpmTdXuPFq1NMz0qcxmVxb29lewRDkwZRT
6L0KThp5Fepy2lUGD35DlpkwOCtV7TPai08oVWHnBcVtATkktxXR8f7GTuyg
bDchavW6ygpuRGplMVvkg6O8+/q3oo4HtHTE5Qk//eyASI1Qvi/apzUwZhRO
S5XQEG5Q04Y7xWiPAfahr/1dwOncbOiQ6ywqLWYJaP8qYDP/KMe2w6ohGgIA
2lFIiluFkCkSHAwc5D7oikSqQsLMfAZrgJB/4WAonAWTBOD+UK4z1tKUxFIi
6Bh0cRfF36n9RTnlmaHtVF2g8y1wvTsuQmjxDzROy6o5csZEGW0nzL7lmraQ
Il7GXMCprdwwhpeCRVS114i7HDm9c3ry8nw3+enPr6/Ob8+uz/766uKtentb
mfIa04neyuG8Yg5LnL6HFwere72gbFCUmCeYN7fKJygLVhHSU5O92zPgvnAF
K8otflAvOAV+U5fPiIT6w5qyPa3G4GqSRMmYlmH8A//JVEwESJjEkEe+EQ7T
XhIT9rSv8eGAcpC8y1b/KNrIg76lpjEi75cX4gk9Nvz+yvD7U+X3IKrGnpsm
45TRZZoXQXlQeojhgmS3B0QykUfAhZZLkjUoNlGaj3HEXejAnM1V8bVDSjNE
0rhU0RVrV+jWbIT9ptqYwjB8sVJEl0/L5xyJ7pIWvnGzJLQWSCTJcdMGvhfa
nghxxns4Irtx7S2mHrDqdjOyZuE49DZtvcqxg+Ss0op6KYX3cvoKql4PnHVD
PxWRwCabLjc1lo0J2plAmTozuwjsGIGde1VEkqitQVdr2GQk1lIWGog0ptGj
iMbcslB1H47AwdaUGf1V35Mp6yH4xDjZVuRVF45W17DXCVtPOI8kzkyOg33h
/BcsLFeKv6ZMCEiC5y+/vzy7+eEtRSJxAEiU5EuhwJED0MioFAZAVdEq6biy
xX+Ag+cou1C2ihopKWToJptsKI7rRGoWMqLhVTAsc2p9qBsaGiKTEqXZZ9Kr
bKA2Fu3bA2wqq7TymdayLb16QVC0aahaJcaQ402MQFauNU+m1bVSn40KlJGL
WQjBy/MTiiPWSmdUUZPCTt/lBbeFrbJ71OKpNsWonfptSxKxcM8JabOMeabU
0vA9NCQ5PM9s/Wx2DxdmY1EGI1dkY5RnxquyZJ2ZATFD7hg48XxDBeHGVfku
8zgx1DQcaksmtcUUVldkM19vuKpDNc5hsurBRoEMODi/ezdxEUita1GAhkuF
jDAqfKLB/yx0wPFO3kWMoo5oLFEjNIdhRVt1LYhExJtrh1ohbeO6nfG+BhK8
wE3KMIqvDlGOi7RasZrqJSm2INZLybM22+dOhccvjztgf8s9UeiS+IlJ9IQA
zC0c1pXWOjoPvSx3sKzObqJlolhqIpZ3fnZ2RtPCjJJeANO9yVvurnZacRS3
ECqtYbgtCazqOJfzV6kJSPA8ayXW1sqCj8/3Li/2frg6QeH2Hae44uvXp5fH
UsvDTjugWH6SN8qlRPV3tUWRSTc+1pX9NNOHIl1pER2sskssVASJNdUrwEO9
kZqZCCvAtZYPySeD8QjVtCIp0V6hnZSZuYYhkP6EamxB9204nZkfwk5NdYs7
W1uexgalPtjdl0Qwmdpk1PCFryg7wUKgFdtjn24cTjLe5KbEUb2ZoMEYrYam
hh8gBAxPRyFWlTmJ6Oyu1gagUrfmPxmuibB6PPF1E5n77HHAGu4N9CLq68f2
aLbfkfhAtp8UtMI3WT5Nkx82KabA3z5gqvv3VT7HLMnLPyfH7xZjoHMD0Kgq
uKkqTY6LzbhcbgbJnzNY/LtsA5J4xkDx44/J39K1Ri3mVSjlO9H1SOo/VbJo
B0iYSjpUV8QsnIi9rjsN+2353dAqCSL+hkDSr0JFmpYZy9fxiNdGrSy5nIcv
m52LPYbu7Sg5WaC1pVyjdny8nGXL6QC0lAyZNnDFoi7h7z/DtT/HhkYvM9j/
CYZTZUu43b/Bof0C0hcMgr/+DRTVDZI9+AvO/xSfXVDyIzwzXVDC6CVIRyBT
omm3QXnqMl2sNqCeJj+kIMPhRcxmFdDbP+f4WzUBuTz5sdrk/5gNgPwBAwOG
9OMGdJBBco3S5QXXlEI8Ty5yuMnLslrC+5dpOcCVLuHTBhXaG2rLkVyCrPIL
cqOX+RqGuiynuKgUJMQp/FEvqgwmOl5m75PrzeohBQjM7jBnHrSXaXIzWawA
T+GB6h8AKjewjUX0xx2s+nk6rjYgpgPSvdsUTcp7Sm7zd+9grbDFFxWC6mtg
8/Db8yoHYvLXtAbS/QvsaZMnbwh64TzgQOCPGgRIPurkv+Xwxv+Kp/t+w3/8
COSpAEDFNy5gpPkEf4WbiCAuRpJo8acpwBjgDfLXFO+0dcXH71IAhFOABopS
51Jn1R0WW/kRAGcBtHZD/d8CiKqhnVJ2KPNqqenREiRvAoZxnc4Nh0NKzUUK
ICp1EjIO2nGpHx753ySaPGANG4NNuo91O4RGx8TsH2PH5SilIm6IpRlv/vVX
Ly/+xgn7fiDV1dAhCn8j9aRuHdqZwfBW1BRV81O3cWhuX8Rs367EC0u+Twb1
QE92Dvfxv7txVkiU8agVBXc00XxX63RQd66/0hu/qu9i72Q3/LGLLY407Ena
IfW1y/p1y2dqc7X/fp/aNu3/bnjwO+3htD88II+KfN7f1L7d0v77A/r64HfD
p/75g+FT//zB/vCpvMDPH9LXT2H8/d/J80/hM78An3ECfoGffyzD/G54yC/Q
mIf8An7GP+gFfv4JPQLPwrzy/CGuQZ6HZ4dP7PNPeQnw/LdP5XlYw7dP5Xl4
dvjMPv8NPQLPDr/T8b99Cp/l+We8HnyBn/+WHvkOD3SfXvg1+dN34mjHz/Iw
7df3jArgyk2j2jgmxmrWbrkpfaee1lcf3f8NHOxvBF5AAQA=

-->

</rfc>

