module ietf-if-ethernet-like {
  yang-version 1.1;

  namespace
    "urn:ietf:params:xml:ns:yang:ietf-if-ethernet-like";

  prefix ethlike;

  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model For Interface Management";
  }

  import ietf-yang-types {
    prefix yang;
    reference "RFC 6991: Common YANG Data Types";
  }

  import iana-if-type {
    prefix ianaift;
    reference "RFC 7224: IANA Interface Type YANG Module";
  }

  organization
    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

  contact
    "WG Web:   <http://tools.ietf.org/wg/netmod/>
     WG List:  <mailto:netmod@ietf.org>

     Editor:   Robert Wilton
               <mailto:rwilton@cisco.com>";

  description
    "This module contains YANG definitions for configuration for
     'Ethernet-like' interfaces.  It is applicable to all interface
     types that use Ethernet framing and expose an Ethernet MAC
     layer, and includes such interfaces as physical Ethernet
     interfaces, Ethernet LAG interfaces and VLAN sub-interfaces.

     Additional interface configuration and counters for physical
     Ethernet interfaces are defined in
     ieee802-ethernet-interface.yang, as part of IEEE Std
     802.3.2-2019.

     Copyright (c) 2019 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2019-11-04 {
    description "Initial revision.";

    reference
      "RFC XXX, Common Interface Extension YANG Data Models";
  }

  feature configurable-mac-address {
    description
      "This feature indicates that MAC addresses on Ethernet-like
       interfaces can be configured.";
    reference "RFC XXX, Section 3 Interfaces Ethernet-Like Module";
  }


  /*
   * Configuration parameters for Ethernet-like interfaces.
   */
  augment "/if:interfaces/if:interface" {
    when "derived-from-or-self(if:type, 'ianaift:ethernetCsmacd') or
          derived-from-or-self(if:type, 'ianaift:ieee8023adLag') or
          derived-from-or-self(if:type, 'ianaift:ifPwType')" {
      description "Applies to all Ethernet-like interfaces";
    }
    description
      "Augment the interface model with parameters for all
       Ethernet-like interfaces.";

    container ethernet-like {
      description
        "Contains parameters for interfaces that use Ethernet framing
         and expose an Ethernet MAC layer.";

      leaf mac-address {
        if-feature "configurable-mac-address";
        type yang:mac-address;
        description
          "The MAC address of the interface.  The operational value
           matches the /if:interfaces/if:interface/if:phys-address
           leaf defined in ietf-interface.yang.";
      }

      leaf bia-mac-address {
        type yang:mac-address;
        config false;
        description
          "The 'burnt-in' MAC address.  I.e the default MAC address
           assigned to the interface if no MAC address has been
           explicitly configured on it.";
      }
    }
  }


  /*
   * Configuration parameters for Ethernet-like interfaces.
   */
  augment "/if:interfaces/if:interface/if:statistics" {
    when "derived-from-or-self(../if:type,
                               'ianaift:ethernetCsmacd') or
          derived-from-or-self(../if:type,
                               'ianaift:ieee8023adLag') or
          derived-from-or-self(../if:type, 'ianaift:ifPwType')" {
      description "Applies to all Ethernet-like interfaces";
    }
    description
      "Augment the interface model statistics with additional
       counters related to Ethernet-like interfaces.";

    leaf in-drop-unknown-dest-mac-pkts {
      type yang:counter64;
      units frames;
      description
        "A count of the number of frames that were well formed, but
         otherwise dropped because the destination MAC address did
         not pass any ingress destination MAC address filter.

         For consistency, frames counted against this drop counters
         are also counted against the IETF interfaces statistics.  In
         particular, they are included in in-octets and in-discards,
         but are not included in in-unicast-pkts, in-multicast-pkts
         or in-broadcast-pkts, because they are not delivered to a
         higher layer.

         Discontinuities in the values of this counter can occur at
         re-initialization of the management system, and at other
         times as indicated by the value of the 'discontinuity-time'
         leaf defined in the ietf-interfaces YANG module (RFC 8343).";
    }
  }
}
