rfc9196.original | rfc9196.txt | |||
---|---|---|---|---|
NETCONF B. Lengyel | Internet Engineering Task Force (IETF) B. Lengyel | |||
Internet-Draft Ericsson | Request for Comments: 9196 Ericsson | |||
Intended status: Standards Track A. Clemm | Category: Standards Track A. Clemm | |||
Expires: 18 April 2022 Futurewei | ISSN: 2070-1721 Futurewei | |||
B. Claise | B. Claise | |||
Huawei | Huawei | |||
15 October 2021 | February 2022 | |||
YANG Modules describing Capabilities for Systems and Datastore Update | YANG Modules Describing Capabilities for Systems and Datastore Update | |||
Notifications | Notifications | |||
draft-ietf-netconf-notification-capabilities-21 | ||||
Abstract | Abstract | |||
This document defines two YANG modules,"ietf-system-capabilities" and | This document defines two YANG modules, "ietf-system-capabilities" | |||
"ietf-notification-capabilities". | and "ietf-notification-capabilities". | |||
The module "ietf-system-capabilities" provides a placeholder | The module "ietf-system-capabilities" provides a placeholder | |||
structure that can be used to discover YANG related system | structure that can be used to discover YANG-related system | |||
capabilities for servers. The module can be used to report | capabilities for servers. The module can be used to report | |||
capability information from the server at run time or at | capability information from the server at runtime or at | |||
implementation time, by making use of the YANG Instance Data File | implementation time by making use of the YANG instance data file | |||
Format. | format. | |||
The module "ietf-notification-capabilities" augments "ietf-system- | The module "ietf-notification-capabilities" augments "ietf-system- | |||
capabilities" to specify capabilities related to Subscription to YANG | capabilities" to specify capabilities related to "Subscription to | |||
Notifications for Datastore Updates. | YANG Notifications for Datastore Updates" (RFC 8641). | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 18 April 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9196. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology | |||
2. Providing System Capability Information . . . . . . . . . . . 4 | 2. Providing System Capability Information | |||
3. Providing YANG-Push Notification Capabilities Information . . 5 | 3. Providing YANG-Push Notification Capabilities Information | |||
4. System Capabilities Model . . . . . . . . . . . . . . . . . . 6 | 4. System Capabilities Model | |||
4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Tree Diagram | |||
4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. YANG Module | |||
5. Notification Capabilities Model . . . . . . . . . . . . . . . 11 | 5. Notification Capabilities Model | |||
5.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Tree Diagram | |||
5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.2. YANG Module | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 6. Security Considerations | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 7. IANA Considerations | |||
7.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 19 | 7.1. The IETF XML Registry | |||
7.2. The YANG Module Names Registry . . . . . . . . . . . . . 19 | 7.2. The YANG Module Names Registry | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 20 | 8. References | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 8.1. Normative References | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 20 | 8.2. Informative References | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 21 | Appendix A. Instance Data Example #1 | |||
Appendix A. Instance data example #1 . . . . . . . . . . . . . . 22 | Appendix B. Instance Data Example #2 | |||
Appendix B. Instance data example #2 . . . . . . . . . . . . . . 24 | Acknowledgments | |||
Appendix C. Changes between revisions . . . . . . . . . . . . . 25 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
1. Introduction | 1. Introduction | |||
Servers and/or publishers often have capabilities, values describing | Servers and/or publishers often have capabilities, which can be | |||
operational behavior, that need to be conveyed to clients, which is | represented by values that designate operational behavior, that need | |||
enabled by the YANG modules described in this document. | to be conveyed to clients. The YANG modules that are defined in this | |||
document facilitate this. | ||||
There is a need to publish this capability information as it is part | There is a need to publish this capability information as it is part | |||
of the API contract between the server and client. Examples include | of the API contract between the server and client. Examples include | |||
maximum size of data that can be stored or transferred, information | the maximum size of data that can be stored or transferred, | |||
about counters (whether a node supports "on-change" telemetry), etc. | information about counters (whether a node supports "on-change" | |||
Such capabilities are often dependent on a vendor's implementation or | telemetry), etc. Such capabilities are often dependent on a vendor's | |||
the available resources at deployment. Many such capabilities are | implementation or the available resources at deployment. Many such | |||
specific to the complete system, individual YANG datastores | capabilities are specific to the complete system, individual YANG | |||
[RFC8342], specific parts of the YANG schema, or even individual data | datastores [RFC8342], specific parts of the YANG schema, or even | |||
nodes. It is a goal of this document to provide a common way of | individual data nodes. It is a goal of this document to provide a | |||
representing such capabilities in a format that is: | common way to represent such capabilities in a format that is: | |||
* vendor independent | * vendor independent, | |||
* machine-readable | * machine readable, and | |||
* available in an identical format both at implementation time and | * available in an identical format both at implementation time and | |||
at run time. | at runtime. | |||
Implementation-time information is needed by Network Management | Implementation-time information is needed by Network Management | |||
System (NMS) implementers. An NMS implementation that supports | System (NMS) implementers. An NMS implementation that supports | |||
notifications needs the information about a system's capability so it | notifications needs information about a system's capability so it can | |||
can send "on-change" notifications. If the information is not | send "on-change" notifications. If the information is not documented | |||
documented in a way that is readily available to the NMS designer, | in a way that is readily available to the NMS designer, but only as | |||
but only as instance data from the network node once it is deployed, | instance data from the network node once it is deployed, the NMS | |||
the NMS implementation will be delayed, because it has to wait for | implementation will be delayed because it has to wait for the network | |||
the network node to be ready. In addition, the assumption that all | node to be ready. In addition, the assumption that all NMS | |||
NMS implementers will have a correctly configured network node | implementers will have a correctly configured network node available | |||
available to retrieve data from is an expensive proposition and may | from which to retrieve data is an expensive proposition and may not | |||
not always hold. (An NMS may need to be able to handle many dozens | always hold. (An NMS may need to be able to handle many dozens of | |||
of network node types.) Often a fully functional NMS is a | network node types.) Often, a fully functional NMS is a requirement | |||
requirement for introducing a new network node type into a network, | for introducing a new network node type into a network, so delaying | |||
so delaying NMS readiness effectively also delays the time at which a | NMS readiness effectively also delays the time at which a new network | |||
new network node type can be introduced into the network. | node type can be introduced into the network. | |||
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, operators | When introducing a network node type into their network, operators | |||
often need to integrate the node type into their own management | often need to integrate the node type into their own management | |||
system. The NMS may have management functions that depend on "on- | system. The NMS may have management functions that depend on "on- | |||
change" notifications. The network operators need to plan their | change" notifications. The network operators need to plan their | |||
management practices and NMS implementation before they decide to buy | management practices and NMS implementation before they decide to buy | |||
the specific network node type. Moreover, the decision to buy the | the specific network node type. Moreover, the decision to buy the | |||
node type sometimes depends on these management possibilities. | node type sometimes depends on these management possibilities. | |||
Run-time capability information is needed: | Runtime capability information is needed: | |||
* for any "purely model driven" application, e.g., a NETCONF- | * for any "purely model-driven" application, e.g., a NETCONF | |||
browser. Such applications depend on reading models and | browser. Such applications depend on reading models and | |||
capabilities at run time to support all the publisher's available | capabilities at runtime to support all the publisher's available | |||
functionality. | functionality. | |||
* in case the capability might change during run time e.g., due to | * in case the capability might change during runtime, e.g., due to | |||
licensing, HW constraints etc. | licensing, hardware constraints, etc. | |||
* to check that capability information provided earlier, at | * to check that that capability information provided earlier, at | |||
implementation time, is what the publisher has implemented. | implementation time, is what the publisher has implemented. | |||
1.1. Terminology | 1.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
The terms "YANG-Push", "on-change subscription" and "periodic | The terms "YANG-Push", "on-change subscription", and "periodic | |||
subscription" are used as defined in [RFC8641]. | subscription" are used as defined in [RFC8641]. | |||
The terms "subscriber", "publisher" and "receiver" are used as | The terms "subscriber", "publisher", and "receiver" are used as | |||
defined in [RFC8639]. | defined in [RFC8639]. | |||
The term "server" is used as defined in [RFC8342]. | The term "server" is used as defined in [RFC8342]. | |||
The terms "YANG instance data file format", "instance data", and | 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 [RFC9195]. | |||
[I-D.ietf-netmod-yang-instance-file-format]. | ||||
In addition, this document defines the following terms: | In addition, this document defines the following terms: | |||
"Implementation-time information": Information about the server's | Implementation-time information: Information about the server's | |||
behavior that is made available during the implementation of the | behavior that is made available during the implementation of the | |||
server, available from a source other than a running server. | server, available from a source other than a running server. | |||
"Run-time information": Information about the server's behavior that | Runtime information: Information about the server's behavior that is | |||
is available from the running server via management protocols such as | available from the running server via management protocols such as | |||
NETCONF [RFC6241] or RESTCONF [RFC8040]. | NETCONF [RFC6241] or RESTCONF [RFC8040]. | |||
2. Providing System Capability Information | 2. Providing System Capability Information | |||
Capability information is represented by instance-data based on one | Capability information is represented by instance data based on one | |||
or more "capability defining YANG modules". This allows a user to | or more "capability-defining YANG modules". This allows a user to | |||
discover capabilities both at implementation time and at run time. | discover capabilities both at implementation time and at runtime. | |||
* For the implementation-time use case: Capabilities SHOULD be | For the implementation-time use case: Capabilities SHOULD be | |||
provided by the implementer as YANG instance data files complying | provided by the implementer as YANG instance data files complying | |||
to [I-D.ietf-netmod-yang-instance-file-format]. When provided, | with [RFC9195]. When provided, the file MUST already be available | |||
the file MUST be available already at implementation time, | at implementation time and retrievable in a way that does not | |||
retrievable in a way that does not depend on a live network node. | depend on a live network node, e.g., downloading from a product | |||
E.g., download from product website. | website. | |||
* For the run-time use case: Capabilities SHOULD be available via | For the runtime use case: Capabilities SHOULD be available via | |||
NETCONF [RFC6241] or RESTCONF [RFC8040] from the live server | NETCONF [RFC6241] or RESTCONF [RFC8040] from the live server | |||
(implementing the publisher) during run time. Implementations | (implementing the publisher) during runtime. Implementations that | |||
that support changing these capabilities at run time SHOULD | support changing these capabilities at runtime SHOULD support "on- | |||
support "on-change" notifications about the system-capabilities | change" notifications about the system-capabilities container. | |||
container. | ||||
The module "ietf-system-capabilities" provides a placeholder | The module "ietf-system-capabilities" provides a placeholder | |||
structure to be used to specify any YANG related system capability. | structure to be used to specify any YANG-related system capability. | |||
The module "ietf-notification-capabilities" is defined to allow a | The module "ietf-notification-capabilities" is defined to allow a | |||
publisher to specify capabilities related to "Subscription to YANG | publisher to specify capabilities related to "Subscription to YANG | |||
Notifications for Datastore Updates" [RFC8641], also known as YANG- | Notifications for Datastore Updates" [RFC8641], also known as YANG- | |||
Push, augmenting "ietf-system-capabilities". | Push, augmenting "ietf-system-capabilities". | |||
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 [RFC8342]. | Management Datastore Architecture (NMDA) defined in [RFC8342]. | |||
3. Providing YANG-Push Notification Capabilities Information | 3. Providing YANG-Push Notification Capabilities Information | |||
A specific case is the need to specify capabilities in the YANG-Push | A specific case is the need to specify capabilities in the YANG-Push | |||
functionality. As defined in [RFC8641] a publisher may allow | functionality. As defined in [RFC8641], a publisher may allow | |||
subscribers to subscribe to updates from a datastore and will | subscribers to subscribe to updates from a datastore and will | |||
subsequently push such update notifications to the receiver. | subsequently push such update notifications to the receiver. | |||
Notifications may be sent periodically or "on-change" (more or less | Notifications may be sent periodically or "on change" (more or less | |||
immediately after each change). | immediately after each change). | |||
A publisher supporting YANG-Push has a number of capabilities defined | A publisher supporting YANG-Push has a number of capabilities defined | |||
in [RFC8641] that are often determined during the implementation of | in [RFC8641] that are often determined during the implementation of | |||
the publisher. These include: | the publisher. These include: | |||
* Supported (reporting) periods for "periodic" subscriptions | * supported (reporting) periods for "periodic" subscriptions. | |||
* Maximum number of objects that can be sent in an update | * the maximum number of objects that can be sent in an update. | |||
* The set of datastores or data nodes for which "periodic" | * the set of datastores or data nodes for which "periodic" | |||
notification is supported. | notification is supported. | |||
Additional capabilities if the optional "on-change" feature is | Additional capabilities if the optional "on-change" feature is | |||
supported include: | supported include: | |||
* Supported dampening periods for "on-change" subscriptions | * supported dampening periods for "on-change" subscriptions. | |||
* The set of datastores or data nodes for which "on-change" | * the set of datastores or data nodes for which "on-change" | |||
notification is supported | notification is supported. | |||
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 | -- for example, how many update notifications and how many datastore | |||
node updates they can send out in a certain time-period. Other | node updates they can send out in a certain time period. Other | |||
publishers might not support "periodic" subscriptions to all | publishers might not support "periodic" subscriptions to all | |||
datastores. In some cases, a publisher supporting "on-change" | datastores. In some cases, a publisher supporting "on-change" | |||
notifications will not be able to push updates for some object types | notifications will not be able to push updates for some object types | |||
"on-change". Reasons for this might be that the value of the | "on change". Reasons for this might be that the value of the | |||
datastore node changes frequently (e.g., in-octets counter), that | datastore node changes frequently (e.g., in-octet counter), that | |||
small object changes are frequent and irrelevant to the receiver | small object changes are frequent and irrelevant to the receiver | |||
(e.g., a temperature gauge changing 0.1 degrees within a | (e.g., a temperature gauge changing 0.1 degrees within a | |||
predetermined and acceptable range), or that the implementation is | predetermined and acceptable range), or that the implementation is | |||
not capable of on-change notification for a particular object. In | not capable of on-change notification for a particular object. In | |||
all those cases, it will be important for subscriber applications to | all those cases, it will be important for subscriber applications to | |||
have a way to identify which objects "on-change" notifications are | have a way to identify the objects for which "on-change" | |||
supported and for which ones not. | notifications are supported and the objects for which they are not. | |||
Faced with the reality that support for "on-change" notification does | Support for "on-change" notifications does not mean that such | |||
not mean that such notifications will be sent for any specific data | notifications will be sent for any specific data node, as the ability | |||
node, subscriber/management applications can not rely on the "on- | to do so may not be supported for every data node. Therefore, | |||
change" functionality unless the subscriber has some means to | subscriber/management applications cannot rely on the "on-change" | |||
identify which objects "on-change" notifications are supported for. | functionality unless the subscriber has some means to identify the | |||
YANG models are meant to be used as an interface contract. Without | objects for which "on-change" notifications are in fact supported. | |||
identification of the data nodes actually supporting "on-change", | YANG data models are meant to be used as an interface contract. | |||
this contract would be incomplete. | Without identification of the data nodes actually supporting "on- | |||
change" notifications, this contract would be incomplete. | ||||
Clients of a server (and subscribers to a publisher, as subscribers | Clients of a server (and subscribers to a publisher, as subscribers | |||
are also clients) need a method to gather capability information. | are also clients) need a method to gather capability information. | |||
4. System Capabilities Model | 4. System Capabilities Model | |||
The module "ietf-system-capabilities" is defined to provide a | The module "ietf-system-capabilities" is defined to provide a | |||
structure that can be used to discover (as read-only operational | structure that can be used to discover (as a read-only operational | |||
state) any YANG related system capability. | state) any YANG-related system capability. | |||
This module itself does not contain any capabilities; it provides | 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 | modules. "ietf-system-capabilities" is used by other modules to | |||
augment in specific capability information. Every set of such | augment in specific capability information. Every set of such | |||
capabilities MUST be wrapped in a container under the augment | capabilities MUST be wrapped in a container under the augment | |||
statement to cleanly separate different groups of capabilities. | statement to cleanly separate different groups of capabilities. | |||
These "wrapper containers" SHALL be augmented in at /sysc:system- | These "wrapper containers" SHALL be augmented at /sysc:system- | |||
capabilities and /sysc:system-capabilities/sysc:datastore- | capabilities and /sysc:system-capabilities/sysc:datastore- | |||
capabilities/sysc:per-node-capabilities. | capabilities/sysc:per-node-capabilities. | |||
Capability values can be specified on system level, datastore level | Capability values can be specified at the system level, at the | |||
(by selecting all nodes in the datastore) or for specific data nodes | datastore level (by selecting all nodes in the datastore), or for | |||
of a specific datastore (and their contained sub-trees). Capability | specific data nodes of a specific datastore (and their contained | |||
values specified for a specific datastore or node-set override values | subtrees). Capability values specified for a specific datastore or | |||
specified on the system level. | node-set override values specified at the system level. | |||
Note: The solution is usable for both NMDA and non-NMDA systems. For | Note: The solution is usable for both NMDA and non-NMDA systems. | |||
non-NMDA servers "config false" data is considered as if it were part | For non-NMDA servers, "config false" data is considered as if it | |||
of the running datastore. | were part of the running datastore. | |||
4.1. Tree Diagram | 4.1. Tree Diagram | |||
The following tree diagram [RFC8340] provides an overview of the data | The following tree diagram [RFC8340] provides an overview of the data | |||
model. | model. | |||
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 | |||
4.2. YANG Module | 4.2. YANG Module | |||
This YANG module imports typedefs from [RFC8341] and a reference path | This YANG module imports typedefs from [RFC8341] and a reference path | |||
from [RFC8525]. | from [RFC8525]. | |||
<CODE BEGINS> file "ietf-system-capabilities@2021-10-12.yang" | <CODE BEGINS> file "ietf-system-capabilities@2022-01-21.yang" | |||
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 page 8, line 4 ¶ | skipping to change at line 325 ¶ | |||
"RFC 8341: Network Configuration Access Control Model"; | "RFC 8341: Network Configuration Access Control Model"; | |||
} | } | |||
import ietf-yang-library { | import ietf-yang-library { | |||
prefix yanglib; | prefix yanglib; | |||
description | description | |||
"This module requires ietf-yang-library to be implemented. | "This module requires ietf-yang-library to be implemented. | |||
Revision 2019-01-04 or a revision derived from it | Revision 2019-01-04 or a revision derived from it | |||
is REQUIRED."; | is REQUIRED."; | |||
reference | reference | |||
"RFC8525: YANG Library"; | "RFC8525: YANG Library"; | |||
} | } | |||
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." | |||
*/ | */ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
<CODE ENDS> | ||||
5. Notification Capabilities Model | 5. Notification Capabilities Model | |||
The YANG module "ietf-notification-capabilities" provides YANG-Push | The YANG module "ietf-notification-capabilities" provides information | |||
related capability information. | related to the YANG-Push capability. | |||
5.1. Tree Diagram | 5.1. Tree Diagram | |||
The following tree diagram [RFC8340] provides an overview of the data | The following tree diagram [RFC8340] provides an overview of the data | |||
model. | model. | |||
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 | |||
skipping to change at page 12, line 44 ¶ | skipping to change at line 528 ¶ | |||
| {yp:on-change}? | | {yp:on-change}? | |||
+--ro supported-excluded-change-type* union | +--ro supported-excluded-change-type* union | |||
{yp:on-change}? | {yp:on-change}? | |||
5.2. YANG Module | 5.2. YANG Module | |||
This YANG module imports a feature and typedefs from [RFC8641] and | This YANG module imports a feature and typedefs from [RFC8641] and | |||
also imports the "ietf-system-capabilities" specified in this | also imports the "ietf-system-capabilities" specified in this | |||
document. | document. | |||
<CODE BEGINS> file "ietf-notification-capabilities@2021-10-12.yang" | <CODE BEGINS> file "ietf-notification-capabilities@2022-01-21.yang" | |||
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 page 18, line 17 ¶ | skipping to change at line 782 ¶ | |||
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"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
skipping to change at page 19, line 4 ¶ | skipping to change at line 817 ¶ | |||
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. | |||
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 the | information that is inherently flexible and extensible. While the | |||
full set of use cases is not known now, they may range as wide as | full set of use cases is not known now, they may range as wide as | |||
conveying the minimum update period for periodic subscription updates | conveying the minimum update period for periodic subscription updates | |||
and what protocols might be used for such notifications. Knowledge | and what protocols might be used for such notifications. Knowledge | |||
of this type of value might, for example, allow an attacker to gain | of this type of value might, for example, allow an attacker to gain | |||
insight into how long unauthorized configuration changes might be | insight into how long unauthorized configuration changes might be | |||
active prior to detection, and what communications channels might be | active prior to detection and what communications channels might be | |||
disrupted to extend the period of non-detection. Documents adding | disrupted to extend the period of non-detection. Documents adding | |||
additional capabilities via augmenting this module are encouraged to | additional capabilities via augmenting this module are encouraged to | |||
document the security considerations of the new YANG nodes, according | document the security considerations of the new YANG nodes, according | |||
to the guidance in BCP 216. | to the guidance in BCP 216 [RFC8407]. | |||
All protocol-accessible data nodes in augmented modules are read-only | All protocol-accessible data nodes in augmented modules are read-only | |||
and cannot be modified. The data in these modules is not security | and cannot be modified. Access control may be configured to avoid | |||
sensitive. Access control may be configured, to avoid exposing the | exposing any read-only data that is defined by the augmenting module | |||
read-only data. | documentation as being security sensitive. | |||
When that data is in file format, data should be protected against | When that data is in file format, the data should be protected | |||
modification or unauthorized access using normal file handling | against modification or unauthorized access using normal file- | |||
mechanisms. The data in file format also inherits all the security | handling mechanisms. The data in file format also inherits all the | |||
considerations of [I-D.ietf-netmod-yang-instance-file-format] which | security considerations of [RFC9195], which includes additional | |||
has additional considerations about read protections; and | considerations about read protections and distinguishes between data | |||
distinguishes between data at rest and in motion. | at rest and in motion. | |||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. The IETF XML Registry | 7.1. The IETF XML Registry | |||
This document registers two URIs in the IETF XML registry [RFC3688]. | This document registers the following URIs in the "IETF XML Registry" | |||
Following the format in [RFC3688], the following registrations are | [RFC3688]: | |||
requested: | ||||
URI: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | URI: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | |||
Registrant Contact: The NETCONF WG of the IETF. | Registrant Contact: The IESG. | |||
XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:ietf-notification-capabilities | URI: urn:ietf:params:xml:ns:yang:ietf-notification-capabilities | |||
Registrant Contact: The NETCONF WG of the IETF. | Registrant Contact: The IESG. | |||
XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
7.2. The YANG Module Names Registry | 7.2. The YANG Module Names Registry | |||
This document registers two YANG modules in the YANG Module Names | This document registers the following YANG modules in the "YANG | |||
registry [RFC6020]. Following the format in [RFC6020], the following | Module Names" registry [RFC6020]: | |||
registrations are requested: | ||||
name: ietf-system-capabilities | ||||
namespace: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | ||||
prefix: sysc | ||||
reference: RFC XXXX | ||||
name: ietf-notification-capabilities | ||||
namespace: | ||||
urn:ietf:params:xml:ns:yang:ietf-notification-capabilities | ||||
prefix: notc | ||||
reference: RFC XXXX | ||||
8. Acknowledgments | ||||
For their valuable comments, discussions, and feedback, we wish to | name: ietf-system-capabilities | |||
acknowledge Andy Bierman, Juergen Schoenwaelder, Rob Wilton, Kent | namespace: urn:ietf:params:xml:ns:yang:ietf-system-capabilities | |||
Watsen, Eric Voit, Joe Clarke, Martin Bjorklund, Ladislav Lhotka, Qin | prefix: sysc | |||
Wu, Mahesh Jethanandani, Ran Tao, Reshad Rahman and other members of | reference: RFC 9196 | |||
the Netmod WG. | ||||
9. References | name: ietf-notification-capabilities | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-notification- | ||||
capabilities | ||||
prefix: notc | ||||
reference: RFC 9196 | ||||
9.1. Normative References | 8. References | |||
[I-D.ietf-netmod-yang-instance-file-format] | 8.1. Normative References | |||
Lengyel, B. and B. Claise, "YANG Instance Data File | ||||
Format", Work in Progress, Internet-Draft, draft-ietf- | ||||
netmod-yang-instance-file-format-19, 16 September 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-netmod-yang- | ||||
instance-file-format-19.txt>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
<https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | ||||
and A. Bierman, Ed., "Network Configuration Protocol | ||||
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | ||||
<https://www.rfc-editor.org/info/rfc6241>. | ||||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | ||||
<https://www.rfc-editor.org/info/rfc6242>. | ||||
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | ||||
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
<https://www.rfc-editor.org/info/rfc8040>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | |||
Access Control Model", STD 91, RFC 8341, | Access Control Model", STD 91, RFC 8341, | |||
DOI 10.17487/RFC8341, March 2018, | DOI 10.17487/RFC8341, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
and R. Wilton, "Network Management Datastore Architecture | and R. Wilton, "Network Management Datastore Architecture | |||
(NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8342>. | <https://www.rfc-editor.org/info/rfc8342>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | ||||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | ||||
<https://www.rfc-editor.org/info/rfc8446>. | ||||
[RFC8525] Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | [RFC8525] Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | |||
and R. Wilton, "YANG Library", RFC 8525, | and R. Wilton, "YANG Library", RFC 8525, | |||
DOI 10.17487/RFC8525, March 2019, | DOI 10.17487/RFC8525, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8525>. | <https://www.rfc-editor.org/info/rfc8525>. | |||
[RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | |||
E., and A. Tripathy, "Subscription to YANG Notifications", | E., and A. Tripathy, "Subscription to YANG Notifications", | |||
RFC 8639, DOI 10.17487/RFC8639, September 2019, | RFC 8639, DOI 10.17487/RFC8639, September 2019, | |||
<https://www.rfc-editor.org/info/rfc8639>. | <https://www.rfc-editor.org/info/rfc8639>. | |||
[RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | |||
for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | |||
September 2019, <https://www.rfc-editor.org/info/rfc8641>. | September 2019, <https://www.rfc-editor.org/info/rfc8641>. | |||
9.2. Informative References | [RFC9195] Lengyel, B. and B. Claise, "A File Format for YANG | |||
Instance Data", RFC 9195, DOI 10.17487/RFC9195, February | ||||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | 2022, <https://www.rfc-editor.org/info/rfc9195>. | |||
and A. Bierman, Ed., "Network Configuration Protocol | ||||
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | ||||
<https://www.rfc-editor.org/info/rfc6241>. | ||||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | ||||
<https://www.rfc-editor.org/info/rfc6242>. | ||||
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | 8.2. Informative References | |||
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
<https://www.rfc-editor.org/info/rfc8040>. | ||||
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Documents Containing YANG Data Models", BCP 216, RFC 8407, | |||
<https://www.rfc-editor.org/info/rfc8446>. | DOI 10.17487/RFC8407, October 2018, | |||
<https://www.rfc-editor.org/info/rfc8407>. | ||||
[RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
"Handling Long Lines in Content of Internet-Drafts and | "Handling Long Lines in Content of Internet-Drafts and | |||
RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
<https://www.rfc-editor.org/info/rfc8792>. | <https://www.rfc-editor.org/info/rfc8792>. | |||
Appendix A. Instance data example #1 | Appendix A. Instance Data Example #1 | |||
The following examples use artwork folding [RFC8792] for better | The following examples use artwork folding [RFC8792] for better | |||
formatting. | formatting. | |||
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. Every change can be reported | the running and operational datastores. Every change can be reported | |||
"on-change" from the running datastore, but only "config false" nodes | "on-change" from the running datastore, but only "config false" nodes | |||
and some "config false" data from the operational datastore. | and some "config false" data can be reported on-change from the | |||
Interface statistics are not reported "on-change", only two important | operational datastore. Interface statistics are not reported "on- | |||
counters. Datastore subscription capabilities are not reported "on- | change"; only two important counters are. Datastore subscription | |||
change", as they never change on the acme-router during run time. | capabilities are not reported "on-change", as they never change on | |||
the acme-router during runtime. | ||||
========== NOTE: '\' line wrapping per RFC 8792) =========== | ||||
<?xml version="1.0" encoding="UTF-8"?> | ||||
<instance-data-set xmlns=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | ||||
<name>acme-router-notification-capabilities</name> | ||||
<content-schema> | ||||
<module>ietf-system-capabilities@2021-10-12</module> | ||||
<module>ietf-notification-capabilities@2021-10-12</module> | ||||
</content-schema> | ||||
<description>Defines the notification capabilities of an acme-router. | ||||
The router only has running and operational datastores. | ||||
Every change can be reported on-change from the running | ||||
datastore, but only "config false" nodes and some "config | ||||
false" data from the operational datastore. Statistics are | ||||
not reported on-change except for two important counters, | ||||
where a small dampening period is mandated. | ||||
</description> | ||||
<content-data> | ||||
<system-capabilities \ | ||||
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | ||||
xmlns:notc=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | ||||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-update-period>500</notc:minimum-update-period> | ||||
<notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | ||||
<notc:minimum-dampening-period>100</notc:minimum-dampening-period> | ||||
<notc:periodic-notifications-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:periodic-notifications-supported> | ||||
<notc:on-change-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:on-change-supported> | ========== NOTE: '\' line wrapping per RFC 8792) =========== | |||
<notc:supported-excluded-change-type>\ | ||||
all\ | ||||
</notc:supported-excluded-change-type> | ||||
</notc:subscription-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:operational</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface[if:name='lo']\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
<notc:periodic-notifications-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics/if:in-octets\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-dampening-period>10 | ||||
</notc:minimum-dampening-period> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics/if:out-octets\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-dampening-period>10 | ||||
</notc:minimum-dampening-period> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | <?xml version="1.0" encoding="UTF-8"?> | |||
</system-capabilities> | <instance-data-set xmlns=\ | |||
</content-data> | "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | |||
</instance-data-set> | <name>acme-router-notification-capabilities</name> | |||
<content-schema> | ||||
<module>ietf-system-capabilities@2022-01-21</module> | ||||
<module>ietf-notification-capabilities@2022-01-21</module> | ||||
</content-schema> | ||||
<description>Defines the notification capabilities of an | ||||
acme-router. The router only has running and operational | ||||
datastores. Every change can be reported on-change from the | ||||
running datastore, but only "config false" nodes and some | ||||
"config false" data can be reported on-change from the | ||||
operational datastore. Statistics | ||||
are not reported on-change except for two important counters, | ||||
where a small dampening period is mandated. | ||||
</description> | ||||
<content-data> | ||||
<system-capabilities \ | ||||
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | ||||
xmlns:notc=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | ||||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-update-period>500</notc:minimum-update-period> | ||||
<notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | ||||
<notc:minimum-dampening-period>\ | ||||
100\ | ||||
</notc:minimum-dampening-period> | ||||
<notc:periodic-notifications-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:periodic-notifications-supported> | ||||
<notc:on-change-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:on-change-supported> | ||||
<notc:supported-excluded-change-type>\ | ||||
all\ | ||||
</notc:supported-excluded-change-type> | ||||
</notc:subscription-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:operational</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface[if:name='lo']\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
<notc:periodic-notifications-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics/if:in-octets\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-dampening-period>10 | ||||
</notc:minimum-dampening-period> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics/if:out-octets\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-dampening-period>10 | ||||
</notc:minimum-dampening-period> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
<per-node-capabilities> | ||||
<node-selector>\ | ||||
/if:interfaces/if:interface/if:statistics\ | ||||
</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
</system-capabilities> | ||||
</content-data> | ||||
</instance-data-set> | ||||
Figure 1: Notification Capabilities with data node specific settings | Figure 1: Notification Capabilities with Settings Specific to the | |||
Data Node | ||||
Appendix B. Instance data example #2 | Appendix B. Instance Data Example #2 | |||
The following examples use artwork folding [RFC8792] for better | The following examples use artwork folding [RFC8792] for better | |||
formatting. | formatting. | |||
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 datastores. Every change can | the running, candidate, and operational datastores. Every change can | |||
be reported "on-change" from the running datastore, nothing from the | be reported "on-change" from the running datastore, nothing can be | |||
candidate datastore and all "config false" data from the operational | reported on-change from the candidate datastore, and all "config | |||
datastore. "periodic" subscriptions are supported for running and | false" data can be reported on-change from the operational datastore. | |||
operational, but not for candidate datastores. | "Periodic" subscriptions are supported for running and operational | |||
but not for candidate datastores. | ||||
========== NOTE: '\' line wrapping per RFC 8792) =========== | ||||
<?xml version="1.0" encoding="UTF-8"?> | ||||
<instance-data-set xmlns=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | ||||
<name>acme-switch-notification-capabilities</name> | ||||
<content-schema> | ||||
<module>ietf-system-capabilities@2021-10-12</module> | ||||
<module>ietf-notification-capabilities@2021-10-12</module> | ||||
</content-schema> | ||||
<description>Notification capabilities of acme-switch. | ||||
Acme-switch implements the running, candidate and operational | ||||
datastores. Every change can be reported on-change from the | ||||
running datastore, nothing from the candidate datastore and | ||||
all "config false" data from the operational datastore. Periodic | ||||
subscriptions are supported for running and operational, but not | ||||
for candidate datastore. | ||||
</description> | ||||
<content-data> | ||||
<system-capabilities \ | ||||
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | ||||
xmlns:notc=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | ||||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-update-period>500</notc:minimum-update-period> | ||||
<notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | ||||
<notc:minimum-dampening-period>100</notc:minimum-dampening-period> | ||||
<notc:periodic-notifications-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:periodic-notifications-supported> | ||||
</notc:subscription-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:operational</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:candidate</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
<notc:periodic-notifications-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:running</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported>\ | ||||
config-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
</system-capabilities> | ||||
</content-data> | ||||
</instance-data-set> | ||||
Figure 2: Notification Capabilities with datastore level settings | ||||
Appendix C. Changes between revisions | ||||
Note to RFC Editor (To be removed by RFC Editor) | ||||
v20 - v21 | ||||
* IESG review | ||||
v19 - v20 | ||||
* IESG review | ||||
v18 - v19 | ||||
* IESG review | ||||
v17 - v18 | ||||
* IESG review | ||||
v16 - v17 | ||||
* AD review comments addressed | ||||
v15 - v16 | ||||
* Two editorial comments from document shepherd | ||||
v14 - v15 | ||||
* Address the last comments from document shepherd | ||||
v13 - v14 | ||||
* Updated according to sheperds review | ||||
* Added to import, which imported modules need to be implemented. | ||||
* Added notes to the RFC editor | ||||
* Re-arrange the sections, for a better reading flow | ||||
* Many editorial changes | ||||
* Replace YANG module prefix | ||||
v12 - v13 | ||||
* Rearranged order of notification capability leafs into 3 groups: | ||||
generic, specific to periodic subscriptions, specific to on- | ||||
change. | ||||
* Introduced artwork folding in the examples | ||||
* Updated to follow draft-ietf-netmod-yang-instance-file-format-10 | ||||
* Various editing changes | ||||
v11 - v12 | ||||
* Updated max-nodes-per-update description | ||||
* Reformatted YANG models with pyang -f yang --keep-comments --yang- | ||||
line-length 69 | ||||
v10 - v11 | ||||
* Updated examples | ||||
* Updated typedef notification-support | ||||
v09 - v10 | ||||
* Removed description text from imports about the need for | ||||
implementing the imported module. | ||||
* Changed notification-support to bits with shorter names | ||||
* Assigned enum values to supported-excluded-change-type | ||||
* Made node-selector a choice to allow for future alternative | ||||
selection methods. | ||||
* Changed precedence of per-node-capabilities entries. Precedence | ||||
is now according to the position of entries in the list. | ||||
v08 - v09 | ||||
* Split the YANG module into two: ietf-system-capabilities and ietf- | ||||
notification-capabilities. Restructured/updated the draft | ||||
accordingly. | ||||
v07 - v08 | ||||
* Prepared the YANG model to include other non-YANG-Push related | ||||
capabilities. | ||||
* Renamed the top level container to system-capabilities | ||||
* Added a container subscription-capabilities to the grouping | ||||
subscription-capabilities to contain all subscription related | ||||
capabilities | ||||
* Updated examples according to draft-ietf-netmod-yang-instance- | ||||
file-format-06. | ||||
v06 - v07 | ||||
* Updated examples according to draft-ietf-netmod-yang-instance- | ||||
file-format-05. | ||||
v05 - v06 | ||||
* Providing the capability data is only a "SHOULD" recommendation. | ||||
Some reviewers wanted MUST some wanted much less. | ||||
* 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. | ||||
v04 - v05 | ||||
* Added new capabilities periodic-notifications-supported and | ||||
supported-excluded-change-type. | ||||
* Restructured YANG module to make the node-selector's usage similar | ||||
to how NACM uses it: "/" means the whole datastore. | ||||
* Small corrections, spelling, rewording | ||||
* 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. | ||||
v03 - v04 | ||||
* Clarified recommended support for on-change notifications about | ||||
the datastore-subscription-capabilities. | ||||
v02 - v03 | ||||
* Allow throughput related capabilities to be defined on top, | ||||
datastore or data node level. Described that specific capability | ||||
values always override generic ones. | ||||
* Indicate that non-NMDA servers can also use this model. | ||||
* Updated according to draft-ietf-netmod-yang-instance-file- | ||||
format-04 | ||||
v01 - v02 | ||||
* Added instance data examples | ||||
* On-change capability can be defined per datastore | ========== NOTE: '\' line wrapping per RFC 8792) =========== | |||
* Added "if-feature yp:on-change" where relevant | <?xml version="1.0" encoding="UTF-8"?> | |||
<instance-data-set xmlns=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | ||||
<name>acme-switch-notification-capabilities</name> | ||||
<content-schema> | ||||
<module>ietf-system-capabilities@2022-01-21</module> | ||||
<module>ietf-notification-capabilities@2022-01-21</module> | ||||
</content-schema> | ||||
<description>Notification capabilities of acme-switch. | ||||
Acme-switch implements the running, candidate, and operational | ||||
datastores. Every change can be reported on-change from the | ||||
running datastore, nothing from the candidate datastore and | ||||
all "config false" data from the operational datastore. Periodic | ||||
subscriptions are supported for running and operational, but not | ||||
for candidate datastore. | ||||
</description> | ||||
<content-data> | ||||
<system-capabilities \ | ||||
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" \ | ||||
xmlns:notc=\ | ||||
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" \ | ||||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | ||||
<notc:subscription-capabilities> | ||||
<notc:minimum-update-period>500</notc:minimum-update-period> | ||||
<notc:max-nodes-per-update>2000</notc:max-nodes-per-update> | ||||
<notc:minimum-dampening-period>\ | ||||
100\ | ||||
</notc:minimum-dampening-period> | ||||
<notc:periodic-notifications-supported>\ | ||||
config-changes state-changes\ | ||||
</notc:periodic-notifications-supported> | ||||
</notc:subscription-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:operational</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported>\ | ||||
state-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:candidate</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported/> | ||||
<notc:periodic-notifications-supported/> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
<datastore-capabilities> | ||||
<datastore>ds:running</datastore> | ||||
<per-node-capabilities> | ||||
<node-selector>/</node-selector> | ||||
<notc:subscription-capabilities> | ||||
<notc:on-change-supported>\ | ||||
config-changes\ | ||||
</notc:on-change-supported> | ||||
</notc:subscription-capabilities> | ||||
</per-node-capabilities> | ||||
</datastore-capabilities> | ||||
</system-capabilities> | ||||
</content-data> | ||||
</instance-data-set> | ||||
* Unified units used | Figure 2: Notification Capabilities with Datastore-Level Settings | |||
v00 - v01 | Acknowledgments | |||
* Add more capabilities: minimum period, supported period max-number | For their valuable comments, discussions, and feedback, we wish to | |||
of objects, min dampening period, dampening supported | 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 Netmod Working Group. | ||||
Authors' Addresses | Authors' Addresses | |||
Balazs Lengyel | Balazs Lengyel | |||
Ericsson | Ericsson | |||
1117 Budapest | Budapest | |||
Magyar Tudosok korutja 11 | Magyar Tudosok korutja 11 | |||
1117 | ||||
Hungary | Hungary | |||
Email: balazs.lengyel@ericsson.com | Email: balazs.lengyel@ericsson.com | |||
Alexander Clemm | Alexander Clemm | |||
Futurewei | Futurewei | |||
2330 Central Expressway | 2330 Central Expressway | |||
Santa Clara, CA 95050, | Santa Clara, CA 95050 | |||
United States of America | United States of America | |||
Email: ludwig@clemm.org | Email: ludwig@clemm.org | |||
Benoit Claise | Benoit Claise | |||
Huawei | Huawei | |||
George's Court Townsend Street | ||||
Dublin 2 | ||||
Ireland | ||||
Email: benoit.claise@huawei.com | Email: benoit.claise@huawei.com | |||
End of changes. 144 change blocks. | ||||
663 lines changed or deleted | 484 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/ |