module openconfig-spanning-tree {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/spanning-tree";

  prefix "oc-stp";

  import openconfig-spanning-tree-types { prefix oc-stp-types; }
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-types { prefix oc-types; }
  import openconfig-vlan-types { prefix oc-vlan-types; }
  import openconfig-yang-types { prefix oc-yang; }
  import openconfig-extensions { prefix oc-ext; }


  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module defines configuration and operational state data
    for the spanning tree protocol.";

  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


  // grouping statements

  grouping stp-interfaces-state {
    description
      "Grouping of STP operational data for bridge port";

    leaf port-num {
      type uint16;
      description
        "The port number of the bridge port";
      reference "RFC4188 BRIDGE-MIB dot1dStpPort";
    }

    leaf role {
      type identityref {
        base oc-stp-types:STP_PORT_ROLE;
      }
      description
        "The current role of the bridge port";
      reference
        "IEEE8021-MSTP-MIB ieee8021MstpPortRole";
    }

    leaf port-state {
      type identityref {
        base oc-stp-types:STP_PORT_STATE;
      }
      description
        "The current state of the bridge port";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortState";
    }

    leaf designated-root-priority {
      type oc-stp-types:stp-bridge-priority-type;
      description
        "The bridge priority of the bridge recorded as the
        root in the configuration BPDUs transmitted by the designated
        bridge for the segment to which the port is attached";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedRoot";
    }

    leaf designated-root-address {
      type oc-yang:mac-address;
      description
        "The bridge address of the bridge recorded as the
        root in the configuration BPDUs transmitted by the designated
        bridge for the segment to which the port is attached";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedRoot";
    }

    leaf designated-cost {
      type uint32;
      description
        "The path cost of the Designated Port of the
        segment connected to this port";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedCost";
    }

    leaf designated-bridge-priority {
      type oc-stp-types:stp-bridge-priority-type;
      description
        "The bridge priority of the bridge that this port considers
        to be the designated bridge for this port's segment.";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedBridge";
    }

    leaf designated-bridge-address {
      type oc-yang:mac-address;
      description
        "The bridge address of the bridge that this port considers
        to be the designated bridge for this port's segment.";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedBridge";
    }

    leaf designated-port-priority {
      type oc-stp-types:stp-port-priority-type;
      description
        "The Port priority of the port on the Designated
        Bridge for this port's segment, two octet string";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedPort";
    }

    leaf designated-port-num {
      type uint16;
      description
        "The Port number of the port on the Designated
        Bridge for this port's segment, two octet string";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortDesignatedPort";
    }

    leaf forward-transisitions {
      type oc-yang:counter64;
      description
        "The number of times this port has transitioned
        from the Learning state to the Forwarding state";
      reference "RFC4188 BRIDGE-MIB dot1dStpPortForwardTransitions";
    }

    container counters {
      description
        "The BPDU packet transmition statistics";

      leaf bpdu-sent {
        type oc-yang:counter64;
        description
          "The number of BPDU packet sent";
      }

      leaf bpdu-received {
        type oc-yang:counter64;
        description
          "The number of BPDU packet received";
      }
    }
  }

  grouping stp-interfaces-config {
    description
      "Grouping of STP configuration for bridge port";

    leaf name {
      type oc-if:base-interface-ref;
      description
        "Reference to the STP ethernet interface";
    }

    leaf cost {
      type uint32 {
        range 1..200000000;
      }
      description
        "The port's contribution, when it is the Root Port,
        to the Root Path Cost for the Bridge";
      reference
        "IEEE 802.1D 17.13.11 PortPathCost";
    }

    leaf port-priority {
      type oc-stp-types:stp-port-priority-type;
      description
        "The manageable component of the Port Identifier,
        also known as the Port Priority";
      reference
        "IEEE 802.1D 17.13.10 Port Identifier Priority";
    }
  }

