[要約] RFC 8641は、YANG通知を使用してデータストアの更新を購読するための仕様です。その目的は、ネットワークデバイスの状態変更をリアルタイムで監視し、効率的なネットワーク管理を可能にすることです。

Internet Engineering Task Force (IETF)                          A. Clemm
Request for Comments: 8641                                     Futurewei
Category: Standards Track                                        E. Voit
ISSN: 2070-1721                                            Cisco Systems
                                                          September 2019
        

Subscription to YANG Notifications for Datastore Updates

データストア更新のためのYANG通知のサブスクリプション

Abstract

概要

This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.

このドキュメントでは、サブスクライバーアプリケーションがYANGデータストアからの更新の継続的かつカスタマイズされたストリームを要求できるようにするメカニズムについて説明します。更新に対するこのような可視性を提供することで、構成と運用状態のリモートミラーリングと監視に基づく新しい機能が可能になります。

Status of This Memo

本文書の状態

This is an Internet Standards Track document.

これはInternet Standards Trackドキュメントです。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

このドキュメントは、IETF(Internet Engineering Task Force)の製品です。これは、IETFコミュニティのコンセンサスを表しています。公開レビューを受け、インターネットエンジニアリングステアリンググループ(IESG)による公開が承認されました。インターネット標準の詳細については、RFC 7841のセクション2をご覧ください。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8641.

このドキュメントの現在のステータス、エラッタ、およびフィードバックの提供方法に関する情報は、https://www.rfc-editor.org/info/rfc8641で入手できます。

Copyright Notice

著作権表示

Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.

Copyright(c)2019 IETF Trustおよびドキュメントの作成者として識別された人物。全著作権所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

この文書は、BCP 78およびIETF文書に関するIETFトラストの法的規定(https://trustee.ietf.org/license-info)の対象であり、この文書の発行日に有効です。これらのドキュメントは、このドキュメントに関するあなたの権利と制限を説明しているため、注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、Trust Legal Provisionsのセクション4.eに記載されているSimplified BSD Licenseテキストが含まれている必要があり、Simplified BSD Licenseに記載されているように保証なしで提供されます。

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.

このドキュメントには、2008年11月10日より前に公開または公開されたIETFドキュメントまたはIETFコントリビューションの素材が含まれている場合があります。 IETF標準プロセス外。このような資料の著作権を管理する人から適切なライセンスを取得せずに、このドキュメントをIETF標準プロセス外で変更したり、その派生物をIETF標準プロセス外で作成したりすることはできません。 RFCとして、またはそれを英語以外の言語に翻訳するための出版物。

Table of Contents

目次

   1. Introduction ....................................................4
   2. Definitions .....................................................4
   3. Solution Overview ...............................................6
      3.1. Subscription Model .........................................6
      3.2. Negotiation of Subscription Policies .......................7
      3.3. On-Change Considerations ...................................8
      3.4. Reliability Considerations .................................9
      3.5. Data Encodings ............................................10
      3.6. Defining the Selection with a Datastore ...................11
      3.7. Streaming Updates .........................................12
      3.8. Subscription Management ...................................15
      3.9. Receiver Authorization ....................................16
      3.10. On-Change Notifiable Datastore Nodes .....................18
      3.11. Other Considerations .....................................18
   4. A YANG Data Model for Management of Datastore Push
      Subscriptions ..................................................20
      4.1. Overview ..................................................20
      4.2. Subscription Configuration ................................27
      4.3. YANG Notifications ........................................28
      4.4. YANG RPCs .................................................29
   5. YANG Module for YANG-Push ......................................34
   6. IANA Considerations ............................................51
   7. Security Considerations ........................................51
   8. References .....................................................53
      8.1. Normative References ......................................53
      8.2. Informative References ....................................55
   Appendix A. Subscription Errors ...................................56
     A.1. RPC Failures ...............................................56
     A.2. Failure Notifications ......................................57
   Acknowledgments ...................................................58
   Contributors ......................................................58
   Authors' Addresses ................................................58
        
1. Introduction
1. はじめに

Traditional approaches for providing visibility into managed entities from a remote system have been built on polling. With polling, data is periodically requested and retrieved by a client from a server to stay up to date. However, there are issues associated with polling-based management:

リモートシステムから管理対象エンティティへの可視性を提供する従来のアプローチは、ポーリングに基づいて構築されてきました。ポーリングを使用すると、データが定期的に要求され、最新の状態を保つためにサーバーからクライアントに取得されます。ただし、ポーリングベースの管理に関連する問題があります。

o Polling incurs significant latency. This latency prohibits many types of applications.

o ポーリングにより、大幅な遅延が発生します。この待ち時間により、多くのタイプのアプリケーションが禁止されます。

o Polling cycles may be missed, and requests may be delayed or get lost -- often when the network is under stress and the need for the data is the greatest.

o ポーリングサイクルが失われる可能性があり、リクエストが遅延または失われる可能性があります。多くの場合、ネットワークにストレスがかかっており、データの必要性が最も高い場合です。

o Polling requests may undergo slight fluctuations, resulting in intervals of different lengths. The resulting data is difficult to calibrate and compare.

o ポーリング要求は、わずかな変動を経て、異なる長さの間隔が生じる可能性があります。結果のデータは、調整および比較が困難です。

o For applications that monitor for changes, many remote polling cycles place unwanted and ultimately wasteful load on the network, devices, and applications, particularly when changes occur only infrequently.

o 変更を監視するアプリケーションの場合、多くのリモートポーリングサイクルは、特に変更がまれにしか発生しない場合に、ネットワーク、デバイス、およびアプリケーションに不要で最終的には無駄な負荷をかけます。

A more effective alternative to polling is for an application to receive automatic and continuous updates from a targeted subset of a datastore. Accordingly, there is a need for a service that (1) allows applications to subscribe to updates from a datastore and (2) enables the server (also referred to as the "publisher") to push and, in effect, stream those updates. The requirements for such a service have been documented in [RFC7923].

ポーリングのより効果的な代替手段は、アプリケーションがデータストアのターゲットサブセットから自動かつ継続的な更新を受信することです。したがって、(1)アプリケーションがデータストアからの更新をサブスクライブできるようにし、(2)サーバー(「パブリッシャー」とも呼ばれる)がそれらの更新をプッシュして、事実上ストリーミングできるようにするサービスが必要です。このようなサービスの要件は、[RFC7923]に文書化されています。

This document defines a corresponding solution that is built on top of [RFC8639]. Supplementing that work are YANG data model augmentations, extended RPCs, and new datastore-specific update notifications. Transport options provided in [RFC8639] will work seamlessly with this solution.

このドキュメントは、[RFC8639]の上に構築された対応するソリューションを定義します。この作業を補足するのが、YANGデータモデルの拡張、拡張RPC、および新しいデータストア固有の更新通知です。 [RFC8639]で提供される転送オプションは、このソリューションでシームレスに機能します。

2. Definitions
2. 定義

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

キーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、「MAY」、「OPTIONALこのドキュメントの「」は、BCP 14 [RFC2119] [RFC8174]で説明されているように解釈されます。

This document uses the terminology defined in [RFC7950], [RFC8341], [RFC8342], and [RFC8639]. In addition, this document defines the following terms:

このドキュメントでは、[RFC7950]、[RFC8341]、[RFC8342]、および[RFC8639]で定義されている用語を使用しています。さらに、このドキュメントでは次の用語を定義しています。

o Datastore node: A node in the instantiated YANG data tree associated with a datastore. In this document, datastore nodes are often also simply referred to as "objects".

o データストアノード:データストアに関連付けられたインスタンス化されたYANGデータツリー内のノード。このドキュメントでは、データストアノードは単に「オブジェクト」とも呼ばれます。

o Datastore node update: A data item containing the current value of a datastore node at the time the datastore node update was created, as well as the path to the datastore node.

o データストアノードの更新:データストアノードの更新が作成されたときのデータストアノードの現在の値と、データストアノードへのパスを含むデータアイテム。

o Datastore subscription: A subscription to a stream of datastore node updates.

o データストアサブスクリプション:データストアノード更新のストリームへのサブスクリプション。

o Datastore subtree: A datastore node and all its descendant datastore nodes.

o データストアサブツリー:データストアノードとそのすべての子孫データストアノード。

o On-change subscription: A datastore subscription with updates that are triggered when changes in subscribed datastore nodes are detected.

o 変更時サブスクリプション:サブスクライブされたデータストアノードの変更が検出されたときにトリガーされる更新を含むデータストアサブスクリプション。

o Periodic subscription: A datastore subscription with updates that are triggered periodically according to some time interval.

o 定期的なサブスクリプション:一定の時間間隔に従って定期的にトリガーされる更新を含むデータストアのサブスクリプション。

o Selection filter: Evaluation and/or selection criteria that may be applied against a targeted set of objects.

o 選択フィルター:対象となるオブジェクトのセットに対して適用できる評価および/または選択基準。

o Update record: A representation of one or more datastore node updates. In addition, an update record may contain which type of update led to the datastore node update (e.g., whether the datastore node was added, changed, or deleted). Also included in the update record may be other metadata, such as a subscription ID of the subscription for which the update record was generated. In this document, update records are often also simply referred to as "updates".

o 更新レコード:1つ以上のデータストアノード更新の表現。さらに、更新レコードには、データストアノードの更新につながった更新のタイプ(たとえば、データストアノードが追加、変更、または削除されたかどうか)が含まれる場合があります。また、更新レコードには、更新レコードが生成されたサブスクリプションのサブスクリプションIDなどの他のメタデータが含まれる場合があります。このドキュメントでは、更新レコードは単に「更新」とも呼ばれます。

o Update trigger: A mechanism that determines when an update record needs to be generated.

o 更新トリガー:更新レコードをいつ生成する必要があるかを決定するメカニズム。

o YANG-Push: The subscription and push mechanism for datastore updates that is specified in this document.

o YANG-Push:このドキュメントで指定されているデータストア更新のサブスクリプションおよびプッシュメカニズム。

3. Solution Overview
3. ソリューションの概要

This document specifies a solution that provides a subscription service for updates from a datastore. This solution supports dynamic as well as configured subscriptions to updates of datastore nodes. Subscriptions specify when notification messages (also referred to as "push updates") should be sent and what data to include in update records. Datastore node updates are subsequently pushed from the publisher to the receiver per the terms of the subscription.

このドキュメントでは、データストアからの更新にサブスクリプションサービスを提供するソリューションを指定します。このソリューションは、データストアノードの更新に対する動的サブスクリプションと構成済みサブスクリプションをサポートします。サブスクリプションは、通知メッセージ(「プッシュ更新」とも呼ばれます)を送信するタイミングと、更新レコードに含めるデータを指定します。その後、データストアノードの更新は、サブスクリプションの条件に従ってパブリッシャーからレシーバーにプッシュされます。

3.1. Subscription Model
3.1. サブスクリプションモデル

YANG-Push subscriptions are defined using a YANG data model. This model enhances the subscription model defined in [RFC8639] with capabilities that allow subscribers to subscribe to datastore node updates -- specifically, to specify the update triggers defining when to generate update records as well as what to include in an update record. Key enhancements include:

YANG-Pushサブスクリプションは、YANGデータモデルを使用して定義されます。このモデルは、[RFC8639]で定義されているサブスクリプションモデルを拡張して、サブスクライバーがデータストアノードの更新をサブスクライブできるようにします。具体的には、更新レコードを生成するタイミングと更新レコードに含める内容を定義する更新トリガーを指定できます。主な機能強化は次のとおりです。

o The specification of selection filters that identify targeted YANG datastore nodes and/or datastore subtrees for which updates are to be pushed.

o 更新がプッシュされる対象のYANGデータストアノードまたはデータストアサブツリー、あるいはその両方を識別する選択フィルターの仕様。

o The specification of update policies that contain conditions that trigger the generation and pushing of new update records. There are two types of subscriptions, distinguished by how updates are triggered: periodic and on-change.

o 新しい更新レコードの生成とプッシュをトリガーする条件を含む更新ポリシーの仕様。サブスクリプションには、更新のトリガー方法によって区別される2つのタイプがあります。定期的と変更時です。

* For periodic subscriptions, the update trigger is specified by two parameters that define when updates are to be pushed. These parameters are (1) the period interval with which to report updates and (2) an "anchor-time", i.e., a reference point in time that can be used to calculate at which points in time periodic updates need to be assembled and sent.

* 定期的なサブスクリプションの場合、更新トリガーは、更新をいつプッシュするかを定義する2つのパラメーターによって指定されます。これらのパラメーターは、(1)更新を報告する期間間隔、および(2)「アンカー時間」、つまり、定期的な更新を組み立てる必要がある時点を計算するために使用できる基準時点です。送信されました。

* For on-change subscriptions, an update trigger occurs whenever a change in the subscribed information is detected. The following additional parameters are included:

* 変更時のサブスクリプションの場合、サブスクライブされた情報の変更が検出されるたびに更新トリガーが発生します。以下の追加パラメーターが含まれています。

+ "dampening-period": In an on-change subscription, detected object changes should be sent as quickly as possible. However, it may be undesirable to send a rapid series of object changes. Such behavior has the potential to exhaust resources in the publisher or receiver. In order to protect against this type of scenario, a dampening period MAY be used to specify the interval that has to pass before successive update records for the same subscription are generated for a receiver. The dampening period collectively applies to the set of all datastore nodes selected by a single subscription. This means that when there is a change to one or more subscribed objects, an update record containing those objects is created immediately (when no dampening period is in effect) or at the end of a dampening period (when a dampening period is in fact in effect). If multiple changes to a single object occur during a dampening period, only the value that is in effect at the time when the update record is created is included. The dampening period goes into effect every time the assembly of an update record is completed.

+ "dampening-period":変更時のサブスクリプションでは、検出されたオブジェクトの変更を可能な限り迅速に送信する必要があります。ただし、一連のオブジェクト変更を迅速に送信することは望ましくない場合があります。このような動作は、パブリッシャーまたはレシーバーのリソースを使い果たす可能性があります。このタイプのシナリオから保護するために、減衰期間を使用して、同じサブスクリプションの連続する更新レコードが受信者に対して生成される前に経過する必要がある間隔を指定する場合があります。ダンプニング期間は、単一のサブスクリプションによって選択されたすべてのデータストアノードのセットに集合的に適用されます。つまり、1つ以上のサブスクライブされたオブジェクトに変更があった場合、それらのオブジェクトを含む更新レコードが即時に(ダンプニング期間が有効でない場合)、またはダンプニング期間の終わりに(ダンプニング期間が実際にある場合)作成されます。効果)。ダンプニング期間中に1つのオブジェクトに複数の変更が発生した場合、更新レコードの作成時に有効な値のみが含まれます。ダンプニング期間は、更新レコードのアセンブリが完了するたびに有効になります。

+ "change-type": This parameter can be used to reduce the types of datastore changes for which updates are sent (e.g., you might only send an update when an object is created or deleted, but not when an object value changes).

+ "change-type":このパラメーターは、更新が送信されるデータストア変更のタイプを減らすために使用できます(たとえば、オブジェクトが作成または削除されたときにのみ更新を送信し、オブジェクトの値が変更されたときは送信しない場合があります)。

+ "sync-on-start": This parameter defines whether or not a complete "push-update" (Section 3.7) of all subscribed data will be sent at the beginning of a subscription. Such early synchronization establishes the frame of reference for subsequent updates.

+ "sync-on-start":このパラメーターは、すべてのサブスクライブされたデータの完全な "push-update"(セクション3.7)がサブスクリプションの開始時に送信されるかどうかを定義します。このような早期同期により、後続の更新の参照フレームが確立されます。

o An encoding (using anydata) for the contents of periodic and on-change push updates.

o 定期的および変更時のプッシュ更新のコンテンツのエンコーディング(anydataを使用)。

3.2. Negotiation of Subscription Policies
3.2. サブスクリプションポリシーの交渉

A dynamic subscription request SHOULD be declined if a publisher determines that it may be unable to provide update records meeting the terms of an "establish-subscription" or "modify-subscription" RPC request. In this case, a subscriber may quickly follow up with a new RPC request using different parameters.

パブリッシャーが「確立サブスクリプション」または「変更サブスクリプション」RPC要求の条件に一致する更新レコードを提供できない可能性があると判断した場合、動的サブスクリプション要求は拒否されるべきです(SHOULD)。この場合、サブスクライバーは、さまざまなパラメーターを使用して新しいRPC要求をすぐにフォローアップできます。

Random guessing of different parameters by a subscriber is to be discouraged. Therefore, in order to minimize the number of subscription iterations between subscriber and publisher, a dynamic subscription supports a simple negotiation between subscribers and publishers for subscription parameters. This negotiation is in the form of supplemental information that should be inserted into error responses to a failed RPC request. This returned error response information, when considered, should increase the likelihood of success for subsequent RPC requests. Such hints include suggested periodic time intervals, acceptable dampening periods, and size estimates for the number of objects that would be returned from a proposed selection filter. However, there are no guarantees that subsequent requests that consider these hints will be accepted.

