module ncmount {
    yang-version 1;
    namespace "urn:opendaylight:params:xml:ns:yang:ncmount";
    prefix "ncmount";

  import ietf-inet-types {
    prefix "inet";
  }

    revision "2015-01-05" {
        description "Initial revision of ncmount model";
    }

    grouping xr-node {
        leaf node-name {
            type string;
            description
                "Name of the node";
        }
        leaf status {
            type string;
            description
                "Node status";
        }
        leaf-list properties {
            type string;
            description
                "List of properties";
        }
    }

    rpc write-routes {
        description
        "Artificial RPC that illustrates:
        How to handle a list of route entries and transform + send them to a netconf device in a single edit transaction.
        This is not possible by using just Restconf, since Restconf can send only a single list entry in a transaction (which is much slower).
        This RPC demonstrates a couple of things:
            1. How to write to a mounted netconf device from (binding aware) code level
            2. How to transform input (from rpc-input to netconf device specific data)
            3. How to improve performance of writing to a netconf device by batching a bunch of list entries in a single transaction

        A single invocation of this RPC with 20 route entries over Restconf
        is equal to 20 invocations of typical writes over Restconf with 1 route per call";

        input {
            leaf mount-name {
                type string;
                description "Id of mounted note to write the l2-fibs to";
            }

            leaf vrf-id {
                type string;
                description "Id of Vrf which should be modified (add new routes)";
            }

            list route {

              key "ipv4-prefix";

                leaf ipv4-prefix {
                    type inet:ipv4-address;
                }

                leaf ipv4-prefix-length {
                    type uint16;
                }

                leaf ipv4-next-hop {
                    type inet:ipv4-address;
                }
            }
        }
    }

    rpc show-node {
        description
          "Start a new data store write test run";

        input {
            leaf node-name {
                mandatory true;
                type string;
                description
                    "Name of the mounted node to be displayed";
            }
        }
        output {
            container if-cfg-data {
                list ifc {
                    key "active interface-name";
                    description "A small subset of an interface
                        configuration; provides an example of processing
                        of data retrieved from a device.";

                    leaf interface-name {
                        type string;
                        description
                          "The name of the interface";
                    }
                    leaf active {
                        type string;
                        description
                            "Whether the interface is active or preconfigured";
                    }
                    leaf description {
                        type string;
                        description "Interface description";
                    }
                    leaf bandwidth {
                        type int32;
                        description "The bandwidth of the interface in kbps";
                      }
                      leaf link-status {
                        type string;
                        description
                          "Enable interface and line-protocol state change
                          alarms";
                      }
                }

            }
            container if-oper-data {

            }
        }
    }

    rpc list-nodes {
        description
          "Returns a list of netconf nodes for each data store space";

        output {
            leaf-list nc-config-nodes {
                type string;
                description
                  "List of netconf nodes in the config space";
            }
            leaf-list nc-oper-nodes {
                type string;
                description
                  "List of netconf nodes in the operational space";
              }
        }
    }
}