<?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 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-westerlund-schc-compute-address-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="SCHC Compute-Address CDAs">SCHC Compute-Address Compression/Decompression Actions for Dynamically Assigned IP Addresses</title>
    <seriesInfo name="Internet-Draft" value="draft-westerlund-schc-compute-address-00"/>
    <author fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Kista</city>
          <country>Sweden</country>
        </postal>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <author fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <city>Jorvas</city>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@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>header compression</keyword>
    <keyword>dynamic address</keyword>
    <keyword>LPWAN</keyword>
    <keyword>IPv6</keyword>
    <keyword>compute CDA</keyword>
    <abstract>
      <?line 64?>

<t>This document defines new Matching Operators (MOs) and
Compression/Decompression Actions (CDAs) for the Static Context
Header Compression and fragmentation (SCHC) framework defined in
RFC 8724. These extensions enable efficient compression of
dynamically assigned IP addresses, including IPv4 addresses
assigned via DHCP, IPv6 prefixes learned through SLAAC or
DHCPv6, IPv6 Interface Identifiers (IIDs), and IPv6 temporary
privacy addresses generated per RFC 8981.</t>
      <t>The mechanism relies on both the compressor and decompressor
sharing knowledge of the set of addresses assigned to the
device. Addresses are organized into deterministically sorted
tables, allowing compression to a small index value. For
temporary IPv6 addresses, a synchronized generation algorithm
enables compression to an epoch and counter value.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Static Context Header Compression Working Group mailing list (schc@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/schc/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/gloinul/schc-compute-address"/>.</t>
    </note>
  </front>
  <middle>
    <?line 82?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Static Context Header Compression and fragmentation (SCHC)
<xref target="RFC8724"/> provides a mechanism for compressing protocol headers
over constrained links. SCHC relies on a shared static context (a
set of Rules) between the compressor and decompressor. Each Rule
describes how individual header fields are matched and compressed
using Matching Operators (MOs) and Compression/Decompression Actions
(CDAs).</t>
      <t>The CDAs defined in <xref target="RFC8724"/> assume that address field values are
either known at Rule provisioning time (enabling the use of "not-sent"
or "mapping-sent" CDAs) or can be derived from Layer 2 information
(using "DevIID" or "AppIID" CDAs). However, in many modern network
deployments, IP addresses are assigned dynamically and may change over
time. Examples include:</t>
      <ul spacing="normal">
        <li>
          <t>IPv4 addresses assigned via DHCP</t>
        </li>
        <li>
          <t>IPv6 prefixes learned through Router Advertisements (SLAAC
<xref target="RFC4862"/>) or DHCPv6 Prefix Delegation</t>
        </li>
        <li>
          <t>IPv6 Interface Identifiers generated per RFC 7217</t>
        </li>
        <li>
          <t>IPv6 temporary privacy addresses generated per <xref target="RFC8981"/></t>
        </li>
      </ul>
      <t>Furthermore, in mobile network architectures (e.g., 3GPP), there are
no Layer 2 addresses available at the packet level, rendering the
DevIID and AppIID CDAs from <xref target="RFC8724"/> inapplicable.</t>
      <t>This document defines new MOs and CDAs that enable efficient
compression of dynamically assigned addresses by leveraging shared
knowledge of the device's assigned address set between the compressor
and decompressor. The new CDAs are:</t>
      <ul spacing="normal">
        <li>
          <t>comp-addr-v4: for IPv4 addresses</t>
        </li>
        <li>
          <t>comp-addr-prefix: for IPv6 address prefixes</t>
        </li>
        <li>
          <t>comp-addr-iid: for IPv6 Interface Identifiers</t>
        </li>
        <li>
          <t>comp-temp-iid: for IPv6 temporary privacy IIDs</t>
        </li>
      </ul>
    </section>
    <section anchor="terminology">
      <name>Terminology</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?>

<t>This document uses the terminology defined in <xref target="RFC8724"/>. The
following additional terms are used:</t>
      <dl>
        <dt>Address Table:</dt>
        <dd>
          <t>A deterministically sorted list of address information elements of a
given category, derived from the set of addresses assigned to the
device. The Address Table is maintained per-context and shared
between compressor and decompressor.</t>
        </dd>
        <dt>Address Category:</dt>
        <dd>
          <t>A classification of address information. This document defines three
categories: IPv4 full address, IPv6 prefix, and IPv6 Interface
Identifier (IID).</t>
        </dd>
        <dt>Address Index:</dt>
        <dd>
          <t>A zero-based integer identifying an entry's position in an Address
Table.</t>
        </dd>
        <dt>Epoch:</dt>
        <dd>
          <t>A time interval identifier used in the generation of temporary IPv6
IIDs. The epoch counter identifies which time interval was used as
input to the IID generation function.</t>
        </dd>
        <dt>DAD Counter:</dt>
        <dd>
          <t>A counter used to resolve Duplicate Address Detection collisions
during temporary IID generation, as defined in <xref target="RFC8981"/>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="problem-statement">
      <name>Problem Statement</name>
      <t>SCHC was originally designed for Low-Power Wide Area Networks
(LPWANs) <xref target="RFC8376"/> where devices typically have fixed, pre-configured IP
addresses. In
such environments, the address can be stored as a Target Value (TV) in
the Rule and compressed using the "not-sent" CDA, achieving maximum
compression efficiency.</t>
      <t>However, when SCHC is applied to networks where addresses are
dynamically assigned, several problems arise:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Dynamic assignment:</strong> Networks using DHCP, DHCPv6, or SLAAC
assign addresses that may change each time the device connects.
Storing these in the Rule's TV requires updating the Rule set on
every address change, which conflicts with SCHC's static context
design.</t>
        </li>
        <li>
          <t><strong>Multiple addresses:</strong> A device may be assigned multiple IPv4
addresses, multiple IPv6 prefixes (e.g., via DHCPv6 Prefix
Delegation for tethering), and multiple IIDs. The existing
"mapping-sent" CDA could handle a fixed list, but the list itself
is dynamic.</t>
        </li>
        <li>
          <t><strong>Temporary privacy addresses:</strong> RFC 8981 defines temporary
addresses with randomized IIDs that change periodically. Sending
the full 64-bit IID as a residual negates the benefit of
compression.</t>
        </li>
        <li>
          <t><strong>No Layer 2 addresses:</strong> In mobile networks (e.g., 3GPP), there
are no Layer 2 addresses in the packet headers that could be used
to derive the IPv6 IID. The DevIID and AppIID CDAs from <xref target="RFC8724"/>
are therefore not applicable in these environments.</t>
        </li>
      </ol>
      <t>Without the extensions defined in this document, the only option for
compressing dynamic addresses in SCHC is to use the "value-sent" CDA,
which transmits the full address field (32 bits for IPv4, 64 bits for
an IPv6 prefix or IID, or 128 bits for a full IPv6 address
<xref target="RFC8200"/>) as the compression residual. This results in poor compression efficiency for
the address fields.</t>
    </section>
    <section anchor="architecture-and-assumptions">
      <name>Architecture and Assumptions</name>
      <t>The mechanisms defined in this document rely on the following
architectural assumptions:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Shared address knowledge:</strong> Both the compressor and decompressor
have access to the same set of addresses assigned to the device.
How this knowledge is obtained is deployment-specific and discussed
informatively in <xref target="provisioning"/>.</t>
        </li>
        <li>
          <t><strong>Per-context Address Tables:</strong> The Address Tables are maintained
per SCHC context (i.e., per device). Multiple Rules within the same
context <bcp14>MAY</bcp14> reference the same Address Table. The table <bcp14>SHOULD</bcp14> be
cached and only rebuilt when the underlying address set changes.</t>
        </li>
        <li>
          <t><strong>Synchronized state:</strong> Both endpoints <bcp14>MUST</bcp14> maintain synchronized
address sets. When the address set changes (e.g., new address
assigned, address expired), both sides <bcp14>MUST</bcp14> rebuild their Address
Tables. Mechanisms for ensuring this synchronization are outside the
scope of this document and may require further extensions.</t>
        </li>
        <li>
          <t><strong>Clock synchronization (for comp-temp-iid):</strong> For the temporary
IID mechanism, both endpoints <bcp14>MUST</bcp14> have roughly synchronized wall
clocks. The required accuracy depends on the configured time
interval length but is typically in the order of seconds.</t>
        </li>
      </ol>
      <t><xref target="fig-architecture"/> illustrates the relationship between the address
assignment infrastructure and the SCHC compressor/decompressor.</t>
      <figure anchor="fig-architecture">
        <name>Architecture Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="456" viewBox="0 0 456 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,144" fill="none" stroke="black"/>
              <path d="M 40,152 L 40,192" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,144" fill="none" stroke="black"/>
              <path d="M 168,32 L 168,144" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,144" fill="none" stroke="black"/>
              <path d="M 352,32 L 352,144" fill="none" stroke="black"/>
              <path d="M 400,152 L 400,192" fill="none" stroke="black"/>
              <path d="M 448,32 L 448,144" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 168,32 L 272,32" fill="none" stroke="black"/>
              <path d="M 352,32 L 448,32" fill="none" stroke="black"/>
              <path d="M 88,48 L 160,48" fill="none" stroke="black"/>
              <path d="M 280,48 L 344,48" fill="none" stroke="black"/>
              <path d="M 8,144 L 80,144" fill="none" stroke="black"/>
              <path d="M 168,144 L 272,144" fill="none" stroke="black"/>
              <path d="M 352,144 L 448,144" fill="none" stroke="black"/>
              <path d="M 48,190 L 392,190" fill="none" stroke="black"/>
              <path d="M 48,194 L 392,194" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="400,192 388,186.4 388,197.6" fill="black" transform="rotate(0,392,192)"/>
              <polygon class="arrowhead" points="352,48 340,42.4 340,53.6" fill="black" transform="rotate(0,344,48)"/>
              <polygon class="arrowhead" points="288,48 276,42.4 276,53.6" fill="black" transform="rotate(180,280,48)"/>
              <polygon class="arrowhead" points="168,48 156,42.4 156,53.6" fill="black" transform="rotate(0,160,48)"/>
              <polygon class="arrowhead" points="96,48 84,42.4 84,53.6" fill="black" transform="rotate(180,88,48)"/>
              <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
              <g class="text">
                <text x="44" y="52">Device</text>
                <text x="224" y="52">Network</text>
                <text x="396" y="52">SCHC</text>
                <text x="36" y="68">(UE)</text>
                <text x="120" y="68">Address</text>
                <text x="208" y="68">Address</text>
                <text x="312" y="68">Address</text>
                <text x="392" y="68">Network</text>
                <text x="120" y="84">Assign.</text>
                <text x="220" y="84">Assignment</text>
                <text x="304" y="84">State</text>
                <text x="404" y="84">Compressor</text>
                <text x="36" y="100">SCHC</text>
                <text x="212" y="100">Function</text>
                <text x="400" y="100">/Decompr.</text>
                <text x="44" y="116">Compr/</text>
                <text x="220" y="116">(DHCP/SMF/</text>
                <text x="44" y="132">Decomp</text>
                <text x="212" y="132">SLAAC)</text>
                <text x="92" y="180">Both</text>
                <text x="148" y="180">maintain</text>
                <text x="204" y="180">same</text>
                <text x="256" y="180">Address</text>
                <text x="316" y="180">Tables</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  +--------+          +------------+         +-----------+
  | Device |<-------->|   Network  |<------->|   SCHC    |
  | (UE)   | Address  | Address    | Address | Network   |
  |        | Assign.  | Assignment | State   | Compressor|
  | SCHC   |          | Function   |         | /Decompr. |
  | Compr/ |          | (DHCP/SMF/ |         |           |
  | Decomp |          |  SLAAC)    |         |           |
  +--------+          +------------+         +-----------+
      |                                            |
      |    Both maintain same Address Tables       |
      |<==========================================>|
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="address-table">
      <name>Address Table Construction</name>
      <t>The compute-address CDAs defined in this document operate on Address
Tables that are derived from the set of IP addresses assigned to the
device's network interface(s). This section defines how these tables
are constructed.</t>
      <section anchor="address-categories">
        <name>Address Categories</name>
        <t>The assigned addresses are classified into three categories, each
producing a separate Address Table:</t>
        <dl>
          <dt>IPv4 Address Table:</dt>
          <dd>
            <t>Contains full 32-bit IPv4 addresses assigned to the device.</t>
          </dd>
          <dt>IPv6 Prefix Table:</dt>
          <dd>
            <t>Contains IPv6 prefixes (by default the first 64 bits of each
assigned IPv6 address). The prefix length is configurable but
defaults to 64 bits.</t>
          </dd>
          <dt>IPv6 IID Table:</dt>
          <dd>
            <t>Contains IPv6 Interface Identifiers (by default bits 64-127 of each
assigned IPv6 address, where bit 0 is the most significant bit). The
offset and length are configurable but default to offset 64, length
64 bits.</t>
          </dd>
        </dl>
        <t>Each category's table is independent. A single IPv6 address
contributes one entry to the IPv6 Prefix Table and one entry to the
IPv6 IID Table.</t>
      </section>
      <section anchor="input-filtering">
        <name>Input Filtering</name>
        <t>Before constructing the Address Tables, the set of assigned addresses
<bcp14>MUST</bcp14> be filtered as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Loopback addresses (127.0.0.0/8 for IPv4, ::1/128 for IPv6) <bcp14>MUST</bcp14>
be excluded.</t>
          </li>
          <li>
            <t>Link-local addresses (169.254.0.0/16 for IPv4, fe80::/10 for IPv6)
<bcp14>SHOULD</bcp14> be excluded unless the Rule specifically targets link-local
communication.</t>
          </li>
          <li>
            <t>Multicast addresses <bcp14>MUST</bcp14> be excluded.</t>
          </li>
        </ul>
        <t>The filtering criteria are determined by the address type filter
associated with the MO/CDA in the Rule. The default filter includes
only unicast global addresses.</t>
      </section>
      <section anchor="sorting-and-indexing">
        <name>Sorting and Indexing</name>
        <t>After filtering, the entries in each Address Table <bcp14>MUST</bcp14> be sorted in
ascending binary order (treating the address or address portion as an
unsigned integer). This produces a deterministic ordering that is
identical on both the compressor and decompressor, provided they have
the same input address set.</t>
        <t>Each entry is assigned a zero-based index: the entry with the lowest
binary value receives index 0, the next receives index 1, and so on.</t>
        <t>Duplicate entries (e.g., two IPv6 addresses sharing the same prefix)
<bcp14>MUST</bcp14> be deduplicated before indexing. Only unique values appear in the
table.</t>
        <figure anchor="fig-table-example">
          <name>Example Address Table Construction</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="528" viewBox="0 0 528 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,160 L 24,224" fill="none" stroke="black"/>
                <path d="M 24,272 L 24,336" fill="none" stroke="black"/>
                <path d="M 24,384 L 24,464" fill="none" stroke="black"/>
                <path d="M 88,160 L 88,224" fill="none" stroke="black"/>
                <path d="M 88,272 L 88,336" fill="none" stroke="black"/>
                <path d="M 88,384 L 88,464" fill="none" stroke="black"/>
                <path d="M 224,160 L 224,224" fill="none" stroke="black"/>
                <path d="M 224,272 L 224,336" fill="none" stroke="black"/>
                <path d="M 312,384 L 312,464" fill="none" stroke="black"/>
                <path d="M 24,160 L 224,160" fill="none" stroke="black"/>
                <path d="M 24,192 L 224,192" fill="none" stroke="black"/>
                <path d="M 24,224 L 224,224" fill="none" stroke="black"/>
                <path d="M 24,272 L 224,272" fill="none" stroke="black"/>
                <path d="M 24,304 L 224,304" fill="none" stroke="black"/>
                <path d="M 24,336 L 224,336" fill="none" stroke="black"/>
                <path d="M 24,384 L 312,384" fill="none" stroke="black"/>
                <path d="M 24,416 L 312,416" fill="none" stroke="black"/>
                <path d="M 24,464 L 312,464" fill="none" stroke="black"/>
                <g class="text">
                  <text x="28" y="36">Device</text>
                  <text x="92" y="36">assigned</text>
                  <text x="172" y="36">addresses:</text>
                  <text x="40" y="52">IPv4:</text>
                  <text x="120" y="52">198.51.100.34</text>
                  <text x="40" y="68">IPv6:</text>
                  <text x="204" y="68">2001:db8::a38d:1841:2a6f:124b:763e</text>
                  <text x="40" y="84">IPv6:</text>
                  <text x="204" y="84">2001:db8::1234:c84a:e8ff:fe45:ad7f</text>
                  <text x="24" y="116">After</text>
                  <text x="88" y="116">filtering</text>
                  <text x="212" y="116">(loopback/link-local</text>
                  <text x="332" y="116">removed)</text>
                  <text x="384" y="116">and</text>
                  <text x="464" y="116">categorization:</text>
                  <text x="20" y="148">IPv4</text>
                  <text x="72" y="148">Address</text>
                  <text x="132" y="148">Table:</text>
                  <text x="56" y="180">Index</text>
                  <text x="128" y="180">Address</text>
                  <text x="56" y="212">0</text>
                  <text x="152" y="212">198.51.100.34</text>
                  <text x="20" y="260">IPv6</text>
                  <text x="68" y="260">Prefix</text>
                  <text x="120" y="260">Table</text>
                  <text x="172" y="260">(first</text>
                  <text x="212" y="260">64</text>
                  <text x="248" y="260">bits,</text>
                  <text x="332" y="260">deduplicated):</text>
                  <text x="56" y="292">Index</text>
                  <text x="124" y="292">Prefix</text>
                  <text x="56" y="324">0</text>
                  <text x="140" y="324">2001:db8::</text>
                  <text x="20" y="372">IPv6</text>
                  <text x="56" y="372">IID</text>
                  <text x="96" y="372">Table</text>
                  <text x="144" y="372">(bits</text>
                  <text x="200" y="372">64-127,</text>
                  <text x="260" y="372">sorted</text>
                  <text x="336" y="372">ascending):</text>
                  <text x="56" y="404">Index</text>
                  <text x="112" y="404">IID</text>
                  <text x="56" y="436">0</text>
                  <text x="196" y="436">1234:c84a:e8ff:fe45:ad7f</text>
                  <text x="56" y="452">1</text>
                  <text x="196" y="452">a38d:1841:2a6f:124b:763e</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Device assigned addresses:
  IPv4: 198.51.100.34
  IPv6: 2001:db8::a38d:1841:2a6f:124b:763e
  IPv6: 2001:db8::1234:c84a:e8ff:fe45:ad7f

After filtering (loopback/link-local removed) and categorization:

IPv4 Address Table:
  +-------+----------------+
  | Index | Address        |
  +-------+----------------+
  |   0   | 198.51.100.34  |
  +-------+----------------+

IPv6 Prefix Table (first 64 bits, deduplicated):
  +-------+----------------+
  | Index | Prefix         |
  +-------+----------------+
  |   0   | 2001:db8::     |
  +-------+----------------+

IPv6 IID Table (bits 64-127, sorted ascending):
  +-------+---------------------------+
  | Index | IID                       |
  +-------+---------------------------+
  |   0   | 1234:c84a:e8ff:fe45:ad7f  |
  |   1   | a38d:1841:2a6f:124b:763e  |
  +-------+---------------------------+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="address-table-caching">
        <name>Address Table Caching</name>
        <t>Implementations <bcp14>SHOULD</bcp14> cache the constructed Address Tables to avoid
recomputation on every packet. The cached tables <bcp14>MUST</bcp14> be invalidated
and rebuilt when the underlying set of assigned addresses changes
(e.g., new address assigned, existing address expired or released).</t>
        <t>Since the Address Tables are per-context, they are shared across all
Rules in the same context. A single table rebuild serves all Rules
that reference the same address category.</t>
      </section>
    </section>
    <section anchor="compute-address">
      <name>Compute-Address MO and CDA</name>
      <t>This section defines three named Matching Operators and
Compression/Decompression Actions for dynamically assigned addresses.
Each operates on the corresponding Address Table defined in
<xref target="address-table"/>.</t>
      <t>In all three cases, the MO and CDA share the same name. The Rule's
Field Descriptor specifies the number of bits allocated for the
residual, which determines the maximum number of entries that can be
indexed (2^bits entries).</t>
      <section anchor="comp-addr-v4">
        <name>comp-addr-v4</name>
        <t>The comp-addr-v4 MO and CDA operate on the IPv4 Address Table. They
are used to compress full 32-bit IPv4 addresses that have been
dynamically assigned to the device.</t>
        <section anchor="matching-operator">
          <name>Matching Operator</name>
          <t>The comp-addr-v4 MO compares the packet's field value (a 32-bit IPv4
address) against all entries in the IPv4 Address Table.</t>
          <t>The MO returns True if the field value matches any entry in the table
