module ietf-module-revision { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-module-revision"; prefix ml; import ietf-yang-library { prefix yanglib; } import ietf-yang-types { prefix yang; } organization "IETF Network Modeling (NETMOD) Working Group"; contact "WG Web: WG List: Author: Qin Wu Zitao Wang "; description "This YANG module defines an module log."; revision 2018-08-08 { description "Initial revision."; reference "RFC XXXX: Using Metadata with YANG for Module revisions"; } identity operation-type { description "Abstract base identity for the operation type "; } identity create { base operation-type; description "Denotes create new data nodes"; } identity delete { base operation-type; description "Denotes delete the target node"; } identity move { base operation-type; description "Denote move the target node."; } identity modify { base operation-type; description "Denote modify the target data node."; } identity statement-type { description "Base identity for statement type"; } identity feature-statement { base statement-type; description "feature statement, if this type be chose, it means that the feature or if-feature statement been modified"; } identity identity-statement { base statement-type; description "identity statement, if this type be chose, it means that the identity statement been modified, for example, add new identity, etc."; } identity grouping-statement { base statement-type; description "grouping statement, if this type be chose, it means that the grouping statement been modified."; } identity typedef-statement { base statement-type; description "typedef statement, if this type be chose, it means that the typedef statement been modified."; } identity augment-statement { base statement-type; description "augment statement, if this type be chose, it means that the augment statement been modified."; } identity rpc-statement { base statement-type; description "rpc statement, if this type be chose, it means that the rpc statement been modified."; } identity notification-statement { base statement-type; description "notification statement, if this type be chose, it means that the notification statement been modified."; } extension purpose { argument name; description "The purpose can be used to mark the data nodes change purpose. The name argument can be specified in the following recommended mode - bug-fix, which can help user to understand the data nodes' changes present bug fix, - new-function, which can help user to understand the data nodes' changes present new function, - nmda-conform, which can help user to understand the data nodes' changes conform to NMDA, and note that the user can argument the purpose name according to their sepcific requirements."; } grouping data-definition { container data-definition { leaf target-node { type yang:xpath1.0; mandatory true; description "Identifies the target data node for update. Notice that, if the update-type equal to move or delete, this target-node must point to the data node of old version. \t For example, suppose the target node is a YANG leaf named a, and the previous version is: \t container foo { leaf a { type string; } leaf b { type int32; } } \t the new version is: container foo { leaf b {type int32;} } \t Therefore, the targe-node should be /foo/a."; } leaf location-point { type yang:xpath1.0; description "Identifies the location point where the updates happened."; } leaf where { when "derived-from-or-self(../../change-operation, 'move')" { description "This leaf only applies for 'move' updates."; } type enumeration { enum "before" { description "Insert or move a data node before the data resource identified by the 'point' parameter."; } enum "after" { description "Insert or move a data node after the data resource identified by the 'point' parameter."; } enum "first" { description "Insert or move a data node so it becomes ordered as the first entry."; } enum "last" { description "Insert or move a data node so it becomes ordered as the last entry."; } } default "last"; description "Identifies where a data resource will be inserted or moved."; } anydata data-definition { when "derived-from-or-self(../../change-operation, 'modify')" { description "This nodes only be present when the 'change-operation' equal to 'modify'."; } description "This nodes used for present the definitions before updated. And this nodes only be present when the 'change-operation' equal to 'modify'."; } description "Container for data statement"; } description "Grouping for data definition"; } grouping other-statement { container other-statement { leaf statement-name { type identityref { base statement-type; } description "Statement name, for example, identity, feature, typedef, etc."; } anydata statement-definition { description "This nodes used for present new the definitions."; } list substatements { key "statement-name"; leaf statement-name { type identityref { base statement-type; } description "Statement name, for example, identity, feature, typedef, etc."; } anydata substatement-definition { description "This nodes used for present new the definitions."; } description "List for substatements updates"; } description "Container for header statement updates"; } description "Grouping for header statement"; } grouping change-log { list revision-change-log { key "index"; leaf index { type uint32; description "Index for module change log"; } leaf change-operation { type identityref { base operation-type; } mandatory true; description "This leaf indicate the change operation, such as create, move, delete, modify, etc."; } choice yang-statements { description "Choice for various YANG statements that have been impacted."; case data-definition-statement { uses data-definition; } case other-statement { uses other-statement; } } description "List for module revision change log"; } description "Grouping for module revision change log"; } container yang-modules { config false; list module { key "name revision"; leaf name { type yang:yang-identifier; description "The YANG module or submodule name."; } leaf revision { type yanglib:revision-identifier; description "The YANG module or submodule revision date. If no revision statement is present in the YANG module or submodule, this leaf is not instantiated."; } leaf backward-compatible { type boolean; description "Indicates whether it is a backward compatible version. If this parameter is set to true, it means that this version is a backwards compatible version"; } uses change-log; description "List for module updated log"; } description "This container present the modules updated log."; } augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" { description "Augment the yang library with backward compatibility indication."; leaf backward-compatible { type boolean; description "backward compatibility indication."; } } augment "/yanglib:yang-library/yanglib:module-set/yanglib:module/yanglib:submodule" { description "Augment the yang library with backward compatibility indication."; leaf backward-compatible { type boolean; description "backward compatibility indication."; } } rpc module-revision-change { description "Module Node change query operation."; input { leaf source-module-name { type yang:yang-identifier; mandatory true; description "The Source YANG module or submodule name."; } leaf source-revision { type yanglib:revision-identifier; description "The Source YANG module revision date. If no revision statement is present in the YANG module or submodule, this leaf is not instantiated."; } leaf target-module-name { type yang:yang-identifier; mandatory true; description "The Target YANG module or submodule name."; } leaf target-revision { type yanglib:revision-identifier; description "The target YANG module revision date. If no revision statement is present in the YANG module or submodule, this leaf is not instantiated."; } } output { choice status-response{ leaf wrong-match{ type empty; description "This leaf indicates that two modules have nothing in common."; } list data-nodes { key "data-node-name"; description "Each entry represents a data node of a given module that have been changed from source revision of a module to target revision of the module."; leaf data-node-name { type string; description "a data node name of a given module that has been changed."; } leaf is-new-node { type boolean; description "indicate the data node is newly introduced node in the target revision."; } leaf change-operation { type identityref { base operation-type; } description "This leaf indicate the change operation, such as create, move, delete, modify, etc."; } } } } } }