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.2.0";

  revision 2018-04-24 {
    description
      "Add date typedef";
    reference "0.2.0";
  }

  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 date {
    type string {
      pattern '^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$';
    }
    description
      "A full UTC date, expressed in the format described in RFC3339.
      That is to say:

      YYYY-MM-DD

      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.";

    reference
      "RFC3339 - Date and Time on the Internet: full-date";
  }

  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";
  }
}