AND the matching entry's index is representable within the number of
residual bits allocated in the Rule.</t>
          <t>The MO returns False otherwise (no match found, or the matching
entry's index exceeds the maximum representable value).</t>
        </section>
        <section anchor="compressiondecompression-action">
          <name>Compression/Decompression Action</name>
          <t>On compression: the CDA looks up the field value in the IPv4 Address
Table, obtains the matching entry's index, and encodes this index as
the compression residual using the number of bits specified in the
Rule.</t>
          <t>On decompression: the CDA reads the residual bits, decodes the index
value, looks up the corresponding entry in the IPv4 Address Table, and
writes the 32-bit IPv4 address into the packet field.</t>
        </section>
        <section anchor="rule-field-descriptor">
          <name>Rule Field Descriptor</name>
          <t>A Field Descriptor using comp-addr-v4 has the following
characteristics:</t>
          <ul spacing="normal">
            <li>
              <t>FID: The IPv4 address field (e.g., IPv4 Source Address or IPv4
Destination Address)</t>
            </li>
            <li>
              <t>FL: 32 (the original field length)</t>
            </li>
            <li>
              <t>TV: Not used (left empty)</t>
            </li>
            <li>
              <t>MO: comp-addr-v4</t>
            </li>
            <li>
              <t>CDA: comp-addr-v4</t>
            </li>
            <li>
              <t>Sent bits: The number of bits for the index residual (e.g., 2 bits
for up to 4 addresses)</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="comp-addr-prefix">
        <name>comp-addr-prefix</name>
        <t>The comp-addr-prefix MO and CDA operate on the IPv6 Prefix Table.
They are used to compress IPv6 address prefixes that have been
dynamically assigned to the device (e.g., via SLAAC Router
Advertisements or DHCPv6 Prefix Delegation).</t>
        <section anchor="matching-operator-1">
          <name>Matching Operator</name>
          <t>The comp-addr-prefix MO extracts the prefix portion (by default the
first 64 bits) from the packet's IPv6 address field and compares it
against all entries in the IPv6 Prefix Table.</t>
          <t>The MO returns True if the extracted prefix matches any entry in the
table AND the matching entry's index is representable within the
allocated residual bits.</t>
          <t>The MO returns False otherwise.</t>
        </section>
        <section anchor="compressiondecompression-action-1">
          <name>Compression/Decompression Action</name>
          <t>On compression: the CDA extracts the prefix from the field value,
looks it up in the IPv6 Prefix Table, and encodes the matching entry's
index as the residual.</t>
          <t>On decompression: the CDA reads the residual, decodes the index, looks
up the prefix in the IPv6 Prefix Table, and writes it into the
appropriate portion of the IPv6 address field.</t>
        </section>
        <section anchor="rule-field-descriptor-1">
          <name>Rule Field Descriptor</name>
          <t>A Field Descriptor using comp-addr-prefix has the following
characteristics:</t>
          <ul spacing="normal">
            <li>
              <t>FID: The IPv6 address prefix field (e.g., IPv6 Dev Prefix or IPv6
App Prefix)</t>
            </li>
            <li>
              <t>FL: 64 (default prefix length)</t>
            </li>
            <li>
              <t>TV: Not used (left empty)</t>
            </li>
            <li>
              <t>MO: comp-addr-prefix</t>
            </li>
            <li>
              <t>CDA: comp-addr-prefix</t>
            </li>
            <li>
              <t>Sent bits: The number of bits for the index residual (e.g., 2 bits
for up to 4 prefixes)</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="comp-addr-iid">
        <name>comp-addr-iid</name>
        <t>The comp-addr-iid MO and CDA operate on the IPv6 IID Table. They are
used to compress IPv6 Interface Identifiers that have been assigned to
the device, including stable IIDs generated per <xref target="RFC7217"/>.</t>
        <section anchor="matching-operator-2">
          <name>Matching Operator</name>
          <t>The comp-addr-iid MO extracts the IID portion (by default bits 64-127)
from the packet's IPv6 address field and compares it against all
entries in the IPv6 IID Table.</t>
          <t>The MO returns True if the extracted IID matches any entry in the
table AND the matching entry's index is representable within the
allocated residual bits.</t>
          <t>The MO returns False otherwise.</t>
        </section>
        <section anchor="compressiondecompression-action-2">
          <name>Compression/Decompression Action</name>
          <t>On compression: the CDA extracts the IID from the field value, looks
it up in the IPv6 IID Table, and encodes the matching entry's index as
the residual.</t>
          <t>On decompression: the CDA reads the residual, decodes the index, looks
up the IID in the IPv6 IID Table, and writes it into the appropriate
portion of the IPv6 address field.</t>
        </section>
        <section anchor="rule-field-descriptor-2">
          <name>Rule Field Descriptor</name>
          <t>A Field Descriptor using comp-addr-iid has the following
characteristics:</t>
          <ul spacing="normal">
            <li>
              <t>FID: The IPv6 IID field (e.g., IPv6 Dev IID or IPv6 App IID)</t>
            </li>
            <li>
              <t>FL: 64 (default IID length)</t>
            </li>
            <li>
              <t>TV: Not used (left empty)</t>
            </li>
            <li>
              <t>MO: comp-addr-iid</t>
            </li>
            <li>
              <t>CDA: comp-addr-iid</t>
            </li>
            <li>
              <t>Sent bits: The number of bits for the index residual (e.g., 4 bits
for up to 16 IIDs)</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="example-rule">
        <name>Example Rule</name>
        <t>The following example shows a compression Rule for an IPv6/UDP packet
where the device has dynamically assigned IPv6 addresses. The device
prefix and IID are compressed using comp-addr-prefix and comp-addr-iid
respectively.</t>
        <table anchor="fig-rule-example">
          <name>Example Rule Using Compute-Address CDAs</name>
          <thead>
            <tr>
              <th align="left">FID</th>
              <th align="left">FL</th>
              <th align="left">FP</th>
              <th align="left">DI</th>
              <th align="left">TV</th>
              <th align="left">MO</th>
              <th align="left">CDA</th>
              <th align="left">Sent</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">IPv6 Version</td>
              <td align="left">4</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">6</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 DiffServ</td>
              <td align="left">8</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">0</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 Flow Label</td>
              <td align="left">20</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">0</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 Length</td>
              <td align="left">16</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left"> </td>
              <td align="left">ignore</td>
              <td align="left">compute-*</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 Next Header</td>
              <td align="left">8</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">17</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 Hop Limit</td>
              <td align="left">8</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">255</td>
              <td align="left">ignore</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 DevPrefix</td>
              <td align="left">64</td>
              <td align="left">1</td>
              <td align="left">Up</td>
              <td align="left"> </td>
              <td align="left">comp-addr-prf</td>
              <td align="left">comp-addr-prf</td>
              <td align="left">2</td>
            </tr>
            <tr>
              <td align="left">IPv6 DevIID</td>
              <td align="left">64</td>
              <td align="left">1</td>
              <td align="left">Up</td>
              <td align="left"> </td>
              <td align="left">comp-addr-iid</td>
              <td align="left">comp-addr-iid</td>
              <td align="left">4</td>
            </tr>
            <tr>
              <td align="left">IPv6 AppPrefix</td>
              <td align="left">64</td>
              <td align="left">1</td>
              <td align="left">Up</td>
              <td align="left">2001:db8::</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">IPv6 AppIID</td>
              <td align="left">64</td>
              <td align="left">1</td>
              <td align="left">Up</td>
              <td align="left">::1</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">UDP DevPort</td>
              <td align="left">16</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">5683</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">UDP AppPort</td>
              <td align="left">16</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left">5683</td>
              <td align="left">equal</td>
              <td align="left">not-sent</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">UDP Length</td>
              <td align="left">16</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left"> </td>
              <td align="left">ignore</td>
              <td align="left">compute-*</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">UDP Checksum</td>
              <td align="left">16</td>
              <td align="left">1</td>
              <td align="left">Bi</td>
              <td align="left"> </td>
              <td align="left">ignore</td>
              <td align="left">compute-*</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>In this example, the device's IPv6 source prefix is compressed to 2
bits (supporting up to 4 prefixes) and the IID to 4 bits (supporting
up to 16 IIDs). The total residual for the device's full 128-bit IPv6
address is only 6 bits.</t>
      </section>
    </section>
    <section anchor="comp-temp-iid">
      <name>Compute Temporary IPv6 IID</name>
      <t>This section defines the comp-temp-iid MO and CDA for compressing IPv6
temporary privacy addresses generated per <xref target="RFC8981"/>. Unlike the
table-index approach of the compute-address CDAs in
<xref target="compute-address"/>, this mechanism uses a synchronized generation
algorithm that allows both endpoints to derive the same IID from a
small set of parameters transmitted as the compression residual.</t>
      <section anchor="overview">
        <name>Overview</name>
        <t>RFC 8981 defines a procedure for generating temporary IPv6 IIDs using
a pseudorandom function (PRF) with several inputs. The comp-temp-iid
mechanism constrains these inputs such that both the device and the
network-side compressor/decompressor can independently generate the
same IID given:</t>
        <ul spacing="normal">
          <li>
            <t>Shared static context (secret key, interface identifier, network
identifier)</t>
          </li>
          <li>
            <t>The IPv6 prefix (known via other means, e.g., comp-addr-prefix)</t>
          </li>
          <li>
            <t>A time epoch counter (transmitted in the residual)</t>
          </li>
          <li>
            <t>A DAD counter (transmitted in the residual)</t>
          </li>
        </ul>
        <t>The compression residual consists of the epoch counter (N bits) and the
DAD counter (M bits), where N and M are configured per-rule. This
typically results in fewer than 10 bits of residual instead of the full
64-bit IID.</t>
      </section>
      <section anchor="shared-state-requirements">
        <name>Shared State Requirements</name>
        <t>The following information <bcp14>MUST</bcp14> be available to both the device-side and
network-side compressor/decompressor for the comp-temp-iid mechanism to
function:</t>
        <dl>
          <dt>secret_key:</dt>
          <dd>
            <t>A device-specific secret key of at least 128 bits, used as input to
the PRF. This key <bcp14>MUST</bcp14> be unique per device and <bcp14>MUST NOT</bcp14> be used for
any other purpose. It <bcp14>MAY</bcp14> be derived from existing device credentials
(e.g., from 3GPP security keys using a key derivation function such
as HKDF <xref target="RFC5869"/>) or <bcp14>MAY</bcp14> be provisioned as part of the SCHC
context setup.</t>
          </dd>
          <dt>Net_Iface:</dt>
          <dd>
            <t>A network interface identifier. In networks without Layer 2
addresses (e.g., 3GPP), this <bcp14>MUST</bcp14> be set to a deterministic value
known to both endpoints, such as a value derived from the device's
network identity.</t>
          </dd>
          <dt>Network_ID:</dt>
          <dd>
            <t>A network-specific identifier for the subnet or attachment point.
This <bcp14>SHOULD</bcp14> be employed if available (e.g., an SSID for Wi-Fi, or a
cell/network identifier for mobile networks).</t>
          </dd>
          <dt>Time_Offset:</dt>
          <dd>
            <t>A fixed time offset that defines when intervals begin, expressed as
an offset within the interval period (e.g., minutes and seconds past
the hour). Both compressor and decompressor <bcp14>MUST</bcp14> use the same offset
value.</t>
          </dd>
          <dt>Interval_Length:</dt>
          <dd>
            <t>The duration of each time interval, in seconds. This determines how
frequently new temporary IIDs are generated. Typical values range
from 900 seconds (15 minutes) to 3600 seconds (1 hour).</t>
          </dd>
          <dt>Max_Lifetime:</dt>
          <dd>
            <t>The maximum lifetime of a temporary address, in seconds. This bounds
how far back in time a valid epoch can refer.</t>
          </dd>
          <dt>Prefix:</dt>
          <dd>
            <t>The IPv6 prefix used as input to the generation function. This is
typically known through other compression mechanisms (e.g.,
comp-addr-prefix) or network configuration.</t>
          </dd>
        </dl>
      </section>
      <section anchor="epoch-and-time-derivation">
        <name>Epoch and Time Derivation</name>
        <t>The epoch counter identifies which time interval was used to generate a
particular temporary IID. It is derived from the wall clock time as
follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Read the current wall clock time Tc (e.g., as a UNIX timestamp or
NTP timestamp).</t>
          </li>
          <li>
            <t>Compute the interval start time Tis by rounding Tc down to the most
recent interval boundary. The interval boundaries are defined by
Time_Offset and Interval_Length:  </t>
            <t>
Tis = Time_Offset + floor((Tc - Time_Offset) / Interval_Length) *
Interval_Length</t>
          </li>
          <li>
            <t>Compute the epoch counter as the number of complete intervals since
a fixed reference point (e.g., UNIX epoch of 1970-01-01T00:00:00Z):  </t>
            <t>
epoch = floor((Tis - Time_Offset) / Interval_Length)</t>
          </li>
          <li>
            <t>The N least significant bits of the epoch counter are used as the
epoch value in the compression residual.</t>
          </li>
        </ol>
        <t>The number of bits N <bcp14>MUST</bcp14> be large enough that the epoch value does not
wrap around within the Max_Lifetime of any valid temporary address.
Specifically:</t>
        <ul empty="true">
          <li>
            <t>N &gt;= ceil(log2(Max_Lifetime / Interval_Length + 1))</t>
          </li>
        </ul>
        <t>For example, with Interval_Length = 1800 seconds (30 minutes) and
Max_Lifetime = 86400 seconds (24 hours), N &gt;= ceil(log2(49)) = 6 bits.</t>
      </section>
      <section anchor="iid-generation-algorithm">
        <name>IID Generation Algorithm</name>
        <t>The temporary IID is generated using the following algorithm, which is
a constrained application of the procedure in Section 3.3.2 of
<xref target="RFC8981"/>:</t>
        <t>Step 1: Compute the Random Identifier (RID):</t>
        <artwork><![CDATA[
  RID = F(Prefix, Net_Iface, Network_ID, Tis, DAD_Counter, secret_key)
]]></artwork>
        <t>Where:</t>
        <ul spacing="normal">
          <li>
            <t>F() is a pseudorandom function. This document RECOMMENDS
HMAC-SHA-256 <xref target="RFC6234"/> with the secret_key as the HMAC key and the
concatenation of the other parameters as the message. The output is
truncated to 64 bits for use as the IID.</t>
          </li>
          <li>
            <t>Prefix is the IPv6 prefix (typically 64 bits).</t>
          </li>
          <li>
            <t>Net_Iface is the network interface identifier.</t>
          </li>
          <li>
            <t>Network_ID is the network identifier.</t>
          </li>
          <li>
            <t>Tis is the interval start time computed in <xref target="comp-temp-iid"/>.</t>
          </li>
          <li>
            <t>DAD_Counter starts at 0 and is incremented if the generated IID is
found to be a duplicate or reserved.</t>
          </li>
        </ul>
        <t>Step 2: Derive the IID from RID. Take the least significant 64 bits of
the PRF output. Set bits 6 and 7 (the "u" and "g" bits in the Modified
EUI-64 format) to 0, as specified in <xref target="RFC4291"/> Section 2.5.1 for
non-globally-unique identifiers.</t>
        <t>Step 3: Check the generated IID against reserved subnet anycast
addresses and other reserved IID values. If the IID is reserved, or if
Duplicate Address Detection (DAD) fails, increment DAD_Counter and
repeat from Step 1.</t>
        <t>The PRF input <bcp14>SHOULD</bcp14> be constructed as the concatenation of the
parameters in a fixed, well-defined order:</t>
        <artwork><![CDATA[
  PRF_input = Prefix || Net_Iface || Network_ID || Tis || DAD_Counter
  IID = truncate_64(HMAC-SHA-256(secret_key, PRF_input))
  IID[6] = 0  (clear bit 6, the "u" bit)
  IID[7] = 0  (clear bit 7, the "g" bit)
]]></artwork>
        <t>Note: The choice of PRF is an open issue. Future versions of this
document may allow alternative PRFs or make the PRF selection
configurable via the SCHC profile.</t>
      </section>
      <section anchor="matching-operator-comp-temp-iid">
        <name>Matching Operator: comp-temp-iid</name>
        <t>The comp-temp-iid MO extracts the IID portion (bits 64-127) from the
packet's IPv6 address field and attempts to match it against temporary
IIDs that could have been generated using the shared state.</t>
        <t>The matching procedure is:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check the IID cache (see <xref target="caching"/>). If the IID is found in the
cache with a valid (epoch, DAD_Counter) pair, the MO returns True.</t>
          </li>
          <li>
            <t>If not cached, iterate over recent epochs (starting from the
current epoch and working backwards) and for each epoch iterate over
DAD_Counter values (starting from 0), generating IIDs until a match
is found or the search space is exhausted.</t>
          </li>
          <li>
            <t>The search space is bounded by: epochs from current back to
(current - 2^N + 1), and DAD_Counter from 0 to (2^M - 1), where N
and M are the bit widths configured in the Rule.</t>
          </li>
          <li>
            <t>If a match is found AND the epoch and DAD_Counter are representable
in the allocated residual bits, the MO returns True.</t>
          </li>
          <li>
            <t>Otherwise, the MO returns False.</t>
          </li>
        </ol>
      </section>
      <section anchor="compressiondecompression-action-comp-temp-iid">
        <name>Compression/Decompression Action: comp-temp-iid</name>
        <t>On compression: the CDA encodes the epoch counter (N bits) followed by
the DAD_Counter (M bits) as the compression residual. The N least
significant bits of the epoch counter value are placed in the most
significant N bits of the residual. The DAD_Counter is encoded as an
M-bit unsigned integer in the remaining bits.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="216" viewBox="0 0 216 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,96" fill="none" stroke="black"/>
              <path d="M 96,48 L 96,96" fill="none" stroke="black"/>
              <path d="M 208,48 L 208,96" fill="none" stroke="black"/>
              <path d="M 8,48 L 208,48" fill="none" stroke="black"/>
              <path d="M 8,96 L 208,96" fill="none" stroke="black"/>
              <g class="text">
                <text x="36" y="36">Residual</text>
                <text x="104" y="36">format:</text>
                <text x="48" y="68">Epoch</text>
                <text x="152" y="68">DAD_Counter</text>
                <text x="28" y="84">(N</text>
                <text x="64" y="84">bits)</text>
                <text x="124" y="84">(M</text>
                <text x="160" y="84">bits)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  Residual format:
  +----------+-------------+
  |  Epoch   | DAD_Counter |
  | (N bits) |  (M bits)   |
  +----------+-------------+
]]></artwork>
        </artset>
        <t>On decompression: the CDA reads N + M bits from the residual, extracts