  grouping stp-interfaces-top {
    description
      "Grouping of STP configuration and operation data for
      bridge port";

    container interfaces {
      description
        "Enclosing container for the list of interface references";

      list interface {
        key "name";
        description
          "List of interfaces on which STP is enable";

      	leaf name {
      	  type leafref {
      	    path "../config/name";
      	  }
      	  description
      	    "Reference to the list key";
      	}

      	container config {
      	  description
      	    "Configuration data for STP on each interface";

      	  uses stp-interfaces-config;
      	}

      	container state {

      	  config false;

      	  description
      	    "Operational state data for STP on each interface";

      	  uses stp-interfaces-config;
      	  uses stp-interfaces-state;
      	}
      }
    }
  }

  grouping bridge-priority-config {
    description
      "Grouping for bridge priority";

    leaf bridge-priority {
      type oc-stp-types:stp-bridge-priority-type;
      description
        "The manageable component of the Bridge Identifier";
      reference
        "IEEE 802.1D 17.13.7 Bridge Identifier Priority";
    }
  }

  grouping stp-common-state {
    description
      "Grouping for common STP operation data";

    leaf bridge-address {
      type oc-yang:mac-address;
      description
        "A unique 48-bit Universally Administered MAC Address
        assigned to the bridge";
      reference
        "IEEE 802.1D 7.12.5 Unique identification of a bridge";
    }

    leaf designated-root-priority {
      type oc-stp-types:stp-bridge-priority-type;
      description
        "The bridge priority of the root of the spanning
        tree, as determined by the Spanning Tree Protocol,
        as executed by this node";
	    reference
        "RFC4188 BRIDGE-MIB dot1dStpDesignatedRoot";
    }

    leaf designated-root-address {
      type oc-yang:mac-address;
      description
        "The bridge address of the root of the spanning
        tree, as determined by the Spanning Tree Protocol,
        as executed by this node";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpDesignatedRoot";
    }

    leaf root-port {
      type uint16;
      description
        "The port number of the port which offers the lowest
        cost path from this bridge to the root bridge";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpRootPort";
    }

    leaf root-cost {
      type uint32;
      description
        "The cost of the path to the root as seen from this bridge";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpRootCost";
    }

    leaf hold-time {
      type uint8;
      description
        "This time value determines the interval length
        during which no more than two Configuration bridge
        PDUs shall be transmitted by this node";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpHoldTime";
    }

    leaf topology-changes {
      type oc-yang:counter64;
      description
        "The total number of topology changes detected by
        this bridge since the management entity was last
        reset or initialized";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpTopChanges";
    }

    leaf time-since-topology-change {
      type oc-types:timeticks64;
      description
        "The time (in hundredths of a second) since the
        last time a topology change was detected by the
        bridge entity

        The value is the timestamp in seconds relative to
        the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
      reference
        "RFC4188 BRIDGE-MIB dot1dStpTimeSinceTopologyChange";
    }
  }

  grouping stp-timer-config {
    description
      "Grouping for common STP parameters";

    leaf hello-time {
      type uint8 {
        range 1..10;
      }
      units "seconds";
      description
        "The interval between periodic transmissions of
        configuration messages by designated ports";
      reference
        "IEEE 802.1D 17.13.6 Bridge Hello Time";
    }

    leaf max-age {
      type uint8 {
        range 6..40;
      }
      units "seconds";
      description
        "The maximum age of the information transmitted by the
        bridge when it is the root bridge";
      reference
        "IEEE 802.1D 17.13.8 Bridge Max Age";
    }

    leaf forwarding-delay {
      type uint8 {
        range 4..30;
      }
      units "seconds";
      description
        "The delay used by STP bridges to transition root and
        designated ports to forwarding";
      reference
        "IEEE 802.1D 17.13.5 Bridge Forward Delay";
    }

    leaf hold-count {
      type uint8 {
        range 1..10;
      }
      default 6;
      description
        "the maximum number of BPDUs per second that the
         switch can send from an interface";
      reference
        "IEEE 802.1D 17.13.12 Transmit Hold Count";
    }
  }