サブスクライバーによるさまざまなパラメーターのランダムな推測は推奨されません。したがって、サブスクライバーとパブリッシャー間のサブスクリプションの反復回数を最小限に抑えるために、動的サブスクリプションは、サブスクリプションパラメーターについてサブスクライバーとパブリッシャー間の単純なネゴシエーションをサポートします。このネゴシエーションは、失敗したRPC要求に対するエラー応答に挿入する必要がある補足情報の形式です。このエラー応答情報を考慮すると、後続のRPC要求が成功する可能性が高くなります。このようなヒントには、提案された定期的な時間間隔、許容可能な減衰期間、および提案された選択フィルターから返されるオブジェクトの数のサイズ推定が含まれます。ただし、これらのヒントを考慮した後続のリクエストが受け入れられる保証はありません。

3.3. On-Change Considerations
3.3. 変更時の考慮事項

On-change subscriptions allow receivers to receive updates whenever changes to targeted objects occur. As such, on-change subscriptions are particularly effective for data that changes infrequently but for which applications need to be quickly notified, with minimal delay, whenever a change does occur.

変更時のサブスクリプションを使用すると、受信者は、対象のオブジェクトに変更が発生するたびに更新を受信できます。したがって、変更時のサブスクリプションは、頻繁に変更されないが、変更が発生するたびに最小限の遅延でアプリケーションに迅速に通知する必要があるデータに対して特に効果的です。

On-change subscriptions tend to be more difficult to implement than periodic subscriptions. Accordingly, on-change subscriptions may not be supported by all implementations or for every object.

変更時のサブスクリプションは、定期的なサブスクリプションよりも実装が難しくなる傾向があります。したがって、変更時のサブスクリプションは、すべての実装またはすべてのオブジェクトでサポートされているとは限りません。

Whether or not to accept or reject on-change subscription requests when the scope of the subscription contains objects for which on-change is not supported is up to the publisher implementation. A publisher MAY accept an on-change subscription even when the scope of the subscription contains objects for which on-change is not supported. In that case, updates are sent only for those objects within the scope of the subscription that do support on-change updates, whereas other objects are excluded from update records, even if their values change. In order for a subscriber to determine whether objects support on-change subscriptions, objects are marked accordingly on a publisher. Accordingly, when subscribing, it is the responsibility of the subscriber to ensure that it is aware of which objects support on-change and which do not. For more on how objects are so marked, see Section 3.10.

サブスクリプションのスコープに変更時がサポートされていないオブジェクトが含まれている場合に、変更時のサブスクリプション要求を受け入れるか拒否するかは、パブリッシャーの実装次第です。パブリッシャーは、サブスクリプションのスコープに変更時がサポートされていないオブジェクトが含まれている場合でも、変更時のサブスクリプションを受け入れることができます(MAY)。その場合、更新は、変更時の更新をサポートするサブスクリプションのスコープ内のオブジェクトに対してのみ送信されますが、他のオブジェクトは、値が変更された場合でも更新レコードから除外されます。サブスクライバーがオブジェクトが変更時サブスクリプションをサポートするかどうかを判断するために、オブジェクトはパブリッシャーで適宜マークされます。したがって、サブスクライブする場合、サブスクライバは、どのオブジェクトが変更時にサポートされ、どのオブジェクトがサポートされていないかを認識していることを確認する必要があります。オブジェクトがどのようにマークされるかについての詳細は、セクション3.10を参照してください。

Alternatively, a publisher MAY decide to simply reject an on-change subscription if the scope of the subscription contains objects for which on-change is not supported. In the case of a configured subscription, the publisher MAY suspend the subscription.

あるいは、サブスクリプションのスコープに変更時がサポートされていないオブジェクトが含まれている場合、パブリッシャーは変更時のサブスクリプションを単に拒否することを決定してもよい(MAY)。構成されたサブスクリプションの場合、パブリッシャーはサブスクリプションを一時停止する場合があります。

To avoid flooding receivers with repeated updates for subscriptions containing fast-changing objects or objects with oscillating values, an on-change subscription allows for the definition of a dampening period. Once an update record for a given object is generated, no other updates for this particular subscription will be created until the end of the dampening period. Values sent at the end of the dampening period are the values that are current at the end of the dampening period of all changed objects. Changed objects include those objects that were deleted or newly created during that dampening period. If an object has returned to its original value (or even has been created and then deleted) during the dampening period, that value (and not the interim change) will still be sent. This will indicate that churn is occurring on that object.

急速に変化するオブジェクトまたは振動する値を持つオブジェクトを含むサブスクリプションの繰り返し更新によるレシーバーのフラッディングを回避するために、変更時のサブスクリプションでは、ダンピング期間を定義できます。特定のオブジェクトの更新レコードが生成されると、ダンプニング期間が終了するまで、この特定のサブスクリプションの他の更新は作成されません。ダンプニング期間の終わりに送信される値は、変更されたすべてのオブジェクトのダンプニング期間の終わりに現在の値です。変更されたオブジェクトには、そのダンプニング期間中に削除または新しく作成されたオブジェクトが含まれます。ダンプニング期間中にオブジェクトが元の値に戻った場合(または作成されてから削除された場合)、その値(および中間の変更ではない)は引き続き送信されます。これは、そのオブジェクトでチャーンが発生していることを示します。

On-change subscriptions can be refined to let users subscribe only to certain types of changes. For example, a subscriber might only want object creations and deletions, but not modifications of object values.

変更時のサブスクリプションを改良して、ユーザーが特定のタイプの変更のみをサブスクライブできるようにすることができます。たとえば、サブスクライバはオブジェクトの作成と削除のみを希望し、オブジェクト値の変更は希望しない場合があります。

Putting it all together, the conceptual process for creating an update record as part of an on-change subscription is as follows:

以上をまとめると、変更時サブスクリプションの一部として更新レコードを作成するための概念的なプロセスは次のとおりです。

1. Just before a change, or at the start of a dampening period, evaluate any filtering and any access control rules to ensure that a receiver is authorized to view all subscribed datastore nodes (filtering out any nodes for which this is not the case). The result is a set "A" of datastore nodes and subtrees.

1. 変更の直前、またはダンプニング期間の開始時に、すべてのフィルタリングとアクセス制御ルールを評価して、受信者がすべてのサブスクライブされたデータストアノードを表示することを許可されていることを確認します(これに該当しないノードを除外します)。結果は、データストアノードとサブツリーのセット "A"です。

2. Just after a change, or at the end of a dampening period, evaluate any filtering and any (possibly new) access control rules. The result is a set "B" of datastore nodes and subtrees.

2. 変更の直後、またはダンプニング期間の最後に、フィルタリングと(おそらく新しい)アクセス制御ルールを評価します。結果は、データストアノードとサブツリーのセット「B」です。

3. Construct an update record, which takes the form of a YANG Patch record [RFC8072] for going from A to B.

3. AからBに移動するためのYANGパッチレコード[RFC8072]の形式を取る更新レコードを作成します。

4. If there were any changes made between A and B that canceled each other out, insert into the YANG Patch record the last change made, even if the new value is no different from the original value (since changes that were made in the interim were canceled out). If the changes involve creating a new datastore node and then deleting it, the YANG Patch record will indicate the deletion of the datastore node. Similarly, if the changes involve deleting a new datastore node and then recreating it, the YANG Patch record will indicate the creation of the datastore node.

4. AとBの間で相互にキャンセルされた変更があった場合、新しい値が元の値と変わらなくても、最後の変更がYANGパッチレコードに挿入されます(その間に行われた変更がキャンセルされたため)。でる)。変更に新しいデータストアノードの作成と削除が含まれる場合、YANGパッチレコードはデータストアノードの削除を示します。同様に、変更が新しいデータストアノードの削除と再作成を伴う場合、YANGパッチレコードはデータストアノードの作成を示します。

5. If the resulting YANG Patch record is non-empty, send it to the receiver.

5. 結果のYANGパッチレコードが空でない場合は、それを受信者に送信します。

Note: In cases where a subscriber wants to have separate dampening periods for different objects, the subscriber has the option to create multiple subscriptions with different selection filters.

注:サブスクライバーが異なるオブジェクトに対して個別のダンプニング期間を設定する場合、サブスクライバーは、異なる選択フィルターを使用して複数のサブスクリプションを作成することができます。

3.4. Reliability Considerations
3.4. 信頼性に関する考慮事項

A subscription to updates from a datastore is intended to obviate the need for polling. However, in order to do so, it is critical that subscribers can rely on the subscription and have confidence that they will indeed receive the subscribed updates without having to worry about updates being silently dropped. In other words, a subscription constitutes a promise on the side of the publisher to provide the receivers with updates per the terms of the subscription.

データストアからの更新のサブスクリプションは、ポーリングの必要性を取り除くことを目的としています。ただし、そのためには、サブスクライバーがサブスクリプションに依存し、更新が黙って削除されることを心配する必要なく、サブスクライブされた更新を実際に受信できることを確信できることが重要です。言い換えると、サブスクリプションは、サブスクリプションの条件ごとに更新を受信者に提供するという、パブリッシャー側の約束を構成します。

Now, there are many reasons why a publisher may at some point no longer be able to fulfill the terms of the subscription, even if the subscription had been initiated in good faith. For example, the volume of datastore nodes may be larger than anticipated, the interval may prove too short to send full updates in rapid succession, or an internal problem may prevent objects from being collected. For this reason, the solution defined in this document (1) mandates that a publisher notify receivers immediately and reliably whenever it encounters a situation in which it is unable to keep the terms of the subscription and (2) provides the publisher with the option to suspend the subscription in such a case. This includes indicating the fact that an update is incomplete as part of a "push-update" or "push-change-update" notification, as well as emitting a "subscription-suspended" notification as applicable. This is described further in Section 3.11.1.

現在、サブスクリプションが誠実に開始されたとしても、パブリッシャーがサブスクリプションの条件を満たせなくなる場合がある理由はたくさんあります。たとえば、データストアノードのボリュームが予想よりも大きい、間隔が短すぎて完全な更新を連続して送信できない、または内部の問題によりオブジェクトが収集されない場合があります。このため、このドキュメントで定義されているソリューションでは、(1)パブリッシャーがサブスクリプションの条件を維持できない状況が発生した場合は常に、パブリッシャーが受信者に直ちに確実に通知すること、および(2)パブリッシャーに次のオプションを提供することが義務付けられています。このような場合は、サブスクリプションを一時停止してください。これには、 "push-update"または "push-change-update"通知の一部として更新が不完全であることを示すこと、および必要に応じて "subscription-suspended"通知を発行することが含まれます。これについては、3.11.1で詳しく説明します。

A publisher SHOULD reject a request for a subscription if it is unlikely that the publisher will be able to fulfill the terms of that subscription request. In such cases, it is preferable to have a subscriber request a less resource-intensive subscription than to deal with frequently degraded behavior.

パブリッシャーがサブスクリプション要求の条件を満たせる可能性が低い場合、パブリッシャーはサブスクリプションの要求を拒否する必要があります。このような場合、頻繁に低下する動作に対処するよりも、リソースをあまり消費しないサブスクリプションをサブスクライバーに要求することをお勧めします。

The solution builds on [RFC8639]. As defined therein, any loss of an underlying transport connection will be detected and result in subscription termination (in the case of dynamic subscriptions) or suspension (in the case of configured subscriptions), ensuring that situations where the loss of update notifications would go unnoticed will not occur.

ソリューションは[RFC8639]に基づいています。そこに定義されているように、基になるトランスポート接続の損失が検出され、サブスクリプションの終了(動的サブスクリプションの場合)または一時停止(構成済みサブスクリプションの場合)が発生し、更新通知の損失が気付かれない状況を確実にします発生しません。

3.5. Data Encodings
3.5. データエンコーディング
3.5.1. Periodic Subscriptions
3.5.1. 定期購読

In a periodic subscription, the data included as part of an update record corresponds to data that could have been read using a retrieval operation.

定期的なサブスクリプションでは、更新レコードの一部として含まれるデータは、取得操作を使用して読み取られた可能性のあるデータに対応します。

3.5.2. On-Change Subscriptions
3.5.2. 変更時のサブスクリプション

In an on-change subscription, update records need to indicate not only values of changed datastore nodes but also the types of changes that occurred since the last update. Therefore, encoding rules for data in on-change updates will generally follow YANG Patch operations as specified in [RFC8072]. The YANG Patch operations will describe what needs to be applied to the earlier state reported by the preceding update in order to result in the now-current state. Note that objects referred to in an update are not limited to configuration data but can include any objects (including operational data), whereas [RFC8072] patches apply only to configuration data in configuration datastores.

変更時のサブスクリプションでは、更新レコードは、変更されたデータストアノードの値だけでなく、最後の更新以降に発生した変更のタイプも示す必要があります。したがって、変更時の更新におけるデータのエンコーディングルールは、[RFC8072]で指定されているように、通常、YANGパッチ操作に従います。 YANGパッチ操作は、現在の状態になるために、前の更新で報告された以前の状態に何を適用する必要があるかを説明します。 [RFC8072]パッチは構成データストアの構成データにのみ適用されるのに対し、更新で参照されるオブジェクトは構成データに限定されず、任意のオブジェクト(運用データを含む)を含むことができることに注意してください。

A publisher indicates the type of change to a datastore node using the different YANG Patch operations: the "create" operation is used for newly created objects (except entries in a user-ordered list), the "delete" operation is used for deleted objects (including in user-ordered lists), the "replace" operation is used when only the object value changes, the "insert" operation is used when a new entry is inserted in a list, and the "move" operation is used when an existing entry in a user-ordered list is moved.

パブリッシャーは、さまざまなYANGパッチ操作を使用してデータストアノードへの変更のタイプを示します。「作成」操作は新しく作成されたオブジェクト(ユーザーが指定したリストのエントリを除く)に使用され、「削除」操作は削除されたオブジェクトに使用されます(ユーザー順リストを含む)、「replace」操作はオブジェクト値のみが変更されたときに使用され、「insert」操作は新しいエントリがリストに挿入されたときに使用され、「move」操作はユーザー順リストの既存のエントリが移動されます。

However, a patch must be able to do more than just describe the delta from the previous state to the current state. As per Section 3.3, it must also be able to identify whether transient changes have occurred on an object during a dampening period. To support this, it is valid to encode a YANG Patch operation so that its application would result in no change between the previous state and the current state. This indicates that some churn has occurred on the object. An example of this would be a patch that indicates a "create" operation for a datastore node where the receiver believes one already exists or a "replace" operation that replaces a previous value with the same value. Note that this means that the "create" and "delete" errors as described in [RFC8072], Section 2.5 are not errors in the case of YANG-Push (i.e., they are considered valid operations for YANG-Push).

ただし、パッチは、以前の状態から現在の状態へのデルタを記述する以上のことができる必要があります。セクション3.3のとおり、ダンピング期間中にオブジェクトに一時的な変更が発生したかどうかを識別できなければなりません。これをサポートするには、YANGパッチ操作をエンコードして、その適用によって前の状態と現在の状態が変化しないようにすることが有効です。これは、オブジェクトに何らかのチャーンが発生したことを示しています。これの例は、受信者がすでに存在しているとデータストアノードが「作成」する操作を示すパッチ、または以前の値を同じ値に置き換える「置換」操作です。これは、[RFC8072]のセクション2.5で説明されている「作成」および「削除」エラーは、YANG-Pushの場合のエラーではないことを意味します(つまり、YANG-Pushの有効な操作と見なされます)。

3.6. Defining the Selection with a Datastore
3.6. データストアを使用した選択の定義

A subscription must specify both the selection filters and the datastore against which these selection filters will be applied. This information is used to choose and subsequently push data from the publisher's datastore to the receivers.

サブスクリプションでは、選択フィルターと、これらの選択フィルターが適用されるデータストアの両方を指定する必要があります。この情報は、パブリッシャーのデータストアからレシーバーにデータを選択してプッシュするために使用されます。

Only a single selection filter can be applied to a subscription at a time. An RPC request proposing a new selection filter replaces any existing filter. The following selection filter types are included in the YANG-Push data model and may be applied against a datastore:

サブスクリプションに一度に適用できる選択フィルターは1つだけです。新しい選択フィルターを提案するRPC要求は、既存のフィルターを置き換えます。 YANG-Pushデータモデルには次の選択フィルタータイプが含まれており、データストアに対して適用できます。

o subtree: A subtree selection filter identifies one or more datastore subtrees. When specified, update records will only come from the datastore nodes of selected datastore subtree(s). The syntax and semantics correspond to those specified in [RFC6241], Section 6.

o サブツリー:サブツリー選択フィルターは、1つ以上のデータストアサブツリーを識別します。指定した場合、更新レコードは、選択したデータストアサブツリーのデータストアノードからのみ取得されます。構文とセマンティクスは、[RFC6241]のセクション6で指定されているものに対応しています。