the epoch and DAD_Counter values, and either:</t>
        <ul spacing="normal">
          <li>
            <t>Looks up the IID in the cache using (epoch, DAD_Counter) as the key,
or</t>
          </li>
          <li>
            <t>Generates the IID using the algorithm in <xref target="comp-temp-iid"/> with the
decoded epoch (converted back to Tis) and DAD_Counter.</t>
          </li>
        </ul>
        <t>The generated or cached IID is then written into the appropriate
portion of the IPv6 address field.</t>
      </section>
      <section anchor="rule-field-descriptor-3">
        <name>Rule Field Descriptor</name>
        <t>A Field Descriptor using comp-temp-iid has the following
characteristics:</t>
        <ul spacing="normal">
          <li>
            <t>FID: The IPv6 IID field (e.g., IPv6 Dev IID)</t>
          </li>
          <li>
            <t>FL: 64</t>
          </li>
          <li>
            <t>TV: Not used (left empty)</t>
          </li>
          <li>
            <t>MO: comp-temp-iid</t>
          </li>
          <li>
            <t>CDA: comp-temp-iid</t>
          </li>
          <li>
            <t>Sent bits: N + M (e.g., 6 + 2 = 8 bits)</t>
          </li>
        </ul>
        <t>The values of N (epoch bits) and M (DAD counter bits) are configured
