module openconfig-policy-types {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/policy-types";

  prefix "oc-pol-types";

  // import some basic types
  import ietf-yang-types { prefix yang; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization
    "OpenConfig working group";

  contact
    "OpenConfig working group
    netopenconfig@googlegroups.com";

  description
    "This module contains general data definitions for use in routing
    policy.  It can be imported by modules that contain protocol-
    specific policy conditions and actions.";

  oc-ext:openconfig-version "3.0.0";

  revision "2017-07-14" {
    description
      "Replace policy choice node/type with policy-result
      enumeration;simplified defined set naming;removed generic
      IGP actions; migrate to OpenConfig types; added mode for
      prefix sets";
    reference "3.0.0";
  }

  revision "2016-05-12" {
    description
      "OpenConfig public release";
    reference "2.0.1";
  }

  // identity statements

  identity ATTRIBUTE_COMPARISON {
    description
      "base type for supported comparison operators on route
      attributes";
  }

  identity ATTRIBUTE_EQ {
    base ATTRIBUTE_COMPARISON;
    description "== comparison";
  }

  identity ATTRIBUTE_GE {
    base ATTRIBUTE_COMPARISON;
    description ">= comparison";
  }

  identity ATTRIBUTE_LE {
    base ATTRIBUTE_COMPARISON;
    description "<= comparison";
  }

  typedef match-set-options-type {
    type enumeration {
      enum ANY {
        description "match is true if given value matches any member
        of the defined set";
      }
      enum ALL {
        description "match is true if given value matches all
        members of the defined set";
      }
      enum INVERT {
        description "match is true if given value does not match any
        member of the defined set";
      }
    }
    default ANY;
    description
      "Options that govern the behavior of a match statement.  The
      default behavior is ANY, i.e., the given value matches any
      of the members of the defined set";
  }

  typedef match-set-options-restricted-type {
    type enumeration {
      enum ANY {
        description "match is true if given value matches any member
        of the defined set";
      }
      enum INVERT {
        description "match is true if given value does not match any
        member of the defined set";
      }
    }
    default ANY;
    description
      "Options that govern the behavior of a match statement.  The
      default behavior is ANY, i.e., the given value matches any
      of the members of the defined set.  Note this type is a
      restricted version of the match-set-options-type.";
      //TODO: restriction on enumerated types is only allowed in
      //YANG 1.1.  Until then, we will require this additional type
  }

  grouping attribute-compare-operators {
    description "common definitions for comparison operations in
    condition statements";

    leaf operator {
        type identityref {
          base ATTRIBUTE_COMPARISON;
        }
        description
          "type of comparison to be performed";
      }

    leaf value {
      type uint32;
      description
        "value to compare with the community count";
    }
  }

  typedef tag-type {
    type union {
      type uint32;
      type yang:hex-string;
    }
    description "type for expressing route tags on a local system,
    including IS-IS and OSPF; may be expressed as either decimal or
    hexidecimal integer";
    reference
      "RFC 2178 OSPF Version 2
      RFC 5130 A Policy Control Mechanism in IS-IS Using
      Administrative Tags";
  }

  identity INSTALL_PROTOCOL_TYPE {
    description
      "Base type for protocols which can install prefixes into the
      RIB";
  }

  identity BGP {
    base INSTALL_PROTOCOL_TYPE;
    description "BGP";
    reference "RFC 4271";
  }

  identity ISIS {
    base INSTALL_PROTOCOL_TYPE;
    description "IS-IS";
    reference "ISO/IEC 10589";
  }

  identity OSPF {
    base INSTALL_PROTOCOL_TYPE;
    description "OSPFv2";
    reference "RFC 2328";
  }

  identity OSPF3 {
    base INSTALL_PROTOCOL_TYPE;
    description "OSPFv3";
    reference "RFC 5340";
  }

  identity STATIC {
    base INSTALL_PROTOCOL_TYPE;
    description "Locally-installed static route";
  }

  identity DIRECTLY_CONNECTED {
    base INSTALL_PROTOCOL_TYPE;
    description "A directly connected route";
  }

  identity LOCAL_AGGREGATE {
    base INSTALL_PROTOCOL_TYPE;
    description "Locally defined aggregate route";
  }
}