  grouping stp-rapid-pvst-config {
    description
      "Configuration parameters relating to rapid PVST";

    leaf vlan-id {
      type oc-vlan-types:vlan-id;
      description
        "Interface VLAN ID";
    }
  }

  grouping stp-rapid-pvst-top {
    description
      "Top grouping for rapid per vlan spanning tree configuration
      and operation data";

    list vlan {
      key "vlan-id";
      description
        "List of the vlans";

      leaf vlan-id {
        type leafref {
          path "../config/vlan-id";
        }
        description
          "Reference to the list key";
      }

      container config {
      	description
      	  "Configuration data for each vlan";

        uses stp-rapid-pvst-config;
        uses stp-timer-config;
        uses bridge-priority-config;
      }

      container state {
        config false;
        description
          "Operational data for each vlan";

        uses stp-rapid-pvst-config;
        uses stp-timer-config;
        uses bridge-priority-config;
        uses stp-common-state;
      }

      uses stp-interfaces-top;
    }
  }

  grouping mst-instance-config {
    description
      "Grouping for mstp instance configuration";

    leaf mst-id {
      type uint16 {
        range "1..4094";
      }
      description
        "In an MSTP Bridge, an MSTID, i.e., a value used to identify
        a spanning tree (or MST) instance.";
      reference
        "IEEE8021-TC-MIB IEEE8021MstIdentifier";
    }

    leaf-list vlan {
      type union {
        type oc-vlan-types:vlan-id;
        type oc-vlan-types:vlan-range;
      }
      description
        "list of vlans mapped to the MST instance";
    }
  }

  grouping mst-instance-top {
    description
      "Top level grouping for mstp instances";

    list mst-instance {
      key "mst-id";
      description
        "List of the mstp instances";

      leaf mst-id {
        type leafref {
          path "../config/mst-id";
        }
        description
          "Reference to the list key";
      }

      container config {
        description
          "Configuration data for MSTP instance";

        uses mst-instance-config;
        uses bridge-priority-config;
      }

      container state {
        config false;

        description
          "Operational data for MSTP instance";

        uses mst-instance-config;
        uses bridge-priority-config;
        uses stp-common-state;
      }

      uses stp-interfaces-top;
    }
  }

  grouping mstp-config {
    description
      "Grouping for MSTP configuration data";

    leaf name {
      type string {
        length "1..32";
      }
      description
        "The Configuration Name in the MST Configuration Identifier";
      reference
        "IEEE 802.1Q 13.8 MST Configuration Identifier (MCID)";
    }

    leaf revision {
      type uint32;
      description
        "The Revision Level in the MST Configuration Identifier";
      reference
        "IEEE 802.1Q 13.8 MST Configuration Identifier";
    }

    leaf max-hop {
      type uint8 {
        range 1..255;
      }
      description
        "The max hop determines the number of bridges in an MST
        region that a BPDU can traverse before it is discarded";
      reference
        "IEEE 802.1Q 13.26.4 BridgeTimes";
    }

    uses stp-timer-config;
  }

  grouping mstp-state {
    description
      "Operational state data for MSTP";
  }

  grouping stp-mstp-top {
    description
      "Top grouping for MSTP configuration and operation data";

    container config {
      description
        "Configuration data for MSTP";

      uses mstp-config;
    }

    container state {
      config false;

      description
        "Operational data for MSTP";

      uses mstp-config;
      uses mstp-state;
    }

    container mst-instances {
      description
        "Configuration and operation data for MSTP instances";

      uses mst-instance-top;
    }
  }

  grouping stp-rstp-top {
    description
      "Top grouping for RSTP configuration and operation data";

    container config {
      description
        "Configuration data for RSTP";

      uses stp-timer-config;
      uses bridge-priority-config;
    }

    container state {
      config false;

      description
        "Operational state data for RSTP";

      uses stp-timer-config;
      uses bridge-priority-config;
      uses stp-common-state;
    }

    uses stp-interfaces-top;
  }

