[yang-doctors] YANG Doctor Review of draft-penno-sfc-yang-15

Martin Bjorklund <mbj@tail-f.com> Mon, 20 June 2016 13:19 UTC

Return-Path: <mbj@tail-f.com>
X-Original-To: yang-doctors@ietfa.amsl.com
Delivered-To: yang-doctors@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8F91F12D109 for <yang-doctors@ietfa.amsl.com>; Mon, 20 Jun 2016 06:19:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.327
X-Spam-Level:
X-Spam-Status: No, score=-3.327 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-1.426, SPF_PASS=-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 ZOznlfxP_FwD for <yang-doctors@ietfa.amsl.com>; Mon, 20 Jun 2016 06:19:49 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 11FB612D0D3 for <yang-doctors@ietf.org>; Mon, 20 Jun 2016 06:19:49 -0700 (PDT)
Received: from localhost (unknown [173.38.220.44]) by mail.tail-f.com (Postfix) with ESMTPSA id 8AA2F1AE0312; Mon, 20 Jun 2016 15:19:47 +0200 (CEST)
Date: Mon, 20 Jun 2016 15:20:11 +0200
Message-Id: <20160620.152011.68832543565519524.mbj@tail-f.com>
To: repenno@cisco.com
From: Martin Bjorklund <mbj@tail-f.com>
X-Mailer: Mew version 6.5 on Emacs 24.3 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/yang-doctors/Pe2S9w4WJqAXS1_BtEgbmoWR0JM>
Cc: yang-doctors@ietf.org
Subject: [yang-doctors] YANG Doctor Review of draft-penno-sfc-yang-15
X-BeenThere: yang-doctors@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: email list of the yang-doctors directorate <yang-doctors.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/yang-doctors>, <mailto:yang-doctors-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/yang-doctors/>
List-Post: <mailto:yang-doctors@ietf.org>
List-Help: <mailto:yang-doctors-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/yang-doctors>, <mailto:yang-doctors-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 20 Jun 2016 13:19:50 -0000

Hi,

I am the assigned YANG doctor for this individual submission document.

I have done a first review of this document, focusing mainly on pure
YANG issues.

Here are my comments.

o  service-function-forwarder imports an outdated version of
   ietf-inet-types.  Why is this module imported by revision at all?


o  Obvsiously, if adopted by the IETF, all modules need to be renamed and
   all namespaces change.


o  Why so many modules?  Do you expect them to have independent life
   cycles?  If not, maybe consider using submodules.


o  If adopted by the WG, remove the 'deprecated' defintions.


o  Why do you have special types for all sn-name, sfc-name etc?  If
   there is some important semantics or syntax this makes sense, but
   that does not seem to be the case here.


o  There are a couple of rpcs defined that manipulate the
   configuration.  This is bad design; configuration manipulation is
   defined in the protocol.  These kinds of rpcs are often not
   interoperable.  For example, you have an rpc called
   'delete-service-function'.  Which datastore is affected?  This
   comment applies to 'delete-all-service-function',
   'put-service-function', 'delete-service-function',
   'put-service-function-chains', and possibly
   'instantiate-service-function-chain' (I have no idea what this rpc
   actually does).


o  The rpc 'read-service-function' should also be removed.  The
   protocol handles reading of data better than special rpcs.  For
   example, both NETCONF and RESTCONF support getting a subset of the
   available data.


o  There are a couple of rpcs for manipulating rendered service
   paths.  A rendered service path is config false, and as such they
   cannot be directly manipulated with the generic protocol
   operations; thus it is ok to have special rpcs to write / delete
   them.  However, these rpcs need to be better described.  If I
   create a rendered path, is it expected to survive reboots?  Can it
   be deleted by the server at any time?

   Also, can these rendered paths be created by some other means than
   through these rpcs?  If not, maybe they should be modelled as
   config true instead?


o  How is "rendered-service-path-first-hop" different from
   "rendered-service-path-hop[hop-number=1]?

   I notice that these two structures have somewhat different
   content.


o  Both SF and SFF have a writable leaf called "rest-uri".  This is
   protocol-specific and should be removed.  (Also, what value do you
   expect an operator to write there?)


o  service-locator defines 'other-locator'.  I suggest you remove it.
   When would an operator actually write something there, and what
   would it mean?  I expect vendors/future specs to augment the
   locator-type choice with new cases, rather than using a catch-all
   'other-name' leaf.


o  Suggest you rename list "supported-dataplanelocator-types" to
   "supported-dataplanelocator-type".


o  Suggest you rename list "sff-interfaces" to "sff-interface".


o  The list statistic-by-timestamp has a uint64 timestamp as key:

              description
                  "Date and time of record creation in milliseconds
                  counting from 1.1.1970 00:00:00 UTC (= 0)";

   I suggest using yang:date-and-time instead.  A server that can keep
   the uint64 timestamp can easily convert to it to a
   yang:date-and-time.


o  Suggest you rename container "service-statistic" to
   "service-statistics".


o  In sfc-common you have:

    typedef sft-type-name {
        type string;
        description "Service function type name";
    }

   Is this really a free-form string?  Can an operator put any value
   there?


o  In service-function you have:

    leaf ip-mgmt-address {
      type inet:ip-address;
      description
        "The IP and port used to configure this service-function";
    }

   First, it is not IP and port; just IP.

   Second, this seems to be very underspecified.  Which protocol is
   used?  Which credentials?  What is the real intention of this leaf?

   Samme comment applies to this leaf in other models.


o  In service-function-forwarder you have:

          leaf sff-interface {
            type string;
            description
              "An individual interface on the SFF connected to the
               SF";
          }

   What is this string?


o   In list sfc-service-function you have an optional leaf 'order'.
    What happens if this leaf is not set?  What happens if two entries
    have the saem order?

    YANG has built-in support for ordered lists.  I suggest you make
    this list 'ordered-by user' instead.



/martin