rfc9363.original | rfc9363.txt | |||
---|---|---|---|---|
lpwan Working Group A. Minaburo | Internet Engineering Task Force (IETF) A. Minaburo | |||
Internet-Draft Acklio | Request for Comments: 9363 Acklio | |||
Intended status: Standards Track L. Toutain | Category: Standards Track L. Toutain | |||
Expires: 12 April 2023 Institut MINES TELECOM; IMT Atlantique | ISSN: 2070-1721 IMT Atlantique | |||
9 October 2022 | February 2023 | |||
Data Model for Static Context Header Compression (SCHC) | A YANG Data Model for Static Context Header Compression (SCHC) | |||
draft-ietf-lpwan-schc-yang-data-model-21 | ||||
Abstract | Abstract | |||
This document describes a YANG data model for the SCHC (Static | This document describes a YANG data model for the Static Context | |||
Context Header Compression) compression and fragmentation rules. | Header Compression (SCHC) compression and fragmentation Rules. | |||
This document formalizes the description of the rules for better | This document formalizes the description of the Rules for better | |||
interoperability between SCHC instances either to exchange a set of | interoperability between SCHC instances either to exchange a set of | |||
rules or to modify some rules parameters. | Rules or to modify the parameters of some Rules. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 12 April 2023. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9363. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 | 2. Requirements Language | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Terminology | |||
4. SCHC rules . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. SCHC Rules | |||
4.1. Compression Rules . . . . . . . . . . . . . . . . . . . . 5 | 4.1. Compression Rules | |||
4.2. Identifier generation . . . . . . . . . . . . . . . . . . 6 | 4.2. Identifier Generation | |||
4.3. Convention for Field Identifier . . . . . . . . . . . . . 7 | 4.3. Convention for Field Identifier | |||
4.4. Convention for Field length . . . . . . . . . . . . . . . 8 | 4.4. Convention for Field Length | |||
4.5. Convention for Field position . . . . . . . . . . . . . . 8 | 4.5. Convention for Field Position | |||
4.6. Convention for Direction Indicator . . . . . . . . . . . 8 | 4.6. Convention for Direction Indicator | |||
4.7. Convention for Target Value . . . . . . . . . . . . . . . 9 | 4.7. Convention for Target Value | |||
4.8. Convention for Matching Operator . . . . . . . . . . . . 9 | 4.8. Convention for Matching Operator | |||
4.8.1. Matching Operator arguments . . . . . . . . . . . . . 9 | 4.8.1. Matching Operator Arguments | |||
4.9. Convention for Compression Decompression Actions . . . . 9 | 4.9. Convention for Compression Decompression Actions | |||
4.9.1. Compression Decompression Action arguments . . . . . 9 | 4.9.1. Compression Decompression Action Arguments | |||
4.10. Fragmentation rule . . . . . . . . . . . . . . . . . . . 9 | 4.10. Fragmentation Rule | |||
4.10.1. Fragmentation mode . . . . . . . . . . . . . . . . . 10 | 4.10.1. Fragmentation Mode | |||
4.10.2. Fragmentation Header . . . . . . . . . . . . . . . . 10 | 4.10.2. Fragmentation Header | |||
4.10.3. Last fragment format . . . . . . . . . . . . . . . . 11 | 4.10.3. Last Fragment Format | |||
4.10.4. Acknowledgment behavior . . . . . . . . . . . . . . 11 | 4.10.4. Acknowledgment Behavior | |||
4.10.5. Timer values . . . . . . . . . . . . . . . . . . . . 12 | 4.10.5. Timer Values | |||
4.10.6. Fragmentation Parameter . . . . . . . . . . . . . . 12 | 4.10.6. Fragmentation Parameter | |||
4.10.7. Layer 2 parameters . . . . . . . . . . . . . . . . . 12 | 4.10.7. Layer 2 Parameters | |||
5. Rule definition . . . . . . . . . . . . . . . . . . . . . . . 13 | 5. Rule Definition | |||
5.1. Compression rule . . . . . . . . . . . . . . . . . . . . 13 | 5.1. Compression Rule | |||
5.2. Fragmentation rule . . . . . . . . . . . . . . . . . . . 14 | 5.2. Fragmentation Rule | |||
5.3. YANG Tree . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5.3. YANG Tree | |||
6. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 6. YANG Data Model | |||
7. Implementation Status . . . . . . . . . . . . . . . . . . . . 45 | 7. IANA Considerations | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | 7.1. URI Registration | |||
8.1. URI Registration . . . . . . . . . . . . . . . . . . . 46 | 7.2. YANG Module Name Registration | |||
8.2. YANG Module Name Registration . . . . . . . . . . . . . 46 | 8. Security Considerations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 47 | 9. References | |||
10. Annex A : Example . . . . . . . . . . . . . . . . . . . . . . 48 | 9.1. Normative References | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 51 | 9.2. Informative References | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 51 | Appendix A. Example | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 51 | Acknowledgments | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 53 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
1. Introduction | 1. Introduction | |||
SCHC is a compression and fragmentation mechanism for constrained | SCHC is a compression and fragmentation mechanism for constrained | |||
networks defined in [RFC8724]. It is based on a static context | networks defined in [RFC8724]. It is based on a static context | |||
shared by two entities at the boundary of the constrained network. | shared by two entities at the boundary of the constrained network. | |||
[RFC8724] provides an informal representation of the rules used | [RFC8724] provides an informal representation of the Rules used | |||
either for compression/decompression (or C/D) or fragmentation/ | either for compression/decompression (C/D) or fragmentation/ | |||
reassembly (or F/R). The goal of this document is to formalize the | reassembly (F/R). The goal of this document is to formalize the | |||
description of the rules to offer: | description of the Rules to offer: | |||
* the same definition on both ends, even if the internal | * the same definition on both ends, even if the internal | |||
representation is different; | representation is different, and | |||
* an update of the other end to set up some specific values (e.g. | * an update of the other end to set up some specific values (e.g., | |||
IPv6 prefix, destination address,...). | IPv6 prefix, destination address, etc.). | |||
[I-D.ietf-lpwan-architecture] illustrates the exchange of rules using | [LPWAN-ARCH] illustrates the exchange of Rules using the YANG data | |||
the YANG data model. | model. | |||
This document defines a YANG module [RFC7950] to represent both | This document defines a YANG data model [RFC7950] to represent both | |||
compression and fragmentation rules, which leads to common | compression and fragmentation Rules, which leads to common | |||
representation for values for all the rules elements. | representation for values for all the Rules' elements. | |||
2. Requirements Language | 2. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Terminology | 3. Terminology | |||
This section defines the terminology and acronyms used in this | This section defines the terminology and acronyms used in this | |||
document. It extends the terminology of [RFC8376]. | document. It extends the terminology of [RFC8376]. | |||
* App: LPWAN Application, as defined by [RFC8376]. An application | App: Low-Power WAN (LPWAN) Application, as defined by [RFC8376]. An | |||
sending/receiving packets to/from the Dev. | application sending/receiving packets to/from the Dev. | |||
* Bi: Bidirectional. Characterizes a Field Descriptor that applies | Bi: Bidirectional. Characterizes a Field Descriptor that applies to | |||
to headers of packets traveling in either direction (Up and Dw, | headers of packets traveling in either direction (Up and Dw; see | |||
see this glossary). | this glossary). | |||
* CDA: Compression/Decompression Action. Describes the pair of | CDA: Compression/Decompression Action. Describes the pair of | |||
actions that are performed at the compressor to compress a header | actions that are performed at the compressor to compress a header | |||
field and at the decompressor to recover the original value of the | field and at the decompressor to recover the original value of the | |||
header field. | header field. | |||
* Context: A set of Rules used to compress/decompress headers. | Context: A set of Rules used to compress/decompress headers. | |||
* Dev: Device, as defined by [RFC8376]. | Dev: Device, as defined by [RFC8376]. | |||
* DevIID: Device Interface Identifier. The IID that identifies the | DevIID: Device Interface Identifier. The IID that identifies the | |||
Dev interface. | Dev interface. | |||
* DI: Direction Indicator. This field tells which direction of | DI: Direction Indicator. This field tells which direction of packet | |||
packet travel (Up, Dw or Bi) a Field Description applies to. This | travel (Up, Dw, or Bi) a Field Descriptor applies to. This allows | |||
allows for asymmetric processing, using the same Rule. | for asymmetric processing, using the same Rule. | |||
* Dw: Downlink direction for compression/decompression, from SCHC C/ | Dw: Downlink direction for compression/decompression, from SCHC C/D | |||
D in the network to SCHC C/D in the Dev. | in the network to SCHC C/D in the Dev. | |||
* FID: Field Identifier. This identifies the protocol and field a | FID: Field Identifier or Field ID. This identifies the protocol and | |||
Field Description applies to. | field a Field Descriptor applies to. | |||
* FL: Field Length is the length of the original packet header | FL: Field Length. This is the length of the original packet header | |||
field. It is expressed as a number of bits for header fields of | field. It is expressed as a number of bits for header fields of | |||
fixed lengths or as a type (e.g., variable, token length, ...) for | fixed lengths or as a type (e.g., variable, token length, ...) for | |||
field lengths that are unknown at the time of Rule creation. The | Field Lengths that are unknown at the time of Rule creation. The | |||
length of a header field is defined in the corresponding protocol | length of a header field is defined in the corresponding protocol | |||
specification (such as IPv6 or UDP). | specification (such as IPv6 or UDP). | |||
* FP: when a Field is expected to appear multiple times in a header, | FP: Field Position. When a field is expected to appear multiple | |||
Field Position specifies the occurrence this Field Description | times in a header, the Field Position specifies the occurrence | |||
applies to (for example, first uri-path option, second uri-path, | this Field Descriptor applies to (for example, first Uri-Path | |||
etc. in a CoAP header), counting from 1. The value 0 is special | option, second Uri-Path, etc. in a Constrained Application | |||
and means "don't care", see [RFC8724] Section 7.2. | Protocol (CoAP) header), counting from 1. The value 0 is special | |||
and means "don't care" (see Section 7.2 of [RFC8724]). | ||||
* IID: Interface Identifier. See the IPv6 addressing architecture | IID: Interface Identifier. See the IPv6 addressing architecture | |||
[RFC7136]. | [RFC7136]. | |||
* L2 Word: this is the minimum subdivision of payload data that the | L2 Word: This is the minimum subdivision of payload data that the | |||
L2 will carry. In most L2 technologies, the L2 Word is an octet. | Layer 2 (L2) will carry. In most L2 technologies, the L2 Word is | |||
In bit-oriented radio technologies, the L2 Word might be a single | an octet. In bit-oriented radio technologies, the L2 Word might | |||
bit. The L2 Word size is assumed to be constant over time for | be a single bit. The L2 Word size is assumed to be constant over | |||
each device. | time for each device. | |||
* MO: Matching Operator. An operator used to match a value | MO: Matching Operator. An operator used to match a value contained | |||
contained in a header field with a value contained in a Rule. | in a header field with a value contained in a Rule. | |||
* Rule ID (Rule Identifier): An identifier for a Rule. SCHC C/D on | RuleID: Rule Identifier. An identifier for a Rule. SCHC C/D on | |||
both sides share the same Rule ID for a given packet. A set of | both sides share the same RuleID for a given packet. A set of | |||
Rule IDs are used to support SCHC F/R functionality. | RuleIDs are used to support SCHC F/R functionality. | |||
* TV: Target value. A value contained in a Rule that will be | TV: Target Value. A value contained in a Rule that will be matched | |||
matched with the value of a header field. | with the value of a header field. | |||
* Up: Uplink direction for compression/decompression, from the Dev | Up: Uplink direction for compression/decompression, from the Dev | |||
SCHC C/D to the network SCHC C/D. | SCHC C/D to the network SCHC C/D. | |||
4. SCHC rules | 4. SCHC Rules | |||
SCHC compression is generic, the main mechanism does not refer to a | SCHC compression is generic; the main mechanism does not refer to a | |||
specific protocol. Any header field is abstracted through an Field | specific protocol. Any header field is abstracted through a Field | |||
Identifier (FID), a position (FP), a direction (DI), and a value that | Identifier (FID), a position (FP), a direction (DI), and a value that | |||
can be a numerical value or a string. [RFC8724] and [RFC8824] | can be a numerical value or a string. [RFC8724] and [RFC8824] | |||
specify fields for IPv6 [RFC8200], UDP[RFC0768], CoAP [RFC7252] | specify fields for IPv6 [RFC8200], UDP [RFC0768], and CoAP [RFC7252], | |||
including options defined for no server response [RFC7967] and OSCORE | including options defined for no server response [RFC7967] and Object | |||
[RFC8613]. For the latter [RFC8824] splits this field into sub- | Security for Constrained RESTful Environments (OSCORE) [RFC8613]. | |||
fields. | For the latter, [RFC8824] splits this field into subfields. | |||
SCHC fragmentation requires a set of common parameters that are | SCHC fragmentation requires a set of common parameters that are | |||
included in a rule. These parameters are defined in [RFC8724]. | included in a Rule. These parameters are defined in [RFC8724]. | |||
The YANG data model enables the compression and the fragmentation | The YANG data model enables the compression and the fragmentation | |||
selection using the feature statement. | selection using the feature statement. | |||
4.1. Compression Rules | 4.1. Compression Rules | |||
[RFC8724] proposes an informal representation of the compression | [RFC8724] proposes an informal representation of the compression | |||
rule. A compression context for a device is composed of a set of | Rule. A compression context for a device is composed of a set of | |||
rules. Each rule contains information to describe a specific field | Rules. Each Rule contains information to describe a specific field | |||
in the header to be compressed. | in the header to be compressed. | |||
+-----------------------------------------------------------------+ | +-----------------------------------------------------------------+ | |||
| Rule N | | | Rule N | | |||
+-----------------------------------------------------------------+| | +-----------------------------------------------------------------+| | |||
| Rule i || | | Rule i || | |||
+-----------------------------------------------------------------+|| | +-----------------------------------------------------------------+|| | |||
| (FID) Rule 1 ||| | | (FID) Rule 1 ||| | |||
|+-------+--+--+--+------------+-----------------+---------------+||| | |+-------+--+--+--+------------+-----------------+---------------+||| | |||
||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||| | ||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||| | |||
skipping to change at page 6, line 25 ¶ | skipping to change at line 234 ¶ | |||
|+-------+--+--+--+------------+-----------------+---------------+||| | |+-------+--+--+--+------------+-----------------+---------------+||| | |||
||... |..|..|..| ... | ... | ... |||| | ||... |..|..|..| ... | ... | ... |||| | |||
|+-------+--+--+--+------------+-----------------+---------------+||/ | |+-------+--+--+--+------------+-----------------+---------------+||/ | |||
||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||| | ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||| | |||
|+-------+--+--+--+------------+-----------------+---------------+|/ | |+-------+--+--+--+------------+-----------------+---------------+|/ | |||
| | | | | | |||
\-----------------------------------------------------------------/ | \-----------------------------------------------------------------/ | |||
Figure 1: Compression Decompression Context | Figure 1: Compression Decompression Context | |||
4.2. Identifier generation | 4.2. Identifier Generation | |||
Identifiers used in the SCHC YANG data model are from the identityref | Identifiers used in the SCHC YANG data model are from the identityref | |||
statement to ensure global uniqueness and easy augmentation if | statement to ensure global uniqueness and easy augmentation if | |||
needed. The principle to define a new type based on a group of | needed. The principle to define a new type based on a group of | |||
identityref is the following: | identityref is the following: | |||
* define a main identity ending with the keyword base-type. | * Define a main identity ending with the keyword base-type. | |||
* derive all the identities used in the Data Model from this base | * Derive all the identities used in the data model from this base | |||
type. | type. | |||
* create a typedef from this base type. | * Create a typedef from this base type. | |||
The example (Figure 2) shows how an identityref is created for RCS | The example below (Figure 2) shows how an identityref is created for | |||
(Reassembly Check Sequence) algorithms used during SCHC | Reassembly Check Sequence (RCS) algorithms used during SCHC | |||
fragmentation. | fragmentation. | |||
identity rcs-algorithm-base-type { | identity rcs-algorithm-base-type { | |||
description | description | |||
"Identify which algorithm is used to compute RCS. | "Identify which algorithm is used to compute RCS. | |||
The algorithm also defines the size of the RCS field."; | The algorithm also defines the size of the RCS field."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
identity rcs-crc32 { | identity rcs-crc32 { | |||
base rcs-algorithm-base-type; | base rcs-algorithm-base-type; | |||
description | description | |||
"CRC 32 defined as default RCS in RFC8724. This RCS is | "CRC32 defined as default RCS in RFC 8724. This RCS is | |||
4 bytes long."; | 4 bytes long."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef rcs-algorithm-type { | typedef rcs-algorithm-type { | |||
type identityref { | type identityref { | |||
base rcs-algorithm-base-type; | base rcs-algorithm-base-type; | |||
} | } | |||
description | description | |||
"Define the type for RCS algorithm in rules."; | "Define the type for RCS algorithm in Rules."; | |||
} | } | |||
Figure 2: Principle to define a type based on identityref. | Figure 2: Principle to Define a Type Based on identityref | |||
4.3. Convention for Field Identifier | 4.3. Convention for Field Identifier | |||
In the process of compression, the headers of the original packet are | 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 | first parsed to create a list of fields. This list of fields is | |||
matched against the rules to find the appropriate rule and apply | matched against the Rules to find the appropriate Rule and apply | |||
compression. [RFC8724] does not state how the field ID value is | compression. [RFC8724] does not state how the Field ID value is | |||
constructed. In examples, identification is done through a string | constructed. In examples, identification is done through a string | |||
indexed by the protocol name (e.g. IPv6.version, CoAP.version,...). | indexed by the protocol name (e.g., IPv6.version, CoAP.version, | |||
etc.). | ||||
The current YANG data model includes fields definitions found in | The current YANG data model includes field definitions found in | |||
[RFC8724], [RFC8824]. | [RFC8724] and [RFC8824]. | |||
Using the YANG data model, each field MUST be identified through a | Using the YANG data model, each field MUST be identified through a | |||
global YANG identityref. | global YANG identityref. | |||
A YANG field ID for the protocol is always derived from the fid-base- | ||||
type. Then an identity for each protocol is specified using the | A YANG Field ID for the protocol is always derived from the fid-base- | |||
type. Then, an identity for each protocol is specified using the | ||||
naming convention fid-<<protocol name>>-base-type. All possible | naming convention fid-<<protocol name>>-base-type. All possible | |||
fields for this protocol MUST derive from the protocol identity. The | fields for this protocol MUST derive from the protocol identity. The | |||
naming convention is "fid-" followed by the protocol name and the | naming convention is "fid-" followed by the protocol name and the | |||
field name. If a field has to be divided into sub-fields, the field | field name. If a field has to be divided into subfields, the field | |||
identity serves as a base. | identity serves as a base. | |||
The full field-id definition is found in Section 6. A type is | The full field-id definition is found in Section 6. A type is | |||
defined for IPv6 protocol, and each field is based on it. Note that | defined for the IPv6 protocol, and each field is based on it. Note | |||
the DiffServ bits derive from the Traffic Class identity. | that the Diffserv bits derive from the Traffic Class identity. | |||
4.4. Convention for Field length | 4.4. Convention for Field Length | |||
Field length is either an integer giving the size of a field in bits | The Field Length is either an integer giving the size of a field in | |||
or a specific function. [RFC8724] defines the "var" function which | bits or a specific function. [RFC8724] defines the "var" function, | |||
allows variable length fields (whose length is expressed in bytes) | which allows variable-length fields (whose length is expressed in | |||
and [RFC8824] defines the "tkl" function for managing the CoAP Token | bytes), and [RFC8824] defines the "tkl" function for managing the | |||
length field. | CoAP Token Length field. | |||
The naming convention is "fl-" followed by the function name. | The naming convention is "fl-" followed by the function name. | |||
The field length function can be defined as an identityref as | The Field Length function can be defined as an identityref, as | |||
described in Section 6. Therefore, the type for field length is a | described in Section 6. Therefore, the type for the Field Length is | |||
union between an integer giving the size of the length in bits and | a union between an integer giving the size of the length in bits and | |||
the identityref. | the identityref. | |||
4.5. Convention for Field position | 4.5. Convention for Field Position | |||
Field position is a positive integer which gives the occurrence times | The Field Position is a positive integer that gives the occurrence | |||
of a specific field from the header start. The default value is 1, | times of a specific field from the header start. The default value | |||
and incremented at each repetition. Value 0 indicates that the | is 1 and is incremented at each repetition. Value 0 indicates that | |||
position is not important and is not considered during the rule | the position is not important and is not considered during the Rule | |||
selection process. | selection process. | |||
Field position is a positive integer. The type is uint8. | The Field Position is a positive integer. The type is uint8. | |||
4.6. Convention for Direction Indicator | 4.6. Convention for Direction Indicator | |||
The Direction Indicator (di) is used to tell if a field appears in | The Direction Indicator is used to tell if a field appears in both | |||
both directions (Bi) or only uplink (Up) or Downlink (Dw). The | directions (Bi) or only uplink (Up) or Downlink (Dw). The naming | |||
naming convention is "di" followed by the Direction Indicator name. | convention is "di" followed by the Direction Indicator name. | |||
The type is "di-type". | The type is "di-type". | |||
4.7. Convention for Target Value | 4.7. Convention for Target Value | |||
The Target Value is a list of binary sequences of any length, aligned | The Target Value is a list of binary sequences of any length, aligned | |||
to the left. In the rule, the structure will be used as a list, with | to the left. In the Rule, the structure will be used as a list, with | |||
index as a key. The highest index value is used to compute the size | the index as a key. The highest index value is used to compute the | |||
of the index sent in residue for the match-mapping CDA (Compression | size of the index sent in residue for the match-mapping Compression | |||
Decompression Action). The index can specify several values: | Decompression Action (CDA). The index can specify several values: | |||
* For Equal and MSB, Target Value contains a single element. | * For equal and most significant bits (MSBs), the Target Value | |||
Therefore, the index is set to 0. | contains a single element. Therefore, the index is set to 0. | |||
* For match-mapping, Target Value can contain several elements. | * For match-mapping, the Target Value can contain several elements. | |||
Index values MUST start from 0 and MUST be contiguous. | Index values MUST start from 0 and MUST be contiguous. | |||
If the header field contains text, the binary sequence uses the same | If the header field contains text, the binary sequence uses the same | |||
encoding. | encoding. | |||
4.8. Convention for Matching Operator | 4.8. Convention for Matching Operator | |||
Matching Operator (MO) is a function applied between a field value | The Matching Operator (MO) is a function applied between a field | |||
provided by the parsed header and the target value. [RFC8724] | value provided by the parsed header and the Target Value. [RFC8724] | |||
defines 4 MO. | defines 4 MOs. | |||
The naming convention is "mo-" followed by the MO name. | The naming convention is "mo-" followed by the MO name. | |||
The type is "mo-type" | The type is "mo-type". | |||
4.8.1. Matching Operator arguments | 4.8.1. Matching Operator Arguments | |||
They are viewed as a list, built with a tv-struct (see Section 4.7). | They are viewed as a list, built with a tv-struct (see Section 4.7). | |||
4.9. Convention for Compression Decompression Actions | 4.9. Convention for Compression Decompression Actions | |||
Compression Decompression Action (CDA) identifies the function to use | The Compression Decompression Action (CDA) identifies the function to | |||
for compression or decompression. [RFC8724] defines 6 CDA. | use for compression or decompression. [RFC8724] defines 7 CDAs. | |||
The naming convention is "cda-" followed by the CDA name. | The naming convention is "cda-" followed by the CDA name. | |||
4.9.1. Compression Decompression Action arguments | 4.9.1. Compression Decompression Action Arguments | |||
Currently no CDA requires arguments, but in the future some CDA may | Currently no CDA requires arguments, but some CDAs may require one or | |||
require one or several arguments. They are viewed as a list, of | several arguments in the future. They are viewed as a list of | |||
target-value type. | target-value type. | |||
4.10. Fragmentation rule | 4.10. Fragmentation Rule | |||
Fragmentation is optional in the data model and depends on the | Fragmentation is optional in the data model and depends on the | |||
presence of the "fragmentation" feature. | presence of the "fragmentation" feature. | |||
Most of the fragmentation parameters are listed in Annex D of | Most of the fragmentation parameters are listed in Appendix D of | |||
[RFC8724]. | [RFC8724]. | |||
Since fragmentation rules work for a specific direction, they MUST | Since fragmentation Rules work for a specific direction, they MUST | |||
contain a mandatory direction indicator. The type is the same as the | contain a mandatory Direction Indicator. The type is the same as the | |||
one used in compression entries, but bidirectional MUST NOT be used. | one used in compression entries, but bidirectional MUST NOT be used. | |||
4.10.1. Fragmentation mode | 4.10.1. Fragmentation Mode | |||
[RFC8724] defines 3 fragmentation modes: | [RFC8724] defines 3 fragmentation modes: | |||
* No Ack: this mode is unidirectional, no acknowledgment is sent | * No ACK: This mode is unidirectional; no acknowledgment is sent | |||
back. | back. | |||
* Ack Always: each fragmentation window must be explicitly | * ACK Always: Each fragmentation window must be explicitly | |||
acknowledged before going to the next. | acknowledged before going to the next. | |||
* Ack on Error: A window is acknowledged only when the receiver | * ACK on Error: A window is acknowledged only when the receiver | |||
detects some missing fragments. | detects some missing fragments. | |||
The type is "fragmentation-mode-type". The naming convention is | The type is "fragmentation-mode-type". The naming convention is | |||
"fragmentation-mode-" followed by the fragmentation mode name. | "fragmentation-mode-" followed by the fragmentation mode name. | |||
4.10.2. Fragmentation Header | 4.10.2. Fragmentation Header | |||
A data fragment header, starting with the rule ID, can be sent in the | A data fragment header, starting with the RuleID, can be sent in the | |||
fragmentation direction. [RFC8724] indicates that the SCHC header | fragmentation direction. [RFC8724] indicates that the SCHC header | |||
may be composed of (cf. Figure 3): | may be composed of the following (cf. Figure 3): | |||
* a Datagram Tag (Dtag) identifying the datagram being fragmented if | * a Datagram Tag (DTag) identifying the datagram being fragmented if | |||
the fragmentation applies concurrently on several datagrams. This | the fragmentation applies concurrently on several datagrams. This | |||
field is optional and its length is defined by the rule. | field is optional, and its length is defined by the Rule. | |||
* a Window (W) used in Ack-Always and Ack-on-Error modes. In Ack- | * a Window (W) used in ACK-Always and ACK-on-Error modes. In ACK- | |||
Always, its size is 1. In Ack-on-Error, it depends on the rule. | Always, its size is 1. In ACK-on-Error, it depends on the Rule. | |||
This field is not needed in No-Ack mode. | This field is not needed in No-ACK mode. | |||
* a Fragment Compressed Number (FCN) indicating the fragment/tile | * a Fragment Compressed Number (FCN) indicating the fragment/tile | |||
position within the window. This field is mandatory on all modes | position within the window. This field is mandatory on all modes | |||
defined in [RFC8724], its size is defined by the rule. | defined in [RFC8724], and its size is defined by the Rule. | |||
|-- SCHC Fragment Header ----| | |-- SCHC Fragment Header ----| | |||
|-- T --|-M-|-- N --| | |-- T --|-M-|-- N --| | |||
+-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~ | |||
| RuleID | DTag | W | FCN | Fragment Payload | padding (as needed) | | RuleID | DTag | W | FCN | Fragment Payload | padding (as needed) | |||
+-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~ | |||
Figure 3: Data fragment header from RFC8724 | Figure 3: Data Fragment Header from RFC 8724 | |||
4.10.3. Last fragment format | 4.10.3. Last Fragment Format | |||
The last fragment of a datagram is sent with an RCS (Reassembly Check | The last fragment of a datagram is sent with a Reassembly Check | |||
Sequence) field to detect residual transmission error and possible | Sequence (RCS) field to detect residual transmission errors and | |||
losses in the last window. [RFC8724] defines a single algorithm | possible losses in the last window. [RFC8724] defines a single | |||
based on Ethernet CRC computation. | algorithm based on Ethernet CRC computation. | |||
The naming convention is "rcs-" followed by the algorithm name. | The naming convention is "rcs-" followed by the algorithm name. | |||
For Ack-on-Error mode, the All-1 fragment may just contain the RCS or | For ACK-on-Error mode, the All-1 fragment may just contain the RCS or | |||
can include a tile. The parameters define the behavior: | can include a tile. The following parameters define the behavior: | |||
* all-1-data-no: the last fragment contains no data, just the RCS | * all-1-data-no: The last fragment contains no data, just the RCS. | |||
* all-1-data-yes: the last fragment includes a single tile and the | * all-1-data-yes: The last fragment includes a single tile and the | |||
RCS | RCS. | |||
* all-1-data-sender-choice: the last fragment may or may not contain | * all-1-data-sender-choice: The last fragment may or may not contain | |||
a single tile. The receiver can detect if a tile is present. | a single tile. The receiver can detect if a tile is present. | |||
The naming convention is "all-1-data-" followed by the behavior | The naming convention is "all-1-data-" followed by the behavior | |||
identifier. | identifier. | |||
4.10.4. Acknowledgment behavior | 4.10.4. Acknowledgment Behavior | |||
The acknowledgment fragment header goes in the opposite direction of | The acknowledgment fragment header goes in the opposite direction of | |||
data. [RFC8724] defines the header, composed of (see Figure 4): | data. [RFC8724] defines the header, which is composed of the | |||
following (see Figure 4): | ||||
* a Dtag (if present). | * a DTag (if present). | |||
* a mandatory window as in the data fragment. | * a mandatory window, as in the data fragment. | |||
* a C bit giving the status of RCS validation. In case of failure, | * a C bit giving the status of RCS validation. In case of failure, | |||
a bitmap follows, indicating the received tile. | a bitmap follows, indicating the received tile. | |||
|--- SCHC ACK Header ----| | |--- SCHC ACK Header ----| | |||
|-- T --|-M-| 1 | | |-- T --|-M-| 1 | | |||
+-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | |||
| RuleID | DTag | W |C=1| padding as needed (success) | | RuleID | DTag | W |C=1| padding as needed (success) | |||
+-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~ | |||
+-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | |||
| RuleID | DTag | W |C=0|Compressed Bitmap| pad. as needed (failure) | | RuleID | DTag | W |C=0|Compressed Bitmap| pad. as needed (failure) | |||
+-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | +-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~ | |||
Figure 4: Acknowledgment fragment header for RFC8724 | Figure 4: Acknowledgment Fragment Header for RFC 8724 | |||
For Ack-on-Error, SCHC defines when an acknowledgment can be sent. | For ACK-on-Error, SCHC defines when an acknowledgment can be sent. | |||
This can be at any time defined by the layer 2, at the end of a | This can be at any time defined by the Layer 2, at the end of a | |||
window (FCN all-0) or as a response to receiving the last fragment | window (FCN all-0), or as a response to receiving the last fragment | |||
(FCN all-1). The naming convention is "ack-behavior" followed by the | (FCN all-1). The naming convention is "ack-behavior" followed by the | |||
algorithm name. | algorithm name. | |||
4.10.5. Timer values | 4.10.5. Timer Values | |||
The state machine requires some common values to handle fragmentation | The state machine requires some common values to handle fragmentation | |||
correctly. | correctly. | |||
* retransmission-timer gives the duration before sending an ack | * The Retransmission Timer gives the duration before sending an ACK | |||
request (cf. section 8.2.2.4. of [RFC8724]). If specified, value | request (cf. Section 8.2.2.4 of [RFC8724]). If specified, the | |||
MUST be strictly positive. | value MUST be strictly positive. | |||
* inactivity-timer gives the duration before aborting a | * The Inactivity Timer gives the duration before aborting a | |||
fragmentation session (cf. section 8.2.2.4. of [RFC8724]). The | fragmentation session (cf. Section 8.2.2.4 of [RFC8724]). The | |||
value 0 explicitly indicates that this timer is disabled. | value 0 explicitly indicates that this timer is disabled. | |||
[RFC8724] do not specify any range for these timers. [RFC9011] | [RFC8724] does not specify any range for these timers. [RFC9011] | |||
recommends a duration of 12 hours. In fact, the value range should | recommends a duration of 12 hours. In fact, the value range should | |||
be between milliseconds for real time systems to several days. To | be between milliseconds for real-time systems to several days for | |||
allow a large range of applications, two parameters must be | worse-than-best-effort systems. To allow a large range of | |||
specified: | applications, two parameters must be specified: | |||
* the duration of a tick. It is computed by this formula 2^tick- | * the duration of a tick. It is computed by this formula: 2^(tick- | |||
duration/10^6. When tick-duration is set to 0, the unit is the | duration)/10^6. When tick-duration is set to 0, the unit is the | |||
microsecond. The default value of 20 leads to a unit of 1.048575 | microsecond. The default value of 20 leads to a unit of 1.048575 | |||
second. A value of 32 leads to a tick duration of about 1 hour 11 | seconds. A value of 32 leads to a tick-duration of about 1 hour | |||
minutes. | 11 minutes. | |||
* the number of ticks in the predefined unit. With the default | * the number of ticks in the predefined unit. With the default | |||
tick-duration value of 20, the timers can cover a range between | tick-duration value of 20, the timers can cover a range between | |||
1.0 sec and 19 hours covering [RFC9011] recommendation. | 1.0 second and 19 hours, as recommended in [RFC9011]. | |||
4.10.6. Fragmentation Parameter | 4.10.6. Fragmentation Parameter | |||
The SCHC fragmentation protocol specifies the number of attempts | The SCHC fragmentation protocol specifies the number of attempts | |||
before aborting through the parameter: | before aborting through the parameter: | |||
* max-ack-requests (cf. section 8.2.2.4. of [RFC8724]). | * max-ack-requests (cf. Section 8.2.2.4 of [RFC8724]) | |||
4.10.7. Layer 2 parameters | 4.10.7. Layer 2 Parameters | |||
The data model includes two parameters needed for fragmentation: | The data model includes two parameters needed for fragmentation: | |||
* l2-word-size: [RFC8724] base fragmentation, in bits, on a layer 2 | * l2-word-size: [RFC8724] base fragmentation, in bits, on a Layer 2 | |||
word which can be of any length. The default value is 8 and | Word that can be of any length. The default value is 8 and | |||
correspond to the default value for byte aligned layer 2. A value | corresponds to the default value for the byte-aligned Layer 2. A | |||
of 1 will indicate that there is no alignment and no need for | value of 1 will indicate that there is no alignment and no need | |||
padding. | for padding. | |||
* maximum-packet-size: defines the maximum size of an uncompressed | * maximum-packet-size: defines the maximum size of an uncompressed | |||
datagram. By default, the value is set to 1280 bytes. | datagram. By default, the value is set to 1280 bytes. | |||
They are defined as unsigned integers, see Section 6. | They are defined as unsigned integers; see Section 6. | |||
5. Rule definition | 5. Rule Definition | |||
A rule is identified by a unique rule identifier (rule ID) comprising | A Rule is identified by a unique Rule Identifier (RuleID) comprising | |||
both a Rule ID value and a Rule ID length. The YANG grouping rule- | both a RuleID value and a RuleID length. The YANG grouping rule-id- | |||
id-type defines the structure used to represent a rule ID. A length | type defines the structure used to represent a RuleID. A length of 0 | |||
of 0 is allowed to represent an implicit rule. | is allowed to represent an implicit Rule. | |||
Three natures of rules are defined in [RFC8724]: | Three natures of Rules are defined in [RFC8724]: | |||
* Compression: a compression rule is associated with the rule ID. | * Compression: A compression Rule is associated with the RuleID. | |||
* No compression: this identifies the default rule used to send a | * No-compression: This identifies the default Rule used to send a | |||
packet integrally when no compression rule was found (see | packet integrally when no-compression Rule was found (see | |||
[RFC8724] section 6). | Section 6 of [RFC8724]). | |||
* Fragmentation: fragmentation parameters are associated with the | * Fragmentation: Fragmentation parameters are associated with the | |||
rule ID. Fragmentation is optional and feature "fragmentation" | RuleID. Fragmentation is optional, and the feature | |||
should be set. | "fragmentation" should be set. | |||
The YANG data model introduces respectively these three identities : | The YANG data model respectively introduces these three identities : | |||
* nature-compression | * nature-compression | |||
* nature-no-compression | * nature-no-compression | |||
* nature-fragmentation | * nature-fragmentation | |||
The naming convention is "nature-" followed by the nature identifier. | The naming convention is "nature-" followed by the nature identifier. | |||
To access a specific rule, the rule ID length and value are used as a | To access a specific Rule, the RuleID length and value are used as a | |||
key. The rule is either a compression or a fragmentation rule. | key. The Rule is either a compression or a fragmentation Rule. | |||
5.1. Compression rule | 5.1. Compression Rule | |||
A compression rule is composed of entries describing its processing. | A compression Rule is composed of entries describing its processing. | |||
An entry contains all the information defined in Figure 1 with the | An entry contains all the information defined in Figure 1 with the | |||
types defined above. | types defined above. | |||
The compression rule described Figure 1 is defined by compression- | The compression Rule described Figure 1 is defined by compression- | |||
content. It defines a list of compression-rule-entry, indexed by | content. It defines a list of compression-rule-entry, indexed by | |||
their field id, position and direction. The compression-rule-entry | their Field ID, position, and direction. The compression-rule-entry | |||
element represent a line of the table Figure 1. Their type reflects | element represents a line in Figure 1. Their type reflects the | |||
the identifier types defined in Section 4.1 | identifier types defined in Section 4.1. | |||
Some checks are performed on the values: | Some checks are performed on the values: | |||
* target value MUST be present for MO different from ignore. | * When MO is ignore, no Target Value is needed; for other MOs, there | |||
MUST be a Target Value present. | ||||
* when MSB MO is specified, the matching-operator-value must be | * When MSB MO is specified, the matching-operator-value must be | |||
present | present. | |||
5.2. Fragmentation rule | 5.2. Fragmentation Rule | |||
A Fragmentation rule is composed of entries describing the protocol | A fragmentation Rule is composed of entries describing the protocol | |||
behavior. Some on them are numerical entries, others are identifiers | behavior. Some on them are numerical entries, others are identifiers | |||
defined in Section 4.10. | defined in Section 4.10. | |||
5.3. YANG Tree | 5.3. YANG Tree | |||
The YANG data model described in this document conforms to the | The YANG data model described in this document conforms to the | |||
Network Management Datastore Architecture defined in [RFC8342]. | Network Management Datastore Architecture defined in [RFC8342]. | |||
module: ietf-schc | module: ietf-schc | |||
+--rw schc | +--rw schc | |||
skipping to change at page 15, line 32 ¶ | skipping to change at line 660 ¶ | |||
| +--rw value? binary | | +--rw value? binary | |||
+--rw matching-operator schc:mo-type | +--rw matching-operator schc:mo-type | |||
+--rw matching-operator-value* [index] | +--rw matching-operator-value* [index] | |||
| +--rw index uint16 | | +--rw index uint16 | |||
| +--rw value? binary | | +--rw value? binary | |||
+--rw comp-decomp-action schc:cda-type | +--rw comp-decomp-action schc:cda-type | |||
+--rw comp-decomp-action-value* [index] | +--rw comp-decomp-action-value* [index] | |||
+--rw index uint16 | +--rw index uint16 | |||
+--rw value? binary | +--rw value? binary | |||
Figure 5: Overview of SCHC data model | Figure 5: Overview of the SCHC Data Model | |||
6. YANG Module | 6. YANG Data Model | |||
<CODE BEGINS> file "ietf-schc@2022-10-09.yang" | <CODE BEGINS> file "ietf-schc@2023-01-28.yang" | |||
module ietf-schc { | module ietf-schc { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-schc"; | namespace "urn:ietf:params:xml:ns:yang:ietf-schc"; | |||
prefix schc; | prefix schc; | |||
organization | organization | |||
"IETF IPv6 over Low Power Wide-Area Networks (lpwan) working | "IETF IPv6 over Low Power Wide-Area Networks (lpwan) Working | |||
group"; | Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/lpwan/about/> | "WG Web: <https://datatracker.ietf.org/wg/lpwan/about/> | |||
WG List: <mailto:lp-wan@ietf.org> | WG List: <mailto:lp-wan@ietf.org> | |||
Editor: Laurent Toutain | Editor: Laurent Toutain | |||
<mailto:laurent.toutain@imt-atlantique.fr> | <mailto:laurent.toutain@imt-atlantique.fr> | |||
Editor: Ana Minaburo | Editor: Ana Minaburo | |||
<mailto:ana@ackl.io>"; | <mailto:ana@ackl.io>"; | |||
description | description | |||
" | "Copyright (c) 2023 IETF Trust and the persons identified as | |||
Copyright (c) 2022 IETF Trust and the persons identified as | ||||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 9363 | ||||
This version of this YANG module is part of RFC XXXX | (https://www.rfc-editor.org/info/rfc9363); see the RFC itself | |||
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | ||||
for full legal notices. | for full legal notices. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
*************************************************************** | *************************************************************** | |||
Generic data model for the Static Context Header Compression | ||||
Rule for SCHC, based on RFCs 8724 and 8824. Including | ||||
compression, no-compression, and fragmentation Rules. | ||||
Generic Data model for Static Context Header Compression Rule | This module is a YANG data model for SCHC Rules (RFCs 8724 and | |||
for SCHC, based on RFC 8724 and RFC8824. Include compression, | 8824). RFC 8724 describes compression Rules in an abstract | |||
no compression and fragmentation rules. | ||||
This module is a YANG model for SCHC rules (RFC 8724 and | ||||
RFC8824). RFC 8724 describes compression rules in a abstract | ||||
way through a table. | way through a table. | |||
|-----------------------------------------------------------------| | |-----------------------------------------------------------------| | |||
| (FID) Rule 1 | | | (FID) Rule 1 | | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | ||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 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||... |..|..|..| ... | ... | ... || | ||... |..|..|..| ... | ... | ... || | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | |||
skipping to change at page 16, line 49 ¶ | skipping to change at line 717 ¶ | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | ||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 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||... |..|..|..| ... | ... | ... || | ||... |..|..|..| ... | ... | ... || | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|| | |||
|+-------+--+--+--+------------+-----------------+---------------+| | |+-------+--+--+--+------------+-----------------+---------------+| | |||
|-----------------------------------------------------------------| | |-----------------------------------------------------------------| | |||
This module specifies a global data model that can be used for | This module specifies a global data model that can be used for | |||
rule exchanges or modification. It specifies both the data model | Rule exchanges or modification. It specifies both the data | |||
format and the global identifiers used to describe some | model format and the global identifiers used to describe some | |||
operations in fields. | operations in fields. | |||
This data model applies to both compression and fragmentation."; | This data model applies to both compression and fragmentation."; | |||
revision 2022-10-09 { | revision 2023-01-28 { | |||
description | description | |||
"Initial version from RFC XXXX."; | "Initial version from RFC 9363."; | |||
reference | reference | |||
"RFC XXX: Data Model for Static Context Header Compression | "RFC 9363 A YANG Data Model for Static Context Header | |||
(SCHC)"; | Compression (SCHC)"; | |||
} | } | |||
feature compression { | feature compression { | |||
description | description | |||
"SCHC compression capabilities are taken into account."; | "SCHC compression capabilities are taken into account."; | |||
} | } | |||
feature fragmentation { | feature fragmentation { | |||
description | description | |||
"SCHC fragmentation capabilities are taken into account."; | "SCHC fragmentation capabilities are taken into account."; | |||
skipping to change at page 18, line 14 ¶ | skipping to change at line 778 ¶ | |||
base fid-ipv6-base-type; | base fid-ipv6-base-type; | |||
description | description | |||
"IPv6 Traffic Class field."; | "IPv6 Traffic Class field."; | |||
reference | reference | |||
"RFC 8200 Internet Protocol, Version 6 (IPv6) Specification"; | "RFC 8200 Internet Protocol, Version 6 (IPv6) Specification"; | |||
} | } | |||
identity fid-ipv6-trafficclass-ds { | identity fid-ipv6-trafficclass-ds { | |||
base fid-ipv6-trafficclass; | base fid-ipv6-trafficclass; | |||
description | description | |||
"IPv6 Traffic Class field: DiffServ field."; | "IPv6 Traffic Class field: Diffserv field."; | |||
reference | reference | |||
"RFC 8200 Internet Protocol, Version 6 (IPv6) Specification, | "RFC 8200 Internet Protocol, Version 6 (IPv6) Specification, | |||
RFC 3168 The Addition of Explicit Congestion Notification | RFC 3168 The Addition of Explicit Congestion Notification | |||
(ECN) to IP"; | (ECN) to IP"; | |||
} | } | |||
identity fid-ipv6-trafficclass-ecn { | identity fid-ipv6-trafficclass-ecn { | |||
base fid-ipv6-trafficclass; | base fid-ipv6-trafficclass; | |||
description | description | |||
"IPv6 Traffic Class field: ECN field."; | "IPv6 Traffic Class field: ECN field."; | |||
skipping to change at page 22, line 25 ¶ | skipping to change at line 981 ¶ | |||
} | } | |||
identity fid-coap-token { | identity fid-coap-token { | |||
base fid-coap-base-type; | base fid-coap-base-type; | |||
description | description | |||
"CoAP token."; | "CoAP token."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-if-match { | identity fid-coap-option { | |||
base fid-coap-base-type; | base fid-coap-base-type; | |||
description | description | |||
"Generic CoAP option."; | ||||
reference | ||||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | ||||
} | ||||
identity fid-coap-option-if-match { | ||||
base fid-coap-option; | ||||
description | ||||
"CoAP option If-Match."; | "CoAP option If-Match."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-uri-host { | identity fid-coap-option-uri-host { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option URI-Host."; | "CoAP option Uri-Host."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-etag { | identity fid-coap-option-etag { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Etag."; | "CoAP option ETag."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-if-none-match { | identity fid-coap-option-if-none-match { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option if-none-match."; | "CoAP option if-none-match."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-observe { | identity fid-coap-option-observe { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Observe."; | "CoAP option Observe."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-uri-port { | identity fid-coap-option-uri-port { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Uri-Port."; | "CoAP option Uri-Port."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-location-path { | identity fid-coap-option-location-path { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Location-Path."; | "CoAP option Location-Path."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-uri-path { | identity fid-coap-option-uri-path { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Uri-Path."; | "CoAP option Uri-Path."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-content-format { | identity fid-coap-option-content-format { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Content Format."; | "CoAP option Content Format."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-max-age { | identity fid-coap-option-max-age { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Max-Age."; | "CoAP option Max-Age."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-uri-query { | identity fid-coap-option-uri-query { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Uri-Query."; | "CoAP option Uri-Query."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-accept { | identity fid-coap-option-accept { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Accept."; | "CoAP option Accept."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-location-query { | identity fid-coap-option-location-query { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Location-Query."; | "CoAP option Location-Query."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-block2 { | identity fid-coap-option-block2 { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Block2."; | "CoAP option Block2."; | |||
reference | reference | |||
"RFC 7959 Block-Wise Transfers in the Constrained | "RFC 7959 Block-Wise Transfers in the Constrained | |||
Application Protocol (CoAP)"; | Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-block1 { | identity fid-coap-option-block1 { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Block1."; | "CoAP option Block1."; | |||
reference | reference | |||
"RFC 7959 Block-Wise Transfers in the Constrained | "RFC 7959 Block-Wise Transfers in the Constrained | |||
Application Protocol (CoAP)"; | Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-size2 { | identity fid-coap-option-size2 { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option size2."; | "CoAP option Size2."; | |||
reference | reference | |||
"RFC 7959 Block-Wise Transfers in the Constrained | "RFC 7959 Block-Wise Transfers in the Constrained | |||
Application Protocol (CoAP)"; | Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-proxy-uri { | identity fid-coap-option-proxy-uri { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Proxy-Uri."; | "CoAP option Proxy-Uri."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-proxy-scheme { | identity fid-coap-option-proxy-scheme { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Proxy-scheme."; | "CoAP option Proxy-Scheme."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-size1 { | identity fid-coap-option-size1 { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option Size1."; | "CoAP option Size1."; | |||
reference | reference | |||
"RFC 7252 The Constrained Application Protocol (CoAP)"; | "RFC 7252 The Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-no-response { | identity fid-coap-option-no-response { | |||
base fid-coap-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option No response."; | "CoAP option No response."; | |||
reference | reference | |||
"RFC 7967 Constrained Application Protocol (CoAP) | "RFC 7967 Constrained Application Protocol (CoAP) | |||
Option for No Server Response"; | Option for No Server Response"; | |||
} | } | |||
identity fid-oscore-base-type { | identity fid-oscore-base-type { | |||
base fid-coap-type; | base fid-coap-option; | |||
description | description | |||
"OSCORE options (RFC8613) split in sub options."; | "OSCORE options (RFC8613) split in suboptions."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP)"; | Constrained Application Protocol (CoAP)"; | |||
} | } | |||
identity fid-coap-option-oscore-flags { | identity fid-coap-option-oscore-flags { | |||
base fid-oscore-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option oscore flags."; | "CoAP option OSCORE flags."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP) (see | Constrained Application Protocol (CoAP) (see | |||
section 6.4)"; | Section 6.4)"; | |||
} | } | |||
identity fid-coap-option-oscore-piv { | identity fid-coap-option-oscore-piv { | |||
base fid-oscore-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option oscore flags."; | "CoAP option OSCORE flags."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP) (see | Constrained Application Protocol (CoAP) (see | |||
section 6.4)"; | Section 6.4)"; | |||
} | } | |||
identity fid-coap-option-oscore-kid { | identity fid-coap-option-oscore-kid { | |||
base fid-oscore-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option oscore flags."; | "CoAP option OSCORE flags."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP) (see | Constrained Application Protocol (CoAP) (see | |||
section 6.4)"; | Section 6.4)"; | |||
} | } | |||
identity fid-coap-option-oscore-kidctx { | identity fid-coap-option-oscore-kidctx { | |||
base fid-oscore-base-type; | base fid-coap-option; | |||
description | description | |||
"CoAP option oscore flags."; | "CoAP option OSCORE flags."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP)(see | Constrained Application Protocol (CoAP)(see | |||
section 6.4)"; | Section 6.4)"; | |||
} | } | |||
//---------------------------------- | //---------------------------------- | |||
// Field Length type definition | // Field Length type definition | |||
//---------------------------------- | //---------------------------------- | |||
identity fl-base-type { | identity fl-base-type { | |||
description | description | |||
"Used to extend field length functions."; | "Used to extend Field Length functions."; | |||
} | } | |||
identity fl-variable { | identity fl-variable { | |||
base fl-base-type; | base fl-base-type; | |||
description | description | |||
"Residue length in Byte is sent as defined for CoAP."; | "Residue length in bytes is sent as defined for CoAP."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP) (see | Constrained Application Protocol (CoAP) (see | |||
section 5.3)"; | Section 5.3)"; | |||
} | } | |||
identity fl-token-length { | identity fl-token-length { | |||
base fl-base-type; | base fl-base-type; | |||
description | description | |||
"Residue length in Byte is sent as defined for CoAP."; | "Residue length in bytes is sent as defined for CoAP."; | |||
reference | reference | |||
"RFC 8824 Static Context Header Compression (SCHC) for the | "RFC 8824 Static Context Header Compression (SCHC) for the | |||
Constrained Application Protocol (CoAP) (see | Constrained Application Protocol (CoAP) (see | |||
section 4.5)"; | Section 4.5)"; | |||
} | } | |||
//--------------------------------- | //--------------------------------- | |||
// Direction Indicator type | // Direction Indicator type | |||
//--------------------------------- | //--------------------------------- | |||
identity di-base-type { | identity di-base-type { | |||
description | description | |||
"Used to extend direction indicators."; | "Used to extend Direction Indicators."; | |||
} | } | |||
identity di-bidirectional { | identity di-bidirectional { | |||
base di-base-type; | base di-base-type; | |||
description | description | |||
"Direction Indication of bidirectionality."; | "Direction Indicator of bidirectionality."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.1.)"; | Section 7.1)"; | |||
} | } | |||
identity di-up { | identity di-up { | |||
base di-base-type; | base di-base-type; | |||
description | description | |||
"Direction Indication of uplink."; | "Direction Indicator of uplink."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.1)."; | Section 7.1)"; | |||
} | } | |||
identity di-down { | identity di-down { | |||
base di-base-type; | base di-base-type; | |||
description | description | |||
"Direction Indication of downlink."; | "Direction Indicator of downlink."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.1)."; | Section 7.1)"; | |||
} | } | |||
//---------------------------------- | //---------------------------------- | |||
// Matching Operator type definition | // Matching Operator type definition | |||
//---------------------------------- | //---------------------------------- | |||
identity mo-base-type { | identity mo-base-type { | |||
description | description | |||
"Matching Operator: used in the rule selection process | "Matching Operator: used in the Rule selection process | |||
to check is a Target Value matches the field's value."; | to check if a Target Value matches the field's value."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see* | Header Compression and Fragmentation (see | |||
section 7.2)."; | Section 7.2)"; | |||
} | } | |||
identity mo-equal { | identity mo-equal { | |||
base mo-base-type; | base mo-base-type; | |||
description | description | |||
"equal MO."; | "equal MO."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.3)."; | Section 7.3)"; | |||
} | } | |||
identity mo-ignore { | identity mo-ignore { | |||
base mo-base-type; | base mo-base-type; | |||
description | description | |||
"ignore MO."; | "ignore MO."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.3)."; | Section 7.3)"; | |||
} | } | |||
identity mo-msb { | identity mo-msb { | |||
base mo-base-type; | base mo-base-type; | |||
description | description | |||
"MSB MO."; | "MSB MO."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.3)."; | Section 7.3)"; | |||
} | } | |||
identity mo-match-mapping { | identity mo-match-mapping { | |||
base mo-base-type; | base mo-base-type; | |||
description | description | |||
"match-mapping MO."; | "match-mapping MO."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.3)."; | Section 7.3)"; | |||
} | } | |||
//------------------------------ | //------------------------------ | |||
// CDA type definition | // CDA type definition | |||
//------------------------------ | //------------------------------ | |||
identity cda-base-type { | identity cda-base-type { | |||
description | description | |||
"Compression Decompression Actions. Specify the action to | "Compression Decompression Actions. Specify the action to | |||
be applied to the field's value in a specific rule."; | be applied to the field's value in a specific Rule."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.2)."; | Section 7.2)"; | |||
} | } | |||
identity cda-not-sent { | identity cda-not-sent { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"not-sent CDA."; | "not-sent CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-value-sent { | identity cda-value-sent { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"value-sent CDA."; | "value-sent CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-lsb { | identity cda-lsb { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"LSB CDA."; | "Least Significant Bit (LSB) CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-mapping-sent { | identity cda-mapping-sent { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"mapping-sent CDA."; | "mapping-sent CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-compute { | identity cda-compute { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"compute-* CDA."; | "compute-* CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-deviid { | identity cda-deviid { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"DevIID CDA."; | "DevIID CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
identity cda-appiid { | identity cda-appiid { | |||
base cda-base-type; | base cda-base-type; | |||
description | description | |||
"AppIID CDA."; | "Application Interface Identifier (AppIID) CDA."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context | "RFC 8724 SCHC: Generic Framework for Static Context | |||
Header Compression and Fragmentation (see | Header Compression and Fragmentation (see | |||
section 7.4)."; | Section 7.4)"; | |||
} | } | |||
// -- type definition | // -- type definition | |||
typedef fid-type { | typedef fid-type { | |||
type identityref { | type identityref { | |||
base fid-base-type; | base fid-base-type; | |||
} | } | |||
description | description | |||
"Field ID generic type."; | "Field ID generic type."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef fl-type { | typedef fl-type { | |||
type union { | type identityref { | |||
type uint64 { | base fl-base-type; | |||
range 1..max; | ||||
} | ||||
type identityref { | ||||
base fl-base-type; | ||||
} | ||||
} | } | |||
description | description | |||
"Field length either a positive integer expressing the size in | "Function used to indicate Field Length."; | |||
bits or a function defined through an identityref."; | ||||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef di-type { | typedef di-type { | |||
type identityref { | type identityref { | |||
base di-base-type; | base di-base-type; | |||
} | } | |||
description | description | |||
"Direction in LPWAN network, up when emitted by the device, | "Direction in LPWAN network: up when emitted by the device, | |||
down when received by the device, bi when emitted or | down when received by the device, or bi when emitted or | |||
received by the device."; | received by the device."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef mo-type { | typedef mo-type { | |||
type identityref { | type identityref { | |||
base mo-base-type; | base mo-base-type; | |||
} | } | |||
description | description | |||
"Matching Operator (MO) to compare fields values with | "Matching Operator (MO) to compare field values with | |||
target values."; | Target Values."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef cda-type { | typedef cda-type { | |||
type identityref { | type identityref { | |||
base cda-base-type; | base cda-base-type; | |||
} | } | |||
description | description | |||
"Compression Decompression Action to compression or | "Compression Decompression Action to compress or | |||
decompress a field."; | decompress a field."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
// -- FRAGMENTATION TYPE | // -- FRAGMENTATION TYPE | |||
// -- fragmentation modes | // -- fragmentation modes | |||
identity fragmentation-mode-base-type { | identity fragmentation-mode-base-type { | |||
skipping to change at page 33, line 26 ¶ | skipping to change at line 1512 ¶ | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef fragmentation-mode-type { | typedef fragmentation-mode-type { | |||
type identityref { | type identityref { | |||
base fragmentation-mode-base-type; | base fragmentation-mode-base-type; | |||
} | } | |||
description | description | |||
"Define the type used for fragmentation mode in rules."; | "Define the type used for fragmentation mode in Rules."; | |||
} | } | |||
// -- Ack behavior | // -- Ack behavior | |||
identity ack-behavior-base-type { | identity ack-behavior-base-type { | |||
description | description | |||
"Define when to send an Acknowledgment ."; | "Define when to send an Acknowledgment."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
identity ack-behavior-after-all-0 { | identity ack-behavior-after-all-0 { | |||
base ack-behavior-base-type; | base ack-behavior-base-type; | |||
description | description | |||
"Fragmentation expects Ack after sending All-0 fragment."; | "Fragmentation expects ACK after sending All-0 fragment."; | |||
} | } | |||
identity ack-behavior-after-all-1 { | identity ack-behavior-after-all-1 { | |||
base ack-behavior-base-type; | base ack-behavior-base-type; | |||
description | description | |||
"Fragmentation expects Ack after sending All-1 fragment."; | "Fragmentation expects ACK after sending All-1 fragment."; | |||
} | } | |||
identity ack-behavior-by-layer2 { | identity ack-behavior-by-layer2 { | |||
base ack-behavior-base-type; | base ack-behavior-base-type; | |||
description | description | |||
"Layer 2 defines when to send an Ack."; | "Layer 2 defines when to send an ACK."; | |||
} | } | |||
typedef ack-behavior-type { | typedef ack-behavior-type { | |||
type identityref { | type identityref { | |||
base ack-behavior-base-type; | base ack-behavior-base-type; | |||
} | } | |||
description | description | |||
"Define the type used for Ack behavior in rules."; | "Define the type used for ACK behavior in Rules."; | |||
} | } | |||
// -- All-1 with data types | // -- All-1 with data types | |||
identity all-1-data-base-type { | identity all-1-data-base-type { | |||
description | description | |||
"Type to define when to send an Acknowledgment message."; | "Type to define when to send an Acknowledgment message."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
skipping to change at page 34, line 50 ¶ | skipping to change at line 1584 ¶ | |||
base all-1-data-base-type; | base all-1-data-base-type; | |||
description | description | |||
"Fragmentation process chooses to send tiles or not in All-1."; | "Fragmentation process chooses to send tiles or not in All-1."; | |||
} | } | |||
typedef all-1-data-type { | typedef all-1-data-type { | |||
type identityref { | type identityref { | |||
base all-1-data-base-type; | base all-1-data-base-type; | |||
} | } | |||
description | description | |||
"Define the type used for All-1 format in rules."; | "Define the type used for All-1 format in Rules."; | |||
} | } | |||
// -- RCS algorithm types | // -- RCS algorithm types | |||
identity rcs-algorithm-base-type { | identity rcs-algorithm-base-type { | |||
description | description | |||
"Identify which algorithm is used to compute RCS. | "Identify which algorithm is used to compute RCS. | |||
The algorithm also defines the size of the RCS field."; | The algorithm also defines the size of the RCS field."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
identity rcs-crc32 { | identity rcs-crc32 { | |||
base rcs-algorithm-base-type; | base rcs-algorithm-base-type; | |||
description | description | |||
"CRC 32 defined as default RCS in RFC8724. This RCS is | "CRC32 defined as default RCS in RFC 8724. This RCS is | |||
4 bytes long."; | 4 bytes long."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
typedef rcs-algorithm-type { | typedef rcs-algorithm-type { | |||
type identityref { | type identityref { | |||
base rcs-algorithm-base-type; | base rcs-algorithm-base-type; | |||
} | } | |||
description | description | |||
"Define the type for RCS algorithm in rules."; | "Define the type for RCS algorithm in Rules."; | |||
} | } | |||
// -------- RULE ENTRY DEFINITION ------------ | // -------- RULE ENTRY DEFINITION ------------ | |||
grouping tv-struct { | grouping tv-struct { | |||
description | description | |||
"Defines the target value element. If the header field | "Defines the Target Value element. If the header field | |||
contains a text, the binary sequence uses the same encoding. | contains a text, the binary sequence uses the same encoding. | |||
field-id allows the conversion to the appropriate type."; | field-id allows the conversion to the appropriate type."; | |||
leaf index { | leaf index { | |||
type uint16; | type uint16; | |||
description | description | |||
"Index gives the position in the matching-list. If only one | "Index gives the position in the matching list. If only one | |||
element is present, index is 0. Otherwise, index is the | element is present, index is 0. Otherwise, index is the | |||
the order in the matching list, starting at 0."; | order in the matching list, starting at 0."; | |||
} | } | |||
leaf value { | leaf value { | |||
type binary; | type binary; | |||
description | description | |||
"Target Value content as an untyped binary value."; | "Target Value content as an untyped binary value."; | |||
} | } | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
grouping compression-rule-entry { | grouping compression-rule-entry { | |||
description | description | |||
"These entries defines a compression entry (i.e. a line) | "These entries define a compression entry (i.e., a line), | |||
as defined in RFC 8724. | as defined in RFC 8724. | |||
+-------+--+--+--+------------+-----------------+---------------+ | +-------+--+--+--+------------+-----------------+---------------+ | |||
|Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act| | |Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act| | |||
+-------+--+--+--+------------+-----------------+---------------+ | +-------+--+--+--+------------+-----------------+---------------+ | |||
An entry in a compression Rule is composed of 7 elements: | ||||
An entry in a compression rule is composed of 7 elements: | - Field ID: the header field to be compressed | |||
- Field ID: The header field to be compressed. | - Field Length : either a positive integer or a function | |||
- Field Length : Either a positive integer of a function. | - Field Position: a positive (and possibly equal to 0) | |||
- Field Position: A positive (and possibly equal to 0) | integer | |||
integer. | - Direction Indicator: an indication in which direction the | |||
- Direction Indicator: An indication in which direction | compression and decompression process is effective | |||
compression and decompression process is effective. | - Target Value: a value against which the header field is | |||
- Target value: A value against which the header Field is | compared | |||
compared. | - Matching Operator: the comparison operation and optional | |||
- Matching Operator: The comparison operation and optional | associate parameters | |||
associate parameters. | - Comp./Decomp. Action: the compression or decompression | |||
- Comp./Decomp. Action: The compression or decompression | action and optional parameters | |||
action, and optional parameters. | ||||
"; | "; | |||
leaf field-id { | leaf field-id { | |||
type schc:fid-type; | type schc:fid-type; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Field ID, identify a field in the header with a YANG | "Field ID, identify a field in the header with a YANG | |||
identity reference."; | identity reference."; | |||
} | } | |||
leaf field-length { | leaf field-length { | |||
type union { | ||||
type uint8; | ||||
type schc:fl-type; | type schc:fl-type; | |||
} | ||||
mandatory true; | mandatory true; | |||
description | description | |||
"Field Length, expressed in number of bits if the length is | "Field Length, expressed in number of bits if the length is | |||
known when the Rule is created or through a specific | known when the Rule is created or through a specific | |||
function if the length is variable."; | function if the length is variable."; | |||
} | } | |||
leaf field-position { | leaf field-position { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Field position in the header is an integer. Position 1 | "Field Position in the header is an integer. Position 1 | |||
matches the first occurrence of a field in the header, | matches the first occurrence of a field in the header, | |||
while incremented position values match subsequent | while incremented position values match subsequent | |||
occurrences. | occurrences. | |||
Position 0 means that this entry matches a field | Position 0 means that this entry matches a field | |||
irrespective of its position of occurrence in the | irrespective of its position of occurrence in the | |||
header. | header. | |||
Be aware that the decompressed header may have | Be aware that the decompressed header may have | |||
position-0 fields ordered differently than they | position-0 fields ordered differently than they | |||
appeared in the original packet."; | appeared in the original packet."; | |||
} | } | |||
leaf direction-indicator { | leaf direction-indicator { | |||
type schc:di-type; | type schc:di-type; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Direction Indicator, indicate if this field must be | "Direction Indicator, indicate if this field must be | |||
considered for rule selection or ignored based on the | considered for Rule selection or ignored based on the | |||
direction (bi directionnal, only uplink, or only | direction (bidirectional, only uplink, or only | |||
downlink)."; | downlink)."; | |||
} | } | |||
list target-value { | list target-value { | |||
key "index"; | key "index"; | |||
uses tv-struct; | uses tv-struct; | |||
description | description | |||
"A list of value to compare with the header field value. | "A list of values to compare with the header field value. | |||
If target value is a singleton, position must be 0. | If Target Value is a singleton, position must be 0. | |||
For use as a matching list for the mo-match-mapping matching | For use as a matching list for the mo-match-mapping Matching | |||
operator, index should take consecutive values starting | Operator, index should take consecutive values starting | |||
from 0."; | from 0."; | |||
} | } | |||
leaf matching-operator { | leaf matching-operator { | |||
type schc:mo-type; | type schc:mo-type; | |||
must "../target-value or derived-from-or-self(., | must "../target-value or derived-from-or-self(., | |||
'mo-ignore')" { | 'mo-ignore')" { | |||
error-message | error-message | |||
"mo-equal, mo-msb and mo-match-mapping need target-value"; | "mo-equal, mo-msb, and mo-match-mapping need target-value"; | |||
description | description | |||
"target-value is not required for mo-ignore."; | "target-value is not required for mo-ignore."; | |||
} | } | |||
must "not (derived-from-or-self(., 'mo-msb')) or | must "not (derived-from-or-self(., 'mo-msb')) or | |||
../matching-operator-value" { | ../matching-operator-value" { | |||
error-message "mo-msb requires length value"; | error-message "mo-msb requires length value"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"MO: Matching Operator."; | "MO: Matching Operator."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see Section 7.3)."; | Compression and Fragmentation (see Section 7.3)"; | |||
} | } | |||
list matching-operator-value { | list matching-operator-value { | |||
key "index"; | key "index"; | |||
uses tv-struct; | uses tv-struct; | |||
description | description | |||
"Matching Operator Arguments, based on TV structure to allow | "Matching Operator Arguments, based on TV structure to allow | |||
several arguments. | several arguments. | |||
In RFC 8724, only the MSB matching operator needs arguments | In RFC 8724, only the MSB Matching Operator needs arguments | |||
(a single argument, which is the number of most significant | (a single argument, which is the number of most significant | |||
bits to be matched)."; | bits to be matched)."; | |||
} | } | |||
leaf comp-decomp-action { | leaf comp-decomp-action { | |||
type schc:cda-type; | type schc:cda-type; | |||
must "../target-value or | must "../target-value or | |||
derived-from-or-self(., 'cda-value-sent') or | derived-from-or-self(., 'cda-value-sent') or | |||
derived-from-or-self(., 'cda-compute') or | derived-from-or-self(., 'cda-compute') or | |||
derived-from-or-self(., 'cda-appiid') or | derived-from-or-self(., 'cda-appiid') or | |||
derived-from-or-self(., 'cda-deviid')" { | derived-from-or-self(., 'cda-deviid')" { | |||
error-message | error-message | |||
"cda-not-sent, cda-lsb, cda-mapping-sent need | "cda-not-sent, cda-lsb, and cda-mapping-sent need | |||
target-value"; | target-value"; | |||
description | description | |||
"target-value is not required for some CDA."; | "target-value is not required for some CDA."; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"CDA: Compression Decompression Action."; | "CDA: Compression Decompression Action."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see section 7.4)"; | Compression and Fragmentation (see Section 7.4)"; | |||
} | } | |||
list comp-decomp-action-value { | list comp-decomp-action-value { | |||
key "index"; | key "index"; | |||
uses tv-struct; | uses tv-struct; | |||
description | description | |||
"CDA arguments, based on a TV structure, in order to allow | "CDA arguments, based on a TV structure, in order to allow | |||
for several arguments. The CDAs specified in RFC 8724 | for several arguments. The CDAs specified in RFC 8724 | |||
require no argument."; | require no argument."; | |||
} | } | |||
} | } | |||
// --Rule nature | // --Rule nature | |||
identity nature-base-type { | identity nature-base-type { | |||
description | description | |||
"A rule, identified by its RuleID, are used for a single | "A Rule, identified by its RuleID, is used for a single | |||
purpose. RFC 8724 defines 2 natures: | purpose. RFC 8724 defines 3 natures: | |||
compression, no-compression, and fragmentation."; | ||||
compression, no compression and fragmentation."; | ||||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see section 6)."; | Compression and Fragmentation (see Section 6)"; | |||
} | } | |||
identity nature-compression { | identity nature-compression { | |||
base nature-base-type; | base nature-base-type; | |||
description | description | |||
"Identify a compression rule."; | "Identify a compression Rule."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see section 6)."; | Compression and Fragmentation (see Section 6)"; | |||
} | } | |||
identity nature-no-compression { | identity nature-no-compression { | |||
base nature-base-type; | base nature-base-type; | |||
description | description | |||
"Identify a no compression rule."; | "Identify a no-compression Rule."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see section 6)."; | Compression and Fragmentation (see Section 6)"; | |||
} | } | |||
identity nature-fragmentation { | identity nature-fragmentation { | |||
base nature-base-type; | base nature-base-type; | |||
description | description | |||
"Identify a fragmentation rule."; | "Identify a fragmentation Rule."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation (see section 6)."; | Compression and Fragmentation (see Section 6)"; | |||
} | } | |||
typedef nature-type { | typedef nature-type { | |||
type identityref { | type identityref { | |||
base nature-base-type; | base nature-base-type; | |||
} | } | |||
description | description | |||
"defines the type to indicate the nature of the rule."; | "Defines the type to indicate the nature of the Rule."; | |||
} | } | |||
grouping compression-content { | grouping compression-content { | |||
list entry { | list entry { | |||
must "derived-from-or-self(../rule-nature, | must "derived-from-or-self(../rule-nature, | |||
'nature-compression')" { | 'nature-compression')" { | |||
error-message "Rule nature must be compression"; | error-message "Rule nature must be compression"; | |||
} | } | |||
key "field-id field-position direction-indicator"; | key "field-id field-position direction-indicator"; | |||
uses compression-rule-entry; | uses compression-rule-entry; | |||
description | description | |||
"A compression rule is a list of rule entries, each | "A compression Rule is a list of Rule entries, each | |||
describing a header field. An entry is identified | describing a header field. An entry is identified | |||
through a field-id, its position in the packet, and | through a field-id, its position in the packet, and | |||
its direction."; | its direction."; | |||
} | } | |||
description | description | |||
"Define a compression rule composed of a list of entries."; | "Define a compression Rule composed of a list of entries."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
grouping fragmentation-content { | grouping fragmentation-content { | |||
description | description | |||
"This grouping defines the fragmentation parameters for | "This grouping defines the fragmentation parameters for | |||
all the modes (No-ACK, ACK-Always and ACK-on-Error) specified | all the modes (No ACK, ACK Always, and ACK on Error) specified | |||
in RFC 8724."; | in RFC 8724."; | |||
leaf fragmentation-mode { | leaf fragmentation-mode { | |||
type schc:fragmentation-mode-type; | type schc:fragmentation-mode-type; | |||
must "derived-from-or-self(../rule-nature, | must "derived-from-or-self(../rule-nature, | |||
'nature-fragmentation')" { | 'nature-fragmentation')" { | |||
error-message "Rule nature must be fragmentation"; | error-message "Rule nature must be fragmentation"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Which fragmentation mode is used (No-Ack, ACK-Always, | "Which fragmentation mode is used (No ACK, ACK Always, or | |||
ACK-on-Error)."; | ACK on Error)."; | |||
} | } | |||
leaf l2-word-size { | leaf l2-word-size { | |||
type uint8; | type uint8; | |||
default "8"; | default "8"; | |||
description | description | |||
"Size, in bits, of the layer 2 word."; | "Size, in bits, of the Layer 2 Word."; | |||
} | } | |||
leaf direction { | leaf direction { | |||
type schc:di-type; | type schc:di-type; | |||
must "derived-from-or-self(., 'di-up') or | must "derived-from-or-self(., 'di-up') or | |||
derived-from-or-self(., 'di-down')" { | derived-from-or-self(., 'di-down')" { | |||
error-message | error-message | |||
"Direction for fragmentation rules are up or down."; | "Direction for fragmentation Rules are up or down."; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"MUST be up or down, bidirectional MUST NOT be used."; | "MUST be up or down, bidirectional MUST NOT be used."; | |||
} | } | |||
// SCHC Frag header format | // SCHC Frag header format | |||
leaf dtag-size { | leaf dtag-size { | |||
type uint8; | type uint8; | |||
default "0"; | default "0"; | |||
description | description | |||
"Size, in bits, of the DTag field (T variable from | "Size, in bits, of the DTag field (T variable from | |||
RFC8724)."; | RFC 8724)."; | |||
} | } | |||
leaf w-size { | leaf w-size { | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error') | 'fragmentation-mode-ack-on-error') | |||
or | or | |||
derived-from-or-self(../fragmentation-mode, | derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-always') "; | 'fragmentation-mode-ack-always') "; | |||
type uint8; | type uint8; | |||
description | description | |||
"Size, in bits, of the window field (M variable from | "Size, in bits, of the window field (M variable from | |||
RFC8724)."; | RFC 8724)."; | |||
} | } | |||
leaf fcn-size { | leaf fcn-size { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Size, in bits, of the FCN field (N variable from RFC8724)."; | "Size, in bits, of the FCN field (N variable from | |||
RFC 8724)."; | ||||
} | } | |||
leaf rcs-algorithm { | leaf rcs-algorithm { | |||
type rcs-algorithm-type; | type rcs-algorithm-type; | |||
default "schc:rcs-crc32"; | default "schc:rcs-crc32"; | |||
description | description | |||
"Algorithm used for RCS. The algorithm specifies the RCS | "Algorithm used for RCS. The algorithm specifies the RCS | |||
size."; | size."; | |||
} | } | |||
// SCHC fragmentation protocol parameters | // SCHC fragmentation protocol parameters | |||
leaf maximum-packet-size { | leaf maximum-packet-size { | |||
type uint16; | type uint16; | |||
default "1280"; | default "1280"; | |||
description | description | |||
"When decompression is done, packet size must not | "When decompression is done, packet size must not | |||
strictly exceed this limit, expressed in bytes."; | strictly exceed this limit, expressed in bytes."; | |||
} | } | |||
leaf window-size { | leaf window-size { | |||
type uint16; | type uint16; | |||
description | description | |||
"By default, if not specified 2^w-size - 1. Should not exceed | "By default, if not specified, the FCN value is 2^w-size - 1. | |||
this value. Possible FCN values are between 0 and | This value should not be exceeded. Possible FCN values | |||
window-size - 1."; | are between 0 and window-size - 1."; | |||
} | } | |||
leaf max-interleaved-frames { | leaf max-interleaved-frames { | |||
type uint8; | type uint8; | |||
default "1"; | default "1"; | |||
description | description | |||
"Maximum of simultaneously fragmented frames. Maximum value | "Maximum of simultaneously fragmented frames. Maximum value | |||
is 2^dtag-size. All DTAG values can be used, but more than | is 2^dtag-size. All DTag values can be used, but more than | |||
max-interleaved-frames MUST NOT be active at any time"; | max-interleaved-frames MUST NOT be active at any time."; | |||
} | } | |||
container inactivity-timer { | container inactivity-timer { | |||
leaf ticks-duration { | leaf ticks-duration { | |||
type uint8; | type uint8; | |||
default "20"; | default "20"; | |||
description | description | |||
"Duration of one tick in micro-seconds: | "Duration of one tick in microseconds: | |||
2^ticks-duration/10^6 = 1.048s."; | 2^ticks-duration/10^6 = 1.048s."; | |||
} | } | |||
leaf ticks-numbers { | leaf ticks-numbers { | |||
type uint16 { | type uint16 { | |||
range "0..max"; | range "0..max"; | |||
} | } | |||
description | description | |||
"Timer duration = ticks-numbers*2^ticks-duration / 10^6."; | "Timer duration = ticks-numbers*2^ticks-duration / 10^6."; | |||
} | } | |||
description | description | |||
"Duration is seconds of the inactivity timer, 0 indicates | "Duration in seconds of the Inactivity Timer; 0 indicates | |||
that the timer is disabled. | that the timer is disabled. | |||
Allows a precision from micro-second to year by sending the | Allows a precision from microsecond to year by sending the | |||
tick-duration value. For instance: | tick-duration value. For instance: | |||
tick-duration / smallest value highest value | tick-duration: smallest value <-> highest value | |||
v | ||||
20: 00y 000d 00h 00m 01s.048575<->00y 000d 19h 05m 18s.428159 | ||||
21: 00y 000d 00h 00m 02s.097151<->00y 001d 14h 10m 36s.856319 | ||||
22: 00y 000d 00h 00m 04s.194303<->00y 003d 04h 21m 13s.712639 | ||||
23: 00y 000d 00h 00m 08s.388607<->00y 006d 08h 42m 27s.425279 | ||||
24: 00y 000d 00h 00m 16s.777215<->00y 012d 17h 24m 54s.850559 | ||||
25: 00y 000d 00h 00m 33s.554431<->00y 025d 10h 49m 49s.701119 | ||||
Note that the smallest value is also the incrementation step, | 20: 00y 000d 00h 00m 01s.048575<->00y 000d 19h 05m 18s.428159 | |||
so the timer precision."; | 21: 00y 000d 00h 00m 02s.097151<->00y 001d 14h 10m 36s.856319 | |||
22: 00y 000d 00h 00m 04s.194303<->00y 003d 04h 21m 13s.712639 | ||||
23: 00y 000d 00h 00m 08s.388607<->00y 006d 08h 42m 27s.425279 | ||||
24: 00y 000d 00h 00m 16s.777215<->00y 012d 17h 24m 54s.850559 | ||||
25: 00y 000d 00h 00m 33s.554431<->00y 025d 10h 49m 49s.701119 | ||||
Note that the smallest value is also the incrementation | ||||
step."; | ||||
} | } | |||
container retransmission-timer { | container retransmission-timer { | |||
leaf ticks-duration { | leaf ticks-duration { | |||
type uint8; | type uint8; | |||
default "20"; | default "20"; | |||
description | description | |||
"Duration of one tick in micro-seconds: | "Duration of one tick in microseconds: | |||
2^ticks-duration/10^6 = 1.048s."; | 2^ticks-duration/10^6 = 1.048s."; | |||
} | } | |||
leaf ticks-numbers { | leaf ticks-numbers { | |||
type uint16 { | type uint16 { | |||
range "1..max"; | range "1..max"; | |||
} | } | |||
description | description | |||
"Timer duration = ticks-numbers*2^ticks-duration / 10^6."; | "Timer duration = ticks-numbers*2^ticks-duration / 10^6."; | |||
} | } | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error') | 'fragmentation-mode-ack-on-error') | |||
or | or | |||
derived-from-or-self(../fragmentation-mode, | derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-always') "; | 'fragmentation-mode-ack-always') "; | |||
description | description | |||
"Duration in seconds of the retransmission timer. | "Duration in seconds of the Retransmission Timer. | |||
See inactivity timer."; | See the Inactivity Timer."; | |||
} | } | |||
leaf max-ack-requests { | leaf max-ack-requests { | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error') | 'fragmentation-mode-ack-on-error') | |||
or | or | |||
derived-from-or-self(../fragmentation-mode, | derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-always') "; | 'fragmentation-mode-ack-always') "; | |||
type uint8 { | type uint8 { | |||
range "1..max"; | range "1..max"; | |||
} | } | |||
skipping to change at page 43, line 44 ¶ | skipping to change at line 2010 ¶ | |||
} | } | |||
choice mode { | choice mode { | |||
case no-ack; | case no-ack; | |||
case ack-always; | case ack-always; | |||
case ack-on-error { | case ack-on-error { | |||
leaf tile-size { | leaf tile-size { | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error')"; | 'fragmentation-mode-ack-on-error')"; | |||
type uint8; | type uint8; | |||
description | description | |||
"Size, in bits, of tiles. If not specified or set to 0, | "Size, in bits, of tiles. If not specified or set to 0, | |||
tiles fill the fragment."; | tiles fill the fragment."; | |||
} | } | |||
leaf tile-in-all-1 { | leaf tile-in-all-1 { | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error')"; | 'fragmentation-mode-ack-on-error')"; | |||
type schc:all-1-data-type; | type schc:all-1-data-type; | |||
description | description | |||
"Defines whether the sender and receiver expect a tile in | "Defines whether the sender and receiver expect a tile in | |||
All-1 fragments or not, or if it is left to the sender's | All-1 fragments or not, or if it is left to the sender's | |||
choice."; | choice."; | |||
} | } | |||
leaf ack-behavior { | leaf ack-behavior { | |||
when "derived-from-or-self(../fragmentation-mode, | when "derived-from-or-self(../fragmentation-mode, | |||
'fragmentation-mode-ack-on-error')"; | 'fragmentation-mode-ack-on-error')"; | |||
type schc:ack-behavior-type; | type schc:ack-behavior-type; | |||
description | description | |||
"Sender behavior to acknowledge, after All-0, All-1 or | "Sender behavior to acknowledge, after All-0 or All-1 or | |||
when the LPWAN allows it."; | when the LPWAN allows it."; | |||
} | } | |||
} | } | |||
description | description | |||
"RFC 8724 defines 3 fragmentation modes."; | "RFC 8724 defines 3 fragmentation modes."; | |||
} | } | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
// Define rule ID. Rule ID is composed of a RuleID value and a | // Define RuleID. RuleID is composed of a RuleID value and a | |||
// Rule ID Length | // RuleID length | |||
grouping rule-id-type { | grouping rule-id-type { | |||
leaf rule-id-value { | leaf rule-id-value { | |||
type uint32; | type uint32; | |||
description | description | |||
"Rule ID value, this value must be unique, considering its | "RuleID value. This value must be unique, considering its | |||
length."; | length."; | |||
} | } | |||
leaf rule-id-length { | leaf rule-id-length { | |||
type uint8 { | type uint8 { | |||
range "0..32"; | range "0..32"; | |||
} | } | |||
description | description | |||
"Rule ID length, in bits. The value 0 is for implicit | "RuleID length, in bits. The value 0 is for implicit | |||
rules."; | Rules."; | |||
} | } | |||
description | description | |||
"A rule ID is composed of a value and a length, expressed in | "A RuleID is composed of a value and a length, expressed in | |||
bits."; | bits."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
// SCHC table for a specific device. | // SCHC table for a specific device. | |||
container schc { | container schc { | |||
list rule { | list rule { | |||
key "rule-id-value rule-id-length"; | key "rule-id-value rule-id-length"; | |||
uses rule-id-type; | uses rule-id-type; | |||
leaf rule-nature { | leaf rule-nature { | |||
type nature-type; | type nature-type; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Specify the rule's nature."; | "Specify the Rule's nature."; | |||
} | } | |||
choice nature { | choice nature { | |||
case fragmentation { | case fragmentation { | |||
if-feature "fragmentation"; | if-feature "fragmentation"; | |||
uses fragmentation-content; | uses fragmentation-content; | |||
} | } | |||
case compression { | case compression { | |||
if-feature "compression"; | if-feature "compression"; | |||
uses compression-content; | uses compression-content; | |||
} | } | |||
description | description | |||
"A rule is for compression, for no-compression or for | "A Rule is for compression, for no-compression, or for | |||
fragmentation."; | fragmentation."; | |||
} | } | |||
description | description | |||
"Set of rules compression, no compression or fragmentation | "Set of compression, no-compression, or fragmentation | |||
rules identified by their rule-id."; | Rules identified by their rule-id."; | |||
} | } | |||
description | description | |||
"A SCHC set of rules is composed of a list of rules which are | "A SCHC set of Rules is composed of a list of Rules that are | |||
used for compression, no-compression or fragmentation."; | used for compression, no-compression, or fragmentation."; | |||
reference | reference | |||
"RFC 8724 SCHC: Generic Framework for Static Context Header | "RFC 8724 SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation"; | Compression and Fragmentation"; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 6 | Figure 6: SCHC YANG Data Model | |||
7. Implementation Status | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in [RFC7942]. | ||||
The description of implementations in this section is intended to | ||||
assist the IETF in its decision processes in progressing drafts to | ||||
RFCs. Please note that the listing of any individual implementation | ||||
here does not imply endorsement by the IETF. Furthermore, no effort | ||||
has been spent to verify the information presented here that was | ||||
supplied by IETF contributors. This is not intended as, and must not | ||||
be construed to be, a catalog of available implementations or their | ||||
features. Readers are advised to note that other implementations may | ||||
exist. | ||||
According to [RFC7942], "this will allow reviewers and working groups | ||||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. | ||||
It is up to the individual working groups to use this information as | ||||
they see fit". | ||||
* Openschc is implementing the conversion between the local rule | ||||
representation and the representation conforming to the data model | ||||
in JSON and CBOR (following -08 draft). | ||||
8. IANA Considerations | ||||
This document registers one URI and one YANG modules. | ||||
8.1. URI Registration | ||||
This document requests IANA to register the following URI in the | ||||
"IETF XML Registry" [RFC3688]: | ||||
URI: urn:ietf:params:xml:ns:yang:ietf-schc | ||||
Registrant Contact: The IESG. | 7. IANA Considerations | |||
XML: N/A; the requested URI is an XML namespace. | This document registers one URI and one YANG data model. | |||
8.2. YANG Module Name Registration | 7.1. URI Registration | |||
This document registers the following one YANG modules in the "YANG | IANA registered the following URI in the "IETF XML Registry" | |||
Module Names" registry [RFC6020]. | [RFC3688]: | |||
name: ietf-schc | URI: urn:ietf:params:xml:ns:yang:ietf-schc | |||
Registrant Contact: The IESG. | ||||
XML: N/A; the requested URI is an XML namespace. | ||||
namespace: urn:ietf:params:xml:ns:yang:ietf-schc | 7.2. YANG Module Name Registration | |||
prefix: schc | IANA has registered the following YANG data model in the "YANG Module | |||
Names" registry [RFC6020]. | ||||
reference: RFC XXXX Data Model for Static Context Header | name: ietf-schc | |||
Compression (SCHC) | namespace: urn:ietf:params:xml:ns:yang:ietf-schc | |||
prefix: schc | ||||
reference: RFC 9363 | ||||
9. Security Considerations | 8. Security Considerations | |||
The YANG module specified in this document defines a schema for data | The YANG module specified in this document defines a schema for data | |||
that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
is HTTPS, and the mandatory-to-implement secure transport is TLS | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
[RFC8446]. | [RFC8446]. | |||
The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
This data model formalizes the rules elements described in [RFC8724] | There are a number of data nodes defined in this YANG module that are | |||
for compression, and fragmentation. As explained in the architecture | writable/creatable/deletable (i.e., config true, which is the | |||
document [I-D.ietf-lpwan-architecture], a rule can be read, created, | default). These data nodes may be considered sensitive or vulnerable | |||
updated or deleted in response to a management request. These | in some network environments. Write operations (e.g., edit-config) | |||
actions can be done between two instances of SCHC or between a SCHC | to these data nodes without proper protection can have a negative | |||
instance and a rule repository. | effect on network operations. These are the subtrees and data nodes | |||
and their sensitivity/vulnerability: | ||||
create | ||||
(-------) read +=======+ * | ||||
( rules )<------->|Rule |<--|--------> | ||||
(-------) update |Manager| NETCONF, RESTCONF,... | ||||
. read delete +=======+ request | ||||
. | ||||
+-------+ | ||||
<===| R & D |<=== | ||||
===>| C & F |===> | ||||
+-------+ | ||||
The rule contains sensitive information such as the application IPv6 | ||||
address where the device's data will be sent after decompression. A | ||||
device may try to modify other devices' rules by changing the | ||||
application address and may block communication or allows traffic | ||||
eavesdropping. Therefore, a device must be allowed to modify only | ||||
its own rules on the remote SCHC instance. The identity of the | ||||
requester must be validated. This can be done through certificates | ||||
or access lists. By reading a module, an attacker may know the | ||||
traffic a device can generate and learn about application addresses | ||||
or REST API. | ||||
The full tree is sensitive, since it represents all the elements that | ||||
can be managed. This module aims to be encapsulated into a YANG | ||||
module including access controls and identities. | ||||
10. Annex A : Example | ||||
The informal rules given Figure 7 will represented in XML as shown in | ||||
Figure 8. | ||||
/-------------------------\ | ||||
|Rule 6/3 110 | | ||||
|---------------+---+--+--+----------------+-------+----------------\ | ||||
|IPV6.VER | 4| 1|BI| 6|EQUAL |NOT-SENT | | ||||
|IPV6.TC | 8| 1|BI| 0|EQUAL |NOT-SENT | | ||||
|IPV6.FL | 20| 1|BI| 0|IGNORE |NOT-SENT | | ||||
|IPV6.LEN | 16| 1|BI| |IGNORE |COMPUTE-LENGTH | | ||||
|IPV6.NXT | 8| 1|BI| 58|EQUAL |NOT-SENT | | ||||
|IPV6.HOP_LMT | 8| 1|BI| 255|IGNORE |NOT-SENT | | ||||
|IPV6.DEV_PREFIX| 64| 1|BI|200104701f2101d2|EQUAL |NOT-SENT | | ||||
|IPV6.DEV_IID | 64| 1|BI|0000000000000003|EQUAL |NOT-SENT | | ||||
|IPV6.APP_PREFIX| 64| 1|BI| |IGNORE |VALUE-SENT | | ||||
|IPV6.APP_IID | 64| 1|BI| |IGNORE |VALUE-SENT | | ||||
\---------------+---+--+--+----------------+-------+----------------/ | ||||
/-------------------------\ | ||||
|Rule 12/11 00001100 | | ||||
!=========================+=========================================\ | ||||
!^ Fragmentation mode : NoAck header dtag 2 Window 0 FCN 3 UP ^! | ||||
!^ No Tile size specified ^! | ||||
!^ RCS Algorithm: RCS_CRC32 ^! | ||||
\===================================================================/ | ||||
/-------------------------\ | ||||
|Rule 100/8 01100100 | | ||||
| NO COMPRESSION RULE | | ||||
\-------------------------/ | ||||
Figure 7: Rules example | ||||
<?xml version='1.0' encoding='UTF-8'?> | ||||
<schc xmlns="urn:ietf:params:xml:ns:yang:ietf-schc"> | ||||
<rule> | ||||
<rule-id-value>6</rule-id-value> | ||||
<rule-id-length>3</rule-id-length> | ||||
<rule-nature>nature-compression</rule-nature> | ||||
<entry> | ||||
<field-id>fid-ipv6-version</field-id> | ||||
<field-length>4</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AAY=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-trafficclass</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AA==</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-flowlabel</field-id> | ||||
<field-length>20</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AA==</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-payload-length</field-id> | ||||
<field-length>16</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-compute</comp-decomp-action> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-nextheader</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>ADo=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-hoplimit</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AP8=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-devprefix</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>IAEEcB8hAdI=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-deviid</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AAAAAAAAAAM=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-appprefix</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-value-sent</comp-decomp-action> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-appiid</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-value-sent</comp-decomp-action> | ||||
</entry> | ||||
</rule> | ||||
<rule> | ||||
<rule-id-value>12</rule-id-value> | ||||
<rule-id-length>11</rule-id-length> | ||||
<rule-nature>nature-fragmentation</rule-nature> | ||||
<direction>di-up</direction> | ||||
<rcs-algorithm>rcs-crc32</rcs-algorithm> | ||||
<dtag-size>2</dtag-size> | ||||
<fcn-size>3</fcn-size> | ||||
<fragmentation-mode>fragmentation-mode-no-ack</fragmentation-mode> | ||||
</rule> | ||||
<rule> | ||||
<rule-id-value>100</rule-id-value> | ||||
<rule-id-length>8</rule-id-length> | ||||
<rule-nature>nature-no-compression</rule-nature> | ||||
</rule> | ||||
</schc> | ||||
Figure 8: XML representation of the rules. | /schc: All the data nodes may be modified. The Rule contains | |||
sensitive information, such as the application IPv6 address where | ||||
the device's data will be sent after decompression. An attacker | ||||
may try to modify other devices' Rules by changing the application | ||||
address and may block communication or allows traffic | ||||
eavesdropping. Therefore, a device must be allowed to modify only | ||||
its own rules on the remote SCHC instance. The identity of the | ||||
requester must be validated. This can be done through | ||||
certificates or access lists. Modification may be allowed | ||||
regarding the Field Descriptor (i.e., IPv6 addresses field | ||||
descriptors should not be modified, but UDP dev port could be | ||||
changed). | ||||
11. Acknowledgements | Some of the readable data nodes in this YANG module may be considered | |||
sensitive or vulnerable in some network environments. It is thus | ||||
important to control read access (e.g., via get, get-config, or | ||||
notification) to these data nodes. These are the subtrees and data | ||||
nodes and their sensitivity/vulnerability: | ||||
The authors would like to thank Dominique Barthel, Carsten Bormann, | /schc: By reading a module, an attacker may learn the traffic | |||
Ivan Martinez, Alexander Pelov for their careful reading and valuable | generated by a device and can also learn about application | |||
inputs. A special thanks for Joe Clarke, Carl Moberg, Tom Petch, | addresses or REST API. | |||
Martin Thomson, and Eric Vyncke for their explanations and wise | ||||
advices when building the model. | ||||
12. References | 9. References | |||
12.1. Normative References | 9.1. Normative References | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/info/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 53, line 26 ¶ | skipping to change at line 2259 ¶ | |||
Compression and Fragmentation", RFC 8724, | Compression and Fragmentation", RFC 8724, | |||
DOI 10.17487/RFC8724, April 2020, | DOI 10.17487/RFC8724, April 2020, | |||
<https://www.rfc-editor.org/info/rfc8724>. | <https://www.rfc-editor.org/info/rfc8724>. | |||
[RFC8824] Minaburo, A., Toutain, L., and R. Andreasen, "Static | [RFC8824] Minaburo, A., Toutain, L., and R. Andreasen, "Static | |||
Context Header Compression (SCHC) for the Constrained | Context Header Compression (SCHC) for the Constrained | |||
Application Protocol (CoAP)", RFC 8824, | Application Protocol (CoAP)", RFC 8824, | |||
DOI 10.17487/RFC8824, June 2021, | DOI 10.17487/RFC8824, June 2021, | |||
<https://www.rfc-editor.org/info/rfc8824>. | <https://www.rfc-editor.org/info/rfc8824>. | |||
12.2. Informative References | 9.2. Informative References | |||
[I-D.ietf-lpwan-architecture] | [LPWAN-ARCH] | |||
Pelov, A., Thubert, P., and A. Minaburo, "LPWAN Static | Pelov, A., Thubert, P., and A. Minaburo, "LPWAN Static | |||
Context Header Compression (SCHC) Architecture", Work in | Context Header Compression (SCHC) Architecture", Work in | |||
Progress, Internet-Draft, draft-ietf-lpwan-architecture- | Progress, Internet-Draft, draft-ietf-lpwan-architecture- | |||
02, 30 June 2022, <https://www.ietf.org/archive/id/draft- | 02, 30 June 2022, <https://datatracker.ietf.org/doc/html/ | |||
ietf-lpwan-architecture-02.txt>. | draft-ietf-lpwan-architecture-02>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
Code: The Implementation Status Section", BCP 205, | ||||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
<https://www.rfc-editor.org/info/rfc7942>. | ||||
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
[RFC7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | [RFC7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | |||
Bose, "Constrained Application Protocol (CoAP) Option for | Bose, "Constrained Application Protocol (CoAP) Option for | |||
No Server Response", RFC 7967, DOI 10.17487/RFC7967, | No Server Response", RFC 7967, DOI 10.17487/RFC7967, | |||
August 2016, <https://www.rfc-editor.org/info/rfc7967>. | August 2016, <https://www.rfc-editor.org/info/rfc7967>. | |||
[RFC8376] Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN) | [RFC8376] Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN) | |||
Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018, | Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018, | |||
<https://www.rfc-editor.org/info/rfc8376>. | <https://www.rfc-editor.org/info/rfc8376>. | |||
[RFC9011] Gimenez, O., Ed. and I. Petrov, Ed., "Static Context | [RFC9011] Gimenez, O., Ed. and I. Petrov, Ed., "Static Context | |||
Header Compression and Fragmentation (SCHC) over LoRaWAN", | Header Compression and Fragmentation (SCHC) over LoRaWAN", | |||
RFC 9011, DOI 10.17487/RFC9011, April 2021, | RFC 9011, DOI 10.17487/RFC9011, April 2021, | |||
<https://www.rfc-editor.org/info/rfc9011>. | <https://www.rfc-editor.org/info/rfc9011>. | |||
Appendix A. Example | ||||
The informal Rules given Figure 7 are represented in XML, as shown in | ||||
Figure 8. | ||||
/-------------------------\ | ||||
|Rule 6/3 110 | | ||||
|---------------+---+--+--+----------------+-------+----------------\ | ||||
|IPV6.VER | 4| 1|BI| 6|EQUAL |NOT-SENT | | ||||
|IPV6.TC | 8| 1|BI| 0|EQUAL |NOT-SENT | | ||||
|IPV6.FL | 20| 1|BI| 0|IGNORE |NOT-SENT | | ||||
|IPV6.LEN | 16| 1|BI| |IGNORE |COMPUTE-LENGTH | | ||||
|IPV6.NXT | 8| 1|BI| 58|EQUAL |NOT-SENT | | ||||
|IPV6.HOP_LMT | 8| 1|BI| 255|IGNORE |NOT-SENT | | ||||
|IPV6.DEV_PREFIX| 64| 1|BI|200104701f2101d2|EQUAL |NOT-SENT | | ||||
|IPV6.DEV_IID | 64| 1|BI|0000000000000003|EQUAL |NOT-SENT | | ||||
|IPV6.APP_PREFIX| 64| 1|BI| |IGNORE |VALUE-SENT | | ||||
|IPV6.APP_IID | 64| 1|BI| |IGNORE |VALUE-SENT | | ||||
\---------------+---+--+--+----------------+-------+----------------/ | ||||
/-------------------------\ | ||||
|Rule 12/11 00001100 | | ||||
!=========================+=========================================\ | ||||
!^ Fragmentation mode : NoAck header dtag 2 Window 0 FCN 3 UP ^! | ||||
!^ No Tile size specified ^! | ||||
!^ RCS Algorithm: RCS_CRC32 ^! | ||||
\===================================================================/ | ||||
/-------------------------\ | ||||
|Rule 100/8 01100100 | | ||||
| NO-COMPRESSION RULE | | ||||
\-------------------------/ | ||||
Figure 7: Rules Example | ||||
<?xml version='1.0' encoding='UTF-8'?> | ||||
<schc xmlns="urn:ietf:params:xml:ns:yang:ietf-schc"> | ||||
<rule> | ||||
<rule-id-value>6</rule-id-value> | ||||
<rule-id-length>3</rule-id-length> | ||||
<rule-nature>nature-compression</rule-nature> | ||||
<entry> | ||||
<field-id>fid-ipv6-version</field-id> | ||||
<field-length>4</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AAY=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-trafficclass</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AA==</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-flowlabel</field-id> | ||||
<field-length>20</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AA==</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-payload-length</field-id> | ||||
<field-length>16</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-compute</comp-decomp-action> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-nextheader</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>ADo=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-hoplimit</field-id> | ||||
<field-length>8</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AP8=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-devprefix</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>IAEEcB8hAdI=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-deviid</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-equal</matching-operator> | ||||
<comp-decomp-action>cda-not-sent</comp-decomp-action> | ||||
<target-value> | ||||
<index>0</index> | ||||
<value>AAAAAAAAAAM=</value> | ||||
</target-value> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-appprefix</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-value-sent</comp-decomp-action> | ||||
</entry> | ||||
<entry> | ||||
<field-id>fid-ipv6-appiid</field-id> | ||||
<field-length>64</field-length> | ||||
<field-position>1</field-position> | ||||
<direction-indicator>di-bidirectional</direction-indicator> | ||||
<matching-operator>mo-ignore</matching-operator> | ||||
<comp-decomp-action>cda-value-sent</comp-decomp-action> | ||||
</entry> | ||||
</rule> | ||||
<rule> | ||||
<rule-id-value>12</rule-id-value> | ||||
<rule-id-length>11</rule-id-length> | ||||
<rule-nature>nature-fragmentation</rule-nature> | ||||
<direction>di-up</direction> | ||||
<rcs-algorithm>rcs-crc32</rcs-algorithm> | ||||
<dtag-size>2</dtag-size> | ||||
<fcn-size>3</fcn-size> | ||||
<fragmentation-mode> | ||||
fragmentation-mode-no-ack | ||||
</fragmentation-mode> | ||||
</rule> | ||||
<rule> | ||||
<rule-id-value>100</rule-id-value> | ||||
<rule-id-length>8</rule-id-length> | ||||
<rule-nature>nature-no-compression</rule-nature> | ||||
</rule> | ||||
</schc> | ||||
Figure 8: XML Representation of the Rules | ||||
Acknowledgments | ||||
The authors would like to thank Dominique Barthel, Carsten Bormann, | ||||
Ivan Martinez, and Alexander Pelov for their careful reading and | ||||
valuable inputs. A special thanks for Joe Clarke, Carl Moberg, Tom | ||||
Petch, Martin Thomson, and Éric Vyncke for their explanations and | ||||
wise advice when building the model. | ||||
Authors' Addresses | Authors' Addresses | |||
Ana Minaburo | Ana Minaburo | |||
Acklio | Acklio | |||
1137A avenue des Champs Blancs | 1137A avenue des Champs Blancs | |||
35510 Cesson-Sevigne Cedex | 35510 Cesson-Sevigne Cedex | |||
France | France | |||
Email: ana@ackl.io | Email: ana@ackl.io | |||
Laurent Toutain | Laurent Toutain | |||
Institut MINES TELECOM; IMT Atlantique | Institut MINES TELECOM; IMT Atlantique | |||
2 rue de la Chataigneraie | 2 rue de la Chataigneraie CS 17607 | |||
CS 17607 | ||||
35576 Cesson-Sevigne Cedex | 35576 Cesson-Sevigne Cedex | |||
France | France | |||
Email: Laurent.Toutain@imt-atlantique.fr | Email: Laurent.Toutain@imt-atlantique.fr | |||
End of changes. 308 change blocks. | ||||
758 lines changed or deleted | 711 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |