Re: [netmod] yanglint and implemented versus imported YANG modules

William Lupton <> Tue, 07 March 2017 09:00 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id BD1C0129456 for <>; Tue, 7 Mar 2017 01:00:08 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.199
X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id gM1dU_e-scBP for <>; Tue, 7 Mar 2017 01:00:06 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 4F69E1293D8 for <>; Tue, 7 Mar 2017 01:00:06 -0800 (PST)
Received: from localhost (localhost []) by (Postfix) with ESMTP id 5581C1E5676; Tue, 7 Mar 2017 00:59:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at
Received: from ([]) by localhost ( []) (amavisd-new, port 10026) with ESMTP id vRJGaqW8xt7u; Tue, 7 Mar 2017 00:59:25 -0800 (PST)
Received: from [] ( []) by (Postfix) with ESMTPSA id 3F8EC1E5675; Tue, 7 Mar 2017 00:59:24 -0800 (PST)
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Content-Type: multipart/alternative; boundary="Apple-Mail=_D93FA2F7-1D25-4F69-9D90-5092728D0055"
From: William Lupton <>
In-Reply-To: <>
Date: Tue, 7 Mar 2017 09:00:03 +0000
Message-Id: <>
References: <> <>
To: Robert Wilton <>
X-Mailer: Apple Mail (2.3124)
Archived-At: <>
Subject: Re: [netmod] yanglint and implemented versus imported YANG modules
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: NETMOD WG list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 07 Mar 2017 09:00:09 -0000

Could this be the default in the first of these two cases?

    yanglint [options] [-f { yang | yin | tree }] <file>...
        Validates the YANG module in <file>, and all its dependencies.

    yanglint [options] [-f { xml | json }] <schema>... <file>...
        Validates the YANG modeled data in <file> according to the <schema>.

> On 6 Mar 2017, at 16:59, Robert Wilton <> wrote:
> Hi William,
> I think that what yanglint is doing here is sane, i.e. I think that its interpretation/split between imported vs implemented modules is supported by the YANG RFC.
> However, for validation purposes it seems that it would be useful if yanglint had an option to assume that all imported modules are implicitly implemented without requiring them to be explicitly specified.
> Thanks,
> Rob
> On 06/03/2017 16:44, William Lupton wrote:
>> All,
>> This message arose from a <> “draft-ietf-pim-igmp-mld-yang-02.txt: YANG compilation isuse” (sic) thread <> initiated by Benoit.
>> I thought it would be useful for NETMOD to see the part of the discussion that relates to implemented versus imported YANG modules.
>> Benoit Claise reported this warning:
>> warn: Schema node "ietf-ip:ipv4" not found (/ietf-interfaces:interfaces/ietf-interfaces:interface[ietf-interfaces:name = current()]/ietf-ip:ipv4)
>> Radek Krejčí replied:
>> These warnings are printed because in yanglint, until explicitly stated, the imported modules (such as ietf-interfaces and ietf-ip), are supposed to be only imported, not implemented. The data nodes in imported schemas are not available, which is the reason of these warnings.
>> William Lupton (that’s me!) asked / commented:
>> Why are the complaints only about ip:ipv4 (etc) and not about if:interfaces (etc), which are also referenced in the must statements?
>> This makes it hard for an automated tool (such as Benoit’s) because it needs to know which other YANG files to process in addition to the “file of interest”.
>> Radek Krejčí replied:
>> According to RFC 7950, sec 5.6.6 (3rd paragraph) [ED: 5.6.5?], when an implemented module augments another module (ietf-interfaces), the augmented module MUST be also implemented. So libyang automatically changes the augmented module from imported to the implemented. The same rule applies also in case of referring a module in path (leafref) and by deviating a module. But it does not apply when a module data is used in must or when conditions. That's the reason why it complains just about ietf-ip and not about ietf-interfaces.
>> YANG actually does not provide a way to specify that a particular import is also expected to be implemented. Therefore, libyang needs some help with setting modules implemented - all the explicitly loaded modules are supposed to be implemented, if the module is just implicitly loaded from the search directory and user did not expressed that it is supposed to be implemented, it is kept only imported to provide groupings or type definitions
>> Benoit Claise asked (referring to my reference to automated tools):
>> Would it be possible to improve the warning (and the related test, by testing implemented instead of import), basically telling that the module itself is fine?
>> I’m interested to know that NETMOD thinks about this distinction between implemented versus imported (in the absence of any instance documents). I guess my (maybe naive) view is that if all I’m doing is checking for errors in my YANG model then I don’t care about this. If my YANG is good I want to see no warnings or errors, and if it’s bad then I want to be told this (and why).
>> Thanks,
>> William
>> _______________________________________________
>> netmod mailing list
>> <>
>> <>