| rfc9196xml2.original.xml | rfc9196.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" []> | ||||
| <!-- | <!DOCTYPE rfc [ | |||
| :folding=sidekick: | <!ENTITY nbsp " "> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <!ENTITY zwsp "​"> | |||
| <?rfc toc="yes"?> | <!ENTITY nbhy "‑"> | |||
| <?rfc tocompact="yes"?> | <!ENTITY wj "⁠"> | |||
| <?rfc tocdepth="4"?> | ]> | |||
| <?rfc tocindent="yes"?> | ||||
| <?rfc symrefs="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" | |||
| <?rfc sortrefs="yes"?> | number="9196" docName="draft-ietf-netconf-notification-capabilities-21" obsolet | |||
| <?rfc comments="yes"?> | es="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth= | |||
| <?rfc inline="yes"?> | "4" symRefs="true" sortRefs="true" version="3" consensus="true"> | |||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <rfc category="std" ipr="trust200902" docName="draft-ietf-netconf-notification-c | ||||
| apabilities-21"> | ||||
| <front> | <front> | |||
| <title abbrev="System and Notification Capabilities"> | <title abbrev="YANG System & Notification Capabilities"> | |||
| YANG Modules describing Capabilities for Systems and Datastore Update Noti | YANG Modules Describing Capabilities for Systems and Datastore Update Noti | |||
| fications | fications | |||
| </title> | </title> | |||
| <seriesInfo name="RFC" value="9196"/> | ||||
| <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> | <postal> | |||
| <street>Magyar Tudosok korutja 11</street> | <street>Magyar Tudosok korutja 11</street> | |||
| <city>1117 Budapest</city> | <city>Budapest</city> | |||
| <country>Hungary</country> | <country>Hungary</country> | |||
| <code>1117</code> | ||||
| </postal> | </postal> | |||
| <email>balazs.lengyel@ericsson.com</email> | <email>balazs.lengyel@ericsson.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Alexander Clemm" initials="A" surname="Clemm"> | <author fullname="Alexander Clemm" initials="A" surname="Clemm"> | |||
| <organization>Futurewei</organization> | <organization>Futurewei</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>2330 Central Expressway</street> | <street>2330 Central Expressway</street> | |||
| <city>Santa Clara, CA 95050</city> | <city>Santa Clara</city> | |||
| <country>USA</country> | <region>CA</region> | |||
| <code>95050</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | </postal> | |||
| <email>ludwig@clemm.org</email> | <email>ludwig@clemm.org</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> | |||
| <postal> | <postal> | |||
| <street></street> | <street>George's Court Townsend Street</street> | |||
| <city></city> | <city>Dublin 2</city> | |||
| <country></country> | <country>Ireland</country> | |||
| </postal> | </postal> | |||
| <email>benoit.claise@huawei.com</email> | <email>benoit.claise@huawei.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date/> | <date month="February" year="2022"/> | |||
| <area>OPS</area> | <area>OPS</area> | |||
| <workgroup>NETCONF</workgroup> | <workgroup>NETCONF</workgroup> | |||
| <keyword>NMDA</keyword> | ||||
| <keyword>NETCONF</keyword> | ||||
| <keyword>RESTCONF</keyword> | ||||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This document defines two YANG modules,"ietf-system-capabilities” and | This document defines two YANG modules, "ietf-system-capabilities" and | |||
| "ietf-notification-capabilities”. | "ietf-notification-capabilities". | |||
| </t><t> | </t> | |||
| <t> | ||||
| The module "ietf-system-capabilities" provides a placeholder structure th at | The module "ietf-system-capabilities" provides a placeholder structure th at | |||
| can be used to discover YANG related system capabilities for servers. | can be used to discover YANG-related system capabilities for servers. | |||
| The module can be used to report capability information from the server | The module can be used to report capability information from the server | |||
| at run time or at implementation time, by making use of the YANG Instance | at runtime or at implementation time by making use of the YANG instance d | |||
| Data | ata file format. | |||
| File Format. | </t> | |||
| </t><t> | <t> | |||
| The module "ietf-notification-capabilities" augments "ietf-system-capabil ities" | The module "ietf-notification-capabilities" augments "ietf-system-capabil ities" | |||
| to specify capabilities related to Subscription to YANG Notifications | to specify capabilities related to "Subscription to YANG Notifications | |||
| for Datastore Updates. | for Datastore Updates" (RFC 8641). | |||
| </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> | |||
| Servers and/or publishers often have capabilities, values describing | Servers and/or publishers often have capabilities, which can be represen | |||
| operational behavior, that need to be conveyed to clients, which is | ted by values that designate operational behavior, that need to be conveyed to c | |||
| enabled by the YANG modules described in this document. | lients. The YANG modules that are defined in this document facilitate this. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| There is a need to publish this capability information as it is part of | There is a need to publish this capability information as it is part of | |||
| the API contract between the server and client. Examples include maximum | the API contract between the server and client. Examples include the max imum | |||
| size of data that can be stored or transferred, information about counte rs (whether a node supports "on-change" telemetry), etc. Such capabilities are o ften dependent on a vendor's implementation or the available resources at deploy ment. | size of data that can be stored or transferred, information about counte rs (whether a node supports "on-change" telemetry), etc. Such capabilities are o ften dependent on a vendor's implementation or the available resources at deploy ment. | |||
| Many such capabilities are specific to the complete system, | Many such capabilities are specific to the complete system, | |||
| individual YANG datastores <xref target="RFC8342"/>, specific parts of t he YANG | individual YANG datastores <xref target="RFC8342" format="default"/>, sp ecific parts of the YANG | |||
| schema, or even individual data nodes. It is a goal of this document to provide a | schema, or even individual data nodes. It is a goal of this document to provide a | |||
| common way of representing such capabilities in a format that is: | common way to represent such capabilities in a format that is: | |||
| <list style="symbols"> | ||||
| <t>vendor independent</t> | ||||
| <t>machine-readable</t> | ||||
| <t>available in an identical format both at implementation time a | ||||
| nd at run time.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| <li>vendor independent,</li> | ||||
| <li>machine readable, and</li> | ||||
| <li>available in an identical format both at implementation time and at | ||||
| runtime.</li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| Implementation-time information is needed by Network Management System | Implementation-time information is needed by Network Management System | |||
| (NMS) implementers. | (NMS) implementers. | |||
| An NMS implementation that supports notifications needs the informatio n | An NMS implementation that supports notifications needs information | |||
| about a system's capability so it can send "on-change" notifica tions. | about a system's capability so it can send "on-change" notifica tions. | |||
| If the information is not documented | If the information is not documented | |||
| in a way that is readily available to the NMS designer, but only as in stance data from | in a way that is readily available to the NMS designer, but only as in stance data from | |||
| the network node once it is deployed, | the network node once it is deployed, | |||
| the NMS implementation will be delayed, because it has to wait for the | the NMS implementation will be delayed because it has to wait for the | |||
| network node to be ready. In addition, the assumption that all | network node to be ready. In addition, the assumption that all | |||
| NMS implementers will | NMS implementers will | |||
| have a correctly configured network node available to retrieve data fr | have a correctly configured network node available from which to retri | |||
| om | eve data is an expensive proposition and may not always hold. (An NMS may need | |||
| is an expensive proposition and may not always hold. (An NMS may need | ||||
| to be able to handle many dozens of network node types.) | to be able to handle many dozens of network node types.) | |||
| Often a fully functional NMS is a requirement for introducing a new | Often, a fully functional NMS is a requirement for introducing a new | |||
| network node type | network node type | |||
| into a network, so delaying NMS readiness effectively also delays the | into a network, so delaying NMS readiness effectively also delays the | |||
| time at which a new network node type can be introduced into the netwo rk. | time at which a new network node type can be introduced into the netwo rk. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementation-time information is needed by system integrators. | Implementation-time information is needed by system integrators. | |||
| When introducing a network node type into their network, | When introducing a network node type into their network, | |||
| operators often need to integrate the node type into their own | operators often need to integrate the node type into their own | |||
| management system. The NMS may have management functions that depend | management system. The NMS may have management functions that depend | |||
| on "on-change" notifications. The network operators need to plan their | on "on-change" notifications. The network operators need to plan their | |||
| management practices and NMS implementation before they decide to | management practices and NMS implementation before they decide to | |||
| buy the specific network node type. Moreover, the decision to buy the node | buy the specific network node type. Moreover, the decision to buy the node | |||
| type sometimes depends on these management possibilities. | type sometimes depends on these management possibilities. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Run-time capability information is needed: | Runtime capability information is needed: | |||
| <list style="symbols"> | </t> | |||
| <t>for any "purely model driven" application, e.g., a NETCONF-browse | <ul spacing="normal"> | |||
| r. | <li>for any "purely model-driven" application, e.g., a NETCONF browser. | |||
| Such applications depend on reading models and capabilities at run | Such applications depend on reading models and capabilities at run | |||
| time | time | |||
| to support all the publisher's available functionality.</t> | to support all the publisher's available functionality.</li> | |||
| <t>in case the capability might change during run time | <li>in case the capability might change during runtime, | |||
| e.g., due to licensing, HW constraints etc.</t> | e.g., due to licensing, hardware constraints, etc.</li> | |||
| <t>to check that capability information provided earlier, at | <li>to check that that capability information provided earlier, at | |||
| implementation time, is what the publisher has implemented.</t> | implementation time, is what the publisher has implemented.</li> | |||
| </list> | </ul> | |||
| </t> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <name>Terminology</name> | ||||
| <section title="Terminology" anchor="terminology"> | <t> | |||
| <t> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| when, and only when, they appear in all capitals, as shown here. | be interpreted as | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | </t> | |||
| <t>The terms "YANG-Push", "on-change subscription" and "periodic | <t>The terms "YANG-Push", "on-change subscription", and "periodic | |||
| subscription" are used as defined in <xref target="RFC8641"/>. | subscription" are used as defined in <xref target="RFC8641" format="de | |||
| fault"/>. | ||||
| </t> | </t> | |||
| <t>The terms "subscriber", "publisher" and "receiver" are used as | <t>The terms "subscriber", "publisher", and "receiver" are used as | |||
| defined in <xref target="RFC8639"/>. | defined in <xref target="RFC8639" format="default"/>. | |||
| </t> | </t> | |||
| <t>The term "server" is used as defined in <xref target="RFC8342"/>. | <t>The term "server" is used as defined in <xref target="RFC8342" format ="default"/>. | |||
| </t> | </t> | |||
| <t>The terms "YANG instance data file format", "instance data", and | <t>The terms "YANG instance data file format", "instance data", and | |||
| "instance data set" are used as defined in | "instance data set" are used as defined in | |||
| <xref target="I-D.ietf-netmod-yang-instance-file-format"/>. | <xref target="RFC9195"/>. | |||
| </t> | </t> | |||
| <t>In addition, this document defines the following terms:</t> | <t>In addition, this document defines the following terms:</t> | |||
| <t> | <dl> | |||
| "Implementation-time information": Information about the server's | <dt>Implementation-time information:</dt><dd> Information about the se | |||
| rver's | ||||
| behavior that is made available during the implementation of the serve r, | behavior that is made available during the implementation of the serve r, | |||
| available from a source other than a running server. | available from a source other than a running server. | |||
| </t> | </dd> | |||
| <t> | <dt> | |||
| "Run-time information": Information about the server's | Runtime information:</dt><dd> Information about the server's | |||
| behavior that is available from the running server via management prot ocols | behavior that is available from the running server via management prot ocols | |||
| such as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC | such as NETCONF <xref target="RFC6241" format="default"/> or RESTCONF | |||
| 8040"/>. | <xref target="RFC8040" format="default"/>. | |||
| </t> | </dd></dl> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="capability-information" numbered="true" toc="default"> | ||||
| <section anchor="capability-information" title="Providing System Capability | <name>Providing System Capability Information</name> | |||
| Information"> | ||||
| <t> | <t> | |||
| Capability information is represented by instance-data based on one or | Capability information is represented by instance data based on one or | |||
| more "capability defining YANG modules". This allows a user to discover | more "capability-defining YANG modules". This allows a user to discover | |||
| capabilities both at implementation time and at run time. | capabilities both at implementation time and at runtime. | |||
| </t> | </t> | |||
| <t> | <dl spacing="normal"> | |||
| <list style="symbols"> | <dt>For the implementation-time use case:</dt><dd> Capabilities <bcp14>S | |||
| <t>For the implementation-time use case: Capabilities SHOULD be provid | HOULD</bcp14> be provided by the | |||
| ed by the | implementer as YANG instance data files complying with | |||
| implementer as YANG instance data files complying to | <xref target="RFC9195"/>. | |||
| <xref target="I-D.ietf-netmod-yang-instance-file-format"/>. | When provided, the file <bcp14>MUST</bcp14> already be available at im | |||
| When provided, the file MUST be available already at implementation ti | plementation time and retrievable in a way that does not depend | |||
| me, | on a live network node, e.g., downloading from a product website. | |||
| retrievable in a way that does not depend | </dd> | |||
| on a live network node. E.g., download from product website. | <dt>For the runtime use case:</dt><dd> Capabilities <bcp14>SHOULD</bcp14 | |||
| </t> | > be available via | |||
| <t>For the run-time use case: Capabilities SHOULD be available via | NETCONF <xref target="RFC6241" format="default"/> or | |||
| NETCONF <xref target="RFC6241"/> or | RESTCONF <xref target="RFC8040" format="default"/> from the live serve | |||
| RESTCONF <xref target="RFC8040"/> from the live server (implementing | r (implementing | |||
| the publisher) during run time. | the publisher) during runtime. | |||
| Implementations that support changing these capabilities at | Implementations that support changing these capabilities at | |||
| run time SHOULD support "on-change" notifications about the | runtime <bcp14>SHOULD</bcp14> support "on-change" notifications about | |||
| system-capabilities container.</t> | the | |||
| </list> | system-capabilities container.</dd> | |||
| </dl> | ||||
| <t> | ||||
| The module "ietf-system-capabilities" provides a placeholder structure t | ||||
| o be used to specify any YANG-related system capability. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The module "ietf-system-capabilities" provides a placeholder structure t | ||||
| o be used to specify any YANG related system capability. | ||||
| </t><t> | ||||
| The module "ietf-notification-capabilities" is defined to allow a publis her to | The module "ietf-notification-capabilities" is defined to allow a publis her to | |||
| specify capabilities related to "Subscription to YANG Notifications for | specify capabilities related to "Subscription to YANG Notifications for | |||
| Datastore Updates" <xref target="RFC8641"/>, also known as YANG-Push, augmenting | Datastore Updates" <xref target="RFC8641" format="default"/>, also known as YANG | |||
| "ietf-system-capabilities". | -Push, augmenting "ietf-system-capabilities". | |||
| </t><t> | </t> | |||
| <t> | ||||
| The YANG data models in this document conform to the Network | The YANG data models in this document conform to the Network | |||
| Management Datastore Architecture (NMDA) defined in <xref target="RFC834 2"/>. | Management Datastore Architecture (NMDA) defined in <xref target="RFC834 2" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Yang-Push-Capabilities" numbered="true" toc="default"> | ||||
| <section anchor="Yang-Push-Capabilities" title="Providing YANG-Push Notificatio | <name>Providing YANG-Push Notification Capabilities Information</name> | |||
| n Capabilities Information"> | <t>A specific case is the need to specify capabilities in the YANG-Push | |||
| <t>A specific case is the need to specify capabilities in the YANG-Push | functionality. As defined in <xref target="RFC8641" format="default"/>, | |||
| functionality. As defined in <xref target="RFC8641"/> a publisher may al | a publisher may allow | |||
| low | ||||
| subscribers to subscribe to updates from a datastore and will sub sequently push | subscribers to subscribe to updates from a datastore and will sub sequently push | |||
| such update notifications to the receiver. Notifications may be s ent | such update notifications to the receiver. Notifications may be s ent | |||
| periodically or "on-change" (more or less immediately after each chang | periodically or "on change" (more or less immediately after each chang | |||
| e). | e). | |||
| </t> | </t> | |||
| <t>A publisher supporting YANG-Push has a number of capabilities defined | <t>A publisher supporting YANG-Push has a number of capabilities defined i | |||
| in | n | |||
| <xref target="RFC8641"/> | <xref target="RFC8641" format="default"/> | |||
| that are often determined during the implementation of the publisher. These include: | that are often determined during the implementation of the publisher. These include: | |||
| <list style="symbols"> | </t> | |||
| <t>Supported (reporting) periods for "periodic" subscriptions</t> | <ul spacing="normal"> | |||
| <t>Maximum number of objects that can be sent in an update</t> | <li>supported (reporting) periods for "periodic" subscriptions.</li> | |||
| <t>The set of datastores or data nodes for which "periodic" notifica | <li>the maximum number of objects that can be sent in an update.</li> | |||
| tion is supported.</t> | <li>the set of datastores or data nodes for which "periodic" notificatio | |||
| </list> | n is supported.</li> | |||
| </t> | </ul> | |||
| <t>Additional capabilities if the optional "on-change" feature is suppor | <t>Additional capabilities if the optional "on-change" feature is supporte | |||
| ted include: | d include: | |||
| <list style="symbols"> | </t> | |||
| <t>Supported dampening periods for "on-change" subscriptions</t> | <ul spacing="normal"> | |||
| <t>The set of datastores or data nodes for which "on-change" notific | <li>supported dampening periods for "on-change" subscriptions.</li> | |||
| ation is supported</t> | <li>the set of datastores or data nodes for which "on-change" notificati | |||
| </list> | on is supported.</li> | |||
| </t> | </ul> | |||
| <t> | <t> | |||
| Publishers might have some capabilities (or limitations) to document. | Publishers might have some capabilities (or limitations) to document - | |||
| For example, how many update notifications and how many datastore node | - for example, how many update notifications and how many datastore node | |||
| updates they can send out in a certain time-period. Other publishers m | updates they can send out in a certain time period. Other publishers m | |||
| ight | ight | |||
| not support "periodic" subscriptions to all datastores. In some cases, a publisher supporting "on-change" notifications will not | not support "periodic" subscriptions to all datastores. In some cases, a publisher supporting "on-change" notifications will not | |||
| be able to push updates for some object types "on-change". Reasons for | be able to push updates for some object types "on change". Reasons for | |||
| this might be that the value of the datastore node changes frequently | this might be that the value of the datastore node changes frequently | |||
| (e.g., in-octets counter), that small object changes are | (e.g., in-octet counter), that small object changes are | |||
| frequent and irrelevant to the receiver (e.g., a temperature gauge cha nging 0.1 | frequent and irrelevant to the receiver (e.g., a temperature gauge cha nging 0.1 | |||
| degrees within a predetermined and acceptable range), or | degrees within a predetermined and acceptable range), or | |||
| that the implementation is not capable of on-change notification for | that the implementation is not capable of on-change notification for | |||
| a particular object. In all those cases, it will be important for | a particular object. In all those cases, it will be important for | |||
| subscriber applications to have a way to identify which objects "on-ch | subscriber applications to have a way to identify the objects for whic | |||
| ange" notifications are supported and for which ones not. | h "on-change" notifications are supported and the objects for which they are not | |||
| </t> | . | |||
| <t> | </t> | |||
| Faced with the reality that support for "on-change" notification does | <t> | |||
| not | Support for "on-change" notifications does not | |||
| mean that such notifications will be sent for any specific data node, | mean that such notifications will be sent for any specific data node, | |||
| subscriber/management applications can not rely on the "on-change" | as the ability to do so may not be supported for every data node. Therefore, sub | |||
| functionality unless the subscriber has some means to identify which o | scriber/management applications cannot rely on the "on-change" | |||
| bjects | functionality unless the subscriber has some means to identify the obj | |||
| "on-change" notifications are supported for. YANG models are me | ects for which "on-change" notifications are in fact supported. YANG data models | |||
| ant to be used as an | are meant to be used as an | |||
| interface contract. Without identification of the data nodes ac | interface contract. | |||
| tually supporting "on-change", | Without identification of the data nodes actually supporting "o | |||
| n-change" notifications, | ||||
| this contract would be incomplete. | this contract would be incomplete. | |||
| </t> | </t> | |||
| <t>Clients of a server (and subscribers to a publisher, as subscribers a | <t>Clients of a server (and subscribers to a publisher, as subscribers are | |||
| re also clients) need a method to gather capability information. | also clients) need a method to gather capability information. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="system_capabilities_model" numbered="true" toc="default"> | ||||
| <section anchor="system_capabilities_model" title="System Capabilities Model | <name>System Capabilities Model</name> | |||
| "> | ||||
| <t>The module "ietf-system-capabilities" is defined to provide a | <t>The module "ietf-system-capabilities" is defined to provide a | |||
| structure that can be used to discover (as read-only operational state) a ny YANG related system capability.</t> | structure that can be used to discover (as a read-only operational state) any YANG-related system capability.</t> | |||
| <t>This module itself does not contain any capabilities; it provides | <t>This module itself does not contain any capabilities; it provides | |||
| augmentation points for capabilities to be defined in subsequent YANG | augmentation points for capabilities to be defined in subsequent YANG | |||
| modules. The ietf-system-capabilies is used by other modules to augment | modules. "ietf-system-capabilities" is used by other modules to augment | |||
| in specific | in specific | |||
| capability information. Every set of such capabilities MUST be | capability information. Every set of such capabilities <bcp14>MUST</bcp | |||
| 14> be | ||||
| wrapped in a container under the augment statement to cleanly | wrapped in a container under the augment statement to cleanly | |||
| separate different groups of capabilities. These "wrapper containers" SH | separate different groups of capabilities. These "wrapper containers" <b | |||
| ALL be | cp14>SHALL</bcp14> be | |||
| augmented in at /sysc:system-capabilities and /sysc:system-capabilities/ | augmented at /sysc:system-capabilities and /sysc:system-capabilities/sys | |||
| sysc:datastore-capabilities/sysc:per-node-capabilities.</t> | c:datastore-capabilities/sysc:per-node-capabilities.</t> | |||
| <t> | ||||
| Capability values can be specified on system level, | <t> | |||
| datastore level (by selecting all nodes in the datastore) | Capability values can be specified at the system level, | |||
| at the datastore level (by selecting all nodes in the datastore), | ||||
| or for specific data nodes of a specific datastore | or for specific data nodes of a specific datastore | |||
| (and their contained sub-trees). | (and their contained subtrees). | |||
| Capability values specified for a specific datastore or | Capability values specified for a specific datastore or | |||
| node-set override values specified on the system level. | node-set override values specified at the system level. | |||
| </t> | </t> | |||
| <t> | ||||
| <t indent="3"> | ||||
| Note: The solution is usable for both NMDA and non-NMDA systems. | Note: The solution is usable for both NMDA and non-NMDA systems. | |||
| For non-NMDA servers "config false" data is | For non-NMDA servers, "config false" data is | |||
| considered as if it were part of the running datastore. | considered as if it were part of the running datastore. | |||
| </t> | </t> | |||
| <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> | ||||
| <figure> | <sourcecode name="" type="yangtree"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| module: ietf-system-capabilities | module: ietf-system-capabilities | |||
| +--ro system-capabilities | +--ro system-capabilities | |||
| +--ro datastore-capabilities* [datastore] | +--ro datastore-capabilities* [datastore] | |||
| +--ro datastore -> /yanglib:yang-library/datastore/name | +--ro datastore -> /yanglib:yang-library/datastore/name | |||
| +--ro per-node-capabilities* [] | +--ro per-node-capabilities* [] | |||
| +--ro (node-selection)? | +--ro (node-selection)? | |||
| +--:(node-selector) | +--:(node-selector) | |||
| +--ro node-selector? nacm:node-instance-identifier | +--ro node-selector? nacm:node-instance-identifier | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | ||||
| </t> | ||||
| </section> | </section> | |||
| <section title="YANG Module" anchor="ietf-system-capabilities.yang"> | <section anchor="ietf-system-capabilities.yang" numbered="true" toc="defau | |||
| <t>This YANG module imports typedefs from <xref target="RFC8341"/> and | lt"> | |||
| a reference path from <xref target="RFC8525"/>. | <name>YANG Module</name> | |||
| <t>This YANG module imports typedefs from <xref target="RFC8341" format= | ||||
| "default"/> and | ||||
| a reference path from <xref target="RFC8525" format="default"/>. | ||||
| </t> | </t> | |||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| <CODE BEGINS> file "ietf-system-capabilities@2021-10-12.yang" | ||||
| <sourcecode name="ietf-system-capabilities@2022-01-21.yang" type="yang" markers= "true"><![CDATA[ | ||||
| module ietf-system-capabilities { | module ietf-system-capabilities { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-system-capabilities"; | namespace "urn:ietf:params:xml:ns:yang:ietf-system-capabilities"; | |||
| prefix sysc; | prefix sysc; | |||
| import ietf-netconf-acm { | import ietf-netconf-acm { | |||
| prefix nacm; | prefix nacm; | |||
| reference | reference | |||
| "RFC 8341: Network Configuration Access Control Model"; | "RFC 8341: Network Configuration Access Control Model"; | |||
| } | } | |||
| skipping to change at line 338 ¶ | skipping to change at line 336 ¶ | |||
| organization | organization | |||
| "IETF NETCONF (Network Configuration) Working Group"; | "IETF NETCONF (Network Configuration) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/netconf/> | "WG Web: <https://datatracker.ietf.org/wg/netconf/> | |||
| WG List: <mailto:netconf@ietf.org> | WG List: <mailto:netconf@ietf.org> | |||
| Editor: Balazs Lengyel | Editor: Balazs Lengyel | |||
| <mailto:balazs.lengyel@ericsson.com>"; | <mailto:balazs.lengyel@ericsson.com>"; | |||
| description | description | |||
| "This module specifies a structure to specify system | "This module specifies a structure to specify system | |||
| capabilities for a server or a publisher. System capabilities | capabilities for a server or a publisher. System capabilities | |||
| may include capabilities of a NETCONF or RESTCONF server or a | may include capabilities of a NETCONF or RESTCONF server or a | |||
| notification publisher. | notification publisher. | |||
| This module does not contain any specific capabilities, it only | This module does not contain any specific capabilities; it only | |||
| provides a structure where containers containing the actual | provides a structure where containers containing the actual | |||
| capabilities are augmented in. | capabilities are augmented in. | |||
| Capability values can be specified on system level, | Capability values can be specified at the system level, at the | |||
| datastore level (by selecting all nodes in the datastore) or | datastore level (by selecting all nodes in the datastore), or | |||
| for specific data nodes of a specific datastore (and their | for specific data nodes of a specific datastore (and their | |||
| contained sub-trees). | contained subtrees). | |||
| Capability values specified for a specific datastore or | Capability values specified for a specific datastore or | |||
| node-set override values specified on the system/publisher level. | node-set override values specified on the system/publisher | |||
| level. | ||||
| The same grouping MUST be used to define hierarchical capabilities | The same grouping MUST be used to define hierarchical | |||
| supported both at the system level and datastore/data node level. | capabilities supported both at the system level and at the | |||
| datastore/data-node level. | ||||
| To find a capability value for a specific data node in a | To find a capability value for a specific data node in a | |||
| specific datastore the user SHALL: | specific datastore, the user SHALL: | |||
| 1) search for a datastore-capabilities list entry for | 1) search for a datastore-capabilities list entry for | |||
| the specific datastore. When stating a specific capability, the | the specific datastore. When stating a specific capability, the | |||
| relative path for any specific capability must be the same | relative path for any specific capability must be the same | |||
| under the system-capabilities container and under the | under the system-capabilities container and under the | |||
| per-node-capabilities list. | per-node-capabilities list. | |||
| 2) If the datastore entry is found within that entry, process all | 2) If the datastore entry is found within that entry, process | |||
| per-node-capabilities entries in the order they appear in the list. | all per-node-capabilities entries in the order they appear in | |||
| The first entry that specifies the specific capability and has a | the list. The first entry that specifies the specific | |||
| node-selector selecting the specific data node defines the | capability and has a node-selector selecting the specific data | |||
| capability value. | node defines the capability value. | |||
| 3) If the capability value is not found above and the specific | 3) If the capability value is not found above and the specific | |||
| capability is specified under the system-capabilities container | capability is specified under the system-capabilities container | |||
| (outside the datastore-capabilities list), this value shall be | (outside the datastore-capabilities list), this value shall be | |||
| used. | used. | |||
| 4) If no values are found in the previous steps, the | 4) If no values are found in the previous steps, the | |||
| system/publisher is not capable of providing a value. Possible | system/publisher is not capable of providing a value. Possible | |||
| reasons are: it is unknown, the capability is changing for some | reasons are that it is unknown, the capability is changing for | |||
| reason, there is no specified limit, etc. In this case the | some reason, there is no specified limit, etc. In this case, | |||
| system's behavior is unspecified. | the system's behavior is unspecified. | |||
| 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 to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9196 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9196); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove this | revision 2022-01-21 { | |||
| // note. | ||||
| revision 2021-10-12 { | ||||
| description | description | |||
| "Initial version | "Initial version"; | |||
| NOTE TO RFC EDITOR: | ||||
| (1)Please replace the above revision date to | ||||
| the date of RFC publication when published. | ||||
| (2) Please replace the date in the file name | ||||
| (ietf-system-capabilities@2021-10-12.yang) | ||||
| to the date of RFC publication. | ||||
| (3) Please replace the following reference | ||||
| with RFC number when published | ||||
| (i.e. RFC xxxx)."; | ||||
| reference | reference | |||
| "RFC XXXX: YANG Modules describing Capabilities for Systems | "RFC 9196: YANG Modules Describing Capabilities for Systems | |||
| and Datastore Update Notifications"; | and Datastore Update Notifications"; | |||
| } | } | |||
| container system-capabilities { | container system-capabilities { | |||
| config false; | config false; | |||
| description | description | |||
| "System capabilities. | "System capabilities. | |||
| Capability values specified here at the system level | Capability values specified here at the system level | |||
| are valid for all datastores and are used when the | are valid for all datastores and are used when the | |||
| capability is not specified on the datastore level | capability is not specified at the datastore level | |||
| or for specific data nodes."; | or for specific data nodes."; | |||
| /* | /* | |||
| * "Augmentation point for system level capabilities." | * "Augmentation point for system-level capabilities." | |||
| */ | */ | |||
| list datastore-capabilities { | list datastore-capabilities { | |||
| key "datastore"; | key "datastore"; | |||
| description | description | |||
| "Capabilities values per datastore. | "Capabilities values per datastore. | |||
| For non-NMDA servers/publishers 'config false' data is | For non-NMDA servers/publishers, 'config false' data is | |||
| considered as if it was part of the running datastore."; | considered as if it were part of the running datastore."; | |||
| leaf datastore { | leaf datastore { | |||
| type leafref { | type leafref { | |||
| path | path | |||
| "/yanglib:yang-library/yanglib:datastore/yanglib:name"; | "/yanglib:yang-library/yanglib:datastore/yanglib:name"; | |||
| } | } | |||
| description | description | |||
| "The datastore for which capabilities are defined. | "The datastore for which capabilities are defined. | |||
| Only one specific datastore can be specified | Only one specific datastore can be specified, | |||
| e.g., ds:conventional, which represents a set of | e.g., ds:conventional must not be used, as it | |||
| configuration datastores, must not be used."; | represents a set of configuration datastores."; | |||
| } | } | |||
| list per-node-capabilities { | list per-node-capabilities { | |||
| description | description | |||
| "Each list entry specifies capabilities for the selected | "Each list entry specifies capabilities for the selected | |||
| data nodes. The same capabilities apply for the data nodes | data nodes. The same capabilities apply to the data nodes | |||
| in the subtree below the selected nodes. | in the subtree below the selected nodes. | |||
| The system SHALL order the entries according to their | The system SHALL order the entries according to their | |||
| precedence. The order of the entries MUST NOT change unless | precedence. The order of the entries MUST NOT change | |||
| the underlying capabilities also change. | unless the underlying capabilities also change. | |||
| Note that the longest patch matching can be achieved | Note that the longest patch matching can be achieved | |||
| by ordering more specific matches before less | by ordering more specific matches before less | |||
| specific ones."; | specific ones."; | |||
| choice node-selection { | choice node-selection { | |||
| description | description | |||
| "A method to select some or all nodes within a datastore."; | "A method to select some or all nodes within a | |||
| datastore."; | ||||
| leaf node-selector { | leaf node-selector { | |||
| type nacm:node-instance-identifier; | type nacm:node-instance-identifier; | |||
| description | description | |||
| "Selects the data nodes for which capabilities are | "Selects the data nodes for which capabilities are | |||
| specified. The special value '/' denotes all data nodes | specified. The special value '/' denotes all data | |||
| in the datastore, consistent with the path leaf node on | nodes in the datastore, consistent with the path | |||
| page 41 [RFC8341]."; | leaf node on page 41 of [RFC8341]."; | |||
| reference | reference | |||
| "RFC 8341: Network Configuration Access Control Model"; | "RFC 8341: Network Configuration Access Control Model"; | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * "Augmentation point for datastore or data node level | * "Augmentation point for datastore- or data-node-level | |||
| * capabilities." | * capabilities." | |||
| */ | */ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ||||
| </figure> | ]]></sourcecode> | |||
| <t><CODE ENDS></t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="notification-capabilities_model" numbered="true" toc="defau | ||||
| <section anchor="notification-capabilities_model" title="Notification Capabi | lt"> | |||
| lities Model"> | <name>Notification Capabilities Model</name> | |||
| <t> | <t> | |||
| The YANG module "ietf-notification-capabilities" provides YANG-Push | The YANG module "ietf-notification-capabilities" provides information re | |||
| related capability information. | lated to the YANG-Push capability. | |||
| </t> | </t> | |||
| <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-notification-capabilities | module: ietf-notification-capabilities | |||
| augment /sysc:system-capabilities: | augment /sysc:system-capabilities: | |||
| +--ro subscription-capabilities | +--ro subscription-capabilities | |||
| +--ro max-nodes-per-update? uint32 | +--ro max-nodes-per-update? uint32 | |||
| +--ro periodic-notifications-supported? notification-support | +--ro periodic-notifications-supported? notification-support | |||
| +--ro (update-period)? | +--ro (update-period)? | |||
| | +--:(minimum-update-period) | | +--:(minimum-update-period) | |||
| | | +--ro minimum-update-period? uint32 | | | +--ro minimum-update-period? uint32 | |||
| | +--:(supported-update-period) | | +--:(supported-update-period) | |||
| | +--ro supported-update-period* uint32 | | +--ro supported-update-period* uint32 | |||
| skipping to change at line 540 ¶ | skipping to change at line 525 ¶ | |||
| | +--:(minimum-update-period) | | +--:(minimum-update-period) | |||
| | | +--ro minimum-update-period? uint32 | | | +--ro minimum-update-period? uint32 | |||
| | +--:(supported-update-period) | | +--:(supported-update-period) | |||
| | +--ro supported-update-period* uint32 | | +--ro supported-update-period* uint32 | |||
| +--ro on-change-supported? notification-support | +--ro on-change-supported? notification-support | |||
| | {yp:on-change}? | | {yp:on-change}? | |||
| +--ro minimum-dampening-period? uint32 | +--ro minimum-dampening-period? uint32 | |||
| | {yp:on-change}? | | {yp:on-change}? | |||
| +--ro supported-excluded-change-type* union | +--ro supported-excluded-change-type* union | |||
| {yp:on-change}? | {yp:on-change}? | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | ||||
| </t> | ||||
| </section> | </section> | |||
| <section title="YANG Module" anchor="ietf-notification-capabilities.yang"> | <section anchor="ietf-notification-capabilities.yang" numbered="true" toc= | |||
| <t>This YANG module imports a feature and typedefs from <xref target="RF | "default"> | |||
| C8641"/> | <name>YANG Module</name> | |||
| <t>This YANG module imports a feature and typedefs from <xref target="RF | ||||
| C8641" format="default"/> | ||||
| and also imports the "ietf-system-capabilities" specified in this docume nt. | and also imports the "ietf-system-capabilities" specified in this docume nt. | |||
| </t> | </t> | |||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| <CODE BEGINS> file "ietf-notification-capabilities@2021-10-12.yang" | ||||
| <sourcecode name="ietf-notification-capabilities@2022-01-21.yang" type=" yang" markers="true"><![CDATA[ | ||||
| module ietf-notification-capabilities { | module ietf-notification-capabilities { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace | namespace | |||
| "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"; | "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"; | |||
| prefix notc; | prefix notc; | |||
| import ietf-yang-push { | import ietf-yang-push { | |||
| prefix yp; | prefix yp; | |||
| description | description | |||
| "This module requires ietf-yang-push to be implemented."; | "This module requires ietf-yang-push to be implemented."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for | |||
| Updates"; | Datastore Updates"; | |||
| } | } | |||
| import ietf-system-capabilities { | import ietf-system-capabilities { | |||
| prefix sysc; | prefix sysc; | |||
| description | description | |||
| "This module requires ietf-system-capabilities to be | "This module requires ietf-system-capabilities to be | |||
| implemented."; | implemented."; | |||
| reference | reference | |||
| "RFC XXXX: YANG Modules describing Capabilities for Systems | "RFC 9196: YANG Modules Describing Capabilities for Systems | |||
| and Datastore Update Notifications"; | and Datastore Update Notifications"; | |||
| } | } | |||
| // RFC Ed.: replace the above XXXX with actual RFC number | ||||
| // and remove this note. | ||||
| organization | organization | |||
| "IETF NETCONF (Network Configuration) Working Group"; | "IETF NETCONF (Network Configuration) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/netconf/> | "WG Web: <https://datatracker.ietf.org/wg/netconf/> | |||
| WG List: <mailto:netconf@ietf.org> | WG List: <mailto:netconf@ietf.org> | |||
| Editor: Balazs Lengyel | Editor: Balazs Lengyel | |||
| <mailto:balazs.lengyel@ericsson.com>"; | <mailto:balazs.lengyel@ericsson.com>"; | |||
| description | description | |||
| "This module specifies YANG-Push [RFC 8641] related publisher | "This module specifies publisher capabilities related to | |||
| capabilities. | YANG-Push (RFC 8641). | |||
| The module contains: | The module contains: | |||
| - specification of which data nodes support 'on-change' or | - a specification of the data nodes that support 'on-change' or | |||
| 'periodic' notifications. | 'periodic' notifications. | |||
| - capabilities related to the throughput of notification data | - capabilities related to the throughput of notification data | |||
| that the publisher can support. (Note that for a specific | that the publisher can support. (Note that for a specific | |||
| subscription, the publisher MAY allow only longer periods | subscription, the publisher MAY allow only longer periods | |||
| or smaller updates depending on, e.g., actual load conditions.) | or smaller updates depending on, e.g., actual load conditions.) | |||
| Capability values can be specified on system/publisher level, | Capability values can be specified at the system/publisher | |||
| datastore level or for specific data nodes of a specific | level, at the datastore level, or for specific data nodes of | |||
| datastore (and their contained sub-trees), as defined in the | a specific datastore (and their contained subtrees), as defined | |||
| ietf-system-capabilities module. | in the ietf-system-capabilities module. | |||
| If different data nodes covered by a single subscription | If different data nodes covered by a single subscription | |||
| have different values for a specific capability, then using | have different values for a specific capability, then using | |||
| values that are only acceptable for some of these data nodes, | values that are only acceptable for some of these data nodes, | |||
| but not for others, may result in the rejection of the | but not for others, may result in the rejection of the | |||
| subscription. | subscription. | |||
| 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 to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9196 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9196); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove this | revision 2022-01-21 { | |||
| // note. | ||||
| revision 2021-10-12 { | ||||
| description | description | |||
| "Initial version"; | "Initial version"; | |||
| reference | reference | |||
| "RFC XXXX: YANG Modules describing Capabilities for Systems | "RFC 9196: YANG Modules Describing Capabilities for Systems | |||
| and Datastore Update Notifications"; | and Datastore Update Notifications"; | |||
| } | } | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove this | ||||
| // note. | ||||
| grouping subscription-capabilities { | grouping subscription-capabilities { | |||
| description | description | |||
| "Capabilities related to YANG-Push subscriptions | "Capabilities related to YANG-Push subscriptions | |||
| and notifications"; | and notifications"; | |||
| container subscription-capabilities { | container subscription-capabilities { | |||
| description | description | |||
| "Capabilities related to YANG-Push subscriptions | "Capabilities related to YANG-Push subscriptions | |||
| and notifications"; | and notifications"; | |||
| typedef notification-support { | typedef notification-support { | |||
| type bits { | type bits { | |||
| bit config-changes { | bit config-changes { | |||
| description | description | |||
| "The publisher is capable of sending | "The publisher is capable of sending | |||
| notifications for 'config true' nodes for the | notifications for 'config true' nodes for the | |||
| relevant scope and subscription type."; | relevant scope and subscription type."; | |||
| } | } | |||
| bit state-changes { | bit state-changes { | |||
| description | description | |||
| "The publisher is capable of sending | "The publisher is capable of sending | |||
| notifications for 'config false' nodes for the relevant | notifications for 'config false' nodes for the | |||
| scope and subscription type."; | relevant scope and subscription type."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Type for defining whether 'on-change' or | "Type for defining whether 'on-change' or | |||
| 'periodic' notifications are supported for all data nodes, | 'periodic' notifications are supported for all data nodes, | |||
| 'config false' data nodes, 'config true' data nodes, or | 'config false' data nodes, 'config true' data nodes, or | |||
| no data nodes. | no data nodes. | |||
| If the bit config-changes or state-changes is set | The bits config-changes or state-changes have no effect | |||
| for a datastore, or a set of nodes that does not contain | when they are set for a datastore or for a set of nodes | |||
| nodes with the indicated config value, this has no | that does not contain nodes with the indicated config | |||
| effect, as if no support was declared. E.g. indicating | value. In those cases, the effect is the same as if no | |||
| support for state-changes for a candidate datastore has | support was declared. One example of this is indicating | |||
| no effect."; | support for state-changes for a candidate datastore that | |||
| has no effect."; | ||||
| } | } | |||
| leaf max-nodes-per-update { | leaf max-nodes-per-update { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| "Maximum number of data nodes that can be sent | "Maximum number of data nodes that can be sent | |||
| in an update. The publisher MAY support more data nodes, | in an update. The publisher MAY support more data nodes | |||
| but SHOULD support at least this number. | but SHOULD support at least this number. | |||
| May be used to avoid the 'update-too-big' error | May be used to avoid the 'update-too-big' error | |||
| during subscription."; | during subscription."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for | |||
| Updates, the 'update-too-big' error/identity"; | Datastore Updates, the 'update-too-big' error/identity"; | |||
| } | } | |||
| leaf periodic-notifications-supported { | leaf periodic-notifications-supported { | |||
| type notification-support; | type notification-support; | |||
| description | description | |||
| "Specifies whether the publisher is capable of | "Specifies whether the publisher is capable of | |||
| sending 'periodic' notifications for the selected | sending 'periodic' notifications for the selected | |||
| data nodes including any subtrees that may exist | data nodes, including any subtrees that may exist | |||
| below them."; | below them."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for | |||
| Updates, 'periodic' subscription concept"; | Datastore Updates, 'periodic' subscription concept"; | |||
| } | } | |||
| choice update-period { | choice update-period { | |||
| description | description | |||
| "Supported update period value or values for | "Supported update period value or values for | |||
| 'periodic' subscriptions."; | 'periodic' subscriptions."; | |||
| leaf minimum-update-period { | leaf minimum-update-period { | |||
| type uint32; | type uint32; | |||
| units "centiseconds"; | units "centiseconds"; | |||
| description | description | |||
| "Indicates the minimal update period that is | "Indicates the minimal update period that is | |||
| supported for a 'periodic' subscription. | supported for a 'periodic' subscription. | |||
| A subscription request to the selected data nodes with | A subscription request to the selected data nodes with | |||
| a smaller period than what this leaf specifies is | a smaller period than what this leaf specifies is | |||
| likely to result in a 'period-unsupported' error."; | likely to result in a 'period-unsupported' error."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for | |||
| Updates, the period leaf in the ietf-yang-push YANG | Datastore Updates, the period leaf in the ietf-yang-push | |||
| module"; | YANG module"; | |||
| } | } | |||
| leaf-list supported-update-period { | leaf-list supported-update-period { | |||
| type uint32; | type uint32; | |||
| units "centiseconds"; | units "centiseconds"; | |||
| description | description | |||
| "Supported update period values for a 'periodic' | "Supported update period values for a 'periodic' | |||
| subscription. | subscription. | |||
| A subscription request to the selected data nodes with a | A subscription request to the selected data nodes with a | |||
| period not included in the leaf-list will result in a | period not included in the leaf-list will result in a | |||
| 'period-unsupported' error."; | 'period-unsupported' error."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for | |||
| Updates, the period leaf in the ietf-yang-push YANG | Datastore Updates, the period leaf in the ietf-yang-push | |||
| module"; | YANG module"; | |||
| } | } | |||
| } | } | |||
| leaf on-change-supported { | leaf on-change-supported { | |||
| if-feature "yp:on-change"; | if-feature "yp:on-change"; | |||
| type notification-support; | type notification-support; | |||
| description | description | |||
| "Specifies whether the publisher is capable of | "Specifies whether the publisher is capable of | |||
| sending 'on-change' notifications for the selected | sending 'on-change' notifications for the selected | |||
| data nodes and the subtree below them."; | data nodes and the subtree below them."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for Datastore | "RFC 8641: Subscription to YANG Notifications for Datastore | |||
| Updates, on-change concept"; | Updates, on-change concept"; | |||
| } | } | |||
| leaf minimum-dampening-period { | leaf minimum-dampening-period { | |||
| if-feature "yp:on-change"; | if-feature "yp:on-change"; | |||
| type uint32; | type uint32; | |||
| units "centiseconds"; | units "centiseconds"; | |||
| description | description | |||
| "The minimum dampening-period supported for 'on-change' | "The minimum dampening period supported for 'on-change' | |||
| subscriptions for the selected data nodes. | subscriptions for the selected data nodes. | |||
| If this value is present and greater than zero, | If this value is present and greater than zero, | |||
| that implies dampening is mandatory."; | that implies dampening is mandatory."; | |||
| reference | reference | |||
| "RFC 8641: Subscription to YANG Notifications for | "RFC 8641: Subscription to YANG Notifications for | |||
| Datastore Updates, the dampening-period leaf in the | Datastore Updates, the dampening-period leaf in the | |||
| ietf-yang-push YANG module"; | ietf-yang-push YANG module"; | |||
| } | } | |||
| leaf-list supported-excluded-change-type { | leaf-list supported-excluded-change-type { | |||
| skipping to change at line 813 ¶ | skipping to change at line 787 ¶ | |||
| refine | refine | |||
| "subscription-capabilities/supported-excluded-change-type" { | "subscription-capabilities/supported-excluded-change-type" { | |||
| default "none"; | default "none"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/sysc:system-capabilities/sysc:datastore-capabilities" | augment "/sysc:system-capabilities/sysc:datastore-capabilities" | |||
| + "/sysc:per-node-capabilities" { | + "/sysc:per-node-capabilities" { | |||
| description | description | |||
| "Add datastore and node level capabilities"; | "Add datastore and node-level capabilities"; | |||
| uses subscription-capabilities { | uses subscription-capabilities { | |||
| refine | refine | |||
| "subscription-capabilities/supported-excluded-change-type" { | "subscription-capabilities/supported-excluded-change-type" { | |||
| default "none"; | default "none"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | <t><CODE ENDS></t> | |||
| <t><CODE ENDS></t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="security" numbered="true" toc="default"> | ||||
| <section anchor="security" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t> | <t> | |||
| The YANG modules specified in this document define a schema for data | The YANG modules specified in this document define a schema for data | |||
| that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
| as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/ > | as NETCONF <xref target="RFC6241" format="default"/> or RESTCONF <xref target="RFC8040" format="default"/> | |||
| or as YANG instance data. | or as YANG instance data. | |||
| The lowest NETCONF layer is the secure transport layer, and the | The lowest NETCONF layer is the secure transport layer, and the | |||
| mandatory-to-implement secure transport is Secure Shell (SSH) | mandatory-to-implement secure transport is Secure Shell (SSH) | |||
| <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, an | <xref target="RFC6242" format="default"/>. The lowest RESTCONF l | |||
| d | ayer is HTTPS, and | |||
| the mandatory-to-implement secure transport is TLS <xref target= | the mandatory-to-implement secure transport is TLS <xref target= | |||
| "RFC8446"/>. | "RFC8446" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) <xref target="RFC 8341"/> | |||
| provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
| RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
| RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document outlines a framework for conveying system capability | This document outlines a framework for conveying system capability | |||
| information that is inherently flexible and extensible. While t he full | information that is inherently flexible and extensible. While t he full | |||
| set of use cases is not known now, they may range as wide as con veying | set of use cases is not known now, they may range as wide as con veying | |||
| the minimum update period for periodic subscription updates and what | the minimum update period for periodic subscription updates and what | |||
| protocols might be used for such notifications. Knowledge of th is type | protocols might be used for such notifications. Knowledge of th is type | |||
| of value might, for example, allow an attacker to gain insight i nto how | of value might, for example, allow an attacker to gain insight i nto how | |||
| long unauthorized configuration changes might be active prior to detection, | long unauthorized configuration changes might be active prior to detection | |||
| and what communications channels might be disrupted to extend th e period | and what communications channels might be disrupted to extend th e period | |||
| of non-detection. Documents adding additional capabilities via augmenting | of non-detection. Documents adding additional capabilities via augmenting | |||
| this module are encouraged to document the security consideratio ns of the | this module are encouraged to document the security consideratio ns of the | |||
| new YANG nodes, according to the guidance in BCP 216. | ||||
| new YANG nodes, according to the guidance in BCP 216 <xref targe | ||||
| t="RFC8407"/>. | ||||
| </t> | </t> | |||
| <t> All protocol-accessible data nodes in augmented modules are read-only | <t> All protocol-accessible data nodes in augmented modules are read-only | |||
| and cannot be modified. The data in these modules is not security sen | and cannot be modified. Access control may be configured to avoid exp | |||
| sitive. | osing any read-only data that is defined by the augmenting module | |||
| Access control may be configured, to avoid exposing the read-only data. | documentation as being security sensitive. | |||
| </t> | </t> | |||
| <t>When that data is in file format, data should be protected against | <t>When that data is in file format, the data should be protected against | |||
| modification or unauthorized access using normal file handling mechanism | modification or unauthorized access using normal file-handling mechanisms. | |||
| s. | ||||
| The data in file format also inherits all the security considerat ions of | The data in file format also inherits all the security considerat ions of | |||
| <xref target="I-D.ietf-netmod-yang-instance-file-format"/> which | <xref target="RFC9195"/>, which includes additional | |||
| has additional | considerations about read protections and distinguishes between d | |||
| considerations about read protections; and distinguishes between | ata at | |||
| data at | ||||
| rest and in motion. | rest and in motion. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="iana" numbered="true" toc="default"> | ||||
| <section anchor="iana" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <section title="The IETF XML Registry"> | <section numbered="true" toc="default"> | |||
| <t>This document registers two URIs in the IETF XML | <name>The IETF XML Registry</name> | |||
| registry <xref target="RFC3688"/>. Following the format in | <t>This document registers the following URIs in the "IETF XML | |||
| <xref target="RFC3688"/>, the following registrations are | Registry" <xref target="RFC3688" format="default"/>:</t> | |||
| requested:</t> | <dl spacing="compact"> | |||
| <t><figure><artwork> | <dt>URI:</dt><dd> urn:ietf:params:xml:ns:yang:ietf-system-capabilities</dd> | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | <dt>Registrant Contact:</dt><dd>The IESG.</dd> | |||
| Registrant Contact: The NETCONF WG of the IETF. | <dt>XML:</dt><dd> N/A, the requested URI is an XML namespace.</dd> | |||
| XML: N/A, the requested URI is an XML namespace. | </dl> | |||
| </artwork></figure></t> | <dl spacing="compact"> | |||
| <t><figure><artwork> | <dt>URI:</dt><dd> urn:ietf:params:xml:ns:yang:ietf-notification-capabilities< | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-notification-capabilities | /dd> | |||
| Registrant Contact: The NETCONF WG of the IETF. | <dt>Registrant Contact:</dt><dd>The IESG.</dd> | |||
| XML: N/A, the requested URI is an XML namespace. | <dt>XML:</dt><dd> N/A, the requested URI is an XML namespace.</dd> | |||
| </artwork></figure></t> | </dl> | |||
| </section> | </section> | |||
| <section title="The YANG Module Names Registry"> | <section numbered="true" toc="default"> | |||
| <t>This document registers two YANG modules in the | <name>The YANG Module Names Registry</name> | |||
| YANG Module Names registry <xref target="RFC6020"/>. | <t>This document registers the following YANG modules in the | |||
| Following the format in <xref target="RFC6020"/>, the | "YANG Module Names" registry <xref target="RFC6020" format="default"/> | |||
| following registrations are requested:</t> | :</t> | |||
| <t><figure><artwork> | <dl spacing="compact"> | |||
| name: ietf-system-capabilities | <dt>name:</dt><dd> ietf-system-capabilities</dd> | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | <dt>namespace:</dt><dd> urn:ietf:params:xml:ns:yang:ietf-system-capabilities | |||
| prefix: sysc | </dd> | |||
| reference: RFC XXXX | <dt>prefix:</dt><dd> sysc</dd> | |||
| </artwork></figure></t> | <dt>reference:</dt><dd> RFC 9196</dd> | |||
| <t><figure><artwork> | </dl> | |||
| name: ietf-notification-capabilities | <dl spacing="compact"> | |||
| namespace: | <dt>name:</dt><dd> ietf-notification-capabilities</dd> | |||
| urn:ietf:params:xml:ns:yang:ietf-notification-capabilities | <dt>namespace:</dt><dd> | |||
| prefix: notc | urn:ietf:params:xml:ns:yang:ietf-notification-capabilities</dd> | |||
| reference: RFC XXXX | <dt>prefix:</dt><dd> notc</dd> | |||
| </artwork></figure></t> | <dt>reference:</dt><dd> RFC 9196</dd> | |||
| </dl> | ||||
| </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, Kent Watsen | ||||
| , | ||||
| Eric Voit, Joe Clarke, Martin Bjorklund, Ladislav Lhotka, Qin Wu, | ||||
| Mahesh Jethanandani, Ran Tao, Reshad Rahman and other members of the Net | ||||
| mod WG.</t> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <references> | |||
| <?rfc include='reference.I-D.ietf-netmod-yang-instance-file-format'?> | <name>References</name> | |||
| <?rfc include='reference.RFC.2119'?> | <references> | |||
| <?rfc include='reference.RFC.3688'?> | <name>Normative References</name> | |||
| <?rfc include='reference.RFC.6020'?> | ||||
| <?rfc include='reference.RFC.8174'?> | <reference anchor="RFC9195" target="https://www.rfc-editor.org/info/rfc9195"> | |||
| <?rfc include="reference.RFC.8341"?> | <front> | |||
| <?rfc include="reference.RFC.8342"?> | <title>A File Format for YANG Instance Data</title> | |||
| <?rfc include="reference.RFC.8525"?> | <author initials='B' surname='Lengyel' fullname='Balazs Lengyel'> | |||
| <?rfc include='reference.RFC.8639'?> | <organization /> | |||
| <?rfc include='reference.RFC.8641'?> | </author> | |||
| </references> | <author initials='B' surname='Claise' fullname='Benoit Claise'> | |||
| <references title="Informative References"> | <organization /> | |||
| <?rfc include='reference.RFC.6241'?> | </author> | |||
| <?rfc include='reference.RFC.6242'?> | <date year='2022' month='February' /> | |||
| <?rfc include="reference.RFC.8040"?> | </front> | |||
| <?rfc include="reference.RFC.8340"?> | <seriesInfo name="RFC" value="9195"/> | |||
| <?rfc include="reference.RFC.8446"?> | <seriesInfo name="DOI" value="10.17487/RFC9195"/> | |||
| <?rfc include="reference.RFC.8792"?> | </reference> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.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.6020.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8341.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8342.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.8639.xml"/> | ||||
| <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.6241.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6242.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8040.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8446.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <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.8340.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8792.xml"/> | ||||
| </references> | ||||
| </references> | </references> | |||
| <?rfc needLines="100"?> | <section numbered="true" toc="default"> | |||
| <section title="Instance data example #1"> | <name>Instance Data Example #1</name> | |||
| <t>The following examples use artwork folding | <t>The following examples use artwork folding | |||
| <xref target="RFC8792"/> for better formatting.</t> | <xref target="RFC8792" format="default"/> for better formatting.</t> | |||
| <t> | <t> | |||
| The following instance data example describes the notification | The following instance data example describes the notification | |||
| capabilities of a hypothetical "acme-router". The router implements | capabilities of a hypothetical "acme-router". The router implements | |||
| the running and operational datastores. | the running and operational datastores. | |||
| Every change can be reported "on-change" from the running datastore, | Every change can be reported "on-change" from the running datastore, | |||
| but only "config false" nodes and some "config false" data from the | but only "config false" nodes and some "config false" data can be report ed on-change from the | |||
| operational datastore. | operational datastore. | |||
| Interface statistics are not reported "on-change", only two important co unters. | Interface statistics are not reported "on-change"; only two important co unters are. | |||
| Datastore subscription capabilities are not reported "on-change", as the y | Datastore subscription capabilities are not reported "on-change", as the y | |||
| never change on the acme-router during run time. | never change on the acme-router during runtime. | |||
| <figure align="center" anchor="acme-router-notification-capabilities" | </t> | |||
| title="Notification Capabilities with data node specific settings"> | <figure anchor="acme-router-notification-capabilities"> | |||
| <artwork align="left" name="acme-router-notification-capabilities.xml" | <name>Notification Capabilities with Settings Specific to the Data Node< | |||
| ><![CDATA[ | /name> | |||
| <sourcecode name="acme-router-notification-capabilities.xml" type="xml"> | ||||
| <![CDATA[ | ||||
| ========== NOTE: '\' line wrapping per RFC 8792) =========== | ========== 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-notification-capabilities</name> | <name>acme-router-notification-capabilities</name> | |||
| <content-schema> | <content-schema> | |||
| <module>ietf-system-capabilities@2021-10-12</module> | <module>ietf-system-capabilities@2022-01-21</module> | |||
| <module>ietf-notification-capabilities@2021-10-12</module> | <module>ietf-notification-capabilities@2022-01-21</module> | |||
| </content-schema> | </content-schema> | |||
| <description>Defines the notification capabilities of an acme-router. | <description>Defines the notification capabilities of an | |||
| The router only has running and operational datastores. | acme-router. The router only has running and operational | |||
| Every change can be reported on-change from the running | datastores. Every change can be reported on-change from the | |||
| datastore, but only "config false" nodes and some "config | running datastore, but only "config false" nodes and some | |||
| false" data from the operational datastore. Statistics are | "config false" data can be reported on-change from the | |||
| not reported on-change except for two important counters, | operational datastore. Statistics | |||
| are not reported on-change except for two important counters, | ||||
| where a small dampening period is mandated. | where a small dampening period is mandated. | |||
| </description> | </description> | |||
| <content-data> | <content-data> | |||
| <system-capabilities \ | <system-capabilities \ | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | |||
| xmlns:notc=\ | xmlns:notc=\ | |||
| "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | |||
| xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:minimum-update-period>500</notc:minimum-update-period> | <notc:minimum-update-period>500</notc:minimum-update-period> | |||
| <notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | <notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | |||
| <notc:minimum-dampening-period>100</notc:minimum-dampening-period> | <notc:minimum-dampening-period>\ | |||
| 100\ | ||||
| </notc:minimum-dampening-period> | ||||
| <notc:periodic-notifications-supported>\ | <notc:periodic-notifications-supported>\ | |||
| config-changes state-changes\ | config-changes state-changes\ | |||
| </notc:periodic-notifications-supported> | </notc:periodic-notifications-supported> | |||
| <notc:on-change-supported>\ | <notc:on-change-supported>\ | |||
| config-changes state-changes\ | config-changes state-changes\ | |||
| </notc:on-change-supported> | </notc:on-change-supported> | |||
| <notc:supported-excluded-change-type>\ | <notc:supported-excluded-change-type>\ | |||
| all\ | all\ | |||
| </notc:supported-excluded-change-type> | </notc:supported-excluded-change-type> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| skipping to change at line 1016 ¶ | skipping to change at line 1010 ¶ | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:minimum-dampening-period>10 | <notc:minimum-dampening-period>10 | |||
| </notc:minimum-dampening-period> | </notc:minimum-dampening-period> | |||
| <notc:on-change-supported>\ | <notc:on-change-supported>\ | |||
| state-changes\ | state-changes\ | |||
| </notc:on-change-supported> | </notc:on-change-supported> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| </per-node-capabilities> | </per-node-capabilities> | |||
| <per-node-capabilities> | <per-node-capabilities> | |||
| <node-selector>\ | <node-selector>\ | |||
| /if:interfaces/if:interface/if:statistics/if:out-octets\ | /if:interfaces/if:interface/if:statistics/if:out-octets\ | |||
| </node-selector> | </node-selector> | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:minimum-dampening-period>10 | <notc:minimum-dampening-period>10 | |||
| </notc:minimum-dampening-period> | </notc:minimum-dampening-period> | |||
| <notc:on-change-supported>\ | <notc:on-change-supported>\ | |||
| state-changes\ | state-changes\ | |||
| </notc:on-change-supported> | </notc:on-change-supported> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| </per-node-capabilities> | </per-node-capabilities> | |||
| <per-node-capabilities> | <per-node-capabilities> | |||
| skipping to change at line 1038 ¶ | skipping to change at line 1032 ¶ | |||
| /if:interfaces/if:interface/if:statistics\ | /if:interfaces/if:interface/if:statistics\ | |||
| </node-selector> | </node-selector> | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:on-change-supported/> | <notc:on-change-supported/> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| </per-node-capabilities> | </per-node-capabilities> | |||
| </datastore-capabilities> | </datastore-capabilities> | |||
| </system-capabilities> | </system-capabilities> | |||
| </content-data> | </content-data> | |||
| </instance-data-set> | </instance-data-set> | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Instance data example #2"> | <name>Instance Data Example #2</name> | |||
| <t>The following examples use artwork folding | <t>The following examples use artwork folding | |||
| <xref target="RFC8792"/> for better formatting.</t> | <xref target="RFC8792" format="default"/> for better formatting.</t> | |||
| <t> | <t> | |||
| The following instance data example describes the notification | The following instance data example describes the notification | |||
| capabilities of a hypothetical "acme-switch". The switch implements | capabilities of a hypothetical "acme-switch". The switch implements | |||
| the running, candidate and operational | the running, candidate, and operational | |||
| datastores. Every change can be reported "on-change" from the | datastores. | |||
| running datastore, nothing from the candidate datastore and all | ||||
| "config false" data from the operational datastore. | Every change can be reported "on-change" from the | |||
| "periodic" subscriptions are supported for running and | running datastore, nothing can be reported on-change from the candidate | |||
| operational, but not for candidate datastores. | datastore, and all | |||
| <figure align="center" anchor="acme-switch-notification-capabilities" ti | "config false" data can be reported on-change from the operational data | |||
| tle="Notification Capabilities with datastore level settings"> | store. | |||
| <artwork align="left" name="acme-switch-notification-capabilities.xml" | "Periodic" subscriptions are supported for running and | |||
| ><![CDATA[ | operational but not for candidate datastores. | |||
| </t> | ||||
| <figure anchor="acme-switch-notification-capabilities"> | ||||
| <name>Notification Capabilities with Datastore-Level Settings</name> | ||||
| <sourcecode name="acme-switch-notification-capabilities.xml" type="xml"> | ||||
| <![CDATA[ | ||||
| ========== NOTE: '\' line wrapping per RFC 8792) =========== | ========== 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-switch-notification-capabilities</name> | <name>acme-switch-notification-capabilities</name> | |||
| <content-schema> | <content-schema> | |||
| <module>ietf-system-capabilities@2021-10-12</module> | <module>ietf-system-capabilities@2022-01-21</module> | |||
| <module>ietf-notification-capabilities@2021-10-12</module> | <module>ietf-notification-capabilities@2022-01-21</module> | |||
| </content-schema> | </content-schema> | |||
| <description>Notification capabilities of acme-switch. | <description>Notification capabilities of acme-switch. | |||
| Acme-switch implements the running, candidate and operational | Acme-switch implements the running, candidate, and operational | |||
| datastores. Every change can be reported on-change from the | datastores. Every change can be reported on-change from the | |||
| running datastore, nothing from the candidate datastore and | running datastore, nothing from the candidate datastore and | |||
| all "config false" data from the operational datastore. Periodic | all "config false" data from the operational datastore. Periodic | |||
| subscriptions are supported for running and operational, but not | subscriptions are supported for running and operational, but not | |||
| for candidate datastore. | for candidate datastore. | |||
| </description> | </description> | |||
| <content-data> | <content-data> | |||
| <system-capabilities \ | <system-capabilities \ | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | |||
| xmlns:notc=\ | xmlns:notc=\ | |||
| "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | |||
| xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:minimum-update-period>500</notc:minimum-update-period> | <notc:minimum-update-period>500</notc:minimum-update-period> | |||
| <notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | <notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | |||
| <notc:minimum-dampening-period>100</notc:minimum-dampening-period> | <notc:minimum-dampening-period>\ | |||
| 100\ | ||||
| </notc:minimum-dampening-period> | ||||
| <notc:periodic-notifications-supported>\ | <notc:periodic-notifications-supported>\ | |||
| config-changes state-changes\ | config-changes state-changes\ | |||
| </notc:periodic-notifications-supported> | </notc:periodic-notifications-supported> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| <datastore-capabilities> | <datastore-capabilities> | |||
| <datastore>ds:operational</datastore> | <datastore>ds:operational</datastore> | |||
| <per-node-capabilities> | <per-node-capabilities> | |||
| <node-selector>/</node-selector> | <node-selector>/</node-selector> | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:on-change-supported>\ | <notc:on-change-supported>\ | |||
| skipping to change at line 1124 ¶ | skipping to change at line 1124 ¶ | |||
| <notc:subscription-capabilities> | <notc:subscription-capabilities> | |||
| <notc:on-change-supported>\ | <notc:on-change-supported>\ | |||
| config-changes\ | config-changes\ | |||
| </notc:on-change-supported> | </notc:on-change-supported> | |||
| </notc:subscription-capabilities> | </notc:subscription-capabilities> | |||
| </per-node-capabilities> | </per-node-capabilities> | |||
| </datastore-capabilities> | </datastore-capabilities> | |||
| </system-capabilities> | </system-capabilities> | |||
| </content-data> | </content-data> | |||
| </instance-data-set> | </instance-data-set> | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </t> | ||||
| </section> | </section> | |||
| <section numbered="false" toc="default"> | ||||
| <section title="Changes between revisions"> | <name>Acknowledgments</name> | |||
| <t> Note to RFC Editor (To be removed by RFC Editor)</t> | <t>For their valuable comments, discussions, and feedback, we wish to | |||
| <t>v20 - v21 | acknowledge <contact fullname="Andy Bierman"/>, <contact fullname="Juerg | |||
| <list style="symbols"> | en Schoenwaelder"/>, <contact fullname="Rob Wilton"/>, <contact fullname="Kent W | |||
| <t>IESG review</t> | atsen"/>, | |||
| </list> | <contact fullname="Eric Voit"/>, <contact fullname="Joe Clarke"/>, <cont | |||
| </t> | act fullname="Martin Bjorklund"/>, <contact fullname="Ladislav Lhotka"/>, <conta | |||
| <t>v19 - v20 | ct fullname="Qin Wu"/>, | |||
| <list style="symbols"> | <contact fullname="Mahesh Jethanandani"/>, <contact fullname="Ran Tao"/> | |||
| <t>IESG review</t> | , <contact fullname="Reshad Rahman"/>, and other members of the Netmod Working G | |||
| </list> | roup.</t> | |||
| </t> | ||||
| <t>v18 - v19 | ||||
| <list style="symbols"> | ||||
| <t>IESG review</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v17 - v18 | ||||
| <list style="symbols"> | ||||
| <t>IESG review</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v16 - v17 | ||||
| <list style="symbols"> | ||||
| <t>AD review comments addressed</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v15 - v16 | ||||
| <list style="symbols"> | ||||
| <t>Two editorial comments from document shepherd</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v14 - v15 | ||||
| <list style="symbols"> | ||||
| <t>Address the last comments from document shepherd</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v13 - v14 | ||||
| <list style="symbols"> | ||||
| <t>Updated according to sheperds review</t> | ||||
| <t>Added to import, which imported modules need to be implemented.</t> | ||||
| <t>Added notes to the RFC editor</t> | ||||
| <t>Re-arrange the sections, for a better reading flow</t> | ||||
| <t>Many editorial changes</t> | ||||
| <t>Replace YANG module prefix</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v12 - v13 | ||||
| <list style="symbols"> | ||||
| <t>Rearranged order of notification capability leafs into 3 groups: | ||||
| generic, specific to periodic subscriptions, specific to on-change.</t | ||||
| > | ||||
| <t>Introduced artwork folding in the examples</t> | ||||
| <t>Updated to follow draft-ietf-netmod-yang-instance-file-format-10</t | ||||
| > | ||||
| <t>Various editing changes</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v11 - v12 | ||||
| <list style="symbols"> | ||||
| <t>Updated max-nodes-per-update description</t> | ||||
| <t>Reformatted YANG models with pyang -f yang --keep-comments --yang-l | ||||
| ine-length 69</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v10 - v11 | ||||
| <list style="symbols"> | ||||
| <t>Updated examples</t> | ||||
| <t>Updated typedef notification-support</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v09 - v10 | ||||
| <list style="symbols"> | ||||
| <t>Removed description text from imports about the need for | ||||
| implementing the imported module.</t> | ||||
| <t>Changed notification-support to bits with shorter names</t> | ||||
| <t>Assigned enum values to supported-excluded-change-type</t> | ||||
| <t>Made node-selector a choice to allow for future alternative | ||||
| selection methods.</t> | ||||
| <t>Changed precedence of per-node-capabilities entries. | ||||
| Precedence is now according to the position of entries in | ||||
| the list.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v08 - v09 | ||||
| <list style="symbols"> | ||||
| <t>Split the YANG module into two: ietf-system-capabilities | ||||
| and ietf-notification-capabilities. Restructured/updated the draft | ||||
| accordingly.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v07 - v08 | ||||
| <list style="symbols"> | ||||
| <t>Prepared the YANG model to include other non-YANG-Push | ||||
| related capabilities.</t> | ||||
| <t>Renamed the top level container to system-capabilities</t> | ||||
| <t>Added a container subscription-capabilities to the grouping | ||||
| subscription-capabilities to contain all subscription | ||||
| related capabilities</t> | ||||
| <t>Updated examples according to | ||||
| draft-ietf-netmod-yang-instance-file-format-06.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v06 - v07 | ||||
| <list style="symbols"> | ||||
| <t>Updated examples according to | ||||
| draft-ietf-netmod-yang-instance-file-format-05.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v05 - v06 | ||||
| <list style="symbols"> | ||||
| <t>Providing the capability data is only a "SHOULD" recommendation. | ||||
| Some reviewers wanted MUST some wanted much less.</t> | ||||
| <t>The YANG module import statements now indicate the imported modules | ||||
| that must be implemented not just available as import as requested by | ||||
| the YangDoctors review.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v04 - v05 | ||||
| <list style="symbols"> | ||||
| <t>Added new capabilities periodic-notifications-supported and | ||||
| supported-excluded-change-type.</t> | ||||
| <t>Restructured YANG module to make the node-selector's usage similar | ||||
| to how NACM uses it: "/" means the whole datastore.</t> | ||||
| <t>Small corrections, spelling, rewording</t> | ||||
| <t>Replaced the term server with the term publisher except in cases | ||||
| where we speak about datastores and functionality based on | ||||
| get, getconfig operations. In this latter case it is really the | ||||
| server functionality that is discussed.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v03 - v04 | ||||
| <list style="symbols"> | ||||
| <t>Clarified recommended support for on-change notifications about | ||||
| the datastore-subscription-capabilities.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v02 - v03 | ||||
| <list style="symbols"> | ||||
| <t>Allow throughput related capabilities to be defined on top, | ||||
| datastore or data node level. Described that specific capability | ||||
| values always override generic ones.</t> | ||||
| <t>Indicate that non-NMDA servers can also use this model.</t> | ||||
| <t>Updated according to draft-ietf-netmod-yang-instance-file-format-04 | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v01 - v02 | ||||
| <list style="symbols"> | ||||
| <t>Added instance data examples</t> | ||||
| <t>On-change capability can be defined per datastore</t> | ||||
| <t>Added "if-feature yp:on-change" where relevant</t> | ||||
| <t>Unified units used</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>v00 - v01 | ||||
| <list style="symbols"> | ||||
| <t>Add more capabilities: minimum period, supported period | ||||
| max-number of objects, min dampening period, | ||||
| dampening supported</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| <!-- Local Variables: --> | ||||
| <!-- fill-column:72 --> | ||||
| <!-- End: --> | ||||
| End of changes. 155 change blocks. | ||||
| 632 lines changed or deleted | 515 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/ | ||||