draft-ietf-netconf-distributed-notif-00.txt | draft-ietf-netconf-distributed-notif-01.txt | |||
---|---|---|---|---|
NETCONF T. Zhou | NETCONF T. Zhou | |||
Internet-Draft G. Zheng | Internet-Draft G. Zheng | |||
Intended status: Standards Track Huawei | Intended status: Standards Track Huawei | |||
Expires: April 6, 2021 E. Voit | Expires: May 6, 2021 E. Voit | |||
Cisco Systems | Cisco Systems | |||
T. Graf | T. Graf | |||
Swisscom | Swisscom | |||
P. Francois | P. Francois | |||
INSA-Lyon | INSA-Lyon | |||
October 3, 2020 | November 02, 2020 | |||
Subscription to Distributed Notifications | Subscription to Distributed Notifications | |||
draft-ietf-netconf-distributed-notif-00 | draft-ietf-netconf-distributed-notif-01 | |||
Abstract | Abstract | |||
This documents describes extensions to the YANG notifications | This documents describes extensions to the YANG notifications | |||
subscription to allow metrics being published directly from | subscription to allow metrics being published directly from | |||
processors on line cards to target receivers, while subscription is | processors on line cards to target receivers, while subscription is | |||
still maintained at the route processor in a distributed forwarding | still maintained at the route processor in a distributed forwarding | |||
system. | system. | |||
Requirements Language | Requirements Language | |||
skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 6, 2021. | This Internet-Draft will expire on May 6, 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Solution Overview . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. Subscription Decomposition . . . . . . . . . . . . . . . . . 6 | 4. Solution Overview . . . . . . . . . . . . . . . . . . . . . . 4 | |||
5. Publication Composition . . . . . . . . . . . . . . . . . . . 6 | 5. Subscription Decomposition . . . . . . . . . . . . . . . . . 6 | |||
6. Subscription State Change Notifications . . . . . . . . . . . 7 | 6. Publication Composition . . . . . . . . . . . . . . . . . . . 6 | |||
7. Publisher Configurations . . . . . . . . . . . . . . . . . . 7 | 7. Subscription State Change Notifications . . . . . . . . . . . 7 | |||
8. YANG Tree . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 8. Publisher Configurations . . . . . . . . . . . . . . . . . . 7 | |||
9. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 9. YANG Tree . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 10. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 12 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 11 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 12 | 15.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
A.1. Dynamic Subscription . . . . . . . . . . . . . . . . . . 12 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 13 | |||
A.2. Configured Subscription . . . . . . . . . . . . . . . . . 16 | A.1. Dynamic Subscription . . . . . . . . . . . . . . . . . . 13 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | A.2. Configured Subscription . . . . . . . . . . . . . . . . . 17 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
1. Introduction | 1. Introduction | |||
The mechanism to support a subscription to a continuous and | The mechanism to support a subscription to a continuous and | |||
customized stream of updates from a YANG datastore is defined in | customized stream of updates from a YANG datastore is defined in | |||
[RFC8639] and [RFC8641]. Requirements for Subscription to YANG | [RFC8639] and [RFC8641]. Requirements for Subscription to YANG | |||
Datastores are defined in [RFC7923] | Datastores are defined in [RFC7923] | |||
By streaming data from publishers to receivers, much better | By streaming data from publishers to receivers, much better | |||
performance and fine-grained sampling can be achieved than with | performance and fine-grained sampling can be achieved than with | |||
skipping to change at page 4, line 5 ¶ | skipping to change at page 4, line 5 ¶ | |||
Component Capability: is the subscription capability that each | Component Capability: is the subscription capability that each | |||
Publisher can expose to the Subscriber. | Publisher can expose to the Subscriber. | |||
Master: is the Publisher that interacts with the Subscriber to deal | Master: is the Publisher that interacts with the Subscriber to deal | |||
with the Global Subscription. It decomposes the Global Subscription | with the Global Subscription. It decomposes the Global Subscription | |||
to multiple Component Subscriptions and interacts with the Agents. | to multiple Component Subscriptions and interacts with the Agents. | |||
Agent: is the Publisher that interacts with the Master to deal with | Agent: is the Publisher that interacts with the Master to deal with | |||
the Component Subscription and pushing the data to the collector. | the Component Subscription and pushing the data to the collector. | |||
3. Solution Overview | Observation Domain: An Observation Domain is the largest set of | |||
Observation Points for which metrics can be collected by a metering | ||||
process. For example, a router line card may be an Observation | ||||
Domain if it is composed of several interfaces, each of which is an | ||||
Observation Point. In the YANG notification messages it generates, | ||||
the Observation Domain includes its Observation Domain ID, which is | ||||
unique per publisher process. That way, the collecting process can | ||||
identify the specific Observation Domain from the publisher that | ||||
sends the YANG notification messages. Every Observation Point is | ||||
associated with an Observation Domain. | ||||
Observation Domain ID: A 32-bit identifier of the Observation Domain | ||||
that is locally unique to the publisher process. The publisher | ||||
process uses the Observation Domain ID to uniquely identify to the | ||||
collecting process the Observation Domain that meters the metrics. | ||||
Receivers SHOULD use the transport session and the Observation Domain | ||||
ID field to separate different publisher streams originating from the | ||||
same publisher. | ||||
3. Motivation | ||||
Lost and corrupt YANG notification messages need to be recognized at | ||||
the receiver to ensure data integrity even when multiple publisher | ||||
processes publishing from the same transport session. | ||||
To preserve data integrity down to the publisher process, the | ||||
Observation Domain ID in the transport message header of the YANG | ||||
notification message is introduced. In case of UDP transport, this | ||||
is described in Section 3.2 of UDP based transport | ||||
[I-D.ietf-netconf-udp-notif]. | ||||
4. Solution Overview | ||||
Figure 2 below shows the distributed data export framework. | Figure 2 below shows the distributed data export framework. | |||
A collector usually includes two components, | A collector usually includes two components, | |||
o the Subscriber generates the subscription instructions to express | o the Subscriber generates the subscription instructions to express | |||
what and how the collector want to receive the data; | what and how the collector want to receive the data; | |||
o the Receiver is the target for the data publication. | o the Receiver is the target for the data publication. | |||
skipping to change at page 6, line 5 ¶ | skipping to change at page 6, line 16 ¶ | |||
o The Agents announce the status of their Component Subscriptions to | o The Agents announce the status of their Component Subscriptions to | |||
the Master. The status of the overall subscription is maintained | the Master. The status of the overall subscription is maintained | |||
by the Master. The Master is responsible for notifying the | by the Master. The Master is responsible for notifying the | |||
subscriber in case of problems with the Component Subscriptions. | subscriber in case of problems with the Component Subscriptions. | |||
The technical mechanisms or protocols used for the coordination of | The technical mechanisms or protocols used for the coordination of | |||
operational information between Master and Agent is out-of-scope of | operational information between Master and Agent is out-of-scope of | |||
this document. | this document. | |||
4. Subscription Decomposition | 5. Subscription Decomposition | |||
The Collector can only subscribe to the Master. This requires the | The Collector can only subscribe to the Master. This requires the | |||
Master to: | Master to: | |||
1. expose the Global Capability that can be served by multiple | 1. expose the Global Capability that can be served by multiple | |||
Publisher Agents; | Publisher Agents; | |||
2. disassemble the Global Subscription to multiple Component | 2. disassemble the Global Subscription to multiple Component | |||
Subscriptions, and distribute them to the Publisher Agents of the | Subscriptions, and distribute them to the Publisher Agents of the | |||
corresponding metric sources so that they not overlap; | corresponding metric sources so that they not overlap; | |||
skipping to change at page 6, line 29 ¶ | skipping to change at page 6, line 40 ¶ | |||
And the Agent to: | And the Agent to: | |||
o Inherit the Global Subscription properties from Publisher Master | o Inherit the Global Subscription properties from Publisher Master | |||
for its Component Subscription; | for its Component Subscription; | |||
o share the same life-cycle as the Global Subscription; | o share the same life-cycle as the Global Subscription; | |||
o share the same Subscription ID as the Global Subscription. | o share the same Subscription ID as the Global Subscription. | |||
5. Publication Composition | 6. Publication Composition | |||
The Publisher Agent collects data and encapsulates the packets per | The Publisher Agent collects data and encapsulates the packets per | |||
Component Subscription. The format and structure of the data records | Component Subscription. The format and structure of the data records | |||
are defined by the YANG schema, so that the decomposition at the | are defined by the YANG schema, so that the decomposition at the | |||
Receiver can benefit from the structured and hierarchical data | Receiver can benefit from the structured and hierarchical data | |||
records. | records. | |||
The Receiver is able to associate the YANG data records with | The Receiver is able to associate the YANG data records with | |||
Subscription ID [RFC8639] to the subscribed subscription and with | Subscription ID [RFC8639] to the subscribed subscription and with | |||
Message Generator ID [I-D.ietf-netconf-notification-messages] to one | Message Observation Domain ID | |||
of the Publisher Agents software processes to enable message | [I-D.ietf-netconf-notification-messages] to one of the Publisher | |||
integrity. | Agents software processes to enable message integrity. | |||
For the dynamic subscription, the output of the "establish- | For the dynamic subscription, the output of the "establish- | |||
subscription" RPC defined in [RFC8639] MUST include a list of Message | subscription" RPC defined in [RFC8639] MUST include a list of Message | |||
Generator IDs to indicate how the Global Subscription is decomposed | Observation Domain IDs to indicate how the Global Subscription is | |||
into several Component Subscriptions. | decomposed into several Component Subscriptions. | |||
The "subscription-started" and "subscription-modified" notification | The "subscription-started" and "subscription-modified" notification | |||
defined in [RFC8639] MUST also include a list of Message Generator | defined in [RFC8639] MUST also include a list of Message Observation | |||
IDs to notify the current Publishers for the corresponding Global | Domain IDs to notify the current Publishers for the corresponding | |||
Subscription. | Global Subscription. | |||
6. Subscription State Change Notifications | 7. Subscription State Change Notifications | |||
In addition to sending event records to Receivers, the Master MUST | In addition to sending event records to Receivers, the Master MUST | |||
also send subscription state change notifications [RFC8639] when | also send subscription state change notifications [RFC8639] when | |||
events related to subscription management have occurred. All the | events related to subscription management have occurred. All the | |||
subscription state change notifications MUST be delivered by the | subscription state change notifications MUST be delivered by the | |||
Master. | Master. | |||
When the subscription decomposition result changed, the | When the subscription decomposition result changed, the | |||
"subscription-modified" notification MUST be sent to indicate the new | "subscription-modified" notification MUST be sent to indicate the new | |||
list of Publishers. | list of Publishers. | |||
7. Publisher Configurations | 8. Publisher Configurations | |||
This document assumes that all Publisher Agents are preconfigured to | This document assumes that all Publisher Agents are preconfigured to | |||
push data. The actual working Publisher Agents are selected based on | push data. The actual working Publisher Agents are selected based on | |||
the subscription decomposition result. | the subscription decomposition result. | |||
All Publisher Agents share the same source IP address for data | All Publisher Agents share the same source IP address for data | |||
export. For connectionless data transport such as UDP based | export. For connectionless data transport such as UDP based | |||
transport [I-D.unyte-netconf-udp-notif] the same Layer 4 source port | transport [I-D.ietf-netconf-udp-notif] the same Layer 4 source port | |||
for data export can be used. For connection based data transport | for data export can be used. For connection based data transport | |||
such as HTTPS based transport [I-D.ietf-netconf-https-notif], each | such as HTTPS based transport [I-D.ietf-netconf-https-notif], each | |||
Publisher Agent MUST be able to acknowledge packet retrieval from | Publisher Agent MUST be able to acknowledge packet retrieval from | |||
Receivers, and therefore requires a dedicated Layer 4 source port per | Receivers, and therefore requires a dedicated Layer 4 source port per | |||
software process. | software process. | |||
The specific configuration on transports is described in the | The specific configuration on transports is described in the | |||
resposible documents. | resposible documents. | |||
8. YANG Tree | 9. YANG Tree | |||
module: ietf-distributed-notifications | module: ietf-distributed-notifications | |||
augment /sn:subscriptions/sn:subscription: | augment /sn:subscriptions/sn:subscription: | |||
+--ro message-generator-id* string | +--ro message-observation-domain-id* string | |||
augment /sn:subscription-started: | augment /sn:subscription-started: | |||
+--ro message-generator-id* string | +--ro message-observation-domain-id* string | |||
augment /sn:subscription-modified: | augment /sn:subscription-modified: | |||
+--ro message-generator-id* string | +--ro message-observation-domain-id* string | |||
augment /sn:establish-subscription/sn:output: | augment /sn:establish-subscription/sn:output: | |||
+--ro message-generator-id* string | +--ro message-observation-domain-id* string | |||
9. YANG Module | 10. YANG Module | |||
<CODE BEGINS> file "ietf-distributed-notifications@2020-05-09.yang" | <CODE BEGINS> file "ietf-distributed-notifications@2020-05-09.yang" | |||
module ietf-distributed-notif { | module ietf-distributed-notif { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace | namespace | |||
"urn:ietf:params:xml:ns:yang:ietf-distributed-notifications"; | "urn:ietf:params:xml:ns:yang:ietf-distributed-notifications"; | |||
prefix mso; | prefix mso; | |||
import ietf-subscribed-notifications { | import ietf-subscribed-notifications { | |||
prefix sn; | prefix sn; | |||
} | } | |||
skipping to change at page 8, line 45 ¶ | skipping to change at page 9, line 15 ¶ | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2020-05-09 { | revision 2020-05-09 { | |||
description | description | |||
"Initial version"; | "Initial version"; | |||
reference | reference | |||
"RFC XXXX: Subscription to Distributed Notifications"; | "RFC XXXX: Subscription to Distributed Notifications"; | |||
} | } | |||
grouping message-generator-ids { | grouping message-observation-domain-ids { | |||
description | description | |||
"Provides a reusable list of message-generator-ids."; | "Provides a reusable list of message-observation-domain-ids."; | |||
leaf-list message-generator-id { | leaf-list message-observation-domain-id { | |||
type string; | type string; | |||
config false; | config false; | |||
ordered-by user; | ordered-by user; | |||
description | description | |||
"Software process which created the message (e.g., | "Software process which created the message (e.g., | |||
processor 1 on linecard 1). This field is | processor 1 on linecard 1). This field is | |||
used to notify the collector the working originator."; | used to notify the collector the working originator."; | |||
} | } | |||
} | } | |||
augment "/sn:subscriptions/sn:subscription" { | augment "/sn:subscriptions/sn:subscription" { | |||
description | description | |||
"This augmentation allows the message generators to be | "This augmentation allows the message | |||
exposed for a subscription."; | Observation Domain ID to be exposed for a subscription."; | |||
uses message-generator-ids; | uses message-observation-domain-ids; | |||
} | } | |||
augment "/sn:subscription-started" { | augment "/sn:subscription-started" { | |||
description | description | |||
"This augmentation allows MSO specific parameters to be | "This augmentation allows MSO specific parameters to be | |||
exposed for a subscription."; | exposed for a subscription."; | |||
uses message-generator-ids; | uses message-observation-domain-ids; | |||
} | } | |||
augment "/sn:subscription-modified" { | augment "/sn:subscription-modified" { | |||
description | description | |||
"This augmentation allows MSO specific parameters to be | "This augmentation allows MSO specific parameters to be | |||
exposed for a subscription."; | exposed for a subscription."; | |||
uses message-generator-ids; | uses message-observation-domain-ids; | |||
} | } | |||
augment "/sn:establish-subscription/sn:output" { | augment "/sn:establish-subscription/sn:output" { | |||
description | description | |||
"This augmentation allows MSO specific parameters to be | "This augmentation allows MSO specific parameters to be | |||
exposed for a subscription."; | exposed for a subscription."; | |||
uses message-generator-ids; | uses message-observation-domain-ids; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
10. IANA Considerations | 11. IANA Considerations | |||
This document registers the following namespace URI in the IETF XML | This document registers the following namespace URI in the IETF XML | |||
Registry [RFC3688]: | Registry [RFC3688]: | |||
URI: urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications | URI: urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
skipping to change at page 10, line 23 ¶ | skipping to change at page 10, line 37 ¶ | |||
Name: ietf-subscribed-notifications | Name: ietf-subscribed-notifications | |||
Namespace: urn:ietf:params:xml:ns:yang:ietf-subscribed- | Namespace: urn:ietf:params:xml:ns:yang:ietf-subscribed- | |||
notifications | notifications | |||
Prefix: mso | Prefix: mso | |||
Reference: RFC XXXX | Reference: RFC XXXX | |||
11. Security Considerations | 12. Security Considerations | |||
The YANG module specified in this document defines a schema for data | The YANG module specified in this document defines a schema for data | |||
that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
is HTTPS, and the mandatory-to-implement secure transport is TLS | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
[RFC5246]. | [RFC5246]. | |||
The NETCONF Access Control Model (NACM) [RFC6536] provides the means | The NETCONF Access Control Model (NACM) [RFC6536] provides the means | |||
to restrict access for particular NETCONF or RESTCONF users to a | to restrict access for particular NETCONF or RESTCONF users to a | |||
preconfigured subset of all available NETCONF or RESTCONF protocol | preconfigured subset of all available NETCONF or RESTCONF protocol | |||
operations and content. | operations and content. | |||
The new data nodes introduced in this YANG module may be considered | The new data nodes introduced in this YANG module may be considered | |||
sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
important to control read access (e.g., via get-config or | important to control read access (e.g., via get-config or | |||
notification) to this data nodes. These are the subtrees and data | notification) to this data nodes. These are the subtrees and data | |||
nodes and their sensitivity/vulnerability: | nodes and their sensitivity/vulnerability: | |||
o /subscriptions/subscription/message-generator-ids | o /subscriptions/subscription/message-observation-domain-ids | |||
The entries in the two lists above will show where subscribed | The entries in the two lists above will show where subscribed | |||
resources might be located on the publishers. Access control MUST be | resources might be located on the publishers. Access control MUST be | |||
set so that only someone with proper access permissions has the | set so that only someone with proper access permissions has the | |||
ability to access this resource. | ability to access this resource. | |||
Other Security Considerations is the same as those discussed in YANG- | Other Security Considerations is the same as those discussed in YANG- | |||
Push [RFC8641]. | Push [RFC8641]. | |||
12. Contributors | 13. Contributors | |||
Alexander Clemm | Alexander Clemm | |||
Futurewai | Futurewai | |||
2330 Central Expressway | 2330 Central Expressway | |||
Santa Clara | Santa Clara | |||
California | California | |||
United States of America | United States of America | |||
Email: ludwig@clemm.org | Email: ludwig@clemm.org | |||
13. Acknowledgements | 14. Acknowledgements | |||
We thank Kent Watsen, Mahesh Jethanandani, Martin Bjorklund, Tim | We thank Kent Watsen, Mahesh Jethanandani, Martin Bjorklund, Tim | |||
Carey and Qin Wu for their constructive suggestions for improving | Carey and Qin Wu for their constructive suggestions for improving | |||
this document. | this document. | |||
14. References | 15. References | |||
14.1. Normative References | 15.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
skipping to change at page 12, line 23 ¶ | skipping to change at page 12, line 42 ¶ | |||
[RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, | |||
E., and A. Tripathy, "Subscription to YANG Notifications", | E., and A. Tripathy, "Subscription to YANG Notifications", | |||
RFC 8639, DOI 10.17487/RFC8639, September 2019, | RFC 8639, DOI 10.17487/RFC8639, September 2019, | |||
<https://www.rfc-editor.org/info/rfc8639>. | <https://www.rfc-editor.org/info/rfc8639>. | |||
[RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications | |||
for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, | |||
September 2019, <https://www.rfc-editor.org/info/rfc8641>. | September 2019, <https://www.rfc-editor.org/info/rfc8641>. | |||
14.2. Informative References | 15.2. Informative References | |||
[I-D.ietf-netconf-https-notif] | [I-D.ietf-netconf-https-notif] | |||
Jethanandani, M. and K. Watsen, "An HTTPS-based Transport | Jethanandani, M. and K. Watsen, "An HTTPS-based Transport | |||
for Configured Subscriptions", draft-ietf-netconf-https- | for Configured Subscriptions", draft-ietf-netconf-https- | |||
notif-04 (work in progress), July 2020. | notif-05 (work in progress), October 2020. | |||
[I-D.ietf-netconf-notification-messages] | [I-D.ietf-netconf-notification-messages] | |||
Voit, E., Jenkins, T., Birkholz, H., Bierman, A., and A. | Voit, E., Jenkins, T., Birkholz, H., Bierman, A., and A. | |||
Clemm, "Notification Message Headers and Bundles", draft- | Clemm, "Notification Message Headers and Bundles", draft- | |||
ietf-netconf-notification-messages-08 (work in progress), | ietf-netconf-notification-messages-08 (work in progress), | |||
November 2019. | November 2019. | |||
[I-D.unyte-netconf-udp-notif] | [I-D.ietf-netconf-udp-notif] | |||
Zhou, T., Zheng, G., Lucente, P., Graf, T., and P. | Zhou, T., Zheng, G., Lucente, P., Graf, T., and P. | |||
Francois, "UDP-based Transport for Configured | Francois, "UDP-based Transport for Configured | |||
Subscriptions", draft-unyte-netconf-udp-notif-00 (work in | Subscriptions", draft-ietf-netconf-udp-notif-01 (work in | |||
progress), July 2020. | progress), July 2020. | |||
Appendix A. Examples | Appendix A. Examples | |||
This appendix is non-normative. | This appendix is non-normative. | |||
A.1. Dynamic Subscription | A.1. Dynamic Subscription | |||
Figure 3 shows a typical dynamic subscription to the device with | Figure 3 shows a typical dynamic subscription to the device with | |||
distributed data export capability. | distributed data export capability. | |||
+-------------+ +-------------+ +-------------+ | +-------------+ +-------------+ +-------------+ | |||
| Subscriber/ | | Publisher | | Publisher | | | Subscriber/ | | Publisher | | Publisher | | |||
| Receiver | | (Master) | | (Agent) | | | Receiver | | (Master) | | (Agent) | | |||
+-------------+ +------+------+ +------+------+ | +-------------+ +------+------+ +------+------+ | |||
| | | | | | | | |||
| establish-subscription | | | | establish-subscription | | | |||
+------------------------------>+ component | | +------------------------------>+ component | | |||
| | subscription | | | | subscription | | |||
| RPC Reply: OK, id #22 +-------------->+ | | RPC Reply: OK, id #22 +-------------->+ | |||
| message generator ID [#1, #2] | | | | Observation Domain ID [#1,#2] | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| notif-mesg, id #22 | | | | notif-mesg, id #22 | | | |||
| message generator ID #1 | | | | Observation Domain ID #1 | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| notif-mesg, id#22 | | | | notif-mesg, id#22 | | | |||
| message generator ID #2 | | | | Observation Domain ID #2 | | | |||
+<----------------------------------------------+ | +<----------------------------------------------+ | |||
| | | | | | | | |||
| modify-subscription (id#22) | | | | modify-subscription (id#22) | | | |||
+------------------------------>+ component | | +------------------------------>+ component | | |||
| | subscription | | | | subscription | | |||
| RPC Reply: OK, id #22 +-------------->+ | | RPC Reply: OK, id #22 +-------------->+ | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| subscription-modified, id#22 | | | | subscription-modified, id#22 | | | |||
| message generator ID [#1] | | | | Observation Domain ID [#1] | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| notif-mesg, id #22 | | | | notif-mesg, id #22 | | | |||
| message generator ID #1 | | | | Observation Domain ID #1 | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| | | | | | | | |||
+ + + | + + + | |||
Fig. 3 Call Flow for Dynamic Subscription | Fig. 3 Call Flow for Dynamic Subscription | |||
A "establish-subscription" RPC request as per [RFC8641] is sent to | A "establish-subscription" RPC request as per [RFC8641] is sent to | |||
the Master with a successful response. An example of using NETCONF: | the Master with a successful response. An example of using NETCONF: | |||
skipping to change at page 14, line 29 ¶ | skipping to change at page 15, line 29 ¶ | |||
<yp:period>500</yp:period> | <yp:period>500</yp:period> | |||
</yp:periodic> | </yp:periodic> | |||
</establish-subscription> | </establish-subscription> | |||
</netconf:rpc> | </netconf:rpc> | |||
Fig. 4 "establish-subscription" Request | Fig. 4 "establish-subscription" Request | |||
As the device is able to fully satisfy the request, the request is | As the device is able to fully satisfy the request, the request is | |||
given a subscription ID of 22. The response as in Figure 5 indicates | given a subscription ID of 22. The response as in Figure 5 indicates | |||
that the subscription is decomposed into two component subscriptions | that the subscription is decomposed into two component subscriptions | |||
which will be published by two message generators: #1 and #2. | which will be published by two message Observation Domain ID: #1 and | |||
#2. | ||||
<rpc-reply message-id="101" | <rpc-reply message-id="101" | |||
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<id | <id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"> | |||
22 | 22 | |||
</id> | </id> | |||
<message-generator-id | <message-observation-domain-id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | |||
1 | 1 | |||
</message-generator-id> | </message-observation-domain-id> | |||
<message-generator-id | <message-observation-domain-id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | |||
2 | 2 | |||
</message-generator-id> | </message-observation-domain-id> | |||
</rpc-reply> | </rpc-reply> | |||
Fig. 5 "establish-subscription" Positive RPC Response | Fig. 5 "establish-subscription" Positive RPC Response | |||
Then, both Publishers send notifications with the corresponding piece | Then, both Publishers send notifications with the corresponding piece | |||
of data to the Receiver. | of data to the Receiver. | |||
The subscriber may invoke the "modify-subscription" RPC for a | The subscriber may invoke the "modify-subscription" RPC for a | |||
subscription it previously established. The RPC has no difference to | subscription it previously established. The RPC has no difference to | |||
the single publisher case as in [RFC8641]. Figure 6 provides an | the single publisher case as in [RFC8641]. Figure 6 provides an | |||
skipping to change at page 15, line 38 ¶ | skipping to change at page 16, line 38 ¶ | |||
</yp:periodic> | </yp:periodic> | |||
</modify-subscription> | </modify-subscription> | |||
</rpc> | </rpc> | |||
Fig. 6 "modify-subscription" Request | Fig. 6 "modify-subscription" Request | |||
If the modification is successfully accepted, the "subscription- | If the modification is successfully accepted, the "subscription- | |||
modified" subscription state notification is sent to the subscriber | modified" subscription state notification is sent to the subscriber | |||
by the Master. The notification, Figure 7 for example, indicates the | by the Master. The notification, Figure 7 for example, indicates the | |||
modified subscription is decomposed into one component subscription | modified subscription is decomposed into one component subscription | |||
which will be published by message generator #1. | which will be published by message Observation Domain #1. | |||
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | |||
<eventTime>2007-09-01T10:00:00Z</eventTime> | <eventTime>2007-09-01T10:00:00Z</eventTime> | |||
<subscription-modified | <subscription-modified | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" | |||
xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"> | xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"> | |||
<id>22</id> | <id>22</id> | |||
<yp:datastore | <yp:datastore | |||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | |||
ds:operational | ds:operational | |||
</yp:datastore> | </yp:datastore> | |||
<yp:datastore-xpath-filter | <yp:datastore-xpath-filter | |||
xmlns:ex="https://example.com/sample-data/1.0"> | xmlns:ex="https://example.com/sample-data/1.0"> | |||
/ex:bar | /ex:bar | |||
</yp:datastore-xpath-filter> | </yp:datastore-xpath-filter> | |||
<yp:periodic> | <yp:periodic> | |||
<yp:period>250</yp:period> | <yp:period>250</yp:period> | |||
</yp:periodic> | </yp:periodic> | |||
<message-generator-id | <message-observation-domain-id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notificationss> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notificationss> | |||
1 | 1 | |||
</message-generator-id> | </message-observation-domain-id> | |||
</subscription-modified> | </subscription-modified> | |||
</notification> | </notification> | |||
Fig. 7 "subscription-modified" Subscription State Notification | Fig. 7 "subscription-modified" Subscription State Notification | |||
A.2. Configured Subscription | A.2. Configured Subscription | |||
Figure 8 shows a typical configured subscription to the device with | Figure 8 shows a typical configured subscription to the device with | |||
distributed data export capability. | distributed data export capability. | |||
+-------------+ +-------------+ +-------------+ | +-------------+ +-------------+ +-------------+ | |||
| Receiver | | Publisher | | Publisher | | | Receiver | | Publisher | | Publisher | | |||
| | | (Master) | | (Agent) | | | | | (Master) | | (Agent) | | |||
+------+------+ +------+------+ +------+------+ | +------+------+ +------+------+ +------+------+ | |||
| | | | | | | | |||
| subscription-started, id#39 | | | | subscription-started, id#39 | | | |||
| message generator ID [#1, #2] | | | | Observation Domain ID [#1,#2] | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| notif-mesg, id#39 | | | | notif-mesg, id#39 | | | |||
| message generator ID #1 | | | | Observation Domain ID #1 | | | |||
+<------------------------------+ | | +<------------------------------+ | | |||
| | | | | | | | |||
| notif-mesg, id#39 | | | | notif-mesg, id#39 | | | |||
| message generator ID #2 | | | | Observation Domain ID #2 | | | |||
+<----------------------------------------------+ | +<----------------------------------------------+ | |||
| | | | | | | | |||
| | | | | | | | |||
| | | | | | | | |||
Fig. 8 Call Flow for Configured Subscription | Fig. 8 Call Flow for Configured Subscription | |||
Before starting to push data, the "subscription-started" subscription | Before starting to push data, the "subscription-started" subscription | |||
state notification is sent to the Receiver. The following example | state notification is sent to the Receiver. The following example | |||
assumes the NETCONF transport has already established. The | assumes the NETCONF transport has already established. The | |||
notification indicates that the configured subscription is decomposed | notification indicates that the configured subscription is decomposed | |||
into two component subscriptions which will be published by two | into two component subscriptions which will be published by two | |||
message generators: #1 and #2. | message Observation Domain: #1 and #2. | |||
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | |||
<eventTime>2007-09-01T10:00:00Z</eventTime> | <eventTime>2007-09-01T10:00:00Z</eventTime> | |||
<subscription-started | <subscription-started | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" | |||
xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"> | xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"> | |||
<identifier>39</identifier> | <identifier>39</identifier> | |||
<yp:datastore | <yp:datastore | |||
xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | |||
ds:operational | ds:operational | |||
</yp:datastore> | </yp:datastore> | |||
<yp:datastore-xpath-filter | <yp:datastore-xpath-filter | |||
xmlns:ex="https://example.com/sample-data/1.0"> | xmlns:ex="https://example.com/sample-data/1.0"> | |||
/ex:foo | /ex:foo | |||
</yp:datastore-xpath-filter> | </yp:datastore-xpath-filter> | |||
<yp:periodic> | <yp:periodic> | |||
<yp:period>250</yp:period> | <yp:period>250</yp:period> | |||
</yp:periodic> | </yp:periodic> | |||
<message-generator-id | <message-observation-domain-id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | |||
1 | 1 | |||
</message-generator-id> | </message-observation-domain-id> | |||
<message-generator-id | <message-observation-domain-id | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications> | |||
2 | 2 | |||
</message-generator-id> | </message-observation-domain-id> | |||
</subscription-started> | </subscription-started> | |||
</notification> | </notification> | |||
Fig. 9 "subscription-started" Subscription State Notification | Fig. 9 "subscription-started" Subscription State Notification | |||
Then, both Publishers send notifications with the corresponding data | Then, both Publishers send notifications with the corresponding data | |||
record to the Receiver. | record to the Receiver. | |||
Authors' Addresses | Authors' Addresses | |||
End of changes. 59 change blocks. | ||||
85 lines changed or deleted | 116 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |