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


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

<!ENTITY RFC8724 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8724.xml">
]>

<?rfc strict="yes"?>
<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-pelov-schclet-architecture-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>SCHClet - Modular Use of the SCHC Framework</title>

    <author initials="A." surname="Pelov" fullname="Alexander Pelov">
      <organization abbrev="IMT Atlantique">IMT Atlantique</organization>
      <address>
        <postal>
          <street>2bis rue de la Chataigneraie</street>
          <city>Cesson-Sévigné</city>
          <code>35536</code>
          <country>France</country>
        </postal>
        <email>alexander.pelov@imt-atlantique.fr</email>
      </address>
    </author>

    <date year="2025" month="July" day="05"/>

    
    
    

    <abstract>


<?line 34?>

<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.</t>

<t>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.</t>

<t>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>

  <middle>


<?line 43?>

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

<t>The SCHC framework, as defined in RFC8724 and related documents, was originally designed to address the needs of constrained networks by providing efficient header compression and fragmentation. Over time, the addition of new functionalities—such as Compound Acknowledgement and various fragmentation modes—has revealed both the strengths and limitations of a monolithic SCHC implementation.</t>

<t>A SCHClet is a self-contained function of SCHC, which may or may not include all aspects discussed in RFC8724, or other related SCHC RFCs. A SCHClet operates on a single Stratum and on a single SCHC Instance. Notions such as SCHC Stratum Header, SCHC Instance and Discriminator can therefore be omitted in the specificaiton of a SCHClet.</t>

<t>One of the goals for definition of a SCHClet is the fact that parts of SCHC may be applicable to many use-cases, without the need to include the entire SCHC apparatus.  This is done to some extent in some of the SCHC RFC technology profiles (e.g. RFC9011), where there is no rule management for example. There is no rule discovery, etc.  In that sense, these RFCs use SCHC, built on a specific set of SCHClets.</t>

<t>A full SCHC implementation is supposed to implement all features of RFC8724, and possibly all related RFCs. However, there are more and more RFCs that add supplementary funcionalities, such as CompoundAck.  In this sense, what is considered a full SCHC implementation today, may not be exhaustive tomorrow. In addition, the SCHC Architecture introduces the notions of SCHC Stratum Header, SCHC Instance and Discriminator, which while useful for a Full SCHC Implementation, could be seen as unnecessary for many of the applications of SCHClets.</t>

<t>A generic SCHC Framework implementation which has all SCHClets implemented MUST be able to interoperate with any SCHClet, provided it has the corresponding configuration. For example, if one IPsec end-point uses a minimal SCHClet implementation, the other end-point may use a full SCHC implementation with the corresponding configuration.</t>

<t>A SCHClet is defined by the SCHC Profiles or configuration parameters that enable interoperability with a Full SCHC Implementation. A SCHClet operates on a single Stratum, within a single SCHC Instance.</t>

<t>For example, the IPsec draft, includes only compression, and with specific compression rules.  It may be seen as a SCHClet, using only SCHC Compression from RFC8724, with only a subset of the MOs/CDAs.</t>

<t>This document describes the SCHClet architecture.  Each SCHClet represents an atomic sub- function of the overall SCHC process.  This design enables developers to incorporate only the relevant SCHC functionality for a given application, thereby reducing complexity and resource requirements while retaining the benefits of the SCHC approach. The SCHClet concept provides a way to describe future additions to the SCHC Framework, such as new SCHC Fragmentations, aggregation functions, FEC rule formats.</t>

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

<t><list style="symbols">
  <t>SCHClet: A self-contained unit within the SCHC framework that implements a specific SCHC function or a subset of SCHC operations. A SCHClet may implement aspects defined in RFC8724 or other related SCHC RFCs, and MAY be combined with other SCHClets or integrated into a full SCHC implementation.</t>
  <t>Full SCHC Implementation: An implementation that covers all mandatory aspects of SCHC as defined in RFC8724, potentially extended by additional functionalities introduced in subsequent/related RFCs.</t>
  <t>Full SCHC Implementation Configuration (Full Configuration): The set of SCHC Profiles/configurations/parameters supported by a Full SCHC Implementation.</t>
  <t>SCHClet Configuration: A subset of a Full Configuration, which are implemented and supported by a given SCHClet. This may be a single SCHC Profile, or a set of such.</t>
</list></t>

</section>
<section anchor="background-and-motivation"><name>Background and Motivation</name>

