module openconfig-lacp {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/lacp";

  prefix "oc-lacp";

  // import some basic types
  import openconfig-interfaces { prefix oc-if; }
  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 describes configuration and operational state
    data for Link Aggregation Control Protocol (LACP) for
    managing aggregate interfaces.   It works in conjunction with
    the OpenConfig interfaces and aggregate interfaces models.";

  oc-ext:openconfig-version "1.1.0";

  revision "2017-05-05" {
    description
      "Add member local and remote port num";
    reference "1.1.0";
  }

  revision "2016-05-26" {
    description
      "OpenConfig public release";
    reference "1.0.2";
  }


  // typedef statements

  typedef lacp-activity-type {
    type enumeration {
      enum ACTIVE {
        description
          "Interface is an active member, i.e., will detect and
          maintain aggregates";
      }
      enum PASSIVE {
        description
          "Interface is a passive member, i.e., it participates
          with an active partner";
      }
    }
    description
      "Describes the LACP membership type, active or passive, of the
      interface in the aggregate";
    reference "IEEE 802.1AX-2008";
  }

  typedef lacp-timeout-type {
    type enumeration {
      enum LONG {
        description
          "Participant wishes to use long timeouts to detect
          status of the aggregate, i.e., will expect less frequent
          transmissions. Long timeout is 90 seconds.";
      }
      enum SHORT {
        description
          "Participant wishes to use short timeouts, i.e., expects
          frequent transmissions to aggressively detect status
          changes. Short timeout is 3 seconds.";
      }
    }
    description
      "Type of timeout used, short or long, by LACP participants";
    reference "IEEE 802.1AX-2008";
  }

  typedef lacp-synchronization-type {
    type enumeration {
      enum IN_SYNC {
        description
          "Participant is in sync with the system id and key
          transmitted";
      }
      enum OUT_SYNC {
        description
          "Participant is not in sync with the system id and key
          transmitted";
      }
    }
    description
      "Indicates LACP synchronization state of participant";
    reference "IEEE 802.1AX-2008";
  }

  typedef lacp-period-type {
    type enumeration {
      enum FAST {
        description "Send LACP packets every second";
      }
      enum SLOW {
        description "Send LACP packets every 30 seconds";
      }
    }
    description
      "Defines the period options for the time between sending
      LACP messages";
    reference "IEEE 802.3ad";
  }

  // grouping statements


  grouping aggregation-lacp-members-config {
    description
      "Configuration data for lacp member interfaces";

    //currently a placeholder -- the list of member interfaces
    //and their status is considered opstate only
  }

  grouping aggregation-lacp-members-state {
    description
      "Operational status data for the member interfaces";

    leaf interface {
      type oc-if:base-interface-ref;
      description
        "Reference to interface member of the LACP aggregate";
    }

    leaf activity {
      type lacp-activity-type;
      description "Indicates participant is active or passive";
    }

    leaf timeout {
      type lacp-timeout-type;
      description
        "The timeout type (short or long) used by the
        participant";
    }

    leaf synchronization {
      type lacp-synchronization-type;
      description
        "Indicates whether the participant is in-sync or
        out-of-sync";
    }

    leaf aggregatable {
      type boolean;
      description
        "A true value indicates that the participant will allow
        the link to be used as part of the aggregate. A false
        value indicates the link should be used as an individual
        link";
    }

    leaf collecting {
      type boolean;
      description
        "If true, the participant is collecting incoming frames
        on the link, otherwise false";
    }

    leaf distributing {
      type boolean;
      description
        "When true, the participant is distributing outgoing
        frames; when false, distribution is disabled";
    }

    leaf system-id {
      type oc-yang:mac-address;
      description
        "MAC address that defines the local system ID for the
        aggregate interface";
    }

    leaf oper-key {
      type uint16;
      description
        "Current operational value of the key for the aggregate
        interface";
    }

    leaf partner-id {
      type oc-yang:mac-address;
      description
        "MAC address representing the protocol partner's interface
        system ID";
    }

    leaf partner-key {
      type uint16;
      description
        "Operational value of the protocol partner's key";
    }

    leaf port-num {
      type uint16;
      description
        "Port number of the local (actor) aggregation member";
    }

    leaf partner-port-num {
      type uint16;
      description
        "Port number of the partner (remote) port for this member
        port";
    }
  }

grouping aggregation-lacp-members-statistics {
    description
      "LACP packet statistics for the member interfaces";

    container counters {
      description
        "LACP protocol counters";

      leaf lacp-in-pkts {
        type oc-yang:counter64;
        description
          "Number of LACPDUs received";
      }

      leaf lacp-out-pkts {
        type oc-yang:counter64;
        description
          "Number of LACPDUs transmitted";
      }

      leaf lacp-rx-errors {
        type oc-yang:counter64;
        description
          "Number of LACPDU receive packet errors";
      }

      leaf lacp-tx-errors {
        type oc-yang:counter64;
        description
          "Number of LACPDU transmit packet errors";
      }

      leaf lacp-unknown-errors {
        type oc-yang:counter64;
        description
          "Number of LACPDU unknown packet errors";
      }

      leaf lacp-errors {
        type oc-yang:counter64;
        description
          "Number of LACPDU illegal packet errors";
      }
    }
  }