per-rule. They <bcp14>MUST</bcp14> be specified as part of the Rule definition.</t>
      </section>
      <section anchor="caching">
        <name>Temporary IID Caching</name>
        <t>Implementations <bcp14>SHOULD</bcp14> maintain a cache of generated temporary IIDs
with their associated (epoch, DAD_Counter) metadata. This avoids the
computational cost of iterating over the parameter space for every
packet.</t>
        <t>On the device side, when a new temporary address is generated and
assigned to an interface, the device <bcp14>SHOULD</bcp14> store the epoch and
DAD_Counter used in its generation alongside the address.</t>
        <t>On the network side, the compressor/decompressor <bcp14>SHOULD</bcp14> observe IIDs
used in uplink (device-to-network) packets and cache them with the
corresponding (epoch, DAD_Counter) values determined during the MO
matching process. This ensures that subsequent packets using the same
temporary address can be processed efficiently without re-iterating.</t>
        <t>Cache entries <bcp14>SHOULD</bcp14> be expired when the corresponding temporary
address exceeds its Max_Lifetime.</t>
      </section>
    </section>
    <section anchor="address-table-updates">
      <name>Address Table Updates</name>
      <t>The Address Tables defined in <xref target="address-table"/> are derived from the
set of addresses currently assigned to the device. This set may change
over time due to:</t>
      <ul spacing="normal">
        <li>
          <t>New address assignment (e.g., DHCP lease renewal with a new address,
new prefix via Router Advertisement)</t>
        </li>
        <li>
          <t>Address expiration or release</t>
        </li>
        <li>
          <t>DHCPv6 Prefix Delegation changes</t>
        </li>
        <li>
          <t>Network handover in mobile networks</t>
        </li>
      </ul>
      <t>When the address set changes, both the compressor and decompressor <bcp14>MUST</bcp14>
