--- /dev/null
+module opendaylight-inventory {
+ namespace "urn:opendaylight:inventory";
+ prefix inv;
+
+ import yang-ext { prefix ext; revision-date "2013-07-09"; }
+ import ietf-inet-types { prefix inet; revision-date "2013-07-15"; }
+
+ revision "2013-08-19" {
+ description "Initial revision of Inventory model";
+ }
+
+ typedef support-type {
+ type enumeration {
+ enum native;
+ enum emulated;
+ enum not-supported;
+ }
+ }
+
+ typedef node-id {
+ type inet:uri;
+ description "Identifier for a particular node. For example:
+
+ myprotocol:<unique_node_id>
+
+ myprotocol:12
+
+ It is a good practice to always lead with a scoping
+ identifier. In the example above the scoping was
+ 'myprotocol'. In your app you could use 'myapp' etc.";
+ }
+
+ typedef node-connector-id {
+ type inet:uri;
+ description "Identifier for a particular node-connector. For example:
+
+ myprotocol:<unique_node_connector_id>
+ myprotocol:3
+
+ It is a good practice to always lead with a scoping
+ identifier. In the example above the scoping was
+ 'myprotocol'. In your app you could use 'myapp' etc.";
+ }
+
+ // YANG does not have a statement which limits the scope of an
+ // instance-identifier to a particular subtree, which is why we are using
+ // a type capture and not an instance-identifier to define a node-ref and
+ // a node-connector-ref.
+ typedef node-ref {
+ type instance-identifier;
+ description "A reference that points to an
+ opendaylight-light:nodes/node in the data tree.";
+ }
+
+ typedef node-connector-ref {
+ type instance-identifier;
+ description "A reference that points to an
+ opendaylight-list:nodes/node/{node-id}/node-connector in
+ the data tree.";
+ }
+
+ identity node-context {
+ description "A node-context is a classifier for node elements which
+ allows an RPC to provide a service on behalf of a
+ particular element in the data tree.";
+ }
+
+ identity node-connector-context {
+ description "A node-connector-context is a classifier for
+ node-connector elements which allows an RPC to provide
+ a service on behalf of a particular element in the data
+ tree.";
+ }
+
+ // We are defining a base identity here because there are limitations with
+ // YANG enums. YANG does not allow you to extend enumeratations, therefore
+ // by defining a base identity we allow other yang files to extend this
+ // identity to define additional "enumerations". By using node-type as
+ // their base they are able to pass their object to fields that accept
+ // "node-types" while uniquely describing their type of node, such as
+ // "router-node" or "switch-node" etc.
+ // See https://wiki.opendaylight.org/view/YANG_Tools:YANG_to_Java_Mapping#Identity
+ // for more information.
+ identity node-type {
+ description "A base identity definition which represents a generic
+ node type and can be extended in other yang files.";
+ }
+
+ identity node-connector-type {
+ description "A base identity definition which represents a generic
+ node connector type and can be extended in other YANG
+ files.";
+ }
+
+ grouping node {
+ description "Describes the contents of a generic node -
+ essentially an ID and a list of node-connectors.
+ Acts as an augmentation point where other YANG files
+ can add additional information.";
+
+ leaf id {
+ type node-id;
+ description "The unique identifier for the node.";
+ }
+
+ list "node-connector" {
+ key "id";
+
+ description "A list of node connectors that belong this node.";
+ ext:context-instance "node-connector-context";
+
+ uses node-connector;
+ }
+ }
+
+ grouping node-connector {
+ description "Describes a generic node connector which consists of an ID.
+ Acts as an augmentation point where other YANG files can
+ add additional information.";
+
+ leaf id {
+ type node-connector-id;
+ description "The unique identifier for the node-connector.";
+ }
+ }
+
+ grouping node-context-ref {
+ description "A helper grouping which contains a reference to a node
+ classified with a node-context. This allows RPCs in other
+ YANG files to refine their input to a particular node
+ instance.";
+
+ leaf node {
+ ext:context-reference "node-context";
+ type node-ref;
+ description "A reference to a particular node.";
+ }
+ }
+
+ // Base structure
+ container nodes {
+ description "The root container of all nodes.";
+
+ list node {
+ key "id";
+ ext:context-instance "node-context";
+ description "A list of nodes (as defined by the 'grouping node').";
+ uses node; //this refers to the 'grouping node' defined above.
+ }
+ }
+
+ // The following notifications should really be replaced by direct writes
+ // to the data tree with data change listeners listening to those changes.
+ // Notifications should be reserved for one time events which do not
+ // require persistence to the data tree.
+ notification node-updated {
+ status deprecated;
+
+ description "A notification sent by someone who realized there was
+ a modification to a node, but did not modify the data
+ tree.
+
+ Describes that something on the node has been updated
+ (including addition of a new node), but is for whatever
+ reason is not modifying the data tree.
+
+ Deprecated: If a process determines that a node was
+ updated, then that logic should update the node using
+ the DataBroker directly. Listeners interested update
+ changes should register a data change listener for
+ notifications on removals.";
+
+ leaf node-ref {
+ ext:context-reference "node-context";
+ description "A reference to the node which changed.";
+
+ type node-ref;
+ }
+ uses node;
+ }
+
+ notification node-connector-updated {
+ status deprecated;
+
+ description "A notification sent by someone who realized there was
+ a modification to a node-connector, but did not modify
+ the data tree.
+
+ Describes that something on the node-connector has been
+ updated (including addition of a new node-connector), but
+ is for whatever reason is not modifying the data tree.
+
+ Deprecated: If a process determines that a node-connector
+ was updated, then that logic should update the
+ node-connector using the DataBroker directly. Listeners
+ interested update changes should register a data change
+ listener for notifications on removals.";
+
+ leaf node-connector-ref {
+ ext:context-reference "node-connector-context";
+ type node-connector-ref;
+ description "A reference to the node-connector which changed.";
+ }
+ uses node-connector;
+ }
+
+ notification node-removed {
+ status deprecated;
+
+ description "A notification sent by someone who realized there was
+ a node was removed, but did not modify the data tree.
+
+ Describes that a node has been removed but is for whatever
+ reason is not modifying the data tree.
+
+ Deprecated: If a process determines that a node was
+ removed, then that logic should remove the node from
+ the DataBroker directly. Listeners interested in changes
+ should register a data change listener for notifications
+ on removals.";
+
+ leaf node-ref {
+ description "A reference to the node that was removed.";
+ ext:context-reference "node-context";
+ type node-ref;
+ }
+ }
+
+ notification node-connector-removed {
+ status deprecated;
+
+ description "A notification sent by someone who realized there was
+ a node-connector was removed, but did not modify the data
+ tree.
+
+ Describes that a node-connector has been removed but is
+ for whatever reason is not modifying the data tree.
+
+ Deprecated: If a process determines that a node-connector
+ was removed, then that logic should remove the
+ node-connector from the DataBroker directly. Listeners
+ interested in changes should register a data change
+ listener for notifications on removals.";
+
+ leaf node-connector-ref {
+ description "A reference to the node-connector that was removed.";
+ ext:context-reference "node-connector-context";
+ type node-connector-ref;
+ }
+ }
+}