[Lsr] Benjamin Kaduk's Discuss on draft-ietf-isis-yang-isis-cfg-40: (with DISCUSS and COMMENT)

Benjamin Kaduk via Datatracker <noreply@ietf.org> Wed, 02 October 2019 01:16 UTC

Return-Path: <noreply@ietf.org>
X-Original-To: lsr@ietf.org
Delivered-To: lsr@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 7100B120073; Tue, 1 Oct 2019 18:16:52 -0700 (PDT)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Benjamin Kaduk via Datatracker <noreply@ietf.org>
To: The IESG <iesg@ietf.org>
Cc: draft-ietf-isis-yang-isis-cfg@ietf.org, Yingzhen Qu <yingzhen.ietf@gmail.com>, aretana.ietf@gmail.com, lsr-chairs@ietf.org, yingzhen.ietf@gmail.com, lsr@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.104.0
Auto-Submitted: auto-generated
Precedence: bulk
Reply-To: Benjamin Kaduk <kaduk@mit.edu>
Message-ID: <156997901245.26411.13754348016200348607.idtracker@ietfa.amsl.com>
Date: Tue, 01 Oct 2019 18:16:52 -0700
Archived-At: <https://mailarchive.ietf.org/arch/msg/lsr/_xavPzbQvs322yUlRcpDl_08xvs>
Subject: [Lsr] Benjamin Kaduk's Discuss on draft-ietf-isis-yang-isis-cfg-40: (with DISCUSS and COMMENT)
X-BeenThere: lsr@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Link State Routing Working Group <lsr.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/lsr>, <mailto:lsr-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/lsr/>
List-Post: <mailto:lsr@ietf.org>
List-Help: <mailto:lsr-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/lsr>, <mailto:lsr-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 02 Oct 2019 01:16:52 -0000

Benjamin Kaduk has entered the following ballot position for
draft-ietf-isis-yang-isis-cfg-40: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-isis-yang-isis-cfg/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Perhaps the most minor thing that could be Discuss-level, and should be
trivial to resolve, but:

The "i-e" leaf in groupings prefix-ipv4-std and neighbor does not say
whether boolean value true corresponds to internal or external.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Section 1

   This document defines a YANG [RFC7950] data model for IS-IS routing
   protocol.

nit: "the IS-IS routing protocol"

Section 2.8

   This YANG module supports LFA (Loop Free Alternates) [RFC5286] and
   remote LFA [RFC7490] as IP Fast Re-Route (FRR) techniques.  The
   "fast-reroute" container may be augmented by other models to support
   other IP FRR flavors (MRT, TI-LFA, etc.).

If we're going to give examples of other flavors, do we want to have
informative references for them?  (This is particularly relevant since
we define enumeration values for them in the "alternate-type"
enumeration.)