rebuild the affected Address Table(s) using the procedure in
<xref target="address-table"/>. Since the table is sorted deterministically, both
sides will produce identical tables provided they have the same input
address set.</t>
      <t>Note that rebuilding a table may change the indices of existing entries
(e.g., a new address with a lower binary value shifts all higher
entries up by one). Compressed packets in flight at the time of a table
rebuild may be decompressed incorrectly if the decompressor has already
updated its table while the compressor used the old table, or vice
versa.</t>
      <t>Detailed mechanisms for synchronizing table updates between compressor
and decompressor, and for handling packets in flight during
transitions, are outside the scope of this document and are expected to
be addressed in future extensions.</t>
    </section>
    <section anchor="provisioning">
      <name>Address Set Provisioning</name>
      <t>This section provides informational guidance on how the network-side
compressor/decompressor can obtain knowledge of the device's assigned
addresses. The exact mechanisms are deployment-specific and outside the
normative scope of this document.</t>
      <section anchor="general-mechanisms">
        <name>General Mechanisms</name>
        <t>In networks using standard IP address assignment protocols, the
network-side compressor/decompressor can learn the device's addresses
from:</t>
        <ul spacing="normal">
          <li>
            <t><strong>DHCP/DHCPv6 server state:</strong> The DHCP server maintains lease
