Re: [core] YANG list to CBOR mapping
Michel Veillette <Michel.Veillette@trilliantinc.com> Mon, 23 November 2015 16:16 UTC
Return-Path: <Michel.Veillette@trilliantinc.com>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 033C21A89EB for <core@ietfa.amsl.com>; Mon, 23 Nov 2015 08:16:47 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.902
X-Spam-Level:
X-Spam-Status: No, score=-1.902 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham
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 ZFClv8NhjAq7 for <core@ietfa.amsl.com>; Mon, 23 Nov 2015 08:16:43 -0800 (PST)
Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0723.outbound.protection.outlook.com [IPv6:2a01:111:f400:fc10::1:723]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5EDE01A89ED for <core@ietf.org>; Mon, 23 Nov 2015 08:16:42 -0800 (PST)
Received: from BLUPR06MB1763.namprd06.prod.outlook.com (10.162.224.149) by BLUPR06MB1763.namprd06.prod.outlook.com (10.162.224.149) with Microsoft SMTP Server (TLS) id 15.1.331.20; Mon, 23 Nov 2015 16:16:24 +0000
Received: from BLUPR06MB1763.namprd06.prod.outlook.com ([10.162.224.149]) by BLUPR06MB1763.namprd06.prod.outlook.com ([10.162.224.149]) with mapi id 15.01.0331.019; Mon, 23 Nov 2015 16:16:24 +0000
From: Michel Veillette <Michel.Veillette@trilliantinc.com>
To: "consultancy@vanderstok.org" <consultancy@vanderstok.org>
Thread-Topic: [core] YANG list to CBOR mapping
Thread-Index: AQHRIrIaNU9q4tL9iE+AdF+qow8vM56lToLAgAQGNoCAAHb+YA==
Date: Mon, 23 Nov 2015 16:16:24 +0000
Message-ID: <BLUPR06MB17633FB706D866D2C3E917B0FE070@BLUPR06MB1763.namprd06.prod.outlook.com>
References: <170106a36217a736a4b55991c4a5cf6a@xs4all.nl> <BLUPR06MB1763CC28443C787020D60CF7FE1A0@BLUPR06MB1763.namprd06.prod.outlook.com> <b02eb0119020ae52bbddfaed84dc1b01@xs4all.nl>
In-Reply-To: <b02eb0119020ae52bbddfaed84dc1b01@xs4all.nl>
Accept-Language: fr-CA, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: spf=none (sender IP is ) smtp.mailfrom=Michel.Veillette@trilliantinc.com;
x-originating-ip: [207.96.192.122]
x-microsoft-exchange-diagnostics: 1; BLUPR06MB1763; 5:DhYHWzv7XIkJM1tRP2umVrxFLuaBtbwBIFfNfkeq70saUv+fAPtJeDHxY0RtN5y8Ljt0u16pk5rhgCO5xOCAmGQr3FZf6GwVlfeVaYzOU8/gt5EEErKMffhfBgXiDH3K9zN/4JG5puVFqDJPsDKIQQ==; 24:f498x3H4VfLGowcM5mcb+FLG9XgrTw+KtuSNSB314N/z1tZz3VHL7OYVOdudy6FpgrkEqD4XXVC9f4kwP9oh1GqmPzG0lBX9tkPdGLF0rkU=
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR06MB1763;
x-microsoft-antispam-prvs: <BLUPR06MB1763A313DEAC540639DAFBC8FE070@BLUPR06MB1763.namprd06.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(256376046250027)(262738631018165);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(10201501046)(3002001); SRVR:BLUPR06MB1763; BCL:0; PCL:0; RULEID:; SRVR:BLUPR06MB1763;
x-forefront-prvs: 07697999E6
x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(6009001)(377454003)(13464003)(377424004)(38414003)(199003)(189002)(40100003)(5008740100001)(5007970100001)(19580395003)(19580405001)(586003)(50986999)(99286002)(6116002)(106116001)(86362001)(105586002)(2351001)(106356001)(87936001)(101416001)(76176999)(54356999)(15975445007)(77096005)(4001150100001)(3846002)(74316001)(102836003)(2900100001)(5001960100002)(5002640100001)(92566002)(2501003)(110136002)(5003600100002)(97736004)(66066001)(76576001)(2950100001)(15395725005)(10400500002)(15974865002)(11100500001)(5004730100002)(33656002)(122556002)(81156007)(189998001)(7059030); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR06MB1763; H:BLUPR06MB1763.namprd06.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en;
received-spf: None (protection.outlook.com: trilliantinc.com does not designate permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: trilliantinc.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2015 16:16:24.4037 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4f6fbd13-0dfb-4150-85c3-d43260c04309
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR06MB1763
Archived-At: <http://mailarchive.ietf.org/arch/msg/core/EGV_E2A3rNaZ5F8kpg4Jmg0ArLM>
Cc: "ana@ackl.io" <ana@ackl.io>, Core <core@ietf.org>
Subject: Re: [core] YANG list to CBOR mapping
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.15
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: Mon, 23 Nov 2015 16:16:47 -0000
Hi Peter Have you defined an MergePatch() function similar to RFC 7396 section 2 for your proposed extension? Do we intent to support two PATCH approaches, RFC 7396 style and draft-ietf-netconf-yang-patch style? IF so, why list need to be supported by the RFC 7396 style since this approach provide a partial coverage (list without keys and user ordered list is not fully supported) ? Should we address list only in the draft-ietf-netconf-yang-patch style? Michel Veillette System Architecture Director Trilliant Inc. Tel: 450-375-0556 ext. 237 -----Original Message----- From: peter van der Stok [mailto:stokcons@xs4all.nl] Sent: November-23-15 3:58 AM To: Michel Veillette <Michel.Veillette@trilliantinc.com> Subject: RE: [core] YANG list to CBOR mapping Hi Michel, the point is to express in the payload the replacement criteria independent of application. It is a CBOR extension to the patch format of RFC 7396. The latter allows the replacement of complete arrays, not a subset of the array. Peter Michel Veillette schreef op 2015-11-20 21:41: > Reference: YANG list to CBOR mapping > https://core-wg.github.io/yang-cbor/#rfc.section.3.1.17 > > Hi Peter > > Your proposed solution for lists have some drawbacks and I'll like to > understand better its advantages to evaluate the PROS and CONS. > > List of CONS > - Your proposed solution is not aligned with > draft-ietf-netmod-yang-json-06 > - Your proposed solution take one extra byte per list entry > - Your proposed solution use a map as key for a map, which is uncommon > (Illegal in JSON but not in CBOR) > - The encoding of list defined with keys or without keys are done > differently > > CoMI-CoOL clients and servers known which data nodes of a list are > keys and which ones are associated information. > I don’t the see value of implementing the keys on the left side of the > ':' (key) and the rest of the data nodes on the right side of the ':" > (value). > This semantic is already known by both ends, why we need to add it to > the encoding? > > === Examples > > Map of map solution with CoMI IDs (88 Bytes) > { > 11111111 : { > {22222222 : "book1", 33333333 : "author2"} : {44444444 : 500, > 55555555: 66} , > {22222222 : "book5", 33333333 : "author3"} : {44444444 : 444, > 55555555: 11} > } > } > > Array of map solution with CoMI IDs (86 Bytes) > { > 11111111 : [ > { > 22222222 : "book1", > 33333333 : "author2", > 44444444 : 500, > 55555555: 66 > } , > { > 22222222 : "book5", > 33333333 : "author3", > 44444444 : 444, > 55555555: 11 > } > ] > } > > Map of map solution with CoOL IDs (56 Bytes) > > { > 11111111 : { > {2 : "book1", 3 : "author2"} : {4 : 500, 5: 66} , > {2 : "book5", 3 : "author3"} : {4 : 444, 5: 11} > } > } > > Array of map solution with CoOL IDs (54 Bytes) > > { > 11111111 : [ > { > 2 : "book1", > 3 : "author2", > 4 : 500, > 5: 66 > } , > { > 2 : "book5", > 3 : "author3", > 4 : 444, > 5: 11 > } > ] > } > > You say "It is the wish to transport only those list elements with a > unique key value, either to support a PATCH or a FETCH command". > I don’t see why this is not the case for both representations. > > Michel Veillette > System Architecture Director > Trilliant Inc. > Tel: 450-375-0556 ext. 237 > michel.veillette@trilliantinc.com > www.trilliantinc.com > > > -----Original Message----- > From: core [mailto:core-bounces@ietf.org] On Behalf Of peter van der > Stok > Sent: November-19-15 5:06 AM > To: Core <core@ietf.org> > Cc: lhotka@nic.cz > Subject: [core] YANG list to CBOR mapping > > Hi CoOL authors, > > This e_mail complements my earlier e-mail on YANG to CBOR mapping, and > explains the proposed list encoding. > > Both the draft yang-json and the CoOL draft encode a list as an array. > In the yang-json case as a JSON array, and in the CoOL case as major > type 4 of major type 5 objects. > This encoding prevents the selection of list instances on the basis of > the key values from the payload alone. In CoMI the list is encoded as > a major type 5 of major type 5 objects. This deviation from the > yang-json mapping is motivated by the wish to transport individual > list instances and identify the instances in the payload from the key > values. This is especially important in case of PATCH operation on > list instances. > Two cases are to be looked at: (1) the list definition specifies one > or more key elements, and (2) the list definition does not specify a > key element. We will start with a list containing key elements. > It is the wish to transport only those list elements with a unique key > value, either to support a PATCH or a FETCH command. Therefore it is > required that the payload allows the selection and identification of > these list element on the basis of their key values. Using the > diagnostic JSON notation used for CBOR diagnostics, the payload > containing a number of elements with key values should look like a > JSON object with the structure list-name: {key: value}. Both key and > value are composed of JSON objects separated by commas. For example > consider the following YANG list specification: > module foo { > namespace http://example.com/book; > prefix “fo”; > revision 2015-06-07; > > list B { > key “key1 key2”; > leaf key1 {type string;} > leaf key2 {type string;} > leaf coll {type int32;} > leaf counter {type int32;} > } > } > > Consider the transport of two instances specified by <“key1” = > “book1”, “key2” = “author2”> and by <“key1” = “book5”, “key2” = > “author3”> out of a larger set of instances. The representation is > different from the yang-json one for the reasons explained above. > > The payload will look like: > {"B" :{ > {"key1" : "book1", "key2" : "author2"} : > {"coll" : 500, "counter": 66} , > {"key1" : "book5", "key2" : "author3"} : > {"coll" : 444, "counter": 11} > } > } > > > Which translated to CBOR yields: > > a1 # map(1) > 61 # text(1) > 42 # "B" > a2 # map(2) > a2 # map(2) > 64 # text(4) > 6b657931 # "key1" > 65 # text(5) > 626f6f6b31 # "book1" > 64 # text(4) > 6b657932 # "key2" > 67 # text(7) > 617574686f7232 # "author2" > a2 # map(2) > 64 # text(4) > 636f6c6c # "coll" > 19 01f4 # unsigned(500) > 67 # text(7) > 636f756e746572 # "counter" > 18 42 # unsigned(66) > a2 # map(2) > 64 # text(4) > 6b657931 # "key1" > 65 # text(5) > 626f6f6b35 # "book5" > 64 # text(4) > 6b657932 # "key2" > 67 # text(7) > 617574686f7233 # "author3" > a2 # map(2) > 64 # text(4) > 636f6c6c # "coll" > 19 01bc # unsigned(444) > 67 # text(7) > 636f756e746572 # "counter" > 0b # unsigned(11) > > The corresponding yang-json draft encoding - that allows transport of > a selection of instances- does not specify the key fields and would > have looked like: > > {"B" : [ > {"key1" : "book1", > "key2" : "author2”, > "coll" : 500, > "counter": 66 > } , > {"key1" : "book5", > "key2" : "author3", > "coll" : 444, > "counter": 11, > } > ] > } > > Suppose there are no key elements specified. In that case it is > impossible to specify the wanted list elements, and always the whole > list must be transported. In the case of a list without key > specification is is best to use major type 4 composed of major type 5 > to transport the list, as is specified in yang-json draft. > > Consider the following YANG list > > Module foo{ > Namespace http://example.com/book; > Prefix “bo” > Revision 2015-06-7 > List B { > Leaf title {type string;} > Leaf author {type string;} > Leaf coll {type int32} > Leaf counter {type int32} > } > } > > Suppose the list contains two elements. The transport payload of the > two elements looks like: > > {"B" :[ > {"title" : "book1", "author" : "author2", "coll" : 500, "counter": > 66} , > {"title" : "book5", "author" : "author3", “coll" : 444, > "counter": > 11} > ] > } > > This payload is identical to the yang-json payload. > Which yields the corresponding CBOR code. > > a1 # map(1) > 61 # text(1) > 42 # "B" > 82 # array(2) > a4 # map(4) > 65 # text(5) > 7469746c65 # "title" > 65 # text(5) > 626f6f6b31 # "book1" > 66 # text(6) > 617574686f72 # "author" > 67 # text(7) > 617574686f7232 # "author2" > 64 # text(4) > 636f6c6c # "coll" > 19 01f4 # unsigned(500) > 67 # text(7) > 636f756e746572 # "counter" > 18 42 # unsigned(66) > a4 # map(4) > 65 # text(5) > 7469746c65 # "title" > 65 # text(5) > 626f6f6b35 # "book5" > 66 # text(6) > 617574686f72 # "author" > 67 # text(7) > 617574686f7233 # "author3" > 64 # text(4) > 636f6c6c # "coll" > 19 01bc # unsigned(444) > 67 # text(7) > 636f756e746572 # "counter" > 0b # unsigned(11) > > > -- > Peter van der Stok > vanderstok consultancy > mailto: consultancy@vanderstok.org > > _______________________________________________ > core mailing list > core@ietf.org > https://www.ietf.org/mailman/listinfo/core
- [core] YANG list to CBOR mapping peter van der Stok
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping peter van der Stok
- Re: [core] YANG list to CBOR mapping Michel Veillette
- Re: [core] YANG list to CBOR mapping Carsten Bormann
- Re: [core] YANG list to CBOR mapping peter van der Stok