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