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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc toc="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-lpwan-schc-yang-data-model-04" category="std">

  <front>
    <title abbrev="LPWAN SCHC YANG module">Data Model for Static Context Header Compression (SCHC)</title>

    <author initials="A." surname="Minaburo" fullname="Ana Minaburo">
      <organization>Acklio</organization>
      <address>
        <postal>
          <street>1137A avenue des Champs Blancs</street>
          <city>35510 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>ana@ackl.io</email>
      </address>
    </author>
    <author initials="L." surname="Toutain" fullname="Laurent Toutain">
      <organization>Institut MINES TELECOM; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>Laurent.Toutain@imt-atlantique.fr</email>
      </address>
    </author>

    <date year="2021" month="February" day="02"/>

    
    <workgroup>lpwan Working Group</workgroup>
    

    <abstract>


<t>This document describes a YANG data model for the SCHC (Static Context Header Compression) 
compression and fragmentation rules.</t>



    </abstract>


  </front>

  <middle>


<section anchor="Introduction" title="Introduction">

</section>
<section anchor="schc-rules" title="SCHC rules">

<t>SCHC is a compression and fragmentation mechanism for constrained networks defined in <xref target="RFC8724"/>.
It is based on a static context shared by two entities at the boundary this constrained network.
Draft <xref target="RFC8724"/> provides an non formal representation of the rules used either for compression/decompression (or C/D)
or fragmentation/reassembly (or F/R). The goal of this document is to formalize the description of the rules to offer:</t>

<t><list style="symbols">
  <t>the same definition on both ends, even if the internal representation is different.</t>
  <t>an update the other end to set up some specific values (e.g. IPv6 prefix, Destination address,…)</t>
  <t>…</t>
</list></t>

<t>This document defines a YANG module to represent both compression and fragmentation rules, which leads to common representation for values for all the rules elements.</t>

<t>SCHC compression is generic, the main mechanism do no refers
to a specific protocol. Any header field is abstracted through an ID, a position, a direction and a value that can be a numerical
value or a string. <xref target="RFC8724"/> and <xref target="I-D.ietf-lpwan-coap-static-context-hc"/> specifies fields for IPv6, UDP, CoAP and OSCORE. <xref target="I-D.barthel-lpwan-oam-schc"/> decribes ICMPv6 header compression.</t>

<t>SCHC fragmentation requires a set of common parameters that are included in a rule. These parameters are defined in <xref target="RFC8724"/>.</t>

<section anchor="compression-rules" title="Compression Rules">

<t><xref target="RFC8724"/> proposes an non formal representation of the compression rule.
A compression context for a device is composed of a set of rules. Each rule contains information to
describe a specific field in the header to be compressed.</t>

<figure title="Compression Decompression Context" anchor="Fig-ctxt"><artwork><![CDATA[
  +-----------------------------------------------------------------+
  |                      Rule N                                     |
 +-----------------------------------------------------------------+|
 |                    Rule i                                       ||
+-----------------------------------------------------------------+||
|  (FID)            Rule 1                                        |||
|+-------+--+--+--+------------+-----------------+---------------+|||
||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
|+-------+--+--+--+------------+-----------------+---------------+|||
||Field 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
|+-------+--+--+--+------------+-----------------+---------------+|||
||...    |..|..|..|   ...      | ...             | ...           ||||
|+-------+--+--+--+------------+-----------------+---------------+||/
||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||
|+-------+--+--+--+------------+-----------------+---------------+|/
|                                                                 |        
\-----------------------------------------------------------------/  

]]></artwork></figure>

</section>
<section anchor="field-identifier" title="Field Identifier">

<t>In the process of compression, the headers of the original packet are first parsed to create a list of fields. This list of fields
is matched against the rules to find the appropriate one and apply compression. The link between the list given by the parsed fields and the
rules is done through a field ID.  <xref target="RFC8724"/>  do not state how the field ID value can be constructed. 
In examples, identification is done through a string indexed by the protocol name (e.g. IPv6.version, CoAP.version,…).</t>

<t>Using the YANG model, each field MUST be identified through a global YANG identityref. A YANG field ID  derives from the field-id-base-type. <xref target="Fig-ex-field-id"/> gives some field ID definitions. Note that some field IDs can be splitted is smaller pieces. This is the case for “fid-ipv6-trafficclass-ds” and “fid-ipv6-trafficclass-ecn” which are a subset of “fid-ipv6-trafficclass-ds”.</t>

<figure title="Definition of identityref for field IDs" anchor="Fig-ex-field-id"><artwork><![CDATA[
   identity field-id-base-type  {
           description "Field ID with SID";
    }

    identity fid-ipv6-version {
           base field-id-base-type;
           description "IPv6 version field from RFC8200";
    }

  identity fid-ipv6-trafficclass {
           base field-id-base-type;
           description "IPv6 Traffic Class field from RFC8200";
  }

  identity fid-ipv6-trafficclass-ds {
           base field-id-base-type;
           description "IPv6 Traffic Class field from RFC8200, 
       DiffServ field from RFC3168";
  }

  identity fid-ipv6-trafficclass-ecn {
           base field-id-base-type;
           description "IPv6 Traffic Class field from RFC8200, 
       ECN field from RFC3168";
  }
  
  ...

]]></artwork></figure>

<t><xref target="Fig-ex-field-id"/> gives some examples of field ID identityref definitions. The base identity is field-id-base-type, and field id are derived for it.</t>

<t>The naming convention is “fid” followed by the protocol name and the field name.<vspace />
The yang model in annex (see <xref target="annexA"/>) gives the full definition of the field ID for <xref target="RFC8724"/>, <xref target="I-D.ietf-lpwan-coap-static-context-hc"/>, and <xref target="I-D.barthel-lpwan-oam-schc"/>.</t>

<t>The type associated to this identity is field-id-type (cf. <xref target="Fig-field-id-type"/>)</t>

<figure title="Type definition for field IDs" anchor="Fig-field-id-type"><artwork><![CDATA[
    typedef field-id-type {
        description "Field ID generic type.";
        type identityref {
            base field-id-base-type;
        }
    }
]]></artwork></figure>

<!--
### CoAP options

Option in COAP are specified by several documents. To avoid to add a yang specification each time a new option is defined, this document preallocated a block 
of 255 identityref corresponding to the two first blocks described in Table 8 of {{RFC7252}}. 
-->

</section>
<section anchor="field-length" title="Field length">

<t>Field length is either an integer giving the size of a field in bits or a specific function. <xref target="RFC8724"/> defines the
“var” function which allows variable length fields in byte and <xref target="I-D.ietf-lpwan-coap-static-context-hc"/> defines the “tkl” function for managing the CoAP
Token length field.</t>

<figure title="Definition of identityref for field ILength" anchor="Fig-ex-field-length"><artwork><![CDATA[
  identity field-length-base-type {
        description "used to extend field length functions";
  }

  identity fl-variable {
           base field-length-base-type;
           description "residue length in Byte is sent";
  }

  identity fl-token-length {
           base field-length-base-type;
           description "residue length in Byte is sent";
  }

]]></artwork></figure>

<t>As for field ID, field length function can be defined as a identityref as shown in <xref target="Fig-ex-field-length"/>.</t>

<t>Therefore the type for field length is a union between an integer giving in bits the size of the length and the identityref (cf. <xref target="Fig-ex-field-length-union"/>).</t>

<figure title="Type definition for field Length" anchor="Fig-ex-field-length-union"><artwork><![CDATA[
    typedef field-length-type {
        description "Field length either a positive integer giving the size in bits 
        or a function defined through an identityref.";
        type union {
            type int64; /* positive length in bits */
            type identityref { /* function */
                base field-length-base-type;
            }
        }
    }
]]></artwork></figure>