o xpath: An "xpath" selection filter is an XPath expression that returns a node set. (XPath is a query language for selecting nodes in an XML document; see [XPATH] for details.) When specified, updates will only come from the selected datastore nodes.

o xpath:「xpath」選択フィルターは、ノードセットを返すXPath式です。 (XPathは、XMLドキュメントでノードを選択するためのクエリ言語です。詳細については、[XPATH]を参照してください。)指定すると、更新は選択したデータストアノードからのみ行われます。

These filters are intended to be used as selectors that define which objects are within the scope of a subscription. A publisher MUST support at least one type of selection filter.

これらのフィルターは、サブスクリプションのスコープ内にあるオブジェクトを定義するセレクターとして使用することを目的としています。パブリッシャーは、少なくとも1つのタイプの選択フィルターをサポートする必要があります。

XPath itself provides powerful filtering constructs, and care must be used in filter definition. Consider an XPath filter that only passes a datastore node when an interface is up. It is up to the receiver to understand the implications of the presence or absence of objects in each update.

XPath自体は強力なフィルタリング構成を提供し、フィルター定義では注意が必要です。インターフェースが稼働している場合にのみデータストアノードを渡すXPathフィルターについて考えます。各更新におけるオブジェクトの存在または不在の影響を理解するのは、受信者次第です。

When the set of selection-filtering criteria is applied for a periodic subscription, these criteria are applied whenever a periodic update record is constructed, and only datastore nodes that pass the filter and to which a receiver has access are provided to that receiver. If the same filtering criteria are applied to an on-change subscription, only the subset of those datastore nodes supporting on-change is provided. A datastore node that doesn't support on-change is never sent as part of an on-change subscription's "push-update" or "push-change-update" (Section 3.7).

一連の選択フィルタリング基準が定期的なサブスクリプションに適用されると、定期的な更新レコードが作成されるたびにこれらの基準が適用され、フィルターを通過し、受信者がアクセスできるデータストアノードのみがその受信者に提供されます。変更時のサブスクリプションに同じフィルタリング基準が適用される場合、変更時をサポートするデータストアノードのサブセットのみが提供されます。変更時をサポートしていないデータストアノードは、変更時のサブスクリプションの「push-update」または「push-change-update」(セクション3.7)の一部として送信されることはありません。

3.7. Streaming Updates
3.7. ストリーミング更新

Contrary to traditional data retrieval requests, datastore subscription enables an unbounded series of update records to be streamed over time. Two generic YANG notifications for update records have been defined for this scenario: "push-update" and "push-change-update".

従来のデータ取得リクエストとは異なり、データストアサブスクリプションでは、時間の制限のない一連の更新レコードをストリーミングできます。このシナリオでは、更新レコードの2つの一般的なYANG通知が定義されています。「push-update」と「push-change-update」です。

A "push-update" notification defines a complete, filtered update of the datastore per the terms of a subscription. This type of YANG notification is used for continuous updates of periodic subscriptions. A "push-update" notification can also be used for the on-change subscriptions in two cases. First, it MUST be used as the initial "push-update" if there is a need to synchronize the receiver at the start of a new subscription. Second, it MAY be sent if the publisher later chooses to resync an on-change subscription. The "push-update" update record contains an instantiated datastore subtree with all of the subscribed contents. The content of the update record is equivalent to the contents that would be obtained had the same data been explicitly retrieved using a datastore retrieval operation using the same transport with the same filters applied.

「push-update」通知は、サブスクリプションの条件ごとに、データストアの完全なフィルタリングされた更新を定義します。このタイプのYANG通知は、定期的なサブスクリプションの継続的な更新に使用されます。 「プッシュ更新」通知は、2つのケースで変更時のサブスクリプションにも使用できます。まず、新しいサブスクリプションの開始時にレシーバーを同期する必要がある場合は、最初の「プッシュ更新」として使用する必要があります。次に、パブリッシャーが後で変更時のサブスクリプションを再同期することを選択した場合に送信される場合があります。 「push-update」更新レコードには、サブスクライブされたすべてのコンテンツを含むインスタンス化されたデータストアサブツリーが含まれています。更新レコードの内容は、同じフィルターを適用した同じトランスポートを使用するデータストア取得操作を使用して同じデータが明示的に取得された場合に取得される内容と同等です。

A "push-change-update" notification is the most common type of update for on-change subscriptions. The update record in this case contains the set of changes that datastore nodes have undergone since the last notification message. In other words, this indicates which datastore nodes have been created, have been deleted, or have had changes to their values. In cases where multiple changes have occurred over the course of a dampening period and the object has not been deleted, the object's most current value is reported. (In other words, for each object, only one change is reported, not its entire history. Doing so would defeat the purpose of the dampening period.)

「push-change-update」通知は、変更時サブスクリプションの最も一般的なタイプの更新です。この場合の更新レコードには、最後の通知メッセージ以降にデータストアノードが行った一連の変更が含まれています。つまり、これは、どのデータストアノードが作成されたか、削除されたか、またはそれらの値が変更されたかを示します。ダンプニング期間中に複数の変更が発生し、オブジェクトが削除されていない場合、オブジェクトの最新の値が報告されます。 (つまり、オブジェクトごとに、履歴全体ではなく、1つの変更のみが報告されます。これを行うと、ダンプニング期間の目的が無効になります。)

"push-update" and "push-change-update" are encoded and placed in notification messages and are ultimately queued for egress over the specified transport.

「push-update」と「push-change-update」はエンコードされて通知メッセージに入れられ、最終的に指定されたトランスポートを介した出力のためにキューに入れられます。

Figure 1 provides an example of a notification message for a subscription tracking the operational status of a single Ethernet interface (per [RFC8343]). This notification message is encoded XML [W3C.REC-xml-20081126] over the Network Configuration Protocol (NETCONF) as per [RFC8640].

図1は、単一のイーサネットインターフェイスの動作ステータスを追跡するサブスクリプションの通知メッセージの例を示しています([RFC8343]による)。この通知メッセージは、[RFC8640]に従って、ネットワーク構成プロトコル(NETCONF)を介してエンコードされたXML [W3C.REC-xml-20081126]です。

  <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
   <eventTime>2017-10-25T08:00:11.22Z</eventTime>
   <push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
     <id>1011</id>
     <datastore-contents>
        <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
         <interface>
           <name>eth0</name>
           <oper-status>up</oper-status>
         </interface>
       </interfaces>
     </datastore-contents>
   </push-update>
  </notification>
        

Figure 1: Push Example

図1:プッシュの例

Figure 2 provides an example of an on-change notification message for the same subscription.

図2は、同じサブスクリプションの変更時通知メッセージの例を示しています。

  <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
   <eventTime>2017-10-25T08:22:33.44Z</eventTime>
   <push-change-update
        xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
     <id>89</id>
     <datastore-changes>
       <yang-patch>
         <patch-id>0</patch-id>
         <edit>
           <edit-id>edit1</edit-id>
           <operation>replace</operation>
           <target>/ietf-interfaces:interfaces</target>
           <value>
             <interfaces
                  xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
               <interface>
                 <name>eth0</name>
                 <oper-status>down</oper-status>
               </interface>
             </interfaces>
           </value>
         </edit>
       </yang-patch>
     </datastore-changes>
   </push-change-update>
  </notification>
        

Figure 2: Push Example for an On-Change Notification Message

図2:変更時通知メッセージのプッシュの例

Of note in the above example is the "patch-id" with a value of "0". Per [RFC8072], the "patch-id" is an arbitrary string. With YANG-Push, the publisher SHOULD put into the "patch-id" a counter starting at "0" that increments with every "push-change-update" generated for a subscription. If used as a counter, this counter MUST be reset to "0" any time a resynchronization occurs (i.e., with the sending of a "push-update"). Also, if used as a counter, the counter MUST be reset to "0" after passing a maximum value of "4294967295" (i.e., the maximum value that can be represented using the uint32 data type). Such a mechanism allows easy identification of lost or out-of-sequence update records.

上記の例で注目すべきは、値が「0」の「patch-id」です。 [RFC8072]によると、「patch-id」は任意の文字列です。 YANG-Pushを使用する場合、パブリッシャーは「patch-id」に、サブスクリプションに対して生成された「push-change-update」ごとに増分する「0」から始まるカウンターを配置する必要があります(SHOULD)。カウンターとして使用する場合、このカウンターは再同期が発生するたびに(つまり、「プッシュ更新」を送信して)「0」にリセットする必要があります。また、カウンターとして使用する場合、カウンターは「4294967295」の最大値(つまり、uint32データ型を使用して表すことができる最大値)を渡した後に「0」にリセットする必要があります。このようなメカニズムにより、失われた、または順序が正しくない更新レコードを簡単に識別できます。

3.8. Subscription Management
3.8. サブスクリプション管理

The RPCs defined in [RFC8639] have been enhanced to support datastore subscription negotiation. Also, new error codes have been added that are able to indicate why a datastore subscription attempt has failed, along with new yang-data that MAY be used to include details on input parameters that might result in a successful subsequent RPC invocation.

[RFC8639]で定義されているRPCは、データストアサブスクリプションネゴシエーションをサポートするように拡張されています。また、データストアサブスクリプションの試行が失敗した理由を示すことができる新しいエラーコードと、後続のRPC呼び出しを成功させる可能性のある入力パラメーターの詳細を含めるために使用できる新しいyang-dataが追加されました。

The establishment or modification of a datastore subscription can be rejected for multiple reasons, including a subtree request that is too large or the inability of the publisher to push update records as frequently as requested. In such cases, no subscription is established. Instead, a subscription result that includes the reason for the failure is returned as part of the RPC response. As part of this response, a set of alternative subscription parameters MAY be returned that would likely have resulted in acceptance of the subscription request. The subscriber may consider including such parameters in future subscription attempts.

データストアサブスクリプションの確立または変更は、サブツリー要求が大きすぎる、またはパブリッシャーが更新レコードを要求された頻度でプッシュできないなど、さまざまな理由で拒否される可能性があります。このような場合、サブスクリプションは確立されません。代わりに、失敗の理由を含むサブスクリプション結果がRPC応答の一部として返されます。この応答の一部として、サブスクリプション要求の受け入れにつながる可能性が高い代替サブスクリプションパラメーターのセットが返される場合があります。サブスクライバーは、将来のサブスクリプションの試行にそのようなパラメーターを含めることを検討する場合があります。

In the case of a rejected request for establishment of a datastore subscription, if there are hints, the hints SHOULD be transported in a yang-data "establish-subscription-datastore-error-info" container inserted into the RPC error response, in lieu of the "establish-subscription-stream-error-info" that is inserted in the case of a stream subscription.

データストアサブスクリプションの確立要求が拒否された場合、ヒントがある場合、ヒントは、RPCエラー応答に挿入されたyang-data "establish-subscription-datastore-error-info"コンテナで転送する必要があります(代わりに)。ストリームサブスクリプションの場合に挿入される「establish-subscription-stream-error-info」の例。

Figure 3 shows a tree diagram for "establish-subscription-datastore-error-info". All tree diagrams used in this document follow the notation defined in [RFC8340].

図3は、「establish-subscription-datastore-error-info」のツリー図を示しています。このドキュメントで使用されるすべてのツリー図は、[RFC8340]で定義された表記に従います。

          yang-data establish-subscription-datastore-error-info
            +--ro establish-subscription-datastore-error-info
               +--ro reason?                identityref
               +--ro period-hint?           centiseconds
               +--ro filter-failure-hint?   string
               +--ro object-count-estimate? uint32
               +--ro object-count-limit?    uint32
               +--ro kilobytes-estimate?    uint32
               +--ro kilobytes-limit?       uint32
        

Figure 3: "establish-subscription-datastore-error-info" Tree Diagram Similarly, in the case of a rejected request for modification of a datastore subscription, if there are hints, the hints SHOULD be transported in a yang-data "modify-subscription-datastore-error-info" container inserted into the RPC error response, in lieu of the "modify-subscription-stream-error-info" that is inserted in the case of a stream subscription.

図3:「establish-subscription-datastore-error-info」ツリー図同様に、データストアサブスクリプションの変更要求が拒否された場合、ヒントがある場合、ヒントはyang-data「modify-ストリームサブスクリプションの場合に挿入される「modify-subscription-stream-error-info」の代わりに、RPCエラー応答に挿入されるsubscription-datastore-error-info」コンテナ。

Figure 4 shows a tree diagram for "modify-subscription-datastore-error-info".

図4は、「modify-subscription-datastore-error-info」のツリー図を示しています。

          yang-data modify-subscription-datastore-error-info
            +--ro modify-subscription-datastore-error-info
               +--ro reason?                identityref
               +--ro period-hint?           centiseconds
               +--ro filter-failure-hint?   string
               +--ro object-count-estimate? uint32
               +--ro object-count-limit?    uint32
               +--ro kilobytes-estimate?    uint32
               +--ro kilobytes-limit?       uint32
        

Figure 4: "modify-subscription-datastore-error-info" Tree Diagram

図4:「modify-subscription-datastore-error-info」ツリー図

3.9. Receiver Authorization
3.9. 受信者の承認

A receiver of subscription data MUST only be sent updates for which it has proper authorization. A publisher MUST ensure that no unauthorized data is included in push updates. To do so, it needs to apply all corresponding checks applicable at the time of a specific pushed update and, if necessary, silently remove any unauthorized data from datastore subtrees. This enables YANG data that is pushed based on subscriptions to be authorized in a way that is equivalent to a regular data retrieval ("get") operation.

サブスクリプションデータの受信者には、適切な権限を持つ更新のみを送信する必要があります。パブリッシャーは、無許可のデータがプッシュ更新に含まれていないことを確認する必要があります。そのためには、特定のプッシュされた更新時に該当するすべての対応するチェックを適用し、必要に応じて、データストアサブツリーから無許可のデータをサイレントに削除する必要があります。これにより、サブスクリプションに基づいてプッシュされたYANGデータが、通常のデータ取得( "get")操作と同等の方法で承認されるようになります。

Each "push-update" and "push-change-update" MUST have access control applied, as depicted in Figure 5. This includes validating that read access is permitted for any new objects selected since the last notification message was sent to a particular receiver. A publisher MUST silently omit data nodes from the results that the client is not authorized to see. To accomplish this, implementations SHOULD apply the conceptual authorization model of [RFC8341], specifically Section 3.2.4, extended to apply analogously to data nodes included in notifications, not just <rpc-reply> messages sent in response to <get> and <get-config> requests.

図5に示すように、「push-update」および「push-change-update」にはそれぞれアクセス制御を適用する必要があります。これには、最後の通知メッセージが特定の受信者に送信されてから選択されたすべての新しいオブジェクトに対する読み取りアクセスが許可されていることの検証が含まれます。パブリッシャーは、クライアントが参照することを許可されていない結果から、データノードをサイレントに除外する必要があります。これを達成するために、実装は[RFC8341]の概念承認モデル、特にセクション3.2.4を適用して、<get>および<に応答して送信される<rpc-reply>メッセージだけでなく、通知に含まれるデータノードにも同様に適用するように拡張する必要があります(SHOULD)。 get-config>リクエスト。

                         +-----------------+      +--------------------+
     push-update or -->  | datastore node  |  yes | add datastore node |
    push-change-update   | access allowed? | ---> | to update record   |
                         +-----------------+      +--------------------+
        

Figure 5: Access Control for Push Updates

図5:プッシュ更新のアクセス制御

A publisher MUST allow for the possibility that a subscription's selection filter references nonexistent data or data that a receiver is not allowed to access. Such support permits a receiver the ability to monitor the entire lifecycle of some datastore tree without needing to explicitly enumerate every individual datastore node. If, after access control has been applied, there are no objects remaining in an update record, then the effect varies given if the subscription is a periodic or on-change subscription. For a periodic subscription, an empty "push-update" notification MUST be sent, so that clients do not get confused into thinking that an update was lost. For an on-change subscription, a "push-update" notification MUST NOT be sent, so that clients remain unaware of changes made to nodes they don't have read-access for. By the same token, changes to objects that are filtered MUST NOT affect any dampening intervals.

パブリッシャーは、サブスクリプションの選択フィルターが存在しないデータまたは受信者がアクセスを許可されていないデータを参照する可能性を考慮しなければなりません(MUST)。このようなサポートにより、レシーバーは個々のデータストアノードを明示的に列挙する必要なく、一部のデータストアツリーのライフサイクル全体を監視できます。アクセス制御が適用された後、更新レコードにオブジェクトが残っていない場合、サブスクリプションが定期的または変更時のサブスクリプションであるかどうかによって、影響は異なります。定期的なサブスクリプションの場合、空の「push-update」通知を送信する必要があります。これにより、クライアントは、更新が失われたと考えて混乱することはありません。変更時のサブスクリプションの場合、「プッシュ更新」通知を送信しないでください。これにより、クライアントは、読み取りアクセス権のないノードに加えられた変更を認識できなくなります。同様に、フィルタリングされたオブジェクトへの変更は、ダンプニング間隔に影響を与えてはなりません。

