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

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