draft-ietf-netconf-notification-capabilities-07.txt   draft-ietf-netconf-notification-capabilities-08.txt 
NETCONF B. Lengyel NETCONF B. Lengyel
Internet-Draft Ericsson Internet-Draft Ericsson
Intended status: Standards Track A. Clemm Intended status: Standards Track A. Clemm
Expires: May 20, 2020 Futurewei Expires: June 11, 2020 Futurewei
B. Claise B. Claise
Cisco Systems, Inc. Cisco Systems, Inc.
November 17, 2019 December 9, 2019
YANG-Push Notification Capabilities YANG-Push Notification Capabilities
draft-ietf-netconf-notification-capabilities-07 draft-ietf-netconf-notification-capabilities-08
Abstract Abstract
This document proposes a YANG module that allows a publisher to This document proposes a YANG module that allows a publisher to
specify capabilities related to "Subscription to YANG Datastores" specify capabilities related to "Subscription to YANG Datastores"
(YANG-Push). It proposes to use YANG Instance Data to document this (YANG-Push). It proposes to use YANG Instance Data to document this
information and make it already available at implementation-time, but information and make it already available at implementation-time, but
also allow it to be reported at run-time. also allow it to be reported at run-time.
The YANG module is also prepared to contain other system
capabilities, for future augmentations.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 20, 2020. This Internet-Draft will expire on June 11, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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 Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 14 skipping to change at page 2, line 17
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Notification Capability Model . . . . . . . . . . . . . . . . 5 3. Notification Capability Model . . . . . . . . . . . . . . . . 5
3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 6 3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 6
3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7
4. Security Considerations . . . . . . . . . . . . . . . . . . . 12 3.3. Other System Capabilities . . . . . . . . . . . . . . . . 13
4. Security Considerations . . . . . . . . . . . . . . . . . . . 13
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13
5.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 13 5.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 13
5.2. The YANG Module Names Registry . . . . . . . . . . . . . 13 5.2. The YANG Module Names Registry . . . . . . . . . . . . . 14
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.1. Normative References . . . . . . . . . . . . . . . . . . 13 6.1. Normative References . . . . . . . . . . . . . . . . . . 14
6.2. Informative References . . . . . . . . . . . . . . . . . 14 6.2. Informative References . . . . . . . . . . . . . . . . . 15
Appendix A. Instance data examples . . . . . . . . . . . . . . . 14 Appendix A. Instance data examples . . . . . . . . . . . . . . . 15
Appendix B. Changes between revisions . . . . . . . . . . . . . 17 Appendix B. Changes between revisions . . . . . . . . . . . . . 19
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 20
1. Terminology 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 BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all 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 subscription The terms YANG-Push, On-change subscription and Periodic subscription
skipping to change at page 5, line 9 skipping to change at page 5, line 12
Such applications depend on reading models, capabilities in run- Such applications depend on reading models, capabilities in run-
time to support all the publisher's available functionality. time to support all the publisher's available functionality.
o in case the capability might change during run-time e.g. due to o in case the capability might change during run-time e.g. due to
licensing, HW constraints etc. licensing, HW constraints etc.
o to check that capability information provided early, already in o to check that capability information provided early, already in
implementation-time is indeed what the publisher implements (is implementation-time is indeed what the publisher implements (is
the supplied documentation correct?) the supplied documentation correct?)
The proposed YANG module is also intended as a base model to be
augmented by other YANG modules defining system-capabilities not
related to YANG-Push. Other capability defining YANG modules MAY
augment the data nodes specifying these capabilites into this model.
3. Notification Capability Model 3. Notification Capability Model
It is a goal to provide YANG-Push notification capability information It is a goal to provide YANG-Push notification capability information
in a format that is: in a format that is:
o vendor independent o vendor independent
o machine readable o machine readable
o identical for implementation-time and run-time o identical for implementation-time and run-time
The YANG module ietf-notification-capabilities is defined to provide The YANG module ietf-notification-capabilities is defined to provide
the information. It contains: the information. It contains:
o a set of capabilities related to the throughput of notification o a set of capabilities related to the throughput of notification
data the publisher can send out. data the publisher can send out.
o specification of which data nodes support on-change notifications. o specification of which data nodes support on-change notifications.
Capability values can be specified on publisher level, datastore Capability values can be specified on system/publisher level,
level or on specific data nodes (and their contained sub-tree) of a datastore level or on specific data nodes (and their contained sub-
specific datastore. Capability values on a smaller, more specific tree) of a specific datastore. Capability values on a smaller, more
part of the publisher's data always override more generic values. specific part of the publisher's data always override more generic
values.
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. For
non-NMDA servers/publishers the config=false data is considered as if non-NMDA servers/publishers the config=false data is considered as if
it was part of the running datastore. it was part of the running datastore.
The information SHOULD be provided in two ways both following the The information SHOULD be provided in two ways both following the
ietf-notification-capabilities module: ietf-notification-capabilities module:
o For the implementation-time use-case: It SHOULD be provided by the o For the implementation-time use-case: It SHOULD be provided by the
implementer as YANG instance data file complying to implementer as YANG instance data file complying to
[I-D.ietf-netmod-yang-instance-file-format]. The file SHALL be [I-D.ietf-netmod-yang-instance-file-format]. The file SHALL be
available already in implementation-time retrievable in a way that available already in implementation-time retrievable in a way that
does not depend on a live network node. E.g. download from does not depend on a live network node. E.g. download from
product website. product website.
o For the run-time use-case: It SHOULD be available via NETCONF o For the run-time use-case: It SHOULD be available via NETCONF
[RFC6241] or RESTCONF [RFC8040] from the live server (implementing [RFC6241] or RESTCONF [RFC8040] from the live server (implementing
the publisher) during run-time. Implementations which support the publisher) during run-time. Implementations which support
changing these capabilities at run-time SHOULD support on-change changing these capabilities at run-time SHOULD support on-change
notifications about the publisher-subscription-capabilities notifications about the system-capabilities container.
container.
3.1. Tree Diagram 3.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
+--ro publisher-subscription-capabilities +--ro system-capabilities
+--ro (update-period)? +--ro subscription-capabilities
| +--:(minimum-update-period) | +--ro (update-period)?
| | +--ro minimum-update-period? uint32 | | +--:(minimum-update-period)
| +--:(supported-update-period) | | | +--ro minimum-update-period? uint32
| +--ro supported-update-period* uint32 | | +--:(supported-update-period)
+--ro max-objects-per-update? uint32 | | +--ro supported-update-period* uint32
+--ro minimum-dampening-period? uint32 {yp:on-change}? | +--ro max-objects-per-update? uint32
+--ro on-change-supported? notification-support | +--ro minimum-dampening-period? uint32 {yp:on-change}?
| {yp:on-change}? | +--ro on-change-supported? notification-support
+--ro periodic-notifications-supported? notification-support | | {yp:on-change}?
+--ro supported-excluded-change-type* union {yp:on-change}? | +--ro periodic-notifications-supported? notification-support
| +--ro supported-excluded-change-type* union {yp:on-change}?
+--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* [node-selector] +--ro per-node-capabilities* [node-selector]
+--ro node-selector nacm:node-instance-identifier +--ro node-selector nacm:node-instance-identifier
+--ro (update-period)? +--ro subscription-capabilities
| +--:(minimum-update-period) +--ro (update-period)?
| | +--ro minimum-update-period? uint32 | +--:(minimum-update-period)
| +--:(supported-update-period) | | +--ro minimum-update-period? uint32
| +--ro supported-update-period* uint32 | +--:(supported-update-period)
+--ro max-objects-per-update? uint32 | +--ro supported-update-period* uint32
+--ro minimum-dampening-period? uint32 +--ro max-objects-per-update? uint32
| {yp:on-change}? +--ro minimum-dampening-period? uint32
+--ro on-change-supported? notification-support | {yp:on-change}?
| {yp:on-change}? +--ro on-change-supported? notification-support
+--ro periodic-notifications-supported? notification-support | {yp:on-change}?
+--ro supported-excluded-change-type* union {yp:on-change}? +--ro periodic-notifications-supported?
| notification-support
+--ro supported-excluded-change-type* union
{yp:on-change}?
3.2. YANG Module 3.2. YANG Module
<CODE BEGINS> file "ietf-notification-capabilities@2019-11-05.yang" <CODE BEGINS> file "ietf-notification-capabilities@2019-12-09.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 inc; prefix inc;
import ietf-netconf-acm { prefix nacm; } import ietf-netconf-acm {
import ietf-yang-push { prefix nacm;
prefix yp; description
description "This module does not require NACM to be implemented, as
"This module requires ietf-yang-push to be implemented."; only a NACM typedef is used";
} }
import ietf-yang-library {
prefix yanglib;
description "This module requires ietf-yang-library to
be implemented. Revision 2019-01-04 or a
revision derived from it is required.";
}
organization import ietf-yang-push {
"IETF NETCONF (Network Configuration) Working Group"; prefix yp;
contact description
"WG Web: <https://datatracker.ietf.org/wg/netconf/> "This module requires ietf-yang-push to be implemented for the
WG List: <mailto:netconf@ietf.org> two subscription-capabilities containers.";
}
import ietf-yang-library {
prefix yanglib;
description "This module requires ietf-yang-library to
be implemented. Revision 2019-01-04 or a
revision derived from it is required.";
}
Editor: Balazs Lengyel organization
<mailto:balazs.lengyel@ericsson.com>"; "IETF NETCONF (Network Configuration) Working Group";
description contact
"This module specifies YANG-Push related publisher "WG Web: <https://datatracker.ietf.org/wg/netconf/>
capabilities. WG List: <mailto:netconf@ietf.org>
The module contains Editor: Balazs Lengyel
- capabilities related to the throughput of notification data the <mailto:balazs.lengyel@ericsson.com>";
publisher can support. (Note that for a specific subscription description
the publisher MAY still allow only longer periods or smaller "This module specifies YANG-Push related publisher
updates depending on e.g. actual load conditions.) capabilities.
- specification of which data nodes support on-change or periodic
notifications.
Capability values can be specified on publisher level, datastore The module contains
level or on specific data nodes (and their contained sub-tree) of - capabilities related to the throughput of notification data the
a specific datastore. publisher can support. (Note that for a specific subscription
If a capability is specified on multiple levels, the the publisher MAY still allow only longer periods or smaller
specification on a more specific level overrides more updates depending on e.g. actual load conditions.)
generic capability specifications; thus - specification of which data nodes support on-change or periodic
- a publisher level specification is overridden by any other notifications.
specification
- a datastore level specification (with a node-selector '/') is
overridden by a specification with a more specific node-selector.
- a specification for a specific datastore and node-selector
is overridden by a specification for the same datastore with
a node-slector that describes more levels of containing lists
and containers.
If, different data nodes covered by a single subscription Capability values can be specified on system/publisher level,
have different values for a specific capability, then using values datastore level or on specific data nodes (and their contained
that are only acceptable for some of these data nodes, but not for sub-tree) of a specific datastore.
others, may result in the rejection of the subscription. If a capability is specified on multiple levels, the
specification on a more specific level overrides more
generic capability specifications; thus
- a system/publisher level specification is overridden by any
other specification
- a datastore level specification (with a node-selector '/') is
overridden by a specification with a more specific node-selector.
- a specification for a specific datastore and node-selector
is overridden by a specification for the same datastore with
a node-slector that describes more levels of containing lists
and containers.
To find a capability value for a specific node in a If, different data nodes covered by a single subscription
specific datastore the user SHALL have different values for a specific capability, then using values
1) consider the publisher level capabilities under the that are only acceptable for some of these data nodes, but not for
publisher-subscription-capabilities container if the others, may result in the rejection of the subscription.
capability value is specified.
2) search for a datastore-capabilities list entry for
the specific datastore.
3) within that datastore entry search for a
per-node-capabilities entry that specifies the specific
capability and that has the node-selector selecting the
specific data node and that specifies the most levels of
containing containers and lists.
4) If no entries are found in the previous steps the
publisher is not capable of providing a value because
it is unknown, the capability is changing for some reason,
there is no specified limit etc. In this case the
publisher's behavior is unspecified.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', To find a capability value for a specific node in a
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', specific datastore the user SHALL
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 1) consider the system/publisher level capabilities under the
are to be interpreted as described in BCP 14 (RFC 2119) system-capabilities container if the
(RFC 8174) when, and only when, they appear in all capability value is specified.
capitals, as shown here. 2) search for a datastore-capabilities list entry for
the specific datastore.
3) within that datastore entry search for a
per-node-capabilities entry that specifies the specific
capability and that has the node-selector selecting the
specific data node and that specifies the most levels of
containing containers and lists.
4) If no entries are found in the previous steps the
publisher is not capable of providing a value because
it is unknown, the capability is changing for some reason,
there is no specified limit etc. In this case the
publisher's behavior is unspecified.
Copyright (c) 2019 IETF Trust and the persons identified as The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
authors of the code. All rights reserved. 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all
capitals, as shown here.
Redistribution and use in source and binary forms, with or Copyright (c) 2019 IETF Trust and the persons identified as
without modification, is permitted pursuant to, and subject authors of the code. All rights reserved.
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see Redistribution and use in source and binary forms, with or
the RFC itself for full legal notices."; without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
revision 2019-11-05 { This version of this YANG module is part of RFC XXXX; see
description the RFC itself for full legal notices.";
"Initial version";
reference
"RFC XXX: YANG-Push Notification Capabilities";
}
grouping subscription-capabilities {
description "Capabilities related to Yang-Push notifications";
typedef notification-support { revision 2019-12-09 {
type enumeration { description
enum no-notifications-supported { "Initial version";
description "The publisher is not capable of sending any reference
notifications for the relevant scope and subscription "RFC XXX: YANG-Push Notification Capabilities";
type." ; }
}
enum notifications-for-config-changes-supported {
description "The publisher is capable of sending
notifications for config=true nodes, but not
for config=false nodes for the relevant scope
and subscription type." ;
}
enum notifications-for-state-changes-supported {
description "The publisher is capable of sending
notifications for config=false nodes, but not
for config=true nodes for the relevant scope
and subscription type." ;
}
enum notifications-for-all-changes-supported {
description "The publisher is capable of sending
notifications for both config=false and config=true
nodes for the relevant scope and subscription type." ;
}
}
description "Type for defining whether on-change or
periodic notifications are supported for no, only config=true,
only config=false or all data nodes.";
}
choice update-period { grouping subscription-capabilities {
description "Supported update period value or values for periodic description "Capabilities related to Yang-Push notifications";
subscriptions."; container subscription-capabilities {
leaf minimum-update-period { description "Capabilities related to Yang-Push notifications";
type uint32;
units "centiseconds";
description "Indicates the minimal update period that is
supported for a periodic subscription.
A periodic subscription to the selected data nodes must
specify a value that is at least as large or greater than
this";
reference
"The period leaf in RFC 8641 ietf-yang-push YANG module";
}
leaf-list supported-update-period {
type uint32;
units "centiseconds";
description "Supported update period values for a
periodic subscription.
A periodic subscription to the selected data nodes must
specify one of the values in the list; other values
are not supported.";
reference
"The period leaf in RFC 8641 ietf-yang-push YANG module";
}
}
leaf max-objects-per-update { typedef notification-support {
type uint32 { type enumeration {
range "1..max"; enum no-notifications-supported {
} description "The publisher is not capable of sending any
description notifications for the relevant scope and subscription
"Maximum number of objects that can be sent type." ;
in an update for the selected data nodes."; }
} enum notifications-for-config-changes-supported {
description "The publisher is capable of sending
notifications for config=true nodes, but not
for config=false nodes for the relevant scope
and subscription type." ;
}
enum notifications-for-state-changes-supported {
description "The publisher is capable of sending
notifications for config=false nodes, but not
for config=true nodes for the relevant scope
and subscription type." ;
}
enum notifications-for-all-changes-supported {
description "The publisher is capable of sending
notifications for both config=false and config=true
nodes for the relevant scope and subscription type." ;
leaf minimum-dampening-period { }
if-feature yp:on-change; }
type uint32; description "Type for defining whether on-change or
units "centiseconds"; periodic notifications are supported for no, only config=true,
description only config=false or all data nodes.";
"The minimum dampening period supported for on-change }
subscriptions for the selected data nodes.";
}
leaf on-change-supported { choice update-period {
if-feature yp:on-change; description "Supported update period value or values for
type notification-support; periodic subscriptions.";
description leaf minimum-update-period {
"Specifies whether the publisher is capable of type uint32;
sending on-change notifications for the selected units "centiseconds";
data store or data nodes and the subtree below them."; description "Indicates the minimal update period that is
} supported for a periodic subscription.
A periodic subscription to the selected data nodes must
specify a value that is at least as large or greater than
this";
reference
"The period leaf in RFC 8641 ietf-yang-push YANG module";
}
leaf periodic-notifications-supported { leaf-list supported-update-period {
type notification-support; type uint32;
description units "centiseconds";
"Specifies whether the publisher is capable of description "Supported update period values for a
sending periodic notifications for the selected periodic subscription.
data store or data nodes and the subtree below them."; A periodic subscription to the selected data nodes must
} specify one of the values in the list; other values
leaf-list supported-excluded-change-type { are not supported.";
if-feature yp:on-change; reference
type union { "The period leaf in RFC 8641 ietf-yang-push YANG module";
type enumeration { }
enum none { }
description "None of the change types can be excluded.";
}
enum all {
description
"Any combination of change types can be excluded.";
}
}
type yp:change-type;
}
description "The change types that can be excluded in
YANG-Push subscriptions.";
}
}
container publisher-subscription-capabilities { leaf max-objects-per-update {
config false; type uint32 {
description "YANG-Push related publisher capabilities. range "1..max";
Capability values specified here at the publisher level }
are valid for all datastores and description
are used when the capability is not specified on the "Maximum number of objects that can be sent
datastore level or for specific data nodes. "; in an update for the selected data nodes.";
}
uses subscription-capabilities { leaf minimum-dampening-period {
refine supported-excluded-change-type { if-feature yp:on-change;
default none; type uint32;
} units "centiseconds";
} description
"The minimum dampening period supported for on-change
subscriptions for the selected data nodes.";
}
list datastore-capabilities { leaf on-change-supported {
key datastore; if-feature yp:on-change;
type notification-support;
description
"Specifies whether the publisher is capable of
sending on-change notifications for the selected
data store or data nodes and the subtree below them.";
}
description "Capabilities values per datastore. leaf periodic-notifications-supported {
For non-NMDA servers/publishers the config=false data is type notification-support;
considered as if it was part of the running datastore."; description
"Specifies whether the publisher is capable of
sending periodic notifications for the selected
data store or data nodes and the subtree below them.";
}
leaf datastore { leaf-list supported-excluded-change-type {
type leafref { if-feature yp:on-change;
path /yanglib:yang-library/yanglib:datastore/yanglib:name; type union {
} type enumeration {
description "The datastore for which capabilities are defined. enum none {
Only individual datastores can be specified description "None of the change types can be excluded.";
e.g. ds:conventional is not allowed."; }
} enum all {
list per-node-capabilities { description
key "node-selector"; "Any combination of change types can be excluded.";
description }
"Each list entry specifies notification capabilities }
for the selected data nodes. The same capabilities apply for type yp:change-type;
the data nodes in the subtree below them unless another list }
entry with a more specific node selector is present."; description "The change types that can be excluded in
YANG-Push subscriptions.";
}
}
}
leaf node-selector { container system-capabilities {
type nacm:node-instance-identifier; config false;
description description "YANG-Push related publisher capabilities.
"Selects the data nodes for which capabilities are Capability values specified here at the publisher level
specified. The special value '/' denotes all data nodes are valid for all datastores and
in the datastore. are used when the capability is not specified on the
The system SHOULD order list entries according to datastore level or for specific data nodes. ";
the tree structure of the data models to make
reading/parsing the data model more simple.";
}
uses subscription-capabilities; uses subscription-capabilities {
} refine subscription-capabilities/supported-excluded-change-type {
} default none;
} }
} }
list datastore-capabilities {
key datastore;
description "Capabilities values per datastore.
For non-NMDA servers/publishers the config=false data is
considered as if it was part of the running datastore.";
leaf datastore {
type leafref {
path /yanglib:yang-library/yanglib:datastore/yanglib:name;
}
description "The datastore for which capabilities are defined.
Only individual datastores can be specified
e.g. ds:conventional is not allowed.";
}
list per-node-capabilities {
key "node-selector";
description
"Each list entry specifies notification capabilities
for the selected data nodes. The same capabilities apply for
the data nodes in the subtree below them unless another list
entry with a more specific node selector is present.";
leaf node-selector {
type nacm:node-instance-identifier;
description
"Selects the data nodes for which capabilities are
specified. The special value '/' denotes all data nodes
in the datastore.
The system SHOULD order list entries according to
the tree structure of the data models to make
reading/parsing the data model more simple.";
}
uses subscription-capabilities;
}
}
}
}
<CODE ENDS> <CODE ENDS>
3.3. Other System Capabilities
Other YANG modules defined in separate documents MAY augment this
module to define other capabilities not related to YANG-Push. Every
set of such capabilities SHOULD be wrapped in a container similar to
the subscription-capabilities container in this YANG module to
cleanly separate different groups of capabilities. The "other-
capabilities" container SHOULD be augmented as a sibling to the
subscription-capabilities container.
4. Security Considerations 4. Security Considerations
The YANG module specified in this document defines a schema for data The YANG module specified in this document defines a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC8446]. [RFC8446].
skipping to change at page 13, line 38 skipping to change at page 14, line 22
namespace: urn:ietf:params:xml:ns:yang:ietf-notification-capabilities namespace: urn:ietf:params:xml:ns:yang:ietf-notification-capabilities
prefix: inc prefix: inc
reference: RFC XXXX reference: RFC XXXX
6. References 6. References
6.1. Normative References 6.1. Normative References
[I-D.ietf-netmod-yang-instance-file-format] [I-D.ietf-netmod-yang-instance-file-format]
Lengyel, B. and B. Claise, "YANG Instance Data File Lengyel, B. and B. Claise, "YANG Instance Data File
Format", draft-ietf-netmod-yang-instance-file-format-04 Format", draft-ietf-netmod-yang-instance-file-format-06
(work in progress), August 2019. (work in progress), December 2019.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
skipping to change at page 15, line 13 skipping to change at page 15, line 48
be reported on-change from running, nothing from candidate and all be reported on-change from running, nothing from candidate and all
config=false data from operational. Periodic subscriptions are config=false data from operational. Periodic subscriptions are
supported for running and operational, but not for candidate. supported for running and operational, but not for candidate.
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<instance-data-set xmlns= <instance-data-set xmlns=
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data">
<name>acme-switch-notification-capabilities</name> <name>acme-switch-notification-capabilities</name>
<yid-version>1</yid-version> <yid-version>1</yid-version>
<content-schema> <content-schema>
<module>ietf-notification-capabilities@2019-10-22.yang</module> <module>ietf-notification-capabilities@2019-12-04</module>
</content-schema> </content-schema>
<!-- revision date, contact, etc. --> <!-- revision date, contact, etc. -->
<description>Notification capabilities of acme-switch. <description>Notification capabilities of acme-switch.
Acme-switch implements the running, candidate and operational Acme-switch implements the running, candidate and operational
datastores. Every change can be reported on-change from running, datastores. Every change can be reported on-change from running,
nothing from candidate and all config=false data from operational. nothing from candidate and all config=false data from operational.
Periodic subscriptions are supported for running and Periodic subscriptions are supported for running and
operational, but not for candidate. operational, but not for candidate.
</description> </description>
<content-data> <content-data>
<publisher-subscription-capabilities <system-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" xmlns="urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
<minimum-update-period>500</minimum-update-period> <subscription-capabilities>
<max-objects-per-update>2000</max-objects-per-update> <minimum-update-period>500</minimum-update-period>
<minimum-dampening-period>100</minimum-dampening-period> <max-objects-per-update>2000</max-objects-per-update>
<periodic-notifications-supported> <minimum-dampening-period>100</minimum-dampening-period>
notifications-for-all-changes-supported <periodic-notifications-supported>
</periodic-notifications-supported> notifications-for-all-changes-supported
</periodic-notifications-supported>
</subscription-capabilities>
<datastore-capabilities> <datastore-capabilities>
<datastore>ds:operational</datastore> <datastore>ds:operational</datastore>
<per-node-capabilities> <per-node-capabilities>
<node-selector>/</node-selector> <node-selector>/</node-selector>
<on-change-supported> <subscription-capabilities>
notifications-for-state-changes-supported <on-change-supported>
</on-change-supported> notifications-for-state-changes-supported
</on-change-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
<datastore-capabilities> <datastore-capabilities>
<datastore>ds:candidate</datastore> <datastore>ds:candidate</datastore>
<per-node-capabilities> <per-node-capabilities>
<node-selector>/</node-selector> <node-selector>/</node-selector>
<on-change-supported>no-notifications-supported <subscription-capabilities>
<on-change-supported>no-notifications-supported
</on-change-supported> </on-change-supported>
<periodic-notifications-supported>no-notifications-supported <periodic-notifications-supported>
no-notifications-supported
</periodic-notifications-supported> </periodic-notifications-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
<datastore-capabilities> <datastore-capabilities>
<datastore>ds:running</datastore> <datastore>ds:running</datastore>
<per-node-capabilities> <per-node-capabilities>
<node-selector>/</node-selector> <node-selector>/</node-selector>
<on-change-supported>notifications-for-all-changes-supported <subscription-capabilities>
<on-change-supported>
notifications-for-all-changes-supported
</on-change-supported> </on-change-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
</publisher-subscription-capabilities> </system-capabilities>
</content-data> </content-data>
</instance-data-set> </instance-data-set>
Figure 1: Notification Capabilities with datastore level settings Figure 1: Notification Capabilities with datastore level settings
The following is the instance-data describing the notification The following is the instance-data describing 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 the running, and operational datastores. Every change can be
reported on-change from running, but only config=true nodes and some reported on-change from running, but only config=true nodes and some
config=false data from operational. Interface statistics are not config=false data from operational. Interface statistics are not
reported on-change only 2 important counters. Datastore subscription reported on-change only 2 important counters. Datastore subscription
capabilities are not reported on-change as they never change on the capabilities are not reported on-change as they never change on the
acme-router during run-time. acme-router during run-time.
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<instance-data-set xmlns= <instance-data-set xmlns=
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data">
<name>acme-router-notification-capabilities</name> <name>acme-router-notification-capabilities</name>
<yid-version>1</yid-version> <yid-version>1</yid-version>
<content-schema> <content-schema>
<module>ietf-notification-capabilities@2019-10-22.yang</module> <module>ietf-notification-capabilities@2019-12-04</module>
<content-schema> </content-schema>
<!-- revision date, contact, etc. --> <!-- revision date, contact, etc. -->
<description>Defines the notification capabilities of an acme-router. <description>Defines the notification capabilities of an acme-router.
The router only has running, and operational datastores. The router only has running, and operational datastores.
Every change can be reported on-change from running, but Every change can be reported on-change from running, but
only config=true nodes and some config=false data from operational. only config=true nodes and some config=false data from operational.
Statistics are not reported on-change only 2 important counters, Statistics are not reported on-change only 2 important counters,
for these a smaller dampening period is possible. for these a smaller dampening period is possible.
</description> </description>
<content-data> <content-data>
<publisher-subscription-capabilities <system-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" xmlns="urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
<minimum-update-period>500</minimum-update-period> <subscription-capabilities>
<max-objects-per-update>2000</max-objects-per-update> <minimum-update-period>500</minimum-update-period>
<minimum-dampening-period>100</minimum-dampening-period> <max-objects-per-update>2000</max-objects-per-update>
<periodic-notifications-supported> <minimum-dampening-period>100</minimum-dampening-period>
notifications-for-all-changes-supported <periodic-notifications-supported>
notifications-for-all-changes-supported
</periodic-notifications-supported>
<on-change-supported>
notifications-for-all-changes-supported
</periodic-notifications-supported> </on-change-supported>
<on-change-supported> <supported-excluded-change-type>
notifications-for-all-changes-supported all
</on-change-supported> </supported-excluded-change-type>
<supported-excluded-change-type> </subscription-capabilities>
all
</supported-excluded-change-type>
<datastore-capabilities> <datastore-capabilities>
<datastore>ds:operational</datastore> <datastore>ds:operational</datastore>
<per-node-capabilities> <per-node-capabilities>
<node-selector> <node-selector>
/if:interfaces/if:interface/if:statistics</node-selector> /if:interfaces/if:interface/if:statistics</node-selector>
<on-change-supported> <subscription-capabilities>
no-notifications-supported <on-change-supported>
</on-change-supported> no-notifications-supported
</on-change-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
<per-node-capabilities> <per-node-capabilities>
<node-selector> <node-selector>
/if:interfaces/if:interface/if:statistics/if:in-octets /if:interfaces/if:interface/if:statistics/if:in-octets
</node-selector> </node-selector>
<minimum-dampening-period>10</minimum-dampening-period> <subscription-capabilities>
<on-change-supported> <minimum-dampening-period>10</minimum-dampening-period>
notifications-for-all-changes-supported <on-change-supported>
</on-change-supported> notifications-for-all-changes-supported
</on-change-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
<per-node-capabilities> <per-node-capabilities>
<node-selector> <node-selector>
/if:interfaces/if:interface/if:statistics/if:out-octets /if:interfaces/if:interface/if:statistics/if:out-octets
</node-selector> </node-selector>
<minimum-dampening-period>10</minimum-dampening-period> <subscription-capabilities>
<on-change-supported> <minimum-dampening-period>10</minimum-dampening-period>
notifications-for-all-changes-supported <on-change-supported>
</on-change-supported> notifications-for-all-changes-supported
</on-change-supported>
</subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
</publisher-subscription-capabilities> </system-capabilities>
</content-data> </content-data>
</instance-data-set> </instance-data-set>
Figure 2: Notification Capabilities with data node specific settings Figure 2: Notification Capabilities with data node specific settings
Appendix B. Changes between revisions Appendix B. Changes between revisions
v07 - v08
o Prepared the YANG model to include other non-YANG-Push related
capabilities.
o Renamed the top level container to system-capabilities
o Added a container subscription-capabilities to the grouping
subscription-capabilities to contain all subscription related
capabilities
o Updated examples according to draft-ietf-netmod-yang-instance-
file-format-06.
v06 - v07 v06 - v07
o Updated examples according to draft-ietf-netmod-yang-instance- o Updated examples according to draft-ietf-netmod-yang-instance-
file-format-05. file-format-05.
v05 - v06 v05 - v06
o Providing the capability data is only a "SHOULD" recommendation. o Providing the capability data is only a "SHOULD" recommendation.
Some reviewers wanted MUST some wanted much less. Some reviewers wanted MUST some wanted much less.
 End of changes. 63 change blocks. 
334 lines changed or deleted 404 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/