module openconfig-if-aggregate {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/interfaces/aggregate";

  prefix "oc-lag";

  // import some basic types
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-if-ethernet { prefix oc-eth; }
  import iana-if-type { prefix ift; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    netopenconfig@googlegroups.com";

  description
    "Model for managing aggregated (aka bundle, LAG) interfaces.";

  oc-ext:openconfig-version "2.0.0";

  revision "2017-07-14" {
    description
      "Added Ethernet/IP state data; Add dhcp-client;
      migrate to OpenConfig types modules; Removed or
      renamed opstate values";
    reference "2.0.0";
  }

  revision "2016-12-22" {
    description
      "Fixes to Ethernet interfaces model";
    reference "1.1.0";
  }

  // extension statements

  // feature statements

  // identity statements

  // typedef statements



  typedef aggregation-type {
    type enumeration {
      enum LACP {
        description "LAG managed by LACP";
      }
      enum STATIC {
        description "Statically configured bundle / LAG";
      }
    }
    description
      "Type to define the lag-type, i.e., how the LAG is
      defined and managed";
  }

  // grouping statements


  grouping aggregation-logical-config {
    description
      "Configuration data for aggregate interfaces";


    leaf lag-type {
      type aggregation-type;
      description
        "Sets the type of LAG, i.e., how it is
        configured / maintained";
    }

    leaf min-links {
      type uint16;
      description
        "Specifies the mininum number of member
        interfaces that must be active for the aggregate interface
        to be available";
    }
  }

  grouping aggregation-logical-state {
    description
      "Operational state data for aggregate interfaces";

    leaf lag-speed {
      type uint32;
      units Mbps;
      description
        "Reports effective speed of the aggregate interface,
        based on speed of active member interfaces";
    }

    leaf-list member {
      when "oc-lag:lag-type = 'STATIC'" {
        description
          "The simple list of member interfaces is active
          when the aggregate is statically configured";
      }
      type oc-if:base-interface-ref;
      description
        "List of current member interfaces for the aggregate,
        expressed as references to existing interfaces";
    }
  }

  grouping aggregation-logical-top {
    description "Top-level data definitions for LAGs";

    container aggregation {

      description
        "Options for logical interfaces representing
        aggregates";

      container config {
        description
          "Configuration variables for logical aggregate /
          LAG interfaces";

        uses aggregation-logical-config;
      }

      container state {

        config false;
        description
          "Operational state variables for logical
          aggregate / LAG interfaces";

        uses aggregation-logical-config;
        uses aggregation-logical-state;

      }
    }
  }

  grouping ethernet-if-aggregation-config {
    description
      "Adds configuration items for Ethernet interfaces
      belonging to a logical aggregate / LAG";

    leaf aggregate-id {
      type leafref {
        path "/oc-if:interfaces/oc-if:interface/oc-if:name";
      }
      description
        "Specify the logical aggregate interface to which
        this interface belongs";
    }
  }

  // data definition statements

  // augment statements

  augment "/oc-if:interfaces/oc-if:interface" {
    when "oc-if:type = 'ift:ieee8023adLag'" {
      description "active when the interface is set to type LAG";
    }
    description "Adds LAG configuration to the interface module";

    uses aggregation-logical-top;
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/" +
    "oc-eth:config" {
    when "oc-if:type = 'ift:ethernetCsmacd'" {
      description "active when the interface is Ethernet";
    }
    description "Adds LAG settings to individual Ethernet
    interfaces";

    uses ethernet-if-aggregation-config;
  }

  augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/" +
    "oc-eth:state" {
    when "oc-if:type = 'ift:ethernetCsmacd'" {
      description "active when the interface is Ethernet";
    }
    description "Adds LAG settings to individual Ethernet
    interfaces";

    uses ethernet-if-aggregation-config;
  }

  // rpc statements

  // notification statements

}
