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

}