  grouping stp-interface-common-config {
    description
      "Configuration data for interface specific STP features";

    leaf name {
      type oc-if:base-interface-ref;
      description
        "Reference to the STP Ethernet interface";
    }

    leaf edge-port {
      type identityref {
        base oc-stp-types:STP_EDGE_PORT;
      }
      description
        "Configure the edge port state";
    }

    leaf link-type {
      type oc-stp-types:stp-link-type;
      description
        "specifies the interface's link type";
    }

    leaf guard {
      type oc-stp-types:stp-guard-type;
      description
        "Enable root guard or loop guard";
    }

    uses stp-bpdu-config;

  }

  grouping stp-interface-common-state {
    description
      "Operational state data for STP on interfaces";
  }

  grouping stp-interface-common-top {
    description
      "Top-level grouping for interface specific STP features";

    list interface {
      key "name";
      description
        "List of interfaces on which STP is enable";

      leaf name {
        type leafref {
          path "../config/name";
        }
        description
          "Reference to the list key";
      }

      container config {
        description
          "Configuration data for STP on each bridge port";

        uses stp-interface-common-config;
      }

      container state {

        config false;

        description
          "Operational state data for STP on each bridge port";

        uses stp-interface-common-config;
        uses stp-interface-common-state;
      }
    }
  }

  grouping stp-bpdu-config {
    description
      "Grouping for STP BPDU configuration";

    leaf bpdu-guard {
      type boolean;
      description
        "Enable edge port BPDU guard";
    }

    leaf bpdu-filter {
      type boolean;
      description
        "Enable edge port BPDU filter";
    }
  }

  grouping stp-global-config {
    description
      "Global spanning tree configuration";

    leaf-list enabled-protocol {
      type identityref {
        base oc-stp-types:STP_PROTOCOL;
      }
      description
        "List of the spanning tree protocols enabled on the
        device";
    }

    leaf bridge-assurance {
      type boolean;
      description
        "Enable bridge assurance to protect against unidirectional
        link failure";
    }

    leaf etherchannel-misconfig-guard {
      type boolean;
      description
        "EtherChannel guard detects a misconfigured EtherChannel
        when interfaces on the switch are configured as an
        EtherChannel while interfaces on the other device are not
        or when not all the interfaces on the other device are in
        the same EtherChannel.";
    }

    leaf bpduguard-timeout-recovery {
      type uint8;
      units "seconds";
      description
        "Amount of time, in seconds, the interface receiving BPDUs
        is disabled. Once the timeout expires, the interface is
        brought back into service.";
    }

    leaf loop-guard {
      type boolean;
      description
        "The loop guard default setting for the bridge";
    }

    uses stp-bpdu-config;

  }

  grouping stp-global-state {
    description
      "Global operational state for STP";
  }

  grouping stp-global-base {
    description
      "Grouping for global spanning tree data";

    container config {
      description
        "Global spanning tree configuration";
      uses stp-global-config;
    }

    container state {
      config false;

      description
        "Global spanning tree state";
      uses stp-global-config;
      uses stp-global-state;
    }
  }

  grouping stp-top {
    description
      "Top-level grouping for spanning-tree model";

    container stp {
      description
        "Top-level container for spanning tree configuration and
        state data";

      container global {
        description
          "Global configuration and state data";

        uses stp-global-base;
      }

      container rstp {

        description
          "Rapid Spanning-tree protocol configuration and operation
          data";

        uses stp-rstp-top;
      }

      container mstp {
        description
          "Multi Spanning-tree protocol configuration and operation
          data";

        uses stp-mstp-top;
      }

      container rapid-pvst {
      	description
      	  "Rapid per vlan Spanning-tree protocol configuration and
          operational data";

      	uses stp-rapid-pvst-top;
      }

      container interfaces {
        description
          "Enclosing container for the list of interface references";

        uses stp-interface-common-top;
      }
    }
  }

  // data definition statements

  uses stp-top;

}