<t>SCHC was developed to provide a robust mechanism for header compression and fragmentation in networks with strict resource constraints. The original design focused on a comprehensive implementation that would cover all aspects of SCHC functionality. However, several trends have emerged:</t>

<t><list style="symbols">
  <t>Diverse Use Cases: Different applications may require only a subset of SCHC functionalities. For example, some may only need compression while others might focus solely on fragmentation.</t>
  <t>Evolving Standards: As new RFCs extend SCHC functionality (e.g., Compound Acknowledgement, advanced fragmentation techniques), a monolithic implementation risks becoming overly complex.</t>
  <t>Resource Optimization: In constrained environments, it is beneficial to deploy only the necessary SCHC functions to optimize memory, processing power, and energy usage.</t>
</list></t>

<t>The SCHClet concept addresses these challenges by providing a modular approach that decouples individual SCHC functions from a monolithic architecture.</t>

<section anchor="simplifications-enabled-by-schclets"><name>Simplifications Enabled by SCHClets</name>

<t>By breaking down a SCHC implementation into SCHClets, several simplifications can be realized:</t>

<t><list style="symbols">
  <t>Exclusion of Rule Management:<br />
SCHClets can omit complex rule discovery, installation, and update mechanisms. This results in a leaner protocol that focuses on the core function (e.g., compression) without the overhead of managing multiple rule sets.</t>
  <t>Simplification of Rule Management:<br />
SCHClets can support only a subset of the Rule Management, e.g. read-only access to existing rules.</t>
  <t>Simplification of the use of SCHC Framework:
The notions of SCHC Stratum Header, SCHC Instance, and Discriminator MAY be omitted.</t>
  <t>Targeted Functionality: 
Specific optional functions (such as compound acknowledgments or advanced fragmentation modes) can be encapsulated in separate SCHClets. This approach allows developers to include only the necessary functions for a given use case, simplifying the overall design.</t>
</list></t>

