draft-ietf-netconf-notification-capabilities-09.txt   draft-ietf-netconf-notification-capabilities-10.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: July 10, 2020 Futurewei Expires: July 18, 2020 Futurewei
B. Claise B. Claise
Cisco Systems, Inc. Cisco Systems, Inc.
January 7, 2020 January 15, 2020
Generic YANG-related System Capabilities and YANG-Push Notification Generic YANG-related System Capabilities and YANG-Push Notification
Capabilities Capabilities
draft-ietf-netconf-notification-capabilities-09 draft-ietf-netconf-notification-capabilities-10
Abstract Abstract
This document proposes two YANG modules. The module ietf-system- This document proposes two YANG modules. The module ietf-system-
capabilities provides a structure that can be used to specify any capabilities provides a structure that can be used to specify any
YANG related system capability. YANG related system capability.
The module ietf-notification-capabilities allows a publisher to The module ietf-notification-capabilities 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
skipping to change at page 1, line 42 skipping to change at page 1, line 42
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 July 10, 2020. This Internet-Draft will expire on July 18, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 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 27 skipping to change at page 2, line 27
1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. YANG-Push Notification Capabilities . . . . . . . . . . . 3 2.1. YANG-Push Notification Capabilities . . . . . . . . . . . 3
3. Providing System Capability Information . . . . . . . . . . . 5 3. Providing System Capability Information . . . . . . . . . . . 5
4. System Capabilities Model . . . . . . . . . . . . . . . . . . 6 4. System Capabilities Model . . . . . . . . . . . . . . . . . . 6
4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 6 4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 6
4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7 4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7
5. Notification Capabilities Model . . . . . . . . . . . . . . . 10 5. Notification Capabilities Model . . . . . . . . . . . . . . . 10
5.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 10 5.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 10
5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 11 5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 11
6. Security Considerations . . . . . . . . . . . . . . . . . . . 16 6. Security Considerations . . . . . . . . . . . . . . . . . . . 15
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
7.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 16 7.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 15
7.2. The YANG Module Names Registry . . . . . . . . . . . . . 17 7.2. The YANG Module Names Registry . . . . . . . . . . . . . 16
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.1. Normative References . . . . . . . . . . . . . . . . . . 17 8.1. Normative References . . . . . . . . . . . . . . . . . . 16
8.2. Informative References . . . . . . . . . . . . . . . . . 18 8.2. Informative References . . . . . . . . . . . . . . . . . 17
Appendix A. Instance data examples . . . . . . . . . . . . . . . 18 Appendix A. Instance data examples . . . . . . . . . . . . . . . 17
Appendix B. Changes between revisions . . . . . . . . . . . . . 22 Appendix B. Changes between revisions . . . . . . . . . . . . . 21
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23
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 6, line 25 skipping to change at page 6, line 25
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
Datastores" (YANG-Push) augmenting ietf-system-capabilities. Datastores" (YANG-Push) augmenting ietf-system-capabilities.
4. System Capabilities Model 4. System Capabilities Model
The module ietf-system-capabilities is defined to provide a structure The module ietf-system-capabilities is defined to provide a structure
that can be used to specify any YANG related system capability. that can be used to specify any YANG related system capability.
Capability values can be specified on system/publisher level, Capability values can be specified on system/publisher level,
datastore level or for specific data nodes (and their contained sub- datastore level (by selecting all nodes in the datastore) or for
tree) of a specific datastore. Capability values on a smaller, more specific data nodes of a specific datastore (and their contained sub-
specific part of the system's data always override more generic trees). Capability values specified for a specific datastore or
values. node-set override values specified on the system/publisher level.
This module itself does not contain any capabilities. It SHOULD be This module itself does not contain any capabilities. It SHOULD be
used by other modules to augment-in specific capability information. used by other modules to augment-in specific capability information.
Every set of such capabilities SHOULD be wrapped in a container under Every set of such capabilities SHOULD be wrapped in a container under
the augment statement to cleanly separate different groups of the augment statement to cleanly separate different groups of
capabilities. These "wrapper containers" SHALL be augmented in at capabilities. These "wrapper containers" SHALL be augmented in at
/sysc:system-capabilities and /sysc:system-capabilities/ /sysc:system-capabilities and /sysc:system-capabilities/
sysc:datastore-capabilities/sysc:per-node-capabilities. sysc:datastore-capabilities/sysc:per-node-capabilities.
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 config=false data is considered as if it non-NMDA servers/publishers config=false data is considered as if it
was part of the running datastore. was 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* [node-selector] +--ro per-node-capabilities* []
+--ro node-selector nacm:node-instance-identifier +--ro (node-selection)?
+--:(node-selector)
+--ro node-selector? nacm:node-instance-identifier
4.2. YANG Module 4.2. YANG Module
<CODE BEGINS> file "ietf-system-capabilities@2020-01-02.yang" <CODE BEGINS> file "ietf-system-capabilities@2020-01-14.yang"
module ietf-system-capabilities { module ietf-system-capabilities {
yang-version 1.1; yang-version 1.1;
namespace namespace
"urn:ietf:params:xml:ns:yang:ietf-system-capabilities"; "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;
description
"The module ietf-netconf-acm is OPTIONAL to implement.";
}
import ietf-yang-library { import ietf-yang-library {
prefix yanglib; prefix yanglib;
description "The module ietf-yang-library is REQUIRED to description "Revision 2019-01-04 or a
be implemented. Revision 2019-01-04 or a revision derived from it is REQUIRED.";
revision derived from it is REQUIRED."; }
}
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 module intended to contain system "This module specifies a module intended to contain system
capabilities. System capabilities may include capabilities of a capabilities. System capabilities may include capabilities of a
NETCONF or RESTCONF server or a notification publisher. NETCONF or RESTCONF server or a 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 should be augmented in. capabilities should be augmented in.
Capability values can be specified on system level, Capability values can be specified on system level,
datastore level or for specific data nodes (and their contained datastore level (by selecting all nodes in the datastore) or
sub-tree) of a specific datastore. for specific data nodes of a specific datastore (and their
If a capability is specified on multiple levels, the contained sub-trees).
specification on a more specific level overrides more
generic capability specifications; thus
- a system 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-selector that describes more levels of containing lists
and containers.
It is not allowed to have multiple node selectors which
- are defined for the same datastore AND
- have the same number of containment levels AND
- select an overlapping set of nodes.
To find a capability value for a specific data node in a Capability values specified for a specific datastore or
specific datastore the user SHALL node-set override values specified on the system/publisher level.
1) consider the system level capabilities under the
system-capabilities container if the
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
system's behavior is unspecified.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', To find a capability value for a specific data node in a
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', specific datastore the user SHALL
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 1) search for a datastore-capabilities list entry for
are to be interpreted as described in BCP 14 (RFC 2119) the specific datastore.
(RFC 8174) when, and only when, they appear in all 2) If the datastore entry is found within that entry process all
capitals, as shown here. per-node-capabilities entries in the order they appear in the list.
The first entry that specifies the specific capability and has a
node-selector selecting the specific data node defines the
capability value.
3) If the capability value is not found above and the specific
capability is specified under the system-capabilities container
(outside the datastore-capabilities list) this value shall be used.
4) If no values are found in the previous steps the
system/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
system's behavior is unspecified.
Copyright (c) 2020 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) 2020 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 Redistribution and use in source and binary forms, with or
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself without modification, is permitted pursuant to, and subject
for full legal notices."; 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 2020-01-02 { This version of this YANG module is part of RFC XXXX
description (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
"Initial version"; for full legal notices.";
reference
"RFC XXX: YANG-Push Notification Capabilities";
}
container system-capabilities { revision 2020-01-14 {
config false; description
description "System capabilities. "Initial version";
Capability values specified here at the system level reference
are valid for all datastores and "RFC XXX: YANG-Push Notification Capabilities";
are used when the capability is not specified on the }
datastore level or for specific data nodes."; container system-capabilities {
config false;
description "System capabilities.
Capability values specified here at the system level
are valid for all datastores and
are used when the capability is not specified on the
datastore level 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 "Capabilities values per datastore. description "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 was part of the running datastore.";
leaf datastore { leaf datastore {
type leafref { type leafref {
path /yanglib:yang-library/yanglib:datastore/yanglib:name; path /yanglib:yang-library/yanglib:datastore/yanglib:name;
} }
description "The datastore for which capabilities are defined. description "The datastore for which capabilities are defined.
Only individual datastores can be specified Only individual datastores can be specified
e.g., ds:conventional is not allowed."; e.g., ds:conventional is not allowed.";
} }
list per-node-capabilities { list per-node-capabilities {
key "node-selector"; description
description "Each list entry specifies capabilities for the selected
"Each list entry specifies capabilities data nodes. The same capabilities apply for the data nodes
for the selected data nodes. The same capabilities apply for in the subtree below the selected nodes.
the data nodes in the subtree below them unless another list The system SHALL order the entries according to their
entry with a more specific node selector specifying the same precedence. The order of the entries MUST NOT change unless
capability is present."; the underlying capabilities also change.";
leaf node-selector { choice node-selection {
type nacm:node-instance-identifier; description
description "A method to select all or some nodes within a datastore.";
"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 more simple.";
}
// augmentation point for datastore or data node level leaf node-selector {
// capabilities 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.";
}
}
// augmentation point for datastore or data node level
// capabilities
}
}
}
}
<CODE ENDS> <CODE ENDS>
5. Notification Capabilities Model 5. Notification Capabilities Model
The YANG module ietf-notification-capabilities is defined to provide The YANG module ietf-notification-capabilities is defined to provide
YANG-Push related capability information. YANG-Push related capability information.
5.1. Tree Diagram 5.1. Tree Diagram
skipping to change at page 11, line 13 skipping to change at page 10, line 31
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 (update-period)? +--ro (update-period)?
| +--:(minimum-update-period) | +--:(minimum-update-period)
| | +--ro minimum-update-period? uint32 | | +--ro minimum-update-period? uint32
| +--:(supported-update-period) | +--:(supported-update-period)
| +--ro supported-update-period* uint32 | +--ro supported-update-period* uint32
+--ro max-objects-per-update? uint32 +--ro max-nodes-per-update? uint32
+--ro minimum-dampening-period? uint32 {yp:on-change}? +--ro minimum-dampening-period? uint32 {yp:on-change}?
+--ro on-change-supported? notification-support +--ro on-change-supported? notification-support
| {yp:on-change}? | {yp:on-change}?
+--ro periodic-notifications-supported? notification-support +--ro periodic-notifications-supported? notification-support
+--ro supported-excluded-change-type* union {yp:on-change}? +--ro supported-excluded-change-type* union {yp:on-change}?
augment /sysc:system-capabilities/sysc:datastore-capabilities/ + augment /sysc:system-capabilities/sysc:datastore-capabilities/ +
| sysc:per-node-capabilities: | sysc:per-node-capabilities:
+--ro subscription-capabilities +--ro subscription-capabilities
+--ro (update-period)? +--ro (update-period)?
| +--:(minimum-update-period) | +--:(minimum-update-period)
| | +--ro minimum-update-period? uint32 | | +--ro minimum-update-period? uint32
| +--:(supported-update-period) | +--:(supported-update-period)
| +--ro supported-update-period* uint32 | +--ro supported-update-period* uint32
+--ro max-objects-per-update? uint32 +--ro max-nodes-per-update? uint32
+--ro minimum-dampening-period? uint32 {yp:on-change}? +--ro minimum-dampening-period? uint32 {yp:on-change}?
+--ro on-change-supported? notification-support +--ro on-change-supported? notification-support
| {yp:on-change}? | {yp:on-change}?
+--ro periodic-notifications-supported? notification-support +--ro periodic-notifications-supported? notification-support
+--ro supported-excluded-change-type* union {yp:on-change}? +--ro supported-excluded-change-type* union {yp:on-change}?
5.2. YANG Module 5.2. YANG Module
<CODE BEGINS> file "ietf-notification-capabilities@2020-01-02.yang" <CODE BEGINS> file "ietf-notification-capabilities@2020-01-14.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-yang-push { import ietf-yang-push { prefix yp; }
prefix yp; import ietf-system-capabilities { prefix sysc; }
description
"The module ietf-yang-push is REQUIRED to be
implemented.";
}
import ietf-system-capabilities { organization
prefix sysc; "IETF NETCONF (Network Configuration) Working Group";
description contact
"The module ietf-system-capabilities is REQUIRED to be "WG Web: <https://datatracker.ietf.org/wg/netconf/>
implemented."; WG List: <mailto:netconf@ietf.org>
}
organization Editor: Balazs Lengyel
"IETF NETCONF (Network Configuration) Working Group"; <mailto:balazs.lengyel@ericsson.com>";
contact description
"WG Web: <https://datatracker.ietf.org/wg/netconf/> "This module specifies YANG-Push related publisher capabilities.
WG List: <mailto:netconf@ietf.org>
Editor: Balazs Lengyel The module contains
<mailto:balazs.lengyel@ericsson.com>"; - specification of which data nodes support on-change or periodic
description notifications.
"This module specifies YANG-Push related publisher capabilities. - capabilities related to the throughput of notification data the
publisher can support. (Note that for a specific subscription
the publisher MAY still allow only longer periods or smaller
updates depending on e.g., actual load conditions.)
The module contains Capability values can be specified on system/publisher level,
- specification of which data nodes support on-change or periodic datastore level or for specific data nodes of a specific datastore
notifications. (and their contained sub-trees), as defined in the
- capabilities related to the throughput of notification data the ietf-system-capabilities module.
publisher can support. (Note that for a specific subscription
the publisher MAY still allow only longer periods or smaller
updates depending on e.g., actual load conditions.)
Capability values can be specified on system/publisher level, If, different data nodes covered by a single subscription
datastore level or for specific data nodes (and their contained have different values for a specific capability, then using values
sub-tree) of a specific datastore, as defined in the that are only acceptable for some of these data nodes, but not for
ietf-system-capabilities module. others, may result in the rejection of the subscription.
If, different data nodes covered by a single subscription The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
have different values for a specific capability, then using values 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
that are only acceptable for some of these data nodes, but not for 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
others, may result in the rejection of the subscription. 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.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', Copyright (c) 2020 IETF Trust and the persons identified as
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', authors of the code. All rights reserved.
'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.
Copyright (c) 2020 IETF Trust and the persons identified as Redistribution and use in source and binary forms, with or
authors of the code. All rights reserved. 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).
Redistribution and use in source and binary forms, with or This version of this YANG module is part of RFC XXXX
without modification, is permitted pursuant to, and subject (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
to the license terms contained in, the Simplified BSD License for full legal notices.";
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 revision 2020-01-14 {
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself description
for full legal notices."; "Initial version";
reference
"RFC XXX: YANG-Push Notification Capabilities";
}
revision 2020-01-02 { grouping subscription-capabilities {
description description "Capabilities related to YANG-Push subscriptions
"Initial version"; and notifications";
reference
"RFC XXX: YANG-Push Notification Capabilities";
}
grouping subscription-capabilities { container subscription-capabilities {
description "Capabilities related to YANG-Push subscriptions description "Capabilities related to YANG-Push subscriptions
and notifications"; and notifications";
container subscription-capabilities { typedef notification-support {
description "Capabilities related to YANG-Push subscriptions type bits {
and notifications"; bit config-changes {
description "The publisher is capable of sending
notifications for config=true nodes for the relevant
scope and subscription type." ;
}
bit state-changes {
description "The publisher is capable of sending
notifications for config=false nodes for the relevant
scope and subscription type." ;
}
}
description "Type for defining whether on-change or
periodic notifications are supported for none, only
config=true, only config=false or all data nodes.";
}
typedef notification-support { choice update-period {
type enumeration { description "Supported update period value or values for
enum no-notifications-supported { periodic subscriptions.";
description "The publisher is not capable of sending any leaf minimum-update-period {
notifications for the relevant scope and subscription type uint32;
type." ; units "centiseconds";
} description "Indicates the minimal update period that is
enum notifications-for-config-changes-supported { supported for a periodic subscription.
description "The publisher is capable of sending A subscription request to the selected data
notifications for config=true nodes, but not nodes with a smaller period than what this leaf specifies
for config=false nodes for the relevant scope will result in a 'period-unsupported' error.";
and subscription type." ; reference
} "The period leaf in RFC 8641 ietf-yang-push YANG module";
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 { leaf-list supported-update-period {
description "Supported update period value or values for type uint32;
periodic subscriptions."; units "centiseconds";
leaf minimum-update-period { description "Supported update period values for a
type uint32; periodic subscription.
units "centiseconds"; A subscription request to the selected data nodes with a
description "Indicates the minimal update period that is period not included in the leaf-list will result in a
supported for a periodic subscription. 'period-unsupported' error.";
A periodic subscription to the selected data nodes must reference
specify a value that is at least as large or greater than "The period leaf in RFC 8641 ietf-yang-push YANG module";
this"; }
reference }
"The period leaf in RFC 8641 ietf-yang-push YANG module";
}
leaf-list supported-update-period { leaf max-nodes-per-update {
type uint32; type uint32 {
units "centiseconds"; range "1..max";
description "Supported update period values for a }
periodic subscription. description
A periodic subscription to the selected data nodes must "Maximum number of data nodes that can be sent
specify one of the values in the list; other values in an update. The publisher MAY support more data nodes,
are not supported."; but SHOULD support at least this number.";
reference }
"The period leaf in RFC 8641 ietf-yang-push YANG module";
}
}
leaf max-objects-per-update { leaf minimum-dampening-period {
type uint32 { if-feature yp:on-change;
range "1..max"; type uint32;
} units "centiseconds";
description description
"Maximum number of objects that can be sent "The minimum dampening period supported for on-change
in an update for the selected data nodes."; subscriptions for the selected data nodes.";
} }
leaf minimum-dampening-period { leaf on-change-supported {
if-feature yp:on-change; if-feature yp:on-change;
type uint32; type notification-support;
units "centiseconds"; description
description "Specifies whether the publisher is capable of
"The minimum dampening period supported for on-change sending on-change notifications for the selected
subscriptions for the selected data nodes."; data store or data nodes and the subtree below them.";
} }
leaf on-change-supported { leaf periodic-notifications-supported {
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 periodic notifications for the selected
sending on-change notifications for the selected data store or data nodes and the subtree below them.";
data store or data nodes and the subtree below them."; }
}
leaf periodic-notifications-supported { leaf-list supported-excluded-change-type {
type notification-support; if-feature yp:on-change;
description type union {
"Specifies whether the publisher is capable of type enumeration {
sending periodic notifications for the selected enum none {
data store or data nodes and the subtree below them."; value -2 ;
} description "None of the change types can be excluded.";
}
enum all {
value -1 ;
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.";
}
}
}
leaf-list supported-excluded-change-type { augment /sysc:system-capabilities {
if-feature yp:on-change; description "Add system level capabilities";
type union { uses subscription-capabilities {
type enumeration { refine subscription-capabilities/supported-excluded-change-type {
enum none { default 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.";
}
}
}
augment /sysc:system-capabilities { augment "/sysc:system-capabilities/sysc:datastore-capabilities" +
description "Add system level capabilities"; "/sysc:per-node-capabilities" {
uses subscription-capabilities {
refine subscription-capabilities/supported-excluded-change-type { description "Add datastore and node level capabilities";
default none; uses subscription-capabilities {
} refine subscription-capabilities/supported-excluded-change-type {
} default none;
} }
augment "/sysc:system-capabilities/sysc:datastore-capabilities" + }
"/sysc:per-node-capabilities" { }
description "Add datastore and node level capabilities"; }
uses subscription-capabilities {
refine subscription-capabilities/supported-excluded-change-type {
default none;
}
}
}
}
<CODE ENDS> <CODE ENDS>
6. Security Considerations 6. Security Considerations
The YANG modules specified in this document define a schema for data The YANG modules specified in this document define a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [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
skipping to change at page 18, line 42 skipping to change at page 17, line 42
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[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>.
[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>.
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
Access Control Model", STD 91, RFC 8341,
DOI 10.17487/RFC8341, March 2018,
<https://www.rfc-editor.org/info/rfc8341>.
Appendix A. Instance data examples Appendix A. Instance data examples
The following example is instance-data describing the notification The following example is instance-data describing 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 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-system-capabilities@2020-01-02</module> <module>ietf-system-capabilities@2020-01-14</module>
<module>ietf-notification-capabilities@2020-01-02</module> <module>ietf-notification-capabilities@2020-01-14</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>
<system-capabilities <system-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities"
xmlns:inc= xmlns:inc=
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:minimum-update-period>500</inc:minimum-update-period> <inc:minimum-update-period>500</inc:minimum-update-period>
<inc:max-objects-per-update>2000</inc:max-objects-per-update> <inc:max-nodes-per-update>2000</inc:max-nodes-per-update>
<inc:minimum-dampening-period>100</inc:minimum-dampening-period> <inc:minimum-dampening-period>100</inc:minimum-dampening-period>
<inc:periodic-notifications-supported> <inc:periodic-notifications-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:periodic-notifications-supported> </inc:periodic-notifications-supported>
</inc:subscription-capabilities> </inc: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>
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:on-change-supported> <inc:on-change-supported>
notifications-for-state-changes-supported state-changes
</inc:on-change-supported> </inc:on-change-supported>
</inc:subscription-capabilities> </inc: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>
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:on-change-supported>no-notifications-supported <inc:on-change-supported/>
</inc:on-change-supported> <inc:periodic-notifications-supported/>
<inc:periodic-notifications-supported>
no-notifications-supported
</inc:periodic-notifications-supported>
</inc:subscription-capabilities> </inc: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>
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:on-change-supported> <inc:on-change-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:on-change-supported> </inc:on-change-supported>
</inc:subscription-capabilities> </inc:subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
</system-capabilities> </system-capabilities>
</content-data> </content-data>
</instance-data-set> </instance-data-set>
Figure 1: Notification Capabilities with datastore level settings Figure 1: Notification Capabilities with datastore level settings
skipping to change at page 20, line 41 skipping to change at page 19, line 43
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-system-capabilities@2020-01-02</module> <module>ietf-system-capabilities@2020-01-14</module>
<module>ietf-notification-capabilities@2020-01-02</module> <module>ietf-notification-capabilities@2020-01-14</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>
<system-capabilities <system-capabilities
xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities" xmlns="urn:ietf:params:xml:ns:yang:ietf-system-capabilities"
xmlns:inc= xmlns:inc=
"urn:ietf:params:xml:ns:yang:ietf-notification-capabilities" "urn:ietf:params:xml:ns:yang:ietf-notification-capabilities"
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:minimum-update-period>500</inc:minimum-update-period> <inc:minimum-update-period>500</inc:minimum-update-period>
<inc:max-objects-per-update>2000</inc:max-objects-per-update> <inc:max-nodes-per-update>2000</inc:max-nodes-per-update>
<inc:minimum-dampening-period>100</inc:minimum-dampening-period> <inc:minimum-dampening-period>100</inc:minimum-dampening-period>
<inc:periodic-notifications-supported> <inc:periodic-notifications-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:periodic-notifications-supported> </inc:periodic-notifications-supported>
<inc:on-change-supported> <inc:on-change-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:on-change-supported> </inc:on-change-supported>
<inc:supported-excluded-change-type> <inc:supported-excluded-change-type>
all all
</inc:supported-excluded-change-type> </inc:supported-excluded-change-type>
</inc:subscription-capabilities> </inc:subscription-capabilities>
<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>
<inc:subscription-capabilities>
<inc:on-change-supported>
no-notifications-supported
</inc:on-change-supported>
</inc:subscription-capabilities>
</per-node-capabilities>
<per-node-capabilities>
<node-selector>
/if:interfaces/if:interface/if:statistics/if:in-octets /if:interfaces/if:interface/if:statistics/if:in-octets
</node-selector> </node-selector>
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:minimum-dampening-period>10 <inc:minimum-dampening-period>10
</inc:minimum-dampening-period> </inc:minimum-dampening-period>
<inc:on-change-supported> <inc:on-change-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:on-change-supported> </inc:on-change-supported>
</inc:subscription-capabilities> </inc: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>
<inc:subscription-capabilities> <inc:subscription-capabilities>
<inc:minimum-dampening-period>10 <inc:minimum-dampening-period>10
</inc:minimum-dampening-period> </inc:minimum-dampening-period>
<inc:on-change-supported> <inc:on-change-supported>
notifications-for-all-changes-supported config-changes state-changes
</inc:on-change-supported> </inc:on-change-supported>
</inc:subscription-capabilities> </inc:subscription-capabilities>
</per-node-capabilities> </per-node-capabilities>
<per-node-capabilities>
<node-selector>
/if:interfaces/if:interface/if:statistics</node-selector>
<inc:subscription-capabilities>
<inc:on-change-supported/>
</inc:subscription-capabilities>
</per-node-capabilities>
</datastore-capabilities> </datastore-capabilities>
</system-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
v09 - v10
o Removed description text from imports about the need for
implementing the imported module.
o Changed notification-support to bits with shorter names
o Assigned enum values to supported-excluded-change-type
o Made node-selector a choice to allow for future alternative
selection methods.
o Changed precedence of per-node-capabilities entries. Precedence
is now according to the position of entries in the list.
v08 - v09 v08 - v09
o Split the YANG module into two: ietf-system-capabilities and ietf- o Split the YANG module into two: ietf-system-capabilities and ietf-
notification-capabilities. Restructured/updated the draft notification-capabilities. Restructured/updated the draft
accordingly. accordingly.
v07 - v08 v07 - v08
o Prepared the YANG model to include other non-YANG-Push related o Prepared the YANG model to include other non-YANG-Push related
capabilities. capabilities.
 End of changes. 74 change blocks. 
383 lines changed or deleted 365 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/