Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/ospf/openconfig-ospf-policy.yang b/models/openconfig/src/main/yang/ospf/openconfig-ospf-policy.yang
new file mode 100644
index 0000000..da80fae
--- /dev/null
+++ b/models/openconfig/src/main/yang/ospf/openconfig-ospf-policy.yang
@@ -0,0 +1,176 @@
+module openconfig-ospf-policy {
+  yang-version "1";
+
+  namespace "http://openconfig.net/yang/ospf-policy";
+
+  prefix "oc-ospf-pol";
+
+  import openconfig-routing-policy { prefix "oc-rpol"; }
+  import openconfig-extensions { prefix "oc-ext"; }
+  import openconfig-ospf-types { prefix "oc-ospf-types"; }
+
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines extensions to the OpenConfig policy
+    model to add extensions for OSPF. This module is intended
+    to be generic for both OSPFv2 and OSPFv3.";
+
+  oc-ext:openconfig-version "0.0.1";
+
+  revision "2016-08-22" {
+    description
+      "Initial revision";
+    reference "0.0.1";
+  }
+
+  grouping ospf-match-config {
+    description
+      "Configuration parameters for OSPF match conditions";
+
+    leaf area-eq {
+      type oc-ospf-types:ospf-area-identifier;
+      description
+        "Match prefixes which are within a particular OSPF area";
+    }
+  }
+
+  grouping ospf-match-conditions {
+    description
+      "Match conditions that are added by OSPF";
+
+    container ospf-conditions {
+      description
+        "Match conditions specific to OSPF";
+
+      container config {
+        description
+          "Configuration parameters relating to OSPF match conditions";
+
+        uses ospf-match-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state parameters relating to OSPF match conditions";
+
+        uses ospf-match-config;
+      }
+    }
+  }
+
+  grouping ospf-actions-config {
+    description
+      "Configuration parameters for OSPF policy actions";
+
+    leaf set-area {
+      type oc-ospf-types:ospf-area-identifier;
+      description
+        "Set the area for the matched route. This action is typically
+        used when importing prefixes into OSPF, such that a route can
+        be imported into a specific area within the instance.";
+    }
+  }
+
+  grouping ospf-actions-set-metric-config { 
+    description
+      "Configuration parameters relating to setting the OSPF metric";
+
+    leaf metric-type {
+      type enumeration {
+        enum EXTERNAL_TYPE_1 {
+          description
+            "Set the external type 1 metric";
+        }
+        enum EXTERNAL_TYPE_2 {
+          description
+            "Set the external type 2 metric";
+        }
+      }
+      default "EXTERNAL_TYPE_2";
+      description
+        "Specify the type of metric which is to be set by the policy";
+    }
+
+    leaf metric {
+      type oc-ospf-types:ospf-metric;
+      description
+        "Set the metric of the routes matching the policy to the value
+        specified by this leaf.";
+    }
+  }
+
+  grouping ospf-actions {
+    description
+      "Actions that are added by OSPF to the action framework";
+
+    container ospf-actions {
+      description
+        "Actions specific to OSPF";
+
+      container config {
+        description
+          "Configuration parameters for OSPF actions";
+
+        uses ospf-actions-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state parameters for OSPF actions";
+
+        uses ospf-actions-config;
+      }
+
+      container set-metric {
+        description
+          "Configuration and state parameters relating to manipulating
+          the OSPF metric";
+
+        container config {
+          description
+            "Configuration parameters relating to setting the OSPF metric";
+          uses ospf-actions-set-metric-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters relating to setting the OSPF
+            metric";
+
+          uses ospf-actions-set-metric-config;
+        }
+      }
+    }
+  }
+
+  // augment the groupings into the routing policy model
+
+  // TODO: discuss whether igp-actions should be used or whether this should 
+  // be removed.
+
+  augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" +
+            "oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement/" +
+            "oc-rpol:conditions" {
+    description
+      "Add OSPF specific match conditions to the routing policy model";
+    uses ospf-match-conditions;
+  }
+
+  augment "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" +
+            "oc-rpol:policy-definition/oc-rpol:statements/oc-rpol:statement/" +
+            "oc-rpol:actions" {
+    description
+      "Add OSPF specific actions to the routing policy model";
+    uses ospf-actions;
+  }
+
+}
\ No newline at end of file