Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/optical-transport/openconfig-transport-line-common.yang b/models/openconfig/src/main/yang/optical-transport/openconfig-transport-line-common.yang
new file mode 100644
index 0000000..ccd5159
--- /dev/null
+++ b/models/openconfig/src/main/yang/optical-transport/openconfig-transport-line-common.yang
@@ -0,0 +1,295 @@
+module openconfig-transport-line-common {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/transport-line-common";
+
+  prefix "oc-line-com";
+
+  // import some basic types
+  import iana-if-type { prefix ift; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-platform { prefix oc-platform; }
+  import openconfig-types { prefix oc-types; }
+  import openconfig-transport-types { prefix oc-opt-types; }
+
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines common data elements for OpenConfig data
+    models for optical transport line system elements, such as
+    amplifiers and ROADMs (wavelength routers).";
+
+  oc-ext:openconfig-version "0.3.0";
+
+  revision "2017-07-08" {
+    description
+      "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";
+  }
+
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  identity OPTICAL_LINE_PORT_TYPE {
+    description
+      "Type definition for optical node port types";
+  }
+
+  identity INGRESS {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Ingress port, corresponding to a signal entering
+      a line device such as an amplifier or wavelength
+      router.";
+  }
+
+  identity EGRESS {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Egress port, corresponding to a signal exiting
+      a line device such as an amplifier or wavelength
+      router.";
+  }
+
+  identity ADD {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Add port, corresponding to a signal injected
+      at a wavelength router.";
+  }
+
+  identity DROP {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Drop port, corresponding to a signal dropped
+      at a wavelength router.";
+  }
+
+  identity MONITOR {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Monitor port, corresponding to a signal used by an optical
+      channel monitor. This is used to represent the connection
+      that a channel monitor port is connected to. This
+      connection may be via physical cable and faceplate ports or
+      internal to the device";
+  }
+
+  // typedef statements
+
+  // grouping statements
+
+   grouping optical-osc-config {
+    description
+      "Configuration data for OSC interfaces";
+
+    leaf-list interface {
+      type oc-if:base-interface-ref;
+      description
+        "List of references to OSC interfaces";
+    }
+  }
+
+  grouping optical-osc-state {
+    description
+      "Operational state data for OSC interfaces";
+
+    container input-power {
+      description
+        "The input optical power of this port in units
+        of 0.01dBm. If avg/min/max statistics are not supported,
+        the target is expected to just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+
+    container output-power {
+      description
+        "The output optical power of this port in units
+        of 0.01dBm. If avg/min/max statistics are not supported,
+        the target is expected to just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+
+    container laser-bias-current {
+      description
+        "The current applied by the system to the transmit laser to
+        achieve the output power. The current is expressed in mA
+        with up to one decimal precision. If avg/min/max statistics
+        are not supported, the target is expected to just supply
+        the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-mA;
+    }
+  }
+
+
+
+  grouping optical-osc-top {
+    description
+      "Top-level grouping for configuration and operational state
+      data for optical supervisory channels (OSC) for amplifiers,
+      WSS/ROADM, nodes, etc.";
+
+    container config {
+      description
+        "Configuration data for OSCs";
+
+      uses optical-osc-config;
+    }
+
+    container state {
+
+      config false;
+
+      description
+        "Operational state data for OSCs";
+
+      uses optical-osc-config;
+      uses optical-osc-state;
+    }
+  }
+
+
+  grouping transport-line-common-port-config {
+    description
+      "Configuration data for optical line ports";
+
+    leaf admin-state {
+      type oc-opt-types:admin-state-type;
+      description
+          "Sets the admin state of the optical-port";
+    }
+  }
+
+  grouping transport-line-common-port-state {
+    description
+      "Operational state data describing optical line ports";
+
+    leaf optical-port-type {
+      type identityref {
+        base OPTICAL_LINE_PORT_TYPE;
+      }
+      description
+        "Indicates the type of transport line port.  This is an
+        informational field that should be made available by the
+        device (e.g., in the openconfig-platform model).";
+    }
+
+    container input-power {
+      description
+        "The total input optical power of this port in units
+        of 0.01dBm. If avg/min/max statistics are not supported,
+        just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+
+    container output-power {
+      description
+        "The total output optical power of this port in units
+        of 0.01dBm. If avg/min/max statistics are not supported,
+        just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+  }
+
+  grouping transport-line-common-port-top {
+    description
+      "Top-level grouping ";
+
+    container optical-port {
+      description
+        "Top-level container ";
+
+      container config {
+
+        description
+          "Operational config data for optical line ports";
+
+        uses transport-line-common-port-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for optical line ports";
+
+        uses transport-line-common-port-config;
+        uses transport-line-common-port-state;
+      }
+    }
+  }
+
+
+
+  // data definition statements
+
+  // uses optical-osc-top;
+
+  // augment statements
+
+  augment "/oc-platform:components/oc-platform:component" {
+    description
+      "Adding optical line port data to platform model";
+
+    uses transport-line-common-port-top {
+      when "/oc-platform:components/oc-platform:component/" +
+        "oc-platform:state/oc-platform:type = 'PORT'" {
+        description
+          "Augment is active when component is of type
+          PORT";
+      }
+    }
+  }
+
+  //TODO:this is placeholder until SONET model is added
+  //to interfaces model
+  augment "/oc-if:interfaces/oc-if:interface" {
+    when "oc-if:config/oc-if:type = 'ift:sonet'" {
+      description "Additional interface configuration parameters when
+      the interface type is SONET/SDH";
+    }
+    description "Adds additional SONET/SDH-specific data to
+    osc model";
+
+    container sonet {
+      description
+        "Data related to SONET/SDH interfaces";
+    }
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}