<t>A full SCHC implementation with the right configuration MUST interoperate with a specific SCHClet. The SCHClet in question may not necessarily handle these configurations itself (e.g. it may be a fixed implementation with no parametrization possible on it's side), they can be reinterpreted as a full SCHC implementation would. For example, an implementer of a compression SCHClet may never formally use Rule Management, Discriminators, SCHC Header or other notions defined in the SCHC Architecture, these can be infered by the knowledgeable SCHC practitionner. It is of course RECOMMENDED that a SCHClet provides a complete picture of its use in the context of a full SCHC implementation.</t>

</section>
</section>
<section anchor="formal-schclet-definition-and-validation"><name>Formal SCHClet definition and validation</name>

<t>Formally, a SCHClet is a set of SCHC functions, which when implemented interoperate with a Full SCHC implementation, within a predefined SCHClet Configuration. A SCHClet is therefore fully defined by its corresponding SCHClet Configuration.</t>

<t>Any document specifying a SCHClet MUST include the definition of the supported SCHClet Configuration.</t>

<t>A SCHClet is designed to be interoperable with both minimal and full SCHC implementations. For instance, an endpoint may implement a single SCHClet for a specific function (e.g., IPsec compression) while the corresponding peer uses a comprehensive SCHC implementation that supports multiple SCHClets. Proper configuration and negotiation mechanisms are essential to ensure that both ends correctly interpret the SCHC context.</t>

<t>If a SCHClet is used in a document/specification/implementation, it MAY be cited as: "Using a SCHClet of the SCHC Framework, with the following supported configuration/parameters/profiles: ...".</t>

<section anchor="schc-stratum-header-schc-instance-discriminator"><name>SCHC Stratum Header, SCHC Instance, Discriminator</name>

<t>A SCHClet operates on a single Stratum and on a single SCHC Instance. As such, there is no need to specify SCHC Stratum Header, which is always fully elided. In addition, there is no need for a Discriminator. Documents specifying the use of a SCHClet MAY omit the spcification of SCHC Stratum Header, SCHC Instance and/or Discriminator considerations.</t>

<t>It is RECOMMENDED if there are more than one SCHC Instances to use a Full SCHC Implementation within the Full SCHC Architecture. While not recommended, a SCHC Stratum Instance MAY be defined as a SCHClet, and combined with other SCHClets to achieve the functionality of a complete SCHC Stratum implementation.</t>

</section>
</section>
<section anchor="use-cases-and-examples"><name>Use Cases and Examples</name>

<section anchor="ipsec-compression-schclet"><name>IPsec Compression SCHClet</name>

<t>An illustrative example is an IPsec draft that leverages SCHC compression:</t>

<t><list style="symbols">
  <t>Functionality: This SCHClet implements only the compression rules defined in RFC8724 and a limited set of Context-Dependent Attributes (CDAs).</t>
  <t>Deployment: The implementation is tailored for IPsec environments, focusing solely on compression without engaging in rule management or SCHC Stratum functions.</t>
  <t>Interoperability: Although minimal, this SCHClet must be configured to operate alongside endpoints that might use full SCHC implementations.</t>
</list></t>

<t>As an example, Diet-ESP, as defined in <eref target="https://datatracker.ietf.org/doc/html/draft-ietf-IPsecme-diet-esp-05">draft-ietf-IPsecme-diet-esp-05</eref>, represents a minimal, streamlined version of the ESP protocol designed for constrained environments. By integrating SCHClets, Diet-ESP can leverage SCHC’s compression or fragmentation capabilities in a modular manner, without needing to implement a full SCHC implementation.</t>

</section>
<section anchor="fragmentation-schclets"><name>Fragmentation SCHClets</name>

<t>Fragmentation is a core aspect of SCHC, with multiple modes available:</t>

<t><list style="symbols">
  <t>NoAck Fragmentation SCHClet: Implements a fragmentation scheme without acknowledgement, suitable for low-overhead scenarios.</t>
  <t>Ack-On-Err Fragmentation SCHClet: Incorporates error recovery mechanisms by acknowledging only when errors occur.</t>
  <t>Ack-Always Fragmentation SCHClet: Provides continuous acknowledgement for reliable communication, albeit with increased overhead.</t>
</list></t>

<t>Developers may choose to implement one or more of these SCHClets based on application requirements and network conditions.</t>

</section>
<section anchor="example-minimal-fixed-field-compression-schclet"><name>Example: Minimal Fixed-Field Compression SCHClet</name>

<t>The goal of this example is to show how a SCHClet may be a single, constant-time function, of extreme simplicity - but stil interoperable with a Full SCHC Implementation.</t>

<t>The example is one that compresses only constant fields in an IPv6 header, under the assumption that specific values are fixed and known a priori at both endpoints. This SCHClet is fully stateless, does not require (nor support) rule management, and can be applied directly at the byte level.</t>

<t>This example is deliberately minimal, to demonstrate how a fully standards-compliant SCHClet can be implemented with only a few lines of code when the deployment assumptions are strongly constrained.</t>

<section anchor="functionality"><name>Functionality</name>

<t>This SCHClet targets the first four bytes of the IPv6 header, which correspond to:</t>

<t><list style="symbols">
  <t>Version (4 bits): 6</t>
  <t>Traffic Class (8 bits): 0</t>
  <t>Flow Label (20 bits): 0</t>
</list></t>

<t>When these fields are known to be constant, they may be fully elided. The SCHClet performs a prefix match against the fixed 4-byte sequence 0x60 00 00 00, and if matched, removes it during compression and restores it during decompression.</t>

<t>This fixed-function approach is applicable in many constrained deployments, particularly when all traffic is known to conform to a common baseline IPv6 configuration.</t>

<t>To simplify the example, we use a RuleID of length 8 bits, with two rules:</t>

<t><list style="symbols">
  <t>RuleID 01100000 (0x60) - "pass-through", which elides the first byte (which is 0x60), but then adds the ruleID (which is 0x60), effectively making the compression operation a no-operation.</t>
  <t>RuleID 11111111 (0xFF) - "compression", which elides the first 4 bytes</t>
</list></t>

<t>Note that the choice of RuleIDs is wasteful, in the sence that only one bit would be sufficient. This is done to illustrate the simplicity of the implementation, e.g. the code below doesn't require bit-shifting operations. Also note, that in the code we "change" the buffer with the packet to be compressed, which is done also for the sake of simlpicity, but is not a recommended design pattern.</t>

<t>Also note, that this artificial example doesn't handle the case where a protocol version 1111 with following bits as 1111 is provided to the compressor/decompressor. That may, or may not be a problem, e.g. if it is known that there is only IPv6 traffic processed thorugh this SCHClet, this is not an issue.</t>

<t>Here is the SCHC Context, which enables interoperability between this SCHClet and a Full SCHC Implementation:</t>

<figure><sourcecode type="JSON"><![CDATA[
{
  "schc": {
    "rule": [
      {
        "rule-id-value": 0x60,
        "rule-id-length": 8,
        "nature-compression": {
          "field": [
            {
              "field-id": "fid-ipv6-version",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 6
              },
              "matching-operator": "mo-equal",
              "comp-decomp-action": "cda-not-sent"
            },
            {
              "field-id": "fid-ipv6-trafficclass",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 0
              },
              "matching-operator": "mo-msb",
              "matching-operator-value":
              {
                  "index": 0, 
                  "value": 4
              },
              "comp-decomp-action": "cda-lsb",
              "comp-decomp-action-value":
              {
                  "index": 0, 
                  "value": 4
              }
            },
            {
              "field-id": "fid-ipv6-flowlabel",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 0
              },
              "matching-operator": "mo-equal",
              "comp-decomp-action": "cda-value-sent"
            }
          ]
        }
      },
      {
        "rule-id-value": 0xFF,
        "rule-id-length": 8,
        "nature-compression": {
          "field": [
            {
              "field-id": "fid-ipv6-version",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 6
              },
              "matching-operator": "mo-equal",
              "comp-decomp-action": "cda-not-sent"
            },
            {
              "field-id": "fid-ipv6-trafficclass",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 0
              },
              "matching-operator": "mo-equal",
              "comp-decomp-action": "cda-not-sent"
            },
            {
              "field-id": "fid-ipv6-flowlabel",
              "field-position": 1,
              "direction": "bi",
              "target-value": {
                  "index": 0, 
                  "value": 0
              },
              "matching-operator": "mo-equal",
              "comp-decomp-action": "cda-not-sent"
            }
          ]
        }
      }
    ]
  }
}
]]></sourcecode></figure>

