Re: [core] YANG Packages for CoMI

Andy Bierman <andy@yumaworks.com> Wed, 29 July 2015 02:19 UTC

Return-Path: <andy@yumaworks.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 008EE1B3519 for <core@ietfa.amsl.com>; Tue, 28 Jul 2015 19:19:08 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.978
X-Spam-Level:
X-Spam-Status: No, score=-1.978 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, 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 WlQArejCO7nx for <core@ietfa.amsl.com>; Tue, 28 Jul 2015 19:19:04 -0700 (PDT)
Received: from mail-lb0-f180.google.com (mail-lb0-f180.google.com [209.85.217.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 815261B3504 for <core@ietf.org>; Tue, 28 Jul 2015 19:19:03 -0700 (PDT)
Received: by lbbqi7 with SMTP id qi7so86450542lbb.3 for <core@ietf.org>; Tue, 28 Jul 2015 19:19:02 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=HnrOZKKxz59Y0N92Bb8hqIpQpB8kmkof8tLZUQmZs7U=; b=ZDzW65rHdkWcH9I27IoWfaJwy9XFM73thmG/MemSYV4jmggVwp5vof+kvG4zvaaRV1 ekM7FL9HNpo7g73hdmk39BALyOvRTl6C+brR2yx488ePa4D/9A2WnMerJ8v/K40T7oUQ HI+qBOFtfKMb/VhBbqDID9ryEwoXpXJVYerHu6QDPmQ+QUee9J84mcgjvPLvhQIWcI7F JlSdSpsLXpMra/ej9cWwQ0e8A/JQ4q2Cc+xfbK6BKZehhYoRY7nag3pXo/oNDol8Z3Vi 6o5YJ8yteU9NJ83ByxijDEMTEDedXpt5u67s3iSIgy/yr1DbyqYG5Mk4l3SpfJpr8+wt O+ZA==
X-Gm-Message-State: ALoCoQnsDAYMMLPrZ2NpPozUbcPYrxkvfOS3hhl6Q3I2YB6TG8CnMO5H3XmSAuvfD+ZDJ/s5Cp/P
MIME-Version: 1.0
X-Received: by 10.112.46.130 with SMTP id v2mr35727882lbm.119.1438136341885; Tue, 28 Jul 2015 19:19:01 -0700 (PDT)
Received: by 10.112.200.102 with HTTP; Tue, 28 Jul 2015 19:19:01 -0700 (PDT)
In-Reply-To: <55B72969.4050006@ackl.io>
References: <CABCOCHT7J71iiAgcofradE38JepEJLsPkbmwtivY=HMyij1Svg@mail.gmail.com> <4dde82ad1cd4d261b598cb0e851cdf1c@xs4all.nl> <CABCOCHTukKKkP9wgP4BrtAcKwDd7eSLvFR_x2kJptW+Dfo_0Lw@mail.gmail.com> <55B6070A.1020007@ackl.io> <CABCOCHTOtNvPgAV9R7bnMQDZtTUOmtnadZrGn13X7diQUGseXw@mail.gmail.com> <55B72969.4050006@ackl.io>
Date: Tue, 28 Jul 2015 19:19:01 -0700
Message-ID: <CABCOCHQhYidrtDipzGeEj7HhscLy+70pneDNTKNh59PfXvCA6A@mail.gmail.com>
From: Andy Bierman <andy@yumaworks.com>
To: Alexander Pelov <a@ackl.io>
Content-Type: multipart/alternative; boundary="001a1134aee8cc0d0b051bfa35f2"
Archived-At: <http://mailarchive.ietf.org/arch/msg/core/77cKQO_WbaNSty8I9PRk_-V8K6c>
Cc: Core <core@ietf.org>
Subject: Re: [core] YANG Packages for CoMI
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: Wed, 29 Jul 2015 02:19:08 -0000

On Tue, Jul 28, 2015 at 12:04 AM, Alexander Pelov <a@ackl.io> wrote:

>  Hi Andy,
>
> Le 27/07/2015 20:01, Andy Bierman a écrit :
>
>
>
> On Mon, Jul 27, 2015 at 3:25 AM, Alexander Pelov < <alexander@ackl.io>
> alexander@ackl.io> wrote:
>
>>  Hi Andy!
>>
>> Thanks for the draft! Seems a good start to get the things moving in the
>> direction of having a good, structured introspection mechanism for module
>> discovery!
>>
>> I'm not completely sure that it will be a static document. You still need
>> to think of the possibility of a firmware upgrade, in which case you have
>> to consider the clients which have obtained your previous package
>> descriptions.
>>
>>
>  Each package has a name and a revision-date.
> The expected use for CoMI would be a new
> package revision for each firmware release.
>
> I meant that there should be a mechanism for the client to be notified
> when the YANG package definition changes. This may be a rare event, but
> imagine a new client arrives and discovers the server 1 minute before the
> server gets a new firmware release (or some other event, making it change
> its package definition).
>


I agree.
There can be a YANG Package Library URI

  /mg/pkg.uri

URI of the YANG Package Library resource to GET or Observe

The package data tree could be much smaller than the module library tree.

  container packages {
     leaf pkg-set-id { type uint32; }
     list package {
        key name;
        leaf name { type string; }
        leaf rev { type yang:revision-date; }
     }
   }


  { "packages": {
     "pkg-set-id":42,
     "package": [
       {
          "name":"example-sensor314",
          "rev":"2015-06-14"
       }
     ]
   }
 }



> I would think that if a client is expected to keep long-term association
> to the server, it should use Observe or NOTIFY. The latter will work if the
> package is defined as module.
>
>
>
>
>>  Why don't you want it to be a YANG module? I would suppose that for a
>> structured numbering scheme (such as CoOL) we could have a nice fixed entry
>> point for such introspection resource, e.g. moduleID = 1. Alternatively, I
>> would think that it should be discoverable through .well-known/core
>>
>>
>  Not sure what you mean.
> This is static data used to identify a set of YANG modules.
> Do you mean why not have the contents of a package be YANG objects
> to read from the server?  This would be even more data than the
> current YANG module library.
>
>  The point of a package list is to avoid listing all the modules,
> features,
> and revision dates.  There is a YANG Package Identifier in sec. 4
>
>    urn:ietf:params:xml:ns:yang:pkg?name=example-sensor314&rev=2015-07-01
>
>
>  This would be the entire response needed to discover the entire YANG
> implementation by the server. The size remains the same no matter how many
> modules and features are added over time.
>
>
> Ah, OK! Now I understand! It was not obvious to me that you were aiming at
> having the package definition be detached from the server. I like that!
> This, however makes me think about something else - you should have a way
> to obtain the package from the sensor. However, this goes a little bit in
> the sense of having YANG packages being mandatory for CoMI. I like the
> "uses-package" statement, as this could be used to have full definition of
> the modules on a server.
>
> I would suppose that you could represent the information of a YANG package
> as a YANG module. Then, a client could query the server with a
> select/fields statement to obtain only the package identifier. IF the
> client wants, it could obtain the whole package content from the server:
>
> E.g. for a YANG module definition such as:
> module yang-package {
>   ...
>   leaf yang-package-uri {
>     type string;
>   }
>
>   container package {
>     leaf organization {type string;}
>     leaf contact {type string;}
>     leaf description {type string;}
>     leaf revision {type string;}
>     container imports-module {
>        key module-name;
>        leaf module-name {type string;}
>        leaf module-cool-id {type int32;}
>     }
>     container uses-module {
>        ...
>     }
>     ...
>   }
> }
>
>

The point of the YANG package is that it serves as an offline handle
for lots of YANG details related to a set of modules.

NETCONF and RESTCONF just advertise the conformance details
for each module (name, revision, features, deviations). There is
a <get-schema> operation in both protocols to allow the client to retrieve
the actual YANG files.  There is no YANG module that modules
YANG module contents.

The same approach <get-pkg-schema> should be used in CoMI,
except I would expect a centralized server to have that data,
not any constrained servers.




module ID for this module would be fixed in CoOL to 1, so yang-package-uri
> will have CoOL ID 2049.
>
> In CoOL this would be as getting :
> GET /cdat?fields(2049)
>
> Response:
> {
>
> 2049:"urn:ietf:params:xml:ns:yang:pkg?name=example-sensor314&rev=2015-07-01"
> }
>
>
Maybe this could be even more optimized.
>


I don't know if package numbers are really needed.
The entire package library above would fit in 128 bytes.



Andy



>
> Now, if the client has no idea how to find this URN, it would simply  GET
> /cdat?fields(2048) and retrieve the YANG package information from the
> server.
>
>
>
>
>
>
>>  A point to make is that we can have alias mappings through this
>> introspection mechanism. Defining such an introspection mechanism for the
>> aliases was actually one of the work I was considering for CoOL.
>>
>>
>  RESTCONF and NETCONF provide the ability for the client to retrieve
> the schema, and get all the meta-data, for every module.
> IMO this should be done by a centralized server in CoMI.
>
>  But I agree the package data could include alias mappings.
> This might be a way to convert YANG Hash to COOL for example,
> to optimize frequently used identifiers..
>
>
> Maybe this should also be the way to handle alias attribution, e.g. add a
> "alias" statement, which indicates the mapping alias-id -> CoOL id / CoMI
> hash / full identifier.
>
> module yang-package {
> ....
>   container alias {
>     key cool-id;
>     leaf cool-id {type int32};
>     leaf alias-id {type int32};
>   }
> }
>
> So you can GET /cdat?fields(2058) and have
> {
>   2058: [
>     {11: 29834394, 12:1},
>     {11: 99999999, 12:2}
>     {11: 88888384, 12:3}
>   ]
> }
>
> assuming the following CoOL id automatic attribution:
> alias -> node ID=10
> cool-id -> node Id=11
> alias-id -> node ID=12
> and some random IDs to be mapped (29834394, 99999999, 88888384).
>
> Ideally, of course, you would be fetching this information from a server
> somewhere on the Internet, so that you don't fetch from your constrained
> server.
>
> Best,
> Alexander
>
>
>
>
>
>
>>  Best,
>> Alexander
>>
>
>  Andy
>
>
>>
>> Le 27/07/2015 08:29, Andy Bierman a écrit :
>>
>>
>>
>> On Sun, Jul 26, 2015 at 11:26 PM, peter van der Stok <
>> <stokcons@xs4all.nl>stokcons@xs4all.nl> wrote:
>>
>>> HI Andy,
>>>
>>> Is the proposal to make YANG packages compulsory over yang-library in
>>> Comi servers and clients?
>>>
>>>
>>  No, it would be optional.
>> Another solution approach would be to make the module-set-id values
>> global instead of per-server. That might be less work perhaps.
>>
>>
>>  Peter
>>>
>>
>>  Andy
>>
>>
>>>
>>> Andy Bierman schreef op 2015-07-26 19:44:
>>>
>>>> Hi,
>>>>
>>>> Michel raised some issues with the YANG library draft
>>>> http://datatracker.ietf.org/doc/draft-ietf-netconf-yang-library/
>>>>
>>>> Maybe CoMI needs its own optimized module library.
>>>> I am concerned that data sizes of the YANG library will be
>>>> too big in some really constrained environments.
>>>>
>>>> I wrote a draft that defines a way to specify the contents of the
>>>> YANG library in a single static document, called a YANG package.
>>>> http://datatracker.ietf.org/doc/draft-bierman-netmod-yang-package/
>>>>
>>>> If there was a "shorthand" resource that listed YANG packages, instead
>>>> of YANG modules, then the CoMI client that supported YANG packages
>>>> could read that instead of the module library.
>>>>
>>>> The YANG package message response can identify a single package
>>>> (e.g. match the firmware) so the size of the response will remain very
>>>> small, and not depend on the entire list of modules, features,
>>>> and deviations. The data savings could 1000X for 100 modules.
>>>>
>>>> The client needs to retrieve the library first-time and anytime it
>>>> changes.
>>>> The module-set-id values are per-server, not global. This could be a
>>>> significant bottleneck when a CoMI client starts or restarts, and
>>>> manages lots of servers.
>>>>
>>>> Andy
>>>>
>>>>
>>>> _______________________________________________
>>>> core mailing list
>>>> core@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/core
>>>>
>>>
>>
>>
>> _______________________________________________
>> core mailing listcore@ietf.orghttps://www.ietf.org/mailman/listinfo/core
>>
>>
>>
>
>