<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-corneo-schc-ctx-mgmt-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Context Management">SCHC Context Management Extensions</title>
    <seriesInfo name="Internet-Draft" value="draft-corneo-schc-ctx-mgmt-00"/>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Jorvas</city>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Westerlund" fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Kista</city>
          <country>Sweden</country>
        </postal>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>Internet</area>
    <workgroup>Static Context Header Compression</workgroup>
    <keyword>SCHC</keyword>
    <keyword>Context management</keyword>
    <abstract>
      <?line 46?>

<t>This document defines extensions to the Static Context Header
Compression (SCHC) framework that improve context management
efficiency. Two categories of mechanisms are introduced: rule
referencing CDAs (ref and ref-edit) that enable composable rule
definitions and reduce context storage, and a rule fragment branching
CDA (branch) with associated Matching Operators that enable dynamic
multi-layer protocol compression without combinatorial rule explosion.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-corneo-schc-ctx-mgmt/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Static Context Header Compression Working Group mailing list (<eref target="mailto:schc@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/schc/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/schc/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lorenzocorneo/draft-corneo-schc-ctx-mgmt"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Static Context Header Compression (SCHC), defined in <xref target="RFC8724"/>,
provides a mechanism for compressing protocol headers over constrained
networks by defining rules in a context shared between sender and
receiver.</t>
      <t>SCHC was initially designed for low-power wide-area networks serving a
small number of devices with small, static contexts. As the framework
evolved to support scalable deployments, diverse technologies (cellular
traffic, space communication), and multi-layer protocol stacks, several
limitations emerged:</t>
      <ul spacing="normal">
        <li>
          <t>As the number and heterogeneity of devices increase, the context
size grows. Dynamic approaches such as payload compression further
increase the number of rules, potentially adding duplicate or
partially duplicate field descriptions. Context updates become
frequent, increasing protocol overhead and energy consumption.</t>
        </li>
        <li>
          <t>As the rule set grows, rule matching time increases, potentially
creating bottlenecks and additional latency.</t>
        </li>
        <li>
          <t>Compressing multiple protocol layers (e.g., IPv6/UDP/RTP) in
combined rules forces duplication of lower-layer field descriptions
across rules, creating a combinatorial explosion. Supporting N
variants of IPv6 addresses with M upper-layer protocols requires
N*M rules.</t>
        </li>
        <li>
          <t>Protocols with variable or optional headers (e.g., IPv6 extension
headers) cannot be efficiently compressed, as each combination
requires its own rule.</t>
        </li>
      </ul>
      <t>This document addresses these limitations by defining:</t>
      <ul spacing="normal">
        <li>
          <t>Rule referencing CDAs (<xref target="rule-referencing"/>) that allow rules to
reference and compose other rules, reducing duplication.</t>
        </li>
        <li>
          <t>A rule fragment branching mechanism (<xref target="rule-fragment-branching"/>)
that enables dynamic selection of rule fragments based on packet
content, eliminating combinatorial explosion.</t>
        </li>
      </ul>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The following terms are used in this document:</t>
      <dl>
        <dt>Adjacent Field Descriptors:</dt>
        <dd>
          <t>A set of field descriptions within one rule that belong to a single
protocol layer.</t>
        </dd>
        <dt>Deprecated Rule:</dt>
        <dd>
          <t>A rule (or subset of a rule) that has been selected to be merged
into a new rule using referencing CDAs.</t>
        </dd>
        <dt>Merged Rule:</dt>
        <dd>
          <t>A rule that includes at least one of the referencing CDAs defined
in this document.</t>
        </dd>
        <dt>Rule Fragment:</dt>
        <dd>
          <t>A rule designed to compress a portion of a packet (e.g., a single
protocol layer) and intended to be composed with other rule
fragments via branching.</t>
        </dd>
      </dl>
    </section>
    <section anchor="rule-referencing">
      <name>Rule Referencing</name>
      <t>This section defines two novel Compression/Decompression Actions (CDAs)
that enable SCHC rules to reference other rules in the context. These
CDAs reduce context storage requirements and enable composable rule
definitions.</t>
      <section anchor="the-refn-cda">
        <name>The ref(N) CDA</name>
        <t>The "ref" CDA references an existing rule within the SCHC context.
When a field description uses ref(N), the compressor/decompressor
<bcp14>MUST</bcp14> suspend processing of the current rule and apply Rule N to the
corresponding portion of the packet. Once Rule N has been fully
processed, the compressor/decompressor <bcp14>MUST</bcp14> resume processing the
next field description in the original rule.</t>
        <t>The argument N is the Rule ID of the referenced rule.</t>
        <t>When ref(N) is used, the Target Value (TV) and Field Length (FL) fields
in the referencing field description are not used for compression.
Instead, the TVs and FLs of the referenced Rule N apply.</t>
        <t>The following example illustrates the use of ref(N). Consider a
dedicated IPv6 compression rule (Rule 2):</t>
        <figure anchor="fig-rule2">
          <name>Dedicated IPv6 Compression Rule</name>
          <artwork><![CDATA[
Rule 2
+----------------+--+--+--+---------+--------+------------+
| FID            |FL|FP|DI| TV      | MO     | CDA        |
+----------------+--+--+--+---------+--------+------------+
|IPv6 Version    |4 |1 |Bi|6        | ignore | not-sent   |
|IPv6 Diffserv   |8 |1 |Bi|0        | equal  | not-sent   |
|IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent   |
|IPv6 Length     |16|1 |Bi|         | ignore | compute-*  |
|IPv6 Next Header|8 |1 |Bi|17       | equal  | not-sent   |
|IPv6 Hop Limit  |8 |1 |Bi|255      | ignore | not-sent   |
|IPv6 DevPrefix  |64|1 |Bi|FE80::/64| equal  | not-sent   |
|IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID     |
|IPv6 AppPrefix  |64|1 |Bi|FE80::/64| equal  | not-sent   |
|IPv6 AppIID     |64|1 |Bi|::1      | equal  | not-sent   |
+----------------+--+--+--+---------+--------+------------+
]]></artwork>
        </figure>
        <t>A UDP compression rule can then reference Rule 2 for the IPv6 portion:</t>
        <figure anchor="fig-rule3">
          <name>UDP Rule Referencing IPv6 Rule 2 via ref(N)</name>
          <artwork><![CDATA[
Rule 3
+--------------+--+--+--+---+-------+------------+
| FID          |FL|FP|DI| TV| MO    | CDA        |
+--------------+--+--+--+---+-------+------------+
|IPv6 Rule     |  |1 |Bi|   | ignore| ref(2)     |
+--------------+--+--+--+---+-------+------------+
|UDP DevPort   |16|1 |Dw|123| equal | not-sent   |
|UDP DevPort   |16|1 |Up|124| equal | not-sent   |
|UDP AppPort   |16|1 |Dw|124| equal | not-sent   |
|UDP AppPort   |16|1 |Up|123| equal | not-sent   |
|UDP Length    |16|1 |Bi|   | ignore| compute-*  |
|UDP checksum  |16|1 |Bi|   | ignore| compute-*  |
+--------------+--+--+--+---+-------+------------+
]]></artwork>
        </figure>
        <t>Similarly, a TCP compression rule can reuse the same IPv6 rule.
However, since Rule 2 specifies Next Header = 17 (UDP) with MO =
equal, a TCP rule cannot use ref(2) directly — the Next Header value
would fail to match TCP packets (Next Header = 6). Instead, Rule 4
uses ref-edit(2,1) to override the Next Header field description,
demonstrating why ref-edit is necessary when a referenced rule
contains a field value that differs for the referencing protocol:</t>
        <figure anchor="fig-rule4">
          <name>TCP Rule Referencing IPv6 Rule 2 via ref-edit(N,M)</name>
          <artwork><![CDATA[
Rule 4
+-----------------+--+--+--+---+-------+--------------+
| FID             |FL|FP|DI| TV| MO    | CDA          |
+-----------------+--+--+--+---+-------+--------------+
|IPv6 Rule        |  |1 |Bi|   | ignore| ref-edit(2,1)|
|IPv6 Next Header |8 |1 |Bi|6  | equal | not-sent     |
+-----------------+--+--+--+---+-------+--------------+
|TCP DevPort      |16|1 |Dw|321| equal | not-sent     |
|TCP DevPort      |16|1 |Up|421| equal | not-sent     |
|TCP AppPort      |16|1 |Dw|421| equal | not-sent     |
|TCP AppPort      |16|1 |Up|321| equal | not-sent     |
|TCP Length       |16|1 |Bi|   | ignore| compute-*    |
|TCP checksum     |16|1 |Bi|   | ignore| compute-*    |
+-----------------+--+--+--+---+-------+--------------+
]]></artwork>
        </figure>
        <t>In both cases, when the compressor/decompressor encounters a
referencing CDA, it loads Rule 2 and applies it to the IPv6 header
portion of the packet before resuming with the transport layer fields.
For Rule 4, the ref-edit(2,1) CDA first replaces the IPv6 Next Header
field description in Rule 2 with the override (TV = 6), then applies
the modified rule.</t>
      </section>
      <section anchor="the-ref-editnm-cda">
        <name>The ref-edit(N,M) CDA</name>
        <t>The "ref-edit" CDA extends ref(N) by allowing modification of specific
field descriptions in the referenced rule. The argument N is the Rule ID
of the referenced rule, and M indicates the number of field descriptions
immediately following the ref-edit field that specify modifications.</t>
        <t>When processing ref-edit(N,M), the compressor/decompressor <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Load the referenced Rule N.</t>
          </li>
          <li>
            <t>For each of the next M field descriptions in the current rule,
find the field description in Rule N with a matching Field ID (FID).</t>
          </li>
          <li>
            <t>Replace the matched field description in Rule N with the one from
the current rule.</t>
          </li>
          <li>
            <t>Apply the modified Rule N to the packet.</t>
          </li>
        </ol>
        <t>The following example modifies the AppIID field from Rule 2:</t>
        <figure anchor="fig-refedit">
          <name>Using ref-edit to Override AppIID in Rule 2</name>
          <artwork><![CDATA[
+--------------+---+--+--+---------+--------+--------------+
| FID          |FL |FP|DI| TV      | MO     | CDA          |
+--------------+---+--+--+---------+--------+--------------+
|IPv6 Rule     |   |1 |Bi|         | ignore | ref-edit(2,1)|
|IPv6 AppIID   |64 |1 |Bi| ::3     | equal  | not-sent     |
+--------------+---+--+--+---------+--------+--------------+
]]></artwork>
        </figure>
        <t>Here, the decompressor loads Rule 2, locates the IPv6 AppIID field
description, replaces its TV with ::3, and then applies the modified
rule.</t>
      </section>
      <section anchor="context-compression-procedure">
        <name>Context Compression Procedure</name>
        <t>The ref(N) and ref-edit(N,M) CDAs enable context compression
procedures that merge rules sharing common field descriptions. One
way to realize this is a procedure that operates as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Iterate all rules in the context. For each rule, identify sets of
adjacent field descriptions (field descriptions belonging to the
same protocol layer).</t>
          </li>
          <li>
            <t>Group identical sets of adjacent field descriptions that appear in
multiple rules.</t>
          </li>
          <li>
            <t>For each group exceeding a configured threshold of occurrences:
a. Create a new rule containing the shared adjacent field
   descriptions.
b. For each original rule containing the group, create a merged
   rule that uses ref(N) to reference the new rule, plus any
   remaining field descriptions.</t>
          </li>
          <li>
            <t>Signal the new rules to all SCHC endpoints. Once confirmed,
deprecated rules <bcp14>MAY</bcp14> be removed from the context.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="rule-fragment-branching">
      <name>Rule Fragment Branching</name>
      <t>This section defines a novel Compression/Decompression Action (CDA)
and a novel Matching Operator (MO) that enable dynamic composition of
SCHC rule fragments at compression time. These mechanisms allow a
single rule to branch into different rule fragments based on packet
content, solving the combinatorial explosion problem when compressing
multi-layer protocol stacks or protocols with optional/variable headers.</t>
      <section anchor="the-branch-cda">
        <name>The branch CDA</name>
        <t>The "branch" CDA encodes a selection among alternative rule fragments
into the compression residual. branch takes as argument either a Rule
ID identifying the next rule fragment to apply, or NULL indicating that
no further rule processing follows.</t>
        <t>A field description using branch contains a mapping table where each
entry associates:</t>
        <ul spacing="normal">
          <li>
            <t>A Target Value (TV)</t>
          </li>
          <li>
            <t>A Rule ID (or NULL) to apply next</t>
          </li>
          <li>
            <t>A residual value to encode in the compressed packet</t>
          </li>
        </ul>
        <t>The number of bits in the residual is determined by the number of
entries in the mapping table.</t>
        <t>When the compressor encounters a field with branch CDA, it <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Encode the residual value corresponding to the matched entry.</t>
          </li>
          <li>
            <t>Queue the associated Rule ID for subsequent processing.</t>
          </li>
        </ol>
        <t>When the decompressor encounters a branch residual, it <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Decode the residual to determine the index into the mapping table.</t>
          </li>
          <li>
            <t>Use the corresponding Rule ID to decompress the next portion of
the packet.</t>
          </li>
        </ol>
        <t>A branch to NULL indicates that no further rule processing follows
after the current rule completes.</t>
        <t>Two mechanisms determine which branch to take:</t>
        <ul spacing="normal">
          <li>
            <t>Explicit field matching (match-mapping MO, see <xref target="match-mapping-mo"/>):
Used when a protocol header field directly indicates what follows.
For example, the IPv6 Next Header field value 17 explicitly
identifies UDP as the next protocol. This also applies to IPv6
extension headers (Fragment, Destination Options, Hop-by-Hop), each
of which carries its own Next Header field — enabling a chain of
branch decisions through successive extension headers until the
transport layer is reached. The branch selection is encoded as a
residual derived from matching the field value against a mapping
table.</t>
          </li>
          <li>
            <t>Implicit matching (match-rule MO, see <xref target="match-rule-mo"/>): Used when
no single header field identifies what follows. For example, after a
UDP header, there is no field indicating whether the payload is RTP,
CoAP, or something else. The compressor must attempt to match each
candidate rule against the payload content — for instance, checking
whether the payload starts with RTP version = 2 and valid SSRC
fields. The branch selection is encoded as a residual indicating
which rule succeeded.</t>
          </li>
        </ul>
        <section anchor="field-length-semantics">
          <name>Field Length Semantics</name>
          <t>The Field Length (FL) value of a field description using branch
determines its usage:</t>
          <ul spacing="normal">
            <li>
              <t>FL &gt; 0: The field corresponds to an actual packet header field of
the indicated length. The branch is determined by the field value
present in the packet (used with match-mapping MO).</t>
            </li>
            <li>
              <t>FL = 0: There is no corresponding field in the packet. The branch
residual encodes which rule fragment is used to compress the
remainder of the packet after the current rule completes. This is
used when the next protocol is implicit (used with match-rule MO).</t>
            </li>
          </ul>
        </section>
        <section anchor="processing-order">
          <name>Processing Order</name>
          <t>When a rule contains multiple field descriptions with branch CDA, the
Field Position (FP) determines the invocation order. Rule fragments
are processed depth-first: a loaded rule fragment, including any
branch within it, <bcp14>MUST</bcp14> be fully processed before the next queued
branch from the parent rule is invoked.</t>
          <t>Specifically, the compressor maintains a branch queue per rule. After
completing all CDAs in the current rule, the compressor processes the
queue starting with the lowest invocation number. Each dequeued Rule ID
is loaded and its matching and compression operations are performed.
The packet pointer (Current_Location) advances as each rule fragment
is processed.</t>
          <t>This sequential processing imposes a constraint on rule fragment
design: rule fragments <bcp14>MUST</bcp14> be split at protocol boundaries where
different subsequent processing of the packet can occur. A branch
decision point can only appear at a location where the preceding
fields have been fully compressed by the current rule fragment.
Placing a branch mid-way through a protocol header is not supported,
as the queue processes complete rule fragments in order.</t>
        </section>
        <section anchor="failure-handling">
          <name>Failure Handling</name>
          <t>If a loaded rule fragment fails to match the packet at the current
location, the entire compression operation for this packet <bcp14>MUST</bcp14> fail.
The compressor <bcp14>MUST</bcp14> transmit the packet uncompressed (using Rule ID 0).</t>
          <t>A branch to NULL terminates further processing, even if there are
queued invocations in parent rules.</t>
          <t>As a consequence, when the packet content following a branch point may
be unknown or not covered by any rule fragment, the branch mapping
<bcp14>SHOULD</bcp14> include a branch(NULL) entry as a fallback. Without it, an
unrecognized field value (in match-mapping) or a payload matching no
candidate rule (in match-rule) will cause complete compression failure.
Including branch(NULL) allows the compressor to gracefully terminate
rule processing at that point, leaving the remainder of the packet
uncompressed in the SCHC residual.</t>
        </section>
      </section>
      <section anchor="match-mapping-mo">
        <name>The match-mapping MO with branch</name>
        <t>When branch is used with a non-zero FL, the existing match-mapping MO
(defined in <xref target="RFC8724"/>) is used to determine which branch to take. The
TV field contains an array of values. The MO matches when the packet
field value equals one of the TV entries, and the index of the matching
entry selects the corresponding branch argument.</t>
        <t>The following example shows an IPv6 rule using match-mapping with
branch on the Next Header field:</t>
        <figure anchor="fig-branch-ipv6">
          <name>IPv6 Rule with branch on Next Header</name>
          <artwork><![CDATA[
Rule 2
+----------------+--+--+--+---------+--------+--------------+------+
| FID            |FL|FP|DI| TV      | MO     | CDA          | Sent |
+----------------+--+--+--+---------+--------+--------------+------+
|IPv6 Version    |4 |1 |Bi|6        | ignore | not-sent     |      |
|IPv6 Diffserv   |8 |1 |Bi|0        | equal  | not-sent     |      |
|IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent     |      |
|IPv6 Length     |16|1 |Bi|         | ignore | compute-*    |      |
|IPv6 Next Header|8 |1 |Bi|17       | mapping| branch(3)    |0b000 |
|                |  |  |  |6        | mapping| branch(4)    |0b001 |
|                |  |  |  |44       | mapping| branch(5)    |0b010 |
|                |  |  |  |60       | mapping| branch(6)    |0b011 |
|                |  |  |  |41       | mapping| branch(7)    |0b100 |
|                |  |  |  |59       | mapping| branch(NULL) |0b101 |
|IPv6 Hop Limit  |8 |1 |Bi|255      | ignore | not-sent     |      |
|IPv6 DevPrefix  |64|1 |Bi|FE80::/64| equal  | not-sent     |      |
|IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID       |      |
|IPv6 AppPrefix  |64|1 |Bi|FE80::/64| equal  | not-sent     |      |
|IPv6 AppIID     |64|1 |Bi|::1      | equal  | not-sent     |      |
+----------------+--+--+--+---------+--------+--------------+------+
]]></artwork>
        </figure>
        <t>The mapping table for the Next Header field is:</t>
        <table anchor="tab-nh-mapping">
          <name>Next Header Branch Mapping</name>
          <thead>
            <tr>
              <th align="left">TV</th>
              <th align="left">Next Rule</th>
              <th align="left">Residual</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">17</td>
              <td align="left">Rule 3 (UDP)</td>
              <td align="left">0b000</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Rule 4 (TCP)</td>
              <td align="left">0b001</td>
            </tr>
            <tr>
              <td align="left">44</td>
              <td align="left">Rule 5 (Fragment)</td>
              <td align="left">0b010</td>
            </tr>
            <tr>
              <td align="left">60</td>
              <td align="left">Rule 6 (Dest Opts)</td>
              <td align="left">0b011</td>
            </tr>
            <tr>
              <td align="left">41</td>
              <td align="left">Rule 7 (IPv6-in-6)</td>
              <td align="left">0b100</td>
            </tr>
            <tr>
              <td align="left">59</td>
              <td align="left">NULL (No Next Hdr)</td>
              <td align="left">0b101</td>
            </tr>
          </tbody>
        </table>
        <t>When compressing, if the IPv6 Next Header field contains 17 (UDP),
the compressor encodes 0b000 as residual and queues Rule 3 for
processing after the current rule completes.</t>
      </section>
      <section anchor="match-rule-mo">
        <name>The match-rule MO</name>
        <t>The "match-rule" MO is a novel Matching Operator for use with branch
when FL = 0 (no corresponding packet field). It determines which
rule fragment matches the remainder of the packet by attempting to
match each referenced rule in order.</t>
        <t>The match-rule MO takes a list of Rule IDs as argument. For each
referenced Rule ID, in list order, the compressor <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Save the current packet location.</t>
          </li>
          <li>
            <t>Load the referenced rule and perform all its matching operations
starting at the current location.</t>
          </li>
          <li>
            <t>If all fields match successfully, return the index of this rule.</t>
          </li>
          <li>
            <t>If any field fails to match, reset the packet location and
proceed to the next Rule ID in the list.</t>
          </li>
        </ol>
        <t>If no rule matches and no NULL entry exists, the match-rule MO fails.
If the list contains a NULL entry, it automatically matches when
reached. Therefore, a NULL entry <bcp14>SHOULD</bcp14> be placed last in the list;
any entries after NULL will never be evaluated.</t>
        <t>The following example shows match-rule used in a UDP rule to branch
into RTP or CoAP compression:</t>
        <figure anchor="fig-match-rule">
          <name>UDP Rule with match-rule Branching to RTP/CoAP</name>
          <artwork><![CDATA[
Rule 3
+--------------+--+--+--+----+-----------------+--------------+------+
| FID          |FL|FP|DI| TV | MO              | CDA          | Sent |
+--------------+--+--+--+----+-----------------+--------------+------+
|UDP.SrcPort   |16|1 |Dw|1123| equal           | not-sent     |      |
|UDP.SrcPort   |16|1 |Up|1124| equal           | not-sent     |      |
|UDP.DstPort   |16|1 |Dw|1124| equal           | not-sent     |      |
|UDP.DstPort   |16|1 |Up|1123| equal           | not-sent     |      |
|UDP.Length    |16|1 |Bi|    | ignore          | compute-*    |      |
|UDP.checksum  |16|1 |Bi|    | ignore          | compute-*    |      |
|UDP.PayProto  |0 |1 |Bi|    | match-rule(8)   | branch(8)    | 0b00 |
|              |  |  |  |    | match-rule(9)   | branch(9)    | 0b01 |
|              |  |  |  |    | match-rule(NULL)| branch(NULL) | 0b10 |
+--------------+--+--+--+----+-----------------+--------------+------+
]]></artwork>
        </figure>
        <t>Here, after compressing the UDP header, the compressor attempts to
match Rule 8 (RTP) against the UDP payload. If RTP matching succeeds,
0b00 is encoded and Rule 8 is used. Otherwise, Rule 9 (CoAP) is
attempted. If neither matches, the NULL entry matches and no further
compression is applied to the payload.</t>
      </section>
      <section anchor="interaction-between-branch-and-refn">
        <name>Interaction Between branch and ref(N)</name>
        <t>The branch CDA and the ref(N) CDA (defined in <xref target="rule-referencing"/>)
are complementary mechanisms:</t>
        <ul spacing="normal">
          <li>
            <t>ref(N) provides static rule composition: the referenced rule is
always applied unconditionally.</t>
          </li>
          <li>
            <t>branch provides dynamic rule composition: the referenced rule
fragment is selected based on packet content or rule matching at
compression time.</t>
          </li>
        </ul>
        <t>Both mechanisms <bcp14>MAY</bcp14> be used within the same context. A rule fragment
referenced by branch <bcp14>MAY</bcp14> itself contain ref(N) references to other
rules.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section provides comprehensive examples demonstrating the
mechanisms defined in this document.</t>
      <section anchor="ipv6udptcp-rule-composition-using-refn-and-ref-editnm">
        <name>IPv6/UDP/TCP Rule Composition Using ref(N) and ref-edit(N,M)</name>
        <t>This example shows how ref(N) and ref-edit(N,M) eliminate duplication
when multiple transport protocols share the same IPv6 compression rule.</t>
        <t>Without referencing CDAs, compressing IPv6/UDP and IPv6/TCP requires
two complete rules, each repeating 10 IPv6 field descriptions. With
referencing CDAs, a single IPv6 rule (Rule 2 in <xref target="fig-rule2"/>) is
defined once and referenced by the UDP rule (Rule 3 in <xref target="fig-rule3"/>)
using ref(2), and the TCP rule (Rule 4 in <xref target="fig-rule4"/>) using
ref-edit(2,1) to override the Next Header value from 17 to 6.</t>
        <t>For a context with 3 IPv6 address variants and 4 transport/application
protocols, the traditional approach requires 12 rules with 10
duplicated IPv6 field descriptions each (120 total IPv6 field
descriptions). Using referencing CDAs, only 3 IPv6 rules plus 4
transport rules are needed (3 + 4 = 7 rules, 30 IPv6 field
descriptions).</t>
      </section>
      <section anchor="multi-protocol-branching-with-branch">
        <name>Multi-Protocol Branching with branch</name>
        <t>This example demonstrates branch used with match-mapping to handle
IPv6 packets with different next headers. Rule 2 in
<xref target="fig-branch-ipv6"/> uses the IPv6 Next Header field to branch into
different rule fragments for UDP, TCP, IPv6 Fragment Header,
Destination Options, and IPv6-in-IPv6 tunneling.</t>
        <t>The following rule fragments are referenced by the branch entries:</t>
        <section anchor="udp-rule-fragment-rule-3">
          <name>UDP Rule Fragment (Rule 3)</name>
          <figure anchor="fig-ex-udp">
            <name>UDP Rule Fragment with Payload Branching</name>
            <artwork><![CDATA[
Rule 3
+--------------+--+--+--+----+-----------------+--------------+------+
| FID          |FL|FP|DI| TV | MO              | CDA          | Sent |
+--------------+--+--+--+----+-----------------+--------------+------+
|UDP.SrcPort   |16|1 |Dw|1123| equal           | not-sent     |      |
|UDP.SrcPort   |16|1 |Up|1124| equal           | not-sent     |      |
|UDP.DstPort   |16|1 |Dw|1124| equal           | not-sent     |      |
|UDP.DstPort   |16|1 |Up|1123| equal           | not-sent     |      |
|UDP.Length    |16|1 |Bi|    | ignore          | compute-*    |      |
|UDP.checksum  |16|1 |Bi|    | ignore          | compute-*    |      |
|UDP.PayProto  |0 |1 |Bi|    | match-rule(8)   | branch(8)    | 0b00 |
|              |  |  |  |    | match-rule(9)   | branch(9)    | 0b01 |
|              |  |  |  |    | match-rule(NULL)| branch(NULL) | 0b10 |
+--------------+--+--+--+----+-----------------+--------------+------+
]]></artwork>
          </figure>
          <t>Rule 3 compresses the UDP header and then uses match-rule to determine
whether the payload is RTP (Rule 8), CoAP (Rule 9), or unknown (NULL).</t>
        </section>
        <section anchor="tcp-rule-fragment-rule-4">
          <name>TCP Rule Fragment (Rule 4)</name>
          <figure anchor="fig-ex-tcp">
            <name>TCP Rule Fragment</name>
            <artwork><![CDATA[
Rule 4
+--------------+--+--+--+----+--------+------------+------+
| FID          |FL|FP|DI| TV | MO     | CDA        | Sent |
+--------------+--+--+--+----+--------+------------+------+
|TCP.SrcPort   |16|1 |Dw|1321| equal  | not-sent   |      |
|TCP.SrcPort   |16|1 |Up|1421| equal  | not-sent   |      |
|TCP.DstPort   |16|1 |Dw|1421| equal  | not-sent   |      |
|TCP.DstPort   |16|1 |Up|1321| equal  | not-sent   |      |
|TCP.Length    |16|1 |Bi|    | ignore | compute-*  |      |
|TCP.checksum  |16|1 |Bi|    | ignore | compute-*  |      |
+--------------+--+--+--+----+--------+------------+------+
]]></artwork>
          </figure>
        </section>
        <section anchor="ipv6-fragment-header-rule-fragment-rule-5">
          <name>IPv6 Fragment Header Rule Fragment (Rule 5)</name>
          <t>This rule handles the first fragment of a fragmented IPv6 packet.
The Next Header field in the fragment header uses branch to determine
what protocol follows.</t>
          <figure anchor="fig-ex-frag">
            <name>IPv6 First Fragment Rule Fragment</name>
            <artwork><![CDATA[
Rule 5
+----------------+--+--+--+---+--------+--------------+------+
| FID            |FL|FP|DI| TV| MO     | CDA          | Sent |
+----------------+--+--+--+---+--------+--------------+------+
|Frag Next Header|8 |1 |Bi|17 | mapping| branch(3)    |0b000 |
|                |  |  |  | 6 | mapping| branch(4)    |0b001 |
|                |  |  |  |60 | mapping| branch(6)    |0b010 |
|                |  |  |  |41 | mapping| branch(7)    |0b011 |
|                |  |  |  |59 | mapping| branch(NULL) |0b100 |
|Frag Reserved   |8 |1 |Bi|0  | ignore | not-sent     |      |
|Frag Offset     |13|1 |Bi|0  | equal  | not-sent     |      |
|Frag Res        |2 |1 |Bi|0  | equal  | not-sent     |      |
|Frag M flag     |1 |1 |Bi|1  | equal  | not-sent     |      |
|Frag Ident      |32|1 |Bi|   | ignore | value-sent   |      |
+----------------+--+--+--+---+--------+--------------+------+
]]></artwork>
          </figure>
        </section>
        <section anchor="ipv6-in-ipv6-tunneling-rule-fragment-rule-7">
          <name>IPv6-in-IPv6 Tunneling Rule Fragment (Rule 7)</name>
          <t>For IPv6-in-IPv6 tunneling, the inner header may use different
address prefixes than the outer header. This rule does not include
IPv6-in-IPv6 as a further nesting option.</t>
          <figure anchor="fig-ex-inner-ipv6">
            <name>Inner IPv6 Header Rule Fragment</name>
            <artwork><![CDATA[
Rule 7
+----------------+--+--+--+---------+--------+--------------+------+
| FID            |FL|FP|DI| TV      | MO     | CDA          | Sent |
+----------------+--+--+--+---------+--------+--------------+------+
|IPv6 Version    |4 |1 |Bi|6        | ignore | not-sent     |      |
|IPv6 Diffserv   |8 |1 |Bi|0        | equal  | not-sent     |      |
|IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent     |      |
|IPv6 Length     |16|1 |Bi|         | ignore | compute-*    |      |
|IPv6 Next Header|8 |1 |Bi|17       | mapping| branch(3)    |0b000 |
|                |  |  |  | 6       | mapping| branch(4)    |0b001 |
|                |  |  |  |44       | mapping| branch(5)    |0b010 |
|                |  |  |  |60       | mapping| branch(6)    |0b011 |
|                |  |  |  |59       | mapping| branch(NULL) |0b100 |
|IPv6 Hop Limit  |8 |1 |Bi|255      | ignore | not-sent     |      |
|IPv6 DevPrefix  |64|1 |Bi|2001::/64| equal  | not-sent     |      |
|IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID       |      |
|IPv6 AppPrefix  |64|1 |Bi|2001::/64| equal  | not-sent     |      |
|IPv6 AppIID     |64|1 |Bi|::1      | equal  | not-sent     |      |
+----------------+--+--+--+---------+--------+--------------+------+
]]></artwork>
          </figure>
        </section>
        <section anchor="rtp-rule-fragment-rule-8">
          <name>RTP Rule Fragment (Rule 8)</name>
          <figure anchor="fig-ex-rtp">
            <name>RTP Base Header Rule Fragment</name>
            <artwork><![CDATA[
Rule 8
+----------------+--+--+--+---------+--------+------------+------+
| FID            |FL|FP|DI| TV      | MO     | CDA        | Sent |
+----------------+--+--+--+---------+--------+------------+------+
|RTP.version     |2 |1 |Bi|2        | equal  | not-sent   |      |
|RTP.padding     |1 |1 |Bi|0        | equal  | not-sent   |      |
|RTP.Extension   |1 |1 |Bi|0        | ignore | value-sent |      |
|RTP.csrc-count  |4 |1 |Bi|0b00     | MSB(2) | LSB(2)     |      |
|RTP.marker      |1 |1 |Bi|0        | ignore | value-sent |      |
|RTP.payloadType |7 |1 |Bi|0b1100000| MSB(2) | LSB(5)     |      |
|RTP.SeqNr       |16|1 |Bi|0        | ignore | value-sent |      |
|RTP.SSRC        |32|1 |Bi|0        | ignore | value-sent |      |
+----------------+--+--+--+---------+--------+------------+------+
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="compression-walkthrough">
        <name>Compression Walkthrough</name>
        <t>Consider an IPv6/UDP/RTP packet with the following header values:</t>
        <ul spacing="normal">
          <li>
            <t>IPv6 Next Header: 17 (UDP)</t>
          </li>
          <li>
            <t>UDP Source Port: 1123 (downlink)</t>
          </li>
          <li>
            <t>UDP Destination Port: 1124 (downlink)</t>
          </li>
          <li>
            <t>RTP Version: 2</t>
          </li>
        </ul>
        <t>The compression proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The compressor iterates through the rule set and attempts to match
each rule against the packet. Rule 2 (<xref target="fig-branch-ipv6"/>) is
selected as the initial rule because its IPv6 field descriptions
(Version, Diffserv, Flow Label, Hop Limit, prefixes, IIDs) all
match the packet. Note that Rule 2 here uses branch rather than
a fixed Next Header value, so matching succeeds regardless of the
transport protocol.</t>
          </li>
          <li>
            <t>IPv6 fields are matched and compressed. The Next Header field
(value 17) matches the first mapping entry. The compressor
encodes residual 0b000 and queues Rule 3 for processing.</t>
          </li>
          <li>
            <t>After completing Rule 2, the compressor loads Rule 3
(<xref target="fig-ex-udp"/>). UDP fields are matched and compressed.</t>
          </li>
          <li>
            <t>The match-rule MO at the end of Rule 3 loads Rule 8 and attempts
matching against the UDP payload. RTP version = 2 matches the
first field. All other RTP fields match. The compressor encodes
residual 0b00 and processes Rule 8.</t>
          </li>
          <li>
            <t>Rule 8 (<xref target="fig-ex-rtp"/>) compresses the RTP header fields.</t>
          </li>
        </ol>
        <t>The resulting compressed packet contains: Rule ID + IPv6 branch
residual (3 bits) + UDP payload branch residual (2 bits) + RTP
residual fields (Extension, csrc-count LSB, marker, payloadType LSB,
SeqNr, SSRC).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The mechanisms defined in this document introduce new attack surfaces
related to context provisioning and rule processing.</t>
      <section anchor="circular-reference-attacks">
        <name>Circular Reference Attacks</name>
        <t>The ref(N), ref-edit(N,M), and branch CDAs create directed references
between rules. If not validated, a malicious or misconfigured context
could contain circular references (e.g., Rule A references Rule B
which references Rule A), causing the compressor or decompressor to
enter an infinite loop.</t>
        <t>Implementations <bcp14>MUST</bcp14> detect circular references when a context is
provisioned or updated. A simple approach is to verify that the rule
reference graph is a directed acyclic graph (DAG). Alternatively,
implementations <bcp14>MAY</bcp14> enforce a maximum reference depth and abort
processing if exceeded.</t>
      </section>
      <section anchor="resource-exhaustion-attacks">
        <name>Resource Exhaustion Attacks</name>
        <t>Deeply nested rule references, large branch mapping tables, or
extensive match-rule candidate lists can consume significant
processing time and memory on constrained devices. An attacker able
to provision or influence context content could craft rules designed
to exhaust device resources.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> enforce limits on:</t>
        <ul spacing="normal">
          <li>
            <t>Maximum reference chain depth (number of nested ref/ref-edit/branch
invocations).</t>
          </li>
          <li>
            <t>Maximum number of entries in a branch mapping table.</t>
          </li>
          <li>
            <t>Maximum number of candidate rules evaluated by match-rule.</t>
          </li>
          <li>
            <t>Total processing time for a single packet compression/decompression
operation.</t>
          </li>
        </ul>
        <t>If any limit is exceeded, the implementation <bcp14>MUST</bcp14> abort processing
and transmit the packet uncompressed.</t>
      </section>
      <section anchor="context-integrity">
        <name>Context Integrity</name>
        <t>The security of these mechanisms depends on the integrity of the
shared context. Unauthorized modification of rules (e.g., redirecting
a ref(N) to a different rule, or altering branch mappings) could
cause incorrect compression or decompression, leading to data
corruption or information disclosure. Context provisioning and update
mechanisms <bcp14>MUST</bcp14> ensure integrity and authenticity of rule definitions.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8724" target="https://www.rfc-editor.org/info/rfc8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC9363" target="https://www.rfc-editor.org/info/rfc9363">
          <front>
            <title>A YANG Data Model for Static Context Header Compression (SCHC)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <date month="March" year="2023"/>
            <abstract>
              <t>This document describes a YANG data model for the Static Context Header Compression (SCHC) compression and fragmentation Rules.</t>
              <t>This document formalizes the description of the Rules for better interoperability between SCHC instances either to exchange a set of Rules or to modify the parameters of some Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9363"/>
          <seriesInfo name="DOI" value="10.17487/RFC9363"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8200" target="https://www.rfc-editor.org/info/rfc8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="I-D.toutain-schc-coreconf-management" target="https://datatracker.ietf.org/doc/html/draft-toutain-schc-coreconf-management-01">
          <front>
            <title>CORECONF Rule management for SCHC</title>
            <author initials="A." surname="Minaburo" fullname="Ana Minaburo">
              <organization>Consultant</organization>
            </author>
            <author initials="L." surname="Toutain" fullname="Laurent Toutain">
              <organization>IMT Atlantique</organization>
            </author>
            <author initials="J. A." surname="FERNANDEZ" fullname="Javier Alejandro FERNANDEZ">
              <organization>IMT Atlantique</organization>
            </author>
            <author initials="C." surname="Banier" fullname="Corentin Banier">
              <organization>IMT Atlantique</organization>
            </author>
            <author initials="M." surname="Dumay" fullname="Marion Dumay">
              <organization>Orange</organization>
            </author>
            <date month="October" day="19" year="2025"/>
            <abstract>
              <t>   This document describes how CORECONF can be applied to SCHC for
   context and rule set management between endpoints.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-toutain-schc-coreconf-management-01"/>
        </reference>
        <reference anchor="I-D.pelov-schclet-architecture" target="https://datatracker.ietf.org/doc/html/draft-pelov-schclet-architecture-02">
          <front>
            <title>SCHClet - Modular Use of the SCHC Framework</title>
            <author initials="A." surname="Pelov" fullname="Alexander Pelov">
              <organization>IMT Atlantique</organization>
            </author>
            <author initials="Q." surname="Lampin" fullname="Quentin Lampin">
              <organization>Orange</organization>
            </author>
            <author initials="M." surname="Dumay" fullname="Marion Dumay">
              <organization>Orange</organization>
            </author>
            <date month="January" day="12" year="2026"/>
            <abstract>
              <t>   This document introduces the concept of a SCHClet: a modular sub-
   function within the SCHC (Static Context Header Compression)
   framework.  Inspired by chiplet architectures in hardware design, a
   SCHClet encapsulates a specific SCHC function—such as compression,
   fragmentation, or acknowledgments—as a self-contained unit.  This
   modularization enables tailored implementations that avoid the
   overhead of deploying a full SCHC stack.

   By decomposing SCHC functionality into SCHClets, the framework
   becomes more adaptable, extensible, and suitable for a wider range of
   network environments—including, but not limited to, constrained
   networks.  A system using SCHClets remains compliant with the SCHC
   framework and can interoperate with a full SCHC implementation,
   provided compatible configuration parameters are used.

   Each SCHClet is defined by the SCHC Profiles and configuration
   parameters necessary for interoperability.  It operates within a
   single Stratum and a single SCHC Instance.  For example, a device may
   implement only the NoAck fragmentation mode as a standalone SCHClet,
   potentially with fixed parameters.  This modular approach simplifies
   development, reduces resource demands, and provides a framework for
   future extensibility of the SCHC architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pelov-schclet-architecture-02"/>
        </reference>
        <reference anchor="I-D.corneo-schc-compress-payload" target="https://datatracker.ietf.org/doc/html/draft-corneo-schc-compress-payload-02">
          <front>
            <title>SCHC Payload Compression for Structured Formats</title>
            <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
              <organization>Ericsson</organization>
            </author>
            <author initials="E." surname="Ramos" fullname="Edgar Ramos">
              <organization>Ericsson</organization>
            </author>
            <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date month="July" day="3" year="2026"/>
            <abstract>
              <t>   This document describes techniques to adapt the SCHC framework
   (RFC8724), used for header compression, to also compress and
   decompress payload of specific protocols.  To this end, this document
   defines a new matching operator, equal-template, to check equality of
   field values with respect to a user-defined template, and a payload
   keyword to be used as Field IDentifier (FID) to signal the presence
   of payload to be compressed or decompressed.  Additionally, this
   document defines a set of template functions and variables to
   optimize user-defined templates, which can be extended through the
   IANA registry defined herein.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-corneo-schc-compress-payload-02"/>
        </reference>
      </references>
    </references>
    <?line 763?>

<!-- # Acknowledgments -->
<!-- {:numbered="false"} -->
<!---->
<!-- TODO acknowledge. -->



  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
