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