</section>
<section anchor="implementation"><name>Implementation</name>
<t>The following C implementation demonstrates this SCHClet in practice:</t>

<figure><sourcecode type="C"><![CDATA[
#include <stdint.h>
#include <stdio.h>
#include <string.h>

#define RULE_ID_PASSTHROUGH 0x60  // 01100000
#define RULE_ID_COMPRESSED  0xFF  // 11111111

// Compress packet in-place or pass through, based on content.
// Returns pointer to compressed packet and sets output length.
const uint8_t* compress_ipv6(uint8_t *packet, size_t in_len, size_t *out_len) {
    // Match compressible pattern (Version, TC, FL = 0)
    if (in_len >= 4 && packet[0] == 0x60 && packet[1] == 0x00 &&
        packet[2] == 0x00 && packet[3] == 0x00) {
        
        // We "compress" by replacing the 4th byte with RuleID
        packet[3] = RULE_ID_COMPRESSED;
        *out_len = in_len - 3;
        return &packet[3];
    }

    // Pass-through: return original packet, unchanged
    *out_len = in_len;
    return packet;
}

size_t decompress_ipv6(const uint8_t *compressed, size_t comp_len, uint8_t *out_buf, size_t out_max) {
    if (comp_len == 0 || out_max < comp_len + 3) return 0;

    if (compressed[0] == RULE_ID_COMPRESSED) {
        // Insert fixed prefix before compressed payload
        out_buf[0] = 0x60;
        out_buf[1] = 0x00;
        out_buf[2] = 0x00;
        out_buf[3] = 0x00;
        memcpy(out_buf + 4, compressed + 1, comp_len - 1);
        return comp_len - 1 + 4;
    }

    // Rule ID is not compressed — assume passthrough
    memcpy(out_buf, compressed, comp_len);
    return comp_len;
}

int main() {
    uint8_t packet[40] = {
        0x60, 0x00, 0x00, 0x00,  // Compressible prefix
        0x3A, 0x40               // Next header, hop limit...
    };
    size_t in_len = 40;
    size_t comp_len;

    const uint8_t *compressed = compress_ipv6(packet, in_len, &comp_len);
    if (!compressed) {
        printf("Compression failed.\n");
        return 1;
    }

    printf("Compressed length: %zu\n", comp_len);
    printf("Compressed first byte: 0x%02X\n", compressed[0]);

    uint8_t restored[64];
    size_t restored_len = decompress_ipv6(compressed, comp_len, restored, sizeof(restored));

    printf("Decompressed first 4 bytes: %02X %02X %02X %02X\n",
           restored[0], restored[1], restored[2], restored[3]);

    return 0;
}
]]></sourcecode></figure>

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

<t>TBD.</t>

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

<t>This document does not require any immediate IANA actions.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC8724;


    </references>




  </back>

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

-->

</rfc>