information that maps devices to their assigned IPv4 addresses or
IPv6 prefixes. This information can be made available to the
compressor.</t>
          </li>
          <li>
            <t><strong>RADIUS/Diameter attributes:</strong> In networks using AAA
infrastructure, address assignments may be communicated via RADIUS or
Diameter attributes.</t>
          </li>
          <li>
            <t><strong>Router Advertisement monitoring:</strong> For SLAAC, the network knows
which prefixes have been advertised. Combined with knowledge of the
device's IID generation method, the full address can be determined.</t>
          </li>
        </ul>
      </section>
      <section anchor="mobile-network-considerations">
        <name>Mobile Network Considerations</name>
        <t>In 3GPP mobile networks (4G/5G), the following characteristics are
relevant:</t>
        <ul spacing="normal">
          <li>
            <t><strong>No Layer 2 addresses:</strong> Unlike Ethernet or LoRaWAN, 3GPP radio
bearers do not carry Layer 2 addresses in the packet headers. The
DevIID and AppIID CDAs from <xref target="RFC8724"/> are therefore not applicable.
This is a primary motivation for the compute-address CDAs defined in
this document.</t>
          </li>
          <li>
            <t><strong>Address assignment by SMF:</strong> In 5G, the Session Management
Function (SMF) is responsible for IP address allocation to the UE
(User Equipment). The compressor, which may be located in the gNB
(base station), CU (Central Unit), or UPF (User Plane Function),
needs a mechanism to receive the assigned address information from
the SMF.</t>
          </li>
          <li>
            <t><strong>Multiple PDU sessions:</strong> A UE may have multiple PDU sessions, each