<t>The naming convention is fl followed by the function name as defined in SCHC specifications.</t>

</section>
<section anchor="field-position" title="Field position">

<t>Field position is a positive integer which gives the position of a field, the default value is 1, but if the field is repeated several times, the value is higher. 
value 0 indicates that the position is not important and is not taken into account during the rule selection process.</t>

<t>Field position is a positive integer. The type is an uint8.</t>

</section>
<section anchor="direction-indicator" title="Direction Indicator">

<t>The Direction Indicator (DI) is used to tell if a field appears in both direction (Bi) or only uplink (Up) or Downlink (Dw).</t>

<figure title="Definition of identityref for direction indicators" anchor="Fig-ex-field-DI"><artwork><![CDATA[
  identity direction-indicator-base-type {
        description "used to extend field length functions";
  }

  identity di-bidirectional {
           base direction-indicator-base-type;
           description "Direction Indication of bi directionality";
  }

  identity di-up {
           base direction-indicator-base-type;
           description "Direction Indication of upstream";
  }

  identity di-down {
           base direction-indicator-base-type;
           description "Direction Indication of downstream";
  }

]]></artwork></figure>

<t><xref target="Fig-ex-field-DI"/> gives the identityref for Direction Indicators.</t>

<t>The type is “direction-indicator-type” (cf. <xref target="Fig-field-DI-type"/>).</t>

<figure title="Type definition for direction indicators" anchor="Fig-field-DI-type"><artwork><![CDATA[
    typedef direction-indicator-type {
        description "direction in LPWAN network, up when emitted by the device,
        down when received by the device, bi when emitted or received by the device.";
        type identityref {
            base direction-indicator-base-type;
        }
    }
]]></artwork></figure>

</section>
<section anchor="target-value" title="Target Value">

<t>Target Value may be either a string or binary sequence. For match-mapping, several of these values can 
be contained in a Target Value field. In the data model, this is generalized by adding a position, which
orders the list of values. By default the position is set to 0.</t>

<t>The leaf “value” is not mandatory to represent a non existing value in a TV.</t>

<figure title="Definition of target value" anchor="Fig-ex-TV"><artwork><![CDATA[
    grouping target-values-struct {
        description "defines the target value element. Can be either an arbitrary
        binary or ascii element. All target values are considered as a matching lists.
        Position is used to order values, by default position 0 is used when containing
        a single element.";

        leaf value {
            type union {
                type binary;
                type string;
            }
        }
        leaf position {
            description "If only one element position is 0, otherwise position is the
            matching list.";
            type uint16;
        }
    }
]]></artwork></figure>

<t><xref target="Fig-ex-TV"/> gives the definition of a single element of a Target Value. In the rule, this will be used as a list, with position as a key. The highest position value is used to compute the size of the index sent in residue.</t>

</section>
<section anchor="matching-operator" title="Matching Operator">

<t>Matching Operator (MO) is a function applied between a field value provided by the parsed header and the target value. <xref target="RFC8724"/> defines 4 MO.</t>

