module yrt-ietf-event-notifications { | |
namespace | |
"urn:ietf:params:xml:ns:yang:yrt-ietf-event-notifications"; | |
prefix notif-bis; | |
import yrt-ietf-yang-types { | |
prefix yang; | |
} | |
import yrt-ietf-inet-types { | |
prefix inet; | |
} | |
import yrt-ietf-interfaces { | |
prefix if; | |
} | |
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: Alberto Gonzalez Prieto | |
<mailto:albertgo@cisco.com> | |
Editor: Eric Voit | |
<mailto:evoit@cisco.com> | |
Editor: Einar Nilsen-Nygaard | |
<mailto:einarnn@cisco.com> | |
Editor: Ambika Prasad Tripathy | |
<mailto:ambtripa@cisco.com> | |
Editor: Sharon Chisholm | |
<mailto:schishol@ciena.com> | |
Editor: Hector Trevino | |
<mailto:htrevino@cisco.com"; | |
description | |
"This module contains conceptual YANG specifications | |
for NETCONF Event Notifications."; | |
revision 2016-10-27 { | |
description | |
"Tweaks to remove two notifications, | |
RPC for create subscription refined with stream default, | |
new grouping to eliminate some dymanically modifiable | |
parameters in modifiy subscription RPC"; | |
reference | |
"draft-ietf-netconf-rfc5277bis-01"; | |
} | |
/* | |
* FEATURES | |
*/ | |
feature json { | |
description | |
"This feature indicates that JSON encoding of notifications | |
is supported."; | |
} | |
feature configured-subscriptions { | |
description | |
"This feature indicates that management plane configuration | |
of subscription is supported."; | |
} | |
/* | |
* EXTENSIONS | |
*/ | |
extension control-plane-notif { | |
description | |
"This statement applies only to notifications. | |
It indicates that the notification is a control-plane | |
notification (aka OAM notification). Therefore it does | |
not participate in a regular event stream and does not | |
need to be specifically subscribed to."; | |
} | |
/* | |
* IDENTITIES | |
*/ | |
/* Identities for streams */ | |
identity stream { | |
description | |
"Base identity to represent a generic stream of event | |
notifications."; | |
} | |
identity NETCONF1 { | |
base stream; | |
description | |
"Default NETCONF event stream, containing events based on | |
notifications defined as YANG modules that are supported | |
by the system."; | |
} | |
/* Identities for subscription results */ | |
identity subscription-result { | |
description | |
"Base identity for RPC responses to requests surrounding | |
management (e.g. creation, modification, deletion) of | |
subscriptions."; | |
} | |
identity ok { | |
base subscription-result; | |
description | |
"OK - RPC was successful and was performed as requested."; | |
} | |
identity error { | |
base subscription-result; | |
description | |
"RPC was not successful. | |
Base identity for error return codes."; | |
} | |
identity error-no-such-subscription { | |
base error; | |
description | |
"A subscription with the requested subscription ID | |
does not exist."; | |
} | |
identity error-no-such-option { | |
base error; | |
description | |
"A requested parameter setting is not supported."; | |
} | |
identity error-insufficient-resources { | |
base error; | |
description | |
"The publisher has insufficient resources to support the | |
subscription as requested."; | |
} | |
identity error-configured-subscription { | |
base error; | |
description | |
"Cannot apply RPC to a configured subscription, i.e. | |
to a subscription that was not established via RPC."; | |
} | |
identity error-other { | |
base error; | |
description | |
"An unspecified error has occurred (catch all)."; | |
} | |
/* Identities for subscription stream status */ | |
identity subscription-stream-status { | |
description | |
"Base identity for the status of subscriptions and | |
datastreams."; | |
} | |
identity active { | |
base subscription-stream-status; | |
description | |
"Status is active and healthy."; | |
} | |
identity inactive { | |
base subscription-stream-status; | |
description | |
"Status is inactive, for example outside the | |
interval between start time and stop time."; | |
} | |
identity suspended { | |
base subscription-stream-status; | |
description | |
"The status is suspended, meaning that the publisher | |
is currently unable to provide the negotiated updates | |
for the subscription."; | |
} | |
identity in-error { | |
base subscription-stream-status; | |
description | |
"The status is in error or degraded, meaning that | |
stream and/or subscription is currently unable to provide | |
the negotiated notifications."; | |
} | |
/* Identities for subscription errors */ | |
identity subscription-errors { | |
description | |
"Base identity for subscription error status. | |
This identity is not to be confused with error return | |
codes for RPCs"; | |
} | |
identity internal-error { | |
base subscription-errors; | |
description | |
"Subscription failures caused by server internal error."; | |
} | |
identity no-resources { | |
base subscription-errors; | |
description | |
"Lack of resources, e.g. CPU, memory, bandwidth"; | |
} | |
identity subscription-deleted { | |
base subscription-errors; | |
description | |
"The subscription was terminated because the subscription | |
was deleted."; | |
} | |
identity other { | |
base subscription-errors; | |
description | |
"Fallback reason - any other reason"; | |
} | |
/* Identities for encodings */ | |
identity encodings { | |
description | |
"Base identity to represent data encodings"; | |
} | |
identity encode-xml { | |
base encodings; | |
description | |
"Encode data using XML"; | |
} | |
identity encode-json { | |
base encodings; | |
description | |
"Encode data using JSON"; | |
} | |
/* Identities for transports */ | |
identity transport { | |
description | |
"An identity that represents a transport protocol for | |
event notifications"; | |
} | |
identity netconf { | |
base transport; | |
description | |
"Netconf notifications as a transport."; | |
} | |
/* | |
* TYPEDEFs | |
*/ | |
typedef subscription-id { | |
type uint32; | |
description | |
"A type for subscription identifiers."; | |
} | |
typedef filter-id { | |
type uint32; | |
description | |
"A type to identify filters which can be associated with a | |
subscription."; | |
} | |
typedef subscription-result { | |
type identityref { | |
base subscription-result; | |
} | |
description | |
"The result of a subscription operation"; | |
} | |
typedef subscription-term-reason { | |
type identityref { | |
base subscription-errors; | |
} | |
description | |
"Reason for a publisher to terminate a subscription."; | |
} | |
typedef subscription-susp-reason { | |
type identityref { | |
base subscription-errors; | |
} | |
description | |
"Reason for a publisher to suspend a subscription."; | |
} | |
typedef encoding { | |
type identityref { | |
base encodings; | |
} | |
description | |
"Specifies a data encoding, e.g. for a data subscription."; | |
} | |
typedef subscription-status { | |
type identityref { | |
base subscription-stream-status; | |
} | |
description | |
"Specifies the status of a subscription or datastream."; | |
} | |
typedef transport-protocol { | |
type identityref { | |
base transport; | |
} | |
description | |
"Specifies transport protocol used to send notifications to a | |
receiver."; | |
} | |
typedef push-source { | |
type enumeration { | |
enum "interface-originated" { | |
description | |
"Notifications will be sent from a specific interface on | |
a publisher"; | |
} | |
enum "address-originated" { | |
description | |
"Notifications will be sent from a specific address on a | |
publisher"; | |
} | |
} | |
description | |
"Specifies from where notifications will be sourced when | |
being sent by the publisher."; | |
} | |
typedef stream { | |
type identityref { | |
base stream; | |
} | |
description | |
"Specifies a system-provided datastream."; | |
} | |
typedef filter-ref { | |
type leafref { | |
path "/notif-bis:filters/notif-bis:filter/notif-bis:filter-id"; | |
} | |
description | |
"This type is used to reference a filter."; | |
} | |
/* | |
* GROUPINGS | |
*/ | |
grouping base-filter { | |
description | |
"This grouping defines the base for filters for | |
notification events. | |
It includes the filter defined in 5277 and | |
it enables extending filtering to other | |
types of filters"; | |
choice filter-type { | |
description | |
"A filter needs to be a single filter of a given type. | |
Mixing and matching of multiple filters does not occur | |
at the level of this grouping."; | |
case rfc5277 { | |
anyxml filter { | |
description | |
"Filter per RFC 5277. Notification filter. | |
If a filter element is specified to look for data of a | |
particular value, and the data item is not present | |
within a particular event notification for its value to | |
be checked against, the notification will be filtered | |
out. For example, if one were to check for | |
'severity=critical' in a configuration event | |
notification where this field was not supported, then | |
the notification would be filtered out. For subtree | |
filtering, a non-empty node set means that the filter | |
matches. For XPath filtering, the mechanisms defined | |
in [XPATH] should be used to convert the returned | |
value to boolean."; | |
} | |
} | |
} | |
} | |
grouping subscription-info-basic-non-modifiable { | |
description | |
"This grouping describes the information in a basic | |
subscription request."; | |
leaf stream { | |
type stream; | |
description | |
"Indicates which stream of events is of interest. | |
If not present, events in the default NETCONF stream | |
will be sent."; | |
} | |
leaf encoding { | |
type encoding; | |
default "encode-xml"; | |
description | |
"The type of encoding for the subscribed data. | |
Default is XML"; | |
} | |
} | |
grouping subscription-info-basic-modifiable { | |
description | |
"This grouping describes some objects which may be changed | |
in a subscription via an RPC."; | |
uses base-filter; | |
leaf startTime { | |
type yang:date-and-time; | |
description | |
"Used to trigger the replay feature | |
and indicate that the replay should start at the time | |
specified. If <startTime> is not present, this is not a | |
replay subscription. It is not valid to specify start | |
times that are later than the current time. If the | |
<startTime> specified is earlier than the log can support, | |
the replay will begin with the earliest available | |
notification. This parameter is of type dateTime and | |
compliant to [RFC3339]. Implementations must | |
support time zones."; | |
} | |
leaf stopTime { | |
type yang:date-and-time; | |
must "current() > ../startTime" { | |
description | |
"stopTime must be used with and be later than <startTime>"; | |
} | |
description | |
"Used with the optional replay feature to indicate the | |
newest notifications of interest. If <stopTime> is | |
not present, the notifications will continue until the | |
subscription is terminated. Must be used with and be | |
later than <startTime>. Values of <stopTime> in the | |
future are valid. This parameter is of type dateTime and | |
compliant to [RFC3339]. Implementations must support time | |
zones."; | |
} | |
} | |
grouping subscription-info-all-modifiable { | |
description | |
"This grouping describes all rpc modifiable objects in a | |
subscription."; | |
uses subscription-info-basic-modifiable { | |
augment "filter-type" { | |
description | |
"Post-5277 subscriptions allow references to existing | |
filters"; | |
case by-reference { | |
description | |
"Incorporate a filter that has been configured | |
separately."; | |
leaf filter-ref { | |
type filter-ref; | |
description | |
"References filter which is associated with the | |
subscription."; | |
} | |
} | |
} | |
} | |
} | |
grouping subscription-info { | |
description | |
"This grouping describes information concerning a | |
subscription."; | |
uses subscription-info-basic-non-modifiable; | |
uses subscription-info-all-modifiable; | |
} | |
grouping push-source-info { | |
description | |
"Defines the sender source from which notifications | |
for a configured subscription are sent."; | |
choice push-source { | |
description | |
"Identifies the egress interface on the Publisher from | |
which notifications will or are being sent."; | |
case interface-originated { | |
description | |
"When the push source is out of an interface on the | |
Publisher established via static configuration."; | |
leaf source-interface { | |
type if:interface-ref; | |
description | |
"References the interface for notifications."; | |
} | |
} | |
case address-originated { | |
description | |
"When the push source is out of an IP address on the | |
Publisher established via static configuration."; | |
leaf source-vrf { | |
type uint32 { | |
range "16..1048574"; | |
} | |
description | |
"Label of the vrf."; | |
} | |
leaf source-address { | |
type inet:ip-address-no-zone; | |
mandatory true; | |
description | |
"The source address for the notifications."; | |
} | |
} | |
} | |
} | |
grouping receiver-info { | |
description | |
"Defines where and how to deliver notifications for a | |
configured subscription. This includes | |
specifying the receiver, as well as defining | |
any network and transport aspects when sending of | |
notifications occurs outside of Netconf."; | |
container receivers { | |
notif-bis1:control-plane-notif; | |
description | |
"Set of receivers in a subscription."; | |
list receiver { | |
key "address"; | |
min-elements 1; | |
description | |
"A single host or multipoint address intended as a target | |
for the notifications for a subscription."; | |
leaf address { | |
type inet:host; | |
mandatory true; | |
description | |
"Specifies the address for the traffic to reach a | |
remote host. One of the following must be | |
specified: an ipv4 address, an ipv6 address, | |
or a host name."; | |
} | |
leaf port { | |
type inet:port-number; | |
mandatory true; | |
description | |
"This leaf specifies the port number to use for | |
messages destined for a receiver."; | |
} | |
leaf protocol { | |
type transport-protocol; | |
default "netconf"; | |
description | |
"This leaf specifies the transport protocol used | |
to deliver messages destined for the receiver."; | |
} | |
} | |
} | |
} | |
grouping subscription-response { | |
description | |
"Defines the output to the rpc's establish-subscription | |
and modify-subscription."; | |
leaf subscription-result { | |
type subscription-result; | |
mandatory true; | |
description | |
"Indicates whether subscription is operational, | |
or if a problem was encountered."; | |
} | |
choice result { | |
description | |
"Depending on the subscription result, different | |
data is returned."; | |
case success { | |
description | |
"This case is used when the subscription request | |
was successful and a subscription was created/modified | |
as a result"; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"Identifier used for this subscription."; | |
} | |
} | |
case no-success { | |
description | |
"This case applies when a subscription request | |
was not successful and no subscription was | |
created (or modified) as a result. In this case, | |
information MAY be returned that indicates | |
suggested parameter settings that would have a | |
high likelihood of succeeding in a subsequent | |
establish-subscription or modify-subscription | |
request."; | |
uses subscription-info; | |
} | |
} | |
} | |
/* | |
* RPCs | |
*/ | |
rpc establish-subscription { | |
description | |
"This RPC allows a subscriber to create | |
(and possibly negotiate) a subscription on its own behalf. | |
If successful, the subscription | |
remains in effect for the duration of the subscriber's | |
association with the publisher, or until the subscription | |
is terminated by virtue of a delete-subscription request. | |
In case an error (as indicated by subscription-result) | |
is returned, the subscription is | |
not created. In that case, the RPC output | |
MAY include suggested parameter settings | |
that would have a high likelihood of succeeding in a | |
subsequent establish-subscription request."; | |
input { | |
uses subscription-info; | |
} | |
output { | |
uses subscription-response; | |
} | |
} | |
rpc create-subscription { | |
description | |
"This operation initiates an event notification subscription | |
that will send asynchronous event notifications to the | |
initiator of the command until the association terminates. | |
It is not possible to modify or delete a subscription | |
that was created using this operation. It is included for | |
reasons of backward compatibility with RFC 5277 | |
implementations."; | |
input { | |
uses subscription-info-basic-non-modifiable{ | |
refine "stream" { | |
default "NETCONF1"; | |
} | |
} | |
uses subscription-info-basic-modifiable; | |
} | |
} | |
rpc modify-subscription { | |
description | |
"This RPC allows a subscriber to modify a subscription | |
that was previously created using establish-subscription. | |
If successful, the subscription | |
remains in effect for the duration of the subscriber's | |
association with the publisher, or until the subscription | |
is terminated by virtue of a delete-subscription request. | |
In case an error is returned (as indicated by | |
subscription-result), the subscription is | |
not modified and the original subscription parameters | |
remain in effect. In that case, the rpc error response | |
MAY include suggested parameter settings | |
that would have a high likelihood of succeeding in a | |
subsequent modify-subscription request."; | |
input { | |
leaf subscription-id { | |
type subscription-id; | |
description | |
"Identifier to use for this subscription."; | |
} | |
uses subscription-info-all-modifiable; | |
} | |
output { | |
uses subscription-response; | |
} | |
} | |
rpc delete-subscription { | |
description | |
"This RPC allows a subscriber to delete a subscription that | |
was previously created using establish-subscription."; | |
input { | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"Identifier of the subscription that is to be deleted. | |
Only subscriptions that were created using | |
establish-subscription can be deleted via this RPC."; | |
} | |
} | |
output { | |
leaf subscription-result { | |
type subscription-result; | |
mandatory true; | |
description | |
"Indicates whether subscription is operational, | |
or if a problem was encountered."; | |
} | |
} | |
} | |
/* | |
* NOTIFICATIONS | |
*/ | |
notification replay-complete { | |
notif-bis:control-plane-notif; | |
description | |
"This notification is sent to indicate that all of the | |
replay notifications have been sent. It must not be | |
sent for any other reason."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
} | |
notification notification-complete { | |
notif-bis:control-plane-notif; | |
description | |
"This notification is sent to indicate that a | |
subscription, which includes a stop time, has | |
finished passing events."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
} | |
notification subscription-started { | |
notif-bis:control-plane-notif; | |
description | |
"This notification indicates that a subscription has | |
started and notifications are beginning to be sent. | |
This notification shall only be sent to receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
uses subscription-info; | |
} | |
notification subscription-suspended { | |
notif-bis:control-plane-notif; | |
description | |
"This notification indicates that a suspension of the | |
subscription by the publisher has occurred. No further | |
notifications will be sent until subscription | |
resumes. | |
This notification shall only be sent to receivers | |
of a subscription; it does not constitute a general-purpose | |
notification."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
leaf reason { | |
type subscription-susp-reason; | |
description | |
"Provides a reason for why the subscription was | |
suspended."; | |
} | |
} | |
notification subscription-resumed { | |
notif-bis:control-plane-notif; | |
description | |
"This notification indicates that a subscription that had | |
previously been suspended has resumed. Notifications | |
will once again be sent."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
} | |
notification subscription-modified { | |
notif-bis:control-plane-notif; | |
description | |
"This notification indicates that a subscription has | |
been modified. Notifications sent from this point | |
on will conform to the modified terms of the | |
subscription."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
uses subscription-info; | |
} | |
notification subscription-terminated { | |
notif-bis:control-plane-notif; | |
description | |
"This notification indicates that a subscription has been | |
terminated."; | |
leaf subscription-id { | |
type subscription-id; | |
mandatory true; | |
description | |
"This references the affected subscription."; | |
} | |
leaf reason { | |
type subscription-term-reason; | |
description | |
"Provides a reason for why the subscription was | |
terminated."; | |
} | |
} | |
/* | |
* DATA NODES | |
*/ | |
container streams { | |
config false; | |
description | |
"This container contains a leaf list of built-in | |
streams that are provided by the system."; | |
leaf-list stream { | |
type stream; | |
description | |
"Identifies the built-in streams that are supported by the | |
system. Built-in streams are associated with their own | |
identities, each of which carries a special semantics. | |
In case configurable custom streams are supported, | |
as indicated by the custom-stream identity, the | |
configuration of those custom streams is provided | |
separately."; | |
} | |
} | |
container filters { | |
description | |
"This container contains a list of configurable filters | |
that can be applied to subscriptions. This facilitates | |
the reuse of complex filters once defined."; | |
list filter { | |
key "filter-id"; | |
description | |
"A list of configurable filters that can be applied to | |
subscriptions."; | |
leaf filter-id { | |
type filter-id; | |
description | |
"An identifier to differentiate between filters."; | |
} | |
uses base-filter; | |
} | |
} | |
container subscription-config { | |
if-feature "configured-subscriptions"; | |
description | |
"Contains the list of subscriptions that are configured, | |
as opposed to established via RPC or other means."; | |
list subscription { | |
key "subscription-id"; | |
description | |
"Content of a subscription."; | |
leaf subscription-id { | |
type subscription-id; | |
description | |
"Identifier to use for this subscription."; | |
} | |
uses subscription-info; | |
uses receiver-info { | |
if-feature "configured-subscriptions"; | |
} | |
uses push-source-info { | |
if-feature "configured-subscriptions"; | |
} | |
} | |
} | |
container subscriptions { | |
config false; | |
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. create-subscription, establish- | |
subscription, and modify-subscription, as well as | |
subscriptions that have been established via | |
configuration."; | |
list subscription { | |
key "subscription-id"; | |
config false; | |
description | |
"Content of a subscription. | |
Subscriptions can be created using a control channel | |
or RPC, or be established through configuration."; | |
leaf subscription-id { | |
type subscription-id; | |
description | |
"Identifier of this subscription."; | |
} | |
leaf configured-subscription { | |
if-feature "configured-subscriptions"; | |
type empty; | |
description | |
"The presence of this leaf indicates that the | |
subscription originated from configuration, not | |
through a control channel or RPC."; | |
} | |
leaf subscription-status { | |
type subscription-status; | |
description | |
"The status of the subscription."; | |
} | |
uses subscription-info; | |
uses receiver-info { | |
if-feature "configured-subscriptions"; | |
} | |
uses push-source-info { | |
if-feature "configured-subscriptions"; | |
} | |
} | |
} | |
} |