rfc9195xml2.original.xml | rfc9195.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!-- | <!DOCTYPE rfc [ | |||
:folding=sidekick: | <!ENTITY nbsp " "> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | ||||
<!ENTITY wj "⁠"> | ||||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<?rfc toc="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" | |||
<?rfc tocompact="yes"?> | docName="draft-ietf-netmod-yang-instance-file-format-21" number="9195" obsolete | |||
<?rfc tocdepth="4"?> | s="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth=" | |||
<?rfc tocindent="yes"?> | 4" symRefs="true" sortRefs="true" version="3" consensus="true"> | |||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" ipr="trust200902" docName="draft-ietf-netmod-yang-instance-f | ||||
ile-format-21"> | ||||
<front> | <front> | |||
<title abbrev="YANG Instance Data">YANG Instance Data File Format</title> | <title abbrev="YANG Instance Data">A File Format for YANG Instance Data</tit | |||
le> | ||||
<seriesInfo name="RFC" value="9195"/> | ||||
<author initials="B." surname="Lengyel" fullname="Balazs Lengyel"> | <author initials="B." surname="Lengyel" fullname="Balazs Lengyel"> | |||
<organization abbrev="Ericsson"> Ericsson </organization> | <organization abbrev="Ericsson">Ericsson</organization> | |||
<address> | <address> | |||
<postal> | ||||
<street>Magyar Tudosok korutja 11</street> | ||||
<city>Budapest</city> | ||||
<country>Hungary</country> | ||||
<code>1117</code> | ||||
</postal> | ||||
<email>balazs.lengyel@ericsson.com</email> | <email>balazs.lengyel@ericsson.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Benoit Claise" initials="B" surname="Claise"> | <author fullname="Benoit Claise" initials="B." surname="Claise"> | |||
<organization>Huawei</organization> | <organization>Huawei</organization> | |||
<address> | <address> | |||
<email>benoit.claise@huawei.com</email> | <email>benoit.claise@huawei.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2021"/> | <date year="2022" month="February"/> | |||
<area>OPS</area> | <area>OPS</area> | |||
<workgroup>Netmod</workgroup> | <workgroup>Netmod</workgroup> | |||
<abstract> | ||||
<abstract> | ||||
<t> | <t> | |||
There is a need to document data defined in YANG models at design time, | There is a need to document data defined in YANG models at design time, | |||
implementation time or when a live server is unavailable. | implementation time, or when a live server is unavailable. | |||
This document specifies a standard | This document specifies a standard | |||
file format for YANG instance data, which follows the syntax and semanti cs | file format for YANG instance data, which follows the syntax and semanti cs | |||
of existing YANG models, and annotates it with metadata. | of existing YANG models and annotates it with metadata. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="intro" title="Introduction"> | <section anchor="intro" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t> | <t> | |||
There is a need to document data defined in YANG models when a live serv er is unavailable. | There is a need to document data defined in YANG models when a live serv er is unavailable. | |||
Data is often needed at design, implementation time or even later | Data is often needed at design time, implementation time, or even later | |||
when a live running server is unavailable. | when a live running server is unavailable. | |||
To facilitate this offline delivery of data, this document specifies a s tandard | To facilitate this offline delivery of data, this document specifies a s tandard | |||
format for YANG instance data sets and YANG instance data files. | format for YANG instance data sets and YANG instance data files. | |||
The format of the instance data set is defined by the "ietf-yang-instanc e-data" | The format of the instance data set is defined by the "ietf-yang-instanc e-data" | |||
YANG module, see <xref target="instance_data_yam"/>. | YANG module; see <xref target="instance_data_yam" format="default"/>. | |||
The YANG data model in this document conforms to the Network | The YANG data model in this document conforms to the Network | |||
Management Datastore Architecture (NMDA) defined in <xref target="RFC834 | Management Datastore Architecture (NMDA) defined in <xref target="RFC834 | |||
2"/> | 2" format="default"/>. | |||
</t> | ||||
<t>The following is a list of already implemented and potential use case | ||||
s. | ||||
<list style="format UC%d"> | ||||
<t>Documentation of server capabilities</t> | ||||
<t>Preloading default configuration data</t> | ||||
<t>Documenting factory default settings</t> | ||||
<t>Storing the configuration of a device, e.g., for backup, archive or | ||||
audit purposes</t> | ||||
<t>Storing diagnostics data</t> | ||||
<t>Allowing YANG instance data to potentially be carried within other | ||||
IPC message formats</t> | ||||
<t>Default instance data used as part of a templating solution</t> | ||||
<t>Providing data examples in RFCs or internet drafts</t> | ||||
</list> | ||||
</t> | </t> | |||
<t><xref target="detailed_use_cases"/> describes the first three use | <t>The following is a list of already-implemented and potential use cases. | |||
</t> | ||||
<ol spacing="normal" type="UC%d"> | ||||
<li anchor="uc1">Documentation of server capabilities</li> | ||||
<li anchor="uc2">Preloading default configuration data</li> | ||||
<li anchor="uc3">Documenting factory default settings</li> | ||||
<li anchor="uc4">Storing the configuration of a device, e.g., for backup | ||||
, archive, or | ||||
audit purposes</li> | ||||
<li anchor="uc5">Storing diagnostics data</li> | ||||
<li anchor="uc6">Allowing YANG instance data to potentially be carried w | ||||
ithin other inter-process communication (IPC) message formats</li> | ||||
<li anchor="uc7">Default instance data used as part of a templating solu | ||||
tion</li> | ||||
<li anchor="uc8">Providing data examples in RFCs or internet drafts</li> | ||||
</ol> | ||||
<t><xref target="detailed_use_cases" format="default"/> describes the firs | ||||
t three use | ||||
cases in detail. | cases in detail. | |||
</t><t> | </t> | |||
<t> | ||||
There are many and varied use cases where YANG instance data | There are many and varied use cases where YANG instance data | |||
could be used. This document does not limit future uses of instance data | could be used. This document does not limit future uses of instance data | |||
sets, so specifying how and when to use YANG instance data | sets, so specifying how and when to use YANG instance data | |||
is out of scope for this document. It is anticipated that other | is out of scope for this document. It is anticipated that other | |||
documents will define specific use cases. Use cases are listed | documents will define specific use cases. Use cases are listed | |||
only as examples. | only as examples. | |||
</t> | </t> | |||
<section title="Terminology" anchor="terminology"> | <section anchor="terminology" numbered="true" toc="default"> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <name>Terminology</name> | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | <t> | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
described in BCP 14 <xref target="RFC2119"/> | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
<xref target="RFC8174"/> when, and only when, they | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
appear in all capitals, as shown here.</t> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
<t>Instance Data: A collection of instantiated data nodes.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
<t>Instance Data Set: A named set of data items annotated with metadata | be interpreted as | |||
that can be used as instance data in a YANG data tree.</t> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
<t>Instance Data File: A file containing an instance data set formatted | when, and only when, they appear in all capitals, as shown here. | |||
according to the rules described in this document.</t> | </t> | |||
<t>Content-schema: A set of YANG modules with their revision, supported | <dl> | |||
features, and deviations for which the instance data set contains inst | <dt>Instance Data:</dt><dd>A collection of instantiated data nodes.</dd> | |||
ance data.</t> | <dt>Instance Data Set:</dt><dd>A named set of data items annotated with | |||
<t>Content defining YANG module: an individual YANG module that is part | metadata | |||
of the content-schema.</t> | that can be used as instance data in a YANG data tree.</dd> | |||
<t>The term "server" is used as defined in <xref target="RFC8342"/>.</t> | <dt>Instance Data File:</dt><dd>A file containing an instance data set f | |||
ormatted | ||||
according to the rules described in this document.</dd> | ||||
<dt>Content-schema:</dt><dd>A set of YANG modules with their revision, s | ||||
upported | ||||
features, and deviations for which the instance data set contains inst | ||||
ance data.</dd> | ||||
<dt>Content-defining YANG Module:</dt><dd>An individual YANG module th | ||||
at is part of the content-schema.</dd> | ||||
</dl> | ||||
<t>The term "server" is used as defined in <xref target="RFC8342" format | ||||
="default"/>.</t> | ||||
</section> | </section> | |||
<section title="Principles"> | <section numbered="true" toc="default"> | |||
<name>Principles</name> | ||||
<t>The following is a list of the basic principles of the instance data format: | <t>The following is a list of the basic principles of the instance data format: | |||
<list style="format P%d"> | ||||
<t>Two standard formats shall be defined based on the XML and | ||||
JSON encodings.</t> | ||||
<t>Instance data shall reuse existing encoding rules for | ||||
YANG defined data. | ||||
</t> | ||||
<t>Metadata about the instance data set | ||||
(<xref target="instance_data_set_metadata"/>) shall be defined.</t | ||||
> | ||||
<t>A YANG instance data set shall be allowed to contain data | ||||
for multiple YANG modules.</t> | ||||
<t>Instance data shall be allowed to contain configuration data, | ||||
state data, or a mix of the two.</t> | ||||
<t>Partial data sets shall be allowed.</t> | ||||
<t>The YANG instance data format shall be usable for any data for wh | ||||
ich | ||||
YANG module(s) are defined and available to the reader, independen | ||||
t | ||||
of whether the module is implemented by a server.</t> | ||||
<t>It shall be possible to report the identity of the datastore with | ||||
which the | ||||
instance data set is associated.</t> | ||||
</list> | ||||
</t> | </t> | |||
<ol spacing="normal" type="P%d"><li>Two standard formats shall be define | ||||
d based on the XML and | ||||
JSON encodings.</li> | ||||
<li>Instance data shall reuse existing encoding rules for | ||||
YANG-defined data. | ||||
</li> | ||||
<li>Metadata about the instance data set | ||||
(<xref target="instance_data_set_metadata" format="default"/>) sha | ||||
ll be defined.</li> | ||||
<li>A YANG instance data set shall be allowed to contain data | ||||
for multiple YANG modules.</li> | ||||
<li>Instance data shall be allowed to contain configuration data, | ||||
state data, or a mix of the two.</li> | ||||
<li>Partial data sets shall be allowed.</li> | ||||
<li>The YANG instance data format shall be usable for any data for whi | ||||
ch | ||||
YANG module(s) are defined and available to the reader, independen | ||||
t | ||||
of whether the module is implemented by a server.</li> | ||||
<li>It shall be possible to report the identity of the datastore with | ||||
which the | ||||
instance data set is associated.</li> | ||||
</ol> | ||||
</section> | </section> | |||
<section title="Delivery of Instance Data"> | <section numbered="true" toc="default"> | |||
<name>Delivery of Instance Data</name> | ||||
<t>Instance data sets that are produced as | <t>Instance data sets that are produced as | |||
a result of some sort of specification or design effort | a result of some sort of specification or design effort | |||
may be available without the need for a live | may be available without the need for a live | |||
server e.g., via download from the vendor's website, or in any other | server, e.g., via download from the vendor's website or in any other | |||
way that product documentation is distributed.</t> | way that product documentation is distributed.</t> | |||
<t>Other instance data sets may be read from or produced by the YANG | <t>Other instance data sets may be read from or produced by the YANG | |||
server itself e.g., UC5 documenting diagnostic data.</t> | server itself, e.g., <xref target="uc5" format="none">UC5</xref> doc | |||
umenting diagnostic data.</t> | ||||
</section> | </section> | |||
<section title="Data Life cycle"> | <section numbered="true" toc="default"> | |||
<t> | <name>Data Life Cycle</name> | |||
<t> | ||||
A YANG instance data set is created at a specific | A YANG instance data set is created at a specific | |||
point of time. If the data changes afterwards, the instance data s et | point of time. If the data changes afterwards, the instance data s et | |||
will no longer represent the current data, unless it is updated. | will no longer represent the current data unless it is updated. | |||
The current values may be | The current values may be | |||
retrieved at run-time via NETCONF/RESTCONF or | retrieved at runtime via NETCONF/RESTCONF or | |||
received e.g., in YANG-Push notifications. | received, e.g., in YANG-Push notifications. | |||
</t> | </t> | |||
<t> | <t> | |||
Whether the instance data changes and if so, when and how, | Whether the instance data changes and, if so, when and how | |||
should be described either in the instance data set's description | should be described either in the instance data set's description | |||
statement or in some other implementation specific manner. | statement or in some other implementation-specific manner. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="instance_data_file_format" numbered="true" toc="default"> | ||||
<section anchor="instance_data_file_format" title="Instance Data File Format | <name>Instance Data File Format</name> | |||
"> | ||||
<t> | <t> | |||
A YANG instance data file MUST contain a single instance data set and no | A YANG instance data file <bcp14>MUST</bcp14> contain a single instance data set and no | |||
additional data. | additional data. | |||
</t> | </t> | |||
<t>The format of the instance data set is defined by the | <t>The format of the instance data set is defined by the | |||
"ietf-yang-instance-data" YANG module. | "ietf-yang-instance-data" YANG module. | |||
It is made up of a header part and content-data. | It is made up of a header part and content-data. | |||
The header part carries metadata for the instance data set. | The header part carries metadata for the instance data set. | |||
The content-data, defined as an anydata data node, carries | The content-data, defined as an anydata data node, carries | |||
the instance data that the user wants to document/provide. | the instance data that the user wants to document and/or provide. | |||
The syntax and semantics of content-data is defined by the content-schem | The syntax and semantics of content-data are defined by the content-sche | |||
a. | ma. | |||
</t> | </t> | |||
<t>Two formats are specified based on the XML and JSON YANG encodings. The | <t>Two formats are specified based on the XML and JSON YANG encodings. The | |||
file formats are achieved by applying the respective XML and JSON | file formats are achieved by applying the respective XML and JSON | |||
encoding rules for the YANG structure included in this document. | encoding rules for the YANG structure included in this document. | |||
Later, as other YANG encodings (e.g., CBOR) are defined, further | Later, as other YANG encodings (e.g., CBOR) are defined, further | |||
instance data formats may be specified. | instance data formats may be specified. | |||
</t> | </t> | |||
<t>The content-data part MUST conform to the content-schema, while allowin | <t>The content-data part <bcp14>MUST</bcp14> conform to the content-schema | |||
g for the | while allowing for the | |||
exceptions listed below. The content-data part SHALL follow the | exceptions listed below. The content-data part <bcp14>SHALL</bcp14> foll | |||
encoding rules defined in <xref target="RFC7950"/> for XML and | ow the | |||
<xref target="RFC7951"/> for JSON and MUST use UTF-8 character encoding. | encoding rules defined in <xref target="RFC7950" format="default"/> for | |||
Content-data MAY include: | XML and | |||
<list style="symbols"> | <xref target="RFC7951" format="default"/> for JSON and <bcp14>MUST</bcp1 | |||
<t>metadata, as defined by <xref target="RFC7952"/>.</t> | 4> use UTF-8 character encoding. | |||
<t>origin metadata, as specified in | Content-data <bcp14>MAY</bcp14> include: | |||
<xref target="RFC8526"/> and <xref target="RFC8527"/></t> | ||||
<t>implementation specific metadata relevant to individual | ||||
data nodes. Unknown metadata MUST be ignored by users of | ||||
instance data, allowing it to be used | ||||
later for other purposes.</t> | ||||
</list> | ||||
</t> | </t> | |||
<t>An instance data set MAY contain data for any number of | <ul spacing="normal"> | |||
YANG modules; if needed it MAY carry the complete configuration and stat | <li>metadata, as defined by <xref target="RFC7952" format="default"/>.</ | |||
e | li> | |||
<li>origin metadata, as specified in | ||||
<xref target="RFC8526" format="default"/> and <xref target="RFC8527" f | ||||
ormat="default"/>.</li> | ||||
<li>implementation-specific metadata relevant to individual | ||||
data nodes. Unknown metadata <bcp14>MUST</bcp14> be ignored by users | ||||
of | ||||
instance data, allowing it to be used | ||||
later for other purposes.</li> | ||||
</ul> | ||||
<t>An instance data set <bcp14>MAY</bcp14> contain data for any number of | ||||
YANG modules; if needed, it <bcp14>MAY</bcp14> carry the complete config | ||||
uration and state | ||||
data for a server. | data for a server. | |||
Default values should be excluded where they do not provide | Default values should be excluded where they do not provide | |||
additional useful data. | additional useful data. | |||
</t><t> | </t> | |||
<t> | ||||
Configuration ("config true") and operational state data ("config false" ) | Configuration ("config true") and operational state data ("config false" ) | |||
MAY be mixed in the instance data file. | <bcp14>MAY</bcp14> be mixed in the instance data file. | |||
</t><t> | ||||
Instance data files MAY contain partial data sets. This means "mandatory | ||||
", | ||||
"min-elements", "require-instance true", "must" and "when" constraints M | ||||
AY be violated. | ||||
</t> | </t> | |||
<t>The name of the instance data file SHOULD be of the form (using ABNF no | <t> | |||
tation <xref target="RFC5234"/>): | Instance data files <bcp14>MAY</bcp14> contain partial data sets. This m | |||
<figure align="center" anchor="filename" suppress-title="true"> | eans "mandatory", | |||
<artwork align="left" name="filename-abnf"> | "min-elements", "require-instance true", "must", and "when" constraints | |||
<![CDATA[ instance-data-set-name ["@" ( revision-date / timestamp ) ] | <bcp14>MAY</bcp14> be violated. | |||
</t> | ||||
<t>The name of the instance data file <bcp14>SHOULD</bcp14> be of the foll | ||||
owing form (using ABNF notation <xref target="RFC5234" format="default"/>): | ||||
</t> | ||||
<sourcecode name="filename-abnf" type="abnf"><![CDATA[ | ||||
instance-data-set-name ["@" ( revision-date / timestamp ) ] | ||||
( ".xml" / ".json" ) | ( ".xml" / ".json" ) | |||
]]></sourcecode> | ||||
E.g., acme-router-modules.xml | <t>Examples include:</t> | |||
E.g., acme-router-modules@2018-01-25.xml | <artwork><![CDATA[ | |||
E.g., acme-router-modules@2018-01-25T15_06_34_3+01_00.json | acme-router-modules.xml | |||
]]> | acme-router-modules@2018-01-25.xml | |||
</artwork> | acme-router-modules@2018-01-25T15_06_34_3+01_00.json | |||
</figure> | ]]></artwork> | |||
<t> | ||||
If the leaf "name" is present in the instance data header, | If the leaf "name" is present in the instance data header, | |||
its value SHOULD be used for the "instance-data-set-name" in the filenam e. | its value <bcp14>SHOULD</bcp14> be used for the "instance-data-set-name" in the filename. | |||
If the "revision-date" is present in the filename it MUST conform to | If the "revision-date" is present in the filename, it <bcp14>MUST</bcp14 > conform to | |||
the format of the revision-date leaf in the YANG model. | the format of the revision-date leaf in the YANG model. | |||
If the "revision-date" is present in both the filename and in the | If the "revision-date" is present in both the filename and the | |||
instance data header, the revision date in the file name MUST be | instance data header, the revision date in the filename <bcp14>MUST</bcp | |||
14> be | ||||
set to the latest revision date inside the instance data set. | set to the latest revision date inside the instance data set. | |||
If the "timestamp" is present in the filename it MUST conform to | If the "timestamp" is present in the filename, it <bcp14>MUST</bcp14> co nform to | |||
the format of the timestamp leaf in the YANG model except for | the format of the timestamp leaf in the YANG model except for | |||
replacing colons as described below. | replacing colons as described below. | |||
If the "timestamp" is present both in the filename and in the | If the "timestamp" is present in both the filename and the | |||
instance data header, the timestamp in the file name SHOULD be | instance data header, the timestamp in the filename <bcp14>SHOULD</bcp14 | |||
> be | ||||
set to the timestamp inside the instance data set; any colons, | set to the timestamp inside the instance data set; any colons, | |||
if present, shall be replaced by underscores. | if present, shall be replaced by underscores. | |||
</t> | </t> | |||
<t anchor="instance_data_set_metadata">Metadata, information about the | <t anchor="instance_data_set_metadata">Metadata, information about the | |||
data set itself MUST be included. Some metadata items are | data set itself, <bcp14>MUST</bcp14> be included. Some metadata items are | |||
defined in the YANG module "ietf-yang-instance-data", but other items MAY | defined in the YANG module "ietf-yang-instance-data", but other items <bcp | |||
be used.</t><t> | 14>MAY</bcp14> | |||
Metadata MUST include: | be used.</t> | |||
<list><t><list style="symbols"> | <t> | |||
<t>Version of the YANG Instance Data format (if not explicitly present | Metadata <bcp14>MUST</bcp14> include: | |||
the default value is used)</t> | </t> | |||
</list></t></list> | <ul empty="true" spacing="normal"> | |||
Metadata SHOULD include: | <li> | |||
<list><t><list style="symbols"> | <ul spacing="normal"> | |||
<t>Name of the data set</t> | <li>Version of the YANG instance data format (if not explicitly pres | |||
<t>Content-schema specification (i.e., the "content-schema" node)</t> | ent, the default value is used).</li> | |||
<t>Description of the instance data set. The description SHOULD | </ul> | |||
contain information whether and how the data can change during | </li> | |||
the lifetime of the server | </ul> | |||
</t> | <t> | |||
<t>An indication whether default values are included. | Metadata <bcp14>SHOULD</bcp14> include: | |||
The default handling uses the concepts defined in <xref target="RFC6 | </t> | |||
243"/>, | <ul empty="true" spacing="normal"> | |||
however as only concepts are re-used, users of instance data sets, | <li> | |||
do not need to support RFC 6243. | <ul spacing="normal"> | |||
</t> | <li>Name of the data set.</li> | |||
</list></t></list> | <li>Content-schema specification (i.e., the "content-schema" node).< | |||
</t> | /li> | |||
<section title="Specifying the Content Schema"> | <li>Description of the instance data set. The description <bcp14>SHO | |||
ULD</bcp14> | ||||
contain information on whether and how the data can change during | ||||
the lifetime of the server. | ||||
</li> | ||||
<li>An indication of whether default values are included. | ||||
The default handling uses the concepts defined in <xref target="RFC6 | ||||
243" format="default"/>; | ||||
however, as only concepts are re-used, users of instance data sets | ||||
do not need to support <xref target="RFC6243"/>. | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<section numbered="true" toc="default"> | ||||
<name>Specifying the Content Schema</name> | ||||
<t>To properly understand and use an instance data set, the user needs t o | <t>To properly understand and use an instance data set, the user needs t o | |||
know the content-schema. The content-schema can be either | know the content-schema. The content-schema can be specified either in | |||
specified in external documents or within the instance data set. | external documents or within the instance data set. | |||
In the latter case one of the following methods MUST be used: | In the latter case, one of the following methods <bcp14>MUST</bcp14> b | |||
<list> | e used: | |||
<t>Inline method: Include the needed information as part of the | </t> | |||
instance data set.</t> | <dl spacing="normal"> | |||
<t>Simplified-Inline method: Include the needed information as part o | <dt>Inline method:</dt><dd>Include the needed information as part of t | |||
f | he | |||
the instance data set; short specification, only the module name and | instance data set.</dd> | |||
revision-date is used.</t> | <dt>Simplified-inline method:</dt><dd>Include the needed information a | |||
<t>URI method: Include a URI that references another YANG instance | s part of | |||
the instance data set; only the modules' name and revision-date are | ||||
used.</dd> | ||||
<dt>URI method:</dt><dd>Include a URI that references another YANG ins | ||||
tance | ||||
data file. This instance data file will use the same content-schema | data file. This instance data file will use the same content-schema | |||
as the referenced YANG instance data file. | as the referenced YANG instance data file (if you don't want to repe | |||
(if you don't want to repeat the info again and again)</t> | at the info again and again).</dd> | |||
</list> | </dl> | |||
Additional methods e.g., a YANG-package based solution may be added la | <t> | |||
ter. | Additional methods, e.g., a YANG-package-based solution may be added l | |||
ater. | ||||
</t> | </t> | |||
<t>Note, the specified content-schema only indicates the set of | <t>Note that the specified content-schema only indicates the set of | |||
modules that were used to define this YANG instance data set. | modules that were used to define this YANG instance data set. | |||
Sometimes instance data may be used for a server supporting a | Sometimes instance data may be used for a server supporting a | |||
different YANG module set (e.g., for the "Preloading default | different YANG module set (e.g., for the "Preloading default | |||
configuration data" use-case, UC2 in <xref target="intro"/>, the insta nce | configuration data" use case, <xref target="uc2" format="none">UC2</xr ef> in <xref target="intro" format="default"/>, the instance | |||
data set may not be updated every time the YANG modules on the | data set may not be updated every time the YANG modules on the | |||
server are updated). | server are updated). | |||
Whether an instance data set originally defined using a specific | Whether an instance data set originally defined using a specific | |||
content-schema is usable with a different other schema | content-schema is usable with another schema | |||
depends on many factors including the amount of differences and the | depends on many factors, including the number of differences and the | |||
compatibility between the original and the | compatibility between the original and the | |||
other schema, considering modules, revisions, features, | other schema when considering modules, revisions, features, | |||
deviations, the scope of the instance data, etc. | deviations, the scope of the instance data, etc. | |||
</t> | </t> | |||
<section title="Inline Method"> | <section numbered="true" toc="default"> | |||
<t>The inline-yang-library anydata data node carries instance data (co | <name>Inline Method</name> | |||
nforming to | <t>The "inline-yang-library" anydata data node carries instance data ( | |||
ietf-yang-library@2019-01-04) <xref target="RFC8525"/> that specifie | conforming to | |||
s the content | "ietf-yang-library@2019-01-04") <xref target="RFC8525" format="defau | |||
defining YANG modules including revision, | lt"/> that specifies the content-defining YANG modules, including revision, | |||
supported features, deviations and any relevant additional data. | supported features, deviations, and any additional relevant data. | |||
An example of the "inline" method is provided in <xref target="acme- | An example of the inline method is provided in <xref target="acme-ro | |||
router-modules-example"/>. | uter-modules-example" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Simplified-Inline Method"> | <section numbered="true" toc="default"> | |||
<t>The instance data set contains a list of content defining YANG | <name>Simplified-Inline Method</name> | |||
modules including the revision date for each. | <t>The instance data set contains a list of content-defining YANG | |||
modules, including the revision date for each. | ||||
Usage of this method implies that the modules are | Usage of this method implies that the modules are | |||
used without any deviations and with all features | used without any deviations and with all features | |||
supported. YANG modules that are only required to satisfy | supported. YANG modules that are only required to satisfy | |||
import-only dependencies MAY be excluded from the leaf-list. | import-only dependencies <bcp14>MAY</bcp14> be excluded from the le | |||
If they are excluded then the consumer of the instance data | af-list. | |||
If they are excluded, then the consumer of the instance data | ||||
set has to apply the YANG language rules to resolve the imports. | set has to apply the YANG language rules to resolve the imports. | |||
An example of the "simplified-inline" method is provided in <xref t arget="read-only-acm-rules-example"/>. | An example of the simplified-inline method is provided in <xref tar get="read-only-acm-rules-example" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="URI Method"> | <section numbered="true" toc="default"> | |||
<t>The "same-schema-as-file" leaf SHALL contain a URI that references | <name>URI Method</name> | |||
another YANG | <t>The "same-schema-as-file" leaf <bcp14>SHALL</bcp14> contain a URI t | |||
hat references another YANG | ||||
instance data file. The current instance data file will use the same | instance data file. The current instance data file will use the same | |||
content-schema as the referenced file. | content-schema as the referenced file. | |||
</t><t> | </t> | |||
The referenced instance data file MAY have no content-data if it is | <t> | |||
The referenced instance data file <bcp14>MAY</bcp14> have no content | ||||
-data if it is | ||||
used solely for specifying the content-schema. | used solely for specifying the content-schema. | |||
</t><t> | </t> | |||
If a referenced instance data file is unavailable, content-schema | <t> | |||
If a referenced instance data file is unavailable, the content-schem | ||||
a | ||||
is unknown. | is unknown. | |||
</t><t> | </t> | |||
<t> | ||||
The URI method is advantageous when the user wants to avoid the | The URI method is advantageous when the user wants to avoid the | |||
overhead of specifying the content-schema in each instance data | overhead of specifying the content-schema in each instance data | |||
file: E.g., In UC6, when the system creates a diagnostic file | file -- for example, in <xref target="uc6" format="none">UC6</xref>, | |||
every minute to document the state of the server. | when the system creates a diagnostic file every minute to document the state of | |||
</t> | the server. | |||
<t>An example of the "URI" method is provided in <xref target="acme-rout | </t> | |||
er-netconf-diagnostics-example"/>.</t> | <t>An example of the URI method is provided in <xref target="acme-rout | |||
er-netconf-diagnostics-example" format="default"/>.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section title="Examples" anchor="examples"> | <section anchor="examples" numbered="true" toc="default"> | |||
<section title="Documentation of server capabilities" anchor="acme-route | <name>Examples</name> | |||
r-modules-example"> | <section anchor="acme-router-modules-example" numbered="true" toc="defau | |||
<t>The example file acme-router-modules@2021-09-16.xml reflects UC1 in | lt"> | |||
<xref target="intro"/>. | <name>Documentation of Server Capabilities</name> | |||
<t>The example file acme-router-modules@2022-01-20.xml reflects <xref | ||||
target="uc1" format="none">UC1</xref> in <xref target="intro" format="default"/> | ||||
. | ||||
It provides a list of supported YANG modules and NETCONF capabilitie s for a server. | It provides a list of supported YANG modules and NETCONF capabilitie s for a server. | |||
It uses the "inline" method to specify the content-schema.</t> | It uses the inline method to specify the content-schema.</t> | |||
<t>The example uses artwork folding <xref target="RFC8792"/>.</t> | <t>The example uses artwork folding <xref target="RFC8792" format="def | |||
<figure align="center" anchor="acme-router-modules"> | ault"/>.</t> | |||
<artwork align="left" name="acme-router-modules@2021-09-16.xml"> | <figure anchor="acme-router-modules"> | |||
<![CDATA[========== NOTE: '\' line wrapping per RFC 8792 =========== | <sourcecode name="acme-router-modules@2022-01-20.xml" type="xml"><![ | |||
CDATA[ | ||||
========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<instance-data-set xmlns=\ | <instance-data-set xmlns=\ | |||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | |||
<name>acme-router-modules</name> | <name>acme-router-modules</name> | |||
<content-schema> | <content-schema> | |||
<inline-yang-library> | <inline-yang-library> | |||
<modules-state \ | <modules-state \ | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | |||
<module> | <module> | |||
skipping to change at line 354 ¶ | skipping to change at line 385 ¶ | |||
</module> | </module> | |||
</modules-state> | </modules-state> | |||
</inline-yang-library> | </inline-yang-library> | |||
</content-schema> | </content-schema> | |||
<revision> | <revision> | |||
<date>2020-10-23</date> | <date>2020-10-23</date> | |||
<description>Initial version</description> | <description>Initial version</description> | |||
</revision> | </revision> | |||
<description>Defines the minimal set of modules that any \ | <description>Defines the minimal set of modules that any \ | |||
acme-router will contain. This minimal set will \ | acme-router will contain. This minimal set will \ | |||
only change when a new SW release is \ | only change when a new software release is \ | |||
introduced.</description> | introduced.</description> | |||
<contact>info@acme.example.com</contact> | <contact>info@acme.example.com</contact> | |||
<content-data> | <content-data> | |||
<modules-state \ | <modules-state \ | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | |||
<module> | <module> | |||
<name>ietf-yang-library</name> | <name>ietf-yang-library</name> | |||
<revision>2019-01-04</revision> | <revision>2019-01-04</revision> | |||
<namespace>\ | <namespace>\ | |||
urn:ietf:params:xml:ns:yang:ietf-yang-library\ | urn:ietf:params:xml:ns:yang:ietf-yang-library\ | |||
</namespace> | </namespace> | |||
<conformance-type>implement</conformance-type> | <conformance-type>implement</conformance-type> | |||
</module> | </module> | |||
<module> | <module> | |||
<name>ietf-system</name> | <name>ietf-system</name> | |||
<revision>2014-08-06</revision> | <revision>2014-08-06</revision> | |||
<namespace>urn:ietf:params:xml:ns:yang:ietf-system</namespace> | <namespace>urn:ietf:params:xml:ns:yang:ietf-system</namespace> | |||
<feature>sys:authentication</feature> | <feature>sys:authentication</feature> | |||
<feature>sys:local-users</feature> | <feature>sys:local-users</feature> | |||
<deviation> | <deviation> | |||
<name>acme-system-ext</name> | <name>acme-system-ext</name> | |||
<revision>2018-08-06</revision> | <revision>2018-08-06</revision> | |||
</deviation> | </deviation> | |||
<conformance-type>implement</conformance-type> | <conformance-type>implement</conformance-type> | |||
</module> | </module> | |||
<module> | <module> | |||
<name>ietf-netconf-monitoring</name> | <name>ietf-netconf-monitoring</name> | |||
skipping to change at line 414 ¶ | skipping to change at line 445 ¶ | |||
<netconf-state \ | <netconf-state \ | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"> | |||
<capabilities> | <capabilities> | |||
<capability>\ | <capability>\ | |||
urn:ietf:params:netconf:capability:validate:1.1\ | urn:ietf:params:netconf:capability:validate:1.1\ | |||
</capability> | </capability> | |||
</capabilities> | </capabilities> | |||
</netconf-state> | </netconf-state> | |||
</content-data> | </content-data> | |||
</instance-data-set> | </instance-data-set> | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section title="Preloading default configuration data" anchor="read-onl | <section anchor="read-only-acm-rules-example" numbered="true" toc="defau | |||
y-acm-rules-example"> | lt"> | |||
<t>The example file read-only-acm-rules@2021-09-16.xml reflects UC2 in | <name>Preloading Default Configuration Data</name> | |||
<xref target="intro"/>. | <t>The example file read-only-acm-rules@2022-01-20.xml reflects <xref | |||
target="uc2" format="none">UC2</xref> in <xref target="intro" format="default"/> | ||||
. | ||||
It provides a default rule set for a read-only operator role. | It provides a default rule set for a read-only operator role. | |||
It uses the "simplified-inline" method for specifying the content-sc | It uses the simplified-inline method for specifying the content-sche | |||
hema.</t> | ma.</t> | |||
<figure align="center" anchor="read-only-acm-rules"> | <figure anchor="read-only-acm-rules"> | |||
<artwork align="left" name="read-only-acm-rules@2021-09-16.xml"> | <sourcecode name="read-only-acm-rules@2022-01-20.xml" type="xml"><![ | |||
<![CDATA[========== NOTE: '\' line wrapping per RFC 8792 =========== | CDATA[ | |||
========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<instance-data-set | <instance-data-set | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | |||
<name>read-only-acm-rules</name> | <name>read-only-acm-rules</name> | |||
<content-schema> | <content-schema> | |||
<module>ietf-netconf-acm@2018-02-14</module> | <module>ietf-netconf-acm@2018-02-14</module> | |||
</content-schema> | </content-schema> | |||
<revision> | <revision> | |||
<date>2018-07-04</date> | <date>2018-07-04</date> | |||
<description>Initial version</description> | <description>Initial version</description> | |||
</revision> | </revision> | |||
<description>Default access control rules for a read-only \ | <description>Default access control rules for a read-only \ | |||
role. This set of rules will only change when a new \ | role. This set of rules will only change when a new \ | |||
SW release is introduced.</description> | software release is introduced.</description> | |||
<content-data> | <content-data> | |||
<nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | |||
<enable-nacm>true</enable-nacm> | <enable-nacm>true</enable-nacm> | |||
<read-default>deny</read-default> | <read-default>deny</read-default> | |||
<exec-default>deny</exec-default> | <exec-default>deny</exec-default> | |||
<rule-list> | <rule-list> | |||
<name>read-only-role</name> | <name>read-only-role</name> | |||
<group>read-only-group</group> | <group>read-only-group</group> | |||
<rule> | <rule> | |||
<name>read-all</name> | <name>read-all</name> | |||
<module-name>*</module-name> | <module-name>*</module-name> | |||
<access-operation>read</access-operation> | <access-operation>read</access-operation> | |||
<action>permit</action> | <action>permit</action> | |||
</rule> | </rule> | |||
</rule-list> | </rule-list> | |||
</nacm> | </nacm> | |||
</content-data> | </content-data> | |||
</instance-data-set> | </instance-data-set> | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section title="Storing diagnostics data" anchor="acme-router-netconf-d | <section anchor="acme-router-netconf-diagnostics-example" numbered="true | |||
iagnostics-example"> | " toc="default"> | |||
<name>Storing Diagnostics Data</name> | ||||
<t>The example file acme-router-netconf-diagnostics@2018-01-25T17_00_3 8Z.json | <t>The example file acme-router-netconf-diagnostics@2018-01-25T17_00_3 8Z.json | |||
reflects UC5 in <xref target="intro"/>. | reflects <xref target="uc5" format="none">UC5</xref> in <xref target | |||
An instance data set is produced by the server every 15 minutes that | ="intro" format="default"/>. | |||
contains | An instance data set that contains | |||
statistics about the NETCONF server. As a new set is produced period | statistics about the NETCONF server is produced by the server every | |||
ically many times a day a revision-date | 15 minutes. As a new set is produced periodically many times a day, a revision-d | |||
would be useless; instead a timestamp is included.</t> | ate | |||
<figure align="center" anchor="acme-router-netconf-diagnostics"> | would be useless; instead, a timestamp is included.</t> | |||
<artwork align="left" name="acme-router-netconf-diagnostics@2018-01-25 | <figure anchor="acme-router-netconf-diagnostics"> | |||
T17_00_38Z.json"> | <sourcecode name="acme-router-netconf-diagnostics@2018-01-25T17_00_3 | |||
<![CDATA[========== NOTE: '\' line wrapping per RFC 8792 =========== | 8Z.json" type=""><![CDATA[ | |||
========== NOTE: '\' line wrapping per RFC 8792 =========== | ||||
{ | { | |||
"ietf-yang-instance-data:instance-data-set": { | "ietf-yang-instance-data:instance-data-set": { | |||
"name": "acme-router-netconf-diagnostics", | "name": "acme-router-netconf-diagnostics", | |||
"content-schema": { | "content-schema": { | |||
"same-schema-as-file": "file:///acme-diagnostics-schema.json" | "same-schema-as-file": "file:///acme-diagnostics-schema.json" | |||
}, | }, | |||
"timestamp": "2018-01-25T17:00:38Z", | "timestamp": "2018-01-25T17:00:38Z", | |||
"description": ["NETCONF statistics, \ | "description": ["NETCONF statistics, \ | |||
The data may change at any time."], | The data may change at any time."], | |||
skipping to change at line 495 ¶ | skipping to change at line 528 ¶ | |||
"dropped-sessions ": "87", | "dropped-sessions ": "87", | |||
"in-rpcs ": "8711", | "in-rpcs ": "8711", | |||
"in-bad-rpcs ": "408", | "in-bad-rpcs ": "408", | |||
"out-rpc-errors ": "408", | "out-rpc-errors ": "408", | |||
"out-notifications": "39007" | "out-notifications": "39007" | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section anchor="instance_data_yam" numbered="true" toc="default"> | |||
<section anchor="instance_data_yam" title="YANG Instance Data Model"> | <name>YANG Instance Data Model</name> | |||
<section title="Tree Diagram"> | <section numbered="true" toc="default"> | |||
<name>Tree Diagram</name> | ||||
<t> | <t> | |||
The following tree diagram <xref target="RFC8340"/> | The following tree diagram <xref target="RFC8340" format="default"/> | |||
provides an overview of the data model. | provides an overview of the data model. | |||
</t> | </t> | |||
<t> | <sourcecode name="" type="yangtree"><![CDATA[ | |||
<figure> | ||||
<artwork><![CDATA[ | ||||
module: ietf-yang-instance-data | module: ietf-yang-instance-data | |||
structure instance-data-set: | structure instance-data-set: | |||
+-- name? string | +--name? string | |||
+-- format-version? string | +--format-version? string | |||
+-- includes-defaults? enumeration | +--includes-defaults? enumeration | |||
+-- content-schema | +--content-schema | |||
| +-- (content-schema-spec)? | | +--(content-schema-spec)? | |||
| +--:(simplified-inline) | | +--:(simplified-inline) | |||
| | +-- module* module-with-revision-date | | | +--module* module-with-revision-date | |||
| +--:(inline) | | +--:(inline) | |||
| | +-- inline-yang-library <anydata> | | | +--inline-yang-library <anydata> | |||
| +--:(uri) | | +--:(uri) | |||
| +-- same-schema-as-file? inet:uri | | +--same-schema-as-file? inet:uri | |||
+-- description* string | +--description* string | |||
+-- contact? string | +--contact? string | |||
+-- organization? string | +--organization? string | |||
+-- datastore? ds:datastore-ref | +--datastore? ds:datastore-ref | |||
+-- revision* [date] | +--revision* [date] | |||
| +-- date string | | +--date string | |||
| +-- description? string | | +--description? string | |||
+-- timestamp? yang:date-and-time | +--timestamp? yang:date-and-time | |||
+-- content-data? <anydata> | +--content-data? <anydata> | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
<section title="YANG Model" anchor="yang-model"> | <section anchor="yang-model" numbered="true" toc="default"> | |||
<t> | <name>YANG Model</name> | |||
This YANG module imports typedefs from <xref target="RFC6991"/>, | <t> | |||
<xref target="RFC6243"/>, | This YANG module imports typedefs from <xref target="RFC6991" forma | |||
identities from <xref target="RFC8342"/> and | t="default"/>, | |||
the "structure" extension from <xref target="RFC8791"/>. | <xref target="RFC6243" format="default"/>, | |||
It also references <xref target="RFC8525"/>. | identities from <xref target="RFC8342" format="default"/>, and | |||
</t><t> | the "structure" extension from <xref target="RFC8791" format="defau | |||
<figure> | lt"/>. | |||
<artwork align="left" name="ietf-yang-instance-data@2021-09-16 | It also references <xref target="RFC8525" format="default"/>. | |||
.yang"><![CDATA[ | </t> | |||
<CODE BEGINS> file "ietf-yang-instance-data@2021-09-16.yang" | <sourcecode name="ietf-yang-instance-data@2022-01-20.yang" type="yang" m | |||
// RFC Ed.: replace the date above if the module gets changed in | arkers="true"><![CDATA[ | |||
//any way during reviews or RFC editor process and remove this note | ||||
module ietf-yang-instance-data { | module ietf-yang-instance-data { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"; | namespace "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"; | |||
prefix yid; | prefix yid; | |||
import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
prefix sx; | prefix sx; | |||
reference | reference | |||
"YANG Data Structure Extensions: | "RFC 8791: YANG Data Structure Extensions"; | |||
draft-ietf-netmod-yang-data-ext-05"; | ||||
} | } | |||
import ietf-datastores { | import ietf-datastores { | |||
prefix ds; | prefix ds; | |||
reference | reference | |||
"RFC 8342: Network Management Datastore Architecture (NMDA)"; | "RFC 8342: Network Management Datastore Architecture (NMDA)"; | |||
} | } | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
skipping to change at line 604 ¶ | skipping to change at line 629 ¶ | |||
"The module defines the structure and content of YANG | "The module defines the structure and content of YANG | |||
instance data sets. | instance data sets. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | |||
are to be interpreted as described in BCP 14 (RFC 2119) | are to be interpreted as described in BCP 14 (RFC 2119) | |||
(RFC 8174) when, and only when, they appear in all | (RFC 8174) when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
Copyright (c) 2021 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Revised BSD License | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's | |||
Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC 9195 | |||
the RFC itself for full legal notices."; | (https://www.rfc-editor.org/info/rfc9195); see the RFC itself | |||
// RFC Ed.: replace XXXX with RFC number and remove this note | for full legal notices."; | |||
revision 2021-09-16 { | revision 2022-01-20 { | |||
// RFC Ed.: replace the date above if the module gets changed in | ||||
// anyway during reviews or RFC editor process and remove | ||||
//this note | ||||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: YANG Instance Data Format"; | "RFC 9195: YANG Instance Data File Format"; | |||
// RFC Ed.: replace XXXX with RFC number and remove this note | ||||
} | } | |||
typedef module-with-revision-date { | typedef module-with-revision-date { | |||
type string { | type string { | |||
pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*' | pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*' | |||
+ '(@\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1]))?'; | + '(@\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1]))?'; | |||
pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*'; | pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*'; | |||
} | } | |||
description | description | |||
"A type defining a module name and an optional revision | "A type defining a module name and an optional revision | |||
date, e.g. ietf-yang-library@2019-01-04"; | date, e.g., ietf-yang-library@2019-01-04."; | |||
} | } | |||
sx:structure "instance-data-set" { | sx:structure instance-data-set { | |||
description | description | |||
"A data structure to define a format for YANG instance | "A data structure to define a format for YANG instance | |||
data. The majority of the YANG nodes provide meta-data | data. The majority of the YANG nodes provides metadata | |||
about the instance data; the instance data itself is | about the instance data; the instance data itself is | |||
contained only in the 'content-data' node."; | contained only in the 'content-data' node."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"An arbitrary name for the YANG instance data set. This | "An arbitrary name for the YANG instance data set. This | |||
value is primarily used for descriptive purposes. However, | value is primarily used for descriptive purposes. However, | |||
when the instance data set is saved to a file, then the | when the instance data set is saved to a file, then the | |||
filename MUST encode the name's value, per Section 2 | filename MUST encode the name's value per Section 2 | |||
of RFC XXXX."; | of RFC 9195."; | |||
// RFC Ed.: replace XXXX with RFC number and remove this note | ||||
} | } | |||
leaf format-version { | leaf format-version { | |||
type string { | type string { | |||
pattern '\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1])'; | pattern '\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1])'; | |||
} | } | |||
default "2021-09-16"; | default "2022-01-20"; | |||
// RFC Ed.: replace the date above if the module gets changed | ||||
// in anyway during reviews or RFC editor process and remove | ||||
// this note | ||||
description | description | |||
"The 'revision' of the 'ietf-yang-instance-data' module | "The 'revision' of the 'ietf-yang-instance-data' module | |||
used to encode this 'instance-data-set'."; | used to encode this 'instance-data-set'."; | |||
} | } | |||
leaf includes-defaults { | leaf includes-defaults { | |||
type ncwd:with-defaults-mode; | type ncwd:with-defaults-mode; | |||
default report-all; | default "report-all"; | |||
description " | description | |||
Indicates how data nodes with default values are | "Indicates how data nodes with default values are | |||
represented for all data nodes contained in the | represented for all data nodes contained in the | |||
instance-data-set. | instance-data-set. | |||
It uses the same definitions as per section 3 of RFC 6243, | It uses the same definitions as per Section 3 of RFC 6243 | |||
but applied in the context of an instance data file rather | but applied in the context of an instance data file rather | |||
than a NETCONF request using the <with-defaults> | than a NETCONF request using the <with-defaults> | |||
parameter. | parameter. | |||
For JSON files, the encoding of the 'report-all-tagged' | For JSON files, the encoding of the 'report-all-tagged' | |||
option is as defined in section 4.8.9 of RFC 8040."; | option is as defined in Section 4.8.9 of RFC 8040."; | |||
reference "With-defaults Capability for NETCONF, RFC 6243."; | reference | |||
"RFC 6243: With-defaults Capability for NETCONF"; | ||||
} | } | |||
container content-schema { | container content-schema { | |||
description | description | |||
"The content schema (i.e., YANG modules) used to create | "The content schema (i.e., YANG modules) used to create | |||
the instance data set. | the instance data set. | |||
If not present the user needs to obtain the information | If not present, the user needs to obtain the information | |||
through external documents."; | through external documents."; | |||
choice content-schema-spec { | choice content-schema-spec { | |||
description | description | |||
"Specification of the content-schema."; | "Specification of the content-schema."; | |||
case simplified-inline { | case simplified-inline { | |||
leaf-list module { | leaf-list module { | |||
type module-with-revision-date; | type module-with-revision-date; | |||
min-elements 1; | min-elements 1; | |||
description | description | |||
"The list of content defining YANG modules. | "The list of content-defining YANG modules. | |||
The value SHALL start with the module name. | The value SHALL start with the module name. | |||
If the module contains a revision statement the | If the module contains a revision statement, the | |||
revision date SHALL be included in the leaf-list | revision date SHALL be included in the leaf-list | |||
entry. | entry, e.g., ietf-yang-library@2019-01-04. | |||
E.g., ietf-yang-library@2019-01-04 | ||||
Usage of this leaf-list implies the modules are | Usage of this leaf-list implies the modules are | |||
used without any deviations and with all features | used without any deviations and with all features | |||
supported. Multiple revisions of the same module | supported. Multiple revisions of the same module | |||
MUST NOT be specified."; | MUST NOT be specified."; | |||
} | } | |||
} | } | |||
case inline { | case inline { | |||
anydata inline-yang-library { | anydata inline-yang-library { | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Instance data corresponding to the | "Instance data corresponding to the | |||
ietf-yang-library@2019-01-04 defining | ietf-yang-library@2019-01-04 defining | |||
the set of content defining YANG modules for | the set of content-defining YANG modules for | |||
this instance-data-set."; | this instance-data-set."; | |||
} | } | |||
} | } | |||
case uri { | case uri { | |||
leaf same-schema-as-file { | leaf same-schema-as-file { | |||
type inet:uri; | type inet:uri; | |||
description | description | |||
"A reference to another YANG instance data file. | "A reference to another YANG instance data file. | |||
This instance data file uses the same | This instance data file uses the same | |||
content schema as the referenced file. | content schema as the referenced file. | |||
Referenced files using the 'inline' or the | Referenced files using the 'inline' or the | |||
'simplified-inline' methods MUST be supported. | 'simplified-inline' methods MUST be supported. | |||
Referenced files using the 'URI Method' MAY be | Referenced files using the 'URI method' MAY be | |||
supported. | supported. | |||
The URL schemes 'file://' and 'https://' MUST | The URL schemes 'file://' and 'https://' MUST | |||
be supported, other schemes MAY also be | be supported; other schemes MAY also be | |||
supported."; | supported."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
leaf-list description { | leaf-list description { | |||
type string; | type string; | |||
description | description | |||
"Description of the instance data set."; | "Description of the instance data set."; | |||
} | } | |||
skipping to change at line 767 ¶ | skipping to change at line 783 ¶ | |||
type string; | type string; | |||
description | description | |||
"Organization responsible for the instance | "Organization responsible for the instance | |||
data set."; | data set."; | |||
} | } | |||
leaf datastore { | leaf datastore { | |||
type ds:datastore-ref; | type ds:datastore-ref; | |||
description | description | |||
"The identity of the datastore with which the | "The identity of the datastore with which the | |||
instance data set is associated, e.g., the datastore from | instance data set is associated, e.g., the datastore from | |||
where the data was read or the datastore into which the data | where the data was read, the datastore into which the data | |||
may be loaded or the datastore which is being documented. | may be loaded, or the datastore that is being documented. | |||
If a single specific datastore cannot be specified, the | If a single specific datastore cannot be specified, the | |||
leaf MUST be absent. | leaf MUST be absent. | |||
If this leaf is absent, then the datastore to which the | If this leaf is absent, then the datastore to which the | |||
instance data belongs is unspecified."; | instance data belongs is unspecified."; | |||
} | } | |||
list revision { | list revision { | |||
key "date"; | key "date"; | |||
description | description | |||
"Instance data sets that are produced as | "Instance data sets that are produced as | |||
a result of some sort of specification or design effort | a result of some sort of specification or design effort | |||
SHOULD have at least one revision entry. For every | SHOULD have at least one revision entry. For every | |||
published editorial change, a new unique revision SHOULD | published editorial change, a new unique revision SHOULD | |||
be added in front of the revisions sequence so that all | be added in front of the revisions sequence so that all | |||
revisions are in reverse chronological order. | revisions are in reverse chronological order. | |||
In case of instance data sets that are read from | In cases of instance data sets that are read from | |||
or produced by a server or otherwise subject to | or produced by a server or otherwise subject to | |||
frequent updates or changes, revision | frequent updates or changes, revision | |||
SHOULD NOT be present"; | SHOULD NOT be present."; | |||
leaf date { | leaf date { | |||
type string { | type string { | |||
pattern '\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1])'; | pattern '\d{4}-(1[0-2]|0[1-9])-(0[1-9]|[1|2][0-9]|3[0-1])'; | |||
} | } | |||
description | description | |||
"Specifies the date the instance data set | "Specifies the date the instance data set | |||
was last modified. Formatted as YYYY-MM-DD"; | was last modified. Formatted as YYYY-MM-DD."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Description of this revision of the instance data set."; | "Description of this revision of the instance data set."; | |||
} | } | |||
} | } | |||
leaf timestamp { | leaf timestamp { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description | description | |||
"The date and time when the instance data set | "The date and time when the instance data set | |||
was last modified. | was last modified. | |||
In case of instance data sets that are read from or | In cases of instance data sets that are read from or | |||
produced by a server or otherwise subject to frequent | produced by a server or otherwise subject to frequent | |||
updates or changes, timestamp SHOULD be present. | updates or changes, the timestamp SHOULD be present. | |||
If both a revision list entry and timestamp are present | If both a revision list entry and timestamp are present, | |||
the timestamp SHOULD contain the same date as the | the timestamp SHOULD contain the same date as the | |||
latest revision statement."; | latest revision statement."; | |||
} | } | |||
anydata content-data { | anydata content-data { | |||
description | description | |||
"Contains the real instance data. | "Contains the real instance data. | |||
The data MUST conform to the relevant YANG modules | The data MUST conform to the relevant YANG modules | |||
specified either in the content-schema or in some other | specified either in the content-schema or in some other | |||
implementation specific manner."; | implementation-specific manner."; | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="security" numbered="true" toc="default"> | ||||
<section anchor="security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>The YANG module defined in this document only defines a wrapper structu re | <t>The YANG module defined in this document only defines a wrapper structu re | |||
specifying a format and a metadata header for YANG | specifying a format and a metadata header for YANG | |||
instance data defined by the content-schema. Because of this | instance data defined by the content-schema. Because of this, | |||
the security considerations template for YANG models in | the security considerations template for YANG models in | |||
section 3.7.1 in <xref target="RFC8407"/> is not followed. | <xref target="RFC8407" sectionFormat="of" section="3.7.1"/> is not follo wed. | |||
The instance data is designed to be accessed as a stored file or | The instance data is designed to be accessed as a stored file or | |||
over any file access method or protocol. | over any file access method or protocol. | |||
</t> | </t> | |||
<t>The document does not specify any method to influence the | <t>The document does not specify any method to influence the | |||
behavior of a server.</t> | behavior of a server.</t> | |||
<t> | <t> | |||
The header part is usually not security sensitive, however sensitive | The header part is usually not security sensitive; however, sensitive | |||
information may be included, in which case it needs to be handled secure | information may be included, in which case it needs to be handled secure | |||
ly | ly, | |||
as mentioned below. Information to consider includes: | as mentioned below. Information to consider includes: | |||
<list style="symbol"> | ||||
<t>If the URI method is used for specification of the content-schema a | ||||
nd | ||||
the URI includes a userinfo subcomponent</t> | ||||
<t>Any description text</t> | ||||
</list> | ||||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<li>If the URI method is used for specification of the content-schema an | ||||
d | ||||
the URI includes a userinfo subcomponent</li> | ||||
<li>Any description text</li> | ||||
</ul> | ||||
<t>The content part may contain sensitive data. | <t>The content part may contain sensitive data. | |||
The security sensitivity of this data is completely dependent on | The security sensitivity of this data is completely dependent on | |||
the content-schema. | the content-schema. | |||
Depending on the nature of the instance data, instance data | Depending on the nature of the instance data, instance data | |||
files MAY need to be handled securely. | files <bcp14>MAY</bcp14> need to be handled securely. | |||
The same kind of handling should be applied to this file at-rest and | The same kind of handling should be applied to this file at rest and | |||
in-transit that would be needed for the result of a read operation | in transit that would be needed for the result of a read operation | |||
returning the same data. These in-transit protection mechanisms will | returning the same data. These in-transit protection mechanisms will | |||
also mitigate integrity issues when transporting the file. | also mitigate integrity issues when transporting the file. | |||
</t> | </t> | |||
<t>Instance data files should be protected against modification or | <t>Instance data files should be protected against modification or | |||
unauthorized access using normal file handling mechanisms. | unauthorized access using normal file-handling mechanisms. | |||
Care should be taken, when copying the original files or | When copying the original files or providing file access for | |||
providing file access for additional users, not to reveal | additional users, care should be taken not to reveal information | |||
information unintentionally. | unintentionally. | |||
</t> | </t> | |||
<t>If the URI method is used for specification of the content-schema, | <t>If the URI method is used for specification of the content-schema, | |||
there is a risk that the config schema section in the referenced YANG | there is a risk that the config schema section in the referenced YANG | |||
instance data file may be altered maliciously or even as part of its nor mal | instance data file may be altered maliciously or even as part of its nor mal | |||
handling. In this case the content-schema might differ from the one | handling. In this case, the content-schema might differ from the one | |||
expected. Protecting the integrity and stability of the referenced | expected. Protecting the integrity and stability of the referenced | |||
file should be ensured. | file should be ensured. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="iana" title="IANA Considerations"> | <section anchor="iana" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
<t>This document registers one URI and one YANG module.</t> | <t>This document registers one URI and one YANG module.</t> | |||
<section title="URI Registration"> | <section numbered="true" toc="default"> | |||
<t>This document registers one URI in the <xref target="RFC3688"> | <name>URI Registration</name> | |||
IETF XML registry </xref>. Following the format in RFC 3688, the | <t>This document registers the following URI in the <xref target="RFC368 | |||
following registration is requested to be made:</t> | 8" format="default"> | |||
<t><figure><artwork> | "IETF XML Registry"</xref>:</t> | |||
URI: urn:ietf:params:xml:ns:yang:ietf-yang-instance-data | <dl spacing="compact"> | |||
Registrant Contact: The IESG. | <dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-yang-instance-data</dd> | |||
XML: N/A, the requested URI is an XML namespace. | <dt>Registrant Contact:</dt><dd>The IESG.</dd> | |||
</artwork></figure></t> | <dt>XML:</dt><dd>N/A, the requested URI is an XML namespace.</dd> | |||
</dl> | ||||
</section> | </section> | |||
<section title="YANG Module Name Registration"> | <section numbered="true" toc="default"> | |||
<t>This document registers one YANG module in the YANG Module Names | <name>YANG Module Name Registration</name> | |||
registry <xref target="RFC6020"/>. Following the format in [RFC6020], | <t>This document registers the following YANG module in the "YANG Module | |||
the following registrations are requested: | Names" | |||
</t> | registry <xref target="RFC6020" format="default"/>:</t> | |||
<t><figure><artwork> | <dl spacing="compact"> | |||
name: ietf-yang-instance-data | <dt>Name:</dt><dd>ietf-yang-instance-data</dd> | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-yang-instance-data | <dt>Namespace:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-yang-instance-data</dd> | |||
prefix: yid | <dt>Prefix:</dt><dd>yid</dd> | |||
reference: RFC XXXX | <dt>Reference:</dt><dd>RFC 9195</dd> | |||
// RFC Ed.: replace XXXX with RFC number and remove this note | </dl> | |||
</artwork></figure></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section title="Acknowledgments"> | ||||
<t>For their valuable comments, discussions, and feedback, we wish to | ||||
acknowledge Andy Bierman, Juergen Schoenwaelder, Rob Wilton, Joe Clarke, | ||||
Kent Watsen, | ||||
Martin Bjorklund, Ladislav Lhotka, Qin Wu and other members of the Netmo | ||||
d WG.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<?rfc needLines="20"?> | ||||
<back> | <back> | |||
<references title="Normative References"> | <references> | |||
<?rfc include='reference.RFC.7950'?> | <name>References</name> | |||
<?rfc include='reference.RFC.7951'?> | <references> | |||
<?rfc include='reference.RFC.7952'?> | <name>Normative References</name> | |||
<?rfc include='reference.RFC.8526'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.8527'?> | FC.7950.xml"/> | |||
<?rfc include='reference.RFC.6243'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include="reference.RFC.8342"?> | FC.7951.xml"/> | |||
<?rfc include='reference.RFC.2119'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.8174'?> | FC.7952.xml"/> | |||
<?rfc include='reference.RFC.6991'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.8525'?> | FC.8526.xml"/> | |||
<?rfc include='reference.RFC.8791'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.6020'?> | FC.8527.xml"/> | |||
<?rfc include='reference.RFC.5234'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</references> | FC.6243.xml"/> | |||
<references title="Informative References"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.8641'?> | FC.8342.xml"/> | |||
<?rfc include='reference.RFC.8632'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.3688'?> | FC.2119.xml"/> | |||
<?rfc include="reference.RFC.8340"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include="reference.RFC.8407"?> | FC.8174.xml"/> | |||
<?rfc include='reference.RFC.8792'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include='reference.RFC.8808'?> | FC.6991.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8525.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8791.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6020.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5234.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8641.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8632.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3688.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8340.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8407.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8792.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8808.xml"/> | ||||
</references> | ||||
</references> | </references> | |||
<?rfc needLines="100"?> | <section numbered="true" toc="default"> | |||
<name>Backwards Compatibility</name> | ||||
<section title="Changes between revisions"> | <t>The concept of "backwards compatibility" and what changes are backwards | |||
<t>RFC Ed.: Remove section "Changes between revisions"</t> | compatible are not defined for instance data sets as they are highly | |||
<t>v20 - v21 | ||||
<list style="symbols"> | ||||
<t>Minor updates for IESG comments</t> | ||||
<t>Added ABNF as a normative reference for the filename's definition.< | ||||
/t> | ||||
<t>Enhanced security considerations</t> | ||||
<t>Added data change information to the description of the examples.</ | ||||
t> | ||||
</list> | ||||
</t> | ||||
<t>v19 - v20 | ||||
<list style="symbols"> | ||||
<t>Minor updates for IESG comments</t> | ||||
</list> | ||||
</t> | ||||
<t>v18 - v19 | ||||
<list style="symbols"> | ||||
<t>Updated leaf includes-defaults </t> | ||||
</list> | ||||
</t> | ||||
<t>v17 - v18 | ||||
<list style="symbols"> | ||||
<t>Added the report-all-tagged mode to the leaf includes-defaults</t> | ||||
</list> | ||||
</t> | ||||
<t>v16 - v17 | ||||
<list style="symbols"> | ||||
<t>Removed default statement from includes-default</t> | ||||
</list> | ||||
</t> | ||||
<t>v15 - v16 | ||||
<list style="symbols"> | ||||
<t>Editorial changes</t> | ||||
</list> | ||||
</t> | ||||
<t>v14 - v15 | ||||
<list style="symbols"> | ||||
<t>Removed reference to revision-label</t> | ||||
<t>For the inline method made the usage of | ||||
ietf-yang-library@2019-01-04 mandatory. | ||||
Simplified the case "inline" in the YANG module.</t> | ||||
<t>Removed the "inline-module" leaf as it does not carry | ||||
useful information anymore.</t> | ||||
<t>Removed YANG feature</t> | ||||
</list> | ||||
</t> | ||||
<t>v13 - v14 | ||||
<list style="symbols"> | ||||
<t>Added leaf includes-defaults</t> | ||||
<t>Many small changes based on AD review</t> | ||||
</list> | ||||
</t> | ||||
<t>v09 - v13 | ||||
<list style="symbols"> | ||||
<t>Editorial updates</t> | ||||
</list> | ||||
</t> | ||||
<t>v08 - v09 | ||||
<list style="symbols"> | ||||
<t>Removed statement "the format will be similar to the response of a | ||||
NETCONF get operation"</t> | ||||
<t>Introduced artwork folding in the examples</t> | ||||
</list> | ||||
</t> | ||||
<t>v07 - v08 | ||||
<list style="symbols"> | ||||
<t>Moved compatibility into appendix</t> | ||||
<t>Renamed yid-version to format-version. | ||||
Changed format to date of the YANG module</t> | ||||
<t>Made support of ietf-yang-library mandatory if | ||||
inline-content-schema is supported</t> | ||||
<t>Many small changes based on WGLC</t> | ||||
</list> | ||||
</t> | ||||
<t>v06 - v07 | ||||
<list style="symbols"> | ||||
<t>Updated terminology, use-cases</t> | ||||
<t>Many small changes based on WGLC</t> | ||||
</list> | ||||
</t> | ||||
<t>v05 - v06 | ||||
<list style="symbols"> | ||||
<t>Modified module name format, removed .yin or .yang extension</t> | ||||
<t>Removed pattern for module and inline-module. The | ||||
usage of revision-label should also be allowed. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>v04 - v05 | ||||
<list style="symbols"> | ||||
<t>Updated according to YANG-Doctor review</t> | ||||
<t>Updated security considerations</t> | ||||
<t>Added a wrapping container for the schema, and renamed the data | ||||
nodes in the inline and uri cases. | ||||
</t> | ||||
<t>Allowed .yin for simplified-inline schema naming. | ||||
Made date optional if it is unavailable in the YANG module.</t> | ||||
<t>Added a mandatory yid-version to the header metadata to allow | ||||
later updates of the module.</t> | ||||
</list> | ||||
</t> | ||||
<t>v03 - v04 | ||||
<list style="symbols"> | ||||
<t>removed entity-tag and last-modified timestamp</t> | ||||
<t>Added simplified-inline method of content-schema specification</t> | ||||
</list> | ||||
</t> | ||||
<t>v02 - v03 | ||||
<list style="symbols"> | ||||
<t>target renamed to "content-schema" and "content defining YANG | ||||
module(s)"</t> | ||||
<t>Made name of instance data set optional</t> | ||||
<t>Updated according to draft-ietf-netmod-yang-data-ext-03</t> | ||||
<t>Clarified that entity-tag and last-modified timestamp are encoded | ||||
as metadata. While they contain useful data, the HTTP-header based | ||||
encoding from Restconf is not suitable.</t> | ||||
</list> | ||||
</t> | ||||
<t>v01 - v02 | ||||
<list style="symbols"> | ||||
<t>Removed design time from terminology</t> | ||||
<t>Defined the format of the content-data part by referencing various | ||||
RFCs and drafts instead of the result of the get-data and get operatio | ||||
ns.</t> | ||||
<t>Changed target-ptr to a choice</t> | ||||
<t>Inline target-ptr may include augmenting modules and alternatives t | ||||
o ietf-yang-library</t> | ||||
<t>Moved list of target modules into a separate <target-modules> el | ||||
ement.</t> | ||||
<t>Added backwards compatibility considerations</t> | ||||
</list> | ||||
</t> | ||||
<t>v00 - v01 | ||||
<list style="symbols"> | ||||
<t>Added the target-ptr metadata with 3 methods</t> | ||||
<t>Added timestamp metadata</t> | ||||
<t>Removed usage of dedicated .yid file extension</t> | ||||
<t>Added list of use cases</t> | ||||
<t>Added list of principles</t> | ||||
<t>Updated examples</t> | ||||
<t>Moved detailed use case descriptions to appendix</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Backwards Compatibility"> | ||||
<t>The concept of backwards compatibility and what changes are backwards | ||||
compatible are not defined for "instance data sets" as it is highly | ||||
dependent on the specific use case and the content-schema. | dependent on the specific use case and the content-schema. | |||
</t><t> | </t> | |||
<t> | ||||
In case of "instance data sets" that are the result of design or specifica tion | In case of "instance data sets" that are the result of design or specifica tion | |||
activity, some changes that may be good to avoid are listed below. | activity, some changes that may be good to avoid are listed below. | |||
</t><t> | </t> | |||
<t> | ||||
YANG uses the concept of managed entities identified by key | YANG uses the concept of managed entities identified by key | |||
values; if the connection between the represented entity and the key | values; if the connection between the represented entity and the key | |||
value is not preserved during an update, this may lead to the following pr oblems. | value is not preserved during an update, this may lead to the following pr oblems. | |||
<list style="symbols"> | </t> | |||
<t>If the key value of a list entry that represents the same | <ul spacing="normal"> | |||
<li>If the key value of a list entry that represents the same | ||||
managed entity as before is changed, the user may mistakenly | managed entity as before is changed, the user may mistakenly | |||
identify the list entry as new.</t> | identify the list entry as new.</li> | |||
<t>If the meaning of a list entry is changed, but the key values | <li>If the meaning of a list entry is changed but the key values | |||
are not (e.g., redefining an alarm-type but not changing its | are not (e.g., redefining an alarm-type but not changing its | |||
alarm-type-id) the change may not be noticed.</t> | alarm-type-id), the change may not be noticed.</li> | |||
<t>If the key value of a previously removed list entry is reused | <li>If the key value of a previously removed list entry is reused | |||
for a different entity, the change may be misinterpreted as | for a different entity, the change may be misinterpreted as | |||
reintroducing the previous entity.</t> | reintroducing the previous entity.</li> | |||
</list> | </ul> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="detailed_use_cases" numbered="true" toc="default"> | ||||
<section title="Detailed Use Cases" anchor="detailed_use_cases"> | <name>Detailed Use Cases</name> | |||
<t>This section is non-normative.</t> | <t>This section is non-normative.</t> | |||
<section title="Use Case 1: Early Documentation of Server Capabilities"> | <section numbered="true" toc="default"> | |||
<t> A server has a number of server-capabilities that are defined | <name>Use Case 1: Early Documentation of Server Capabilities</name> | |||
<t> A server has a number of server capabilities that are defined | ||||
in YANG modules and can be retrieved from the server | in YANG modules and can be retrieved from the server | |||
using protocols like NETCONF or RESTCONF. Server capabilities include: | using protocols like NETCONF or RESTCONF. Server capabilities include: | |||
<list style="symbols"> | </t> | |||
<t> data defined in "ietf-yang-library": YANG modules, submodules, | <ul spacing="normal"> | |||
<li> data defined in "ietf-yang-library": YANG modules, submodules, | ||||
features, deviations, schema-mounts, and datastores | features, deviations, schema-mounts, and datastores | |||
supported (<xref target="RFC8525"/>)</t> | supported (<xref target="RFC8525" format="default"/>).</li> | |||
<t>alarms supported (<xref target="RFC8632"/>)</t> | <li>alarms supported (<xref target="RFC8632" format="default"/>).</li> | |||
<t>data nodes and subtrees that support or do not support on-change | <li>data nodes and subtrees that support or do not support on-change | |||
notifications (<xref target="RFC8641"/>)</t> | notifications (<xref target="RFC8641" format="default"/>).</li> | |||
<t>netconf-capabilities in ietf-netconf-monitoring.</t> | <li>netconf-capabilities in ietf-netconf-monitoring.</li> | |||
</list> | </ul> | |||
<t> | ||||
While it is good practice to allow a client to query these capabilitie s | While it is good practice to allow a client to query these capabilitie s | |||
from the live server, that is often not possible. | from the live server, that is often not possible. | |||
</t> | </t> | |||
<t> | <t> | |||
Often when a network node is released, an associated NMS | Often when a network node is released, an associated Network Managemen | |||
(network management system) is also released with it. The NMS depends | t System (NMS) | |||
on the capabilities of the server. | is also released with it. The NMS depends on the capabilities of the s | |||
erver. | ||||
During NMS implementation, information about server capabilities is ne eded. | During NMS implementation, information about server capabilities is ne eded. | |||
If the information is unavailable early in some offline | If the information is unavailable early in some offline | |||
document, but only as instance data from the live network node, the NM | document but only as instance data from the live network node, the NMS | |||
S implementation will be | implementation will be | |||
delayed, because it has to wait until the network node is ready. Also | delayed because it has to wait until the network node is ready. Also, | |||
assuming | assuming | |||
that all NMS implementors will have a correctly configured network nod | that all NMS implementors will have correctly configured network nodes | |||
es | from which data can be retrieved is a very expensive proposition. (An | |||
from which data can be retrieved, is a very expensive proposition. (An | NMS may handle dozens | |||
NMS may handle dozens | ||||
of node types.) | of node types.) | |||
</t> | </t> | |||
<t> | <t> | |||
Network operators often build their own home-grown NMS systems that | Network operators often build their own homegrown NMS systems that | |||
need to be integrated with a vendor's network node. The operator | need to be integrated with a vendor's network node. The operator | |||
needs to know the network node's server capabilities in order to do | needs to know the network node's server capabilities in order to do | |||
this. Moreover, the network operator's decision to buy a vendor's | this. Moreover, the network operator's decision to buy a vendor's | |||
product may even be influenced by the network node's OAM feature set | product may even be influenced by the network node's Operations, Admin istration, and Maintenance (OAM) feature set | |||
documented as the server's capabilities. | documented as the server's capabilities. | |||
</t> | </t> | |||
<t> | <t> | |||
Beside NMS implementors, system integrators and many others also need the same | Beside NMS implementors, system integrators and many others also need the same | |||
information early. Examples could be model driven testing, generating | information early. Examples could be model-driven testing, generating | |||
documentation, etc. | documentation, etc. | |||
</t> | </t> | |||
<t> | <t> | |||
Most server-capabilities are relatively stable and change only during | Most server capabilities are relatively stable and change only during | |||
upgrade or due to licensing or the addition or removal of hardware. Th ey are | upgrade or due to licensing or the addition or removal of hardware. Th ey are | |||
usually defined by a vendor at design time, before the product is rele ased. | usually defined by a vendor at design time, before the product is rele ased. | |||
It is feasible and advantageous to define/document them early | ||||
e.g., in a YANG instance data File. | It is feasible and advantageous to define and document them early, | |||
e.g., in a YANG instance data file. | ||||
</t> | </t> | |||
<t>It is anticipated that a separate IETF document will define in | <t>It is anticipated that a separate IETF document will define in | |||
detail how and which set of server capabilities should be documented. | detail how and which set of server capabilities should be documented. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Use Case 2: Preloading Data"> | <section numbered="true" toc="default"> | |||
<name>Use Case 2: Preloading Data</name> | ||||
<t> | <t> | |||
There are parts of the configuration that must be fully configurable | There are parts of the configuration that must be fully configurable | |||
by the operator. However, often a simple default configuration will | by the operator. However, a simple default configuration often will | |||
be sufficient. | be sufficient. | |||
</t><t> | </t> | |||
<t> | ||||
One example is access control groups/roles and related rules. | One example is access control groups/roles and related rules. | |||
While a sophisticated operator may define dozens of different groups, | While a sophisticated operator may define dozens of different groups, | |||
often a basic (read-only operator, read-write system administrator, | often a basic (read-only operator, read-write system administrator, | |||
security-administrator) triplet will be enough. | security-administrator) triplet will be enough. | |||
Vendors will often provide such default configuration data to make | Vendors will often provide such default configuration data to make | |||
device configuration easier for an operator. | device configuration easier for an operator. | |||
</t> <t> | </t> | |||
<t> | ||||
The device vendor may define a set of default groups (/nacm:nacm/group s) and rules | The device vendor may define a set of default groups (/nacm:nacm/group s) and rules | |||
for these groups to access specific parts of the common models (/nacm: nacm/rule-list/rule). | for these groups to access specific parts of the common models (/nacm: nacm/rule-list/rule). | |||
</t> | </t> | |||
<t> | <t> | |||
YANG instance data files can be used to document and/or preload the | YANG instance data files can be used to document and/or preload the | |||
default configuration. | default configuration. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Use Case 3: Documenting Factory Default Settings"> | <section numbered="true" toc="default"> | |||
<name>Use Case 3: Documenting Factory Default Settings</name> | ||||
<t> | <t> | |||
Nearly every server has a factory default configuration. If the | Nearly every server has a factory default configuration. If the | |||
system is really badly misconfigured or if the current configuration | system is really badly misconfigured or if the current configuration | |||
is to be abandoned, the system can be reset to the default factory | is to be abandoned, the system can be reset to the default factory | |||
configuration. | configuration. | |||
</t><t> | </t> | |||
<t> | ||||
YANG instance data can be used to document the factory default | YANG instance data can be used to document the factory default | |||
configuration. See <xref target="RFC8808"></xref>. | configuration. See <xref target="RFC8808" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>For their valuable comments, discussions, and feedback, we wish to | ||||
acknowledge <contact fullname="Andy Bierman"/>, <contact fullname="Juerg | ||||
en Schoenwaelder"/>, <contact fullname="Rob Wilton"/>, <contact fullname="Joe C | ||||
larke"/>, <contact fullname="Kent Watsen"/>, <contact fullname="Martin Bjork | ||||
lund"/>, <contact fullname="Ladislav Lhotka"/>, <contact fullname="Qin Wu"/>, an | ||||
d other members of the Netmod Working Group.</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
<!-- Local Variables: --> | ||||
<!-- fill-column:72 --> | ||||
<!-- End: --> | ||||
End of changes. 157 change blocks. | ||||
649 lines changed or deleted | 598 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |