<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [

      <!ENTITY rfc768 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml'>
      <!ENTITY rfc4997 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4997.xml'>
      <!ENTITY rfc2460 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460.xml'>
      <!ENTITY rfc6282 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6282.xml'>
      <!ENTITY rfc4944 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4944.xml'>

      <!ENTITY gapAna PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-minaburo-lp-wan-gap-analysis-01.xml'>      
]>

<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<rfc category="info" docName="draft-toutain-lpwan-ipv6-static-context-hc-00" ipr="trust200902">
  <front>
    <title abbrev="LPWAN SCHC">LPWAN Static Context Header Compression (SCHC) for IPv6 and UDP</title>


<author fullname="Ana Minaburo" initials="A." surname="Minaburo">
<organization>Acklio</organization>

   <address>
    <postal>
    <street>2bis rue de la Chataigneraie</street>


    <city>35510 Cesson-Sevigne Cedex</city>

    <country>France</country>
    </postal>

    <email>ana@ackl.io</email>
  </address>
</author>


    <author fullname="Laurent Toutain" initials="L." surname="Toutain">
      <organization>Institut MINES TELECOM ; TELECOM Bretagne</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@telecom-bretagne.eu</email>
      </address>
    </author>

    <date/>

    <!--    <workgroup>v6ops Working Group </workgroup> -->

    <abstract>
      <t>This document describes a header compression scheme for IPv6, IPv6/UDP based on static contexts. This technique is especially tailored for LPWA networks and could be extended to other protocol stacks.</t>
      <t>    
During the IETF history several compression mechanisms have been proposed. First 
mechanisms, such as RoHC, are using a context to store header field values and send smaller incremental differences on the link. Values in the context evolve dynamically with information contained in the compressed header. The challenge is to maintain sender's and receiver's contexts synchronized even with packet losses. Based on the fact that IPv6 contains only static fields, 6LoWPAN developed an efficient context-free compression mechanisms, allowing better flexibility and performance.
     </t>
     
     <t>
The Static Context Header Compression (SCHC) combines the advantages of RoHC context which offers a great level of flexibility in the processing of fields, and 6LoWPAN behavior to elide fields that are known from the other side. Static context means that values in the context field do not change during the transmission, avoiding complex resynchronization mechanisms, incompatible with LPWA characteristics. In most of the cases, IPv6/UDP headers are reduced to a small  identifier.
</t>
<t>
This document focuses on IPv6/UDP headers compression, but the mechanism can be applied to other protocols such as CoAP. It will be described in a separate document.
</t>
    </abstract>
  </front>

<middle>

<section anchor="Introduction" title="Introduction">

<t>
Headers compression is mandatory to bring the internet protocols to the node within a
LPWA network <xref target="I-D.minaburo-lp-wan-gap-analysis" />. 
</t>
<t>
Nevertheless, LPWA networks offer good properties for an efficient header compression:
<list style="symbols">
<t>Topology is star oriented, therefore all the packets follows the same path. For the needs of this draft, the architecture can be summarized to End-Systems (ES) exchanging information with LPWAN Application Server (LA). The exchange goes trhough a single LPWA Compressor (LC). In most of the cases, End Systems and LC form a star topology. ESs and LC maintain a static context for compression. Static context means that context information is not learned during the exchange.</t>
<t>Traffic flows are mostly deterministic, since End-Systems embed built-in applications. Contrary to computers or smartphones, new applications cannot be easily installed.</t> 
</list>
</t>

<t>
First mechanisms such as RoHC use a context to store header field values and send smaller
incremental differences on the link. The first version of RoHC targeted IP/UDP/RTP stack.
RoHCv2 extends the principle to any protocol and introduces a formal 
notation <xref target="RFC4997"/> describing the header and associating 
compression functions to each field. 

To be efficient the sender and the receiver must check that the context remains synchronized (i.e. contains the same values). Context synchronization
imposes to periodically send a full header or at least dynamic fields. If fully compressed, the header can be compatible with LPWA constraints. However, the first exchanges or context resynchronisations impose to send uncompressed headers, which may be bigger than the original one. This will force the use of inefficient fragmentation mechanisms. For some LPWA technologies, duty cycle limits can also delay the resynchronization.

