Re: [netmod] Pattern statements [was Re: Query about augmenting module from submodule in YANG 1.0]

"Ivory, William" <william.ivory@intl.att.com> Wed, 23 August 2017 10:07 UTC

Return-Path: <william.ivory@intl.att.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 B626E132BE2 for <netmod@ietfa.amsl.com>; Wed, 23 Aug 2017 03:07:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -5.399
X-Spam-Level:
X-Spam-Status: No, score=-5.399 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-2.8, 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 SCDsBe9Tv3a5 for <netmod@ietfa.amsl.com>; Wed, 23 Aug 2017 03:07:23 -0700 (PDT)
Received: from mx0a-00191d01.pphosted.com (mx0b-00191d01.pphosted.com [67.231.157.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id DAE8A132BEA for <netmod@ietf.org>; Wed, 23 Aug 2017 03:07:21 -0700 (PDT)
Received: from pps.filterd (m0049463.ppops.net [127.0.0.1]) by m0049463.ppops.net-00191d01. (8.16.0.21/8.16.0.21) with SMTP id v7NA5XUF022547; Wed, 23 Aug 2017 06:07:17 -0400
Received: from alpi155.enaf.aldc.att.com (sbcsmtp7.sbc.com [144.160.229.24]) by m0049463.ppops.net-00191d01. with ESMTP id 2ch78dhngu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 23 Aug 2017 06:07:17 -0400
Received: from enaf.aldc.att.com (localhost [127.0.0.1]) by alpi155.enaf.aldc.att.com (8.14.5/8.14.5) with ESMTP id v7NA7G2m009754; Wed, 23 Aug 2017 06:07:16 -0400
Received: from mlpi407.sfdc.sbc.com (mlpi407.sfdc.sbc.com [130.9.128.239]) by alpi155.enaf.aldc.att.com (8.14.5/8.14.5) with ESMTP id v7NA7A3p009708 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 23 Aug 2017 06:07:11 -0400
Received: from gbcdccas01.intl.att.com (gbcdccas01.intl.att.com [135.76.180.9]) by mlpi407.sfdc.sbc.com (RSA Interceptor); Wed, 23 Aug 2017 10:06:56 GMT
Received: from GBCDCMBX03.intl.att.com ([135.76.31.134]) by gbcdccas01.intl.att.com ([135.76.180.9]) with mapi id 14.03.0361.001; Wed, 23 Aug 2017 11:06:55 +0100
From: "Ivory, William" <william.ivory@intl.att.com>
To: "'t.petch'" <ietfc@btconnect.com>, "'Acee Lindem (acee)'" <acee@cisco.com>, "'netmod@ietf.org'" <netmod@ietf.org>, 'Andy Bierman' <andy@yumaworks.com>, 'Robert Wilton' <rwilton@cisco.com>
Thread-Topic: [netmod] Pattern statements [was Re: Query about augmenting module from submodule in YANG 1.0]
Thread-Index: AQHTG/UAWiAkh5lOqk+g0QCn4SiEOaKRswlQ
Date: Wed, 23 Aug 2017 10:05:52 +0000
Deferred-Delivery: Wed, 23 Aug 2017 10:06:52 +0000
Message-ID: <E3378E0605547F4E854DEE0CB1116AB02212B4@gbcdcmbx03.intl.att.com>
References: <E3378E0605547F4E854DEE0CB1116AB020865B@gbcdcmbx03.intl.att.com> <85A1FF5A-EF0B-4278-B4FF-3FE431486B2C@tail-f.com> <E3378E0605547F4E854DEE0CB1116AB02102DC@gbcdcmbx03.intl.att.com> <11857e8e-f46e-dc2e-cf99-80224859d221@transpacket.com> <E3378E0605547F4E854DEE0CB1116AB0210631@gbcdcmbx03.intl.att.com> <defe35bb-bb8b-f1f0-d8c4-2d2d0f23731b@transpacket.com> <1502290869.16638.15.camel@nic.cz> <20170809151312.GC42207@elstar.local> <6ef68131-f731-0edc-b731-d7ec85924f03@cisco.com> <E3378E0605547F4E854DEE0CB1116AB021CE2D@gbcdcmbx03.intl.att.com> <D5C05EB3.C2681%acee@cisco.com> <7614040f-9f8f-09c2-1854-63ad9ffb6be1@cisco.com> <044b01d31bf4$d3b37500$4001a8c0@gateway.2wire.net>
In-Reply-To: <044b01d31bf4$d3b37500$4001a8c0@gateway.2wire.net>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [135.76.181.254]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-RSA-Inspected: yes
X-RSA-Classifications: public
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-08-23_03:, , signatures=0
X-Proofpoint-Spam-Details: rule=outbound_policy_notspam policy=outbound_policy score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1708230151
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/DVr6_wAWgEvWCoGAV6hjqEHjua4>
Subject: Re: [netmod] Pattern statements [was Re: Query about augmenting module from submodule in YANG 1.0]
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: Wed, 23 Aug 2017 10:07:26 -0000

Personally I hate regexps as anything other than the simplest tend to be too cryptic to understand easily (or to test).  At least from YANG 1.1 we have the ability to have 'exclude' patterns (IIRC), but it's still not ideal.

What I'd like to see instead is bitwise operators (&, |, << and >>) along with 'for' loops and possibly local variables allowed in the version of XPATH  that we use.  Would likely need to define YANG-specific functions to extend XPATH, but we already have some (current() etc) so that wouldn't be a problem.  We have quite a few cases where we have to resort to calling out to scripts to provide local validation that would not be necessary if we had such operators in XPATH, and would allow NETCONF clients to perform validation off-box.

It would also be fun to implement - I rather enjoyed implementing our XPATH parser - but will concede that's probably not a priority when determining feature sets for future versions (-:

William

-----Original Message-----
From: t.petch [mailto:ietfc@btconnect.com] 
Sent: 23 August 2017 10:46
To: Acee Lindem (acee) <acee@cisco.com>; Ivory, William <william.ivory@intl.att.com>; netmod@ietf.org; Andy Bierman <andy@yumaworks.com>; Robert Wilton <rwilton@cisco.com>
Subject: Re: [netmod] Pattern statements [was Re: Query about augmenting module from submodule in YANG 1.0]

----- Original Message -----
From: "Robert Wilton" <rwilton@cisco.com>
Sent: Monday, August 21, 2017 4:14 PM

> That makes sense.
>
> The other thing that I think that we have got wrong is modelling regex 
> pattern statements.  I think that it would be much better if these
were
> written to be less exhaustive and much simpler.
>
> E.g. the "route distinguisher" pattern in
> draft-ietf-rtgwg-routing-types-09 is defined as this:
>
>           pattern
>             '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
>           +     '6[0-4][0-9]{3}|'
>           +     '[0-5]?[0-9]{0,3}[0-9]):(429496729[0-5]|'
>           +     '42949672[0-8][0-9]|'
>           +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
>           +     '42949[0-5][0-9]{4}|'
>           +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
>           +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
>           +     '[0-3]?[0-9]{0,8}[0-9]))|'
>           + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
>           +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
>           +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
>           +     '655[0-2][0-9]|'
>           +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
>           +     '[0-5]?[0-9]{0,3}[0-9]))|'
>           + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
>           +     '4294967[01][0-9]{2}|'
>           +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
>           +     '4294[0-8][0-9]{5}|'
>           +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
>           +     '[0-3]?[0-9]{0,8}[0-9]):'
>           +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
>           +     '6[0-4][0-9]{3}|'
>           +     '[0-5]?[0-9]{0,3}[0-9]))|'
>           + '(6(:[a-fA-F0-9]{2}){6})|'
>           + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
>           +     '[0-9a-fA-F]{1,12})';
>         }
>
> But I think that it would be much easier to read, and quite possibly 
> more performant to execute, if the pattern regex was written something 
> like the following:
>
>   pattern:
>      '(0:[0-9]{1,5}:[0-9]{1,10})|
>       (1:([0-9]{1,3}\.){4}:[0-9]{1,5})|
>       (2:[0-9]{1,10}:0:[0-9]{1,5})|
>       (6(:[a-fA-F0-9]{2}){6})';
>
> Of course, this would allow more invalid values, but most servers
would
> be expected to reject those when it converts them into an internal 
> binary format any way.
>
> What do you, and others, think?

Simplify!

Bear in mind that the regex for an IPv6 address was wrong for a long time in base YANG before anyone noticed - it was just too complex.

And ABNF learnt long ago that just because something could be expressed in code does not mean that it is a good idea to do so.  If a simple English statement replaces many lines of ABNF, then that is a good tradeoff.

Pragmatically I am not sure what the cutoff for complexity should be but it should be less than we have now.

Paradoxically, given the original thread, the time when large expressions may work ok is when they have a 'sub-module' like structure, when I can look at a group of lines in isolation and form a view of what it does then move on to the next group and so on, building up an overall picture piece by piece.

Tom Petch

> Thanks,
> Rob
>
>
> On 21/08/2017 15:01, Acee Lindem (acee) wrote:
> > Hi William, Rob, Andy,
> >
> > Given their limited usefulness and the detriments, perhaps we should 
> > discourage the creation of new submodules in RFC6087Bis.
> >
> > Thanks,
> > Acee
> >
> > On 8/21/17, 9:44 AM, "netmod on behalf of Ivory, William"
> > <netmod-bounces@ietf.org on behalf of william.ivory@intl.att.com>
wrote:
> >
> >> Hi Rob,
> >>
> >> That would make it very hard to update existing 1.x YANG models to
use
> >> new features in YANG 2.x if they used submodules.  Maybe that's
something
> >> that no one would ever consider doing anyway, or maybe YANG 1.1
already
> >> has similar differences to 1.0?  I had (perhaps naively) assumed
that you
> >> could migrate a namespace / model from YANG 1.0 to 2.0?
> >>
> >> Regards,
> >>
> >> William
> >>
> >> -----Original Message-----
> >> From: netmod [mailto:netmod-bounces@ietf.org] On Behalf Of Robert
Wilton
> >> Sent: 21 August 2017 11:24
> >> To: netmod@ietf.org
> >> Subject: Re: [netmod] Query about augmenting module from submodule
in
> >> YANG 1.0
> >>
> >>
> >>
> >> On 09/08/2017 16:13, Juergen Schoenwaelder wrote:
> >>> On Wed, Aug 09, 2017 at 05:01:09PM +0200, Ladislav Lhotka wrote:
> >>>> I remember that in early stages of YANG there was some irrational 
> >>>> fear of introducing too many namespaces, and submodules may be a 
> >>>> consequence of it. As you write, submodules provide no benefits 
> >>>> whatsoever in terms of modularity, but the overhead in terms of 
> >>>> metadata, IANA registration etc. is pretty much the same as for 
> >>>> modules.
> >>> In case YANG 2.0 is ever done, I suggest someone files a proposal
to
> >>> remove submodules if the cost/benefit ratio is at odds. There is 
> >>> nothing wrong with removing stuff that has been found problematic.
> >> I agree.
> >>
> >> I've added
> >>
https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_netmod-2
Dw
> >>
g_yang-2Dnext_issues_26&d=DwICAg&c=LFYZ-o9_HUMeMTSQicvjIg&r=p8kyeK3u4ZYi
aQ
> >>
2ZPGqwkyXmQgBH6r5jpYiYWzhqJ48&m=l7c4IPL049A2bVVO14fyBMly211xU61xSHgPlAT7
ow
> >> I&s=-kR4fUtXArQy0RwWb32DpT1bP4X_cNqt2zJVoC0JiX8&e=
> >>
> >> Rob
> >>
> >>> The motivation for submodules was that organizations maintaining
large
> >>> modules with multiple people can do so without having to mess
around
> >>> with tools like m4 scripts to produce a single module from
'snippets'
> >>> and to avoid integration surprises. But perhaps using m4 scripts
and
> >>> decent version control systems (that can integrate and compile on
> >>> checkin) is indeed cheaper than having submodules part of the YANG 
> >>> language itself.
> >>>
> >>> /js
> >>>
> >> _______________________________________________
> >> netmod mailing list
> >> netmod@ietf.org
> >>
https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_mailma
n_
> >>
listinfo_netmod&d=DwICAg&c=LFYZ-o9_HUMeMTSQicvjIg&r=p8kyeK3u4ZYiaQ2ZPGqw
ky
> >>
XmQgBH6r5jpYiYWzhqJ48&m=l7c4IPL049A2bVVO14fyBMly211xU61xSHgPlAT7owI&s=t7
vG
> >> IH8ABuAm00e-bkSowD9eawModGq0N2OkjANtpYI&e=
> >>
> >> _______________________________________________
> >> netmod mailing list
> >> netmod@ietf.org
> >> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_m
> >> ailman_listinfo_netmod&d=DwICaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=p8kyeK3u
> >> 4ZYiaQ2ZPGqwkyXmQgBH6r5jpYiYWzhqJ48&m=V3Xd09IeBbuwHtIPd4YIt9kQBsxSD
> >> K7zldFfmT12OO8&s=Tkq4GWOUmeznETu_UVxLpOom3UXEiI5I2mLe7tpDoZw&e=
>
>


------------------------------------------------------------------------
--------


> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_mail
> man_listinfo_netmod&d=DwICaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=p8kyeK3u4ZYiaQ
> 2ZPGqwkyXmQgBH6r5jpYiYWzhqJ48&m=V3Xd09IeBbuwHtIPd4YIt9kQBsxSDK7zldFfmT
> 12OO8&s=Tkq4GWOUmeznETu_UVxLpOom3UXEiI5I2mLe7tpDoZw&e=
>