[core] map (5), ordering vs YANG SID in ietf-core-yang-cbor

Michael Richardson <mcr+ietf@sandelman.ca> Thu, 17 August 2017 03:03 UTC

Return-Path: <mcr+ietf@sandelman.ca>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 166A413217D; Wed, 16 Aug 2017 20:03:41 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id u7opcR0pIHCm; Wed, 16 Aug 2017 20:03:38 -0700 (PDT)
Received: from tuna.sandelman.ca (tuna.sandelman.ca [209.87.249.19]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id F2496132638; Wed, 16 Aug 2017 20:03:36 -0700 (PDT)
Received: from sandelman.ca (obiwan.sandelman.ca [IPv6:2607:f0b0:f:2::247]) by tuna.sandelman.ca (Postfix) with ESMTP id BAA02201AC; Wed, 16 Aug 2017 23:06:16 -0400 (EDT)
Received: from obiwan.sandelman.ca (localhost [IPv6:::1]) by sandelman.ca (Postfix) with ESMTP id 1D77780B17; Wed, 16 Aug 2017 23:03:36 -0400 (EDT)
From: Michael Richardson <mcr+ietf@sandelman.ca>
To: cbor@ietf.org, core@ietf.org
reply-to: core@ietf.org
X-Attribution: mcr
X-Mailer: MH-E 8.6; nmh 1.6+dev; GNU Emacs 24.5.1
X-Face: $\n1pF)h^`}$H>Hk{L"x@)JS7<%Az}5RyS@k9X%29-lHB$Ti.V>2bi.~ehC0; <'$9xN5Ub# z!G,p`nR&p7Fz@^UXIn156S8.~^@MJ*mMsD7=QFeq%AL4m<nPbLgmtKK-5dC@#:k
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-="; micalg="pgp-sha256"; protocol="application/pgp-signature"
Date: Wed, 16 Aug 2017 23:03:36 -0400
Message-ID: <13753.1502939016@obiwan.sandelman.ca>
Archived-At: <https://mailarchive.ietf.org/arch/msg/core/IoeLdtvmJ4xOefN7WW9hpJJy0CA>
Subject: [core] map (5), ordering vs YANG SID in ietf-core-yang-cbor
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 17 Aug 2017 03:03:41 -0000

Hi. I was trying to generate some code to implement a YANG model in
CBOR using:
  https://tools.ietf.org/html/draft-ietf-core-yang-cbor-05#section-4.2

which quite clearly says that I'm to use a CBOR map type (5).  Except that
my understanding of SIDs is that they are deltas for the key part.
(My other problem is that I don't have a SID until the SID document
progresses, but I can use the experimental range for now)

In many languages for which there are easy to use CBOR bindings, ruby,
python, perl, js, java, the CBOR map translates to a hash or directionary.
So I wondered how I could do deltas on keys in such an unordered structure...

My reading of:
  https://tools.ietf.org/html/draft-ietf-core-yang-cbor-05#section-4.2
about type 5, and then I read:
  https://tools.ietf.org/html/rfc7049#section-3.7

which says:
   The CBOR data model for maps does not allow ascribing semantics to
   the order of the key/value pairs in the map representation.

so, it seems that the SID concept as described in ietf-core-yang-cbor can not
work using the map type!!!
At first I thought it was just a language binding issue; that I needed
ordered sets of some kind, but no... It violates the above property.

Solutions that I can imagine:
1) use an array of 2-element arrays (requires an extra byte for each inner
   array!)
2) use an array 2x the size, and let the application reconstruct things as a
   hash after taking in account the SID delta.
3) use one of the discussed point/multi-dimensional-array/etc. structures
   that I believe were presented at IETF99... I think draft-jroatch-cbor-tags
   was the document.

I think that I favour (2), as being the most expedient and easiest to implement.

--
Michael Richardson <mcr+IETF@sandelman.ca>, Sandelman Software Works
 -= IPv6 IoT consulting =-