<xref target="fig-ROHC"/> illustrates this behavior. 
<figure anchor="fig-ROHC" title="RoHC Compressed Header size evolution."><artwork><![CDATA[
                    sync
          ^         +-+         sync     sync             ^
          | IPv6    | |         +-+       +-+             | IPv6
          v         | |         | |       | |             v
   +------------+   | +-+-+     | |       | |    +------------+
   |       +--+ |   | | | |     | |       | |    | +--+       |
   |       | c| |   | | | +-+-+-+ +-+-+-+-+ |    | | c|       |
   |       | t| |   | | | | | | | | | | | | |    | | t|       |
   |       | x| |   +-+-+-+-+-+-+-+-+-+-+-+-+    | | x|       |
   |       | t| | <----------------------------> | | t|       |
   |       +--+ |  header size of sent packets   | +--+       |
   +------------+                                +------------+
   

]]></artwork></figure> 
</t>

<t>
On the other hand, 6LoWPAN <xref target="RFC4944"/> is context-free based on the fact that IPv6, its extensions or UDP headers do not contain incremental fields. The compression mechanism described in <xref target="RFC6282"/> is based on sending a 2-byte bitmap, which describes how the header should be decompressed, either using some standard values or sending information after this bitmap. <xref target="RFC6282"/>
also allows for UDP compression. 
</t>

<t>
In the best case, when Hop limit is a standard value, flow label, DiffServ fields are set to 0 and Link Local addresses are used over a single hop network, the 6LoWPAN compressed header is reduced to 4 bytes. This compression ratio is possible because the IID are derived from the MAC addresses and the link local prefix is known from both sides.

In that  case, the IPv6 compression is 4 bytes and UDP compression is 2 bytes, which fills half of the payload of a SIGFOX frame, or more than 10% of a LoRaWAN payload (with spreading factor 12). 
</t>

<t>
The Static Context Header Compression (SCHC) combines the advantages of RoHC context, which offers a great level of flexibility in the processing of fields, and 6LoWPAN behavior to elide fields that are known from the other side. Static context means that values in the context field do not change during the transmission, avoiding complex resynchronization mechanisms, incompatible with LPWA characteristics. In most of the cases, IPv6/UDP headers are reduced to a small context identifier.
</t>

</section>

<section title="Static Context Header Compression">

<t>
Static Context Header Compression (SCHC) avoids context synchronization, which is the most bandwidth-consuming operation in RoHC. Based on the fact that the nature of data flows is highly predictable in LPWA networks, a static context may be stored on the End-System (ES). The other end, the LPWA Compressor (LC) can learn the context through a provisioning protocol during the identification phase (for instance, as it learns the encryption key). 
</t>

<t>
The context contains a list of rules (cf. <xref target="Fig-ctxt" />). Each rule contains itself a list of field descriptions composed of a target value (TV), a matching operator (MO) and a Compression/Decompression Function (CDF). 
</t>
<t>
<figure anchor="Fig-ctxt"
title="Compression Decompression Context"><artwork><![CDATA[  
  +------------------------------------------------------------------+
  |                      Rule N                                      |
 +-----------------------------------------------------------------+ |
 |                    Rule i                                       | |
+----------------------------------------------------------------+ | |
|                Rule 1                                          | | |
|         +--------------+-------------------+-----------------+ | | |
| Field 1 | Target Value | Matching Operator | Comp/Decomp Fct | | | | 
|         +--------------+-------------------+-----------------+ | | |
| Field 2 | Target Value | Matching Operator | Comp/Decomp Fct | | | | 
|         +--------------+-------------------+-----------------+ | | |
| ...     |    ...       | ...               | ...             | | | |
|         +--------------+-------------------+-----------------+ | |-+
| Field N | Target Value | Matching Operator | Comp/Decomp Fct | | |     
|         +--------------+-------------------+-----------------+ |-+
|                                                                |
+----------------------------------------------------------------+            
]]></artwork></figure>
  

</t>
<t>
The rule does not describe the compressed/decompressed packet format which must be known from the compressor/decompressor. The rule just describes the compression/decompression behavior for a field.  
</t>

<t>
The main idea of the compression scheme is to send the rule number (or rule id) to the other end instead of known field values.

