Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/isis/openconfig-isis-routing.yang b/models/openconfig/src/main/yang/isis/openconfig-isis-routing.yang
new file mode 100644
index 0000000..ac1f779
--- /dev/null
+++ b/models/openconfig/src/main/yang/isis/openconfig-isis-routing.yang
@@ -0,0 +1,375 @@
+submodule openconfig-isis-routing {
+
+  belongs-to openconfig-isis {
+    prefix "oc-isis";
+  }
+
+  // import some basic types
+  import openconfig-isis-types { prefix oc-isis-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-mpls-types { prefix oc-mplst; }
+  import openconfig-segment-routing { prefix oc-sr; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module describes YANG model for ISIS Routing";
+
+  oc-ext:openconfig-version "0.3.2";
+
+  revision "2017-07-26" {
+    description
+      "Update LSDB and fix bugs.";
+    reference "0.3.2";
+  }
+
+  revision "2017-05-15" {
+    description
+      "Refactor LSDB.";
+    reference "0.3.0";
+  }
+
+  revision "2017-01-13" {
+    description
+      "Remove top-level /isis container";
+    reference "0.2.1";
+  }
+
+  revision "2016-12-15" {
+    description
+      "Add segment routing to IS-IS module";
+    reference "0.2.0";
+  }
+
+  revision "2016-10-18" {
+    description
+      "Initial revision of IS-IS models.";
+    reference "0.1.0";
+  }
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  // typedef statements
+
+  // grouping statements
+
+  grouping rt-admin-config {
+    description
+      "Re-usable grouping to enable or disable a particular IS-IS feature.";
+
+    leaf enabled {
+      type boolean;
+      description
+        "When set to true, the functionality within which this leaf is
+        defined is enabled, when set to false it is explicitly disabled.";
+    }
+  }
+
+  grouping isis-afi-safi-config {
+    description
+      "This grouping defines Address-Family configuration parameters";
+
+    leaf afi-name {
+      type identityref {
+        base oc-isis-types:AFI_TYPE;
+      }
+      description
+        "Address-family type.";
+    }
+
+    leaf safi-name {
+      type identityref {
+        base oc-isis-types:SAFI_TYPE;
+      }
+      description
+        "Subsequent address-family type.";
+    }
+  }
+
+  grouping isis-shortcuts-afi-config {
+    description
+      "This grouping defines ISIS Shortcuts configuration parameters";
+
+    leaf afi-name {
+      type identityref {
+        base oc-isis-types:AFI_TYPE;
+      }
+      description "Address-family type.";
+    }
+
+    leaf-list nh-type {
+      type identityref {
+        base oc-mplst:PATH_SETUP_PROTOCOL;
+      }
+      description "Tunnel NH Type(RSVP,SR). When present it implies
+      	that nh-type shortcut is enabled for a specified AFI.";
+    }
+  }
+
+  grouping isis-shortcuts-config {
+    description
+      "This grouping defines ISIS Shortcuts consfiguration parameters";
+
+    container config {
+      description "This container defines ISIS shortcuts configuration.";
+      uses rt-admin-config;
+    }
+
+    container state {
+      config false;
+      description "This container defines state for ISIS shortcuts.";
+      uses rt-admin-config;
+    }
+  }
+
+  grouping isis-mt-config {
+    description
+      "This grouping defines ISIS multi-topology configuration parameters";
+
+    leaf afi-name {
+      type identityref {
+        base oc-isis-types:AFI_TYPE;
+      }
+      description
+        "Address-family type.";
+    }
+    leaf safi-name {
+      type identityref {
+        base oc-isis-types:SAFI_TYPE;
+      }
+      description
+        "Subsequent address-family type.";
+    }
+    //prefer single topology
+  }
+
+
+
+  // *********** STRUCTURE GROUPINGS **********************
+
+  grouping isis-metric-config {
+    description
+      "This grouping defines ISIS metric configuration";
+
+    leaf metric {
+      type uint32;
+      default 10;
+      description "ISIS metric value(default=10).";
+    }
+  }
+
+  grouping isis-afi-safi-list {
+    description
+      "This grouping defines address-family configuration and state
+      information";
+
+    list af {
+      key "afi-name safi-name";
+
+      description
+            "Address-family/Subsequent Address-family list.";
+
+      leaf afi-name {
+        type leafref {
+          path "../config/afi-name";
+        }
+        description
+           "Reference to address-family type";
+      }
+
+      leaf safi-name {
+        type leafref {
+          path "../config/safi-name";
+        }
+        description
+           "Reference to subsequent address-family type";
+      }
+
+      container config {
+        description
+          "This container defines AFI-SAFI configuration parameters";
+
+        uses isis-afi-safi-config;
+        uses isis-metric-config;
+        uses rt-admin-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines AFI-SAFI State information";
+
+        uses isis-afi-safi-config;
+        uses isis-metric-config;
+        uses rt-admin-config;
+      }
+
+      uses isis-mt-list;
+    }
+  }
+
+  grouping isis-if-afi-safi-list {
+    description
+      "This grouping defines address-family configuration and state
+      information";
+
+    list af {
+      key "afi-name safi-name";
+
+      description
+            "Address-family/Subsequent Address-family list.";
+
+      leaf afi-name {
+        type leafref {
+          path "../config/afi-name";
+        }
+        description
+           "Reference to address-family type";
+      }
+
+      leaf safi-name {
+        type leafref {
+          path "../config/safi-name";
+        }
+        description
+           "Reference to subsequent address-family type";
+      }
+
+      container config {
+        description
+           "This container defines AFI-SAFI configuration parameters. Single
+            topology is the default setting.";
+        uses isis-afi-safi-config;
+        uses isis-metric-config;
+        uses rt-admin-config;
+      }
+
+      container state {
+        config false;
+        description
+           "This container defines AFI-SAFI State information";
+        uses isis-afi-safi-config;
+        uses isis-metric-config;
+        uses rt-admin-config;
+      }
+
+      uses oc-sr:sr-igp-interface-top;
+    }
+  }
+  
+  grouping isis-if-global-afi-safi-list {
+    description
+      "This grouping defines address-family configuration and state
+      information";
+
+    list af {
+      key "afi-name safi-name";
+
+      description
+            "Address-family/Subsequent Address-family list.";
+
+      leaf afi-name {
+        type leafref {
+          path "../config/afi-name";
+        }
+        description
+           "Reference to address-family type";
+      }
+
+      leaf safi-name {
+        type leafref {
+          path "../config/safi-name";
+        }
+        description
+           "Reference to subsequent address-family type";
+      }
+
+      container config {
+        description
+           "This container defines AFI-SAFI configuration parameters. Single
+            topology is the default setting.";
+        uses isis-afi-safi-config;
+        uses rt-admin-config;
+      }
+
+      container state {
+        config false;
+        description
+           "This container defines AFI-SAFI State information";
+        uses isis-afi-safi-config;
+        uses rt-admin-config;
+      }
+    }
+  }
+
+  grouping isis-shortcuts-afi-list {
+    description
+      "This grouping defines ISIS Shorcuts configuration and
+      state information";
+
+    list afi {
+      key "afi-name";
+
+      description
+        "Address-family list.";
+
+      leaf afi-name {
+        type leafref {
+          path "../config/afi-name";
+        }
+        description
+          "Reference to address-family type.";
+      }
+
+      container config {
+        description
+          "This container defines ISIS Shortcuts configuration parameters";
+        uses isis-shortcuts-afi-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS Shortcuts state information";
+        uses isis-shortcuts-afi-config;
+      }
+    }
+  }
+
+  grouping isis-mt-list {
+    description
+      "This grouping defines multi-topology address-family configuration and
+      state information. MT0 - IPv4 Unicast, MT2 - IPv6 Unicast, MT3 -
+      IPv4 Multicast, MT4 - IPv6 Multicast";
+
+    container multi-topology {
+      description
+        "This container defines multi-topology address-family configuration
+        and state information. ISIS TLV 235, 237.";
+
+      container config {
+      description
+        "This container defines AFI-SAFI multi-topology configuration
+        parameters";
+      uses isis-mt-config;
+      }
+
+      container state {
+      config false;
+      description
+        "This container defines AFI-SAFI multi-topology state information";
+      uses isis-mt-config;
+      uses rt-admin-config;
+      }
+    }
+  }
+}