| 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/ | ||||