  grouping aggregation-lacp-members-top {
    description
      "Top-level grouping for aggregate members list";

    container members {
      config false;
      description
        "Enclosing container for the list of members interfaces of
        the aggregate. This list is considered operational state
        only so is labeled config false and has no config container";

      list member {
        key "interface";
        description
          "List of member interfaces and their associated status for
          a LACP-controlled aggregate interface.  Member list is not
          configurable here -- each interface indicates items
          its participation in the LAG.";

        leaf interface {
          type leafref {
            path "../state/interface";
          }
          description
            "Reference to aggregate member interface";
        }


        container state {

          config false;

          description
            "Operational state data for aggregate members";

          uses aggregation-lacp-members-state;
          uses aggregation-lacp-members-statistics;
        }
      }
    }
  }

  grouping lacp-interfaces-config {
    description
      "Configuration data for each LACP-enabled interface";

    leaf name {
      type oc-if:base-interface-ref;
      description
        "Reference to the interface on which LACP should be
        configured.   The type of the target interface must be
        ieee8023adLag";
    }

    leaf interval {
      type lacp-period-type;
      default SLOW;
      description
        "Set the period between LACP messages -- uses
        the lacp-period-type enumeration.";
    }

    leaf lacp-mode {
      type lacp-activity-type;
      default ACTIVE;
      description
        "ACTIVE is to initiate the transmission of LACP packets.
         PASSIVE is to wait for peer to initiate the transmission of
         LACP packets.";
        //TODO:some implementations configure the LACP mode on each
        //member interface rather than on the LAG interface.  There
        //may be use cases for this identified at a later time.
    }

    leaf system-id-mac {
      type oc-yang:mac-address;
      description
        "The MAC address portion of the node's System ID. This is
        combined with the system priority to construct the 8-octet
        system-id";
    }

    uses aggregation-lacp-global-config;
  }

  grouping lacp-interfaces-state {
    description
      "Operational state data for each LACP-enabled interface";
  }

  grouping lacp-interfaces-top {
    description
      "Top-level grouping for LACP-enabled interfaces";

    container interfaces {
      description
        "Enclosing container for the list of LACP-enabled
        interfaces";

      list interface {
        key "name";
        description
          "List of aggregate interfaces managed by LACP";

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

        container config {
          description
            "Configuration data for each LACP aggregate interface";

          uses lacp-interfaces-config;
        }

        container state {

          config false;

          description
            "Operational state data for each LACP aggregate
            interface";

          uses lacp-interfaces-config;
          uses lacp-interfaces-state;
        }

        uses aggregation-lacp-members-top;
      }
    }
  }

  grouping aggregation-lacp-global-config {
    description
      "Configuration data for LACP aggregate interfaces";


    leaf system-priority {
      type uint16;
      description
        "Sytem priority used by the node on this LAG interface.
        Lower value is higher priority for determining which node
        is the controlling system.";
    }
  }

  grouping aggregation-lacp-global-state {
    description
      "Operational data for LACP aggregate interfaces";

  }

  grouping aggregation-lacp-top {
    description
      "Top level configuration and state variable containers for
      LACP data";

    container lacp {
      description
        "Configuration and operational state data for LACP protocol
        operation on the aggregate interface";

      container config {
        description
          "Configuration data for LACP";

        uses aggregation-lacp-global-config;
      }

      container state {

        config false;
        description
          "Operational state data for LACP";

        uses aggregation-lacp-global-config;
        uses aggregation-lacp-global-state;
      }
      uses lacp-interfaces-top;
    }
  }

  // data definition statements
  uses aggregation-lacp-top;

  // augment statements


}