module ietf-yang-library { | |
yang-version 1.1; | |
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library"; | |
prefix yanglib; | |
import ietf-yang-types { | |
prefix yang; | |
reference | |
"RFC 6991: Common YANG Data Types"; | |
} | |
import ietf-inet-types { | |
prefix inet; | |
reference | |
"RFC 6991: Common YANG Data Types"; | |
} | |
import ietf-datastores { | |
prefix ds; | |
reference | |
"RFC 8342: Network Management Datastore Architecture | |
(NMDA)"; | |
} | |
organization | |
"IETF NETCONF (Network Configuration) Working Group"; | |
contact | |
"WG Web: <https://datatracker.ietf.org/wg/netconf/> | |
WG List: <mailto:netconf@ietf.org> | |
Author: Andy Bierman | |
<mailto:andy@yumaworks.com> | |
Author: Martin Bjorklund | |
<mailto:mbj@tail-f.com> | |
Author: Juergen Schoenwaelder | |
<mailto:j.schoenwaelder@jacobs-university.de> | |
Author: Kent Watsen | |
<mailto:kent+ietf@watsen.net> | |
Author: Robert Wilton | |
<mailto:rwilton@cisco.com>"; | |
description | |
"This module provides information about the YANG modules, | |
datastores, and datastore schemas used by a network | |
management server. | |
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |
'MAY', and 'OPTIONAL' in this document are to be interpreted as | |
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |
they appear in all capitals, as shown here. | |
Copyright (c) 2019 IETF Trust and the persons identified as | |
authors of the code. All rights reserved. | |
Redistribution and use in source and binary forms, with or | |
without modification, is permitted pursuant to, and subject | |
to the license terms contained in, the Simplified BSD License | |
set forth in Section 4.c of the IETF Trust's Legal Provisions | |
Relating to IETF Documents | |
(https://trustee.ietf.org/license-info). | |
This version of this YANG module is part of RFC 8525; see | |
the RFC itself for full legal notices."; | |
revision 2019-01-04 { | |
description | |
"Added support for multiple datastores according to the | |
Network Management Datastore Architecture (NMDA)."; | |
reference | |
"RFC 8525: YANG Library"; | |
} | |
revision 2016-04-09 { | |
description | |
"Initial revision."; | |
reference | |
"RFC 7895: YANG Module Library"; | |
} | |
/* | |
* Typedefs | |
*/ | |
typedef revision-identifier { | |
type string { | |
pattern '\d{4}-\d{2}-\d{2}'; | |
} | |
description | |
"Represents a specific date in YYYY-MM-DD format."; | |
} | |
/* | |
* Groupings | |
*/ | |
grouping module-identification-leafs { | |
description | |
"Parameters for identifying YANG modules and submodules."; | |
leaf name { | |
type yang:yang-identifier; | |
mandatory true; | |
description | |
"The YANG module or submodule name."; | |
} | |
leaf revision { | |
type revision-identifier; | |
description | |
"The YANG module or submodule revision date. If no revision | |
statement is present in the YANG module or submodule, this | |
leaf is not instantiated."; | |
} | |
} | |
grouping location-leaf-list { | |
description | |
"Common leaf-list parameter for the locations of modules and | |
submodules."; | |
leaf-list location { | |
type inet:uri; | |
description | |
"Contains a URL that represents the YANG schema | |
resource for this module or submodule. | |
This leaf will only be present if there is a URL | |
available for retrieval of the schema for this entry."; | |
} | |
} | |
grouping module-implementation-parameters { | |
description | |
"Parameters for describing the implementation of a module."; | |
leaf-list feature { | |
type yang:yang-identifier; | |
description | |
"List of all YANG feature names from this module that are | |
supported by the server, regardless whether they are defined | |
in the module or any included submodule."; | |
} | |
leaf-list deviation { | |
type leafref { | |
path "../../module/name"; | |
} | |
description | |
"List of all YANG deviation modules used by this server to | |
modify the conformance of the module associated with this | |
entry. Note that the same module can be used for deviations | |
for multiple modules, so the same entry MAY appear within | |
multiple 'module' entries. | |
This reference MUST NOT (directly or indirectly) | |
refer to the module being deviated. | |
Robust clients may want to make sure that they handle a | |
situation where a module deviates itself (directly or | |
indirectly) gracefully."; | |
} | |
} | |
grouping module-set-parameters { | |
description | |
"A set of parameters that describe a module set."; | |
leaf name { | |
type string; | |
description | |
"An arbitrary name of the module set."; | |
} | |
list module { | |
key "name"; | |
description | |
"An entry in this list represents a module implemented by the | |
server, as per Section 5.6.5 of RFC 7950, with a particular | |
set of supported features and deviations."; | |
reference | |
"RFC 7950: The YANG 1.1 Data Modeling Language"; | |
uses module-identification-leafs; | |
leaf namespace { | |
type inet:uri; | |
mandatory true; | |
description | |
"The XML namespace identifier for this module."; | |
} | |
uses location-leaf-list; | |
list submodule { | |
key "name"; | |
description | |
"Each entry represents one submodule within the | |
parent module."; | |
uses module-identification-leafs; | |
uses location-leaf-list; | |
} | |
uses module-implementation-parameters; | |
} | |
list import-only-module { | |
key "name revision"; | |
description | |
"An entry in this list indicates that the server imports | |
reusable definitions from the specified revision of the | |
module but does not implement any protocol-accessible | |
objects from this revision. | |
Multiple entries for the same module name MAY exist. This | |
can occur if multiple modules import the same module but | |
specify different revision dates in the import statements."; | |
leaf name { | |
type yang:yang-identifier; | |
description | |
"The YANG module name."; | |
} | |
leaf revision { | |
type union { | |
type revision-identifier; | |
type string { | |
length "0"; | |
} | |
} | |
description | |
"The YANG module revision date. | |
A zero-length string is used if no revision statement | |
is present in the YANG module."; | |
} | |
leaf namespace { | |
type inet:uri; | |
mandatory true; | |
description | |
"The XML namespace identifier for this module."; | |
} | |
uses location-leaf-list; | |
list submodule { | |
key "name"; | |
description | |
"Each entry represents one submodule within the | |
parent module."; | |
uses module-identification-leafs; | |
uses location-leaf-list; | |
} | |
} | |
} | |
grouping yang-library-parameters { | |
description | |
"The YANG library data structure is represented as a grouping | |
so it can be reused in configuration or another monitoring | |
data structure."; | |
list module-set { | |
key "name"; | |
description | |
"A set of modules that may be used by one or more schemas. | |
A module set does not have to be referentially complete, | |
i.e., it may define modules that contain import statements | |
for other modules not included in the module set."; | |
uses module-set-parameters; | |
} | |
list schema { | |
key "name"; | |
description | |
"A datastore schema that may be used by one or more | |
datastores. | |
The schema must be valid and referentially complete, i.e., | |
it must contain modules to satisfy all used import | |
statements for all modules specified in the schema."; | |
leaf name { | |
type string; | |
description | |
"An arbitrary name of the schema."; | |
} | |
leaf-list module-set { | |
type leafref { | |
path "../../module-set/name"; | |
} | |
description | |
"A set of module-sets that are included in this schema. | |
If a non-import-only module appears in multiple module | |
sets, then the module revision and the associated features | |
and deviations must be identical."; | |
} | |
} | |
list datastore { | |
key "name"; | |
description | |
"A datastore supported by this server. | |
Each datastore indicates which schema it supports. | |
The server MUST instantiate one entry in this list per | |
specific datastore it supports. | |
Each datastore entry with the same datastore schema SHOULD | |
reference the same schema."; | |
leaf name { | |
type ds:datastore-ref; | |
description | |
"The identity of the datastore."; | |
} | |
leaf schema { | |
type leafref { | |
path "../../schema/name"; | |
} | |
mandatory true; | |
description | |
"A reference to the schema supported by this datastore. | |
All non-import-only modules of the schema are implemented | |
with their associated features and deviations."; | |
} | |
} | |
} | |
/* | |
* Top-level container | |
*/ | |
container yang-library { | |
config false; | |
description | |
"Container holding the entire YANG library of this server."; | |
uses yang-library-parameters; | |
leaf content-id { | |
type string; | |
mandatory true; | |
description | |
"A server-generated identifier of the contents of the | |
'/yang-library' tree. The server MUST change the value of | |
this leaf if the information represented by the | |
'/yang-library' tree, except '/yang-library/content-id', has | |
changed."; | |
} | |
} | |
/* | |
* Notifications | |
*/ | |
notification yang-library-update { | |
description | |
"Generated when any YANG library information on the | |
server has changed."; | |
leaf content-id { | |
type leafref { | |
path "/yanglib:yang-library/yanglib:content-id"; | |
} | |
mandatory true; | |
description | |
"Contains the YANG library content identifier for the updated | |
YANG library at the time the notification is generated."; | |
} | |
} | |
/* | |
* Legacy groupings | |
*/ | |
grouping module-list { | |
status deprecated; | |
description | |
"The module data structure is represented as a grouping | |
so it can be reused in configuration or another monitoring | |
data structure."; | |
grouping common-leafs { | |
status deprecated; | |
description | |
"Common parameters for YANG modules and submodules."; | |
leaf name { | |
type yang:yang-identifier; | |
status deprecated; | |
description | |
"The YANG module or submodule name."; | |
} | |
leaf revision { | |
type union { | |
type revision-identifier; | |
type string { | |
length "0"; | |
} | |
} | |
status deprecated; | |
description | |
"The YANG module or submodule revision date. | |
A zero-length string is used if no revision statement | |
is present in the YANG module or submodule."; | |
} | |
} | |
grouping schema-leaf { | |
status deprecated; | |
description | |
"Common schema leaf parameter for modules and submodules."; | |
leaf schema { | |
type inet:uri; | |
description | |
"Contains a URL that represents the YANG schema | |
resource for this module or submodule. | |
This leaf will only be present if there is a URL | |
available for retrieval of the schema for this entry."; | |
} | |
} | |
list module { | |
key "name revision"; | |
status deprecated; | |
description | |
"Each entry represents one revision of one module | |
currently supported by the server."; | |
uses common-leafs { | |
status deprecated; | |
} | |
uses schema-leaf { | |
status deprecated; | |
} | |
leaf namespace { | |
type inet:uri; | |
mandatory true; | |
status deprecated; | |
description | |
"The XML namespace identifier for this module."; | |
} | |
leaf-list feature { | |
type yang:yang-identifier; | |
status deprecated; | |
description | |
"List of YANG feature names from this module that are | |
supported by the server, regardless of whether they are | |
defined in the module or any included submodule."; | |
} | |
list deviation { | |
key "name revision"; | |
status deprecated; | |
description | |
"List of YANG deviation module names and revisions | |
used by this server to modify the conformance of | |
the module associated with this entry. Note that | |
the same module can be used for deviations for | |
multiple modules, so the same entry MAY appear | |
within multiple 'module' entries. | |
The deviation module MUST be present in the 'module' | |
list, with the same name and revision values. | |
The 'conformance-type' value will be 'implement' for | |
the deviation module."; | |
uses common-leafs { | |
status deprecated; | |
} | |
} | |
leaf conformance-type { | |
type enumeration { | |
enum implement { | |
description | |
"Indicates that the server implements one or more | |
protocol-accessible objects defined in the YANG module | |
identified in this entry. This includes deviation | |
statements defined in the module. | |
For YANG version 1.1 modules, there is at most one | |
'module' entry with conformance type 'implement' for a | |
particular module name, since YANG 1.1 requires that | |
at most one revision of a module is implemented. | |
For YANG version 1 modules, there SHOULD NOT be more | |
than one 'module' entry for a particular module | |
name."; | |
} | |
enum import { | |
description | |
"Indicates that the server imports reusable definitions | |
from the specified revision of the module but does | |
not implement any protocol-accessible objects from | |
this revision. | |
Multiple 'module' entries for the same module name MAY | |
exist. This can occur if multiple modules import the | |
same module but specify different revision dates in | |
the import statements."; | |
} | |
} | |
mandatory true; | |
status deprecated; | |
description | |
"Indicates the type of conformance the server is claiming | |
for the YANG module identified by this entry."; | |
} | |
list submodule { | |
key "name revision"; | |
status deprecated; | |
description | |
"Each entry represents one submodule within the | |
parent module."; | |
uses common-leafs { | |
status deprecated; | |
} | |
uses schema-leaf { | |
status deprecated; | |
} | |
} | |
} | |
} | |
/* | |
* Legacy operational state data nodes | |
*/ | |
container modules-state { | |
config false; | |
status deprecated; | |
description | |
"Contains YANG module monitoring information."; | |
leaf module-set-id { | |
type string; | |
mandatory true; | |
status deprecated; | |
description | |
"Contains a server-specific identifier representing | |
the current set of modules and submodules. The | |
server MUST change the value of this leaf if the | |
information represented by the 'module' list instances | |
has changed."; | |
} | |
uses module-list { | |
status deprecated; | |
} | |
} | |
/* | |
* Legacy notifications | |
*/ | |
notification yang-library-change { | |
status deprecated; | |
description | |
"Generated when the set of modules and submodules supported | |
by the server has changed."; | |
leaf module-set-id { | |
type leafref { | |
path "/yanglib:modules-state/yanglib:module-set-id"; | |
} | |
mandatory true; | |
status deprecated; | |
description | |
"Contains the module-set-id value representing the | |
set of modules and submodules supported at the server | |
at the time the notification is generated."; | |
} | |
} | |
} |