A publisher MAY choose to reject an "establish-subscription" request that selects nonexistent data or data that a receiver is not allowed to access. The error identity "unchanging-selection" SHOULD be returned as the reason for the rejection. In addition, a publisher MAY choose to terminate a dynamic subscription or suspend a configured receiver when the authorization privileges of a receiver change or the access controls for subscribed objects change. In that case, the publisher SHOULD include the error identity "unchanging-selection" as the reason when sending the "subscription-terminated" or "subscription-suspended" notification, respectively. Such a capability enables the publisher to avoid having to support continuous and total filtering of a subscription's content for every update record. It also reduces the possibility of leakage of access-controlled objects.

パブリッシャは、存在しないデータまたは受信者がアクセスを許可されていないデータを選択する「確立サブスクリプション」リクエストを拒否することを選択できます。エラーID「unchangeing-selection」は、拒否の理由として返される必要があります。さらに、パブリッシャーは、レシーバーの許可特権が変更されたとき、またはサブスクライブされたオブジェクトのアクセス制御が変更されたときに、動的サブスクリプションを終了するか、構成済みレシーバーを中断することを選択できます(MAY)。その場合、パブリッシャーは、「サブスクリプション終了」または「サブスクリプション一時停止」通知を送信する際の理由として、それぞれ「unchangeing-selection」というエラーIDを含める必要があります。このような機能により、パブリッシャーは、更新レコードごとにサブスクリプションのコンテンツの継続的かつ完全なフィルタリングをサポートする必要がなくなります。また、アクセス制御されたオブジェクトの漏洩の可能性を減らします。

If read access into previously accessible nodes has been lost due to a receiver permissions change, this SHOULD be reported as a patch "delete" operation for on-change subscriptions. If not capable of handling such receiver permission changes with such a "delete", publisher implementations MUST force dynamic subscription re-establishment or configured subscription reinitialization so that appropriate filtering is installed.

以前にアクセス可能なノードへの読み取りアクセスがレシーバーのアクセス許可の変更により失われた場合、これは変更時のサブスクリプションのパッチ「削除」操作として報告する必要があります(SHOULD)。このような「削除」でこのようなレシーバー許可の変更を処理できない場合、パブリッシャーの実装は動的サブスクリプションの再確立または構成されたサブスクリプションの再初期化を強制して、適切なフィルタリングがインストールされるようにする必要があります。

3.10. On-Change Notifiable Datastore Nodes
3.10. 変更時の通知可能なデータストアノード

In some cases, a publisher supporting on-change notifications may not be able to push on-change updates for some object types. Reasons for this might be that the value of the datastore node changes frequently (e.g., the in-octets counter as defined in [RFC8343]), small object changes are frequent and meaningless (e.g., a temperature gauge changing 0.1 degrees), or the implementation is not capable of on-change notification for a particular object.

場合によっては、変更時通知をサポートするパブリッシャーが、一部のオブジェクトタイプの変更時更新をプッシュできないことがあります。この理由としては、データストアノードの値が頻繁に変化する([RFC8343]で定義されているオクテットカウンターなど)、小さなオブジェクトの変化が頻繁で意味がない(たとえば、温度ゲージが0.1度変化する)、または実装では、特定のオブジェクトの変更時通知はできません。

In those cases, it will be important for client applications to have a way to identify for which objects on-change notifications are supported and for which ones they are not supported. Otherwise, client applications will have no way of knowing whether they can indeed rely on their on-change subscription to provide them with the change updates that they are interested in. In other words, if implementations do not provide a solution and do not support comprehensive on-change notifiability, clients of those implementations will have no way of knowing what their on-change subscription actually covers.

これらの場合、クライアントアプリケーションが、変更通知のオブジェクトがサポートされているオブジェクトとサポートされていないオブジェクトを識別する方法を持つことが重要です。そうしないと、クライアントアプリケーションは、変更時のサブスクリプションに依存して、関心のある変更更新を提供できるかどうかを知る方法がありません。つまり、実装がソリューションを提供せず、包括的なサポートを提供しない場合変更時の通知可能性。これらの実装のクライアントは、変更時のサブスクリプションが実際にカバーしているものを知る方法がありません。

Implementations are therefore strongly advised to provide a solution to this problem. One solution might involve making discoverable to clients which objects are on-change notifiable, specified using another YANG data model. Such a solution is specified in [Yang-Push-Notif-Cap]. Until this solution is standardized, implementations SHOULD provide their own solution.

したがって、この問題の解決策を提供することを強くお勧めします。 1つの解決策は、クライアントが変更可能なオブジェクトを通知可能にして、別のYANGデータモデルを使用して指定できるようにすることです。このようなソリューションは、[Yang-Push-Notif-Cap]で指定されています。このソリューションが標準化されるまで、実装は独自のソリューションを提供する必要があります(SHOULD)。

3.11. Other Considerations
3.11. その他の考慮事項
3.11.1. Robustness and Reliability
3.11.1. 堅牢性と信頼性

It is important that updates as discussed in this document, and on-change updates in particular, do not get lost. If the loss of an update is unavoidable, it is critical that the receiver be notified accordingly.

このドキュメントで説明されている更新、特に変更時の更新が失われないようにすることが重要です。更新の損失が避けられない場合、それに応じて受信者に通知することが重要です。

Update records for a single subscription MUST NOT be resequenced prior to transport.

単一のサブスクリプションの更新レコードは、トランスポートの前に再シーケンスしてはいけません。

It is conceivable that, under certain circumstances, a publisher will recognize that it is unable to include in an update record the full set of objects desired per the terms of a subscription. In this case, the publisher MUST act as follows.

特定の状況下では、パブリッシャーは、サブスクリプションの条件ごとに必要なオブジェクトの完全なセットを更新レコードに含めることができないことを認識すると考えられます。この場合、発行者は次のように動作する必要があります。

o The publisher MUST set the "incomplete-update" flag on any update record that is known to be missing information.

o パブリッシャーは、情報が不足していることがわかっている更新レコードに「不完全な更新」フラグを設定する必要があります。

o The publisher MAY choose to suspend the subscription as per [RFC8639]. If the publisher does not create an update record at all, it MUST suspend the subscription.

o パブリッシャは[RFC8639]に従ってサブスクリプションを一時停止することを選択できます。パブリッシャーが更新レコードをまったく作成しない場合は、サブスクリプションを一時停止する必要があります。

o When resuming an on-change subscription, the publisher SHOULD generate a complete patch from the previous update record. If this is not possible and the "sync-on-start" option is set to "true" for the subscription, then the full datastore contents MAY be sent via a "push-update" instead (effectively replacing the previous contents). If neither scenario above is possible, then an "incomplete-update" flag MUST be included on the next "push-change-update".

o 変更時のサブスクリプションを再開する場合、パブリッシャーは以前の更新レコードから完全なパッチを生成する必要があります(SHOULD)。これが不可能な場合、サブスクリプションの「sync-on-start」オプションが「true」に設定されていると、代わりに「push-update」を介して完全なデータストアコンテンツを送信できます(以前のコンテンツを効果的に置き換えます)。上記のどちらのシナリオも可能でない場合、次の「push-change-update」に「incomplete-update」フラグを含める必要があります。

Note: It is perfectly acceptable to have a series of "push-change-update" notifications (and even "push-update" notifications) serially queued at the transport layer awaiting transmission. It is not required for the publisher to merge pending update records sent at the same time.

注:一連の "push-change-update"通知(さらには "push-update"通知)がトランスポート層でシリアルにキューに入れられ、送信を待機することは完全に許容されます。パブリッシャーが同時に送信された保留中の更新レコードをマージする必要はありません。

On the receiver side, what action to take when a record with an "incomplete-update" flag is received depends on the application. It could simply choose to wait and do nothing. It could choose to resync, actively retrieving all subscribed information. It could also choose to tear down the subscription and start a new one, perhaps with a smaller scope that contains fewer objects.

受信側では、「incomplete-update」フラグが付いたレコードを受信したときに実行するアクションは、アプリケーションによって異なります。単に待機して何もしないことを選択できます。再同期を選択して、サブスクライブされたすべての情報をアクティブに取得できます。また、サブスクリプションを破棄して新しいサブスクリプションを開始することもできます。おそらく、スコープが小さく、オブジェクトの数が少なくなります。

3.11.2. Publisher Capacity
3.11.2. パブリッシャー容量

It is far preferable to decline a subscription request than to accept such a request when it cannot be met.

それが満たされないときにそのような要求を受け入れるよりも、サブスクリプション要求を拒否する方がはるかに好ましい。

Whether or not a subscription can be supported will be determined by a combination of several factors, such as the subscription update trigger (on-change or periodic), the period in which to report changes (one-second periods will consume more resources than one-hour periods), the amount of data in the datastore subtree that is being subscribed to, and the number and combination of other subscriptions that are concurrently being serviced.

サブスクリプションをサポートできるかどうかは、サブスクリプションの更新トリガー(変更時または定期的)、変更を報告する期間(1秒の期間は1つよりも多くのリソースを消費する)など、いくつかの要因の組み合わせによって決まります時間)、サブスクライブされているデータストアサブツリー内のデータの量、および同時に処理されている他のサブスクリプションの数と組み合わせ。

4. A YANG Data Model for Management of Datastore Push Subscriptions
4. データストアプッシュサブスクリプションの管理のためのYANGデータモデル
4.1. Overview
4.1. 概観

The YANG data model for datastore push subscriptions is depicted in Figures 6 through 9. The tree diagram that is used follows the notation defined in [RFC8340]. New schema objects defined here (i.e., beyond those from [RFC8639]) are identified with "yp". For the reader's convenience, in order to compact the tree representation, some nodes that are defined in the ietf-subscribed-notifications YANG module [RFC8639] and therefore are not essential to the understanding of the data model defined here have been removed. This is indicated by "..." in the diagram where applicable.

データストアプッシュサブスクリプションのYANGデータモデルを図6〜9に示します。使用されるツリー図は、[RFC8340]で定義されている表記に従います。ここで定義された新しいスキーマオブジェクト(つまり、[RFC8639]のスキーマオブジェクトを超えたもの)は、「yp」で識別されます。読者の便宜のために、ツリー表現をコンパクトにするために、ietf-subscribed-notifications YANGモジュール[RFC8639]で定義されているため、ここで定義されているデータモデルの理解に不可欠ではないいくつかのノードが削除されました。これは、該当する場合、図の「...」で示されます。

Because the tree diagram is quite large, its depiction is broken up into four figures. Figure 6 depicts the augmentations that are introduced in YANG module ietf-yang-push to the subscription configuration specified in YANG module ietf-subscribed-notifications.

ツリー図は非常に大きいため、その描写は4つの図に分かれています。図6は、YANGモジュールietf-yang-pushで、YANGモジュールietf-subscribed-notificationsで指定されたサブスクリプション構成に導入された拡張機能を示しています。

   module: ietf-subscribed-notifications
     ...
     +--rw filters
     |  ...
     |  +--rw yp:selection-filter* [filter-id]
     |     +--rw yp:filter-id                   string
     |     +--rw (yp:filter-spec)?
     |        +--:(yp:datastore-subtree-filter)
     |        |  +--rw yp:datastore-subtree-filter?   <anydata>
     |        |          {sn:subtree}?
     |        +--:(yp:datastore-xpath-filter)
     |           +--rw yp:datastore-xpath-filter?     yang:xpath1.0
     |                   {sn:xpath}?
     +--rw subscriptions
        +--rw subscription* [id]
           |  ...
           +--rw (target)
           |  +--:(stream)
           |  |   ...
           |  +--:(yp:datastore)
           |     +--rw yp:datastore                     identityref
           |     +--rw (yp:selection-filter)?
           |        +--:(yp:by-reference)
           |        |  +--rw yp:selection-filter-ref
           |        |          selection-filter-ref
           |        +--:(yp:within-subscription)
           |           +--rw (yp:filter-spec)?
           |              +--:(yp:datastore-subtree-filter)
           |              |  +--rw yp:datastore-subtree-filter?
           |              |          <anydata> {sn:subtree}?
           |              +--:(yp:datastore-xpath-filter)
           |                 +--rw yp:datastore-xpath-filter?
           |                         yang:xpath1.0 {sn:xpath}?
           | ...
           +--rw (yp:update-trigger)
              +--:(yp:periodic)
              |  +--rw yp:periodic!
              |     +--rw yp:period         centiseconds
              |     +--rw yp:anchor-time?   yang:date-and-time
              +--:(yp:on-change) {on-change}?
                 +--rw yp:on-change!
                    +--rw yp:dampening-period?   centiseconds
                    +--rw yp:sync-on-start?      boolean
                    +--rw yp:excluded-change*    change-type
        

Figure 6: Data Model Structure: Subscription Configuration

図6:データモデルの構造:サブスクリプション構成

Figure 7 depicts the augmentations of YANG module ietf-yang-push made to RPCs specified in YANG module ietf-subscribed-notifications [RFC8639]. Specifically, these augmentations concern the "establish-subscription" and "modify-subscription" RPCs, which are augmented with parameters that are needed to specify datastore push subscriptions.

図7は、YANGモジュールietf-subscribe-notifications [RFC8639]で指定されたRPCに対して行われたYANGモジュールietf-yang-pushの拡張を示しています。具体的には、これらの拡張は「確立サブスクリプション」および「変更サブスクリプション」RPCに関係します。これらはデータストアプッシュサブスクリプションを指定するために必要なパラメーターで拡張されます。

     rpcs:
       +---x establish-subscription
       |  +---w input
       |  |  ...
       |  |  +---w (target)
       |  |  |  +--:(stream)
       |  |  |  |  ...
       |  |  |  +--:(yp:datastore)
       |  |  |     +---w yp:datastore                   identityref
       |  |  |     +---w (yp:selection-filter)?
       |  |  |        +--:(yp:by-reference)
       |  |  |        |  +---w yp:selection-filter-ref
       |  |  |        |          selection-filter-ref
       |  |  |        +--:(yp:within-subscription)
       |  |  |           +---w (yp:filter-spec)?
       |  |  |              +--:(yp:datastore-subtree-filter)
       |  |  |              |  +---w yp:datastore-subtree-filter?
       |  |  |              |          <anydata> {sn:subtree}?
       |  |  |              +--:(yp:datastore-xpath-filter)
       |  |  |                 +---w yp:datastore-xpath-filter?
       |  |  |                         yang:xpath1.0 {sn:xpath}?
       |  |  | ...
       |  |  +---w (yp:update-trigger)
       |  |     +--:(yp:periodic)
       |  |     |  +---w yp:periodic!
       |  |     |     +---w yp:period         centiseconds
       |  |     |     +---w yp:anchor-time?   yang:date-and-time
       |  |     +--:(yp:on-change) {on-change}?
       |  |        +---w yp:on-change!
       |  |           +---w yp:dampening-period?   centiseconds
       |  |           +---w yp:sync-on-start?      boolean
       |  |           +---w yp:excluded-change*    change-type
       |  +--ro output
       |     +--ro id                            subscription-id
       |     +--ro replay-start-time-revision?   yang:date-and-time
       |             {replay}?
        
       +---x modify-subscription
       |  +---w input
       |     ...
       |     +---w (target)
       |     |  ...
       |     |  +--:(yp:datastore)
       |     |     +---w yp:datastore                   identityref
       |     |     +---w (yp:selection-filter)?
       |     |        +--:(yp:by-reference)
       |     |        |  +---w yp:selection-filter-ref
       |     |        |          selection-filter-ref
       |     |        +--:(yp:within-subscription)
       |     |           +---w (yp:filter-spec)?
       |     |              +--:(yp:datastore-subtree-filter)
       |     |              |  +---w yp:datastore-subtree-filter?
       |     |              |          <anydata> {sn:subtree}?
       |     |              +--:(yp:datastore-xpath-filter)
       |     |                 +---w yp:datastore-xpath-filter?
       |     |                         yang:xpath1.0 {sn:xpath}?
       |     | ...
       |     +---w (yp:update-trigger)
       |        +--:(yp:periodic)
       |        |  +---w yp:periodic!
       |        |     +---w yp:period         centiseconds
       |        |     +---w yp:anchor-time?   yang:date-and-time
       |        +--:(yp:on-change) {on-change}?
       |           +---w yp:on-change!
       |              +---w yp:dampening-period?   centiseconds
       +---x delete-subscription
       |  ...
       +---x kill-subscription
          ...
        

yang-data (for placement into RPC error responses) ...

yang-data(RPCエラー応答への配置用)...

Figure 7: Data Model Structure: RPCs

図7:データモデルの構造:RPC

Figure 8 depicts augmentations of YANG module ietf-yang-push to the notifications that are specified in YANG module ietf-subscribed-notifications. The augmentations allow the inclusion of subscription configuration parameters that are specific to datastore push subscriptions as part of "subscription-started" and "subscription-modified" notifications.

