| rfc9144.original | rfc9144.txt | |||
|---|---|---|---|---|
| Network Working Group A. Clemm | Internet Engineering Task Force (IETF) A. Clemm | |||
| Internet-Draft Y. Qu | Request for Comments: 9144 Y. Qu | |||
| Intended status: Standards Track Futurewei | Category: Standards Track Futurewei | |||
| Expires: February 7, 2022 J. Tantsura | ISSN: 2070-1721 J. Tantsura | |||
| Microsoft | Microsoft | |||
| A. Bierman | A. Bierman | |||
| YumaWorks | YumaWorks | |||
| August 6, 2021 | December 2021 | |||
| Comparison of NMDA datastores | Comparison of Network Management Datastore Architecture (NMDA) | |||
| draft-ietf-netmod-nmda-diff-12 | Datastores | |||
| Abstract | Abstract | |||
| This document defines an RPC operation to compare management | This document defines a Remote Procedure Call (RPC) operation to | |||
| datastores that comply with the NMDA architecture. | compare management datastores that comply with the Network Management | |||
| Datastore Architecture (NMDA). | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on February 7, 2022. | 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/rfc9144. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 Revised BSD License text as described in Section 4.e of the | |||
| the Trust Legal Provisions and are provided without warranty as | Trust Legal Provisions and are provided without warranty as described | |||
| described in the Simplified BSD License. | in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Key Words . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Key Words | |||
| 3. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 3 | 3. Data Model Overview | |||
| 4. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 4 | 4. YANG Data Model | |||
| 5. YANG Data Model . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Example | |||
| 6. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. Performance Considerations | |||
| 7. Performance Considerations . . . . . . . . . . . . . . . . . 14 | 7. IANA Considerations | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 7.1. Update to the IETF XML Registry | |||
| 8.1. Updates to the IETF XML Registry . . . . . . . . . . . . 15 | 7.2. Update to the YANG Module Names Registry | |||
| 8.2. Updates to the YANG Module Names Registry . . . . . . . . 15 | 8. Security Considerations | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 9. References | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 | 9.1. Normative References | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 9.2. Informative References | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 16 | Appendix A. Possible Future Extensions | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 18 | Acknowledgments | |||
| Appendix A. Possible Future Extensions . . . . . . . . . . . . . 18 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 1. Introduction | 1. Introduction | |||
| The revised Network Management Datastore Architecture (NMDA) | The revised NMDA [RFC8342] introduces a set of new datastores that | |||
| [RFC8342] introduces a set of new datastores that each hold YANG- | each hold YANG-defined data [RFC7950] and represent a different | |||
| defined data [RFC7950] and represent a different "viewpoint" on the | "viewpoint" on the data that is maintained by a server. New YANG | |||
| data that is maintained by a server. New YANG datastores that are | datastores that are introduced include <intended>, which contains | |||
| introduced include <intended>, which contains validated configuration | validated configuration data that a client application intends to be | |||
| data that a client application intends to be in effect, and | in effect, and <operational>, which contains operational state data | |||
| <operational>, which contains operational state data (such as | (such as statistics) as well as configuration data that is actually | |||
| statistics) as well as configuration data that is actually in effect. | in effect. | |||
| NMDA introduces in effect a concept of "lifecycle" for management | NMDA introduces, in effect, a concept of "lifecycle" for management | |||
| data, distinguishing between data that is part of a configuration | data, distinguishing between data that is part of a configuration | |||
| that was supplied by a user, configuration data that has actually | that was supplied by a user, configuration data that has actually | |||
| been successfully applied and that is part of the operational state, | been successfully applied and that is part of the operational state, | |||
| and overall operational state that includes applied configuration | and the overall operational state that includes applied configuration | |||
| data as well as status and statistics. | data as well as status and statistics. | |||
| As a result, data from the same management model can be reflected in | As a result, data from the same management model can be reflected in | |||
| multiple datastores. Clients need to specify the target datastore to | multiple datastores. Clients need to specify the target datastore to | |||
| be specific about which viewpoint of the data they want to access. | be specific about which viewpoint of the data they want to access. | |||
| For example, a client application can differentiate whether they are | For example, a client application can differentiate whether they are | |||
| interested in the configuration supplied to a server and that is | interested in the configuration that is supplied to a server and is | |||
| supposed to be in effect, or the configuration that has been applied | supposed to be in effect or the configuration that has been applied | |||
| and is actually in effect on the server. | and is actually in effect on the server. | |||
| Due to the fact that data can propagate from one datastore to | Due to the fact that data can propagate from one datastore to | |||
| another, it is possible for differences between datastores to occur. | another, it is possible for differences between datastores to occur. | |||
| Some of this is entirely expected, as there may be a time lag between | Some of this is entirely expected, as there may be a time lag between | |||
| when a configuration is given to the device and reflected in | when a configuration is given to the device and reflected in | |||
| <intended>, until when it actually takes effect and is reflected in | <intended> until when it actually takes effect and is reflected in | |||
| <operational>. However, there may be cases when a configuration item | <operational>. However, there may be cases when a configuration item | |||
| that was to be applied may not actually take effect at all or needs | that was to be applied may not actually take effect at all or needs | |||
| an unusually long time to do so. This can be the case due to certain | an unusually long time to do so. This can be the case due to certain | |||
| conditions not being met, certain parts of the configuration not | conditions not being met, certain parts of the configuration not | |||
| propagating because they are considered inactive, resource | propagating because they are considered inactive, resource | |||
| dependencies not being resolved, or even implementation errors in | dependencies not being resolved, or even implementation errors in | |||
| corner conditions. | corner conditions. | |||
| When configuration that is in effect is different from configuration | When the configuration that is in effect is different from the | |||
| that was applied, many issues can result. It becomes more difficult | configuration that was applied, many issues can result. It becomes | |||
| to operate the network properly due to limited visibility of actual | more difficult to operate the network properly due to limited | |||
| operational status which makes it more difficult to analyze and | visibility of the actual operational status, which makes it more | |||
| understand what is going on in the network. Services may be | difficult to analyze and understand what is going on in the network. | |||
| negatively affected (for example, degrading or breaking a customer | Services may be negatively affected (for example, degrading or | |||
| service) and network resources may be misallocated. | breaking a customer service), and network resources may be | |||
| misallocated. | ||||
| Applications can potentially analyze any differences between two | Applications can potentially analyze any differences between two | |||
| datastores by retrieving the contents from both datastores and | datastores by retrieving the contents from both datastores and | |||
| comparing them. However, in many cases this will be at the same time | comparing them. However, in many cases, this will be both costly and | |||
| costly and extremely wasteful. | extremely wasteful. | |||
| This document introduces a YANG data model which defines RPCs, | This document introduces a YANG data model that defines RPCs intended | |||
| intended to be used in conjunction with NETCONF [RFC6241] or RESTCONF | to be used in conjunction with NETCONF [RFC6241] or RESTCONF | |||
| [RFC8040], that allow a client to request a server to compare two | [RFC8040]. These RPCs allow a client to request a server to compare | |||
| NMDA datastores and report any differences. | two NMDA datastores and report any differences. | |||
| 2. Key Words | 2. Key Words | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. Definitions and Acronyms | 3. Data Model Overview | |||
| NMDA: Network Management Datastore Architecture | ||||
| RPC: Remote Procedure Call | ||||
| 4. Data Model Overview | ||||
| The core of the solution is a new management operation, <compare>, | The core of the solution is a new management operation, <compare>, | |||
| that compares the data tree contents of two datastores. The | that compares the data tree contents of two datastores. The | |||
| operation checks whether there are any differences in values or in | operation checks whether there are any differences in values or in | |||
| data nodes that are contained in either datastore, and returns any | data nodes that are contained in either datastore and returns any | |||
| differences as output. The output is returned in the format | differences as output. The output is returned in the format | |||
| specified in YANG-Patch [RFC8072]. | specified in YANG Patch [RFC8072]. | |||
| The YANG data model defines the <compare> operation as a new RPC. | The YANG data model defines the <compare> operation as a new RPC. | |||
| The operation takes the following input parameters: | The operation takes the following input parameters: | |||
| o source: The source identifies the datastore that will serve as the | source: The source identifies the datastore to serve as the | |||
| reference for the comparison, for example <intended>. | reference for the comparison -- for example, <intended>. | |||
| o target: The target identifies the datastore to compare against the | target: The target identifies the datastore to compare against the | |||
| source, for example <operational>. | source -- for example, <operational>. | |||
| o filter-spec: This is a choice between different filter constructs | filter-spec: This is a choice between different filter constructs to | |||
| to identify the parts of the datastore to be retrieved. It acts | identify the parts of the datastore to be retrieved. It acts as a | |||
| as a node selector that specifies which data nodes are within the | node selector that specifies which data nodes are within the scope | |||
| scope of the comparison and which nodes are outside the scope. | of the comparison and which nodes are outside the scope. This | |||
| This allows a comparison operation to be applied only to a | allows a comparison operation to be applied only to a specific | |||
| specific part of the datastore that is of interest, such as a | part of the datastore that is of interest, such as a particular | |||
| particular subtree. Note, the filter does not allow expressions | subtree. Note that the filter does not allow expressions that | |||
| that match against data node values, since this may incur | match against data node values, since this may incur | |||
| implementation difficulties and is not required for normal use | implementation difficulties and is not required for normal use | |||
| cases. | cases. | |||
| o all: When set, this parameter indicates that all differences | all: When set, this parameter indicates that all differences should | |||
| should be included, including differences pertaining to schema | be included, including differences pertaining to schema nodes that | |||
| nodes that exist in only one of the datastores. When this | exist in only one of the datastores. When this parameter is not | |||
| parameter is not included, a prefiltering step is automatically | included, a prefiltering step is automatically applied to exclude | |||
| applied to exclude data from the comparison that does not pertain | data from the comparison that does not pertain to both datastores: | |||
| to both datastores: if the same schema node is not present in both | if the same schema node is not present in both datastores, then | |||
| datastores, then all instances of that schema node and all its | all instances of that schema node and all its descendants are | |||
| descendants are excluded from the comparison. This allows client | excluded from the comparison. This allows client applications to | |||
| applications to focus on the differences that constitute true | focus on the differences that constitute true mismatches of | |||
| mismatches of instance data without needing to specify more | instance data without needing to specify more complex filter | |||
| complex filter constructs. | constructs. | |||
| o report-origin: When set, this parameter indicates that origin | report-origin: When set, this parameter indicates that origin | |||
| metadata should be included as part of RPC output. When this | metadata should be included as part of RPC output. When this | |||
| parameter is omitted, origin metadata in comparisons that involve | parameter is omitted, origin metadata in comparisons that involve | |||
| <operational> is by default omitted. Note that origin metadata | <operational> is by default omitted. Note that origin metadata | |||
| only applies to <operational> it is therefore also omitted in | only applies to <operational>; it is therefore also omitted in | |||
| comparisons that do not involve <operational> regardless of | comparisons that do not involve <operational> regardless of | |||
| whether or not the parameter is set. | whether or not the parameter is set. | |||
| The operation provides the following output parameter: | The operation provides the following output parameter: | |||
| o differences: This parameter contains the list of differences. | differences: This parameter contains the list of differences. Those | |||
| Those differences are encoded per the YANG-Patch data model | differences are encoded per the YANG Patch data model defined in | |||
| defined in RFC8072. When a datastore node in the source of the | [RFC8072]. When a datastore node in the source of the comparison | |||
| comparison is not present in the target of the comparison, this | is not present in the target of the comparison, this can be | |||
| can be indicated either as a "delete" or as a "remove" in the | indicated either as a "delete" or as a "remove" in the patch as | |||
| patch as there is no differentiation between those operations for | there is no differentiation between those operations for the | |||
| the purposes of the comparison. The YANG-Patch data model is | purposes of the comparison. The YANG Patch data model is | |||
| augmented to indicate the value of source datastore nodes in | augmented to indicate the value of source datastore nodes in | |||
| addition to the patch itself that would need to be applied to the | addition to the patch itself that would need to be applied to the | |||
| source to produce the target. When the target datastore is | source to produce the target. When the target datastore is | |||
| <operational> and the input parameter "report-origin" is set, | <operational> and the input parameter "report-origin" is set, | |||
| "origin" metadata is included as part of the patch. Including | origin metadata is included as part of the patch. Including | |||
| origin metadata can help in some cases explain the cause of a | origin metadata can help explain the cause of a difference in some | |||
| difference, for example when a data node is part of <intended> but | cases -- for example, when a data node is part of <intended> but | |||
| the origin of the same data node in <operational> is reported as | the origin of the same data node in <operational> is reported as | |||
| "system". | "system". | |||
| The data model is defined in the ietf-nmda-compare YANG module. Its | The data model is defined in the ietf-nmda-compare YANG module. Its | |||
| structure is shown in the following figure. The notation syntax | structure is shown in the following figure. The notation syntax | |||
| follows [RFC8340]. | follows [RFC8340]. | |||
| module: ietf-nmda-compare | module: ietf-nmda-compare | |||
| rpcs: | rpcs: | |||
| +---x compare | +---x compare | |||
| +---w input | +---w input | |||
| | +---w source identityref | | +---w source identityref | |||
| | +---w target identityref | | +---w target identityref | |||
| | +---w all? empty | | +---w all? empty | |||
| | +---w report-origin? empty | | +---w report-origin? empty | |||
| | +---w (filter-spec)? | | +---w (filter-spec)? | |||
| | +--:(subtree-filter) | | +--:(subtree-filter) | |||
| | | +---w subtree-filter? | | | +---w subtree-filter? | |||
| | +--:(xpath-filter) | | +--:(xpath-filter) | |||
| | +---w xpath-filter? yang:xpath1.0 {nc:xpath}? | | +---w xpath-filter? yang:xpath1.0 {nc:xpath}? | |||
| +--ro output | +--ro output | |||
| +--ro (compare-response)? | +--ro (compare-response)? | |||
| +--:(no-matches) | +--:(no-matches) | |||
| | +--ro no-matches? empty | | +--ro no-matches? empty | |||
| +--:(differences) | +--:(differences) | |||
| +--ro differences | +--ro differences | |||
| +--ro yang-patch | +--ro yang-patch | |||
| +--ro patch-id string | +--ro patch-id string | |||
| +--ro comment? string | +--ro comment? string | |||
| +--ro edit* [edit-id] | +--ro edit* [edit-id] | |||
| +--ro edit-id string | +--ro edit-id string | |||
| +--ro operation enumeration | +--ro operation enumeration | |||
| +--ro target target-resource-offset | +--ro target target-resource-offset | |||
| +--ro point? target-resource-offset | +--ro point? target-resource-offset | |||
| +--ro where? enumeration | +--ro where? enumeration | |||
| +--ro value? | +--ro value? | |||
| +--ro source-value? | +--ro source-value? | |||
| Structure of ietf-nmda-compare | Figure 1: Structure of ietf-nmda-compare | |||
| 5. YANG Data Model | 4. YANG Data Model | |||
| <CODE BEGINS> file "ietf-nmda-compare@2021-08-06.yang" | This YANG module includes references to [RFC6991], [RFC8342], | |||
| module ietf-nmda-compare { | [RFC8072], and [RFC6241]. | |||
| <CODE BEGINS> file "ietf-nmda-compare@2021-11-17.yang" | ||||
| module ietf-nmda-compare { | ||||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-nmda-compare"; | namespace "urn:ietf:params:xml:ns:yang:ietf-nmda-compare"; | |||
| prefix cmp; | prefix cmp; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference "RFC 6991: Common YANG Data Types"; | reference | |||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | } | |||
| import ietf-datastores { | import ietf-datastores { | |||
| prefix ds; | prefix ds; | |||
| reference "RFC 8342: Network Management Datastore | reference | |||
| Architecture (NMDA)"; | "RFC 8342: Network Management Datastore | |||
| Architecture (NMDA)"; | ||||
| } | } | |||
| import ietf-yang-patch { | import ietf-yang-patch { | |||
| prefix ypatch; | prefix ypatch; | |||
| reference "RFC 8072: YANG Patch Media Type"; | reference | |||
| "RFC 8072: YANG Patch Media Type"; | ||||
| } | } | |||
| import ietf-netconf { | import ietf-netconf { | |||
| prefix nc; | prefix nc; | |||
| reference "RFC6241: Network Configuration Protocol (NETCONF)"; | reference | |||
| "RFC 6241: Network Configuration Protocol (NETCONF)"; | ||||
| } | } | |||
| organization "IETF"; | organization | |||
| "IETF NETMOD (Network Modeling) Working Group"; | ||||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/netconf/> | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netconf@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| Author: Alexander Clemm | Author: Alexander Clemm | |||
| <mailto:ludwig@clemm.org> | <mailto:ludwig@clemm.org> | |||
| Author: Yingzhen Qu | Author: Yingzhen Qu | |||
| <mailto:yqu@futurewei.com> | <mailto:yqu@futurewei.com> | |||
| Author: Jeff Tantsura | Author: Jeff Tantsura | |||
| <mailto:jefftant.ietf@gmail.com> | <mailto:jefftant.ietf@gmail.com> | |||
| skipping to change at page 7, line 33 ¶ | skipping to change at line 289 ¶ | |||
| <mailto:ludwig@clemm.org> | <mailto:ludwig@clemm.org> | |||
| Author: Yingzhen Qu | Author: Yingzhen Qu | |||
| <mailto:yqu@futurewei.com> | <mailto:yqu@futurewei.com> | |||
| Author: Jeff Tantsura | Author: Jeff Tantsura | |||
| <mailto:jefftant.ietf@gmail.com> | <mailto:jefftant.ietf@gmail.com> | |||
| Author: Andy Bierman | Author: Andy Bierman | |||
| <mailto:andy@yumaworks.com>"; | <mailto:andy@yumaworks.com>"; | |||
| description | description | |||
| "The YANG data model defines a new operation, <compare>, that | "The YANG data model defines a new operation, <compare>, that | |||
| can be used to compare NMDA datastores. | can be used to compare NMDA datastores. | |||
| Copyright (c) 2021 IETF Trust and the persons identified as | Copyright (c) 2021 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of | This version of this YANG module is part of RFC 9144; see the | |||
| draft-ietf-netmod-nmda-diff-12; see the RFC itself for full | RFC itself for full legal notices."; | |||
| legal notices. | ||||
| NOTE TO RFC EDITOR: Please replace above reference to | ||||
| draft-ietf-netmod-nmda-diff-12 with RFC number when published | ||||
| (i.e. RFC xxxx)."; | ||||
| revision 2021-08-06 { | revision 2021-11-17 { | |||
| description | description | |||
| "Initial revision. | "Initial revision."; | |||
| NOTE TO RFC EDITOR: | ||||
| (1)Please replace the above revision date to | ||||
| the date of RFC publication when published. | ||||
| (2) Please replace the date in the file name | ||||
| (ietf-nmda-compare@2021-08-06.yang) to the date of RFC | ||||
| publication. | ||||
| (3) Please replace the following reference to | ||||
| draft-ietf-netmod-nmda-diff-12 with RFC number when published | ||||
| (i.e. RFC xxxx)."; | ||||
| reference | reference | |||
| "draft-ietf-netmod-nmda-diff-12: Comparison of NMDA | "RFC 9144: Comparison of Network Management Datastore | |||
| datastores"; | Architecture (NMDA) Datastores"; | |||
| } | } | |||
| /* RPC */ | /* RPC */ | |||
| rpc compare { | rpc compare { | |||
| description | description | |||
| "NMDA datastore compare operation."; | "NMDA datastore compare operation."; | |||
| input { | input { | |||
| leaf source { | leaf source { | |||
| type identityref { | type identityref { | |||
| base ds:datastore; | base ds:datastore; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| skipping to change at page 8, line 52 ¶ | skipping to change at line 341 ¶ | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The target datastore to be compared."; | "The target datastore to be compared."; | |||
| } | } | |||
| leaf all { | leaf all { | |||
| type empty; | type empty; | |||
| description | description | |||
| "When this leaf is provided, all data nodes are compared, | "When this leaf is provided, all data nodes are compared, | |||
| whether their schema node pertains to both datastores or | whether their schema node pertains to both datastores or | |||
| not. When this leaf is omitted, a prefiltering step is | not. When this leaf is omitted, a prefiltering step is | |||
| automatically applied that excludes data nodes from the | automatically applied that excludes data nodes from the | |||
| comparison that can occur in only one datastore but not | comparison that can occur in only one datastore but not | |||
| the other. Specifically, if one of the datastores | the other. Specifically, if one of the datastores | |||
| (source or target) contains only configuration data and | (source or target) contains only configuration data and | |||
| the other datastore is <operational>, data nodes for | the other datastore is <operational>, data nodes for | |||
| which config is false are excluded from the comparison."; | the config that is false are excluded from the | |||
| comparison."; | ||||
| } | } | |||
| leaf report-origin { | leaf report-origin { | |||
| type empty; | type empty; | |||
| description | description | |||
| "When this leaf is provided, origin metadata is | "When this leaf is provided, origin metadata is | |||
| included as part of RPC output. When this leaf is | included as part of RPC output. When this leaf is | |||
| omitted, origin metadata in comparisons that involve | omitted, origin metadata in comparisons that involve | |||
| <operational> is by default omitted."; | <operational> is by default omitted."; | |||
| } | } | |||
| choice filter-spec { | choice filter-spec { | |||
| description | description | |||
| "Identifies the portions of the datastores to be | "Identifies the portions of the datastores to be | |||
| compared."; | compared."; | |||
| anydata subtree-filter { | anydata subtree-filter { | |||
| description | description | |||
| "This parameter identifies the portions of the | "This parameter identifies the portions of the | |||
| target datastore to retrieve."; | target datastore to retrieve."; | |||
| reference "RFC 6241, Section 6."; | reference | |||
| "RFC 6241, Section 6."; | ||||
| } | } | |||
| leaf xpath-filter { | leaf xpath-filter { | |||
| if-feature nc:xpath; | if-feature "nc:xpath"; | |||
| type yang:xpath1.0; | type yang:xpath1.0; | |||
| description | description | |||
| "This parameter contains an XPath expression | "This parameter contains an XPath expression | |||
| identifying the portions of the target | identifying the portions of the target | |||
| datastore to retrieve."; | datastore to retrieve."; | |||
| reference "RFC 6991: Common YANG Data Types"; | reference | |||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| choice compare-response { | choice compare-response { | |||
| description | description | |||
| "Comparison results."; | "Comparison results."; | |||
| leaf no-matches { | leaf no-matches { | |||
| type empty; | type empty; | |||
| description | description | |||
| "This leaf indicates that the filter did not match | "This leaf indicates that the filter did not match | |||
| anything and nothing was compared."; | anything and nothing was compared."; | |||
| } | } | |||
| container differences { | container differences { | |||
| description | description | |||
| "The list of differences, encoded per RFC8072 with an | "The list of differences, encoded per RFC 8072 with an | |||
| augmentation to include source values where applicable. | augmentation to include source values where applicable. | |||
| When a datastore node in the source is not present in | When a datastore node in the source is not present in | |||
| the target, this can be indicated either as a 'delete' | the target, this can be indicated either as a 'delete' | |||
| or as a 'remove' as there is no difference between | or as a 'remove' as there is no difference between | |||
| them for the purposes of the comparison."; | them for the purposes of the comparison."; | |||
| uses ypatch:yang-patch { | uses ypatch:yang-patch { | |||
| augment "yang-patch/edit" { | augment "yang-patch/edit" { | |||
| description | description | |||
| "Provide the value of the source of the patch, | "Provides the value of the source of the patch, | |||
| respectively of the comparison, in addition to | respectively of the source of the comparison, in | |||
| the target value, where applicable."; | addition to the target value, where applicable."; | |||
| anydata source-value { | anydata source-value { | |||
| when "../operation = 'delete'" | when "../operation = 'delete'" | |||
| + "or ../operation = 'merge'" | + "or ../operation = 'merge'" | |||
| + "or ../operation = 'move'" | + "or ../operation = 'move'" | |||
| + "or ../operation = 'replace'" | + "or ../operation = 'replace'" | |||
| + "or ../operation = 'remove'"; | + "or ../operation = 'remove'"; | |||
| description | description | |||
| "The anydata 'value' is only used for 'delete', | "The anydata 'value' is only used for 'delete', | |||
| 'move', 'merge', 'replace', and 'remove' | 'move', 'merge', 'replace', and 'remove' | |||
| operations."; | operations."; | |||
| } | } | |||
| reference "RFC 8072: YANG Patch Media Type"; | reference | |||
| "RFC 8072: YANG Patch Media Type"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. Example | 5. Example | |||
| The following example compares the difference between <operational> | The following example compares the difference between <operational> | |||
| and <intended> for a subtree under "interfaces". The subtree | and <intended> for a subtree under "interfaces". The subtree | |||
| contains a subset of objects that are defined in a YANG data model | contains a subset of objects that are defined in a YANG data model | |||
| for the management of interfaces defined in [RFC8343]. For the | for the management of interfaces defined in [RFC8343]. For the | |||
| purposes of understanding the subsequent example, the following | purposes of understanding the subsequent example, the following | |||
| excerpt of the data model whose instantiation is the basis of the | excerpt of the data model whose instantiation is the basis of the | |||
| comparison is provided: | comparison is provided: | |||
| container interfaces { | container interfaces { | |||
| description | description | |||
| "Interface parameters."; | "Interface parameters."; | |||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the interface". | "The name of the interface."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "A textual description of the interface."; | "A textual description of the interface."; | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "true"; | default "true"; | |||
| description | description | |||
| "This leaf contains the configured, desired state of the | "This leaf contains the configured, desired state of the | |||
| interface.";" | interface."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| The contents of <intended> and <operational> datastores: | The contents of <intended> and <operational> datastores in XML | |||
| [W3C.REC-xml-20081126]: | ||||
| //INTENDED | <!--INTENDED--> | |||
| <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"> | <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"> | |||
| <interface> | <interface> | |||
| <name>eth0</name> | <name>eth0</name> | |||
| <enabled>false</enabled> | <enabled>false</enabled> | |||
| <description>ip interface</description> | <description>ip interface</description> | |||
| </interface> | </interface> | |||
| </interfaces> | </interfaces> | |||
| //OPERATIONAL | <!--OPERATIONAL--> | |||
| <interfaces | <interfaces | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" | xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" | |||
| xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"> | xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"> | |||
| <interface or:origin="or:learned"> | <interface or:origin="or:learned"> | |||
| <name>eth0</name> | <name>eth0</name> | |||
| <enabled>true</enabled> | <enabled>true</enabled> | |||
| </interface> | </interface> | |||
| </interfaces> | </interfaces> | |||
| <operational> does not contain an instance for leaf "description" | <operational> does not contain an instance for leaf "description" | |||
| that is contained in <intended>. Another leaf, "enabled", has | that is contained in <intended>. Another leaf, "enabled", has | |||
| different values in the two datastores, being "true" in <operational> | different values in the two datastores, being "true" in <operational> | |||
| and "false" in <intended>. A third leaf, "name", is the same in both | and "false" in <intended>. A third leaf, "name", is the same in both | |||
| cases. The origin of the leaf instances in <operational> is | cases. The origin of the leaf instances in <operational> is | |||
| "learned", which may help explain the discrepancies. | "learned", which may help explain the discrepancies. | |||
| RPC request to compare <operational> (source of the comparison) with | RPC request to compare <operational> (source of the comparison) with | |||
| <intended>(target of the comparison): | <intended> (target of the comparison): | |||
| <rpc message-id="101" | <rpc message-id="101" | |||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
| <compare xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare" | <compare xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare" | |||
| xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"> | |||
| <source>ds:operational</source> | <source>ds:operational</source> | |||
| <target>ds:intended</target> | <target>ds:intended</target> | |||
| <report-origin/> | <report-origin/> | |||
| <xpath-filter | <xpath-filter | |||
| xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"> | xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"> | |||
| /if:interfaces | /if:interfaces | |||
| </xpath-filter> | </xpath-filter> | |||
| </compare> | </compare> | |||
| </rpc> | </rpc> | |||
| RPC reply, when a difference is detected: | RPC reply when a difference is detected: | |||
| <rpc-reply | <rpc-reply | |||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| message-id="101"> | message-id="101"> | |||
| <differences | <differences | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare" | xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare" | |||
| xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"> | xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"> | |||
| <yang-patch> | <yang-patch> | |||
| <patch-id>interface status</patch-id> | <patch-id>interface status</patch-id> | |||
| <comment> | <comment> | |||
| diff between operational (source) and intended (target) | diff between operational (source) and intended (target) | |||
| </comment> | </comment> | |||
| <edit> | <edit> | |||
| <edit-id>1</edit-id> | <edit-id>1</edit-id> | |||
| <operation>replace</operation> | <operation>replace</operation> | |||
| <target>/ietf-interfaces:interface=eth0/enabled</target> | <target>/ietf-interfaces:interface=eth0/enabled</target> | |||
| <value> | <value> | |||
| <if:enabled>false<if:enabled> | <if:enabled>false</if:enabled> | |||
| </value> | </value> | |||
| <source-value> | <source-value> | |||
| <if:enabled or:origin="or:learned">true</if:enabled> | <if:enabled or:origin="or:learned">true</if:enabled> | |||
| </source-value> | </source-value> | |||
| </edit> | </edit> | |||
| <edit> | <edit> | |||
| <edit-id>2</edit-id> | <edit-id>2</edit-id> | |||
| <operation>create</operation> | <operation>create</operation> | |||
| <target>/ietf-interfaces:interface=eth0/description</target> | <target>/ietf-interfaces:interface=eth0/description</target> | |||
| <value> | <value> | |||
| <if:description>ip interface<description> | <if:description>ip interface</if:description> | |||
| </value> | </value> | |||
| </edit> | </edit> | |||
| </yang-patch> | </yang-patch> | |||
| </differences> | </differences> | |||
| </rpc-reply> | </rpc-reply> | |||
| The same request in RESTCONF (using JSON format): | The same request in RESTCONF (using JSON format [RFC7951]): | |||
| POST /restconf/operations/ietf-nmda-compare:compare HTTP/1.1 | POST /restconf/operations/ietf-nmda-compare:compare HTTP/1.1 | |||
| Host: example.com | Host: example.com | |||
| Content-Type: application/yang-data+json | Content-Type: application/yang-data+json | |||
| Accept: application/yang-data+json | Accept: application/yang-data+json | |||
| { "ietf-nmda-compare:input" : { | { "ietf-nmda-compare:input" : { | |||
| "source" : "ietf-datastores:operational", | "source" : "ietf-datastores:operational", | |||
| "target" : "ietf-datastores:intended", | "target" : "ietf-datastores:intended", | |||
| "report-origin" : null, | "report-origin" : null, | |||
| skipping to change at page 14, line 4 ¶ | skipping to change at line 558 ¶ | |||
| Content-Type: application/yang-data+json | Content-Type: application/yang-data+json | |||
| Accept: application/yang-data+json | Accept: application/yang-data+json | |||
| { "ietf-nmda-compare:input" : { | { "ietf-nmda-compare:input" : { | |||
| "source" : "ietf-datastores:operational", | "source" : "ietf-datastores:operational", | |||
| "target" : "ietf-datastores:intended", | "target" : "ietf-datastores:intended", | |||
| "report-origin" : null, | "report-origin" : null, | |||
| "xpath-filter" : "/ietf-interfaces:interfaces" | "xpath-filter" : "/ietf-interfaces:interfaces" | |||
| } | } | |||
| } | } | |||
| The same response in RESTCONF (using JSON format): | The same response in RESTCONF (using JSON format): | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Date: Thu, 24 Jan 2019 20:56:30 GMT | Date: Thu, 24 Jan 2019 20:56:30 GMT | |||
| Server: example-server | Server: example-server | |||
| Content-Type: application/yang-data+json | Content-Type: application/yang-data+json | |||
| { "ietf-nmda-compare:output" : { | { "ietf-nmda-compare:output" : { | |||
| "differences" : { | "differences" : { | |||
| "ietf-yang-patch:yang-patch" : { | "ietf-yang-patch:yang-patch" : { | |||
| "patch-id" : "interface status", | "patch-id" : "interface status", | |||
| "comment" : "diff between intended (source) and operational", | "comment" : "diff between intended (source) and operational", | |||
| "edit" : [ | "edit" : [ | |||
| { | { | |||
| "edit-id" : "1", | "edit-id" : "1", | |||
| "operation" : "replace", | "operation" : "replace", | |||
| "target" : "/ietf-interfaces:interface=eth0/enabled", | "target" : "/ietf-interfaces:interface=eth0/enabled", | |||
| "value" : { | "value" : { | |||
| "ietf-interfaces:interface/enabled" : "false" | "ietf-interfaces:interface/enabled" : "false" | |||
| }, | }, | |||
| "source-value" : { | "source-value" : { | |||
| "ietf-interfaces:interface/enabled" : "true", | "ietf-interfaces:interface/enabled" : "true", | |||
| "@ietf-interfaces:interface/enabled" : { | "@ietf-interfaces:interface/enabled" : { | |||
| "ietf-origin:origin" : "ietf-origin:learned" | "ietf-origin:origin" : "ietf-origin:learned" | |||
| } | } | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "edit-id" : "2", | "edit-id" : "2", | |||
| "operation" : "create", | "operation" : "create", | |||
| "target" : "/ietf-interfaces:interface=eth0/description", | "target" : "/ietf-interfaces:interface=eth0/description", | |||
| "value" : { | "value" : { | |||
| "ietf-interface:interface/description" : "ip interface" | "ietf-interface:interface/description" : "ip interface" | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 7. Performance Considerations | 6. Performance Considerations | |||
| The compare operation can be computationally expensive. While | The <compare> operation can be computationally expensive. While | |||
| responsible client applications are expected to use the operation | responsible client applications are expected to use the operation | |||
| responsibly and sparingly only when warranted, implementations need | responsibly and sparingly only when warranted, implementations need | |||
| to be aware of the fact that excessive invocation of this operation | to be aware of the fact that excessive invocation of this operation | |||
| will burden system resources and need to ensure that system | will burden system resources and need to ensure that system | |||
| performance will not be adversely impacted. One possibility for an | performance will not be adversely impacted. One possibility for an | |||
| implementation to mitigate against this is to limit the number of | implementation to mitigate against this is to limit the number of | |||
| requests that are served to a client, or to any number of clients, in | requests that are served to a client, or to any number of clients, in | |||
| any one time interval, by rejecting requests made at a higher | any one time interval, by rejecting requests made at a higher | |||
| frequency than the implementation can reasonably sustain. | frequency than the implementation can reasonably sustain. | |||
| While useful, tools such as YANG Data Models that allow for the | While useful, tools such as YANG data models that allow for the | |||
| monitoring of server resources, system performance, and statistics | monitoring of server resources, system performance, and statistics | |||
| about RPCs and RPC rates are outside the scope of this document. | about RPCs and RPC rates are outside the scope of this document. | |||
| When defined, any such model should be general in nature and not | When defined, any such model should be general in nature and not | |||
| limited to the RPC operation defined in this document. | limited to the RPC operation defined in this document. | |||
| 8. IANA Considerations | 7. IANA Considerations | |||
| 8.1. Updates to the IETF XML Registry | ||||
| This document registers one URI in the IETF XML registry [RFC3688]. | ||||
| Following the format in [RFC3688], the following registration is | ||||
| requested: | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-nmda-compare | ||||
| Registrant Contact: The IESG. | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| 8.2. Updates to the YANG Module Names Registry | 7.1. Update to the IETF XML Registry | |||
| This document registers a YANG module in the YANG Module Names | IANA has registered the following URI in the "IETF XML Registry" | |||
| registry [RFC6020]. Following the format in [RFC6020], the following | [RFC3688]: | |||
| registration is requested: | ||||
| name: ietf-nmda-compare | URI: urn:ietf:params:xml:ns:yang:ietf-nmda-compare | |||
| Registrant Contact: The IESG. | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| namespace: urn:ietf:params:xml:ns:yang:ietf-nmda-compare | 7.2. Update to the YANG Module Names Registry | |||
| prefix: cmp | IANA has registered the following YANG module in the "YANG Module | |||
| Names" registry [RFC6020]: | ||||
| reference: draft-ietf-netmod-nmda-diff-12 (RFC form) | name: ietf-nmda-compare | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-nmda-compare | ||||
| prefix: cmp | ||||
| reference: RFC 9144 | ||||
| 9. Security Considerations | 8. 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 | |||
| [RFC8446]. | [RFC8446]. | |||
| The NETCONF access control model [RFC8341] provides the means to | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
| restrict access for particular NETCONF or RESTCONF users to a | provides the means to restrict access for particular NETCONF or | |||
| preconfigured subset of all available NETCONF or RESTCONF protocol | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
| operations and content. | RESTCONF protocol operations and content. | |||
| NACM specifies access for the server in its entirety and the same | NACM specifies access for the server in its entirety, and the same | |||
| access rules apply to all datastores. Any subtrees to which a | access rules apply to all datastores. Any subtrees to which a | |||
| requestor does not have read access are silently skipped and not | requestor does not have read access are silently skipped and not | |||
| included in the comparison. | included in the comparison. | |||
| The RPC operation defined in this YANG module, "compare", may be | The RPC operation defined in this YANG module, <compare>, may be | |||
| considered sensitive or vulnerable in some network environments. It | considered sensitive or vulnerable in some network environments. It | |||
| is thus important to control access to this operation. This is the | is thus important to control access to this operation. This is the | |||
| sensitivity/vulnerability of RPC operation "compare": | sensitivity/vulnerability of RPC operation <compare>: | |||
| Comparing datastores for differences requires a certain amount of | Comparing datastores for differences requires a certain amount of | |||
| processing resources at the server. An attacker could attempt to | processing resources at the server. An attacker could attempt to | |||
| attack a server by making a high volume of comparison requests. | attack a server by making a high volume of comparison requests. | |||
| Server implementations can guard against such scenarios in several | Server implementations can guard against such scenarios in several | |||
| ways. For one, they can implement the NETCONF access control model | ways. For one, they can implement the NACM in order to require | |||
| in order to require proper authorization for requests to be made. | proper authorization for requests to be made. Second, server | |||
| Second, server implementations can limit the number of requests that | implementations can limit the number of requests that they serve to a | |||
| they serve to a client in any one time interval, rejecting requests | client in any one time interval, rejecting requests made at a higher | |||
| made at a higher frequency than the implementation can reasonably | frequency than the implementation can reasonably sustain. | |||
| sustain. | ||||
| 10. Acknowledgments | ||||
| We thank Rob Wilton, Martin Bjorklund, Mahesh Jethanandani, Lou | ||||
| Berger, Kent Watsen, Phil Shafer, Ladislav Lhotka, Tim Carey, and | ||||
| Reshad Rahman for valuable feedback and suggestions. | ||||
| 11. References | 9. References | |||
| 11.1. Normative References | 9.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 17, line 27 ¶ | skipping to change at line 710 ¶ | |||
| <https://www.rfc-editor.org/info/rfc6242>. | <https://www.rfc-editor.org/info/rfc6242>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7951>. | ||||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/info/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8072] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Patch | [RFC8072] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Patch | |||
| Media Type", RFC 8072, DOI 10.17487/RFC8072, February | Media Type", RFC 8072, DOI 10.17487/RFC8072, February | |||
| 2017, <https://www.rfc-editor.org/info/rfc8072>. | 2017, <https://www.rfc-editor.org/info/rfc8072>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| skipping to change at page 18, line 9 ¶ | skipping to change at line 744 ¶ | |||
| [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
| and R. Wilton, "Network Management Datastore Architecture | and R. Wilton, "Network Management Datastore Architecture | |||
| (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8342>. | <https://www.rfc-editor.org/info/rfc8342>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| 11.2. Informative References | [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>. | ||||
| 9.2. Informative References | ||||
| [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | |||
| Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8343>. | <https://www.rfc-editor.org/info/rfc8343>. | |||
| Appendix A. Possible Future Extensions | Appendix A. Possible Future Extensions | |||
| It is conceivable to extend the compare operation with a number of | It is conceivable to extend the <compare> operation with a number of | |||
| possible additional features in the future. | possible additional features in the future. | |||
| Specifically, it is possible to define an extension with an optional | Specifically, it is possible to define an extension with an optional | |||
| feature for dampening. This will allow clients to specify a minimum | feature for dampening. This will allow clients to specify a minimum | |||
| time period for which a difference must persist for it to be | time period for which a difference must persist for it to be | |||
| reported. This will enable clients to distinguish between | reported. This will enable clients to distinguish between | |||
| differences that are only fleeting from ones that are not and that | differences that are only fleeting from ones that are not and that | |||
| may represent a real operational issue and inconsistency within the | may represent a real operational issue and inconsistency within the | |||
| device. | device. | |||
| skipping to change at page 18, line 41 ¶ | skipping to change at line 783 ¶ | |||
| the parameter indicates no dampening. Reporting of differences MAY | the parameter indicates no dampening. Reporting of differences MAY | |||
| correspondingly be delayed by the dampening period from the time the | correspondingly be delayed by the dampening period from the time the | |||
| request is received. | request is received. | |||
| To implement this feature, a server implementation might run a | To implement this feature, a server implementation might run a | |||
| comparison when the RPC is first invoked and temporarily store the | comparison when the RPC is first invoked and temporarily store the | |||
| result. Subsequently, it could wait until after the end of the | result. Subsequently, it could wait until after the end of the | |||
| dampening period to check whether the same differences are still | dampening period to check whether the same differences are still | |||
| observed. The differences that still persist are then returned. | observed. The differences that still persist are then returned. | |||
| Acknowledgments | ||||
| We thank Rob Wilton, Martin Bjorklund, Mahesh Jethanandani, Lou | ||||
| Berger, Kent Watsen, Phil Shafer, Ladislav Lhotka, Tim Carey, and | ||||
| Reshad Rahman for their valuable feedback and suggestions. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Alexander Clemm | Alexander Clemm | |||
| Futurewei | Futurewei | |||
| 2330 Central Expressway | 2330 Central Expressway | |||
| Santa Clara, CA 95050 | Santa Clara, CA 95050 | |||
| USA | United States of America | |||
| Email: ludwig@clemm.org | Email: ludwig@clemm.org | |||
| Yingzhen Qu | Yingzhen Qu | |||
| Futurewei | Futurewei | |||
| 2330 Central Expressway | 2330 Central Expressway | |||
| Santa Clara, CA 95050 | Santa Clara, CA 95050 | |||
| USA | United States of America | |||
| Email: yqu@futurewei.com | Email: yqu@futurewei.com | |||
| Jeff Tantsura | Jeff Tantsura | |||
| Microsoft | Microsoft | |||
| Email: jefftant.ietf@gmail.com | Email: jefftant.ietf@gmail.com | |||
| Andy Bierman | Andy Bierman | |||
| YumaWorks | YumaWorks | |||
| End of changes. 99 change blocks. | ||||
| 291 lines changed or deleted | 286 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/ | ||||