module yrt-ietf-yang-push { | |
yang-version 1.1; | |
namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-yang-push"; | |
prefix yp; | |
import yrt-ietf-inet-types { | |
prefix inet; | |
} | |
import yrt-ietf-yang-types { | |
prefix yang; | |
} | |
import yrt-ietf-event-notifications { | |
prefix notif-bis; | |
} | |
organization "IETF"; | |
contact | |
"WG Web: <http://tools.ietf.org/wg/netconf/> | |
WG List: <mailto:netconf@ietf.org> | |
WG Chair: Mahesh Jethanandani | |
<mailto:mjethanandani@gmail.com> | |
WG Chair: Mehmet Ersue | |
<mailto:mehmet.ersue@nokia.com> | |
Editor: Alexander Clemm | |
<mailto:alex@sympotech.com> | |
Editor: Eric Voit | |
<mailto:evoit@cisco.com> | |
Editor: Alberto Gonzalez Prieto | |
<mailto:albertgo@cisco.com> | |
Editor: Ambika Prasad Tripathy | |
<mailto:ambtripa@cisco.com> | |
Editor: Einar Nilsen-Nygaard | |
<mailto:einarnn@cisco.com> | |
Editor: Andy Bierman | |
<mailto:andy@yumaworks.com> | |
Editor: Balazs Lengyel | |
<mailto:balazs.lengyel@ericsson.com>"; | |
description | |
"This module contains conceptual YANG specifications | |
for YANG push."; | |
revision 2016-10-28 { | |
description | |
"Updates to simplify modify-subscription, add anchor-time"; | |
reference "YANG Datastore Push, draft-ietf-netconf-yang-push-04"; | |
} | |
feature on-change { | |
description | |
"This feature indicates that on-change updates are | |
supported."; | |
} | |
/* | |
* IDENTITIES | |
*/ | |
/* Additional errors for subscription operations */ | |
identity error-data-not-authorized { | |
base notif-bis:error; | |
description | |
"No read authorization for a requested data node."; | |
} | |
/* Additional types of streams */ | |
identity yang-push { | |
base notif-bis:stream; | |
description | |
"A conceptual datastream consisting of all datastore | |
updates, including operational and configuration data."; | |
} | |
identity custom-stream { | |
base notif-bis:stream; | |
description | |
"A conceptual datastream for datastore | |
updates with custom updates as defined by a user."; | |
} | |
/* Additional transport option */ | |
identity http2 { | |
base notif-bis:transport; | |
description | |
"HTTP2 notifications as a transport"; | |
} | |
/* | |
* TYPE DEFINITIONS | |
*/ | |
typedef filter-id { | |
type uint32; | |
description | |
"A type to identify filters which can be associated with a | |
subscription."; | |
} | |
typedef change-type { | |
type enumeration { | |
enum "create" { | |
description | |
"A new data node was created"; | |
} | |
enum "delete" { | |
description | |
"A data node was deleted"; | |
} | |
enum "modify" { | |
description | |
"The value of a data node has changed"; | |
} | |
} | |
description | |
"Specifies different types of changes that may occur | |
to a datastore."; | |
} | |
grouping update-filter { | |
description | |
"This groupings defines filters for push updates for a | |
datastore tree. The filters define which updates are of | |
interest in a push update subscription. Mixing and matching | |
of multiple filters does not occur at the level of this | |
grouping. When a push-update subscription is created, the | |
filter can be a regular subscription filter, or one of the | |
additional filters that are defined in this grouping."; | |
choice update-filter { | |
description | |
"Define filters regarding which data nodes to include | |
in push updates"; | |
case subtree { | |
description | |
"Subtree filter."; | |
anyxml subtree-filter { | |
description | |
"Subtree-filter used to specify the data nodes targeted | |
for subscription within a subtree, or subtrees, of a | |
conceptual YANG datastore. Objects matching the filter | |
criteria will traverse the filter. The syntax follows | |
the subtree filter syntax specified in RFC 6241, | |
section 6."; | |
reference "RFC 6241 section 6"; | |
} | |
} | |
case xpath { | |
description | |
"XPath filter"; | |
leaf xpath-filter { | |
type yang:xpath1.0; | |
description | |
"Xpath defining the data items of interest."; | |
} | |
} | |
} | |
} | |
grouping update-policy { | |
description | |
"This grouping describes the conditions under which an | |
update will be sent as part of an update stream."; | |
choice update-trigger { | |
description | |
"Defines necessary conditions for sending an event to | |
the subscriber."; | |
case periodic { | |
description | |
"The agent is requested to notify periodically the | |
current values of the datastore or the subset | |
defined by the filter."; | |
leaf period { | |
type yang:timeticks; | |
mandatory true; | |
description | |
"Duration of time which should occur between periodic | |
push updates. Where the anchor of a start-time is | |
available, the push will include the objects and their | |
values which exist at an exact multiple of timeticks | |
aligning to this start-time anchor."; | |
} | |
leaf anchor-time { | |
type yang:date-and-time; | |
description | |
"Designates a timestamp from which the series of | |
periodic push updates are computed. The next update | |
will take place at the next period interval from the | |
anchor time. For example, for an anchor time at the | |
top of a minute and a period interval of a minute, | |
the next update will be sent at the top of the next | |
minute."; | |
} | |
} | |
case on-change { | |
if-feature "on-change"; | |
description | |
"The agent is requested to notify changes in | |
values in the datastore or a subset of it defined | |
by a filter."; | |
leaf no-synch-on-start { | |
type empty; | |
description | |
"This leaf acts as a flag that determines behavior at the | |
start of the subscription. When present, | |
synchronization of state at the beginning of the | |
subscription is outside the scope of the subscription. | |
Only updates about changes that are observed from the | |
start time, i.e. only push-change-update notifications | |
are sent. | |
When absent (default behavior), in order to facilitate | |
a receiver's synchronization, a full update is sent | |
when the subscription starts using a push-update | |
notification, just like in the case of a periodic | |
subscription. After that, push-change-update | |
notifications only are sent unless the Publisher chooses | |
to resynch the subscription again."; | |
} | |
leaf dampening-period { | |
type yang:timeticks; | |
mandatory true; | |
description | |
"Minimum amount of time that needs to have | |
passed since the last time an update was | |
provided."; | |
} | |
leaf-list excluded-change { | |
type change-type; | |
description | |
"Use to restrict which changes trigger an update. | |
For example, if modify is excluded, only creation and | |
deletion of objects is reported."; | |
} | |
} | |
} | |
} | |
grouping subscription-qos { | |
description | |
"This grouping describes Quality of Service information | |
concerning a subscription. This information is passed to lower | |
layers for transport priortization and treatment"; | |
leaf dscp { | |
if-feature "notif-bis:configured-subscriptions"; | |
type inet:dscp; | |
default "0"; | |
description | |
"The push update's IP packet transport priority. | |
This is made visible across network hops to receiver. | |
The transport priority is shared for all receivers of | |
a given subscription."; | |
} | |
leaf subscription-priority { | |
type uint8; | |
description | |
"Relative priority for a subscription. Allows an | |
underlying transport layer perform informed load | |
balance allocations between various subscriptions"; | |
} | |
leaf subscription-dependency { | |
type string; | |
description | |
"Provides the Subscription ID of a parent subscription | |
without which this subscription should not exist. In | |
other words, there is no reason to stream these objects | |
if another subscription is missing."; | |
} | |
} | |
augment "/notif-bis:establish-subscription/notif-bis:input" { | |
description | |
"Define additional subscription parameters that apply | |
specifically to push updates"; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:establish-subscription/notif-bis:input/"+ | |
"notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:establish-subscription/notif-bis:output" { | |
description | |
"Allow to return additional subscription parameters that apply | |
specifically to push updates."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:establish-subscription/notif-bis:output/"+ | |
"notif-bis:result/notif-bis:no-success/notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:modify-subscription/notif-bis:input" { | |
description | |
"Define additional subscription parameters that apply | |
specifically to push updates."; | |
uses update-policy; | |
} | |
augment "/notif-bis:modify-subscription/notif-bis:input/"+ | |
"notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:modify-subscription/notif-bis:output" { | |
description | |
"Allow to retun additional subscription parameters that apply | |
specifically to push updates."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:modify-subscription/notif-bis:output/"+ | |
"notif-bis:result/notif-bis:no-success/notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
notification push-update { | |
description | |
"This notification contains a push update, containing | |
data subscribed to via a subscription. | |
This notification is sent for periodic updates, for a | |
periodic subscription. It can also be used for | |
synchronization updates of an on-change subscription. | |
This notification shall only be sent to receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
leaf subscription-id { | |
type notif-bis:subscription-id; | |
mandatory true; | |
description | |
"This references the subscription because of which the | |
notification is sent."; | |
} | |
leaf time-of-update { | |
type yang:date-and-time; | |
description | |
"This leaf contains the time of the update."; | |
} | |
leaf updates-not-sent { | |
type empty; | |
description | |
"This is a flag which indicates that not all data nodes | |
subscribed to are included included with this | |
update. In other words, the publisher has failed to | |
fulfill its full subscription obligations. | |
This may lead to intermittent loss of synchronization | |
of data at the client. Synchronization at the client | |
can occur when the next push-update is received."; | |
} | |
/* | |
* -------------------------------------------------------------------- | |
* datastore-contents not currently supported. | |
* Will replace datastore-contents-string in a future release. | |
anydata datastore-contents { | |
description | |
"This contains the updated data. It constitutes a snapshot | |
at the time-of-update of the set of data that has been | |
subscribed to. The format and syntax of the data | |
corresponds to the format and syntax of data that would be | |
returned in a corresponding get operation with the same | |
filter parameters applied."; | |
} | |
* -------------------------------------------------------------------- | |
*/ | |
leaf datastore-contents-string { | |
type string; | |
description | |
"This contains the updated data. It constitutes a snapshot | |
at the time-of-update of the set of data that has been | |
subscribed to. The format and syntax of the data | |
corresponds to the format and syntax of data that would be | |
returned in a corresponding get operation with the same | |
filter parameters applied."; | |
} | |
/* | |
* -------------------------------------------------------------------- | |
*/ | |
} | |
notification push-change-update { | |
if-feature "on-change"; | |
description | |
"This notification contains an on-change push update. | |
This notification shall only be sent to the receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
leaf subscription-id { | |
type notif-bis:subscription-id; | |
mandatory true; | |
description | |
"This references the subscription because of which the | |
notification is sent."; | |
} | |
leaf time-of-update { | |
type yang:date-and-time; | |
description | |
"This leaf contains the time of the update, i.e. the | |
time at which the change was observed."; | |
} | |
leaf updates-not-sent { | |
type empty; | |
description | |
"This is a flag which indicates that not all changes which | |
have occured since the last update are included with this | |
update. In other words, the publisher has failed to | |
fulfill its full subscription obligations, for example in | |
cases where it was not able to keep up with a change burst. | |
To facilitate synchronization, a publisher MAY subsequently | |
send a push-update containing a full snapshot of subscribed | |
data. Such a push-update might also be triggered by a | |
subscriber requesting an on-demand synchronization."; | |
} | |
anydata datastore-changes { | |
description | |
"This contains datastore contents that has changed | |
since the previous update, per the terms of the | |
subscription. Changes are encoded analogous to | |
the syntax of a corresponding yang-patch operation, | |
i.e. a yang-patch operation applied to the YANG datastore | |
implied by the previous update to result in the current | |
state (and assuming yang-patch could also be applied to | |
operational data)."; | |
} | |
leaf datastore-changes-string { | |
type string; | |
description | |
"This contains datastore contents that has changed | |
since the previous update, per the terms of the | |
subscription. Changes are encoded analogous to | |
the syntax of a corresponding yang-patch operation, | |
i.e. a yang-patch operation applied to the YANG datastore | |
implied by the previous update to result in the current | |
state (and assuming yang-patch could also be applied to | |
operational data)."; | |
} | |
/* | |
* -------------------------------------------------------------------- | |
*/ | |
} | |
augment "/notif-bis:subscription-started" { | |
description | |
"This augmentation adds push subscription parameters | |
to the notification that a subscription has | |
started and data updates are beginning to be sent. | |
This notification shall only be sent to receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:subscription-started/notif-bis:filter-type" { | |
description | |
"This augmentation allows to include additional update filters | |
options to be included as part of the notification that a | |
subscription has started."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:subscription-modified" { | |
description | |
"This augmentation adds push subscription parameters | |
to the notification that a subscription has | |
been modified. | |
This notification shall only be sent to receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:subscription-modified/notif-bis:filter-type" { | |
description | |
"This augmentation allows to include additional update | |
filters options to be included as part of the notification | |
that a subscription has been modified."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:filters/notif-bis:filter/"+ | |
"notif-bis:filter-type" { | |
description | |
"This container adds additional update filter options | |
to the list of configurable filters | |
that can be applied to subscriptions. This facilitates | |
the reuse of complex filters once defined."; | |
case update-filter { | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:subscription-config/notif-bis:subscription" { | |
description | |
"Contains the list of subscriptions that are configured, | |
as opposed to established via RPC or other means."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:subscription-config/notif-bis:subscription/"+ | |
"notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
uses update-filter; | |
} | |
} | |
augment "/notif-bis:subscriptions/notif-bis:subscription" { | |
description | |
"Contains the list of currently active subscriptions, | |
i.e. subscriptions that are currently in effect, | |
used for subscription management and monitoring purposes. | |
This includes subscriptions that have been setup via RPC | |
primitives, e.g. establish-subscription, delete-subscription, | |
and modify-subscription, as well as subscriptions that | |
have been established via configuration."; | |
uses update-policy; | |
uses subscription-qos; | |
} | |
augment "/notif-bis:subscriptions/notif-bis:subscription/"+ | |
"notif-bis:filter-type" { | |
description | |
"Add push filters to selection of filter types."; | |
case update-filter { | |
description | |
"Additional filter options for push subscription."; | |
uses update-filter; | |
} | |
} | |
} |