Re: [yang-doctors] YANG doctor review of draft-ietf-pim-igmp-mld-yang-02

Benoit Claise <bclaise@cisco.com> Mon, 06 March 2017 13:51 UTC

Return-Path: <bclaise@cisco.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 0B8861296E9; Mon, 6 Mar 2017 05:51:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.522
X-Spam-Level:
X-Spam-Status: No, score=-14.522 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.com
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 eAO5PTVHF7C7; Mon, 6 Mar 2017 05:51:24 -0800 (PST)
Received: from aer-iport-4.cisco.com (aer-iport-4.cisco.com [173.38.203.54]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B047A1294DD; Mon, 6 Mar 2017 05:51:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=18729; q=dns/txt; s=iport; t=1488808284; x=1490017884; h=subject:to:references:cc:from:message-id:date: mime-version:in-reply-to; bh=Eggjq25GBJnIRZgYTL0Kua5HnGESwR1f2ghr6oyMypc=; b=DCdOpXvxAjt/hhqOX9pDcOwhyspqEkn+2Zl0+HV4YZH8uQhGsXXfrRmv w0W5hi8y08F87SD1evUDLFeh9fo8CdJyXhtHw2q4Nmm7MNBZc12J0+BGM qFlZTSOLtdHyimzJDuYZDEfhelDoEuWh/DvkbuCVkMDncBKPgswFThsyN 4=;
X-IronPort-AV: E=Sophos;i="5.35,253,1484006400"; d="scan'208,217";a="653045909"
Received: from aer-iport-nat.cisco.com (HELO aer-core-1.cisco.com) ([173.38.203.22]) by aer-iport-4.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2017 13:51:22 +0000
Received: from [10.60.67.87] (ams-bclaise-8916.cisco.com [10.60.67.87]) by aer-core-1.cisco.com (8.14.5/8.14.5) with ESMTP id v26DpLjg026888; Mon, 6 Mar 2017 13:51:21 GMT
To: "Jan Lindblad (jlindbla)" <jlindbla@cisco.com>, Stig Venaas <stig@cisco.com>
References: <9185E63A-484F-46E9-A999-D90B0B39C38F@cisco.com>
From: Benoit Claise <bclaise@cisco.com>
Message-ID: <3914b7fd-b1ce-92f2-9bdd-1907f209ea93@cisco.com>
Date: Mon, 06 Mar 2017 14:51:21 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1
MIME-Version: 1.0
In-Reply-To: <9185E63A-484F-46E9-A999-D90B0B39C38F@cisco.com>
Content-Type: multipart/alternative; boundary="------------CC8B8D2BA029956FE4470CFA"
Archived-At: <https://mailarchive.ietf.org/arch/msg/yang-doctors/pzcR606BR2b48ycaO00gvfGP-pc>
Cc: YANG Doctors <yang-doctors@ietf.org>, draft-ietf-pim-igmp-mld-yang.all@ietf.org
Subject: Re: [yang-doctors] YANG doctor review of draft-ietf-pim-igmp-mld-yang-02
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, 06 Mar 2017 13:51:26 -0000

Thanks Jan,

Including the draft authors, chairs, and ADs.

Regards, Benoit
> I am the assigned YANG doctor for the document in the subject. My 
> primary focus has been the YANG model itself, and I'm far from an 
> expert at IGMP or MLD.
>
> Here are my comments:
>
> - In section 2.2, it is stated that:
>     For the same reason, wide constant ranges (for example, timer
>     maximum and minimum) will be used in the model.  It is expected that
>     vendors will augment the model with any specific restrictions that
>     might be required.
> The above statement is false, YANG augmentations can never restrict a 
> base model. If vendor restrictions of ranges etc are needed, YANG 
> deviations could be used. Each such deviation significantly reduces 
> the interoperability and thus value of this model, however, so for 
> places where variation is expected even before hand, I would much 
> rather prefer that this variability is built right into the model. One 
> possible way of doing that for leafs with possible variations in range 
> is described further down.
>
> - In section 2.3, it is stated:
>     The current draft contains IGMP and MLD as separate schema branches
>     in the structure. The reason for this is to make it easier for
>     implementations which may optionally choose to support specific
>     address families. And the names of objects may be different between
>     the ipv4 (IGMP) and ipv6 (MLD) address families.
> The current YANG file organization causes a lot of repetition, which 
> is tiring for model author and reader alike. A testament of this is 
> that pretty much all mistakes in the model occur twice, i.e. a clear 
> sign of copy-paste modeling. The cited paragraph also mentions the 
> possibility for a device to implement only IGMP or only MLD. The 
> current YANG model do not make either of them optional by e.g. an 
> if-feature statement. Another possibility that comes to mind would be 
> to separate the IGMP and MLD documents into separate modules. 
> Implementations could then choose which one(s) to implement.
>
> - Section 3.1 specifies a global level, interface-global level and an 
> interface-specific level of shadowing attributes for an interface. 
> Can't say I understand the difference between the global and 
> interface-global level really. Also when it comes to the YANG 
> manifestation of this, the grouping interfaces-config-attributes 
> overlaps quite a bit with grouping 
> interfaces-config-attributes-igmp-mld. Why are both these levels 
> needed, and if they are, why don't they use the same grouping? 
> Supposing there's a reason, why is much of the content duplicated in 
> two groupings?
>
> - Section 3.1 also states:
>     Where fields are not genuinely essential to protocol operation, they
>     are marked as optional. Some fields will be essential but have a
>     default specified, so that they need not be configured explicitly.
>     The module structure also applies, where applicable, to the
>     operational state and notifications as well.
> In fact, no leafs are marked mandatory anywhere in the model. Apart 
> from keys, this means they are all optional. There are two sides to 
> examine around this:
> + Configuration leafs: There is no description of what happens if a 
> leaf isn't set. E.g if the igmp/global/enable leaf is true or false, I 
> know how to intepret that. But what does it mean if it doesn't have a 
> value? This is a general concern for more or less every leaf.
> + Operational leafs: Since no leafs are mandatory, there is no 
> requirement to include any particular leaf in a reply. This will make 
> it hard for implementations reading the igmp/mld status, since they 
> will have to be coded to cope with any and every leaf not being 
> present in the query result. It would be good if some core leafs were 
> defined as mandatory, so that applications could count on them being 
> present.
>
> - At the end, section 3.1 says:
>     The IGMP and MLD model augments "/rt:routing/rt:control-plane-
>     protocols" as opposed to augmenting "/rt:routing/rt:control-plane-
>     protocols/ rt:control-plane-protocol" as the latter would allow
>     multiple protocol instances per VRF, which does not make sense for
>     IGMP and MLD.
> It would certainly be possible to locate the igmp and mld containers 
> under /routing/control-plane-protocols/control-plane-protocol and 
> still keep the requirement with a single instance of these containers, 
> if desired. I'm not opposed to the current design, but I'd just like 
> to point out that the statement above is not necessarily true.
>
> Then on a more detailed level, I'd like to see (line numbers according 
> to rfcstrip):
>
> - Leaf last-member-query-interval on line 315, 447: Add a units statement
>
> - Leaf robustness-variable on line 353, 491: What do these values mean?
>
> - Leaf group-policy on line 393, 431, 544: Is any string value ok, or 
> what would be a valid value?
>
> - Leaf dr on line 577: Maybe a slightly more verbose name would be 
> easier for operators?
>
> - Leaf interface on line 780, 820: Maybe "name" would be a better name?
>
> - Line 825, 917: This is an ipv6 leaf, but the description talks about 
> IPv4.
>
> - Leaf group on line 407, 558, 951, 985: Is any ipv4/6 address ok, or 
> only a multicast address?
>
> - Many description statements are missing or blank. I'm sure the 
> authors are aware, but for completeness I include this comment here
>
> - There are no notifications in the model. Aren't there any relevant 
> events to be notified about?
>
>
> Finally, an example of how a leaf with potentially different ranges 
> could be handled in a reasonably interoperable way. So instead of this:
>
> module std-inflexible {
>   ..
>   leaf some-property {
>     range "1..1000"; // Large range to be sure everyone's use case is 
> covered
>   }
> }
>
> We could model this variability like this:
>
> module std-flexible {
>   ..
>   choice property-variants {
>     leaf some-property-basic {
>       range "1..100"; // All implementations must be able to handle this
>     }
>     leaf some-property-extended {
>       if-feature some-property-extended;
>       range "1..200"; // Many implementations can do this
>     }
>   }
> }
>
> module vendor-x {
>   ..
>   augment /std-flexible:property-variants {
>     leaf some-propery-vendor-x {
>       range "10..700";
>       must "current() mod 10 = 0"; // In steps of 10 using this variant
>     }
>   }
> }
>
> The application can now choose to use some-property-basic (any 
> device), some-propery-extended (only on devices that announce feature 
> some-property-extended) or some-property-vendor-x (only on devices 
> that announe the vendor-x namespace).
>
> /jan
>
> .