Re: [netmod] YANG doctor review of draft-ietf-netmod-intf-ext-yang-04

Martin Bjorklund <mbj@tail-f.com> Tue, 11 April 2017 11:31 UTC

Return-Path: <mbj@tail-f.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3C78A127775 for <netmod@ietfa.amsl.com>; Tue, 11 Apr 2017 04:31:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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 kGi3FvQbl2uY for <netmod@ietfa.amsl.com>; Tue, 11 Apr 2017 04:31:24 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 4731C126C25 for <netmod@ietf.org>; Tue, 11 Apr 2017 04:31:24 -0700 (PDT)
Received: from localhost (unknown [173.38.220.40]) by mail.tail-f.com (Postfix) with ESMTPSA id 584931AE0351; Tue, 11 Apr 2017 13:31:23 +0200 (CEST)
Date: Tue, 11 Apr 2017 13:31:33 +0200
Message-Id: <20170411.133133.535844576323902109.mbj@tail-f.com>
To: lhotka@nic.cz
Cc: rwilton@cisco.com, netmod@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <m2mvbnw5fz.fsf@birdie.labs.nic.cz>
References: <773bc744-f147-f854-87c1-cad0d61d1ab8@cisco.com> <20170411.121313.282585946337498966.mbj@tail-f.com> <m2mvbnw5fz.fsf@birdie.labs.nic.cz>
X-Mailer: Mew version 6.7 on Emacs 24.5 / 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/netmod/2TsQtNUndgVqgUfi4lABGz2Cy8w>
Subject: Re: [netmod] YANG doctor review of draft-ietf-netmod-intf-ext-yang-04
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 11 Apr 2017 11:31:26 -0000

