| < draft-ietf-netmod-nmda-diff-03.txt | draft-ietf-netmod-nmda-diff-04.txt > | |||
|---|---|---|---|---|
| Network Working Group A. Clemm | Network Working Group A. Clemm | |||
| Internet-Draft Y. Qu | Internet-Draft Y. Qu | |||
| Intended status: Standards Track Futurewei | Intended status: Standards Track Futurewei | |||
| Expires: May 7, 2020 J. Tantsura | Expires: January 14, 2021 J. Tantsura | |||
| Apstra | Apstra | |||
| A. Bierman | A. Bierman | |||
| YumaWorks | YumaWorks | |||
| November 4, 2019 | July 13, 2020 | |||
| Comparison of NMDA datastores | Comparison of NMDA datastores | |||
| draft-ietf-netmod-nmda-diff-03 | draft-ietf-netmod-nmda-diff-04 | |||
| Abstract | Abstract | |||
| This document defines an RPC operation to compare management | This document defines an RPC operation to compare management | |||
| datastores that comply with the NMDA architecture. | datastores that comply with the NMDA architecture. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| skipping to change at page 1, line 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
| 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 May 7, 2020. | This Internet-Draft will expire on January 14, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 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. Key Words . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Key Words . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 3 | 3. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 4 | 4. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. YANG Data Model . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. YANG Data Model . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7. Performance Considerations . . . . . . . . . . . . . . . . . 12 | 7. Performance Considerations . . . . . . . . . . . . . . . . . 13 | |||
| 8. Possible Future Extensions . . . . . . . . . . . . . . . . . 13 | 8. Possible Future Extensions . . . . . . . . . . . . . . . . . 14 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9.1. Updates to the IETF XML Registry . . . . . . . . . . . . 13 | 9.1. Updates to the IETF XML Registry . . . . . . . . . . . . 14 | |||
| 9.2. Updates to the YANG Module Names Registry . . . . . . . . 14 | 9.2. Updates to the YANG Module Names Registry . . . . . . . . 15 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 15 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 16 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 16 | 12.2. Informative References . . . . . . . . . . . . . . . . . 17 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 1. Introduction | 1. Introduction | |||
| The revised Network Management Datastore Architecture (NMDA) | The revised Network Management Datastore Architecture (NMDA) | |||
| [RFC8342] introduces a set of new datastores that each hold YANG- | [RFC8342] introduces a set of new datastores that each hold YANG- | |||
| defined data [RFC7950] and represent a different "viewpoint" on the | defined data [RFC7950] and represent a different "viewpoint" on the | |||
| data that is maintained by a server. New YANG datastores that are | data that is maintained by a server. New YANG datastores that are | |||
| introduced include <intended>, which contains validated configuration | introduced include <intended>, which contains validated configuration | |||
| data that a client application intends to be in effect, and | data that a client application intends to be in effect, and | |||
| <operational>, which contains at least conceptually operational state | <operational>, which contains at least conceptually operational state | |||
| skipping to change at page 9, line 36 ¶ | skipping to change at page 9, line 36 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. Example | 6. Example | |||
| The following example compares the difference between <operational> | The following example compares the difference between <operational> | |||
| and <intended> for a subtree under "ospf". The subtree contains | and <intended> for a subtree under "interfaces". The subtree | |||
| objects that are defined in a YANG data model for the management of | contains objects that are defined in a YANG data model for the | |||
| OSPF defined in [I-D.ietf-ospf-yang]. The excerpt of the data model | management of interfaces defined in [RFC8343]. The excerpt of the | |||
| whose instantiation is basis of the comparison is as follows: | data model whose instantiation is basis of the comparison is as | |||
| follows: | ||||
| container ospf { | container interfaces { | |||
| leaf enable { | description | |||
| type boolean; | "Interface parameters."; | |||
| } | list interface { | |||
| leaf explicit-router-id { | key "name"; | |||
| type rt-types:router-id; | leaf name { | |||
| } | type string; | |||
| leaf preference { | description | |||
| type uint8; | "The name of the interface". | |||
| } | ||||
| leaf description { | ||||
| type string; | ||||
| description | ||||
| "A textual description of the interface."; | ||||
| } | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "This leaf contains the configured, desired state of the | ||||
| interface.";" | ||||
| } | ||||
| } | } | |||
| } | } | |||
| The contents of <intended> and <operational> datastores: | ||||
| <ospf xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | The contents of <intended> and <operational> datastores: | |||
| or:origin="or:intended"> | ||||
| <enable>true</enable> | ||||
| <explicit-router-id>2.2.2.2</explicit-router-id> | ||||
| </ospf> | ||||
| <ospf xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | <interfaces xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | |||
| or:origin="or:operational"> | or:origin="or:intended"> | |||
| <enable>true</enable> | <interface> | |||
| <explicit-router-id>1.1.1.1</explicit-router-id> | <name>eth0</name> | |||
| <preference>200</preference> | <enabled>false</enabled> | |||
| </ospf> | <description>ip interface</description> | |||
| </interface> | ||||
| </interfa | ||||
| <interfaces xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | ||||
| or:origin="or:operational"> | ||||
| <interface> | ||||
| <name>eth0</name> | ||||
| <enabled>true</enabled> | ||||
| </interface> | ||||
| </interfaces> | ||||
| <operational> contains one object that was not contained in | <operational> contains one object that was not contained in | |||
| <intended>, "preference". Another object, "explicit-router-id", has | <intended>, "preference". Another object, "explicit-router-id", has | |||
| differences in values. A third object, "enable", is the same in both | differences in values. A third object, "enable", is the same in both | |||
| cases. | cases. | |||
| 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> | |||
| <xpath-filter | <xpath-filter | |||
| xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing" | xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">\ | |||
| xmlns:ospf="urn:ietf:params:xml:ns:yang:ietf-ospf">\ | /if:interfaces\ | |||
| /rt:routing/rt:control-plane-protocols\ | </xpath-filter> | |||
| /rt:control-plane-protocol/ospf:ospf\ | </compare> | |||
| </xpath-filter> | </rpc> | |||
| </compare> | ||||
| </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>ospf router-id</patch-id> | <patch-id>interface status</patch-id> | |||
| <comment>diff between operational and intended</comment> | <comment>diff between operational and intended</comment> | |||
| <edit> | <edit> | |||
| <edit-id>1</edit-id> | <edit-id>1</edit-id> | |||
| <operation>replace</operation> | <operation>replace</operation> | |||
| <target>/ietf-ospf:explicit-router-id</target> | <target>/ietf-interfaces:interface=eth0/enabled</target> | |||
| <value> | <value> | |||
| <ospf:explicit-router-id | <if:enabled | |||
| or:origin="or:system">1.1.1.1<explicit-router-id> | or:origin="or:system">true<enabled> | |||
| </value> | </value> | |||
| <source-value> | <source-value> | |||
| <ospf:explicit-router-id | <if:enabled | |||
| or:origin="or:intended">2.2.2.2<explicit-router-id> | or:origin="or:intended">false<enabled> | |||
| </source-value> | </source-value> | |||
| <edit-id>2</edit-id> | <edit-id>2</edit-id> | |||
| <operation>create</operation> | <operation>create</operation> | |||
| <target>/ietf-ospf:preference</target> | <target>/ietf-interfaces:interface=eth0/description</target> | |||
| <value> | <value> | |||
| <ospf:preference | <if:description | |||
| or:origin="or:system">200<preference> | or:origin="or:system">ip interface<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): | |||
| 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-d | |||
| { "ietf-nmda-compare:input" { | ||||
| { "ietf-nmda-compare:input" { | "source" : "ietf-datastores:operational", | |||
| "source" : "ietf-datastores:operational", | "target" : "ietf-datastores:intended". | |||
| "target" : "ietf-datastores:intended". | "xpath-filter" : \ | |||
| "xpath-filter" : \ | "/ietf-interfaces:interfaces" | |||
| "/ietf-routing:routing/control-plane-protocols\ | } | |||
| /control-plane-protocol/ietf-ospf:ospf" | } | |||
| } | ||||
| } | ||||
| 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, 26 Jan 2019 20:56:30 GMT | Date: Thu, 26 Jan 2019 20:56:30 GMT | |||
| Server: example-server | Server: example-server | |||
| Content-Type: application/yang-data+json | Content-Type: application/yang-d | |||
| { "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" : "ospf router-id", | "comment" : "diff between operational and intended", | |||
| "comment" : "diff between operational and intended", | "edit" : [ | |||
| "edit" : [ | { | |||
| { | "edit-id" : "1", | |||
| "edit-id" : "1", | "operation" : "replace", | |||
| "operation" : "replace", | "target" : "/ietf-interfaces:interface=eth0/enabled", | |||
| "target" : "/ietf-ospf:explicit-router-id", | "value" : { | |||
| "value" : { | "ietf-interfaces:interface/enabled" : "true" | |||
| "ietf-ospf:explicit-router-id" : "1.1.1.1" | "@ietf-interfaces:interface/enabled" : { | |||
| "@ietf-ospf:explicit-router-id" : { | "ietf-origin:origin" : "ietf-origin:system" | |||
| "ietf-origin:origin" : "ietf-origin:system" | } | |||
| } | "source-value" : { | |||
| "source-value" : { | "ietf-interfaces:interface/enabled" : "false" | |||
| "ietf-ospf:explicit-router-id" : "2.2.2.2" | "@ietf-interfaces:interface/enabled" : { | |||
| "@ietf-ospf:explicit-router-id" : { | "ietf-origin:origin" : "ietf-origin:intended" | |||
| "ietf-origin:origin" : "ietf-origin:intended" | } | |||
| } | "edit-id" : "2", | |||
| "edit-id" : "2", | "operation" : "create", | |||
| "operation" : "create", | "target" : "/ietf-interfaces:interface=eth0/description", | |||
| "target" : "/ietf-ospf:preference", | "value" : { | |||
| "value" : { | "ietf-interface:interface/description" : "ip interface" | |||
| "ietf-ospf:preference" : "200" | "@ietf-interface:interfaces/description" : { | |||
| "@ietf-ospf:preference" : { | "ietf-origin:origin" : "ietf-origin:intended" | |||
| "ietf-origin:origin" : "ietf-origin:system" | } | |||
| } | } | |||
| } | ] | |||
| ] | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| 7. Performance Considerations | 7. 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 such a possibility is to limit the | implementation to mitigate against such a possibility is to limit the | |||
| skipping to change at page 16, line 21 ¶ | skipping to change at page 17, line 21 ¶ | |||
| 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>. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [I-D.ietf-ospf-yang] | [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | |||
| Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, | Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | |||
| "YANG Data Model for OSPF Protocol", draft-ietf-ospf- | <https://www.rfc-editor.org/info/rfc8343>. | |||
| yang-29 (work in progress), October 2019. | ||||
| 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 | USA | |||
| Email: ludwig@clemm.org | Email: ludwig@clemm.org | |||
| End of changes. 16 change blocks. | ||||
| 143 lines changed or deleted | 155 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/ | ||||