with different IP addresses or prefixes. The compressor needs to know
which addresses are associated with which session.</t>
          </li>
          <li>
            <t><strong>Prefix Delegation:</strong> A UE may receive delegated prefixes (e.g.,
for tethering). These additional prefixes must also be known to the
compressor for efficient compression of traffic using those prefixes.</t>
          </li>
        </ul>
        <t>The specific 3GPP signaling extensions needed to convey address
information to the compressor are outside the scope of this document.</t>
        <section anchor="stable-privacy-addresses-on-mobile-devices">
          <name>Stable Privacy Addresses on Mobile Devices</name>
          <t>Modern mobile operating systems (e.g., Android since version 10)
generate stable IPv6 IIDs using the algorithm defined in <xref target="RFC7217"/>
rather than the legacy EUI-64 derivation. The typical inputs are:</t>
          <ul spacing="normal">
            <li>
              <t>A device-local secret key (persisted across reboots)</t>
            </li>
            <li>
              <t>The interface name (e.g., "rmnet0")</t>
            </li>
            <li>
              <t>The assigned IPv6 prefix</t>
            </li>
            <li>
              <t>A DAD counter</t>
            </li>
          </ul>
          <t>Since the secret key is generated and stored locally on the device, the
network-side compressor has no direct way to predict the resulting
stable IID. This IID therefore cannot be elided using the DevIID CDA
from <xref target="RFC8724"/>, nor can it be placed in the Rule's Target Value at
provisioning time (since it depends on the prefix, which is dynamic).</t>
          <t>The comp-addr-iid CDA defined in this document addresses this case: the
network-side compressor learns the device's stable IID through the
address provisioning mechanism (see <xref target="provisioning"/>) and both sides
reference it via a small table index. This avoids transmitting the full
64-bit IID as a residual on every packet while requiring no changes to
the device's existing address generation behavior.</t>
        </section>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="ipv4-single-address-dhcp">
        <name>IPv4 Single Address (DHCP)</name>
        <t>A device is assigned a single IPv4 address 198.51.100.34 via DHCP. The
IPv4 Address Table contains one entry:</t>
        <artwork><![CDATA[
  IPv4 Address Table:
    Index 0: 198.51.100.34

  Rule Field Descriptor:
    FID=IPv4 Src Addr, FL=32, MO=comp-addr-v4, CDA=comp-addr-v4,
    Sent=1 bit

  Compression: field value 198.51.100.34 matches index 0
               -> residual: 0b0 (1 bit)

  Decompression: residual 0b0 -> index 0 -> 198.51.100.34
]]></artwork>
      </section>
      <section anchor="ipv6-dual-prefix-slaac-dhcpv6-pd">
        <name>IPv6 Dual Prefix (SLAAC + DHCPv6-PD)</name>
        <t>A device has two IPv6 prefixes: 2001:db8:1::/64 from SLAAC and
2001:db8:2::/64 from DHCPv6 Prefix Delegation.</t>
        <artwork><![CDATA[
  IPv6 Prefix Table (sorted ascending):
    Index 0: 2001:db8:1::  (2001:0db8:0001:0000)
    Index 1: 2001:db8:2::  (2001:0db8:0002:0000)

  Rule Field Descriptor:
    FID=IPv6 DevPrefix, FL=64, MO=comp-addr-prefix,
    CDA=comp-addr-prefix, Sent=1 bit

  Packet with source prefix 2001:db8:2::
  Compression: matches index 1 -> residual: 0b1 (1 bit)

  Decompression: residual 0b1 -> index 1 -> 2001:db8:2::
]]></artwork>
      </section>
      <section anchor="temporary-privacy-address">
        <name>Temporary Privacy Address</name>
        <t>A device generates a temporary IID using the comp-temp-iid algorithm
