Skip to main content

Shepherd writeup
draft-ietf-lpwan-schc-yang-data-model

# 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}
        ]
    }
}

Back