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";
  }
}
