[ONOS-5990] L3VPN device model YANG files

Change-Id: Ia1640c7745eb1f977e0fddc85c7b85704fc46a13
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
new file mode 100644
index 0000000..57eebdc
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
@@ -0,0 +1,241 @@
+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

+   }
\ No newline at end of file