図8は、YANGモジュールietf-yang-pushの、YANGモジュールietf-subscribed-notificationsで指定された通知への拡張を示しています。拡張により、「subscription-started」および「subscription-modified」通知の一部として、データストアプッシュサブスクリプションに固有のサブスクリプション構成パラメーターを含めることができます。

     notifications:
       +---n replay-completed {replay}?
       |  ...
       +---n subscription-completed
       |  ...
       +---n subscription-started {configured}?
       |  |  ...
       |  +--ro (target)
       |  |  ...
       |  |  +--:(yp:datastore)
       |  |     +--ro yp:datastore                   identityref
       |  |     +--ro (yp:selection-filter)?
       |  |        +--:(yp:by-reference)
       |  |        |  +--ro yp:selection-filter-ref
       |  |        |          selection-filter-ref
       |  |        +--:(yp:within-subscription)
       |  |           +--ro (yp:filter-spec)?
       |  |              +--:(yp:datastore-subtree-filter)
       |  |              |  +--ro yp:datastore-subtree-filter?
       |  |              |          <anydata> {sn:subtree}?
       |  |              +--:(yp:datastore-xpath-filter)
       |  |                 +--ro yp:datastore-xpath-filter?
       |  |                         yang:xpath1.0 {sn:xpath}?
       |  ...
       |  +--ro (yp:update-trigger)
       |     +--:(yp:periodic)
       |     |  +--ro yp:periodic!
       |     |     +--ro yp:period         centiseconds
       |     |     +--ro yp:anchor-time?   yang:date-and-time
       |     +--:(yp:on-change) {on-change}?
       |        +--ro yp:on-change!
       |           +--ro yp:dampening-period?   centiseconds
       |           +--ro yp:sync-on-start?      boolean
       |           +--ro yp:excluded-change*    change-type
       +---n subscription-resumed
       |  ...
        
       +---n subscription-modified
       |  ...
       |  +--ro (target)
       |  |  |  ...
       |  |  +--:(yp:datastore)
       |  |     +--ro yp:datastore                   identityref
       |  |     +--ro (yp:selection-filter)?
       |  |        +--:(yp:by-reference)
       |  |        |  +--ro yp:selection-filter-ref
       |  |        |          selection-filter-ref
       |  |        +--:(yp:within-subscription)
       |  |           +--ro (yp:filter-spec)?
       |  |              +--:(yp:datastore-subtree-filter)
       |  |              |  +--ro yp:datastore-subtree-filter?
       |  |              |          <anydata> {sn:subtree}?
       |  |              +--:(yp:datastore-xpath-filter)
       |  |                 +--ro yp:datastore-xpath-filter?
       |  |                         yang:xpath1.0 {sn:xpath}?
       |  ...
       |  +--ro (yp:update-trigger)?
       |     +--:(yp:periodic)
       |     |  +--ro yp:periodic!
       |     |     +--ro yp:period         centiseconds
       |     |     +--ro yp:anchor-time?   yang:date-and-time
       |     +--:(yp:on-change) {on-change}?
       |        +--ro yp:on-change!
       |           +--ro yp:dampening-period?    centiseconds
       |           +--ro yp:sync-on-start?       boolean
       |           +--ro yp:excluded-change*     change-type
       +---n subscription-terminated
       |  ...
       +---n subscription-suspended
          ...
        

Figure 8: Data Model Structure: Notifications

図8:データモデルの構造:通知

Finally, Figure 9 depicts the parts of YANG module ietf-yang-push that are newly introduced in this document (i.e., that are not simply augmentations of another YANG module).

最後に、図9は、このドキュメントで新しく導入されたYANGモジュールietf-yang-pushの部分を示しています(つまり、別のYANGモジュールの単なる拡張ではありません)。

module: ietf-yang-push

モジュール:ietf-yang-push

     rpcs:
       +---x resync-subscription {on-change}?
          +---w input
             +---w id    sn:subscription-id
        
     yang-data (for placement into RPC error responses):
       +-- resync-subscription-error
       |  +--ro reason?                   identityref
       |  +--ro period-hint?              centiseconds
       |  +--ro filter-failure-hint?      string
       |  +--ro object-count-estimate?    uint32
       |  +--ro object-count-limit?       uint32
       |  +--ro kilobytes-estimate?       uint32
       |  +--ro kilobytes-limit?          uint32
       +-- establish-subscription-error-datastore
       |  +--ro reason?                   identityref
       |  +--ro period-hint?              centiseconds
       |  +--ro filter-failure-hint?      string
       |  +--ro object-count-estimate?    uint32
       |  +--ro object-count-limit?       uint32
       |  +--ro kilobytes-estimate?       uint32
       |  +--ro kilobytes-limit?          uint32
       +-- modify-subscription-error-datastore
          +--ro reason?                   identityref
          +--ro period-hint?              centiseconds
          +--ro filter-failure-hint?      string
          +--ro object-count-estimate?    uint32
          +--ro object-count-limit?       uint32
          +--ro kilobytes-estimate?       uint32
          +--ro kilobytes-limit?          uint32
        
        notifications:
          +---n push-update
          |  +--ro id?                   sn:subscription-id
          |  +--ro datastore-contents?   <anydata>
          |  +--ro incomplete-update?    empty
          +---n push-change-update {on-change}?
             +--ro id?                   sn:subscription-id
             +--ro datastore-changes
             |  +--ro yang-patch
             |     +--ro patch-id    string
             |     +--ro comment?    string
             |     +--ro edit* [edit-id]
             |        +--ro edit-id      string
             |        +--ro operation    enumeration
             |        +--ro target       target-resource-offset
             |        +--ro point?       target-resource-offset
             |        +--ro where?       enumeration
             |        +--ro value?       <anydata>
             +--ro incomplete-update?    empty
        

Figure 9: Data Model Structure: Non-augmentation Portions

図9:データモデルの構造:非拡張部分

Selected components of the data model are summarized below.

データモデルの選択されたコンポーネントを以下にまとめます。

4.2. Subscription Configuration
4.2. サブスクリプション構成

Both configured and dynamic subscriptions are represented in the list "subscription". New parameters extending the basic subscription data model in [RFC8639] include:

構成されたサブスクリプションと動的サブスクリプションの両方が、リスト「サブスクリプション」に表示されます。 [RFC8639]の基本的なサブスクリプションデータモデルを拡張する新しいパラメーターは次のとおりです。

o The targeted datastore from which the selection is being made. The potential datastores include those from [RFC8342]. A platform may also choose to support a custom datastore.

o 選択が行われる対象のデータストア。潜在的なデータストアには、[RFC8342]のデータストアが含まれます。プラットフォームは、カスタムデータストアのサポートを選択する場合もあります。

o A selection filter identifying YANG nodes of interest in a datastore. Filter contents are specified via a reference to an existing filter or via an in-line definition for only that subscription. Referenced filters allow an implementation to avoid evaluating filter acceptability during a dynamic subscription request. The "case" statement differentiates the options.

o データストア内の対象のYANGノードを識別する選択フィルター。フィルターの内容は、既存のフィルターへの参照を介して、またはそのサブスクリプションのみのインライン定義を介して指定されます。参照されたフィルターにより、実装は動的サブスクリプション要求中にフィルターの受け入れ可能性を評価することを回避できます。 「ケース」ステートメントはオプションを区別します。

o For periodic subscriptions, triggered updates will occur at the boundaries of a specified time interval. These boundaries can be calculated from the periodic parameters:

o 定期的なサブスクリプションの場合、トリガーされた更新は、指定された時間間隔の境界で発生します。これらの境界は、周期的なパラメーターから計算できます。

* a "period" that defines the duration between push updates.

* プッシュ更新間の期間を定義する「期間」。

* an "anchor-time"; update intervals fall on the points in time that are a multiple of a "period" from an "anchor-time". If an "anchor-time" is not provided, then the "anchor-time" MUST be set with the creation time of the initial update record.

* 「アンカータイム」;更新間隔は、「アンカー時間」からの「期間」の倍数である時点に該当します。 「アンカー時間」が指定されていない場合、「アンカー時間」には初期更新レコードの作成時間を設定する必要があります。

o For on-change subscriptions, assuming that any dampening period has completed, triggering occurs whenever a change in the subscribed information is detected. On-change subscriptions have more-complex semantics that are guided by their own set of parameters:

o 変更時のサブスクリプションの場合、ダンプニング期間が完了していると想定すると、サブスクライブされた情報の変更が検出されるたびにトリガーが発生します。変更時のサブスクリプションには、独自のパラメーターセットによってガイドされる、より複雑なセマンティクスがあります。

* a "dampening-period" that specifies the interval that must pass before a successive update for the subscription is sent. If no dampening period is in effect, the update is sent immediately. If a subsequent change is detected, another update is only sent once the dampening period has passed for this subscription.

* サブスクリプションの後続の更新が送信される前に経過する必要がある間隔を指定する「ダンプニング期間」。ダンプニング期間が有効でない場合、更新はすぐに送信されます。後続の変更が検出された場合、このサブスクリプションのダンプニング期間が経過すると、別の更新が送信されます。

* an "excluded-change" that allows the restriction of the types of changes for which updates should be sent (e.g., only add to an update record on object creation).

* 更新を送信する必要がある変更のタイプを制限できる「除外された変更」(たとえば、オブジェクトの作成時に更新レコードにのみ追加する)。

* a "sync-on-start" that specifies whether a complete update with all the subscribed data is to be sent at the beginning of a subscription.

* サブスクリプションの開始時に、サブスクライブされたすべてのデータを含む完全な更新を送信するかどうかを指定する「sync-on-start」。

4.3. YANG Notifications
4.3. その通知
4.3.1. State Change Notifications
4.3.1. 状態変更通知

Subscription state notifications and mechanisms are reused from [RFC8639]. Notifications "subscription-started" and "subscription-modified" have been augmented to include the datastore-specific objects.

サブスクリプション状態の通知とメカニズムは、[RFC8639]から再利用されています。 「subscription-started」と「subscription-modified」の通知が拡張され、データストア固有のオブジェクトが含まれるようになりました。

4.3.2. Notifications for Subscribed Content
4.3.2. 購読コンテンツの通知

Along with the subscribed content, there are other objects that might be part of a "push-update" or "push-change-update" notification.

サブスクライブされたコンテンツの他に、「push-update」または「push-change-update」通知の一部である可能性のある他のオブジェクトがあります。

o An "id" (that identifies the subscription). This object MUST be transported along with the subscribed contents. It allows a receiver to determine which subscription resulted in a particular update record.

o 「id」(サブスクリプションを識別する)。このオブジェクトは、サブスクライブされたコンテンツとともに転送される必要があります。これにより、受信者は、特定の更新レコードをもたらしたサブスクリプションを判別できます。

o An "incomplete-update" leaf. This leaf indicates that not all changes that have occurred since the last update are actually included with this update. In other words, the publisher has failed to fulfill its full subscription obligations. (For example, a datastore was unable to provide the full set of datastore nodes to a publisher process.) To facilitate the resynchronization of on-change subscriptions, a publisher MAY subsequently send a "push-update" containing a full selection snapshot of subscribed data.

o 「不完全な更新」リーフ。このリーフは、最後の更新以降に発生したすべての変更が実際にこの更新に含まれているわけではないことを示しています。つまり、パブリッシャーは完全なサブスクリプションの義務を果たしていません。 (たとえば、データストアはパブリッシャープロセスにデータストアノードの完全なセットを提供できませんでした。)変更時のサブスクリプションの再同期を容易にするために、パブリッシャーは、サブスクライブされた全選択スナップショットを含む「プッシュ更新」をその後送信できます(MAY)。データ。

4.4. YANG RPCs
4.4. RPC

YANG-Push subscriptions are established, modified, and deleted using RPCs augmented from [RFC8639].

YANG-Pushサブスクリプションは、[RFC8639]から拡張されたRPCを使用して確立、変更、および削除されます。

4.4.1. "establish-subscription" RPC
4.4.1. 「確立サブスクリプション」RPC

The subscriber sends an "establish-subscription" RPC with the parameters listed in Section 3.1. An example might look like:

サブスクライバーは、セクション3.1に記載されているパラメーターを使用して、 "establish-subscription" RPCを送信します。例は次のようになります。

 <netconf:rpc message-id="101"
     xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
   <establish-subscription
       xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
       xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
     <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
       ds:operational
     </yp:datastore>
     <yp:datastore-xpath-filter
         xmlns:ex="https://example.com/sample-data/1.0">
       /ex:foo
     </yp:datastore-xpath-filter>
     <yp:periodic>
       <yp:period>500</yp:period>
     </yp:periodic>
   </establish-subscription>
 </netconf:rpc>
        

Figure 10: "establish-subscription" RPC

図10:「確立サブスクリプション」RPC

A positive response includes the "id" of the accepted subscription. In that case, a publisher may respond as follows:

肯定的な応答には、承認されたサブスクリプションの「ID」が含まれます。その場合、出版社は次のように応答します。

 <rpc-reply message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <id
      xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
       52
    </id>
 </rpc-reply>
        

Figure 11: "establish-subscription" Positive RPC Response

図11:「establish-subscription」の肯定的なRPC応答

A subscription can be rejected for multiple reasons, including the lack of authorization to establish a subscription, no capacity to serve the subscription at the publisher, or the inability of the publisher to select datastore content at the requested cadence.

サブスクリプションは、サブスクリプションを確立する権限がない、パブリッシャーでサブスクリプションを処理する能力がない、要求されたケイデンスでデータストアコンテンツを選択できないなど、さまざまな理由で拒否される可能性があります。

If a request is rejected because the publisher is not able to serve it, the publisher SHOULD include in the returned error hints that help a subscriber understand what subscription parameters might have been accepted for the request. These hints would be included in the yang-data structure "establish-subscription-error-datastore". However, even with these hints, there are no guarantees that subsequent requests will in fact be accepted.

パブリッシャーがリクエストを処理できないためにリクエストが拒否された場合、パブリッシャーは返されたエラーヒントにサブスクライバーを含めるべきであり、サブスクライバーがリクエストに対してどのサブスクリプションパラメーターが受け入れられたかを理解するのに役立ちます。これらのヒントは、ヤンデータ構造「establish-subscription-error-datastore」に含まれます。ただし、これらのヒントを使用しても、後続の要求が実際に受け入れられる保証はありません。

The specific parameters to be returned as part of the RPC error response depend on the specific transport that is used to manage the subscription. For NETCONF, those parameters are defined in [RFC8640]. For example, for the following NETCONF request:

RPCエラー応答の一部として返される特定のパラメーターは、サブスクリプションの管理に使用される特定のトランスポートによって異なります。 NETCONFの場合、これらのパラメータは[RFC8640]で定義されています。たとえば、次のNETCONF要求の場合:

     <rpc message-id="101"
          xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
       <establish-subscription
           xmlns=
             "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
           xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
         <yp:datastore
             xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
           ds:operational
         </yp:datastore>
         <yp:datastore-xpath-filter
             xmlns:ex="https://example.com/sample-data/1.0">
           /ex:foo
         </yp:datastore-xpath-filter>
         <yp:on-change>
           <yp:dampening-period>100</yp:dampening-period>
         </yp:on-change>
       </establish-subscription>
     </rpc>
        

Figure 12: "establish-subscription" Request: Example 2

図12:「establish-subscription」リクエスト:例2

A publisher that cannot serve on-change updates but can serve periodic updates might return the following NETCONF response:

変更時の更新を提供できないが定期的な更新を提供できる発行元は、次のNETCONF応答を返す場合があります。

 <rpc-reply message-id="101"
   xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
   xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
   <rpc-error>
     <error-type>application</error-type>
     <error-tag>operation-failed</error-tag>
     <error-severity>error</error-severity>
     <error-path>/yp:periodic/yp:period</error-path>
     <error-info>
       <yp:establish-subscription-error-datastore>
         <yp:reason>yp:on-change-unsupported</yp:reason>
       </yp:establish-subscription-error-datastore>
     </error-info>
   </rpc-error>
 </rpc-reply>
        

Figure 13: "establish-subscription" Error Response: Example 2

図13:「establish-subscription」エラー応答:例2

4.4.2. "modify-subscription" RPC
4.4.2. 「変更サブスクリプション」RPC

The subscriber MAY invoke the "modify-subscription" RPC for a subscription it previously established. The subscriber will include newly desired values in the "modify-subscription" RPC. Parameters not included MUST remain unmodified. Figure 14 provides an example where a subscriber attempts to modify the period and datastore XPath filter of a subscription using NETCONF.

サブスクライバーは、以前に確立したサブスクリプションの「変更サブスクリプション」RPCを呼び出すことができます(MAY)。サブスクライバーは、「変更サブスクリプション」RPCに新しく必要な値を含めます。含まれていないパラメーターは変更しないでください。図14は、サブスクライバーがNETCONFを使用してサブスクリプションの期間とデータストアXPathフィルターを変更しようとする例を示しています。

     <rpc message-id="102"
          xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
       <modify-subscription
           xmlns=
             "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
           xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
         <id>1011</id>
         <yp:datastore
             xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
           ds:operational
         </yp:datastore>
         <yp:datastore-xpath-filter
             xmlns:ex="https://example.com/sample-data/1.0">
           /ex:bar
         </yp:datastore-xpath-filter>
         <yp:periodic>
           <yp:period>250</yp:period>
         </yp:periodic>
        </modify-subscription>
     </rpc>
        

