Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - Concern over port identifier
Martin Bjorklund <mbj@tail-f.com> Thu, 28 September 2017 13:25 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 CF4AE1344EA; Thu, 28 Sep 2017 06:25:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, 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 f4wXtQLLuMiu; Thu, 28 Sep 2017 06:25:20 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id DA02C134749; Thu, 28 Sep 2017 06:24:44 -0700 (PDT)
Received: from localhost (unknown [173.38.220.41]) by mail.tail-f.com (Postfix) with ESMTPSA id 50CFC1AE02A7; Thu, 28 Sep 2017 15:24:42 +0200 (CEST)
Date: Thu, 28 Sep 2017 15:23:12 +0200
Message-Id: <20170928.152312.261607006753399632.mbj@tail-f.com>
To: jiangyuanlong@huawei.com
Cc: sean.condon@microsemi.com, netmod@ietf.org, tictoc@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <3B0A1BED22CAD649A1B3E97BE5DDD68BBB5CB62E@dggeml507-mbx.china.huawei.com>
References: <3B0A1BED22CAD649A1B3E97BE5DDD68BBB5C9C01@dggeml507-mbx.china.huawei.com> <640F4C69F839A64C8949EF04FAAEE44679F25561@avsrvexchmbx1.microsemi.net> <3B0A1BED22CAD649A1B3E97BE5DDD68BBB5CB62E@dggeml507-mbx.china.huawei.com>
X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="utf-8"
Content-Transfer-Encoding: base64
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/uwEn8WN9MJ6rLdnUQaiQzpVXy-E>
Subject: Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - Concern over port identifier
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: Thu, 28 Sep 2017 13:25:28 -0000
Jiangyuanlong <jiangyuanlong@huawei.com> wrote: > Sean, > > My personal opinion is that it can work, but I would like to ask for > more opinions from our netmod experts;) > > Hi netmod experts, > Considering the following sample module, my-list is a list, and it > needs to use a leaf member "port-number" in my-port-container as a > key. > We now have 3 options: > 1. > list my-list { > key "port-number"; > leaf port-number { > type uint16; > } > > container my-port-container { > leaf port-number { > type uint16; > } > leaf other-leaf { > ... > } > } > } > But this does not work for there is compiling error. Why wouldn't this work? I suspect you meant: list my-list { key "port-number"; container my-port-container { leaf port-number { type uint16; } leaf other-leaf { ... } } } > 2. > list my-list { > key "port-number"; > leaf port-number { > type uint16; > } > container my-port-container { > leaf port-number { > type leafref{ > path "../../port-number"; > } > } > leaf other-leaf { > ... > } > } > } > Option 2 can parse, though leafref in a sub-module seems not very > natural. > > 3. > list my-list { > key "port-number"; > leaf port-number { > type leafref{ > path "../my-port-container/port-number"; > } > } > container my-port-container { > leaf port-number { > type uint16; > } > leaf other-leaf { > ... > } > } > } > > Option 3 can also parse, though leafref seems not a very natural > key. What is your favorite option? Or do you have any better schemes? Having a leafref like in option 2 or 3 is just redundant and a hassle for the client. In order to create a a list entry, the client would have to first provide the port-number value once for the key, and then again the exact same value in the container: <my-list> <port-number>25</port-number> <my-port-container> <port-number>25</port-number> <other-leaf>...</other-leaf> </my-port-container> </my-list> Note that both "port-number" MUST be given the exact same value by the client. In YANG, key leafs cannot be nested under containers. I would simply have the key on the top of the list, and not in the container. (It seems this is what others have proposed as well in this thread.) /martin > Your opinions are very important for our revision of this draft. > > Thanks, > Yuanlong > > > From: Sean Condon [mailto:sean.condon@microsemi.com] > Sent: Wednesday, September 27, 2017 7:11 PM > To: Jiangyuanlong > Cc: tictoc@ietf.org; Rodney Cummings > Subject: RE: draft-ietf-tictoc-1588v2-yang-05 - Concern over port > identifier > > Thanks guys for your responses. > > I accept your points to keep the structure as aligned to the IEEE 1588 > standard as possible. > > One alternate suggestion that I would make, is that the port-number > currently defined as leafref should be made the real attribute > (i.e. uint16) and that the port-number inside port-identity container > should be made in to the leaf ref (and set to mandatory true). > > The reason I say this is that > > 1. XML models are usually navigated and constructed root-to-leaf, and > the way it's portrayed at the moment is that port-number leafref > points to something that may not exist at the time it is being > defined. This makes it difficult to implement. > 2. Also port-identity/port-number is not "mandatory true" meaning > that it could be left out altogether. It's not valid for it to have a > default value either since every item in the list will need a > different identifier. > > With this suggestion the structure you require with port-identity > still exists, but now the implementation is more straightforward, and > the change will be transparent to an end user. > > > Best regards, Sean > ======================= > Sean Condon > System & Software Architect > Frequency & Timing Division > Microsemi Inc. > sean.condon@microsemi.com<mailto:sean.condon@microsemi.com> > > ________________________________ > From: Jiangyuanlong [jiangyuanlong@huawei.com] > Sent: 27 September 2017 08:05 > To: Sean Condon > Cc: tictoc@ietf.org<mailto:tictoc@ietf.org>; Rodney Cummings > Subject: RE: draft-ietf-tictoc-1588v2-yang-05 - Concern over port > identifier > EXTERNAL EMAIL > > Dear Sean, > > > > Thank you a lot for diving into the technical details of this > module. Just as Rodney said, it is a challenge of 1588 info model to > YANG, and we use the leafref of YANG to work around it. > > I would like to provide a little more backgrounds on the tradeoff: > > > > 1. It says in Sec. 7.5.2.1 in IEEE 1588-2008: portIdentity is a member > of the portDS data set. A portIdentity consists of two attributes, as > > follows: > > ⎯ portIdentity.clockIdentity > > ⎯ portIdentity.portNumber > > Furthermore, the "portDS.portIdentity" attribute is mentioned quite a > few times in 1588-2008, especially in Table 17 and under Table 61, > with a hint that assignment and comparison can be done on this member > directly, thus it seems to me portIdentity is an important and well > understood construct in the 1588 specification. > > > > 2. If we change portDS.portIdentity from a container to a grouping, > then there is no portIdentity for portDS and transparentclockPortDS in > the resulting tree diagram: > > > > module: ietf-ptp-dataset > > +--rw instance-list* [instance-number] > > | +--rw instance-number uint16 > > | +--rw default-ds > > | | +--rw two-step-flag? boolean > > | | +--rw clock-identity? clock-identity-type > > | | +--rw number-ports? uint16 > > | | +--rw clock-quality > > | | | +--rw clock-class? uint8 > > | | | +--rw clock-accuracy? uint8 > > | | | +--rw offset-scaled-log-variance? uint16 > > | | +--rw priority1? uint8 > > | | +--rw priority2? uint8 > > | | +--rw domain-number? uint8 > > | | +--rw slave-only? boolean > > | +--rw current-ds > > | | +--rw steps-removed? uint16 > > | | +--rw offset-from-master? time-interval-type > > | | +--rw mean-path-delay? time-interval-type > > | +--rw parent-ds > > | | +--rw parent-port-identity > > | | | +--rw clock-identity? clock-identity-type > > | | | +--rw port-number? uint16 > > | | +--rw parent-stats? boolean > > | | +--rw observed-parent-offset-scaled-log-variance? uint16 > > | | +--rw observed-parent-clock-phase-change-rate? int32 > > | | +--rw grandmaster-identity? binary > > | | +--rw grandmaster-clock-quality > > | | | +--rw clock-class? uint8 > > | | | +--rw clock-accuracy? uint8 > > | | | +--rw offset-scaled-log-variance? uint16 > > | | +--rw grandmaster-priority1? uint8 > > | | +--rw grandmaster-priority2? uint8 > > | +--rw time-properties-ds > > | | +--rw current-utc-offset-valid? boolean > > | | +--rw current-utc-offset? int16 > > | | +--rw leap59? boolean > > | | +--rw leap61? boolean > > | | +--rw time-traceable? boolean > > | | +--rw frequency-traceable? boolean > > | | +--rw ptp-timescale? boolean > > | | +--rw time-source? uint8 > > | +--rw port-ds-list* [port-number] > > | +--rw clock-identity? clock-identity-type > > | +--rw port-number uint16 > > | +--rw port-state? port-state-enumeration > > | +--rw underlying-interface? if:interface-ref > > | +--rw log-min-delay-req-interval? int8 > > | +--rw peer-mean-path-delay? time-interval-type > > | +--rw log-announce-interval? int8 > > | +--rw announce-receipt-timeout? uint8 > > | +--rw log-sync-interval? int8 > > | +--rw delay-mechanism? delay-mechanism-enumeration > > | +--rw log-min-pdelay-req-interval? int8 > > | +--rw version-number? uint8 > > +--rw transparent-clock-default-ds > > | +--rw clock-identity? clock-identity-type > > | +--rw number-ports? uint16 > > | +--rw delay-mechanism? delay-mechanism-enumeration > > | +--rw primary-domain? uint8 > > +--rw transparent-clock-port-ds-list* [port-number] > > +--rw clock-identity? clock-identity-type > > +--rw port-number uint16 > > +--rw log-min-pdelay-req-interval? int8 > > +--rw faulty-flag? boolean > > +--rw peer-mean-path-delay? time-interval-type > > > > In contrast to the original 1588 YANG tree diagram: > > module: ietf-ptp-dataset > > +--rw instance-list* [instance-number] > > | +--rw instance-number uint16 > > | +--rw default-ds > > | | +--rw two-step-flag? boolean > > | | +--rw clock-identity? clock-identity-type > > | | +--rw number-ports? uint16 > > | | +--rw clock-quality > > | | | +--rw clock-class? uint8 > > | | | +--rw clock-accuracy? uint8 > > | | | +--rw offset-scaled-log-variance? uint16 > > | | +--rw priority1? uint8 > > | | +--rw priority2? uint8 > > | | +--rw domain-number? uint8 > > | | +--rw slave-only? boolean > > | +--rw current-ds > > | | +--rw steps-removed? uint16 > > | | +--rw offset-from-master? time-interval-type > > | | +--rw mean-path-delay? time-interval-type > > | +--rw parent-ds > > | | +--rw parent-port-identity > > | | | +--rw clock-identity? clock-identity-type > > | | | +--rw port-number? uint16 > > | | +--rw parent-stats? boolean > > | | +--rw observed-parent-offset-scaled-log-variance? uint16 > > | | +--rw observed-parent-clock-phase-change-rate? int32 > > | | +--rw grandmaster-identity? binary > > | | +--rw grandmaster-clock-quality > > | | | +--rw clock-class? uint8 > > | | | +--rw clock-accuracy? uint8 > > | | | +--rw offset-scaled-log-variance? uint16 > > | | +--rw grandmaster-priority1? uint8 > > | | +--rw grandmaster-priority2? uint8 > > | +--rw time-properties-ds > > | | +--rw current-utc-offset-valid? boolean > > | | +--rw current-utc-offset? int16 > > | | +--rw leap59? boolean > > | | +--rw leap61? boolean > > | | +--rw time-traceable? boolean > > | | +--rw frequency-traceable? boolean > > | | +--rw ptp-timescale? boolean > > | | +--rw time-source? uint8 > > | +--rw port-ds-list* [port-number] > > | +--rw port-number -> ../port-identity/port-number > > | +--rw port-identity > > | | +--rw clock-identity? clock-identity-type > > | | +--rw port-number? uint16 > > | +--rw port-state? port-state-enumeration > > | +--rw underlying-interface? if:interface-ref > > | +--rw log-min-delay-req-interval? int8 > > | +--rw peer-mean-path-delay? time-interval-type > > | +--rw log-announce-interval? int8 > > | +--rw announce-receipt-timeout? uint8 > > | +--rw log-sync-interval? int8 > > | +--rw delay-mechanism? delay-mechanism-enumeration > > | +--rw log-min-pdelay-req-interval? int8 > > | +--rw version-number? uint8 > > +--rw transparent-clock-default-ds > > | +--rw clock-identity? clock-identity-type > > | +--rw number-ports? uint16 > > | +--rw delay-mechanism? delay-mechanism-enumeration > > | +--rw primary-domain? uint8 > > +--rw transparent-clock-port-ds-list* [port-number] > > +--rw port-number -> ../port-identity/port-number > > +--rw port-identity > > | +--rw clock-identity? clock-identity-type > > | +--rw port-number? uint16 > > +--rw log-min-pdelay-req-interval? int8 > > +--rw faulty-flag? boolean > > +--rw peer-mean-path-delay? time-interval-type > > > > I agree, assignment and comparison can still be done on clock-identity > and port-number directly (without a portIdentity construct) . But > people who are familiar with 1588-2008 may question where portIdentity > is gone. > > > > 3. I think leafref is a very general semantics thing in YANG language, > if any tools have problem with this feature, maybe we need to contact > with the tool’s developer to support it. > > > > Finally, more inputs from the WG are welcome. > > > > Thanks again, > > Yuanlong > > > > > > -----Original Message----- > From: TICTOC [mailto:tictoc-bounces@ietf.org] On Behalf Of Rodney > Cummings > Sent: Wednesday, September 27, 2017 1:24 AM > To: tictoc@ietf.org<mailto:tictoc@ietf.org> > Subject: Re: [TICTOC] draft-ietf-tictoc-1588v2-yang-05 - Concern over > port identifier > > > > Thanks Sean, > > > > Regarding your other comment on TLD... I agree. > > > > Regarding the comment below on port-identity, I agree that we need to > do it for practical reasons. > > > > In 1588-2008, there is a distinct dataset member for > portDS.portIdentity, which 5.3.5 specifies as using type PortIdentity: > > struct PortIdentity { > > ClockIdentity clockIdentity; > > UInteger portNumber; > > } > > > > If we interpret the 1588-2008 datasets as an information model, and > apply that as directly as possible to a YANG data model, > portDS.portIdentity is a container, which is what we have so far. That > introduces a challenge, because we want to use > portDS.portIdentity.portNumber as the key to the list of portDS's. We > solved that challenge with a leafref, but I'd agree that is ugly. > > > > Your proposal changes portDS.portIdentity from a container to a > grouping, so that it portDS.portIdentity.portNumber can be used as the > key without a leafref. > > > > The downside is that if/when a YANG management client tries to "get" > portDS.portIdentity, it doesn't work... there is no portIdentity to > get. > > > > Personally, I think that downside is worth it. One can argue that your > proposal still conforms to the 1588-2008 information model for > management, in that portDS.portIdentity still "exists" in a manner > that makes sense for YANG. > > > > Rodney > > > > > > > > From: TICTOC [mailto:tictoc-bounces@ietf.org] On Behalf Of Sean Condon > > Sent: Tuesday, September 26, 2017 10:38 AM > > To: tictoc@ietf.org<mailto:tictoc@ietf.org> > > Subject: [TICTOC] draft-ietf-tictoc-1588v2-yang-05 - Concern over port > identifier > > > > With reference to "YANG Data Model for IEEE 1588v2" > https://urldefense.proofpoint.com/v2/url?u=https-3A__tools.ietf.org_html_draft-2Dietf-2Dtictoc-2D1588v2-2Dyang-2D05&d=DwMFAw&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=WA71sf2o7Dw7CbYhFt24DPjt3lJuupswWYdnboKbZ8k&m=jKHczVNLN-KuV2HRZkbEZY1SzlCD_AztkaWSccrqBI8&s=msh7A7_OgHZ1l65Dn6_LhiDIXkXpFeiLGmKbKxsqXWw&e= > > > > I have a concern about the structure of the YANG, and how the lists > port-ds-list and transparent-clock-port-ds-list are indexed with a > leaf which is a leafref. > > > > The structure seems unnecessarily complex - port-number is represented > as a leaf directly beneath the list (to be used as key) and again > under the port-identity container. It is structured in a way that I > believe would make it difficult to work with some YANG tools in the > market. > > > > The purpose of port-identity container is not clear from the document > - it would achieve the same purpose if it was left out of > port-ds-entry and transparent-clock-port-ds-entry and instead the > grouping port-identity-grouping included directly. > > > > See the attached files as original, a modified version and as a patch > file. > > > > Sean Condon > > ======================= > > Sean Condon > > System & Software Architect > > Frequency & Timing Division > > Microsemi Inc. > > mailto:sean.condon@microsemi.com > > > > _______________________________________________ > > TICTOC mailing list > > TICTOC@ietf.org<mailto:TICTOC@ietf.org> > > https://www.ietf.org/mailman/listinfo/tictoc
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Jiangyuanlong
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Jiangyuanlong
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Sean Condon
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Martin Bjorklund
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Jiangyuanlong
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Jiangyuanlong
- Re: [netmod] draft-ietf-tictoc-1588v2-yang-05 - C… Robert Wilton