# Document Shepherd Writeup for draft-ietf-lpwan-schc-yang-data-model-13
Technical Summary:
This document describes a YANG data model for the SCHC (Static Context
Header Compression) compression and fragmentation rules for RFC 8724 and RFC
8824
Working Group Summary:
This document was discussed at a number of LPWAN interim meetings. There was
never any form of opposition against it. The way to allow extensions in
particular with the upcoming "compound ack" spec was studied.
Personal:
Document Shepherd: Pascal Thubert
Responsible Area Director: Eric Vyncke
Template:
*This version is dated 8 April 2022.*
## Document History
1. Does the working group (WG) consensus represent the strong concurrence of a
few individuals, with others being silent, or did it reach broad agreement?
It's more of the former. LPWAN has a core of 6-8 people that are very active
and implement open source code as well as proprietary stacks for LoRa and
SigFox.
2. Was there controversy about particular points, or were there decisions where
the consensus was particularly rough?
There was a global approval; One slight issue was heavily discussed: the
size of a timer in seconds, 32 vs. 64 bits. The RFC does not constrain the
duration of the timer. On paper, all the proposed representations (string
and cbor) do not need to know so it should not matter. But the implementer
may depend on the YANG model to type his variables. The proposal was made to
replace the 64 bits by a mantissa (2 bytes) and a 1 byte exponent of 2. A
default value for the exponent (13, with the base unit in microseconds) can
be omitted in the air, allowing 2 octets to indicate from 1s to 18H.
3. Has anyone threatened an appeal or otherwise indicated extreme discontent? If
so, please summarize the areas of conflict in separate email messages to the
responsible Area Director. (It should be in a separate email because this
questionnaire is publicly available.)
No
4. For protocol documents, are there existing implementations of the contents of
the document? Have a significant number of potential implementers indicated
plans to implement? Are any existing implementations reported somewhere,
either in the document itself (as [RFC 7942][3] recommends) or elsewhere
(where)?
There is at least a partial implementations of the model in openSCHC, see
(*) at the end of this writeup
### Additional Reviews
5. Does this document need review from other IETF working groups or external
organizations? Have those reviews occurred?
No such thing
6. Describe how the document meets any required formal expert review criteria,
such as the MIB Doctor, YANG Doctor, media type, and URI type reviews.
The document was reviewed by a YANG doctor
(https://datatracker.ietf.org/doc/review-ietf-lpwan-schc-yang-data-model-04-yangdoctors-early-moberg-2021-04-13/).
It was edited by a lead SCHC author and reviewed by the SCHC editor.
7. If the document contains a YANG module, has the final version of the module
been checked with any of the [recommended validation tools][4] for syntax and
formatting validation? If there are any resulting errors or warnings, what is
the justification for not fixing them at this time? Does the YANG module
comply with the Network Management Datastore Architecture (NMDA) as specified
in [RFC 8342][5]?
Yes, the document was validated through IETF YANG tools including yangson,
see (*) at the end of this writeup
8. Describe reviews and automated checks performed to validate sections of the
final version of the document written in a formal language, such as XML code,
BNF rules, MIB definitions, CBOR's CDDL, etc.
There's only YANG
### Document Shepherd Checks
9. Based on the shepherd's review of the document, is it their opinion that this
document is needed, clearly written, complete, correctly designed, and ready
to be handed off to the responsible Area Director?
Certainly.
10. Several IETF Areas have assembled [lists of common issues that their
reviewers encounter][6]. Do any such issues remain that would merit specific
attention from subsequent reviews?
I could not find one relevant here
11. What type of RFC publication is being requested on the IETF stream (Best
Current Practice, Proposed Standard, Internet Standard, Informational,
Experimental, or Historic)? Why is this the proper type of RFC? Do all
Datatracker state attributes correctly reflect this intent?
Proposed Standard, which makes sense for such content which has MUST statements
that are necessary for interop. Datatracker state attributes are correct.
12. Has the interested community confirmed that any and all appropriate IPR
disclosures required by [BCP 78][7] and [BCP 79][8] have been filed? If not,
explain why. If yes, summarize any discussion and conclusion regarding the
intellectual property rights (IPR) disclosures, including links to relevant
emails.
Yes and there' s no IPR against this document.
13. Has each Author or Contributor confirmed their willingness to be listed as
such? If the number of Authors/Editors on the front page is greater than 5,
please provide a justification.
All good on that front
14. Identify any remaining I-D nits in this document. (See [the idnits tool][9]
and the checkbox items found in Guidelines to Authors of Internet-Drafts).
Simply running the idnits tool is not enough; please review the entire
guidelines document.
All good now.
15. Should any informative references be normative or vice-versa?
All good; there could have been a ref to YANG. Also I suggested to move the
LoRa reference to informational
16. List any normative references that are not freely available to anyone. Did
the community have sufficient access to review any such normative
references?
none
17. Are there any normative downward references (see [RFC 3967][10],
[BCP 97][11])? If so, list them.
There is a downref to RFC 7967.
18. Are there normative references to documents that are not ready for
advancement or are otherwise in an unclear state? If they exist, what is the
plan for their completion?
none
19. Will publication of this document change the status of any existing RFCs? If
so, does the Datatracker metadata correctly reflect this and are those RFCs
listed on the title page, in the abstract, and discussed in the
introduction? If not, explain why and point to the part of the document
where the relationship of this document to these other RFCs is discussed.
no
20. Describe the document shepherd's review of the IANA considerations section,
especially with regard to its consistency with the body of the document.
Confirm that all aspects of the document requiring IANA assignments are
associated with the appropriate reservations in IANA registries. Confirm
that any referenced IANA registries have been clearly identified. Confirm
that each newly created IANA registry specifies its initial contents,
allocations procedures, and a reasonable name (see [RFC 8126][12]).
No IANA, this specification is purely for the YANG model, no new functionality
or format.
21. List any new IANA registries that require Designated Expert Review for
future allocations. Are the instructions to the Designated Expert clear?
Please include suggestions of designated experts, if appropriate.
none
[1]: https://www.ietf.org/about/groups/iesg/
[2]: https://www.rfc-editor.org/rfc/rfc4858.html
[3]: https://www.rfc-editor.org/rfc/rfc7942.html
[4]: https://trac.ietf.org/trac/ops/wiki/yang-review-tools
[5]: https://www.rfc-editor.org/rfc/rfc8342.html
[6]: https://trac.ietf.org/trac/iesg/wiki/ExpertTopics
[7]: https://www.rfc-editor.org/info/bcp78
[8]: https://www.rfc-editor.org/info/bcp79
[9]: https://www.ietf.org/tools/idnits/
[10]: https://www.rfc-editor.org/rfc/rfc3967.html
[11]: https://www.rfc-editor.org/info/bcp97
[12]: https://www.rfc-editor.org/rfc/rfc8126.html
(*) Openschc is implementing the conversion between the local rule
representation and the representation conform to the DM in JSON and CBOR
(following -08 draft).
The code is available on github(on the scapy branch) :
•
https://github.com/openschc/openschc/blob/scapy/examples/scapy/data_model.py
For instance the openschc simples rule for comp and frag :
/-------------------------\
|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|
0000000000000001|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_RFC8724
^!
\=======================================================================================/
or
{
"DeviceID" : "udp:90.27.174.128:8888",
"SoR" : [
{
"RuleID": 6,
"RuleIDLength": 3,
"Compression": [
{"FID": "IPV6.VER", "TV": 6, "MO": "equal", "CDA": "not-sent"},
{"FID": "IPV6.TC", "TV": 0, "MO": "equal", "CDA": "not-sent"},
{"FID": "IPV6.FL", "TV": 0, "MO": "ignore","CDA": "not-sent"},
{"FID": "IPV6.LEN", "MO": "ignore","CDA": "compute-length"},
{"FID": "IPV6.NXT", "TV": 58, "MO": "equal", "CDA": "not-sent"},
{"FID": "IPV6.HOP_LMT", "TV" : 255,"MO": "ignore","CDA": "not-sent"},
{"FID": "IPV6.DEV_PREFIX","TV": "2001:470:1F21:1D2::/64",
"MO": "equal","CDA": "not-sent"},
{"FID": "IPV6.DEV_IID", "TV": "::1","MO": "equal","CDA": "not-sent"},
{"FID": "IPV6.APP_PREFIX", "MO": "ignore","CDA": "value-sent"},
{"FID": "IPV6.APP_IID", "MO": "ignore","CDA": "value-sent"}
]
},{
"RuleID" : 12,
"RuleIDLength" : 11,
"Fragmentation" : {
"FRMode": "NoAck",
"FRDirection": "UP"
}
}
]
}
is converted in JSON as
{'ietf-schc:schc': {'rule': [{'entry': [{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-version', 'field-length':
'4', 'field-position': 1,
'matching-operator': 'mo-equal',
'target-value': [{'position': 0,
'value': b'AAY='}]},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-trafficclass',
'field-length': '8', 'field-position':
1, 'matching-operator': 'mo-equal',
'target-value': [{'position': 0,
'value': b'AA=='}]},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-flowlabel', 'field-length':
'20', 'field-position': 1,
'matching-operator': 'mo-ignore',
'target-value': [{'position': 0,
'value': b'AA=='}]},
{'comp-decomp-action':
'cda-compute-length',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-payloadlength',
'field-length': '16',
'field-position': 1,
'matching-operator': 'mo-ignore'},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-nextheader', 'field-length':
'8', 'field-position': 1,
'matching-operator': 'mo-equal',
'target-value': [{'position': 0,
'value': b'ADo='}]},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-hoplimit', 'field-length':
'8', 'field-position': 1,
'matching-operator': 'mo-ignore',
'target-value': [{'position': 0,
'value': b'AP8='}]},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-devprefix', 'field-length':
'64', 'field-position': 1,
'matching-operator': 'mo-equal',
'target-value': [{'position': 0,
'value': b'IAEEcB8h'
b'AdI='}]},
{'comp-decomp-action': 'cda-not-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-deviid', 'field-length':
'64', 'field-position': 1,
'matching-operator': 'mo-equal',
'target-value': [{'position': 0,
'value': b'AAAAAAAA'
b'AAE='}]},
{'comp-decomp-action': 'cda-value-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-appprefix', 'field-length':
'64', 'field-position': 1,
'matching-operator': 'mo-ignore'},
{'comp-decomp-action': 'cda-value-sent',
'direction-indicator':
'di-bidirectional', 'field-id':
'fid-ipv6-appiid', 'field-length':
'64', 'field-position': 1,
'matching-operator': 'mo-ignore'}],
'rule-id-length': 3,
'rule-id-value': 6},
{'direction': 'di-up',
'dtag-size': 2,
'fcn-size': 3,
'fragmentation-mode': 'fragmentation-mode-no-ack',
'rcs-algorithm': 'rcs-RFC8724',
'rule-id-length': 11,
'rule-id-value': 12}]}}
This representation has been validated with yangson module.
The CORECONF representation is, supposing that the SID starts at 10000000.
b'a11a000f429aa10182a3048aa7061a000f428407040801051a000f4253091a000f4292011a000f42500d81a20100024106a7061a000f428107080801051a000f4253091a000f4292011a000f42500d81a201000240a7061a000f427d07140801051a000f4253091a000f4293011a000f42500d81a201000240a6061a000f428007100801051a000f4253091a000f4293011a000f424ca7061a000f427f07080801051a000f4253091a000f4292011a000f42500d81a2010002413aa7061a000f427e07080801051a000f4253091a000f4293011a000f42500d81a201000241ffa7061a000f427c0718400801051a000f4253091a000f4292011a000f42500d81a201000248200104701f2101d2a7061a000f427b0718400801051a000f4253091a000f4292011a000f42500d81a2010002480000000000000001a6061a000f42790718400801051a000f4253091a000f4293011a000f4251a6061a000f42780718400801051a000f4253091a000f4293011a000f4251181e06181d03a7181e0c181d0b021a000f4255181b1a000f429603021403151a000f4290'
or:
{1000090: {1:
[ {4: [{6: 1000068, 7: 4, 8: 1, 5: 1000019, 9: 1000082, 1: 1000016, 13:
[{1: 0, 2: h'06'}]},
{6: 1000065, 7: 8, 8: 1, 5: 1000019, 9: 1000082, 1: 1000016, 13:
[{1: 0, 2: h''}]}, {6: 1000061, 7: 20, 8: 1, 5: 1000019, 9:
1000083, 1: 1000016, 13: [{1: 0, 2: h''}]}, {6: 1000064, 7: 16,
8: 1, 5: 1000019, 9: 1000083, 1: 1000012}, {6: 1000063, 7: 8, 8:
1, 5: 1000019, 9: 1000082, 1: 1000016, 13: [{1: 0, 2: h'3A'}]},
{6: 1000062, 7: 8, 8: 1, 5: 1000019, 9: 1000083, 1: 1000016, 13:
[{1: 0, 2: h'FF'}]}, {6: 1000060, 7: 64, 8: 1, 5: 1000019, 9:
1000082, 1: 1000016, 13: [{1: 0, 2: h'200104701F2101D2'}]}, {6:
1000059, 7: 64, 8: 1, 5: 1000019, 9: 1000082, 1: 1000016, 13:
[{1: 0, 2: h'0000000000000001'}]}, {6: 1000057, 7: 64, 8: 1, 5:
1000019, 9: 1000083, 1: 1000017}, {6: 1000056, 7: 64, 8: 1, 5:
1000019, 9: 1000083, 1: 1000017}],
30: 6,
29: 3},
{30: 12, 29: 11, 2: 1000021, 27: 1000086, 3: 2, 20: 3, 21: 1000080}
]
}
}