Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/optical-transport/openconfig-wavelength-router.yang b/models/openconfig/src/main/yang/optical-transport/openconfig-wavelength-router.yang
new file mode 100644
index 0000000..1141aab
--- /dev/null
+++ b/models/openconfig/src/main/yang/optical-transport/openconfig-wavelength-router.yang
@@ -0,0 +1,345 @@
+module openconfig-wavelength-router {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/wavelength-router";
+
+  prefix "oc-wave-router";
+
+  // import some basic types
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-types { prefix oc-types; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-transport-types { prefix oc-opt-types; }
+
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+      www.openconfig.net";
+
+  description
+    "This model describes configuration and operational state data
+    for an optical transport line system node, or ROADM (incl. CDC
+    ROADMs, WSS, Dynamic Gain Equalizer/DGE).
+
+    Nodes are modeled as a configurable switching element with
+    ingress and egress ports, as well as a number of add/drop ports
+    that can be set up to direct portions of the optical spectrum
+    to the appropriate degrees.";
+
+  oc-ext:openconfig-version "0.3.0";
+
+  revision "2017-07-08" {
+    description
+      "Support multiple OCMs, add monitor port type
+      and refs to hw ports, ";
+    reference "0.3.0";
+  }
+
+  revision "2017-03-28" {
+    description
+      "Added min/max/avg stats, status for media channels, OCM, APS";
+    reference "0.2.0";
+  }
+
+  revision "2016-03-31" {
+    description
+      "Initial public release";
+    reference "0.1.0";
+  }
+
+
+
+  // grouping statements
+
+  grouping media-channel-port-config {
+    description
+      "Configuration data for a media channel source/dest port";
+
+    leaf port-name {
+      type oc-if:base-interface-ref;
+      description
+        "Reference to the corresponding node interface";
+    }
+  }
+
+  grouping media-channel-port-state {
+    description
+      "Operational state data for a media channel source/dest port";
+  }
+
+  grouping media-channel-source-port-top {
+    description
+      "Top-level grouping for source of the media channel";
+
+    container source {
+      description
+        "Top-level container for media channel source";
+
+      container config {
+        description
+          "Configuration data for the media channel source";
+
+        uses media-channel-port-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for the media channel source";
+
+        uses media-channel-port-config;
+        uses media-channel-port-state;
+      }
+    }
+  }
+
+  grouping media-channel-dest-port-top {
+    description
+      "Top-level grouping for destination of the media channel";
+
+    container dest {
+      description
+        "Top-level container for media channel destination";
+
+      container config {
+        description
+          "Configuration data for the media channel destination";
+
+        uses media-channel-port-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for the media channel destination";
+
+        uses media-channel-port-config;
+        uses media-channel-port-state;
+      }
+    }
+  }
+
+  grouping media-channel-psd-config {
+    description
+      "Configuration data for the media channel PSD";
+
+    leaf lower-frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "Lower frequency of the specified PSD";
+    }
+
+    leaf upper-frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "Upper frequency of the specified PSD";
+    }
+
+    leaf psd {
+      type oc-types:ieeefloat32;
+      units "nW/MHz";
+      description
+        "Power spectral density expressed in nanowatts per
+        megahertz, nW/MHz.  These units allow the value to often
+        be greater than 1.0.  It also avoids dealing with zero values
+        for 0dBm.  For example, a 40GHz wide channel
+        with 0dBm power would be:
+          0dBm = 1mW = 10^6nW
+          40GHz = 40,000MHz
+          0dBm/40GHz = 10^6nW/40,000MHz = 1000/40 = 25";
+    }
+  }
+
+  grouping media-channel-psd-state {
+    description
+      "Operational state data for the media channel PSD";
+  }
+
+  grouping media-channel-psd-top {
+    description
+      "Top-level grouping ";
+
+    container psd-distribution {
+      description
+        "Enclosing container for the list of values describing
+        the power spectral density distribution";
+
+      list psd-value {
+        key "lower-frequency upper-frequency";
+        description
+          "List of tuples describing the PSD distribution";
+
+        leaf lower-frequency {
+          type leafref {
+            path "../config/lower-frequency";
+          }
+          description
+            "Reference to the list key";
+        }
+
+        leaf upper-frequency {
+          type leafref {
+            path "../config/upper-frequency";
+          }
+          description
+            "Reference to the list key";
+        }
+
+        container config {
+          description
+            "Configuration data for PSD";
+
+          uses media-channel-psd-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for PSD";
+
+          uses media-channel-psd-config;
+          uses media-channel-psd-state;
+        }
+      }
+    }
+  }
+
+  grouping media-channel-config {
+    description
+      "Configuration data for media channel definitions";
+
+    leaf index {
+      type uint32;
+      description
+        "Identifier for the defined media channel";
+    }
+
+    leaf name {
+      type string;
+      description
+        "The user supplied name of the media channel";
+    }
+
+    leaf lower-frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "The lower frequency for the spectrum defined by this media
+        channel";
+    }
+
+    leaf upper-frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "The upper frequency for the spectrum defined by this media
+        channel";
+    }
+
+    leaf admin-status {
+      type oc-opt-types:admin-state-type;
+      description
+          "Sets the admin status of the media channel";
+    }
+
+  }
+
+  grouping media-channel-state {
+    description
+      "Operational state data for media channels ";
+
+    leaf oper-status {
+      type enumeration {
+        enum UP {
+          description
+            "Media channel is operationally up";
+        }
+        enum DOWN {
+          description
+            "Media channel is operationally down";
+        }
+      }
+      description
+        "Operational state of the media channel";
+    }
+
+  }
+
+  grouping media-channel-top {
+    description
+      "Top-level grouping for list of defined media channels";
+
+    container media-channels {
+      description
+        "Enclosing container for media channel list";
+
+      list channel {
+        key "index";
+        description
+          "List of media channels";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "Reference to index number of the media channel";
+        }
+
+        container config {
+          description
+            "Configuration data ";
+
+          uses media-channel-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data ";
+
+          uses media-channel-config;
+          uses media-channel-state;
+        }
+
+        uses media-channel-source-port-top;
+        uses media-channel-dest-port-top;
+        uses media-channel-psd-top;
+      }
+    }
+  }
+
+  grouping wavelength-router-top {
+    description
+      "Top level grouping for the wavelength router";
+
+    container wavelength-router {
+      description
+        "Top-level container for wavelength router device";
+
+      uses media-channel-top;
+    }
+  }
+
+  // data definition statements
+
+  uses wavelength-router-top;
+
+  // augment statements
+
+  // rpc statements
+
+  // notification statements
+
+}