with the following parameters:</t>
        <artwork><![CDATA[
  Shared state:
    secret_key:      0x4a7f...  (128 bits)
    Net_Iface:       0x00000001 (device-specific)
    Network_ID:      "mobile-net-1"
    Time_Offset:     0 seconds (intervals aligned to midnight)
    Interval_Length: 1800 seconds (30 minutes)
    Max_Lifetime:    86400 seconds (24 hours)

  Rule configuration:
    N = 6 bits (epoch), M = 2 bits (DAD counter)
    Total residual: 8 bits

  Current time: 2026-06-01T14:45:00Z
  Epoch calculation:
    Tis = 2026-06-01T14:30:00Z (rounded down to interval boundary)
    epoch = (number of 30-min intervals since reference) mod 64

  Suppose epoch = 42 (0b101010), DAD_Counter = 0 (0b00)

  Compression residual: 0b10101000 (8 bits)

  Decompression:
    epoch = 42, DAD_Counter = 0
    Tis = derive from epoch
    IID = truncate_64(HMAC-SHA-256(secret_key,
          Prefix || Net_Iface || Network_ID || Tis || 0))
    Write IID into packet field.
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="secret-key-management">
        <name>Secret Key Management</name>
        <t>The comp-temp-iid mechanism relies on a shared secret key between the
device and the network-side compressor/decompressor. Compromise of this
key would allow an attacker to predict all temporary IIDs generated by
the device, defeating the privacy protection intended by <xref target="RFC8981"/>.</t>
        <t>The secret key <bcp14>MUST</bcp14> be stored securely on both endpoints. It <bcp14>SHOULD</bcp14> be
derived from existing security associations where possible (e.g., from
3GPP security keys using HKDF) rather than being transmitted in the
clear.</t>
        <t>The secret key <bcp14>MUST NOT</bcp14> be reused for any purpose other than temporary
IID generation for SCHC compression.</t>
      </section>
      <section anchor="clock-desynchronization">
        <name>Clock Desynchronization</name>
        <t>If the clocks of the compressor and decompressor drift apart beyond the
tolerance of the time interval, the decompressor may generate a
different IID than the one used by the device. This would result in
packet misdelivery or discard.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> monitor for decompression failures that may
indicate clock drift and trigger resynchronization. The Interval_Length
<bcp14>SHOULD</bcp14> be chosen to be significantly larger than the expected maximum
clock drift between synchronization events.</t>
      </section>
      <section anchor="address-table-inconsistency">
        <name>Address Table Inconsistency</name>
        <t>If the compressor and decompressor have different views of the device's
assigned address set, the Address Tables will differ, leading to
incorrect compression/decompression. This could result in packets being
delivered to the wrong address or being discarded.</t>
        <t>Deployments <bcp14>MUST</bcp14> ensure that address assignment changes are propagated
to both endpoints before the new addresses are used in packet headers.
The exact mechanism for ensuring this is deployment-specific.</t>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>The compression residual for comp-addr-v4, comp-addr-prefix, and
comp-addr-iid reveals the index of the address in the sorted table. An
observer of the compressed traffic can determine:</t>
        <ul spacing="normal">
          <li>
            <t>How many addresses the device has (from the maximum index value
observed)</t>
          </li>
          <li>
            <t>Whether the device is using the same or different addresses across
packets (same index = same address)</t>
          </li>
        </ul>
        <t>This information leakage is inherent to the compression mechanism and
should be considered acceptable given that SCHC is typically used over
links where the observer would already have access to the uncompressed
traffic (e.g., the radio link in a mobile network).</t>
        <t>For comp-temp-iid, the epoch value in the residual reveals when the
temporary address was generated. This is less information than the full
IID but still provides some temporal correlation capability to an
observer.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines new Matching Operators and Compression/
Decompression Actions for the SCHC framework. When IANA registries are
established for SCHC MOs and CDAs, the following entries should be
registered:</t>
      <t>New Matching Operators:</t>
      <ul spacing="normal">
        <li>
          <t>comp-addr-v4</t>
        </li>
        <li>
          <t>comp-addr-prefix</t>
        </li>
        <li>
          <t>comp-addr-iid</t>
        </li>
        <li>
          <t>comp-temp-iid</t>
        </li>
      </ul>
      <t>New Compression/Decompression Actions:</t>
      <ul spacing="normal">
        <li>
          <t>comp-addr-v4</t>
        </li>
        <li>
          <t>comp-addr-prefix</t>
        </li>
        <li>
          <t>comp-addr-iid</t>
        </li>
        <li>
          <t>comp-temp-iid</t>
        </li>
      </ul>
      <t>Note: At the time of writing, no IANA registry exists for SCHC MOs and
CDAs. If such registries are created, the above values should be
registered. Otherwise, this document serves as the definition of these
MO and CDA names.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="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="RFC8981">
          <front>
            <title>Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6</title>
            <author fullname="F. Gont" initials="F." surname="Gont"/>
            <author fullname="S. Krishnan" initials="S." surname="Krishnan"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes an extension to IPv6 Stateless Address Autoconfiguration that causes hosts to generate temporary addresses with randomized interface identifiers for each prefix advertised with autoconfiguration enabled. Changing addresses over time limits the window of time during which eavesdroppers and other information collectors may trivially perform address-based network-activity correlation when the same address is employed for multiple transactions by the same host. Additionally, it reduces the window of exposure of a host as being accessible via an address that becomes revealed as a result of active communication. This document obsoletes RFC 4941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8981"/>
          <seriesInfo name="DOI" value="10.17487/RFC8981"/>
        </reference>
        <reference anchor="RFC4291">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7217">
          <front>
            <title>A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)</title>
            <author fullname="F. Gont" initials="F." surname="Gont"/>
            <date month="April" year="2014"/>
            <abstract>
              <t>This document specifies a method for generating IPv6 Interface Identifiers to be used with IPv6 Stateless Address Autoconfiguration (SLAAC), such that an IPv6 address configured using this method is stable within each subnet, but the corresponding Interface Identifier changes when the host moves from one network to another. This method is meant to be an alternative to generating Interface Identifiers based on hardware addresses (e.g., IEEE LAN Media Access Control (MAC) addresses), such that the benefits of stable addresses can be achieved without sacrificing the security and privacy of users. The method specified in this document applies to all prefixes a host may be employing, including link-local, global, and unique-local prefixes (and their corresponding addresses).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7217"/>
          <seriesInfo name="DOI" value="10.17487/RFC7217"/>
        </reference>
        <reference anchor="RFC4862">
          <front>
            <title>IPv6 Stateless Address Autoconfiguration</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="T. Jinmei" initials="T." surname="Jinmei"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document specifies the steps a host takes in deciding how to autoconfigure its interfaces in IP version 6. The autoconfiguration process includes generating a link-local address, generating global addresses via stateless address autoconfiguration, and the Duplicate Address Detection procedure to verify the uniqueness of the addresses on a link. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4862"/>
          <seriesInfo name="DOI" value="10.17487/RFC4862"/>
        </reference>
        <reference anchor="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="RFC8376">
          <front>
            <title>Low-Power Wide Area Network (LPWAN) Overview</title>
            <author fullname="S. Farrell" initials="S." role="editor" surname="Farrell"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>Low-Power Wide Area Networks (LPWANs) are wireless technologies with characteristics such as large coverage areas, low bandwidth, possibly very small packet and application-layer data sizes, and long battery life operation. This memo is an informational overview of the set of LPWAN technologies being considered in the IETF and of the gaps that exist between the needs of those technologies and the goal of running IP in LPWANs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8376"/>
          <seriesInfo name="DOI" value="10.17487/RFC8376"/>
        </reference>
      </references>
    </references>
    <?line 1040?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank the members of the IETF SCHC Working
Group for their feedback and discussions.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Edgar Ramos">
        <organization>Ericsson</organization>
        <address>
          <postal>
            <city>Jorvas</city>
            <country>Finland</country>
          </postal>
          <email>edgar.ramos@ericsson.com</email>
        </address>
      </contact>
      <contact fullname="Ari Keränen">
        <organization>Ericsson</organization>
        <address>
          <postal>
            <city>Jorvas</city>
            <country>Finland</country>
          </postal>
          <email>ari.keranen@ericsson.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
ms75ZWz+Bcic5/L/AAbq4ra+lQAA

-->

</rfc>
