module openconfig-yang-types {

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

  import openconfig-extensions { prefix "oc-ext"; }

  organization
    "OpenConfig working group";

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

  description
    "This module contains a set of extension types to the
    YANG builtin types that are used across multiple
    OpenConfig models.

    Portions of this code were derived from IETF RFC 6021.
    Please reproduce this note if possible.

    IETF code is subject to the following copyright and license:
    Copyright (c) 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 (http://trustee.ietf.org/license-info).";

  oc-ext:openconfig-version "0.1.2";

  revision 2017-07-30 {
    description
      "Fixed unprintable character";
    reference "0.1.2";
  }

  revision 2017-04-03 {
    description
      "Update copyright notice.";
    reference "0.1.1";
  }

  revision 2017-01-26 {
    description
      "Initial module for inet types";
    reference "0.1.0";
  }

  typedef dotted-quad {
    type string {
      pattern '^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|'       +
              '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4]' +
              '[0-9]|25[0-5])$';
    }
    description
      "An unsigned 32-bit integer expressed as a dotted quad. The
      format is four octets written as decimal numbers separated
      with a period character.";
  }

  typedef hex-string {
    type string {
      pattern '^[0-9a-fA-F]*$';
    }
    description
      "A string consisting of a hexadecimal characters.";
  }

  typedef counter32 {
    type uint32;
    description

      "A 32-bit counter. A counter value is a monotonically increasing
      value which is used to express a count of a number of
      occurrences of a particular event or entity. When the counter
      reaches its maximum value, in this case 2^32-1, it wraps to 0.

      Discontinuities in the counter are generally triggered only when
      the counter is reset to zero.";
  }

  typedef counter64 {
    type uint64;
    description

      "A 64-bit counter. A counter value is a monotonically increasing
      value which is used to express a count of a number of
      occurrences of a particular event or entity. When a counter64
      reaches its maximum value, 2^64-1, it loops to zero.
      Discontinuities in a counter are generally triggered only when
      the counter is reset to zero, through operator or system
      intervention.";
  }

  typedef date-and-time {
    type string {
      pattern
        '^[0-9]{4}\-[0-9]{2}\-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}' +
        '(\.[0-9]+)?Z[+-][0-9]{2}:[0-9]{2}$';
    }
    description
      "A date and time, expressed in the format described in RFC3339.
      That is to say:

      YYYY-MM-DDTHH:MM:SSZ+-hh:mm

      where YYYY is the year, MM is the month expressed as a two-digit
      month (zero padding if required), DD is the day of the month,
      expressed as a two digit value. T is the literal character 'T',
      HH is the hour of the day expressed as a two digit number, using
      the 24-hour clock, MM is the minute of the hour expressed as a
      two digit number. Z is the literal character 'Z', followed by a
      timezone offset expressed in hours (hh) and minutes (mm), both
      expressed as two digit numbers. The time offset is specified as
      a positive or negative offset to UTC using the '+' or '-'
      character preceding the offset.

      Optionally, fractional seconds can be expressed after the minute
      of the hour as a decimal number of unspecified precision
      reflecting fractions of a second.";
    reference
      "RFC3339 - Date and Time on the Internet: Timestamps";
  }

  typedef gauge64 {
    type uint64;
    description
      "A gauge value may increase or decrease - and reflects a value
      at a particular point in time. If the value of the variable
      being modeled using the gauge exceeds its maximum - 2^64-1 in
      this case - the gauge is set to its maximum value.";
  }

  typedef phys-address {
    type string {
      pattern '^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?$';
    }
    description
      "A physical layer address, expressed as a series of pairs of
      hexadecimal digits.";
  }

  typedef mac-address {
    type string {
      pattern '^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$';
    }
    description
      "An IEEE 802 MAC address";
  }
}
