module openconfig-if-types {
  yang-version 1;
  namespace "http://openconfig.net/yang/openconfig-if-types";
  prefix oc-ift;

  import openconfig-extensions {
    prefix oc-ext;
  }

  organization
    "OpenConfig working group";
  contact
    "OpenConfig working group
     netopenconfig@googlegroups.com";
  description
    "This module contains a set of interface type definitions that
     are used across OpenConfig models. These are generally physical
     or logical interfaces, distinct from hardware ports (which are
     described by the OpenConfig platform model).";

  revision 2018-11-21 {
    description
      "Add OpenConfig module metadata extensions.";
    reference
      "0.2.1";
  }
  revision 2018-01-05 {
    description
      "Add tunnel types into the INTERFACE_TYPE identity.";
    reference
      "0.2.0";
  }
  revision 2016-11-14 {
    description
      "Initial version";
    reference
      "0.1.0";
  }

  oc-ext:openconfig-version "0.2.1";
  oc-ext:regexp-posix;
  oc-ext:catalog-organization "openconfig";
  oc-ext:origin "openconfig";

  identity INTERFACE_TYPE {
    description
      "Base identity from which interface types are derived.";
  }

  identity IF_ETHERNET {
    base INTERFACE_TYPE;
    description
      "Ethernet interfaces based on IEEE 802.3 standards, as well
       as FlexEthernet";
    reference
      "IEEE 802.3-2015 - IEEE Standard for Ethernet
       OIF Flex Ethernet Implementation Agreement 1.0";
  }

  identity IF_AGGREGATE {
    base INTERFACE_TYPE;
    description
      "An aggregated, or bonded, interface forming a
       Link Aggregation Group (LAG), or bundle, most often based on
       the IEEE 802.1AX (or 802.3ad) standard.";
    reference
      "IEEE 802.1AX-2008";
  }

  identity IF_LOOPBACK {
    base INTERFACE_TYPE;
    description
      "A virtual interface designated as a loopback used for
       various management and operations tasks.";
  }

  identity IF_ROUTED_VLAN {
    base INTERFACE_TYPE;
    description
      "A logical interface used for routing services on a VLAN.
       Such interfaces are also known as switch virtual interfaces
       (SVI) or integrated routing and bridging interfaces (IRBs).";
  }

  identity IF_SONET {
    base INTERFACE_TYPE;
    description
      "SONET/SDH interface";
  }

  identity IF_TUNNEL_GRE4 {
    base INTERFACE_TYPE;
    description
      "A GRE tunnel over IPv4 transport.";
  }

  identity IF_TUNNEL_GRE6 {
    base INTERFACE_TYPE;
    description
      "A GRE tunnel over IPv6 transport.";
  }
}