Ladislav Lhotka <lhotka@nic.cz> wrote:
> Martin Bjorklund <mbj@tail-f.com> writes:
> 
> > Robert Wilton <rwilton@cisco.com> wrote:
> >> Hi Vladimir, all,
> >> 
> >> 
> >> On 10/04/2017 17:19, Vladimir Vassilev wrote:
> >> > Hello,
> >> >
> >> > On 04/06/2017 07:43 PM, Andy Bierman wrote:
> >> >>
> >> >> 3) identity ethSubInterface
> >> >>
> >> >> This identity is used in the encapsulation container when-stmt.
> >> >> It is not clear if this is intended as a base identity (like identity
> >> >> sub-interface)
> >> >> An example for the encapsulation container would help clarify the
> >> >> expected usage
> >> >>
> >> >> This also has 2 bases (sub-interface and l2vlan).
> >> >> Some explanation in the identity-stmt would be helpful
> >> >> (since this is a new YANG 1.1 construct)
> >> > It seems the intentended result was identity similar to
> >> > ianaift:atmSubInterface (thus the naming convention change
> >> > ethSubInterface instead of eth-sub-interface). I think it is less
> >> > confusing to name the identity with the same naming convention used
> >> > for the rest of the identities introduced e.g. sub-interface,
> >> > loopback-internal etc. and if needed define new atm-sub-interface
> >> > based on sub-interface. I am not sure even atm users would like a
> >> > model where atmSubInterface will be the only identity of all future
> >> > sub interface based identities not being derived from sub-interface
> >> > because of this precedent:
> >> >
> >> >      augment "/if:interfaces/if:interface" {
> >> >        when "derived-from(if:type,
> >> >                           'ietf-if-cmn',
> >> >                           'sub-interface') or
> >> >              if:type = 'ianaift:atmSubInterface' or
> >> >              if:type = 'ianaift:frameRelay'"  {
> >> 
> >> My idea was that all sub-interfaces could inherit from a common
> >> identity.  I don't think that this idea just applies to
> >> sub-interfaces, but other interface properties as well.  E.g.
> >>  sub-interface (i.e. any interface that is logically a child interface
> >>  of some parent interface, e.g. Ethernet/VLAN sub-interface, ATM
> >>  sub-interface, FR sub-interface)
> >>  ethernet-like (i.e. does the interface use ethernet framing).
> >>  E.g. this would apply to physical Ethernet, LAG, IRB interfaces.
> >>  physical (i.e. an interface that is generally instantiated due to some
> >>  physical hardware)
> >>  logical? (This is harder to define, but roughly an interface that is a
> >>  software construct).
> >>  there must be other generic properties as well.
> >> 
> >> My main aim is for future flexibility.  I.e. so that if need interface
> >> types get defined in the future they can share existing interface
> >> related configuration and state without having to redefine it.
> >> Similarly, if there are vendor specific variants of interfaces then
> >> they could also reuse the existing interface related configuration and
> >> state without having to define vendor specific MTU leaves, etc for the
> >> new interface type.
> >> 
> >> My refinement of this idea, is still to define these generic
> >> properties, but then revise iana-if-type.yang to add these common
> >> interface properties as additional base identities.
> >> 
> >> E.g.
> >> 
> >>      identity interface-property-type {
> >>        description
> >>          "Base identity from which all interface properties are
> >>           derived.";
> >>      }
> >> 
> >> 
> >>      identity sub-interface-like {
> >>        description
> >>          "The interface has sub-interface properties";
> >>        base interface-property-type;
> >>      }
> >> 
> >>      identity ethernet-like {
> >>        description
> >>          "The interface uses ethernet framing, e.g. has a MAC address
> >>          associated with it.";
> >>        base interface-property-type;
> >>      }
> >> 
> >>      ...
> >> 
> >> 
> >> Then, for example, the IANA type for atm & l2vlan (if this is the IANA
> >> type for an Ethernet sub-interface) would change from:
> >> 
> >> 
> >>   identity atmSubInterface {
> >>     base iana-interface-type;
> >>     description
> >>       "ATM Sub Interface.";
> >>   }
> >> 
> >>   identity l2vlan {
> >>     base iana-interface-type;
> >>     description
> >>       "Layer 2 Virtual LAN using 802.1Q.";
> >>   }
> >> 
> >> to:
> >> 
> >>   identity atmSubInterface {
> >>     base iana-interface-type;
> >>     base sub-interface-like;
> >>     description
> >>       "ATM Sub Interface.";
> >>   }
> >> 
> >>   identity l2vlan {
> >>     base iana-interface-type;
> >>     base sub-interface-like;
> >>     description
> >>       "Layer 2 Virtual LAN using 802.1Q.";
> >>   }
> >> 
> >> and hence the augment can just become:
> >> 
> >>      augment "/if:interfaces/if:interface" {
> >>        when "derived-from(if:type, 'ietf-if', 'sub-interface')"  {
> >>           ...
> >>      }
> >> 
> >> If someone wants to define a new type of sub-interface in the future
> >> they can.  They just need to ensure that when they define the type in
> >> iana-if-types it also derives from the sub-interface property, and
> >> then they would automatically pick up the generic sub-interface
> >> configuration leaf.  This would fix this issue that having when
> >> statements on IANA defined interface types isn't really robust or
> >> flexible.
> >> 
> >> Finally, adding these properties to iana-if-types.yang would be a
> >> backwards compatible change.
> >> 
> >> What are other peoples opinion's on this idea?
> >
> > I think that this is good idea.  We have discussed adding properties
> 
> Yes. Such use cases were actually the motivation for introducing
> multiple inheritance of identities in the first place. 
> 
> > as identities before.  Having them in the iana-if-types would make
> > these types more useful.
> >
> > But this would require a non-signinficant change to
> > draft-ietf-netmod-intf-ext-yang, right?  We would need an update to
> > iana-if-types and move the identities there.
> 
> But then iana-if-type would diverge from the underlying IANA
> registry, which would be confusing. It is IMO better to start a new
> module (or a few of them) with a sound structure of interface types and
> no reference to the IANA interface registry.

I don't think it would diverge - all interface types would be there,
but some have additional properies (which are not visible in the
MIB).  But the underlying registry somehow needs to be extended.


/martin