Figure 14: "modify-subscription" Request

図14:「サブスクリプションの変更」リクエスト

The publisher MUST respond to the subscription modification request. If the request is rejected, the existing subscription is left unchanged, and the publisher MUST send an RPC error response. This response might have hints encapsulated in the yang-data structure "modify-subscription-error-datastore". A subscription MAY be modified multiple times.

パブリッシャーは、サブスクリプション変更要求に応答する必要があります。リクエストが拒否された場合、既存のサブスクリプションは変更されず、パブリッシャーはRPCエラー応答を送信する必要があります。この応答には、yang-data構造「modify-subscription-error-datastore」にカプセル化されたヒントがある場合があります。サブスクリプションは複数回変更される場合があります。

The specific parameters to be returned as part of the RPC error response depend on the specific transport that is used to manage the subscription. For NETCONF, those parameters are specified in [RFC8640].

RPCエラー応答の一部として返される特定のパラメーターは、サブスクリプションの管理に使用される特定のトランスポートによって異なります。 NETCONFの場合、これらのパラメータは[RFC8640]で指定されています。

A configured subscription cannot be modified using a "modify-subscription" RPC. Instead, the configuration needs to be edited as needed.

構成されたサブスクリプションは、「modify-subscription」RPCを使用して変更できません。代わりに、必要に応じて構成を編集する必要があります。

4.4.3. "delete-subscription" RPC
4.4.3. 「サブスクリプションの削除」RPC

To stop receiving updates from a subscription and effectively delete a subscription that had previously been established using an "establish-subscription" RPC, a subscriber can send a "delete-subscription" RPC, which takes as its only input the subscription's "id". This RPC is unmodified from [RFC8639].

サブスクリプションからの更新の受信を停止し、「establish-subscription」RPCを使用して以前に確立されたサブスクリプションを効果的に削除するために、サブスクライバーは「delete-subscription」RPCを送信できます。これは、サブスクリプションの「id」のみを入力として受け取ります。このRPCは[RFC8639]から変更されていません。

4.4.4. "resync-subscription" RPC
4.4.4. 「再同期サブスクリプション」RPC

This RPC is supported only for on-change subscriptions previously established using an "establish-subscription" RPC. For example:

このRPCは、 "establish-subscription" RPCを使用して以前に確立された変更時のサブスクリプションに対してのみサポートされます。例えば:

      <rpc message-id="103"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
        <resync-subscription
            xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
          <id>1011</id>
        </resync-subscription>
      </rpc>
        

Figure 15: "resync-subscription"

図15:「再同期サブスクリプション」

On receipt, a publisher must either (1) accept the request and quickly follow with a "push-update" or (2) send an appropriate error in an RPC error response. In its error response, the publisher MAY include, in the yang-data structure "resync-subscription-error", supplemental information about the reasons for the error.

パブリッシャーは受け取り次第、(1)要求を受け入れ、すぐに「プッシュ更新」を実行するか、(2)RPCエラー応答で適切なエラーを送信する必要があります。パブリッシャーは、そのエラー応答に、ヤンデータ構造「resync-subscription-error」に、エラーの理由に関する補足情報を含めることができます(MAY)。

4.4.5. YANG Module Synchronization
4.4.5. YANGモジュールの同期

To make subscription requests, the subscriber needs to know the YANG datastore schemas used by the publisher. These schemas are available in the YANG library module ietf-yang-library.yang as defined in [RFC8525]. The receiver is expected to know the YANG library information before starting a subscription.

サブスクライバーは、サブスクリプション要求を行うために、パブリッシャーが使用するYANGデータストアースキーマを知っている必要があります。これらのスキーマは、[RFC8525]で定義されているように、YANGライブラリモジュールietf-yang-library.yangで使用できます。受信者は、サブスクリプションを開始する前に、YANGライブラリー情報を知っている必要があります。

The set of modules, revisions, features, and deviations can change at runtime (if supported by the publisher implementation). For this purpose, the YANG library provides a simple "yang-library-change" notification that informs the subscriber that the library has changed. In this case, a subscription may need to be updated to take the updates into account. The receiver may also need to be informed of module changes in order to process updates regarding datastore nodes from changed modules correctly.

モジュール、リビジョン、機能、および偏差のセットは、実行時に変更される可能性があります(パブリッシャーの実装でサポートされている場合)。この目的のために、YANGライブラリーは、ライブラリーが変更されたことをサブスクライバーに通知する単純な「yang-library-change」通知を提供します。この場合、更新を考慮に入れるためにサブスクリプションを更新する必要がある場合があります。変更されたモジュールからのデータストアノードに関する更新を正しく処理するために、受信者はモジュールの変更について通知を受ける必要がある場合もあります。

5. YANG Module for YANG-Push
5. YANG-Push用YANGモジュール
   This YANG module imports typedefs from [RFC6991], identities from
   [RFC8342], the "yang-data" extension from [RFC8040], and the
   "yang-patch" grouping from [RFC8072].  In addition, it imports and
   augments many definitions from [RFC8639].  It also references
   [RFC6241], [XPATH] ("XML Path Language (XPath) Version 1.0"), and
   [RFC7950].
        
   <CODE BEGINS> file "ietf-yang-push@2019-09-09.yang"
   module ietf-yang-push {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-push";
     prefix yp;
        
     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types";
     }
     import ietf-subscribed-notifications {
       prefix sn;
       reference
         "RFC 8639: Subscription to YANG Notifications";
     }
     import ietf-datastores {
       prefix ds;
       reference
         "RFC 8342: Network Management Datastore Architecture (NMDA)";
     }
     import ietf-restconf {
       prefix rc;
       reference
         "RFC 8040: RESTCONF Protocol";
     }
     import ietf-yang-patch {
       prefix ypatch;
       reference
         "RFC 8072: YANG Patch Media Type";
     }
        
     organization
       "IETF NETCONF (Network Configuration) Working Group";
     contact
       "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
        WG List: <mailto:netconf@ietf.org>
        

Author: Alexander Clemm

著者:アレクサンダークレム

                 <mailto:ludwig@clemm.org>
        
        Author:  Eric Voit
                 <mailto:evoit@cisco.com>";
        

description "This module contains YANG specifications for YANG-Push.

説明 "このモジュールには、YANG-PushのYANG仕様が含まれています。

The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', '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.

キーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、「MAY」、「OPTIONALこのドキュメントの 'は、ここに示すように、BCP 14(RFC 2119)(RFC 8174)で説明されているように解釈されます。

Copyright (c) 2019 IETF Trust and the persons identified as authors of the code. All rights reserved.

Copyright(c)2019 IETF Trustおよびコードの作成者として識別された人物。全著作権所有。