Section 6

     identity lsp-attached-default-metric-flag {
         base lsp-flag;
         description "Set when originator is attached to
              another area using the referred metric.";

nit(?): I'm not sure whether the "referred" in the description is
appropriate given the "default" in the identity name.

     feature ldp-igp-sync {
       description
         "LDP IGP synchronization.";

nit: the surrounding context suggests that "Support for" would give a
more consistent style.  Maybe for auto-cost, te-rid, max-ecmp,
lsp-refresh, and admin-control as well.

     feature nlpid-control {
       description
         "This feature controls the advertisement
          of support NLPID within IS-IS configuration.";

nit: "support for"

     feature maximum-area-addresses {
       description
         "Support of maximum-area-addresses config.";

nit: s/of/for/

           leaf alternate-type {
             type enumeration {
               [...]
               enum other {
                 description
                   "Unknown alternate type.";

Do I remember correctly that enumerations are not extensible in the
future?  I don't know how relevant that would be here, though.

In the "protection-available" container, is there some sort of
constraint that two of the alternate-metrics add up to the third?

       container unprotected-routes {
         config false;
         list address-family-stats {

nit: the name/description of address-family-stats doesn't match up with
the parent container that just claims to be a list of unprotected
prefixes (no stats).

       list protection-statistics {

side note: I wonder whether the various uint32 leaves are better as
gauge32 than plain uint32.
Also, perhaps the description could mention a relationship bteween
total-routes/protected-routes+unprotected-routes, and/or
protected-routes/link-protected-routes+node-protected-routes.

     grouping route-content {
       [...]
       leaf-list tag {
         type uint64;
         description
           "List of tags associated with the route. The leaf
            describes both 32-bit and 64-bit tags.";

Are these the admin tags from RFC 5130?  Where is it specified that the
32- and 64-bit variants are just different views into a single
consolidated tag namespace?

     grouping authentication-global-cfg {

I see how "global" is in contrast to a smaller scope (hello, interface,
adjacency, etc.) both here and elsewhere, but when we have a global
defeault as well as per-level configuration that use the same grouping,
it ceases to be universally "global".  But, it's probably too late to be
worth changing so many names just for aesthetics...

       leaf poi-tlv {
         if-feature poi-tlv;
         type boolean;
         default false;
         description
           "Enable advertisement of IS-IS purge TLV.";

nit(?): I thought the purge origin identification TLV was an extension
to the generic purge capability but this description ("purge TLV") is
very generic.

Should any of the uint32 leaves in "packet-counters" instead be of type
counter32?

     grouping spf-log {
       [...]
           leaf id {
             type uint32;
             description
               "Event identifier -  purely internal value.";

Is there anything useful to say about the IDs being chronologically
ordered?  (Also applies to the other logs.)

       container delay-metric {
         leaf metric {
           type std-metric;
           description "IS-IS delay metric for IPv4 prefix";
         }
         leaf supported {
           type boolean;

Should the "metric" leaf be conditional on "supported" being true?
(Same for the other flavors of metric, as well as when they appear later
on in the "neighbor" grouping.)

       container expense-metric {
         leaf metric {
           type std-metric;
           description "IS-IS expense metric for IPv4 prefix";
         }
         leaf supported {
           type boolean;
           default "false";
           description
             "Indicates whether IS-IS delay metric is supported.";

nit: copy/paste-o delay vs. expense?

       container error-metric {
         [...]
         leaf supported {
           type boolean;
           default "false";
           description "IS-IS error metric for IPv4 prefix";

I think "Indicates whether [...] is supported" would be more consistent
with the sibling nodes.

     grouping prefix-ipv4-extended {
       [...]
       leaf up-down {
         type boolean;
         description  "Value of up/down bit.";

I assume true means "up", but we really ought to say...
(Also in prefix-ipv6-extended if not more)

       leaf ip-prefix {
         type inet:ipv4-address;
         description "IPv4 prefix address";
       }
       leaf prefix-len {
         type uint8;
         description "IPv4 prefix length (in bits)";

Doesn't RFC 6991 give us a combined ipv4-prefix type?  (I could imagine
that doing string parsing on it is less automation-friendly than the
representation here, of course...)

       leaf-list tag64 {
         type uint64;
         description
           "List of 32-bit tags associated with the IPv4 prefix.";

nit: s/32/64/

     grouping prefix-ipv6-extended {
       [...]
       leaf prefix-len {
         type uint8;
         description  "IPv4 prefix length (in bits)";

nit: s/4/6/

       leaf-list tag {
         type uint32;
         description
           "List of 32-bit tags associated with the IPv4 prefix.";
       }
       leaf-list tag64 {
         type uint64;
         description
           "List of 32-bit tags associated with the IPv4 prefix.";

s/IPv4/IPv6/; $s/32/64/

       container unidirectional-link-delay-variation {
         description
           "Container for the average delay variation
           from the local neighbor to the remote one.";
         leaf value {
           type uint32;
           units usec;
           description
             "Delay variation value expressed in microseconds.";

Is this a standard deviation (variance), mean absolute error, ...?

       container unidirectional-link-loss {
         [...]
         leaf value {
           type uint32;
           units percent;
           description
             "Link packet loss expressed as a percentage
             of the total traffic sent over a configurable interval.";

This document is all about specifying configuration.  How do I configure
the interval in question?

       container unidirectional-link-loss {
         [...]

Is there a relationship worth mentioning amongst the residual,
available, and utilized bandwidth?

           container expense-metric {
             leaf metric {
               type std-metric;
               description "IS-IS delay expense metric value";
             }
             leaf supported {
               type boolean;
               default "false";
               description "IS-IS delay expense metric supported";
             }
             description "IS-IS delay expense metric container";

Previously we just used "expense metric" instead of "delay expense
metric".

     notification lsp-too-large {
       uses notification-instance-hdr;
       uses notification-interface-hdr;

This is probably just for my education and not the document's sake, but
both these groupings include a leaf of type 'level' (though for
different names).  Are they just always going to have the same value?

       leaf reason {
         type string {
           length "1..255";
         }
         description
           "The system may provide a reason to reject the
            adjacency. If the reason is not available,
            an empty string will be returned.
            The expected format is a single line text.";

Wouldn't an empty string be zero-length (which is forbidden by the
length restriction)?

Section 7

I'm happy to see that several of the notifications mandate rate-limiting
their generation, in the description text, alleviating any concerns
about "spamminess" or DoS due to notification load!  It might be worth a
brief mention in the security considerations that that's why the
rate-limiting is in place.

   For IS-IS authentication, configuration is supported via the
   specification of key-chain [RFC8177] or the direction specification
   of key and authentication algorithm.  Hence, authentication

nit: s/direction/direct/

   configuration using the "auth-table-trailer" case in the
   "authentication" container inherits the security considerations of
   [RFC8177].  This includes the considerations with respect to the
   local storage and handling of authentication keys.

I'd consider also noting that the key-chain method is preferred (a
listing of why may not be needed and can probably be found in other
references).

Appendix A

Please use an address from the blocks reserved by RFC 5737 instead of
1.1.1.1, which is in actual use on the public Internet.