module ietf-network-instance {

     yang-version "1";

     // namespace
     namespace "urn:ietf:params:xml:ns:yang:ietf-network-instance";

     prefix "ni";

     // import some basic types
     import ietf-interfaces {
       prefix if;
     }

     import ietf-ip {
       prefix ip;
     }

     // meta
     organization "IETF Routing Area Working Group (rtgwg)";

     contact
         "Routing Area Working Group - <rtgwg@ietf.org>";


     description
       "This module is used to support multiple network instances
        within a single physical or virtual device.  Network
        instances are commonly know as VRFs (virtual routing
        and forwarding) and VSIs (virtual switching instances).";

     revision "2016-06-23" {
       description
         "Initial revision.";
       reference "RFC TBD";
     }

     // extension statements

     feature bind-network-instance-name {
       description
         "Network Instance to which an interface instance is bound";
     }

     // identity statements

     identity network-instance-type {
         description
            "Base identity from which identities describing
             network instance types are derived.";
     }

      identity ipv4-interface-protocol-type {
         description
             "Base identity for derivation of IPv4 interface
              protocols";
      }

      identity ipv6-interface-protocol-type {
         description
             "Base identity for derivation of IPv6 interface
              protocols";
      }

     // typedef statements

     // grouping statements

     grouping interface-ip-common {
       description
         "interface-specific configuration for IP interfaces, IPv4 and
         IPv6";

     }

     grouping ipv4-interface-protocols {
         container ipv4-interface-protocols {
             list ipv4-interface-protocol {
                 key "type";
                 leaf type {
                     type identityref {
                         base ipv4-interface-protocol-type;
                     }
                     mandatory true;
                     description
                         "ARP, ICMP, VRRP, DHCP Client, etc.";
                 }
                 description
                     "List of IPv4 protocols configured
                      on an interface";
             }
             description
                 "Container for list of IPv4 protocols configured
                   on an interface";
         }
         description
             "Grouping for IPv4 protocols configured on an interface";
     }

     grouping ipv6-interface-protocols {
         description
             "Grouping for IPv6 protocols configured on
              an interface.";
         container ipv6-interface-protocols {
             description
                 "Container for list of IPv6 protocols configured
                   on an interface.";
             list ipv6-interface-protocol {
                 key "type";
                 description
                     "List of IPv6 protocols configured
                      on an interface";
                 leaf type {
                     type identityref {
                         base ipv6-interface-protocol-type;
                     }
                     mandatory true;
                     description
                         "ND, ICMPv6, VRRP, DHCPv6 Client, etc.";
                 }
             }
         }
     }

     grouping network-instance-policy {
       description
           "Network instance policies such as route
            distinguisher, route targets, VPLS ID and neighbor,
            Ethernet ID, etc. ";
       reference
           "RFC 4364 - BGP/MPLS Virtual Private Networks (VPNs)
            RFC 6074 - Provisioning, Auto-Discovery, and Signaling
                 in Layer 2 Virtual Private Networks (L2VPNs)
            RFC 7432 - BGP MPLS-Based Ethernet VPN";
       container network-instance-policy {
           description "Network Instance Policy -- details TBD";
       }
     }

     // top level device definition statements
     container devices {
         list device {
             key deviceid;
             leaf deviceid {
                 type string;
             }
             container network-instances {
                 description "Network instances each of which have
                      and protocol instantiations. For layer 3,
                      this consistent with the routing-instance
                      definition in ietf-routing";
                 reference "draft-ietf-netmod-routing-cfg";
                 list network-instance {
                     key name;
                     description "List of network-instances";
                     leaf name {
                         type string;
                         description "device scoped
                              identifier for the network
                              instance";
                     }
                     leaf type {
                         type identityref {
                             base network-instance-type;
                         }
                         description
                             "The network instance type -- details TBD
                              Likely types include core, L3-VRF, VPLS,
                              L2-cross-connect, L2-VSI, etc.";
                     }
                     leaf enabled {
                         type boolean;
                         default "true";
                         description
                           "Flag indicating whether or not the network
                            instance is enabled.";
                     }
                     leaf description {
                         type string;
                         description
                           "Description of the network instance
                           and its intended purpose";
                     }
                     uses network-instance-policy;
                //     leaf root {
                //       type schema-mount;
                //       description "Root for models supported per
                //                    network instance";
                //     }
                 }
             }
         }
     }

     // augment statements
     augment "/if:devices/if:device/if:interfaces/if:interface" {
       description
           "Add a node for the identification of the logical network
           instance (which is within the interface's identified logical
           network element) associated with the IP information
           configured on an interface";

       leaf bind-network-instance-name {
         type string;
         description
           "Network Instance to which an interface is bound";
       }
     }

     augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv4" {
       description
           "Add a node for the identification of the logical
           network instance (which is within the interface's
           identified physical or virtual device) associated with
           the IP information configured on an interface";

       leaf bind-network-instance-name {
         type string;
         description
           "Network Instance to which IPv4 interface is bound";

       }
     }

     augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv6" {
       description
           "Add a node for the identification of the logical
           network instance (which is within the interface's
           identified physical or virtual device) associated with
           the IP information configured on an interface";

       leaf bind-network-instance-name {
         type string;
         description
           "Network Instance to which IPv6 interface is bound";

       }
     }
     // rpc statements
     // notification statements
   }