module openconfig-extensions {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/openconfig-ext";

  prefix "oc-ext";

  // meta
  organization "OpenConfig working group";

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

  description
    "This module provides extensions to the YANG language to allow
    OpenConfig specific functionality and meta-data to be defined.";

  oc-ext:openconfig-version "0.5.1";

  // extension statements
  extension openconfig-version {
    argument "semver" {
      yin-element false;
    }
    description
      "The OpenConfig version number for the module. This is
      expressed as a semantic version number of the form:
        x.y.z
      where:
        * x corresponds to the major version,
        * y corresponds to a minor version,
        * z corresponds to a patch version.
      This version corresponds to the model file within which it is
      defined, and does not cover the whole set of OpenConfig models.

      Individual YANG modules are versioned independently -- the
      semantic version is generally incremented only when there is a
      change in the corresponding file.  Submodules should always
      have the same semantic version as their parent modules.

      A major version number of 0 indicates that this model is still
      in development (whether within OpenConfig or with industry
      partners), and is potentially subject to change.

      Following a release of major version 1, all modules will
      increment major revision number where backwards incompatible
      changes to the model are made.

      The minor version is changed when features are added to the
      model that do not impact current clients use of the model.

      The patch-level version is incremented when non-feature changes
      (such as bugfixes or clarifications to human-readable
      descriptions that do not impact model functionality) are made
      that maintain backwards compatibility.

      The version number is stored in the module meta-data.";
  }

  extension regexp-posix {
     description
      "This extension indicates that the regular expressions included
      within the YANG module specified are conformant with the POSIX
      regular expression format rather than the W3C standard that is
      specified by RFC6020 and RFC7950.";
  }

  extension operational {
    description
      "The operational annotation is specified in the context of a
      grouping, leaf, or leaf-list within a YANG module. It indicates
      that the nodes within the context are derived state on the device.

      OpenConfig data models divide nodes into the following three categories:

       - intended configuration - these are leaves within a container named
         'config', and are the writable configuration of a target.
       - applied configuration - these are leaves within a container named
         'state' and are the currently running value of the intended configuration.
       - derived state - these are the values within the 'state' container which
         are not part of the applied configuration of the device. Typically, they
         represent state values reflecting underlying operational counters, or
         protocol statuses.";
  }

  extension catalog-organization {
    argument "org" {
      yin-element false;
    }
    description
      "This extension specifies the organization name that should be used within
      the module catalogue on the device for the specified YANG module. It stores
      a pithy string where the YANG organization statement may contain more
      details.";
  }

  extension origin {
    argument "origin" {
      yin-element false;
    }
    description
      "This extension specifies the name of the origin that the YANG module
      falls within. This allows multiple overlapping schema trees to be used
      on a single network element without requiring module based prefixing
      of paths.";
  }
}
