<?xml version="1.0" encoding="UTF-8"?>
<rfc version="3" docName="draft-zhang-cats-clients-request-packet-01" category="std" ipr="trust200902" submissionType="IETF" tocInclude="true" symRefs="true" sortRefs="true" xml:lang="en">
  <front>
    <title abbrev="CATS Client Request Metadata">Carriage of CATS Service Identification and Request Constraints</title>

    <author fullname="Bin Zhang" initials="B." role="editor" surname="Zhang">
      <organization>Pengcheng Laboratory</organization>
      <address><email>zhangb@pcl.ac.cn</email></address>
    </author>

    <author fullname="Yina Dai" initials="Y." role="editor" surname="Dai">
      <organization>Sun Yat-sen University</organization>
      <address><email>daiyn5@mail2.sysu.edu.cn</email></address>
    </author>
	  
    <author fullname="Zongpeng Du" initials="Z." role="editor" surname="Du">
      <organization>China Mobile</organization>
      <address><email>duzongpeng@chinamobile.com</email></address>
    </author>
	  
    <author fullname="Rongwei Yang" initials="R." role="editor" surname="Yang">
      <organization>Pengcheng Laboratory</organization>
      <address><email>yangrw@pcl.ac.cn</email></address>
    </author>

    <date year="2026" month="September" day="21"/>

    <area>Routing</area>
    <workgroup>CATS</workgroup>

    <keyword>CATS</keyword>
    <keyword>CS-ID</keyword>
    <keyword>IPv6 options</keyword>
    <keyword>request constraints</keyword>

    <abstract>
      <t>This document defines a common encoding for a CATS Service Identifier (CS-ID) and optional client-supplied request constraints, and specifies two ways to carry that encoding from a client to an ingress CATS-Forwarder. Mode A carries the encoding in an IPv6 Destination Options or Hop-by-Hop Options header. Mode B carries the same encoding in an application-layer envelope whose position is explicitly identified by an application, API, or transport mapping, and which can operate over IPv4 or IPv6.</t>
      <t>The document specifies how a service request is identified, either by the destination address (e.g., a Virtual Placeholder Address (VPA), an anycast address, or a dedicated service address), by an explicit CS-ID, or by both together. It defines the CS-ID, Network Constraints, and Computing Constraints TLVs and their processing at an ingress CATS-Forwarder, and describes how the extracted information is provided to the CATS Path Selector (C-PS) for service selection. The mechanisms are intended for limited domains in which clients and CATS nodes are provisioned to use the selected mode.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction"><name>Introduction</name>
      <t>The Computing-Aware Traffic Steering (CATS) framework <xref target="I-D.ietf-cats-framework"/> describes how traffic for a service can be steered using both network and computing information, as reported and evaluated by the CATS control plane. To make such decisions, a CATS Traffic Classifier (C-TC) needs an unambiguous input with which to associate a service request with a CS-ID. Some deployments also wish to convey a small set of client-supplied constraints to the CATS Path Selector (C-PS).</t>

      <t>This document addresses this gap by providing a standardized message format that a client can use to explicitly declare:</t>
      <ul>
        <li>the CS-ID that the client wishes to access;</li>
        <li>network requirements, such as minimum bandwidth or maximum latency;</li>
        <li>computing requirements, such as minimum GAS (Global Available Slots) or maximum computing time.</li>
      </ul>

      <t>The computing-requirement vocabulary used by this format (GAS, Computing Time, Price, Reputation, and Security Level) is defined in <xref target="I-D.zhangb-cats-service-metrics-op"/>. This document defines how a client carries a CS-ID and a small set of such requirements to an ingress CATS-Forwarder, and how that forwarder makes the information available to the C-PS. It does not redefine the metrics or the service-selection procedures themselves.</t>

      <t>This document specifies one common metadata encoding and two carriage modes. The encoding is independent of any particular CATS control-plane realization and can be used with centralized, distributed, SDN-based, segment-routing-based, or hybrid CATS deployments.</t>
      <dl>
        <dt>Mode A: IPv6 Option</dt>
        <dd>The metadata is carried as one CATS Request Option in an existing IPv6 Destination Options or Hop-by-Hop Options header. No new IPv6 Extension Header or Next Header value is defined.</dd>
        <dt>Mode B: Application-Layer Envelope</dt>
        <dd>The metadata is carried at a location explicitly identified by a CATS-aware application, API, or transport mapping. A receiver never searches arbitrary payload bytes for the encoding.</dd>
      </dl>
      <t>Both modes are intended for limited domains as described by <xref target="RFC8799"/>, in which clients and CATS nodes are provisioned to use the selected mode. Mode A depends on IPv6 option support along the applicable path; Mode B depends on an explicit framing mapping that tells the CATS-Forwarder where the envelope is. Where the envelope is protected by end-to-end encryption, an on-path classifier can only read it if the CATS processing function is an authorized security endpoint.</t>

      <t>This document does not define application-layer or transport mappings for Mode B, VPA or anycast address allocation, CS-ID discovery or assignment, the C-PS-to-forwarder interface, or service-selection procedures; those are specified elsewhere or by deployment.</t>

      <section anchor="requirements-language"><name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>

    <section anchor="terminology"><name>Terminology</name>
      <t>This document makes use of the following terms defined in <xref target="I-D.ietf-cats-framework"/> and <xref target="I-D.zhangb-cats-service-metrics-op"/>:</t>
      <dl>
        <dt>CS-ID (CATS Service Identifier)</dt>
        <dd>An identifier for a service. Within a CATS domain it acts as a stable lookup key for the C-PS, and it is the value carried by the encoding defined in this document.</dd>
        <dt>CSCI-ID (CATS Service Contact Instance Identifier)</dt>
        <dd>An identifier for the contact information of a service instance that provides a specific CS-ID at a service site. It is the locator ultimately selected by the C-PS and used to establish the data path.</dd>
        <dt>CATS-Forwarder</dt>
        <dd>An IPv6/IPv4 forwarding node, situated in the data plane and taking part in moving information between clients and service sites. A CATS-Forwarder that first handles a client service request is an ingress CATS-Forwarder.</dd>
        <dt>C-TC (CATS Traffic Classifier)</dt>
        <dd>A component that identifies whether a packet or flow matches the criteria of a CATS service, typically co-located with an ingress CATS-Forwarder.</dd>
        <dt>C-PS (CATS Path Selector)</dt>
        <dd>A component that selects the service contact instance, and the path toward it, that best meets the CS-ID and the client-supplied and operator constraints.</dd>
        <dt>GAS (Global Available Slots)</dt>
        <dd>The maximum number of concurrent requests or sessions a service site is willing and able to serve for a specific CS-ID at a given time, as defined in <xref target="I-D.zhangb-cats-service-metrics-op"/>.</dd>
      </dl>
      <t>Additionally, this document defines the following terms:</t>
      <dl>
        <dt>CATS domain</dt>
        <dd>A limited domain, as described by <xref target="RFC8799"/>, whose operator controls the CATS clients or their attachment authorization, the participating CATS-Forwarders, and the interpretation of CS-IDs.</dd>
        <dt>VPA (Virtual Placeholder Address)</dt>
        <dd>An operator-assigned destination address that can route a request to an ingress CATS-Forwarder for interception and reinterpretation. A VPA is one possible deployment choice and is not part of the CS-ID wire encoding.</dd>
      </dl>
    </section>

    <section anchor="packet-overview"><name>Client Service Request Packet Overview</name>
      <t>This section provides an overview of the structure of a client service request packet. The detailed encoding is specified in <xref target="common-encoding"/> and the carriage modes are specified in <xref target="mode-a"/> and <xref target="mode-b"/>.</t>

      <t>A client service request packet has the general structure shown in the following figure:</t>
      <artwork><![CDATA[
+---------------------------------------------------------------+
|                    IP Header (IPv4 or IPv6)                   |
|  Source: client's address                                     |
|  Destination: VPA, anycast, or dedicated service address      |
+---------------------------------------------------------------+
|  [Optional] IPv6 Options Header with the CATS Request Option  |
|            (Mode A)                                           |
+---------------------------------------------------------------+
|  Transport Header (TCP/UDP/QUIC/etc.)                         |
+---------------------------------------------------------------+
|  [Optional] CATS Request Envelope with the TLVs (Mode B)      |
|                   -- position identified by a mapping         |
+---------------------------------------------------------------+
|  Application Payload                                          |
+---------------------------------------------------------------+
]]></artwork>

      <t>The general parts are as follows:</t>
      <dl>
        <dt>IP Header</dt>
        <dd>The source is the client address. The destination is a VPA, an anycast service address, or a dedicated service address within the client-facing domain. The destination may itself identify the service, or it may only identify an ingress CATS-Forwarder.</dd>
        <dt>IPv6 Options Header (Mode A)</dt>
        <dd>Optional. Carries a CATS Request Option with the metadata, using an existing Destination Options or Hop-by-Hop Options header (<xref target="mode-a"/>).</dd>
        <dt>Transport Header</dt>
        <dd>The client transport protocol. It is unaffected by the CATS metadata unless Mode B is used at a transport-mapped location.</dd>
        <dt>CATS Request Envelope (Mode B)</dt>
        <dd>Optional. Carries the same metadata TLVs in an application-layer envelope whose position is identified by a mapping (<xref target="mode-b"/>).</dd>
        <dt>Application Payload</dt>
        <dd>The application data of the request.</dd>
      </dl>

      <t>Every service request packet MUST identify a service as specified in <xref target="service-identification"/>. Constraint information is OPTIONAL. A packet MAY carry the metadata in Mode A, in Mode B, or not at all when the destination address itself identifies the service unambiguously.</t>
    </section>

    <section anchor="common-encoding"><name>Common CATS Request Metadata Encoding</name>
      <t>Section <xref target="packet-overview"/> presented the overall packet structure. This section specifies the byte-level encoding shared by the two carriage modes: an ordered sequence of CATS Request TLVs. The encoding is independent of the carriage mechanism. Mode A (<xref target="mode-a"/>) and Mode B (<xref target="mode-b"/>) each define only how to place this sequence into their own container and do not define any metadata format of their own, so a C-TC or C-PS parses the same encoding regardless of the mode in which a request arrives.</t>
      <t>All multi-octet integers use network byte order. Each TLV has the following header.</t>

      <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   TLV Type    |   TLV Flags   |          TLV Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         TLV Value ...                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <dl>
        <dt>TLV Type</dt>
        <dd>An 8-bit type from the CATS Request TLV Types registry (<xref target="iana-tlv"/>).</dd>
        <dt>TLV Flags</dt>
        <dd>Bit 0 is Critical (C). An implementation that does not understand a TLV with C=1 MUST reject the metadata block; it MUST ignore an unknown TLV with C=0. Bits 1 through 7 MUST be zero on transmission and ignored on receipt.</dd>
        <dt>TLV Length</dt>
        <dd>The unsigned length of the TLV Value in octets, excluding the four-octet TLV header.</dd>
      </dl>

      <t>The CS-ID TLV MAY appear at most once. The Network Constraints and Computing Constraints TLVs are OPTIONAL and MUST NOT appear more than once each. Duplicate singleton TLVs, invalid lengths, and TLVs extending beyond the containing block are malformed, and the request MUST be rejected.</t>

      <t>If neither constraint TLV is present, the client expresses no explicit network or computing requirement. The C-PS SHOULD then select the best eligible service contact instance according to the operator's default policy. For example, a deployment can use network reachability or proximity in an anycast-like manner and then apply its default computing policy. Absence of client constraints does not mean that every possible metric must be optimized simultaneously.</t>

      <t>A client includes a constraint entry when it needs either a quantitative bound, such as at least 1 Gbit/s of available bandwidth, or an explicit optimization objective, such as the shortest available computing time.</t>

      <section anchor="service-identification"><name>Service Identification Alternatives</name>
        <t>Every request MUST identify a service using at least one of the following sources:</t>
        <ol>
          <li><t><strong>Address-based identification:</strong> The destination VPA, anycast address, dedicated service address, or destination prefix is mapped by the C-TC to one CS-ID.</t></li>
          <li><t><strong>Explicit identification:</strong> A CS-ID TLV carries the CS-ID independently of the destination address.</t></li>
        </ol>
        <t>Address-based identification is generally simpler when one stable address unambiguously identifies one service. A client SHOULD use address-based identification without a CS-ID TLV when the configured destination already identifies one service unambiguously. A client MUST include the CS-ID TLV when the destination identifies only a CATS ingress, when multiple services share the destination, or when local policy requires explicit identification.</t>
        <t>Address-based identification and an explicit CS-ID are not mutually exclusive. A request MAY use both sources. In that case, the CATS-Forwarder MUST resolve the address-based identifier and compare it with the complete CS-ID TLV. If they differ, the request MUST be rejected, treating the mismatch as an authorization failure. Network and computing constraints MAY accompany any of these identification choices.</t>

        <table anchor="identification-combinations"><name>Permitted Service Identification Combinations</name>
          <thead><tr><th>Destination Address Mapping</th><th>CS-ID TLV</th><th>Constraint TLVs</th><th>Use</th></tr></thead>
          <tbody>
            <tr><td>Maps to one CS-ID</td><td>Absent</td><td>Optional</td><td>Preferred address-based form</td></tr>
            <tr><td>Does not identify one service</td><td>Present</td><td>Optional</td><td>Explicit form</td></tr>
            <tr><td>Maps to one CS-ID</td><td>Present and matching</td><td>Optional</td><td>Combined form</td></tr>
            <tr><td>Maps to one CS-ID</td><td>Present but different</td><td>Any</td><td>Invalid; reject</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="cs-id-tlv"><name>CS-ID TLV</name>
        <t>The CS-ID TLV carries the CATS Service Identifier when explicit service identification is used.</t>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Type = 1     |C|  Reserved   |          TLV Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                      CS-ID (variable)                         ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Type</dt><dd>1, identifying the CS-ID TLV.</dd>
          <dt>C</dt><dd>The Critical bit MUST be set to 1 because a receiver cannot use an unrecognized explicit service identifier.</dd>
          <dt>Reserved</dt><dd>Bits 1 through 7 of TLV Flags. They MUST be zero on transmission and ignored on receipt.</dd>
          <dt>TLV Length</dt><dd>The length of the CS-ID in octets. Values 2, 4, 8, and 16 are RECOMMENDED for 16-bit, 32-bit, 64-bit, and 128-bit identifiers, respectively. Other lengths from 1 through 32 octets MAY be used by agreement within a CATS domain.</dd>
          <dt>CS-ID</dt><dd>An opaque identifier of TLV Length octets. Receivers MUST compare the complete octet string and MUST NOT infer structure from its length or contents.</dd>
        </dl>
        <t>A CS-ID must be unambiguous within its CATS domain; it need not be globally unique. Permitted values and client authorization are supplied by discovery or provisioning. At a domain boundary, a gateway either maps the CS-ID under an explicit inter-domain agreement or rejects the request.</t>
      </section>

      <section anchor="constraint-tlvs"><name>Constraint TLVs</name>
        <t>Type 2 is Network Constraints and Type 3 is Computing Constraints. This section defines the entry format shared by both TLVs and then the format of each TLV. These constraints are policy inputs, not measurements; a C-PS MUST NOT treat a client assertion as current network or computing state.</t>
        <section anchor="constraint-entry-format"><name>Constraint Entry Format</name>
        <t>A constraint TLV begins with Num Entries and three reserved octets, followed by fixed-size entries. Reserved fields MUST be zero on transmission and ignored on receipt.</t>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Num Entries  |                    Reserved                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Req Type    |   Req Flags   |           Unit Code           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Unsigned Value                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Req Type</dt><dd>An 8-bit value from the applicable requirement registry.</dd>
          <dt>Req Flags</dt><dd>Bit 0 is Hard (H). If H=1, failure to satisfy a non-zero quantitative bound causes rejection; if H=0, the value is a preference. Other bits MUST be zero on transmission and ignored on receipt. H MUST be zero when Unsigned Value is zero.</dd>
          <dt>Unit Code</dt><dd>A 16-bit value from the CATS Request Units registry. The unit MUST be permitted for the Req Type.</dd>
          <dt>Unsigned Value</dt><dd>A 32-bit unsigned integer. A non-zero value specifies the quantitative bound defined by Req Type. Zero means that the client does not specify a numeric bound but requests the best available value for that metric. For a maximum-type requirement, zero requests minimization; for a minimum-type requirement, zero requests maximization. Such a zero-valued entry is an optimization preference, not a zero threshold or resource guarantee.</dd>
        </dl>
        </section>

        <section anchor="network-constraints-format"><name>Network Constraints TLV Format</name>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Type = 2     |C|  Reserved   |          TLV Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Num Entries  |                    Reserved                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Network Requirement Entry 1 (first 4 octets)           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Network Requirement Entry 1 (last 4 octets)           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                              ...                              ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>TLV Length MUST equal 4 + (8 * Num Entries). Each entry uses the format in <xref target="constraint-entry-format"/> and a Req Type from the Network Requirement Types table in <xref target="network-types"/>. The C bit SHOULD be zero unless the applicable application profile requires all network entries to be understood.</t>
        <table anchor="network-types"><name>Network Requirement Types</name>
          <thead><tr><th>Type</th><th>Name</th><th>Direction</th><th>Unit</th></tr></thead>
          <tbody>
            <tr><td>1</td><td>Path Latency</td><td>maximum</td><td>1 (microseconds)</td></tr>
            <tr><td>2</td><td>Available Bandwidth</td><td>minimum</td><td>2 (kilobits/second)</td></tr>
            <tr><td>3</td><td>Packet Loss Ratio</td><td>maximum</td><td>3 (parts per million)</td></tr>
            <tr><td>4</td><td>Packet Delay Variation</td><td>maximum</td><td>1 (microseconds)</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="computing-constraints-format"><name>Computing Constraints TLV Format</name>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Type = 3     |C|  Reserved   |          TLV Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Num Entries  |                    Reserved                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Computing Requirement Entry 1 (first 4 octets)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Computing Requirement Entry 1 (last 4 octets)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                              ...                              ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>TLV Length MUST equal 4 + (8 * Num Entries). Each entry uses the format in <xref target="constraint-entry-format"/> and a Req Type from the Computing Requirement Types table in <xref target="computing-types"/>. The C bit SHOULD be zero unless the applicable application profile requires all computing entries to be understood.</t>
        <table anchor="computing-types"><name>Computing Requirement Types</name>
          <thead><tr><th>Type</th><th>Name</th><th>Direction</th><th>Unit</th></tr></thead>
          <tbody>
            <tr><td>1</td><td>Global Available Slots (GAS)</td><td>minimum</td><td>4 (slots)</td></tr>
            <tr><td>2</td><td>Computing Time</td><td>maximum</td><td>1 (microseconds)</td></tr>
            <tr><td>3</td><td>Price</td><td>maximum</td><td>5 (service-profile price units)</td></tr>
            <tr><td>4</td><td>Reputation</td><td>minimum</td><td>6 (service-profile score)</td></tr>
            <tr><td>5</td><td>Security Level</td><td>minimum</td><td>7 (service-profile level)</td></tr>
          </tbody>
        </table>
        <t>GAS, Computing Time, Price, Reputation, and Security Level are the service-oriented metrics defined in <xref target="I-D.zhangb-cats-service-metrics-op"/>. Price, Reputation, and Security Level are meaningful only when the client and CATS domain share the corresponding service profile, including scale and comparison rules. Unknown profiles MUST be rejected. Future work should align additional entries with the CATS metrics definition instead of duplicating metric semantics.</t>
      </section>
      </section>


    </section>

    <section anchor="mode-a"><name>Mode A: IPv6 CATS Request Option</name>
      <t>Mode A places one CATS Request Option in an IPv6 Destination Options header or, subject to the applicability below, a Hop-by-Hop Options header. The containing header follows <xref target="RFC8200"/> as updated by <xref target="RFC9673"/>.</t>
      <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Option Type  | Opt Data Len  | Version | R  |    Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    CATS Request TLVs ...                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <dl>
        <dt>Option Type</dt><dd>TBD1. The act bits are 00 (skip if unrecognized) and chg is 0 (immutable en route).</dd>
        <dt>Opt Data Len</dt><dd>Length after this field, in octets.</dd>
        <dt>Version</dt><dd>Four bits; this document defines version 1.</dd>
        <dt>R</dt><dd>Four reserved bits, zero on transmission and ignored on receipt.</dd>
        <dt>Reserved</dt><dd>Eight bits, zero on transmission and ignored on receipt.</dd>
      </dl>
      <t>A node that does not recognize the option processes it according to its action bits, that is, it skips it. A CATS node that recognizes the option applies the TLV Critical-bit rules of <xref target="common-encoding"/>: it MUST reject the request if it contains an unknown TLV with the Critical bit set and MUST ignore an unknown TLV with the Critical bit clear.</t>
      <t>A node changing a field must be an authorized endpoint for the client-facing leg and originate a new packet; it MUST NOT silently modify a transit packet. In a Hop-by-Hop Options header, the CATS option SHOULD NOT exceed 64 octets or four constraint entries.</t>

      <section anchor="mode-a-applicability"><name>Mode A Applicability</name>
        <t>Mode A is suitable for a controlled IPv6 domain in which the client, the selected CATS-Forwarder, and relevant network devices are known to pass and, where required, process the selected IPv6 Options header. It is NOT RECOMMENDED as the only means of service identification over an unverified Internet path. IPv6 Extension Headers can be filtered, and routers are not required to process every Hop-by-Hop option. <xref target="RFC9098"/> and <xref target="RFC9673"/> apply.</t>
        <t>A Destination Options header is RECOMMENDED when the VPA or other destination identifies the ingress CATS-Forwarder as the endpoint of the client-facing leg. A Hop-by-Hop Options header MAY be used when explicitly configured routers must examine the option. A transit router MUST NOT inspect a Destination Option as though it were a Hop-by-Hop Option.</t>
        <t>Support MUST be established by configuration, capability discovery, or an application-specific procedure before Mode A is used. A client MUST NOT infer support merely from a lack of an ICMP error. If Mode A is unavailable, the client uses a separately established Mode B mapping or an operator-defined address-based classifier. Sending both modes in one packet is not reliable fallback if that packet is discarded because it contains an Extension Header.</t>
      </section>

      <section anchor="mode-a-processing"><name>Mode A Processing</name>
        <ol>
          <li><t>Process the option only when configured as the applicable CATS-Forwarder or an authorized endpoint.</t></li>
          <li><t>Validate the IPv6 header chain, option length, version, TLV bounds, and singleton rules. The first fragment MUST contain the complete IPv6 header chain through the upper-layer header as required by <xref target="RFC7112"/>.</t></li>
          <li><t>Reject unsupported versions and malformed critical metadata, with error signaling subject to rate limits.</t></li>
          <li><t>Validate and authorize the CS-ID before consulting the C-PS. Reject unknown or unauthorized CS-IDs.</t></li>
          <li><t>An ingress that terminates the client-facing leg MUST remove the option or construct a new packet without it unless an explicit downstream contract authorizes propagation.</t></li>
        </ol>
      </section>
    </section>

    <section anchor="mode-b"><name>Mode B: CATS Request Envelope</name>
      <t>Mode B carries the same metadata TLVs in an application-layer envelope. Its use and exact position MUST be identified by an application protocol, API, or transport mapping. Defining such mappings is outside the scope of this document.</t>
      <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Magic (0x43415453)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version |Flags|    Reserved   |         Metadata Length       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    CATS Request TLVs ...                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <dl>
        <dt>Magic</dt><dd>0x43415453. It is a framing check, not discovery or authentication.</dd>
        <dt>Version</dt><dd>Four bits; this document defines version 1.</dd>
        <dt>Flags and Reserved</dt><dd>Twelve bits, zero on transmission and ignored on receipt.</dd>
        <dt>Metadata Length</dt><dd>Length in octets of the TLVs after the fixed eight-octet header.</dd>
      </dl>
      <t>A receiver MUST parse an envelope only where a mapping says one is present. It MUST NOT scan arbitrary payload for the magic value. The complete envelope MUST be available before use; a stream mapping must provide framing and reassembly.</t>
      <t>Insertion or removal can change transport lengths, checksums, sequence spaces, and application semantics. A device MUST do so only as an endpoint or explicitly authorized proxy. A generic CATS-Forwarder MUST NOT rewrite opaque application payload.</t>

      <section anchor="mode-b-applicability"><name>Mode B Applicability</name>
        <t>Mode B is suitable when an application protocol, API, or transport mapping explicitly identifies the CATS envelope and its position. It can operate over IPv4 or IPv6, but it is not a transparent prefix for an arbitrary TCP, UDP, or QUIC application stream.</t>
        <t>An on-path CATS-Forwarder can parse Mode B only when the envelope is outside end-to-end encryption or when that forwarder is an authorized security endpoint, such as a trusted proxy. Deployments MUST NOT weaken end-to-end security solely to expose CATS metadata.</t>
      </section>
    </section>

    <section anchor="addressing"><name>Addressing and VPA Use</name>
      <t>This section describes how the destination address can route a request to an ingress CATS-Forwarder and participate in service identification. It does not define the format, allocation, or routing procedure for a VPA or anycast address; those matters are supplied by the applicable addressing and deployment specification.</t>

      <t>A VPA is a destination address that routes a packet to an ingress CATS-Forwarder so that the forwarder can intercept and reinterpret it. It is a deployment choice. A deployment MAY instead use a service anycast address, an ingress CATS-Forwarder address, or another local classifier. When the destination address, anycast address, or dedicated service address already maps to one CS-ID, that address-based identification SHOULD be used in preference to carrying a duplicate CS-ID TLV.</t>

      <t>An anycast address expresses reachability to the nearest node that advertises the address. When a CATS deployment advertises a service address from multiple service sites or accesses the ingress at the nearest CATS-Forwarder, the destination address itself becomes a service-selection signal, and the C-PS still applies its default policy or the carried constraints. Using an address that identifies a service is generally simpler than carrying an explicit CS-ID, while carrying an explicit CS-ID is useful when the identifier must be independent of the destination locator or when several services share one address.</t>

      <t>A VPA prefix MUST come from address space the operator is entitled to use, MUST be routed within the client-facing domain to intended ingress nodes, and MUST be filtered at boundaries absent an inter-domain agreement. Operators must account for private IPv4 overlap and generate IPv6 Unique Local Addresses per <xref target="RFC4193"/>. Whether a particular destination is treated as a VPA is an operator decision; an address does not become non-routable merely by being called a VPA.</t>

      <t>This document requests no address prefix. If an address identifies a service and an explicit CS-ID is also present, they MUST agree; a mismatch is an authorization failure as described in <xref target="service-identification"/>. Examples in this document use <xref target="RFC5737"/> and <xref target="RFC3849"/> documentation space, which MUST NOT be used in production.</t>
    </section>

    <section anchor="processing"><name>Ingress Processing and Failure Handling</name>
      <t>When an ingress CATS-Forwarder receives a client service request, the CATS Traffic Classifier (C-TC) classifies the packet and the CATS Path Selector (C-PS) is consulted to select the CSCI-ID and the path toward it. With the CS-ID and constraints extracted as described in this document, the C-PS makes its selection as specified in <xref target="I-D.zhangb-cats-service-metrics-op"/>. The ingress processing steps are as follows:</t>
      <ol>
        <li><t>Classify only packets on an authorized attachment matching a configured address-based, Mode A, or Mode B profile.</t></li>
        <li><t>Perform inexpensive length, version, rate-limit, and source checks before C-PS lookup or control-plane punt.</t></li>
        <li><t>Resolve the CS-ID from the destination address, the CS-ID TLV, or both as specified in <xref target="service-identification"/>. Reject a request with no service identification or with inconsistent sources.</t></li>
        <li><t>Reject malformed, unknown-critical, duplicate, unknown-CS-ID, and unauthorized-CS-ID requests.</t></li>
        <li><t>Apply operator bounds to constraints. Client values do not override access, admission, or local policy.</t></li>
        <li><t>If a hard constraint cannot be met, reject the request. A preference MAY be ignored under policy.</t></li>
        <li><t>Install state only after selection succeeds. Implementations SHOULD bound pending requests, cache reusable results, define state lifetime, and specify C-PS timeout behavior.</t></li>
      </ol>
      <t>Failure actions include rejection, an authorized default instance, or asking a cooperating client to retry another supported mode. A device MUST NOT bypass CATS to an arbitrary destination if doing so violates policy.</t>
      <t>Flow binding is deployment-specific. A five-tuple is not always stable across NAT, QUIC migration, multipath, or fragmentation. The applicable mapping or policy MUST define the key and lifetime.</t>
    </section>

    <section anchor="dual-mode"><name>Use of Both Modes</name>
      <t>Using both modes is NOT RECOMMENDED in normal operation because it duplicates information and does not solve Extension Header filtering. It MAY be used in a controlled experiment or transition.</t>
      <t>If both are visible, the CS-ID and duplicated constraints MUST be identical. A mismatch MUST be rejected and SHOULD be rate-limited in logs. The deployment profile MUST state which encoding is authoritative for fields present in only one mode; there is no universal precedence rule.</t>
    </section>

    <section anchor="operational"><name>Operational Considerations</name>
      <t>Operators SHOULD validate the selected mode over intended paths, including firewalls, tunnels, load balancers, hardware offload, fragmentation, and path MTU. Mode A testing must check both forwarding of the Options header and processing of TBD1.</t>
      <t>Implementations SHOULD expose counters for malformed metadata, unknown versions, unauthorized CS-IDs, unsatisfied hard constraints, rate-limit drops, C-PS timeouts, and dual-mode mismatch, while minimizing identifying data.</t>
      <t>This mechanism supplies C-PS input but does not require a particular C-PS-to-forwarder protocol. Failure or non-adoption of one control protocol does not change this wire encoding.</t>
    </section>

    <section anchor="security"><name>Security Considerations</name>
      <t>CATS metadata can influence traffic placement and scarce computing resources and is therefore untrusted input.</t>
      <ul>
        <li><t>An ingress MUST validate that a CS-ID exists and that the authenticated client or attachment is authorized. Source-address filtering alone is insufficient.</t></li>
        <li><t>The ingress MUST validate lengths, counts, reserved fields, type/unit combinations, and value ranges before invoking the C-PS. Parsing MUST be bounded by the containing option or envelope.</t></li>
        <li><t>The ingress MUST rate-limit before expensive parsing or control work, and SHOULD use per-client quotas, bounded pending state, and negative caching. Bad traffic MUST NOT create unbounded logs or errors.</t></li>
        <li><t>Where packets can be modified, metadata MUST receive integrity protection binding it to client identity and the relevant flow, for example IPsec, a mutually authenticated channel, or authenticated attachment security.</t></li>
        <li><t>A magic value, VPA, CS-ID, nonce, or timestamp is not authentication. Replay protection requires integrity-protected freshness and bounded receiver state; this version relies on the selected security association.</t></li>
        <li><t>Metadata MUST be removed at its authorized scope boundary absent an explicit propagation agreement. Packet changes must account for IPsec and other integrity protection.</t></li>
      </ul>
      <t>The guidance in <xref target="RFC3552"/> applies.</t>
    </section>

    <section anchor="privacy"><name>Privacy Considerations</name>
      <t>A CS-ID and constraints can reveal the application, workload, latency sensitivity, budget, or security expectations. Mode A exposes them to nodes inspecting the IPv6 header. Mode B is confidential only inside a secure channel, in which case a transparent on-path CATS-Forwarder cannot read it.</t>
      <t>Deployments SHOULD minimize fields and precision, use coarse profiles where practical, limit visibility to the ingress trust domain, and avoid stable per-user identifiers. Logs MUST be access controlled and SHOULD use the shortest practical retention.</t>
    </section>

    <section anchor="iana"><name>IANA Considerations</name>
      <section anchor="iana-ipv6-option"><name>IPv6 Option Type</name>
        <t>IANA is requested to assign one value from the "Destination Options and Hop-by-Hop Options" registry:</t>
        <table anchor="iana-option-table">
          <thead><tr><th>Hex</th><th>act</th><th>chg</th><th>rest</th><th>Description</th><th>Reference</th></tr></thead>
          <tbody><tr><td>TBD1</td><td>00</td><td>0</td><td>TBD</td><td>CATS Request Option</td><td>This document</td></tr></tbody>
        </table>
        <t>No new IPv6 Extension Header or Next Header value is requested.</t>
      </section>
      <section anchor="iana-tlv"><name>CATS Request TLV Types Registry</name>
        <t>IANA is requested to create this registry. Values 1-127 are Specification Required, 128-254 are Private Use, and 0 and 255 are Reserved, following <xref target="RFC8126"/>. Specifications must define syntax, multiplicity, processing, and security.</t>
        <table anchor="iana-tlv-table">
          <thead><tr><th>Value</th><th>Name</th><th>Reference</th></tr></thead>
          <tbody>
            <tr><td>0</td><td>Reserved</td><td>This document</td></tr>
            <tr><td>1</td><td>CS-ID</td><td>This document</td></tr>
            <tr><td>2</td><td>Network Constraints</td><td>This document</td></tr>
            <tr><td>3</td><td>Computing Constraints</td><td>This document</td></tr>
            <tr><td>4-127</td><td>Unassigned</td><td></td></tr>
            <tr><td>128-254</td><td>Private Use</td><td>This document</td></tr>
            <tr><td>255</td><td>Reserved</td><td>This document</td></tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-requirements"><name>Requirement and Unit Registries</name>
        <t>IANA is requested to create Network Requirement Types, Computing Requirement Types, and Request Units under a CATS Request Parameters group. For the two 8-bit Requirement Type registries, 0 is Reserved, 1-127 are Specification Required, 128-254 are Private Use, and 255 is Reserved. For the 16-bit Request Units registry, 0 is Reserved, 1-32767 are Specification Required, 32768-65534 are Private Use, and 65535 is Reserved. Initial requirement assignments are in <xref target="network-types"/> and <xref target="computing-types"/>. Unit assignments are 1 microseconds, 2 kilobits/second, 3 parts per million, 4 slots, 5 service-profile price units, 6 service-profile reputation score, and 7 service-profile security level. A sender SHOULD choose a unit that keeps the value within the range of the 32-bit Unsigned Value field; for example, a bandwidth above roughly 4 Tbit/s should use a coarser unit.</t>
      </section>
    </section>
  </middle>

  <back>
    <references><name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author initials="S." surname="Bradner"/><date month="March" year="1997"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/></reference>
      <reference anchor="RFC7112" target="https://www.rfc-editor.org/info/rfc7112"><front><title>Implications of Oversized IPv6 Header Chains</title><author initials="F." surname="Gont"/><author initials="V." surname="Manral"/><author initials="R." surname="Bonica"/><date month="January" year="2014"/></front><seriesInfo name="RFC" value="7112"/></reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author initials="B." surname="Leiba"/><date month="May" year="2017"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/></reference>
      <reference anchor="RFC8200" target="https://www.rfc-editor.org/info/rfc8200"><front><title>Internet Protocol, Version 6 (IPv6) Specification</title><author initials="S." surname="Deering"/><author initials="R." surname="Hinden"/><date month="July" year="2017"/></front><seriesInfo name="STD" value="86"/><seriesInfo name="RFC" value="8200"/></reference>
      <reference anchor="RFC9673" target="https://www.rfc-editor.org/info/rfc9673"><front><title>IPv6 Hop-by-Hop Options Processing Procedures</title><author initials="R." surname="Hinden"/><author initials="G." surname="Fairhurst"/><date month="October" year="2024"/></front><seriesInfo name="RFC" value="9673"/></reference>
      <reference anchor="I-D.zhangb-cats-service-metrics-op" target="https://datatracker.ietf.org/doc/html/draft-zhangb-cats-service-metrics-op-05"><front><title>Computing Service Metric Definitions and Operation under CATS</title><author initials="B." surname="Zhang"/><author initials="Y." surname="Dai"/><author initials="Z." surname="Du"/><author initials="C." surname="Miao"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-zhangb-cats-service-metrics-op-05"/></reference>
      <reference anchor="I-D.ietf-cats-framework" target="https://datatracker.ietf.org/doc/draft-ietf-cats-framework/"><front><title>A Framework for Computing-Aware Traffic Steering (CATS)</title><author initials="C." surname="Li"/><author initials="Z." surname="Du"/><author initials="M." surname="Boucadair"/><author initials="L. M." surname="Contreras"/><author initials="J." surname="Drake"/><date month="April" year="2026"/></front><seriesInfo name="Internet-Draft" value="draft-ietf-cats-framework-24"/></reference>
      <reference anchor="RFC4193" target="https://www.rfc-editor.org/info/rfc4193"><front><title>Unique Local IPv6 Unicast Addresses</title><author initials="R." surname="Hinden"/><author initials="B." surname="Haberman"/><date month="October" year="2005"/></front><seriesInfo name="RFC" value="4193"/></reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126"><front><title>Guidelines for Writing an IANA Considerations Section in RFCs</title><author initials="M." surname="Cotton"/><author initials="B." surname="Leiba"/><author initials="T." surname="Narten"/><date month="June" year="2017"/></front><seriesInfo name="BCP" value="26"/><seriesInfo name="RFC" value="8126"/></reference>
      <reference anchor="RFC8799" target="https://www.rfc-editor.org/info/rfc8799"><front><title>Limited Domains and Internet Protocols</title><author initials="B." surname="Carpenter"/><author initials="B." surname="Liu"/><date month="July" year="2020"/></front><seriesInfo name="RFC" value="8799"/></reference>
      <reference anchor="RFC9098" target="https://www.rfc-editor.org/info/rfc9098"><front><title>Operational Implications of IPv6 Packets with Extension Headers</title><author initials="G." surname="Gont"/><author initials="N." surname="Hilliard"/><author initials="G." surname="Doering"/><author initials="W." surname="Kumari"/><date month="September" year="2021"/></front><seriesInfo name="RFC" value="9098"/></reference>
    </references>
    <references><name>Informative References</name>
      <reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3552"><front><title>Guidelines for Writing RFC Text on Security Considerations</title><author initials="E." surname="Rescorla"/><author initials="B." surname="Korver"/><date month="July" year="2003"/></front><seriesInfo name="BCP" value="72"/><seriesInfo name="RFC" value="3552"/></reference>
      <reference anchor="RFC3849" target="https://www.rfc-editor.org/info/rfc3849"><front><title>IPv6 Address Prefix Reserved for Documentation</title><author initials="G." surname="Huston"/><author initials="A." surname="Lord"/><author initials="P." surname="Smith"/><date month="July" year="2004"/></front><seriesInfo name="RFC" value="3849"/></reference>
      <reference anchor="RFC5737" target="https://www.rfc-editor.org/info/rfc5737"><front><title>IPv4 Address Blocks Reserved for Documentation</title><author initials="J." surname="Arkko"/><author initials="M." surname="Cotton"/><author initials="L." surname="Veggoda"/><date month="January" year="2010"/></front><seriesInfo name="RFC" value="5737"/></reference>
    </references>

    <section anchor="examples"><name>Examples</name>
      <t>The examples use documentation addresses and illustrative CS-ID values. They do not assign production addresses or CS-IDs.</t>

      <section anchor="example-default"><name>Address-Based Identification without Client-Specified Constraints</name>
        <t>A client sends a request to the service anycast address 2001:db8:100::1. The deployment maps that address to CS-ID 0x00010001. The request carries no CS-ID TLV and no Network Constraints or Computing Constraints TLV. The address identifies the service, while the absence of constraint TLVs means that the client expresses no preference for bandwidth, latency, computing time, price, or another metric.</t>
        <t>The ingress CATS-Forwarder derives and validates CS-ID 0x00010001, then asks the C-PS to select the best eligible instance according to the domain's default policy. For example, the policy can first select a network-near site in an anycast-like manner and then choose an available instance at that site.</t>
      </section>

      <section anchor="example-mode-a"><name>Mode A with a Bandwidth Bound and Fastest Computing</name>
        <t>An IPv6 client at 2001:db8:10::1 sends a service request to the VPA 2001:db8:200::1. In this deployment the VPA identifies the CATS ingress but not a particular service, so a Destination Options header carries a CATS Request Option with the following TLVs:</t>
        <ul>
          <li><t>CS-ID TLV: Type 1, C=1, CS-ID 0x00020001.</t></li>
          <li><t>Network Constraints TLV: Available Bandwidth, H=1, Unit Code 2, Unsigned Value 1000000. This requests at least 1,000,000 kilobits/second (1 Gbit/s).</t></li>
          <li><t>Computing Constraints TLV: Computing Time, H=0, Unit Code 1, Unsigned Value 0. This supplies no numeric time bound and requests the candidate with the shortest available computing time.</t></li>
        </ul>
        <t>The C-PS first removes candidates that cannot provide the hard bandwidth bound. Among the remaining eligible candidates, it uses computing time as an optimization objective together with operator policy. If no candidate meets the bandwidth bound, the request is rejected.</t>
      </section>

      <section anchor="example-mode-b"><name>Mode B with Multiple Computing Requirements</name>
        <t>A CATS-aware application sends to the dedicated service address 192.0.2.30, which the deployment maps to CS-ID 0x00030001. Its Mode B envelope also carries CS-ID TLV 0x00030001, illustrating that address-based and explicit identification can coexist. The envelope contains these entries:</t>
        <ul>
          <li><t>Path Latency: H=1, Unit Code 1, Unsigned Value 20000 (at most 20 milliseconds).</t></li>
          <li><t>GAS: H=1, Unit Code 4, Unsigned Value 10 (at least 10 slots).</t></li>
          <li><t>Price: H=1, Unit Code 5, Unsigned Value 100 (at most 100 price units under the applicable service profile).</t></li>
          <li><t>Reputation: H=0, Unit Code 6, Unsigned Value 0 (prefer the highest reputation).</t></li>
          <li><t>Security Level: H=1, Unit Code 7, Unsigned Value 3 (at least level 3 under the applicable service profile).</t></li>
        </ul>
        <t>The mapping explicitly identifies the envelope location. An on-path CATS-Forwarder does not search arbitrary application bytes for it. If the envelope is inside end-to-end encryption, this example applies only when the CATS processing function is an authorized security endpoint.</t>
      </section>

      <section anchor="example-byte-level"><name>Byte-Level Mode A Request</name>
        <t>This example shows the Mode A request of <xref target="example-mode-a"/> as an octet-level packet. The IPv6 Next Header value 0x3B indicates that no upper-layer header is shown for brevity; the Destination Options header is 48 octets and is 8-octet aligned per <xref target="RFC8200"/>. TBD1 is shown as 0x1E for illustration only.</t>
        <artwork><![CDATA[
 60 00 00 00 00 30 3C 20 20 01 0d b8 00 10 00 00  IPv6: ver 6, Payload
 00 00 00 00 00 00 00 01 20 01 0d b8 02 00 00 00  Len 0x30, NH 0x3C,
 00 00 00 00 00 00 00 01 3B 05 1E 2A 10 00 01 80  src/dst, DOH, option
 00 04 00 02 00 01 02 00 00 0C 01 00 00 00 02 80  CS-ID TLV, Net TLV
 00 02 00 0F 42 40 03 00 00 0C 01 00 00 00 02 00  Net TLV, Comp TLV
 00 01 00 00 00 00 01 00                             Comp TLV, PadN
]]></artwork>
        <dl>
          <dt>IPv6 header</dt><dd>Source 2001:db8:10::1, destination 2001:db8:200::1 (the VPA), Payload Length 0x30 (48), Next Header 0x3C (Destination Options).</dd>
          <dt>Destination Options header</dt><dd>Next Header 0x3B (no upper-layer header), Hdr Ext Len 0x05 (48 octets total).</dd>
          <dt>CATS Request Option</dt><dd>Option Type 0x1E (illustrative value for TBD1), Opt Data Len 0x2A (42 octets after this field), Version 1, R 0, Reserved 0.</dd>
          <dt>CS-ID TLV</dt><dd>Type 1, C=1, Length 4, value 0x00020001.</dd>
          <dt>Network Constraints TLV</dt><dd>Type 2, C=0, Length 0x0C (12); Num Entries 1; entry: Available Bandwidth, H=1, Unit Code 2 (kbit/s), value 0x000F4240 (1,000,000).</dd>
          <dt>Computing Constraints TLV</dt><dd>Type 3, C=0, Length 0x0C (12); Num Entries 1; entry: Computing Time, H=0, Unit Code 1 (microseconds), value 0 (best available).</dd>
          <dt>PadN</dt><dd>Two octets (0x01 0x00) aligning the Destination Options header to 48 octets.</dd>
        </dl>
      </section>
    </section>


    <section anchor="acknowledgements"><name>Acknowledgements</name>
      <t>The authors thank CATS Working Group participants for their review and comments.</t>
    </section>
  </back>
</rfc>