</t>
<t>
Matching a field with a value and header compression are related operations; If a field matches a rule  containing the value, it is not necessary to send it on the link. Since contexts are synchronized, reading the rule's value is enough to reconstruct the field's value at the other end. 
</t>
<t>
On some other cases, the value need to be sent on the link to inform the other end. The field value may vary from one packet to another, therefore the field cannot be used to select the rule id.
</t>
<section title="Simple Example">
<t>
A simple header is composed of 3 fields (F1, F2, F3). The compressor receives a packet containing respectively [F1:0x00, F2:0x1230, F3:0xABC0] in those fields. The Matching Operators (as defined in  <xref target="chap-MO" />) allow to select Rule 5 as represented in <xref target="Fig-ex-ctxt" />; F1 value is ignored and F2 and F3 packet field values are matched with those stored in the rule Target Values. 

<figure anchor="Fig-ex-ctxt"
title="Matching Rule "><artwork><![CDATA[  
               Rule 5   
          Target Value   Matching Operator   Comp/Decomp Fct                                            
        +--------------+-------------------+-----------------+ 
     F1 | 0x00         | Ignore            | not-sent        |  
        +--------------+-------------------+-----------------+ 
     F2 | 0x1230       | Equal             | not-sent        |  
        +--------------+-------------------+-----------------+ 
     F3 | 0xABC0       | Equal             | not-sent        |     
        +--------------+-------------------+-----------------+  
]]></artwork></figure>
</t>
<t>
The Compression/Decompression Function (as defined in <xref target="chap-CDF" /> describes how the fields are compressed. In this example, all the fields are elided and only the rule number has to be sent to the other end. 
</t>
<t> 
The decompressor receives the rule number and reconstructs the header using the values stored in the Target Value column. 
</t>
<t>
Note that F1 value will be set to 0x00 by the decompressor, even if the original header field was carrying a different value.
</t>
<t>
To allow a range of values for field F2 and F3, the MSB() Matching Operator and LSB() Compression/Decompression Function can be used (as defined in  <xref target="chap-MO" /> and <xref target="chap-CDF" />). In that case the rule will be rewritten as defined in  <xref target="Fig-ex-ctxt2" />.

<figure anchor="Fig-ex-ctxt2"
title="Matching Rule "><artwork><![CDATA[  
               Rule 5   
          Target Value   Matching Operator   Comp/Decomp Fct                                            
        +--------------+-------------------+-----------------+ 
     F1 | 0x00         | Ignore            | not-sent        |  
        +--------------+-------------------+-----------------+ 
     F2 | 0x1230       | MSB(12)           | LSB(4)          |  
        +--------------+-------------------+-----------------+ 
     F3 | 0xABC0       | MSB(12)           | LSB(4)          |     
        +--------------+-------------------+-----------------+  
]]></artwork></figure>
</t>
<t>
In that case, if a packet with the following header fields [F1:0x00, F2:0x1234, F3:0xABCD] arrives to the compressor, the new rule 5 will be selected and sent to the other end. The compressed header will be composed of the single byte [0x4D]. The decompressor receives the compressed header and follows the rule to reconstruct [0x00, 0x1234, 0xABCD] applying a OR operator between the target value stored in the rule and the compressed field value sent.
</t>
</section>

<section title="Packet processing">
<t>
The compression/decompression process follows several steps:
<list style="symbols">
<t>compression rule selection: the goal is to identify which rule will be used to compress the headers. To each field is associated a matching rule for compression. Each header field's value is compared to the corresponding target value stored in the rule for that field using the matching operator. If all the fields satisfied the matching operator,  the packet is processed using this Compression Decompression Function functions. Otherwise the next rule is tested. If no eligible rule is found, then the packet is dropped. </t>
<t>sending: The rule number is sent to the other end followed by data resulting from the field compression. The way the rule number is sent depends of the layer two technology and will be specified in a specific document. For exemple, it can either be included in a Layer 2 header or sent in the first byte of the L2 payload.</t>
<t>decompression: The receiver identifies the  sender through its device-id (e.g. MAC address) and select the appropriate rule through the rule number. It applies the compression decompression function to reconstruct the original header fields.</t>
</list> 
</t>
</section>

</section>

<section title="Matching operators" anchor="chap-MO">
<t>
It may exist some intermediary cases, where part of the value may be used to select a field and a variable part has to be sent on the link. This is true for Least Significant Bits (LSB) where the most significant bit can be used to select a rule id and the least significant bits have to be sent on the link.
</t>
<t>
Several matching operators are defined:
<list style="symbols">
<t>equal: a field value in a packet matches with a field value in a rule if they are equal.</t>
<t>ignore: no check is done between a field value in a packet and a field value in the rule. The result is always true. </t>
<t>MSB(length): a field value of length T in a packet matches with a field value in a rule if the most significant "length" bits are equal. </t>
</list>
</t>

</section>

<section title = "Compression Decompression Functions (CDF)" anchor="chap-CDF">
<t>
The Compression Decompression Functions (CDF) describe the action taken during the compression and inversely the action taken by the decompressor to restore the original value.

<figure anchor="Fig-function"
title="Compression and Decompression Functions"><artwork><![CDATA[
/--------------------+-------------+--------------------------\
| Function           | Compression | Decompression            | 
|                    |             |                          | 
+--------------------+-------------+--------------------------+
|not-sent            |elided       |use value stored in ctxt  |
|value-sent          |send         |build from received value |
|LSB(length)         |send LSB     |ctxt value OR rcvd value  |
|compute-IPv6-length |elided       |compute IPv6 length       |
|compute-UDP-length  |elided       |compute UDP length        |
|compute-UDP-checksum|elided       |compute UDP checksum      |
|ESiid-DID           |elided       |build IID from L2 ES addr |
|LAiid-DID           |elided       |build IID from L2 LA addr |
\--------------------+-------------+--------------------------/
   
]]></artwork></figure>

<xref target="Fig-function"/> lists all the functions defined to compress and decompress 
a field. The first column gives the function's name. The second and third columns outlines the compression/decompression process.
</t>

<t>
As with 6LoWPAN, the compression process may produce some data, where fields that were not compressed (or were partially compressed) will be sent in the order  of the original packet. Information added by the compression phase must be aligned on byte boundaries, but each individual compression function may generate any size. 
</t>
<t>
<figure anchor="Fig--possible-function"
title="SCHC functions' example assignment for IPv6 and UDP"><artwork><![CDATA[
/--------------+-------------------+-----------------------------------\
| Field        |Comp Decomp Fct    | Behavior                          |         
+--------------+-------------------+-----------------------------------+
|IPv6 version  |not-sent           |The value is not sent, but each    |
|IPv6 DiffServ |                   |end agrees on a value, which can   | 
|IPv6 FL       |                   |be different from 0.               |
|IPv6 NH       |value-sent         |Depending on the matching operator,|
|              |                   |the entire field value is sent or  |
|              |                   |an adjustment to the context value |            
+--------------+-------------------+-----------------------------------+ 
|IPv6 Length   |compute-IPv6-length|Dedicated fct to reconstruct value |
+--------------+-------------------+-----------------------------------+
|IPv6 Hop Limit|not-sent+MO=ignore |The receiver takes the value stored|
|              |                   |in the context. It may be different|
|              |                   |from one originally sent, but in a |
|              |                   |star topology, there is no risk of | 
|              |                   |loops                              |
|              |not-sent+matching  |Receiver and sender agree on a     |
|              |                   |specific value.                    |
|              |value-sent         |Explicitly sent                    |
+--------------+-------------------+-----------------------------------+ 
|IPv6 ESPrefix |not-sent           |The 64 bit prefix is stored on     |
|IPv6 LAPrefix |                   |the context                        |
|              |value-sent         |Explicitly send 64 bits on the link|
+--------------+-------------------+-----------------------------------+
|IPv6 ESiid    |not-sent           |IID is not sent, but stored in the |
|IPv6 LAiid    |                   |context                            |
|              |ESiid-DID|LAiid-DID|IID is built from the ES/LA Dev. ID|
|              |value-sent         |IID is explicitly sent on the link.|
|              |                   |Size depends of the L2 technology  |
+--------------+-------------------+-----------------------------------+
|UDP ESport    |not-sent           |In the context                     |
|UDP LAport    |value-sent         |Send the 2 bytes of the port number|    
|              |LSB(length)        |or least significant bits if MSB   |
|              |                   |matching is specified in the       | 
|              |                   |matching operator.                 |   
+--------------+-------------------+-----------------------------------+ 
|UDP length    |compute-UDP-length |Dedicated fct to reconstruct value |
+--------------+-------------------+-----------------------------------+ 
|UDP Checksum  |compute-UDP-checksum|Dedicated fct to reconstruct value|
+--------------+-------------------+-----------------------------------+                 
]]></artwork></figure>

<xref target="Fig--possible-function"/> gives an example of function assignment to IPv6/UDP fields.
</t>

<section title="Compression Decompression Functions (CDF)">
<section title="not-sent">
<t>
The compressor do not sent the field value on the link. The decompressor restore the field value with the one stored in the matched rule. 
</t>
</section>

<section title="value-sent">
<t>
The compressor send the field value on the link, if the matching operator is "=". Otherwise the matching operator indicates the information that will be sent on the link. For a LSB operator only the Least Significant Bits are sent. 
</t>
</section>
<section title="LSB(length)">
<t>
The compressor sends the "length" Least Significant Bits. The decompressor combines with a OR operator the value received with the Target Value.
</t>
</section>
<section title="ESiid-DID, LAiid-DID">
<t>
These functions are used to process respectively the End System and the LA Device Identifier (DID).
The IID value is computed from device ID present in the Layer 2 header. The computation depends on the technology and the device ID  size. 
</t>
</section>
<section title="Compute-*">
<t>
These functions compute the field value based on received information. They are elided during the compression and reconstructed during the decompression. 
<list style="symbols">
<t>compute-ipv6-length: compute the IPv6 length field as described in <xref target="RFC2460"/>.</t>
<t>compute-udp-length: compute the IPv6 length field as described in <xref target="RFC0768"/>.</t>
<t>compute-udp-checksum: compute the IPv6 length field as described in <xref target="RFC0768"/>.</t>
</list> 
</t>
</section>
</section>
</section>

<section anchor="compressIPv6" title="Examples">
<t>
This section gives some scenarios of the compression mechanism for IPv6/UDP. 
The goal is to illustrate the SCHC behavior.
</t>

<section title="IPv6/UDP compression in a star topology">
<t>
The most common case will be a LPWA end-system embeds some applications running over 
CoAP. In this example, the first flow is for the device management based on CoAP using 
Link Local addresses and UDP ports 123 and 124.

The second flow will be a CoAP server for measurements done by the end-system (using ports 5683) and Global Addresses alpha::IID/64 to beta::1/64.


The last flow is for legacy applications using different ports numbers, the destination is gamma::1/64. 
</t>
<t>

<xref target="FigStack" /> presents the protocol stack for this end-system. IPv6 and UDP are represented with dotted lines since these protocols are compressed on the radio link.

<figure anchor="FigStack"
title="Simplified Protocol Stack for LP-WAN"><artwork><![CDATA[

 Managment    Data         
+----------+---------+---------+
|   CoAP   |  CoAP   | legacy  |
+----||----+---||----+---||----+
.   UDP    .  UDP    |   UDP   | 
................................
.   IPv6   .  IPv6   .  IPv6   .
+------------------------------+
|      6LPWA L2 technologies   |
+------------------------------+  
      End System or LPWA GW

]]></artwork></figure>


</t>
<t>
Note that in some LPWA technologies, only End Systems have a device ID . Therefore
it is necessary to define statically an IID for the Link Local address for the LPWA Compressor. 
</t>
<t>
<figure anchor="Fig-fields"
title="Context rules"><artwork><![CDATA[
  Rule 0
  +----------------+---------+--------+-------------++------+
  | Field          | Value   | Match  | Function    || Sent |
  +----------------+---------+----------------------++------+
  |IPv6 version    |6        | equal  | not-sent    ||      |     
  |IPv6 DiffServ   |0        | equal  | not-sent    ||      |
  |IPv6 Flow Label |0        | equal  | not-sent    ||      |
  |IPv6 Length     |         | ignore | comp-IPv6-l ||      |
  |IPv6 Next Header|17       | equal  | not-sent    ||      |
  |IPv6 Hop Limit  |255      | ignore | not-sent    ||      |
  |IPv6 ESprefix   |FE80::/64| equal  | not-sent    ||      |
  |IPv6 ESiid      |         | ignore | ESiid-DID   ||      |
  |IPv6 LCprefix   |FE80::/64| equal  | not-sent    ||      |
  |IPv6 LAiid      |::1      | equal  | not-sent    ||      |
  +================+=========+========+=============++======+
  |UDP ESport      |123      | equal  | not-sent    ||      |
  |UDP LAport      |124      | equal  | not-sent    ||      |
  |UDP Length      |         | ignore | comp-UDP-l  ||      |
  |UDP checksum    |         | ignore | comp-UDP-c  ||      |
  +================+=========+========+=============++======+
  
  Rule 1
  +----------------+---------+--------+-------------++------+
  | Field          | Value   | Match  | Function    || Sent |
  +----------------+---------+--------+-------------++------+
  |IPv6 version    |6        | equal  | not-sent    ||      |     
  |IPv6 DiffServ   |0        | equal  | not-sent    ||      |
  |IPv6 Flow Label |0        | equal  | not-sent    ||      |
  |IPv6 Length     |         | ignore | comp-IPv6-l ||      |
  |IPv6 Next Header|17       | equal  | not-sent    ||      |
  |IPv6 Hop Limit  |255      | ignore | not-sent    ||      |
  |IPv6 ESprefix   |alpha/64 | equal  | not-sent    ||      |
  |IPv6 ESiid      |         | ignore | ESiid-DID   ||      |
  |IPv6 LAprefix   |beta/64  | equal  | not-sent    ||      |
  |IPv6 LAiid      |::1000   | equal  | not-sent    ||      |
  +================+=========+========+=============++======+
  |UDP ESport      |5683     | equal  | not-sent    ||      |
  |UDP LAport      |5683     | equal  | not-sent    ||      |
  |UDP Length      |         | ignore | comp-UDP-l  ||      |
  |UDP checksum    |         | ignore | comp-UDP-c  ||      |
  +================+=========+========+=============++======+
  
  Rule 2
  +----------------+---------+--------+-------------++------+
  | Field          | Value   | Match  | Function    || Sent |
  +----------------+---------+--------+-------------++------+
  |IPv6 version    |6        | equal  | not-sent    ||      |     
  |IPv6 DiffServ   |0        | equal  | not-sent    ||      |
  |IPv6 Flow Label |0        | equal  | not-sent    ||      |
  |IPv6 Length     |         | ignore | comp-IPv6-l ||      |
  |IPv6 Next Header|17       | equal  | not-sent    ||      |
  |IPv6 Hop Limit  |255      | ignore | not-sent    ||      |
  |IPv6 ESprefix   |alpha/64 | equal  | not-sent    ||      |
  |IPv6 ESiid      |         | ignore | ESiid-DID   ||      |
  |IPv6 LAprefix   |gamma/64 | equal  | not-sent    ||      |
  |IPv6 LAiid      |::1000   | equal  | not-sent    ||      |
  +================+=========+========+=============++======+
  |UDP ESport      |8720     | MSB(12)| LSB(4)      || lsb  |
  |UDP LAport      |8720     | MSB(12)| LSB(4)      || lsb  |
  |UDP Length      |         | ignore | comp-UDP-l  ||      |
  |UDP checksum    |         | ignore | comp-UDP-c  ||      |
  +================+=========+========+=============++======+

 
]]></artwork></figure>
  
All the fields described in the three rules <xref target="Fig-fields"/> are present in the IPv6 and UDP headers.  The ESDevice-ID value is found in the L2 header.     
</t>
<t>
The second and third rules use global addresses. The way the ES learn the prefix is not in the scope of the document. One possible way is to use a management protocol to set up in both end rules the prefix used on the LPWA network.
</t>
<t>
The third rule compresses port numbers on 4 bits. This value is selected to maintain alignment on byte boundaries for the compressed header.
</t>
</section>
</section>

<section title="Acknowledgements">
<t>
Thanks to Dominique Barthel, Arunprabhu Kandasamy, Antony Markovski, Alexander Pelov, Juan Carlos Zuniga for useful design
consideration.
</t>
</section>
</middle>
<back>

    <references title="Normative References">

	  &rfc768;
      &rfc4944;
      &rfc4997;
      &rfc6282;
      &rfc2460;

	  &gapAna; 
  
    </references>


</back>

</rfc>