Redistribution and use in source and binary forms, with or 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 (https://trustee.ietf.org/license-info).

ソースおよびバイナリ形式での再配布および使用は、変更の有無にかかわらず、IETF文書に関連するIETFトラストの法的規定のセクション4.cに記載されているSimplified BSD Licenseに従い、それに含まれるライセンス条項に従って許可されます( https://trustee.ietf.org/license-info)。

This version of this YANG module is part of RFC 8641; see the RFC itself for full legal notices.";

このYANGモジュールのこのバージョンはRFC 8641の一部です。完全な法的通知については、RFC自体を参照してください。 ";

     revision 2019-09-09 {
       description
         "Initial revision.";
       reference
         "RFC 8641: Subscriptions to YANG Datastores";
     }
        
     /*
      * FEATURES
      */
        
     feature on-change {
       description
         "This feature indicates that on-change triggered subscriptions
          are supported.";
     }
        
     /*
      * IDENTITIES
      */
        
     /* Error type identities for datastore subscription */
        
     identity resync-subscription-error {
       description
         "Problem found while attempting to fulfill a
          'resync-subscription' RPC request.";
     }
        
     identity cant-exclude {
       base sn:establish-subscription-error;
       description
         "Unable to remove the set of 'excluded-change' parameters.
          This means that the publisher is unable to restrict
          'push-change-update' notifications to just the change types
          requested for this subscription.";
     }
        
     identity datastore-not-subscribable {
       base sn:establish-subscription-error;
       base sn:subscription-terminated-reason;
       description
         "This is not a subscribable datastore.";
     }
        
     identity no-such-subscription-resync {
       base resync-subscription-error;
       description
         "The referenced subscription doesn't exist.  This may be as a
          result of a nonexistent subscription ID, an ID that belongs to
          another subscriber, or an ID for a configured subscription.";
     }
        
     identity on-change-unsupported {
       base sn:establish-subscription-error;
       description
         "On-change is not supported for any objects that are
          selectable by this filter.";
     }
        
     identity on-change-sync-unsupported {
       base sn:establish-subscription-error;
       description
         "Neither 'sync-on-start' nor resynchronization is supported for
          this subscription.  This error will be used for two reasons:
          (1) if an 'establish-subscription' RPC includes
          'sync-on-start' but the publisher can't support sending a
          'push-update' for this subscription for reasons other than
          'on-change-unsupported' or 'sync-too-big'
          (2) if the 'resync-subscription' RPC is invoked for either an
          existing periodic subscription or an on-change subscription
          that can't support resynchronization.";
     }
        
     identity period-unsupported {
       base sn:establish-subscription-error;
       base sn:modify-subscription-error;
       base sn:subscription-suspended-reason;
       description
         "The requested time period or 'dampening-period' is too short.
          This can be for both periodic and on-change subscriptions
          (with or without dampening).  Hints suggesting alternative
          periods may be returned as supplemental information.";
     }
        
     identity update-too-big {
       base sn:establish-subscription-error;
       base sn:modify-subscription-error;
       base sn:subscription-suspended-reason;
       description
         "Periodic or on-change push update data trees exceed a maximum
          size limit.  Hints on the estimated size of what was too big
          may be returned as supplemental information.";
     }
        
     identity sync-too-big {
       base sn:establish-subscription-error;
       base sn:modify-subscription-error;
       base resync-subscription-error;
       base sn:subscription-suspended-reason;
       description
         "The 'sync-on-start' or resynchronization data tree exceeds a
          maximum size limit.  Hints on the estimated size of what was
          too big may be returned as supplemental information.";
     }
        
     identity unchanging-selection {
       base sn:establish-subscription-error;
       base sn:modify-subscription-error;
       base sn:subscription-terminated-reason;
       description
         "The selection filter is unlikely to ever select data tree
          nodes.  This means that based on the subscriber's current
          access rights, the publisher recognizes that the selection
          filter is unlikely to ever select data tree nodes that change.
          Examples for this might be that the node or subtree doesn't
          exist, read access is not permitted for a receiver, or static
          objects that only change at reboot have been chosen.";
     }
        
     /*
      * TYPE DEFINITIONS
      */
        
     typedef change-type {
       type enumeration {
         enum create {
           description
             "A change that refers to the creation of a new
              datastore node.";
         }
         enum delete {
           description
             "A change that refers to the deletion of a
              datastore node.";
         }
         enum insert {
           description
             "A change that refers to the insertion of a new
              user-ordered datastore node.";
         }
         enum move {
           description
             "A change that refers to a reordering of the target
              datastore node.";
         }
         enum replace {
           description
             "A change that refers to a replacement of the target
              datastore node's value.";
         }
       }
       description
         "Specifies different types of datastore changes.
        
          This type is based on the edit operations defined for
          YANG Patch, with the difference that it is valid for a
          receiver to process an update record that performs a
          'create' operation on a datastore node the receiver believes
          exists or to process a delete on a datastore node the
          receiver believes is missing.";
       reference
         "RFC 8072: YANG Patch Media Type, Section 2.5";
     }
     typedef selection-filter-ref {
       type leafref {
         path "/sn:filters/yp:selection-filter/yp:filter-id";
       }
       description
         "This type is used to reference a selection filter.";
     }
        
     typedef centiseconds {
       type uint32;
       description
         "A period of time, measured in units of 0.01 seconds.";
     }
        
     /*
      * GROUP DEFINITIONS
      */
        
     grouping datastore-criteria {
       description
         "A grouping to define criteria for which selected objects from
          a targeted datastore should be included in push updates.";
       leaf datastore {
         type identityref {
           base ds:datastore;
         }
         mandatory true;
         description
           "Datastore from which to retrieve data.";
       }
       uses selection-filter-objects;
     }
        
     grouping selection-filter-types {
       description
         "This grouping defines the types of selectors for objects
          from a datastore.";
       choice filter-spec {
         description
           "The content filter specification for this request.";
         anydata datastore-subtree-filter {
           if-feature "sn:subtree";
           description
             "This parameter identifies the portions of the
              target datastore to retrieve.";
           reference
             "RFC 6241: Network Configuration Protocol (NETCONF),
                        Section 6";
        
         }
         leaf datastore-xpath-filter {
           if-feature "sn:xpath";
           type yang:xpath1.0;
           description
             "This parameter contains an XPath expression identifying
              the portions of the target datastore to retrieve.
        

If the expression returns a node set, all nodes in the node set are selected by the filter. Otherwise, if the expression does not return a node set, the filter doesn't select any nodes.

式がノードセットを返す場合、ノードセット内のすべてのノードがフィルターによって選択されます。それ以外の場合、式がノードセットを返さない場合、フィルターはノードを選択しません。

The expression is evaluated in the following XPath context:

式は、次のXPathコンテキストで評価されます。

o The set of namespace declarations is the set of prefix and namespace pairs for all YANG modules implemented by the server, where the prefix is the YANG module name and the namespace is as defined by the 'namespace' statement in the YANG module.

o 名前空間宣言のセットは、サーバーによって実装されたすべてのYANGモジュールの接頭辞と名前空間のペアのセットです。ここで、接頭辞はYANGモジュール名であり、名前空間はYANGモジュールの 'namespace'ステートメントで定義されています。

If the leaf is encoded in XML, all namespace declarations in scope on the 'stream-xpath-filter' leaf element are added to the set of namespace declarations. If a prefix found in the XML is already present in the set of namespace declarations, the namespace in the XML is used.

リーフがXMLでエンコードされている場合、「stream-xpath-filter」リーフ要素のスコープ内のすべての名前空間宣言が名前空間宣言のセットに追加されます。 XMLで見つかったプレフィックスが名前空間宣言のセットに既に存在する場合、XMLの名前空間が使用されます。

o The set of variable bindings is empty.

o 変数バインディングのセットが空です。

o The function library is comprised of the core function library and the XPath functions defined in Section 10 in RFC 7950.

o 関数ライブラリは、RFC 7950のセクション10で定義されているコア関数ライブラリとXPath関数で構成されています。

              o  The context node is the root node of the target
                 datastore.";
           reference
             "XML Path Language (XPath) Version 1.0
              (https://www.w3.org/TR/1999/REC-xpath-19991116)
              RFC 7950: The YANG 1.1 Data Modeling Language,
                        Section 10";
         }
       }
     }
        

grouping selection-filter-objects { description

grouping selection-filter-objects {説明

         "This grouping defines a selector for objects from a
          datastore.";
       choice selection-filter {
         description
           "The source of the selection filter applied to the
            subscription.  This will either (1) come referenced from a
            global list or (2) be provided in the subscription itself.";
         case by-reference {
           description
             "Incorporates a filter that has been configured
              separately.";
           leaf selection-filter-ref {
             type selection-filter-ref;
             mandatory true;
             description
               "References an existing selection filter that is to be
                applied to the subscription.";
           }
         }
         case within-subscription {
           description
             "A local definition allows a filter to have the same
              lifecycle as the subscription.";
           uses selection-filter-types;
         }
       }
     }
        
     grouping update-policy-modifiable {
       description
         "This grouping describes the datastore-specific subscription
          conditions that can be changed during the lifetime of the
          subscription.";
       choice update-trigger {
         description
           "Defines necessary conditions for sending an event record to
            the subscriber.";
         case periodic {
           container periodic {
             presence "indicates a periodic subscription";
             description
               "The publisher is requested to periodically notify the
                receiver regarding the current values of the datastore
                as defined by the selection filter.";
             leaf period {
               type centiseconds;
               mandatory true;
               description
        
                 "Duration of time that should occur between periodic
                  push updates, in units of 0.01 seconds.";
             }
             leaf anchor-time {
               type yang:date-and-time;
               description
                 "Designates a timestamp before or after which a series
                  of periodic push updates are determined.  The next
                  update will take place at a point in time that is a
                  multiple of a period from the 'anchor-time'.
                  For example, for an 'anchor-time' that is set for the
                  top of a particular minute and a period interval of a
                  minute, updates will be sent at the top of every
                  minute that this subscription is active.";
             }
           }
         }
         case on-change {
           if-feature "on-change";
           container on-change {
             presence "indicates an on-change subscription";
             description
               "The publisher is requested to notify the receiver
                regarding changes in values in the datastore subset as
                defined by a selection filter.";
             leaf dampening-period {
               type centiseconds;
               default "0";
               description
                 "Specifies the minimum interval between the assembly of
                  successive update records for a single receiver of a
                  subscription.  Whenever subscribed objects change and
                  a dampening-period interval (which may be zero) has
                  elapsed since the previous update record creation for
                  a receiver, any subscribed objects and properties
                  that have changed since the previous update record
                  will have their current values marshalled and placed
                  in a new update record.";
             }
           }
         }
       }
     }
        
     grouping update-policy {
       description
         "This grouping describes the datastore-specific subscription
          conditions of a subscription.";
        
       uses update-policy-modifiable {
         augment "update-trigger/on-change/on-change" {
           description
             "Includes objects that are not modifiable once a
              subscription is established.";
           leaf sync-on-start {
             type boolean;
             default "true";
             description
               "When this object is set to 'false', (1) it restricts an
                on-change subscription from sending 'push-update'
                notifications and (2) pushing a full selection per the
                terms of the selection filter MUST NOT be done for
                this subscription.  Only updates about changes
                (i.e., only 'push-change-update' notifications)
                are sent.  When set to 'true' (the default behavior),
                in order to facilitate a receiver's synchronization,
                a full update is sent, via a 'push-update' notification,
                when the subscription starts.  After that,
                'push-change-update' notifications are exclusively sent,
                unless the publisher chooses to resync the subscription
                via a new 'push-update' notification.";
           }
           leaf-list excluded-change {
             type change-type;
             description
               "Used to restrict which changes trigger an update.  For
                example, if a 'replace' operation is excluded, only the
                creation and deletion of objects are reported.";
           }
         }
       }
     }
        
     grouping hints {
       description
         "Parameters associated with an error for a subscription
          made upon a datastore.";
       leaf period-hint {
         type centiseconds;
         description
           "Returned when the requested time period is too short.  This
            hint can assert a viable period for either a periodic push
            cadence or an on-change dampening interval.";
       }
       leaf filter-failure-hint {
         type string;
         description
        
           "Information describing where and/or why a provided filter
            was unsupportable for a subscription.";
       }
       leaf object-count-estimate {
         type uint32;
         description
           "If there are too many objects that could potentially be
            returned by the selection filter, this identifies the
            estimate of the number of objects that the filter would
            potentially pass.";
       }
       leaf object-count-limit {
         type uint32;
         description
           "If there are too many objects that could be returned by
            the selection filter, this identifies the upper limit of
            the publisher's ability to service this subscription.";
       }
       leaf kilobytes-estimate {
         type uint32;
         description
           "If the returned information could be beyond the capacity
            of the publisher, this would identify the estimated
            data size that could result from this selection filter.";
       }
       leaf kilobytes-limit {
         type uint32;
         description
           "If the returned information would be beyond the capacity
            of the publisher, this identifies the upper limit of the
            publisher's ability to service this subscription.";
       }
     }
        
     /*
      * RPCs
      */
        
     rpc resync-subscription {
       if-feature "on-change";
       description
         "This RPC allows a subscriber of an active on-change
          subscription to request a full push of objects.
        

A successful invocation results in a 'push-update' of all datastore nodes that the subscriber is permitted to access. This RPC can only be invoked on the same session on which the subscription is currently active. In the case of an error, a

呼び出しが成功すると、サブスクライバーがアクセスを許可されているすべてのデータストアノードが「プッシュ更新」されます。このRPCは、サブスクリプションが現在アクティブな同じセッションでのみ呼び出すことができます。エラーの場合、

          'resync-subscription-error' is sent as part of an error
          response.";
       input {
         leaf id {
           type sn:subscription-id;
           mandatory true;
           description
             "Identifier of the subscription that is to be resynced.";
         }
       }
     }
        
     rc:yang-data resync-subscription-error {
       container resync-subscription-error {
         description
           "If a 'resync-subscription' RPC fails, the subscription is
            not resynced and the RPC error response MUST indicate the
            reason for this failure.  This yang-data MAY be inserted as
            structured data in a subscription's RPC error response
            to indicate the reason for the failure.";
         leaf reason {
           type identityref {
             base resync-subscription-error;
           }
           mandatory true;
           description
             "Indicates the reason why the publisher has declined a
              request for subscription resynchronization.";
         }
         uses hints;
       }
     }
        
     augment "/sn:establish-subscription/sn:input" {
       description
         "This augmentation adds additional subscription parameters
          that apply specifically to datastore updates to RPC input.";
       uses update-policy;
     }
        
     augment "/sn:establish-subscription/sn:input/sn:target" {
       description
         "This augmentation adds the datastore as a valid target
          for the subscription to RPC input.";
       case datastore {
         description
           "Information specifying the parameters of a request for a
            datastore subscription.";
        
         uses datastore-criteria;
       }
     }
        
     rc:yang-data establish-subscription-datastore-error-info {
       container establish-subscription-datastore-error-info {
         description
           "If any 'establish-subscription' RPC parameters are
            unsupportable against the datastore, a subscription is not
            created and the RPC error response MUST indicate the reason
            why the subscription failed to be created.  This yang-data
            MAY be inserted as structured data in a subscription's
            RPC error response to indicate the reason for the failure.
            This yang-data MUST be inserted if hints are to be provided
            back to the subscriber.";
         leaf reason {
           type identityref {
             base sn:establish-subscription-error;
           }
           description
             "Indicates the reason why the subscription has failed to
              be created to a targeted datastore.";
         }
         uses hints;
       }
     }
        
     augment "/sn:modify-subscription/sn:input" {
       description
         "This augmentation adds additional subscription parameters
          specific to datastore updates.";
       uses update-policy-modifiable;
     }
        
     augment "/sn:modify-subscription/sn:input/sn:target" {
       description
         "This augmentation adds the datastore as a valid target
          for the subscription to RPC input.";
       case datastore {
         description
           "Information specifying the parameters of a request for a
            datastore subscription.";
         uses datastore-criteria;
       }
     }
        
     rc:yang-data modify-subscription-datastore-error-info {
       container modify-subscription-datastore-error-info {
        
         description
           "This yang-data MAY be provided as part of a subscription's
            RPC error response when there is a failure of a
            'modify-subscription' RPC that has been made against a
            datastore.  This yang-data MUST be used if hints are to be
            provided back to the subscriber.";
         leaf reason {
           type identityref {
             base sn:modify-subscription-error;
           }
           description
             "Indicates the reason why the subscription has failed to
              be modified.";
         }
         uses hints;
       }
     }
        
     /*
      * NOTIFICATIONS
      */
        
     notification push-update {
       description
         "This notification contains a push update that in turn contains
          data subscribed to via a subscription.  In the case of a
          periodic subscription, this notification is sent for periodic
          updates.  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 that would be subscribable as
          part of the NETCONF event stream by any receiver.";
       leaf id {
         type sn:subscription-id;
         description
           "This references the subscription that drove the
            notification to be sent.";
       }
       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 snapshot corresponds to the same
            snapshot that would be returned in a corresponding 'get'
            operation with the same selection filter parameters
            applied.";
       }
       leaf incomplete-update {
        
         type empty;
         description
           "This is a flag that indicates that not all datastore
            nodes subscribed to are included with this update.  In
            other words, the publisher has failed to fulfill its full
            subscription obligations and, despite its best efforts, is
            providing an incomplete set of objects.";
       }
     }
        
     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 that would be subscribable as part of the
          NETCONF event stream by any receiver.";
       leaf id {
         type sn:subscription-id;
         description
           "This references the subscription that drove the
            notification to be sent.";
       }
       container datastore-changes {
         description
           "This contains the set of datastore changes of the target
            datastore, starting at the time of the previous update, per
            the terms of the subscription.";
         uses ypatch:yang-patch;
       }
       leaf incomplete-update {
         type empty;
         description
           "The presence of this object indicates that not all changes
            that have occurred 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 burst of
            changes.";
       }
     }
        
     augment "/sn:subscription-started" {
       description
         "This augmentation adds datastore-specific objects to
          the notification that a subscription has started.";
       uses update-policy;
        

}

     augment "/sn:subscription-started/sn:target" {
       description
         "This augmentation allows the datastore to be included as
          part of the notification that a subscription has started.";
       case datastore {
         uses datastore-criteria {
           refine "selection-filter/within-subscription" {
             description
               "Specifies the selection filter and where it originated
                from.  If the 'selection-filter-ref' is populated, the
                filter in the subscription came from the 'filters'
                container.  Otherwise, it is populated in-line as part
                of the subscription itself.";
           }
         }
       }
     }
        
     augment "/sn:subscription-modified" {
       description
         "This augmentation adds datastore-specific objects to
          the notification that a subscription has been modified.";
       uses update-policy;
     }
        
     augment "/sn:subscription-modified/sn:target" {
       description
         "This augmentation allows the datastore to be included as
          part of the notification that a subscription has been
          modified.";
       case datastore {
         uses datastore-criteria {
           refine "selection-filter/within-subscription" {
             description
               "Specifies the selection filter and where it originated
                from.  If the 'selection-filter-ref' is populated, the
                filter in the subscription came from the 'filters'
                container.  Otherwise, it is populated in-line as part
                of the subscription itself.";
           }
         }
       }
     }
        
     /*
      * DATA NODES
        

*/

*/

     augment "/sn:filters" {
       description
         "This augmentation allows the datastore to be included as part
          of the selection-filtering criteria for a subscription.";
       list selection-filter {
         key "filter-id";
         description
           "A list of preconfigured filters that can be applied
            to datastore subscriptions.";
         leaf filter-id {
           type string;
           description
             "An identifier to differentiate between selection
              filters.";
         }
         uses selection-filter-types;
       }
     }
        
     augment "/sn:subscriptions/sn:subscription" {
       when 'yp:datastore';
       description
         "This augmentation adds objects to a subscription that are
          specific to a datastore subscription, i.e., a subscription to
          a stream of datastore node updates.";
       uses update-policy;
     }
        
     augment "/sn:subscriptions/sn:subscription/sn:target" {
       description
         "This augmentation allows the datastore to be included as
          part of the selection-filtering criteria for a subscription.";
       case datastore {
         uses datastore-criteria;
       }
     }
   }
        

<CODE ENDS>

<コード終了>

6. IANA Considerations
6. IANAに関する考慮事項

This document registers the following namespace URI in the "IETF XML Registry" [RFC3688]:

このドキュメントは、「IETF XMLレジストリ」[RFC3688]に次の名前空間URIを登録します。

   URI: urn:ietf:params:xml:ns:yang:ietf-yang-push
        

Registrant Contact: The IESG.

登録者の連絡先:IESG。

XML: N/A; the requested URI is an XML namespace.

XML:なし。要求されたURIはXML名前空間です。

This document registers the following YANG module in the "YANG Module Names" registry [RFC6020]:

このドキュメントでは、「YANGモジュール名」レジストリ[RFC6020]に次のYANGモジュールを登録しています。

Name: ietf-yang-push

名前:ietf-yang-push

   Namespace: urn:ietf:params:xml:ns:yang:ietf-yang-push
        

Prefix: yp

プレフィックス:yp

Reference: RFC 8641

リファレンス:RFC 8641

7. Security Considerations
7. セキュリティに関する考慮事項

The YANG module specified in this document defines a schema for data that is designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS [RFC8446].

このドキュメントで指定されているYANGモジュールは、NETCONF [RFC6241]やRESTCONF [RFC8040]などのネットワーク管理プロトコルを介してアクセスするように設計されたデータのスキーマを定義します。最下層のNETCONF層はセキュアなトランスポート層であり、実装に必須のセキュアなトランスポートはセキュアシェル(SSH)[RFC6242]です。最下位のRESTCONFレイヤーはHTTPSであり、実装に必須のセキュアなトランスポートはTLS [RFC8446]です。

The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.

ネットワーク構成アクセス制御モデル(NACM)[RFC8341]は、特定のNETCONFまたはRESTCONFユーザーのアクセスを、利用可能なすべてのNETCONFまたはRESTCONFプロトコル操作およびコンテンツの事前構成されたサブセットに制限する手段を提供します。

There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability. (It should be noted that the YANG module defined in this document augments the YANG module defined in [RFC8639]. All security considerations that are listed in

このYANGモジュールには、書き込み/作成/削除が可能なデータノードがいくつか定義されています(つまり、config true、デフォルトです)。これらのデータノードは、一部のネットワーク環境では機密または脆弱であると見なされる場合があります。適切な保護なしにこれらのデータノードに書き込み操作(edit-configなど)を行うと、ネットワーク操作に悪影響を与える可能性があります。これらは、サブツリーとデータノード、およびそれらの機密性/脆弱性です。 (このドキュメントで定義されているYANGモジュールは、[RFC8639]で定義されているYANGモジュールを補強することに注意する必要があります。

[RFC8639] are also relevant for datastore subscriptions. In the following list, we focus on the new data nodes that are introduced in this document.)

[RFC8639]は、データストアのサブスクリプションにも関連しています。次のリストでは、このドキュメントで紹介されている新しいデータノードに焦点を当てています。

o Subtree "selection-filter" under container "filters": This subtree allows a subscriber to specify which objects or subtrees to include in a datastore subscription. An attacker could attempt to modify the filter. For example, the filter might be modified to result in very few objects being filtered in order to attempt to overwhelm the receiver. Alternatively, the filter might be modified to result in certain objects being excluded from updates, in which case certain changes would go unnoticed.

o コンテナ「filters」の下のサブツリー「selection-filter」:このサブツリーを使用すると、サブスクライバーは、データストアサブスクリプションに含めるオブジェクトまたはサブツリーを指定できます。攻撃者はフィルタを変更しようとする可能性があります。たとえば、フィルターを変更して、レシーバーを圧倒するためにフィルタリングされるオブジェクトが非常に少なくなるようにします。または、特定のオブジェクトが更新から除外されるようにフィルターを変更することもできます。その場合、特定の変更は気付かれません。

o Subtree "datastore" in choice "target" in list "subscription": Analogous to "selection filter", an attacker might attempt to modify the objects being filtered in order to overwhelm a receiver with a larger volume of object updates than expected or cause certain changes to go unnoticed.

o リスト「サブスクリプション」の選択「ターゲット」のサブツリー「データストア」:「選択フィルター」と同様に、攻撃者はフィルター処理されているオブジェクトを変更して、予想よりも大量のオブジェクト更新でレシーバーを圧倒したり、特定の原因を引き起こしたりする可能性があります気付かれないように変更します。

o Choice "update-trigger" in list "subscription": By modifying the update trigger, an attacker might alter the updates that are being sent in order to confuse a receiver, withhold certain updates to be sent to the receiver, and/or overwhelm a receiver. For example, an attacker might modify the period with which updates are reported for a periodic subscription, or it might modify the dampening period for an on-change subscription, resulting in a greater delay for successive updates (potentially affecting the responsiveness of applications that depend on the updates) or in a high volume of updates (to exhaust receiver resources).

o リスト「サブスクリプション」の「更新トリガー」の選択:更新トリガーを変更することにより、攻撃者は受信者を混乱させたり、受信者に送信する特定の更新を保留したり、またはそれらを圧倒したりするために送信されている更新を変更する可能性があります。レシーバー。たとえば、攻撃者は定期的なサブスクリプションの更新が報告される期間を変更したり、変更時のサブスクリプションのダンプニング期間を変更したりして、後続の更新の遅延を大きくする可能性があります(依存するアプリケーションの応答性に影響を与える可能性があります)更新時)または大量の更新時(受信者のリソースを使い果たすため)。

The NACM provides one means to mitigate these threats on the publisher side. In order to address those threats as a subscriber, the subscriber could monitor the subscription configuration for any unexpected changes and subscribe to updates to the YANG datastore nodes that represent its datastore subscriptions. As this volume of data is small, a paranoid subscriber could even revert to occasional polling to guard against a compromised subscription against subscription configuration updates itself.

NACMは、発行者側でこれらの脅威を軽減する1つの手段を提供します。サブスクライバーとしてこれらの脅威に対処するために、サブスクライバーは、予期しない変更がないかサブスクリプション構成を監視し、そのデータストアサブスクリプションを表すYANGデータストアノードへの更新をサブスクライブできます。このデータ量は少ないので、偏執的なサブスクライバーは、サブスクリプション構成の更新自体に対して、サブスクリプションが危険にさらされないようにするために、不定期のポーリングに戻ることさえできます。

Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:

このYANGモジュールの一部の読み取り可能なデータノードは、一部のネットワーク環境では機密または脆弱であると見なされる場合があります。したがって、これらのデータノードへの読み取りアクセスを制御することが重要です(たとえば、get、get-config、または通知を介して)。これらは、サブツリーとデータノード、およびそれらの機密性/脆弱性です。

o Subtree "selection-filter" under container "filters": If access control is not properly configured, can expose system internals to those who should not have access to this information.

o コンテナ「filters」の下のサブツリー「selection-filter」:アクセス制御が適切に構成されていない場合、この情報にアクセスしてはならないユーザーにシステム内部を公開できます。

o Subtree "datastore" in choice "target" in list "subscription": If access control is not properly configured, can expose system internals to those who should not have access to this information.

o リスト「サブスクリプション」の選択「ターゲット」のサブツリー「データストア」:アクセス制御が適切に構成されていない場合、この情報にアクセスできないはずのユーザーにシステム内部を公開できます。

o Choice "update-trigger" in list "subscription": If access control is not properly configured, can expose system internals to those who should not have access to this information.

o リスト「サブスクリプション」の「update-trigger」を選択:アクセス制御が適切に構成されていない場合、この情報にアクセスできないはずのユーザーにシステム内部を公開できます。

Some of the RPC operations in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control access to these operations. These are the operations and their sensitivity/vulnerability:

このYANGモジュールの一部のRPC操作は、一部のネットワーク環境では機密または脆弱であると見なされる場合があります。したがって、これらの操作へのアクセスを制御することが重要です。これらは操作とその感度/脆弱性です:

o RPC "resync-subscription": This RPC allows a subscriber of an on-change subscription to request a full push of objects in the subscription's scope. This can result in a large volume of data. An attacker could attempt to use this RPC to exhaust resources on the server to generate the data and could then attempt to overwhelm a receiver with the resulting large volume of data.

o RPC "resync-subscription":このRPCにより、変更時のサブスクリプションのサブスクライバーは、サブスクリプションのスコープ内のオブジェクトのフルプッシュを要求できます。これにより、大量のデータが生じる可能性があります。攻撃者はこのRPCを使用してサーバー上のリソースを使い果たしてデータを生成し、結果として大量のデータでレシーバーを圧倒する可能性があります。

8. References
8. 参考文献
8.1. Normative References
8.1. 引用文献

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2119] Bradner、S。、「要件レベルを示すためにRFCで使用するキーワード」、BCP 14、RFC 2119、DOI 10.17487 / RFC2119、1997年3月、<https://www.rfc-editor.org/info/ rfc2119>。

