Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/stp/openconfig-spanning-tree-types.yang b/models/openconfig/src/main/yang/stp/openconfig-spanning-tree-types.yang
new file mode 100644
index 0000000..0ca9571
--- /dev/null
+++ b/models/openconfig/src/main/yang/stp/openconfig-spanning-tree-types.yang
@@ -0,0 +1,225 @@
+module openconfig-spanning-tree-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/spanning-tree/types";
+
+  prefix "oc-stp-types";
+
+  // import some basic types
+  import openconfig-extensions { prefix oc-ext; }
+
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines types related to the
+    spanning-tree protocol model.";
+
+  oc-ext:openconfig-version "0.2.0";
+
+  revision "2017-07-14" {
+    description
+      "Migrated to OpenConfig types; fixed missing applied state
+      in rapid-pvst";
+    reference "0.2.0";
+  }
+
+  revision "2016-10-03" {
+    description
+      "Initial public revision";
+    reference "0.1.0";
+  }
+
+  // identity statements
+
+  identity STP_PROTOCOL {
+    description
+      "base identity for support spanning tree protocol";
+  }
+
+  identity RSTP {
+    base STP_PROTOCOL;
+    description
+      "Rapid Spanning Tree Protocol";
+    reference "IEEE 802.1D 17";
+  }
+
+  identity MSTP {
+    base STP_PROTOCOL;
+    description
+      "Multiple Spanning Tree Protocol";
+    reference "IEEE 802.1Q 13";
+  }
+
+  identity RAPID_PVST {
+    base STP_PROTOCOL;
+    description
+      "Rapid Per Vlan Spanning Tree Protocol";
+  }
+
+  identity STP_PORT_STATE {
+    description
+      "base identity for the different Spanning Tree Protocol port
+      states";
+    reference
+      "IEEE 802.1D 7.4 Port States and the active topology";
+  }
+
+  identity DISABLED {
+    base STP_PORT_STATE;
+    description
+      "A port that is manually isolated from the network";
+  }
+
+  identity LISTENING {
+    base STP_PORT_STATE;
+    description
+      "Processing BPDUs and building active toplogy";
+  }
+
+  identity LEARNING {
+    base STP_PORT_STATE;
+    description
+      "Building bridging tables; no forwarding of data";
+  }
+
+  identity BLOCKING {
+    base STP_PORT_STATE;
+    description
+      "A port that would cause a loop if it were sending data,
+      so it is only receiving BPDUs, untill a topology change
+      removes the possibliity of a loop";
+  }
+
+  identity FORWARDING {
+    base STP_PORT_STATE;
+    description
+      "Sending and receiving data, normal operation";
+  }
+
+  identity STP_EDGE_PORT {
+    description
+      "base identity for the different edge port modes";
+    reference
+      "IEEE 802.1D 17.13.1";
+  }
+
+  identity EDGE_ENABLE {
+    base STP_EDGE_PORT;
+    description
+      "Enable edge port for the bridge port";
+  }
+
+  identity EDGE_DISABLE {
+    base STP_EDGE_PORT;
+    description
+      "Disable edge port for the bridge port";
+  }
+
+  identity EDGE_AUTO {
+    base STP_EDGE_PORT;
+    description
+      "Enable edge port autodetction for the bridge port";
+  }
+
+  identity STP_PORT_ROLE {
+    description
+      "Base identity for the different Spanning Tree Protocol port
+      roles";
+    reference
+      "IEEE 802.1D 17.7 Port Role assignments";
+  }
+
+  identity ROOT {
+    base STP_PORT_ROLE;
+    description
+      "The port that receives the best BPDU on a bridge is the
+      root port";
+  }
+
+  identity DESIGNATED {
+    base STP_PORT_ROLE;
+    description
+      "A port is designated if it can send the best BPDU on the
+      segment to which it is connected.";
+  }
+
+  identity ALTERNATE {
+    base STP_PORT_ROLE;
+    description
+      "An alternate port receives more useful BPDUs from another
+      bridge and is a port blocked";
+  }
+
+  identity BACKUP {
+    base STP_PORT_ROLE;
+    description
+      "A backup port receives more useful BPDUs from the same
+      bridge it is on and is a port blocked";
+  }
+
+  // typedef statements
+
+  typedef stp-bridge-priority-type {
+    type uint32 {
+      range 1..611440;
+    }
+    description
+      "The manageable component of the Bridge Identifier";
+    reference "IEEE 802.1D 17.13.7 Bridge Identifier Priority";
+  }
+
+  typedef stp-port-priority-type {
+    type uint8 {
+      range 1..240;
+    }
+    description
+      "The manageable component of the Port Identifier,
+      also known as the Port Priority";
+    reference
+      "IEEE 802.1D 17.13.10 Port Identifier Priority";
+  }
+
+  typedef stp-guard-type {
+    type enumeration {
+      enum ROOT {
+      	description
+      	  "Enable root guard";
+      }
+      enum LOOP {
+      	description
+      	  "Enable loop guard";
+      }
+      enum NONE {
+      	description
+      	  "disable guard";
+      }
+    }
+    description
+      "Type definition for the different STP guard for the switch port";
+    reference "IEEE 802.1D 17.2";
+  }
+
+  typedef stp-link-type {
+    type enumeration {
+      enum P2P {
+      	description
+      	  "Point-to-Point link";
+      }
+      enum SHARED {
+      	description
+      	  "Shared link";
+      }
+    }
+    description
+      "Type definition for the different link types";
+    reference "IEEE 802.1D 17.2";
+  }
+}