<figure title="Definition of identityref for Matching Operator " anchor="Fig-ex-MO"><artwork><![CDATA[
   identity matching-operator-base-type {
      description "used to extend Matching Operators with SID values";
   }

   identity mo-equal {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-ignore {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-msb {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-matching {
      base matching-operator-base-type;
      description "RFC 8724";
   }
]]></artwork></figure>

<t>the type is “matching-operator-type” (cf. <xref target="Fig-MO-type"/>)</t>

<figure title="Type definition for Matching Operator" anchor="Fig-MO-type"><artwork><![CDATA[
    typedef matching-operator-type {
        description "Matching Operator (MO) to compare fields values with target values";
        type identityref {
            base matching-operator-base-type;
        }
    }
]]></artwork></figure>

<section anchor="matching-operator-arguments" title="Matching Operator arguments">

<t>Some Matching Operator such as MSB can take some values. Even if currently LSB is the only MO takes only one argument, in the future some MO may require several arguments.
They are viewed as a list of target-values-type.</t>

</section>
</section>
<section anchor="compression-decompression-actions" title="Compression Decompression Actions">

<t>Compression Decompression Action (CDA) identified the function to use either for compression or decompression. 
<xref target="RFC8724"/> defines 6 CDA.</t>

<figure title="Definition of identityref for  Compresion Decompression Action" anchor="Fig-ex-CDA"><artwork><![CDATA[
     identity compression-decompression-action-base-type;

    identity cda-not-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-value-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-lsb {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-mapping-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-compute-length {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-compute-checksum {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-deviid {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

   identity cda-appiid {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   
]]></artwork></figure>

<t>The type is “comp-decomp-action-type” (cf. <xref target="Fig-CDA-type"/>)</t>

<figure title="Type definition for Compresion Decompression Action" anchor="Fig-CDA-type"><artwork><![CDATA[
   typedef comp-decomp-action-type {
        description "Compression Decompression Action to compression or decompress a field.";
        type identityref {
            base compression-decompression-action-base-type;
        }
    }

]]></artwork></figure>

<section anchor="compression-decompression-action-arguments" title="Compression Decompression Action arguments">

<t>Currently no CDA requires arguments, but the future some CDA may require several arguments.
They are viewed as a list of target-values-type.</t>

</section>
</section>
</section>
<section anchor="rule-definition" title="Rule definition">

<t>A rule is either a C/D or an F/R rule. A rule is identified by the rule ID value and its associated length. The YANG grouping rule-id-type defines the structure used to represent a rule ID. Length of 0 is allowed to represent an implicit rule.</t>

<figure title="Definition of a SCHC Context" anchor="Fig-yang-schc"><artwork><![CDATA[
// Define rule ID. Rule ID is composed of a RuleID value and a Rule ID Length

    grouping rule-id-type {
        leaf rule-id {
            type uint32;
            description "rule ID value, this value must be unique combined with the length";
        }
        leaf rule-length {
            type uint8 {
                range 0..32;
            }
            description "rule ID length in bits, value 0 is for implicit rules";
        }
    }

// SCHC table for a specific device.

    container schc {
        leaf version{
            type uint64;
            mandatory false;
            description "used as an indication for versioning";
        }
        list rule {
            key "rule-id rule-length";
            uses rule-id-type;
            choice nature {
                case fragmentation {
                    uses fragmentation-content;
                }
                case compression {
                    uses compression-content;
                }
            }
        }
    }
  

]]></artwork></figure>

<t>To access to a specific rule, rule-id and its specific length is used as a key. The rule is either
a compression or a fragmentation rule.</t>

<t>Each context can be identified though a version id.</t>

<section anchor="compression-rule" title="Compression rule">

<t>A compression rule is composed of entries describing its processing (cf. <xref target="Fig-comp-entry"/>). An entry  contains all the information defined in <xref target="Fig-ctxt"/> with the types defined above.</t>

<section anchor="compression-context-representation" title="Compression context representation.">

<t>The compression rule described <xref target="Fig-ctxt"/> is associated to a rule ID. The compression
rule entry is defined in  <xref target="Fig-comp-entry"/>. Each column in the table
is either represented by a leaf or a list. Note that Matching Operators and Compression 
Decompression actions can have arguments. They are viewed a ordered list of strings and numbers
as in target values.</t>

<figure title="Definition of a compression entry" anchor="Fig-comp-entry"><artwork><![CDATA[
    grouping compression-rule-entry {
        description "These entries defines a compression entry (i.e. a line) 
        as defined in RFC 8724 and fragmentation parameters.
  
        +-------+--+--+--+------------+-----------------+---------------+
        |Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|
        +-------+--+--+--+------------+-----------------+---------------+

        An entry in a compression rule is composed of 7 elements:
        - Field ID: The header field to be compressed. The content is a YANG identifer.
        - Field Length : either a positive integer of a function defined as a YANG id.
        - Field Position: a positive (and possibly equal to 0) integer.
        - Direction Indicator: a YANG identifier giving the direction.
        - Target value: a value against which the header Field is compared.
        - Matching Operator: a YANG id giving the operation, parameters may be 
        associated to that operator.
        - Comp./Decomp. Action: A YANG id giving the compression or decompression
        action, parameters may be associated to that action.  
        ";

        leaf field-id {
            description "Field ID, identify a field in the header with a YANG identityref.";
            mandatory true;
            type schc:field-id-type;
        }
        leaf field-length {
            description "Field Length in bit or through a function defined as a YANG identityref";
            mandatory true;
            type schc:field-length-type;
        }
        leaf field-position {
            description "field position in the header is a integer. If the field is not repeated 
            in the header the value is 1, and incremented for each repetition of the field. Position
            0 means that the position is not important and order may change when decompressed"; 
            mandatory true;
            type uint8; 
        }
        leaf direction-indicator {
            description "Direction Indicator, a YANG identityref to say if the packet is bidirectionnal,
            up or down";
            mandatory true;
            type schc:direction-indicator-type;
        }
        list target-values {
            description "a list of value to compare with the header field value. If target value
            is a singleton, position must be 0. For matching-list, should be consecutive position
            values starting from 1.";
            key position;
            uses target-values-struct;
        }
        leaf matching-operator {
            mandatory true;
            type schc:matching-operator-type;
        }
        list matching-operator-value {
            key position;
            uses target-values-struct;
        }
        leaf comp-decomp-action {
            mandatory true;
            type schc:comp-decomp-action-type;
        }
        list comp-decomp-action-value {
            key position;
            uses target-values-struct;
        }
    }
]]></artwork></figure>

</section>
<section anchor="rule-definition-1" title="Rule definition">

<t>A compression rule is a list of entries.</t>

<figure title="Definition of a compression rule" anchor="Fig-comp-rule"><artwork><![CDATA[
    grouping compression-content {
        description "define a compression rule composed of a list of entries.";
        list entry {
            key "field-id field-position direction-indicator"; 
            uses compression-rule-entry;
        }
    }
]]></artwork></figure>

<t>To identify a specific entry Field ID, position and direction are needed.</t>

</section>
</section>
<section anchor="fragmentation-rule" title="Fragmentation rule">

<t>Parameters for fragmentation are defined in Annex D of <xref target="RFC8724"/>.</t>

<t><xref target="Fig-frag-header"/> gives the first elements found in this structure. It starts with 
a direction. Since fragmentation rules work for a specific direction, they contain a mandatory direction.
The type is the same as the one used in compression entries, but the use of bidirectionnal is 
forbidden.</t>

<t>The next elements describe size of SCHC fragmentation header fields. Only the FCN size is mandatory
and value must be higher or equal to 1.</t>

<figure title="Definition of a fragmentation parameters, SCHC header" anchor="Fig-frag-header"><artwork><![CDATA[
    grouping fragmentation-content {
        description "This grouping defines the fragmentation parameters for
        all the modes (No Ack, Ack Always and Ack on Error) specified in 
        RFC 8724.";

        leaf direction {
            type schc:direction-indicator-type;
            description "should be up or down, bi directionnal is forbidden.";
            mandatory true;
        }
        leaf dtagsize {
            type uint8;
            description "size in bit of the DTag field";

        }
        leaf wsize {
            type uint8;
            description "size in bit of the window field";
        }
        leaf fcnsize {
            type uint8 {
                range 1..max;
            }
            description "size in bit of the FCN field";
            mandatory true;
        }
...
]]></artwork></figure>

<t>RCS algorithm is defined (<xref target="Fig-frag-header2"/>), by default with the CRC computation proposed in <xref target="RFC8724"/>.
The algorithms are identified through an identityref specified in the SCHC Data Model and with the type RCS-algorithm-type (<xref target="Fig-ex-RCS"/>).</t>

<figure title="Definition of a fragmentation parameters, RCS algorithm" anchor="Fig-frag-header2"><artwork><![CDATA[
...
        leaf RCS-algorithm {
            type RCS-algorithm-type;
            default schc:RFC8724-RCS;
            description "Algoritm used for RCS";
        }
...
]]></artwork></figure>

<figure title="Definition of identityref for RCS Algorithm" anchor="Fig-ex-RCS"><artwork><![CDATA[
    identity RCS-algorithm-base-type {
        description "identify which algorithm is used to compute RSC.
        The algorithm defines also the size if the RSC field.";
    }

    identity RFC8724-RCS {
        description "CRC 32 defined as default RCS in RFC8724.";
        base RCS-algorithm-base-type;
    }

    typedef RCS-algorithm-type {
        type identityref {
            base RCS-algorithm-base-type;
        }
    }
]]></artwork></figure>

<t><xref target="Fig-frag-header3"/> gives the parameters used by the state machine to handle fragmentation:</t>

<t><list style="symbols">
  <t>maximum-window-size contains the maximum FCN value that can be used.</t>
  <t>retransmission-timer gives in seconds the duration before sending an ack request (cf. section 8.2.2.4. of <xref target="RFC8724"/>). If specifed, value must be higher or equal to 1.</t>
  <t>inactivity-timer gives in seconds the duration before aborting (cf. section 8.2.2.4. of <xref target="RFC8724"/>), value of 0 explicitly indicates that this timer is disabled.</t>
  <t>max-ack-requests gives the number of attempts before aborting (cf. section 8.2.2.4. of <xref target="RFC8724"/>).</t>
  <t>maximum-packet-size gives in bytes the larger packet size that can be reassembled.</t>
</list></t>

<figure title="Definition of a fragmentation state machine parameters" anchor="Fig-frag-header3"><artwork><![CDATA[
...
        leaf maximum-window-size {
            type uint16;
            description "by default 2^wsize - 2";
        }

        leaf retransmission-timer {
            type uint64 {
                range 1..max;
            }
            description "duration in seconds of the retransmission timer"; // Check the units
        }

        leaf inactivity-timer {
            type uint64;
            description "duration is seconds of the inactivity timer, 0 indicates the timer is disabled"; // check units
        }

        leaf max-ack-requests {
            type uint8 {
                range 1..max;
            }
            description "the maximum number of retries for a specific SCHC ACK.";        
        }

        leaf maximum-packet-size {
            type uint16;
            default 1280;
            description "When decompression is done, packet size must not strictly exceed this limit in Bytes";
        }
...
]]></artwork></figure>

<t><xref target="Fig-frag-header4"/> gives information related to a specific compression mode: fragmentation-mode MUST be set with a specific behavior. Identityref are given <xref target="Fig-frag-AoE-val"/>.</t>

<t>For Ack on Error some specific information may be provided:</t>

<t><list style="symbols">
  <t>tile-size gives in bits the size of the tile; If set to 0 a single tile is inserted inside a fragment.</t>
  <t>tile-in-All1 indicates if All1 contains only the RCS (all1-data-no) or may contain a single tile (all1-data-yes). Since the reassembly process may detect this behavior, the choice can be left to the fragmentation process. In that case identityref all1-data-sender-choice as to be specified. All possible values are given <xref target="Fig-frag-AoE-val"/>.</t>
  <t>ack-behavior tells when the fragmentation process may send acknowledgments. When ack-behavior-after-All0 is specified, the ack may be sent after the reception of All-0 fragment. When ack-behavior-after-All1 is specified, the ack may be sent after the reception of All-1 fragment at the end of the fragmentation process.  ack-behavior-always do not impose a limitation at the SCHC level. The constraint may come from the LPWAN technology.  All possible values are given <xref target="Fig-frag-AoE-val"/>.</t>
</list></t>

<figure title="Definition of a fragmentation specific information" anchor="Fig-frag-header4"><artwork><![CDATA[
...
        leaf fragmentation-mode {
            type schc:fragmentation-mode-type;
            description "which fragmentation mode is used (noAck, AckAlways, AckonError)";
            mandatory true;
        }

        choice mode {
            case no-ack;
            case ack-always;
            case ack-on-error {
                leaf tile-size {
                    type uint8;
                    description "size in bit of tiles, if not specified or set to 0: tile fills the fragment.";
                }
                leaf tile-in-All1 {
                    type schc:all1-data-type;
                    description "When true, sender and receiver except a tile in All-1 frag";
                }
                leaf ack-behavior {
                    type schc:ack-behavior-type;
                    description "Sender behavior to acknowledge, after All-0, All-1 or when the
                    LPWAN allows it (Always)";
                }
            }
       }
...
]]></artwork></figure>

<figure title="Specific types for Ack On Error mode" anchor="Fig-frag-AoE-val"><artwork><![CDATA[
// -- FRAGMENTATION TYPE

// -- fragmentation modes

    identity fragmentation-mode-base-type {
        description "fragmentation mode";
    }

    identity fragmentation-mode-no-ack {
        description "No Ack of RFC 8724.";
        base fragmentation-mode-base-type;
    }

    identity fragmentation-mode-ack-always {
        description "Ack Always of RFC8724.";
        base fragmentation-mode-base-type;
    }
    identity fragmentation-mode-ack-on-error {
        description "Ack on Error of RFC8724.";
        base fragmentation-mode-base-type;
    }

    typedef fragmentation-mode-type {
        type identityref {
            base fragmentation-mode-base-type;
        }
    }
    
// -- Ack behavior 

    identity ack-behavior-base-type {
        description "define when to send an Acknowledgment message";
    }

    identity ack-behavior-after-All0 {
        description "fragmentation expects Ack after sending All0 fragment."; 
        base ack-behavior-base-type;
    }

    identity ack-behavior-after-All1 {
        description "fragmentation expects Ack after sending All1 fragment.";
        base ack-behavior-base-type;
    }

    identity ack-behavior-always {
        description "fragmentation expects Ack after sending every fragment.";
        base ack-behavior-base-type;
    }

    typedef ack-behavior-type {
        type identityref {
            base ack-behavior-base-type;
        }
    }

// -- All1 with data types

    identity all1-data-base-type {
        description "type to define when to send an Acknowledgment message";
    }

    identity all1-data-no {
        description "All1 contains no tiles."; 
        base all1-data-base-type;
    }

    identity all1-data-yes {
        description "All1 MUST contain a tile";
        base all1-data-base-type;
    }

    identity all1-data-sender-choice {
        description "Fragmentation process choose to send tiles or not in all1.";
        base all1-data-base-type;
    }

    typedef all1-data-type {
        type identityref {
            base all1-data-base-type;
        }
    }


]]></artwork></figure>
<t>## YANG Tree</t>

<figure anchor="Fig-model-overview"><artwork><![CDATA[
module: schc
  +--rw schc
     +--rw version?   uint64
     +--rw rule* [rule-id rule-length]
        +--rw rule-id                       uint32
        +--rw rule-length                   uint8
        +--rw (nature)?
           +--:(fragmentation)
           |  +--rw direction               schc:direction-indicator-type
           |  +--rw dtagsize?               uint8
           |  +--rw wsize?                  uint8
           |  +--rw fcnsize                 uint8
           |  +--rw RCS-algorithm?          RCS-algorithm-type
           |  +--rw maximum-window-size?    uint16
           |  +--rw retransmission-timer?   uint64
           |  +--rw inactivity-timer?       uint64
           |  +--rw max-ack-requests?       uint8
           |  +--rw maximum-packet-size?    uint16
           |  +--rw fragmentation-mode      schc:fragmentation-mode-type
           |  +--rw (mode)?
           |     +--:(no-ack)
           |     +--:(ack-always)
           |     +--:(ack-on-error)
           |        +--rw tile-size?        uint8
           |        +--rw tile-in-All1?     schc:all1-data-type
           |        +--rw ack-behavior?     schc:ack-behavior-type
           +--:(compression)
              +--rw entry* [field-id field-position direction-indicator]
                 +--rw field-id                    schc:field-id-type
                 +--rw field-length                schc:field-length-type
                 +--rw field-position              uint8
                 +--rw direction-indicator         schc:direction-indicator-type
                 +--rw target-values* [position]
                 |  +--rw value?      union
                 |  +--rw position    uint16
                 +--rw matching-operator           schc:matching-operator-type
                 +--rw matching-operator-value* [position]
                 |  +--rw value?      union
                 |  +--rw position    uint16
                 +--rw comp-decomp-action          schc:comp-decomp-action-type
                 +--rw comp-decomp-action-value* [position]
                    +--rw value?      union
                    +--rw position    uint16

]]></artwork></figure>

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

<t>This document has no request to IANA.</t>

</section>
<section anchor="SecConsiderations" title="Security considerations">

<t>This document does not have any more Security consideration than the ones already raised on <xref target="RFC8724"/></t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The authors would like to thank Dominique Barthel, Carsten Bormann, Alexander Pelov.</t>

</section>
<section anchor="annexA" title="YANG Module">

<figure anchor="Fig-schc"><artwork><![CDATA[
<code begins> file schc@2020-02-28.yang
module schc{
    yang-version "1";
    namespace "urn:ietf:lpwan:schc:rules-description";
    prefix "schc";
        
    description 
    "Generic Data model for Static Context Header Compression Rule for SCHC,
    based on draft-ietf-lpwan-ipv6-static-context-hc-18. Include compression
    rules and fragmentation rules.
        
    This module is a YANG model for SCHC rules (RFc 8724).
    RFC 8724 describes a rule in a abstract way through a table. 

    |-----------------------------------------------------------------|
    |  (FID)            Rule 1                                        |
    |+-------+--+--+--+------------+-----------------+---------------+|
    ||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
    |+-------+--+--+--+------------+-----------------+---------------+|
    ||Field 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
    |+-------+--+--+--+------------+-----------------+---------------+|
    ||...    |..|..|..|   ...      | ...             | ...           ||
    |+-------+--+--+--+------------+-----------------+---------------+|
    ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
    +-------+--+--+--+------------+-----------------+---------------+||
    |-----------------------------------------------------------------|

    This module proposes a global data model that can be used for rule 
    exchanges or modification. It proposes both the data model format and 
    the global identifiers used to describes some operations in fields.
    This data model applies both to compression and fragmentation.";

    revision 2020-06-15 {
        description "clean up and add descriptions, merge schc-id to this file";
    }

    revision 2020-02-28 {
        description "Add Fragmentation parameters";
    }

    revision 2020-01-23 {
        description "Modified TV with binary and union";
    }

    revision 2020-01-07 {
        description "First version of the YANG model";
    }

// -------------------------
//  Field ID type definition
//--------------------------

// generic value TV definition 

    identity field-id-base-type  {
           description "Field ID with SID";
    }

    identity fid-ipv6-version {
           base field-id-base-type;
           description "IPv6 version field from RFC8200";
    }

    identity fid-ipv6-trafficclass {
        base field-id-base-type;
        description "IPv6 Traffic Class field from RFC8200";
    }

    identity fid-ipv6-trafficclass-ds {
        base field-id-base-type;
        description "IPv6 Traffic Class field from RFC8200, 
        DiffServ field from RFC3168";
    }

    identity fid-ipv6-trafficclass-ecn {
        base field-id-base-type;
        description "IPv6 Traffic Class field from RFC8200, 
        ECN field from RFC3168";
    }

    identity fid-ipv6-flowlabel {
        base field-id-base-type;
        description "IPv6 Flow Label field from RFC8200";
    }

    identity fid-ipv6-payloadlength {
        base field-id-base-type;
        description "IPv6 Payload Length field from RFC8200";
    }

    identity fid-ipv6-nextheader {
        base field-id-base-type;
        description "IPv6 Next Header field from RFC8200";
    }

    identity fid-ipv6-hoplimit {
        base field-id-base-type;
        description "IPv6 Next Header field from RFC8200";
    }

    identity fid-ipv6-devprefix {
        base field-id-base-type;
        description "correspond either to the source address or the desdination 
                            address prefix of RFC 8200. Depending if it is respectively
                            a uplink or an downklink message.";
    }

    identity fid-ipv6-deviid {
        base field-id-base-type;
        description "correspond either to the source address or the desdination 
                            address prefix of RFC 8200. Depending if it is respectively
                            a uplink or an downklink message.";
    }

    identity fid-ipv6-appprefix {
        base field-id-base-type;
        description "correspond either to the source address or the desdination 
                            address prefix of RFC 768. Depending if it is respectively
                            a downlink or an uplink message.";
    }

    identity fid-ipv6-appiid {
        base field-id-base-type;
        description "correspond either to the source address or the desdination 
                            address prefix of RFC 768. Depending if it is respectively
                            a downlink or an uplink message.";
    }

    identity fid-udp-dev-port {
        base field-id-base-type;
        description "UDP length from RFC 768";
    }

    identity fid-udp-app-port {
        base field-id-base-type;
        description "UDP length from RFC 768";
    }

    identity fid-udp-length {
        base field-id-base-type;
        description "UDP length from RFC 768";
    }

    identity fid-udp-checksum {
        base field-id-base-type;
        description "UDP length from RFC 768";
    }

    identity fid-coap-version {
        base field-id-base-type;
        description "CoAP version from RFC 7252";
    }

    identity fid-coap-type {
        base field-id-base-type;
        description "CoAP type from RFC 7252";
    }

    identity fid-coap-tkl {
        base field-id-base-type;
        description "CoAP token length from RFC 7252";
    }

    identity fid-coap-code {
        base field-id-base-type;
        description "CoAP code from RFC 7252";
    }

    identity fid-coap-code-class {
        base field-id-base-type;
        description "CoAP code class from RFC 7252";
    }

    identity fid-coap-code-detail {
        base field-id-base-type;
        description "CoAP code detail from RFC 7252";
    }

    identity fid-coap-mid {
        base field-id-base-type;
        description "CoAP message ID from RFC 7252";
    }

    identity fid-coap-token {
        base field-id-base-type;
        description "CoAP token from RFC 7252";
    }

    identity fid-coap-option-if-match {
        base field-id-base-type;
        description "CoAP option If-Match from RFC 7252";
    }

    identity fid-coap-option-uri-host {
        base field-id-base-type;
        description "CoAP option URI-Host from RFC 7252";
    }

    identity fid-coap-option-etag {
        base field-id-base-type;
        description "CoAP option Etag from RFC 7252";
    }

    identity fid-coap-option-if-none-match {
        base field-id-base-type;
        description "CoAP option if-none-match from RFC 7252";
    }

    identity fid-coap-option-observe {
        base field-id-base-type;
        description "CoAP option Observe from RFC 7641";
    }

    identity fid-coap-option-uri-port {
        base field-id-base-type;
        description "CoAP option Uri-Port from RFC 7252";
    }

    identity fid-coap-option-location-path {
        base field-id-base-type;
        description "CoAP option Location-Path from RFC 7252";
    }

    identity fid-coap-option-uri-path {
        base field-id-base-type;
        description "CoAP option Uri-Path from RFC 7252";
    }

    identity fid-coap-option-content-format {
        base field-id-base-type;
        description "CoAP option Content Format from RFC 7252";
    }

    identity fid-coap-option-max-age {
        base field-id-base-type;
        description "CoAP option Max-Age from RFC 7252";
    }

    identity fid-coap-option-uri-query {
        base field-id-base-type;
        description "CoAP option Uri-Query from RFC 7252";
    }

    identity fid-coap-option-accept {
        base field-id-base-type;
        description "CoAP option Max-Age from RFC 7252";
    }

    identity fid-coap-option-location-query {
        base field-id-base-type;
        description "CoAP option Location-Query from RFC 7252";
    }

    identity fid-coap-option-block2 {
        base field-id-base-type;
        description "CoAP option Block2 from RFC 7959";
    }

    identity fid-coap-option-block1 {
        base field-id-base-type;
        description "CoAP option Block1 from RFC 7959";
    }

    identity fid-coap-option-size2 {
        base field-id-base-type;
        description "CoAP option size2 from RFC 7959";
    }

    identity fid-coap-option-proxy-uri {
        base field-id-base-type;
        description "CoAP option Proxy-Uri from RFC 7252";
    }

    identity fid-coap-option-proxy-scheme {
        base field-id-base-type;
        description "CoAP option Proxy-scheme from RFC 7252";
    }

    identity fid-coap-option-size1 {
        base field-id-base-type;
        description "CoAP option Size1 from RFC 7252";
    }

    identity fid-coap-option-no-response {
        base field-id-base-type;
        description "CoAP option No response from RFC 7967";
    }

    identity fid-coap-option-oscore-flags {
        base field-id-base-type;
        description "CoAP option oscore flags (see draft schc coap, section 6.4)";
    }

    identity fid-coap-option-oscore-piv {
        base field-id-base-type;
        description "CoAP option oscore flags (see draft schc coap, section 6.4)";
    }

    identity fid-coap-option-oscore-kid {
        base field-id-base-type;
        description "CoAP option oscore flags (see draft schc coap, section 6.4)";
    }

    identity fid-coap-option-oscore-kidctx {
        base field-id-base-type;
        description "CoAP option oscore flags (see draft schc coap, section 6.4)";
    }

    identity fid-icmpv6-type {
        base field-id-base-type;
        description "ICMPv6 field (see draft OAM)";
    }

    identity fid-icmpv6-code {
        base field-id-base-type;
        description "ICMPv6 field (see draft OAM)";
    }

    identity fid-icmpv6-checksum {
        base field-id-base-type;
        description "ICMPv6 field (see draft OAM)";
    }

    identity fid-icmpv6-identifier {
        base field-id-base-type;
        description "ICMPv6 field (see draft OAM)";
    }

    identity fid-icmpv6-sequence {
        base field-id-base-type;
        description "ICMPv6 field (see draft OAM)";
    }
 

/// !!!!!!! See future CoAP extentions

//----------------------------------
// Field Length type definition
//----------------------------------

  identity field-length-base-type {
        description "used to extend field length functions";
  }

  identity fl-variable {
           base field-length-base-type;
           description "residue length in Byte is sent";
  }

  identity fl-token-length {
           base field-length-base-type;
           description "residue length in Byte is sent";
  }

//---------------------------------
// Direction Indicator type
//---------------------------------

  identity direction-indicator-base-type {
        description "used to extend field length functions";
  }

  identity di-bidirectional {
           base direction-indicator-base-type;
           description "Direction Indication of bi directionality";
  }

  identity di-up {
           base direction-indicator-base-type;
           description "Direction Indication of upstream";
  }

  identity di-down {
           base direction-indicator-base-type;
           description "Direction Indication of downstream";
  }

//----------------------------------
// Matching Operator type definition
//----------------------------------

   identity matching-operator-base-type {
      description "used to extend Matching Operators with SID values";
   }

   identity mo-equal {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-ignore {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-msb {
      base matching-operator-base-type;
      description "RFC 8724";
   }
   
   identity mo-matching {
      base matching-operator-base-type;
      description "RFC 8724";
   }

//------------------------------
// CDA type definition
//------------------------------

    identity compression-decompression-action-base-type;

    identity cda-not-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-value-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-lsb {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-mapping-sent {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-compute-length {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-compute-checksum {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

    identity cda-deviid {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

   identity cda-appiid {
        base compression-decompression-action-base-type;
            description "RFC 8724";
    }   

// -- type definition

    typedef field-id-type {
        description "Field ID generic type.";
        type identityref {
            base field-id-base-type;
        }
    }

    typedef field-length-type {
        description "Field length either a positive integer giving the size in bits 
        or a function defined through an identityref.";
        type union {
            type int64; /* positive length in bits */
            type identityref { /* function */
                base field-length-base-type;
            }
        }
    }

    typedef direction-indicator-type {
        description "direction in LPWAN network, up when emitted by the device,
        down when received by the device, bi when emitted or received by the device.";
        type identityref {
            base direction-indicator-base-type;
        }
    }

    typedef matching-operator-type {
        description "Matching Operator (MO) to compare fields values with target values";
        type identityref {
            base matching-operator-base-type;
        }
    }

    typedef comp-decomp-action-type {
        description "Compression Decompression Action to compression or decompress a field.";
        type identityref {
            base compression-decompression-action-base-type;
        }
    }

// -- FRAGMENTATION TYPE

// -- fragmentation modes

    identity fragmentation-mode-base-type {
        description "fragmentation mode";
    }

    identity fragmentation-mode-no-ack {
        description "No Ack of RFC 8724.";
        base fragmentation-mode-base-type;
    }

    identity fragmentation-mode-ack-always {
        description "Ack Always of RFC8724.";
        base fragmentation-mode-base-type;
    }
    identity fragmentation-mode-ack-on-error {
        description "Ack on Error of RFC8724.";
        base fragmentation-mode-base-type;
    }

    typedef fragmentation-mode-type {
        type identityref {
            base fragmentation-mode-base-type;
        }
    }

// -- Ack behavior 

    identity ack-behavior-base-type {
        description "define when to send an Acknowledgment message";
    }

    identity ack-behavior-after-All0 {
        description "fragmentation expects Ack after sending All0 fragment."; 
        base ack-behavior-base-type;
    }

    identity ack-behavior-after-All1 {
        description "fragmentation expects Ack after sending All1 fragment.";
        base ack-behavior-base-type;
    }

    identity ack-behavior-always {
        description "fragmentation expects Ack after sending every fragment.";
        base ack-behavior-base-type;
    }

    typedef ack-behavior-type {
        type identityref {
            base ack-behavior-base-type;
        }
    }

// -- All1 with data types

    identity all1-data-base-type {
        description "type to define when to send an Acknowledgment message";
    }

    identity all1-data-no {
        description "All1 contains no tiles."; 
        base all1-data-base-type;
    }

    identity all1-data-yes {
        description "All1 MUST contain a tile";
        base all1-data-base-type;
    }

    identity all1-data-sender-choice {
        description "Fragmentation process choose to send tiles or not in all1.";
        base all1-data-base-type;
    }

    typedef all1-data-type {
        type identityref {
            base all1-data-base-type;
        }
    }

// -- RCS algorithm types

    identity RCS-algorithm-base-type {
        description "identify which algorithm is used to compute RSC.
        The algorithm defines also the size if the RSC field.";
    }

    identity RFC8724-RCS {
        description "CRC 32 defined as default RCS in RFC8724.";
        base RCS-algorithm-base-type;
    }

    typedef RCS-algorithm-type {
        type identityref {
            base RCS-algorithm-base-type;
        }
    }



// --------  RULE ENTRY DEFINITION ------------

    grouping target-values-struct {
        description "defines the target value element. Can be either an arbitrary
        binary or ascii element. All target values are considered as a matching lists.
        Position is used to order values, by default position 0 is used when containing
        a single element.";

        leaf value {
            type union {
                type binary;
                type string;
            }
        }
        leaf position {
            description "If only one element position is 0, otherwise position is the
            matching list.";
            type uint16;
        }
    }

    grouping compression-rule-entry {
        description "These entries defines a compression entry (i.e. a line) 
        as defined in RFC 8724 and fragmentation parameters.
  
        +-------+--+--+--+------------+-----------------+---------------+
        |Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|
        +-------+--+--+--+------------+-----------------+---------------+

        An entry in a compression rule is composed of 7 elements:
        - Field ID: The header field to be compressed. The content is a YANG identifer.
        - Field Length : either a positive integer of a function defined as a YANF id.
        - Field Position: a positive (and possibly equal to 0) integer.
        - Direction Indicator: a YANG identifier giving the direction.
        - Target value: a value against which the header Field is compared.
        - Matching Operator: a YANG id giving the operation, paramters may be 
        associated to that operator.
        - Comp./Decomp. Action: A YANG id giving the compression or decompression
        action, paramters may be associated to that action.  
        ";

        leaf field-id {
            description "Field ID, identify a field in the header with a YANG refenceid.";
            mandatory true;
            type schc:field-id-type;
        }
        leaf field-length {
            description "Field Length in bit or through a function defined as a YANG referenceid";
            mandatory true;
            type schc:field-length-type;
        }
        leaf field-position {
            description "field position in the header is a integer. If the field is not repeated 
            in the header the value is 1, and incremented for each repetition of the field. Position
            0 means that the position is not important and order may change when decompressed"; 
            mandatory true;
            type uint8; 
        }
        leaf direction-indicator {
            description "Direction Indicator, a YANG referenceid to say if the packet is bidirectionnal,
            up or down";
            mandatory true;
            type schc:direction-indicator-type;
        }
        list target-values {
            description "a list of value to compare with the header field value. If target value
            is a singleton, position must be 0. For matching-list, should be consecutive position
            values starting from 1.";
            key position;
            uses target-values-struct;
        }
        leaf matching-operator {
            mandatory true;
            type schc:matching-operator-type;
        }
        list matching-operator-value {
            key position;
            uses target-values-struct;
        }
        leaf comp-decomp-action {
            mandatory true;
            type schc:comp-decomp-action-type;
        }
        list comp-decomp-action-value {
            key position;
            uses target-values-struct;
        }
    }

    grouping compression-content {
        description "define a compression rule composed of a list of entries.";
        list entry {
            key "field-id field-position direction-indicator"; 
            uses compression-rule-entry;
        }
    }

    grouping fragmentation-content {
        description "This grouping defines the fragmentation parameters for
        all the modes (No Ack, Ack Always and Ack on Error) specified in 
        RFC 8724.";

        leaf direction {
            type schc:direction-indicator-type;
            description "should be up or down, bi directionnal is forbiden.";
            mandatory true;
        }
        leaf dtagsize {
            type uint8;
            description "size in bit of the DTag field";

        }
        leaf wsize {
            type uint8;
            description "size in bit of the window field";
        }
        leaf fcnsize {
            type uint8;
            description "size in bit of the FCN field";
            mandatory true;
        }
        leaf RCS-algorithm {
            type RCS-algorithm-type;
            default schc:RFC8724-RCS;
            description "Algoritm used for RCS";
        }
        leaf maximum-window-size {
            type uint16;
            description "by default 2^wsize - 1";
        }

        leaf retransmission-timer {
            type uint64 {
                range 1..max;
            }
            description "duration in seconds of the retransmission timer"; // Check the units
        }

        leaf inactivity-timer {
            type uint64;
            description "duration is seconds of the inactivity timer, 0 indicates the timer is disabled"; // check units
        }

        leaf max-ack-requests {
            type uint8 {
                range 1..max;
            }
            description "the maximum number of retries for a specific SCHC ACK.";        
        }

        leaf maximum-packet-size {
            type uint16;
            default 1280;
            description "When decompression is done, packet size must not strictly exceed this limit in Bytes";
        }

        leaf fragmentation-mode {
            type schc:fragmentation-mode-type;
            description "which fragmentation mode is used (noAck, AckAlways, AckonError)";
            mandatory true;
        }

        choice mode {
            case no-ack;
            case ack-always;
            case ack-on-error {
                leaf tile-size {
                    type uint8;
                    description "size in bit of tiles, if not specified or set to 0: tile fills the fragment.";
                }
                leaf tile-in-All1 {
                    type schc:all1-data-type;
                    description "When true, sender and receiver except a tile in All-1 frag";
                }
                leaf ack-behavior {
                    type schc:ack-behavior-type;
                    description "Sender behavior to acknowledge, after All-0, All-1 or when the
                    LPWAN allows it (Always)";
                }
            }
       }
    }



// Define rule ID. Rule ID is composed of a RuleID value and a Rule ID Length

    grouping rule-id-type {
        leaf rule-id {
            type uint32;
            description "rule ID value, this value must be unique combined with the length";
        }
        leaf rule-length {
            type uint8 {
                range 0..32;
            }
            description "rule ID length in bits, value 0 is for implicit rules";
        }
    }

// SCHC table for a specific device.

    container schc {
        leaf version{
            type uint64;
            mandatory false;
            description "used as an indication for versioning";
        }
        list rule {
            key "rule-id rule-length";
            uses rule-id-type;
            choice nature {
                case fragmentation {
                    uses fragmentation-content;
                }
                case compression {
                    uses compression-content;
                }
            }
        }
    }
  
  
}

<code ends>
]]></artwork></figure>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC8724" target='https://www.rfc-editor.org/info/rfc8724'>
<front>
<title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
<author initials='A.' surname='Minaburo' fullname='A. Minaburo'><organization /></author>
<author initials='L.' surname='Toutain' fullname='L. Toutain'><organization /></author>
<author initials='C.' surname='Gomez' fullname='C. Gomez'><organization /></author>
<author initials='D.' surname='Barthel' fullname='D. Barthel'><organization /></author>
<author initials='JC.' surname='Zúñiga' fullname='JC. Zúñiga'><organization /></author>
<date year='2020' month='April' />
<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="I-D.ietf-lpwan-coap-static-context-hc">
<front>
<title>LPWAN Static Context Header Compression (SCHC) for CoAP</title>

<author initials='A' surname='Minaburo' fullname='Ana Minaburo'>
    <organization />
</author>

<author initials='L' surname='Toutain' fullname='Laurent Toutain'>
    <organization />
</author>

<author initials='R' surname='Andreasen' fullname='Ricardo Andreasen'>
    <organization />
</author>

<date month='January' day='21' year='2021' />

<abstract><t>This draft defines how to compress the Constrained Application Protocol (CoAP) using the Static Context Header Compression (SCHC). SCHC is a header compression mechanism adapted for Constrained Devices.  SCHC uses a static description of the header to reduce the header's redundancy and size.  While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC for CoAP headers.  The CoAP header structure differs from IPv6 and UDP since CoAP uses a flexible header with a variable number of options, themselves of variable length.  The CoAP protocol messages format is asymmetric: the request messages have a header format different from the one in the response messages.  This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-lpwan-coap-static-context-hc-18' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-lpwan-coap-static-context-hc-18.txt' />
</reference>



<reference anchor="I-D.barthel-lpwan-oam-schc">
<front>
<title>OAM for LPWAN using Static Context Header Compression (SCHC)</title>

<author initials='D' surname='Barthel' fullname='Dominique Barthel'>
    <organization />
</author>

<author initials='L' surname='Toutain' fullname='Laurent Toutain'>
    <organization />
</author>

<author initials='A' surname='Kandasamy' fullname='Arunprabhu Kandasamy'>
    <organization />
</author>

<author initials='D' surname='Dujovne' fullname='Diego Dujovne'>
    <organization />
</author>

<author initials='J' surname='Zuniga' fullname='Juan Zuniga'>
    <organization />
</author>

<date month='November' day='2' year='2020' />

<abstract><t>With IP protocols now generalizing to constrained networks, users expect to be able to Operate, Administer and Maintain them with the familiar tools and protocols they already use on less constrained networks.  OAM uses specific messages sent into the data plane to measure some parameters of a network.  Most of the time, no explicit values are sent is these messages.  Network parameters are obtained from the analysis of these specific messages.  This can be used:  *  To detect if a host is up or down.  *  To measure the RTT and its variation over time.  *  To learn the path used by packets to reach a destination.  OAM in LPWAN is a little bit trickier since the bandwidth is limited and extra traffic added by OAM can introduce perturbation on regular transmission.  Two scenarios can be investigated:  *  OAM coming from internet.  In that case, the NGW should act as a</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-barthel-lpwan-oam-schc-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-barthel-lpwan-oam-schc-02.txt' />
</reference>



<reference  anchor="RFC7252" target='https://www.rfc-editor.org/info/rfc7252'>
<front>
<title>The Constrained Application Protocol (CoAP)</title>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t><t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t></abstract>
</front>
<seriesInfo name='RFC' value='7252'/>
<seriesInfo name='DOI' value='10.17487/RFC7252'/>
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAGokGWAAA+09/XfbNpK/86/AOj/U7oryR9Ik6+xt17Xirt/FcS52u2/f
3d49SoJkPlOkSlJ2fI3vb7/5AECABPVhyU27tdrXWiI4MxgMZgaDASYMw6Ao
o3T4P1GSpfJQlPlMBvE0p7+K8mBv7097B8EwG6TRBB4P82hUhrEsR2EyvY3S
sBhcDcK7KB2Hw6iMwkk2lEm49yIYROWhKMphMI0PAyGKu0kuR8Wh+OpOFl/h
D1le1n4p83hQVt8H2WQa2T+U2UB/Ccq4TICcHuAUZ4hTjLJcXJRRGQ/EcZaW
8lMp/iajoczh62Say6KIs1RsXxz/7XgniPr9XN4cincf/n70XuBv4h9H778X
QP4skcHt+FBQ98Tfs/w6Tsfi+zybTYNoVl5l+WEQijgFyo+64ixOo/4sz4A8
ZtBRGtk/ZjmAOhpcJ3HGXZQSerS///zVkYhuZDqTYigLcXwVTaaF+C6J0kGB
fY/Lu0Px/Jtv9vfEMZCepeGFvInHqYSvQ/mJ2DNLyxxaneTwkoRf5CSKk0MR
pdFfI8DYBZSK0HddcZnNyihODZ3volku09L6nUg9TQtg7awUZ6fv316Iy7fv
3h6fn70Rp2eX4qgE8sr4p5msugJ/heJA5NQPkUTYE4AHhOZRLOnp8YXYf/Vy
75XdrVcvV+6WIrirCP5rPCnDyFDUHeVBmuUTGP8biVQJ8fHk+PWrgxf85TTs
dS2pHWTRNCxIWuBvkpbwalA17Ud5eQWCzK2zaEJybuC+OvjmgL8EYRiKqA/c
AFENgsuruBAwWWYT5C2M7CCP+zC+EYsXThExMeIKKFj2thcK7o4IBpYYw4QV
ozwaIxp4E37JQW6LbkD0TOLhEKQ4eAbDWeYg0gNq8vMz++s9Pifs9GoQ0N8x
0jof00QOrqI0LibUB+Aedj5O5VCksryF+QIckCP6IQakP6txuL/vBqclIuhH
BTxD2IKHQKghEMVVlMOj/p0AQAIwxmWM3CuJVX0QjWGUw0PksgdxN+iherJx
imme3cQ4xWAyp4BzhEKSiFxiD02fshFhIE6IGZInY/ghV1007NgdSps52/D0
eLe3E8D/HSbt5jIqCjnpJ3fU6GT34w7MQUAxzgA7obMlBf4uM0Vb/L+SiGHp
mTbpg5bZaCRBDwVf088FzGjmecytU+BVeQUMHBYdIUHNiJgBxMDnPG32H2mJ
ESbOMAFggVuzKYgrk5IRLwAc4i5kCc9AgQPSYioH8QhG8CZKZkDatuyOu+L0
w81LYDwQ9KkjehI0SspoouEQWdfpdrs7gAT+15wyKDlmwrA+RqyGYO7aEpOh
I26v4sGVSGAyEdPgnQk+dLuOI6yoxz+jJLFYLROJUAvgCc8PGy/QPZag6OJB
h14BPWXPjmEGAgfYgKtFAOijilsglGDMsqQL5uJOXPFsH8UyGdIEVOoEpLC8
ArszvsLhOO11AMQ0K2iM8e9hnEue2ciBiHsBr8B0GcALfQm/pcBWIDBKAn6K
PSRLm8I42fMEQfz881JqElqrniDPkGpmHQ57R/zQ+9ABzXX0gUCeXxyff3zb
VaD9ahXgwbRiRXl6fIbCo1hicburBqA20PKnGXAB5QXFEqaJGuRplMOkAGEv
mCGgV0D4B8lsyGopogGmKVlIuzU2bFNfoDGfOd7ER9acNX0DY7SkvrGliegJ
jpzftF4kwQSybuKBFKT7JohkiHBMz9kCiLcRyDz+TW+DSBbQjxGbRgBZZoE2
S7ZEKuFLiSzFfZDZfkWjHOIk+D/6BGD7/hiu+/kjQPksvB9krHjvf1b7fA42
QQpA8ZJChMRLEQKkfA42QcrnAEjZPjnt7TQo2V+SEiAFoGhi/mj9ayFqom6S
AlA+n5Bs7H8+eff55MPn3unnyygfg8z9iBrl81lUDq7QRT6fgs9XZvlnnCG7
PTKU4PqWnzdPy8GvghYwX8Tqblf9C1/UbyjY5k/h/2VjtOwavrxfgy+bIGU3
aJnPK3wMhOC/GhhX/eyKSmX9fCiencTjcFCCQqXl4799ZevynuPZKU/8K/SS
nzFzT4fokIKizIPglBUlKPsBvKDsjn65YynRQqv6LI/HMXpesKa9lmyQRnFe
lGh8UJWjgwJeY4lqOYkLUulsXNFKgdJ3fwzglwkOK7wajVHNl66LCCZsSL9E
U7RJeYygYYnPzsJ0Cp6pbV7JOU3i9Bp0fnkrJXeQcI5j9CDRKb+Smlpl9iPG
ETBWcuRSWXktyqyc9kDubSPJvlFJ7j9wKrsl0LqxcmSUD8N+/gzdITBAwHj5
CdbK5N/FakQGlRPromdHB8warC3VuoJHjbwvWglbLmv3BsaLxg/dF/MNnVWw
/T8UCArf156pTMC5RmvLhJ/9cHGJBGuqbPdNjJOsD4NPr3KD8g5cQ3AA+TfT
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
TXp7m9+5SnyVnf5qx7+xna+ymhcejKoVtuW+67CausGccyzuXSxJeBPlMRUC
qkC7LK/T8MZu51Yo4qLCVoUivPKEb7hJSz96isp4L2p/RBKWGA0qdNW8wpsG
dqn37X7OrXS/6TEdxqF1GWqUeLg6l5525jb4EXNijH39ZpQADX6qZtPHJ2U2
LcpcRhM/Bbhr8/g0IBaXimVVSLP07UP1yFOR7Kci2XpYFskMSh5V3VxR1urF
S5/qAj/VBd5sOd6nusC/27rA6v6Auk6iBubiDvv8YJsbZTJddS4tNl61qO68
xYc5Yt4kzTqUOJ88Jejt1bqselDWFUxFlf3CBQ/rxYr890g3ek+J0rV+M1vo
Fkux+3VFkVt+VHy963nLZia+bOiqta7xd66b76lM6XC87QxmG+OrE+rQFb7q
KJUlVjXoYFY83S0hJ3FZVlf7cm3UqhQPuZPUUF0WVW+JnrEDCE8heJuuKpBL
uqxeTvmPdLbxqemTbp+d79iVffgYg77vja8ft2sarti1Jfydlo79y5fnfrrq
6umqqwcxx5ilL3DV1dM1V4ZxT9dczSfu6ZorYhc9e7rm6umaq6WQeMTRLWXj
k8anYibuEP46i5kEzuFSIT7+8O6tAM/v4z9E7+3J6ftT8gCbMTlTGMxXw3C+
WVUFBiz/XVdM64pjPlCtV6lYqg7WgHmUV6cl1OlbXI0Wgziu3sWroZ1VAV0M
rW/70HV1TQQUywlalzt8sGrBannjCrAMzCnGZG5N2TPNSYUqNQPgDVxz37qm
c6texcxXOLJ1zWweMhve+B9yKfj5i1uDf5miv6cjvmMea+apjjjVc/c6IsMh
u40Lt6xu/eZfh/31+5m517VqCs467Klc/VO5+i9Trv5EPJWrF/PL1f9qq9X/
iovVg/3GVJR4WNeFv7VS9diRnLuyRk+eStXz5/dUqt6SnKdS9U+l6p9K1f92
S9W3++i/l/LwLgeeCm5vvuD2U73tteptr4Zz9RLaDjG/ztrODomPWrZ038Hr
In4qW7qIwqeypb/bsqU1nfZUpu+pTN9Tmb7lOvErLdPH/+Xtph57++Tfn/a6
fPP0aa8eJ47ogT4EwLfImrYcpar526pqTX3HjO2tqmjTogmfH8zREYpSJqTD
2sstRz/jK96B/D4FxswCnyNa7f6HXTVnZYuz1+3W6Z5jcHQv3PxKXct+T7nY
GFqievZ8i3mDct4CJntEV5PXLZXKNuSRURtimICBZzRrQ6JuoVrSS6hU6yhK
inkqndQ2hiZT7R7gz0inwgiy4h8RXEMSmzxLSE/VpNoEoJWiLYM1Rc2Kn4se
ecZ00Mh8alEQhMe7tlxGDQ1qSYLzkHiW8EvPeSMv5KoEIDdctAD0U/GXwKlJ
TsLBhSW2msUkAtyZ7oMSC/4f3ivf87bbAAA=

-->

</rfc>