[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.

[RFC3688] Mealling、M。、「The IETF XML Registry」、BCP 81、RFC 3688、DOI 10.17487 / RFC3688、2004年1月、<https://www.rfc-editor.org/info/rfc3688>。

[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.

[RFC6020] Bjorklund、M。、編、「YANG-ネットワーク構成プロトコル(NETCONF)のデータモデリング言語」、RFC 6020、DOI 10.17487 / RFC6020、2010年10月、<https://www.rfc-editor。 org / info / rfc6020>。

[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.

[RFC6991] Schoenwaelder、J。、編、「Common YANG Data Types」、RFC 6991、DOI 10.17487 / RFC6991、2013年7月、<https://www.rfc-editor.org/info/rfc6991>。

[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.

[RFC7950] Bjorklund、M。、編、「The YANG 1.1 Data Modeling Language」、RFC 7950、DOI 10.17487 / RFC7950、2016年8月、<https://www.rfc-editor.org/info/rfc7950>。

[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.

[RFC8040] Bierman、A.、Bjorklund、M。、およびK. Watsen、「RESTCONFプロトコル」、RFC 8040、DOI 10.17487 / RFC8040、2017年1月、<https://www.rfc-editor.org/info/rfc8040 >。

[RFC8072] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Patch Media Type", RFC 8072, DOI 10.17487/RFC8072, February 2017, <https://www.rfc-editor.org/info/rfc8072>.

[RFC8072] Bierman、A.、Bjorklund、M。、およびK. Watsen、「YANG Patch Media Type」、RFC 8072、DOI 10.17487 / RFC8072、2017年2月、<https://www.rfc-editor.org/info / rfc8072>。

[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8174] Leiba、B。、「RFC 2119キーワードの大文字と小文字のあいまいさ」、BCP 14、RFC 8174、DOI 10.17487 / RFC8174、2017年5月、<https://www.rfc-editor.org/info/ rfc8174>。

[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>.

[RFC8341] Bierman、A。およびM. Bjorklund、「Network Configuration Access Control Model」、STD 91、RFC 8341、DOI 10.17487 / RFC8341、2018年3月、<https://www.rfc-editor.org/info/rfc8341 >。

[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, <https://www.rfc-editor.org/info/rfc8342>.

[RFC8342] Bjorklund、M.、Schoenwaelder、J.、Shafer、P.、Watsen、K。、およびR. Wilton、「Network Management Datastore Architecture(NMDA)」、RFC 8342、DOI 10.17487 / RFC8342、2018年3月、< https://www.rfc-editor.org/info/rfc8342>。

[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, <https://www.rfc-editor.org/info/rfc8446>.

[RFC8446] Rescorla、E。、「The Transport Layer Security(TLS)Protocol Version 1.3」、RFC 8446、DOI 10.17487 / RFC8446、2018年8月、<https://www.rfc-editor.org/info/rfc8446>。

[RFC8525] Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., and R. Wilton, "YANG Library", RFC 8525, DOI 10.17487/RFC8525, March 2019, <https://www.rfc-editor.org/info/rfc8525>.

[RFC8525] Bierman、A.、Bjorklund、M.、Schoenwaelder、J.、Watsen、K。、およびR. Wilton、「YANG Library」、RFC 8525、DOI 10.17487 / RFC8525、2019年3月、<https:// www .rfc-editor.org / info / rfc8525>。

[RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, E., and A. Tripathy, "Subscription to YANG Notifications", RFC 8639, DOI 10.17487/RFC8639, September 2019, <https://www.rfc-editor.org/info/rfc8639>.

[RFC8639] Voit、E.、Clemm、A.、Gonzalez Prieto、A.、Nilsen-Nygaard、E。、およびA. Tripathy、「Subscription to YANG Notifications」、RFC 8639、DOI 10.17487 / RFC8639、2019年9月、< https://www.rfc-editor.org/info/rfc8639>。

[W3C.REC-xml-20081126] Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", World Wide Web Consortium Recommendation REC-xml-20081126, November 2008, <https://www.w3.org/TR/2008/REC-xml-20081126>.

[W3C.REC-xml-20081126] Bray、T.、Paoli、J.、Sperberg-McQueen、M.、Maler、E。、およびF. Yergeau、「Extensible Markup Language(XML)1.0(Fifth Edition)」、 World Wide Web Consortium Recommendation REC-xml-20081126、2008年11月、<https://www.w3.org/TR/2008/REC-xml-20081126>。

[XPATH] Clark, J. and S. DeRose, "XML Path Language (XPath) Version 1.0", November 1999, <https://www.w3.org/TR/1999/REC-xpath-19991116>.

[XPATH] Clark、J.およびS. DeRose、「XML Path Language(XPath)Version 1.0」、1999年11月、<https://www.w3.org/TR/1999/REC-xpath-19991116>。

8.2. Informative References
8.2. 参考引用

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.

[RFC6241] Enns、R。、編、Bjorklund、M。、編、Schoenwaelder、J。、編、A。Bierman、編、「Network Configuration Protocol(NETCONF)」、RFC 6241、DOI 10.17487 / RFC6241、2011年6月、<https://www.rfc-editor.org/info/rfc6241>。

[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.

[RFC6242] Wasserman、M。、「Using the NETCONF Protocol over Secure Shell(SSH)」、RFC 6242、DOI 10.17487 / RFC6242、2011年6月、<https://www.rfc-editor.org/info/rfc6242>。

[RFC7923] Voit, E., Clemm, A., and A. Gonzalez Prieto, "Requirements for Subscription to YANG Datastores", RFC 7923, DOI 10.17487/RFC7923, June 2016, <https://www.rfc-editor.org/info/rfc7923>.

[RFC7923] Voit、E.、Clemm、A。、およびA. Gonzalez Prieto、「YANG Datastoresへのサブスクリプションの要件」、RFC 7923、DOI 10.17487 / RFC7923、2016年6月、<https://www.rfc-editor。 org / info / rfc7923>。

[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, <https://www.rfc-editor.org/info/rfc8340>.

[RFC8340] Bjorklund、M。およびL. Berger、編、「YANGツリー図」、BCP 215、RFC 8340、DOI 10.17487 / RFC8340、2018年3月、<https://www.rfc-editor.org/info/ rfc8340>。

[RFC8343] Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, <https://www.rfc-editor.org/info/rfc8343>.

[RFC8343] Bjorklund、M。、「A YANG Data Model for Interface Management」、RFC 8343、DOI 10.17487 / RFC8343、March 2018、<https://www.rfc-editor.org/info/rfc8343>。

[RFC8640] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, E., and A. Tripathy, "Dynamic Subscription to YANG Events and Datastores over NETCONF", RFC 8640, DOI 10.17487/RFC8640, September 2019, <https://www.rfc-editor.org/info/rfc8640>.

[RFC8640] Voit、E.、Clemm、A.、Gonzalez Prieto、A.、Nilsen-Nygaard、E.、A。Tripathy、「NETCONFを介したYANGイベントとデータストアへの動的サブスクリプション」、RFC 8640、DOI 10.17487 / RFC8640 、2019年9月、<https://www.rfc-editor.org/info/rfc8640>。

[Yang-Push-Notif-Cap] Lengyel, B., Clemm, A., and B. Claise, "Yang-Push Notification Capabilities", Work in Progress, draft-ietf-netconf-notification-capabilities-04, September 2019.

[Yang-Push-Notif-Cap] Lengyel、B.、Clemm、A。、およびB. Claise、「Yang-Push通知機能」、作業中、draft-ietf-netconf-notification-capabilities-04、2019年9月。

Appendix A. Subscription Errors
付録A.サブスクリプションエラー
A.1. RPC Failures
A.1. RPCエラー

Rejection of an RPC for any reason is indicated via an RPC error response from the publisher. Valid RPC errors returned include both (1) existing transport-layer RPC error codes, such as those seen with NETCONF in [RFC6241] and (2) subscription-specific errors, such as those defined in the YANG data model. As a result, how subscription errors are encoded in an RPC error response is transport dependent.

何らかの理由でRPCが拒否されたことは、パブリッシャーからのRPCエラー応答によって示されます。返される有効なRPCエラーには、(1)[RFC6241]のNETCONFで見られるような既存のトランスポート層RPCエラーコードと、(2)YANGデータモデルで定義されたようなサブスクリプション固有のエラーの両方が含まれます。その結果、RPCエラー応答でサブスクリプションエラーがどのようにエンコードされるかは、トランスポートに依存します。

References to specific identities in the ietf-subscribed-notifications YANG module [RFC8639] or the ietf-yang-push YANG module may be returned as part of the error responses resulting from failed attempts at datastore subscription. For errors defined as part of the ietf-subscribed-notifications YANG module, please refer to [RFC8639]. The errors defined in this document, grouped per RPC, are as follows:

ietf-subscribed-notifications YANGモジュール[RFC8639]またはietf-yang-push YANGモジュール内の特定のIDへの参照は、データストアサブスクリプションでの試行の失敗に起因するエラー応答の一部として返される場合があります。 ietf-subscribed-notifications YANGモジュールの一部として定義されたエラーについては、[RFC8639]を参照してください。このドキュメントで定義されているエラーは、RPCごとにグループ化されており、次のとおりです。

      establish-subscription          modify-subscription
      ---------------------------     ---------------------
       cant-exclude                    period-unsupported
       datastore-not-subscribable      update-too-big
       on-change-unsupported           sync-too-big
       on-change-sync-unsupported      unchanging-selection
       period-unsupported
       update-too-big                 resync-subscription
       sync-too-big                   ----------------------------
       unchanging-selection            no-such-subscription-resync
                                       sync-too-big
        

There is one final set of transport-independent RPC error elements included in the YANG data model. These are the four yang-data structures for failed datastore subscriptions:

YANGデータモデルには、トランスポートに依存しないRPCエラー要素の最後のセットが1つあります。これらは、失敗したデータストアサブスクリプションの4つのヤンデータ構造です。

1. yang-data "establish-subscription-error-datastore": This MUST be returned if information identifying the reason for an RPC error has not been placed elsewhere in the transport portion of a failed "establish-subscription" RPC response. This MUST be sent if hints are included.

1. yang-data "establish-subscription-error-datastore":RPCエラーの理由を識別する情報が、失敗した "establish-subscription" RPC応答のトランスポート部分の他の場所に配置されていない場合に返される必要があります。ヒントが含まれている場合は、これを送信する必要があります。

2. yang-data "modify-subscription-error-datastore": This MUST be returned if information identifying the reason for an RPC error has not been placed elsewhere in the transport portion of a failed "modify-subscription" RPC response. This MUST be sent if hints are included.

2. yang-data "modify-subscription-error-datastore":RPCエラーの理由を特定する情報が、失敗した "modify-subscription" RPC応答のトランスポート部分の他の場所に配置されていない場合に返される必要があります。ヒントが含まれている場合は、これを送信する必要があります。

3. yang-data "sn:delete-subscription-error": This MUST be returned if information identifying the reason for an RPC error has not been placed elsewhere in the transport portion of a failed "delete-subscription" or "kill-subscription" RPC response.

3. yang-data "sn:delete-subscription-error":RPCエラーの理由を特定する情報が、失敗した "delete-subscription"または "kill-subscription" RPCのトランスポート部分の他の場所に配置されていない場合に返される必要があります応答。

4. yang-data "resync-subscription-error": This MUST be returned if information identifying the reason for an RPC error has not been placed elsewhere in the transport portion of a failed "resync-subscription" RPC response.

4. yang-data "resync-subscription-error":RPCエラーの理由を特定する情報が、失敗した "resync-subscription" RPC応答のトランスポート部分の他の場所に配置されていない場合に返される必要があります。

A.2. Failure Notifications
A.2. 失敗通知

A subscription may be unexpectedly terminated or suspended independently of any RPC or configuration operation. In such cases, indications of such a failure MUST be provided. To accomplish this, a number of errors can be returned as part of the corresponding subscription state change notification. For this purpose, the following error identities are introduced in this document, in addition to those that were already defined in [RFC8639]:

サブスクリプションは、RPCまたは構成操作とは無関係に、予期せず終了または一時停止される場合があります。そのような場合、そのような失敗の表示が提供されなければなりません。これを実現するために、対応するサブスクリプションの状態変更通知の一部として、いくつかのエラーを返すことができます。この目的のために、[RFC8639]ですでに定義されているものに加えて、次のエラーIDがこのドキュメントで紹介されています。

   subscription-terminated        subscription-suspended
   ---------------------------    ----------------------
    datastore-not-subscribable     period-unsupported
    unchanging-selection           update-too-big
                                   synchronization-size
        

Acknowledgments

謝辞

For their valuable comments, discussions, and feedback, we wish to acknowledge Tim Jenkins, Martin Bjorklund, Kent Watsen, Susan Hares, Yang Geng, Peipei Guo, Michael Scharf, Guangying Zheng, Tom Petch, Henk Birkholz, Reshad Rahman, Qin Wu, Rohit Ranade, and Rob Wilton.

貴重なコメント、ディスカッション、フィードバックについて、ティムジェンキンス、マーティンビョークルンド、ケントワッセン、スーザンヘアス、ヤンゲン、ペイペイグオ、マイケルシャーフ、グアンインジェン、トムペッチ、ヘンクビルクホルツ、リシャドラーマン、キンウー、 Rohit Ranade、Rob Wilton。

Contributors

貢献者

The following individuals made substantial contributions to this document and should be considered coauthors. Their contributions include information contained in the YANG module provided in Section 5 of this document.

次の個人は、このドキュメントに多大な貢献をしており、共著者と見なされるべきです。彼らの貢献には、このドキュメントのセクション5で提供されているYANGモジュールに含まれている情報が含まれています。

Alberto Gonzalez Prieto Microsoft Email: alberto.gonzalez@microsoft.com

Alberto GonzalezがMicrosoftの電子メールで承認:alberto.gonzalez@microsoft.tsum

Ambika Prasad Tripathy Cisco Systems Email: ambtripa@cisco.com

Ambika Prasad Tripathy Cisco Systems Email: ambtripa@cisco.com

Einar Nilsen-Nygaard Cisco Systems Email: einarnn@cisco.com

Einar Nilsen-NygaardシスコシステムズEメール:einarnn@cisco.com

Andy Bierman YumaWorks Email: andy@yumaworks.com

Andy Bierman YumaWorksメール:andy@yumaworks.com

Balazs Lengyel Ericsson Email: balazs.lengyel@ericsson.com

Balazsポーランドエリクソンメール:balazs.lengyel@ericsson.com

Authors' Addresses

著者のアドレス

Alexander Clemm Futurewei

アレクサンダークレムフューチャーウェイ

   Email: ludwig@clemm.org
        

Eric Voit Cisco Systems

Eric Voit Cisco Systems

   Email: evoit@cisco.com