module openconfig-terminal-device {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/terminal-device";

  prefix "oc-opt-term";

  import openconfig-types {
    prefix oc-types;
    revision-date "2017-01-13";
  }
  import openconfig-transport-types {
    prefix oc-opt-types;
    revision-date "2016-12-22";
  }
  import openconfig-if-ethernet {
    prefix oc-eth;
    revision-date "2016-12-22";
  }
  import openconfig-platform {
    prefix oc-platform;
    revision-date "2016-06-06";
  }
  import openconfig-platform-transceiver {
    prefix oc-transceiver;
    revision-date "2016-12-22";
  }
  import openconfig-extensions {
    prefix oc-ext;
    revision-date "2015-10-09";
  }
  import ietf-yang-types {
    prefix yang;
  }
  // import tailf-common { prefix "tailf";}
  // tailf:export netconf;
  // tailf:export rest;

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module describes a terminal optics device model for
    managing the terminal systems (client and line side) in a
    DWDM transport network.
    Elements of the model:
    physical port: corresponds to a physical, pluggable client
    port on the terminal device. Examples includes 10G, 40G, 100G
    (e.g., 10x10G, 4x25G or 1x100G) and 400G/1T in the future.
    Physical client ports will have associated operational state or
    PMs.
    physical channel: a physical lane or channel in the
    physical client port.  Each physical client port has 1 or more
    channels. An example is 100GBASE-LR4 client physical port having
    4x25G channels. Channels have their own optical PMs and can be
    monitored independently within a client physical port (e.g.,
    channel power).  Physical client channels are defined in the
    model as part of a physical client port, and are modeled
    primarily for reading their PMs.
    logical channel: a logical grouping of logical grooming elements
    that may be assigned to subsequent grooming stages for
    multiplexing / de-multiplexing, or to an optical channel for
    line side transmission.  The logical channels can represent, for
    example, an ODU/OTU logical packing of the client
    data onto the line side.  Tributaries are similarly logical
    groupings of demand that can be represented in this structure and
    assigned to an optical channel.  Note that different types of
    logical channels may be present, each with their corresponding
    PMs.
    optical channel:  corresponds to an optical carrier and is
    assigned a wavelength/frequency.  Optical channels have PMs
    such as power, BER, and operational mode.
    Directionality:
    To maintain simplicity in the model, the configuration is
    described from client-to-line direction.  The assumption is that
    equivalent reverse configuration is implicit, resulting in
    the same line-to-client configuration.
    Physical layout:
    The model does not assume a particular physical layout of client
    and line ports on the terminal device (e.g., such as number of
    ports per linecard, separate linecards for client and line ports,
    etc.).";

  oc-ext:openconfig-version "0.4.0";

  revision "2016-12-22" {
    description
      "Fixes and additions to terminal optics model";
    reference "0.4.0";
  }
 

  grouping terminal-input-optical-power {
    description
      "Reusable leaves related to input optical power";

    leaf input-power {
      type decimal64 {
        fraction-digits 2;
      }
      units dBm;
      description
        "The input optical power of this port in units of 0.01dBm.
        If the port is an aggregate of multiple physical channels,
        this attribute is the total power or sum of all channels.";
    }
  }

  grouping terminal-ethernet-protocol-config {
    description
      "Configuration data for logical channels with Ethernet
      framing";

    //TODO:currently a empty container
  }

  grouping terminal-ethernet-protocol-state {
    description
      "Ethernet-specific counters when logical channel
      is using Ethernet protocol framing, e.g., 10GE, 100GE";

      uses oc-eth:ethernet-interface-state-counters;
  }

  grouping terminal-ethernet-protocol-top {
    description
      "Top-level grouping for data related to Ethernet protocol
      framing on logical channels";

    container ethernet {
      description
        "Top level container for data related to Ethernet framing
        for the logical channel";

      container config {
        description
          "Configuration data for Ethernet protocol framing on
          logical channels";

        uses terminal-ethernet-protocol-config;
      }

      container state {
        config false;
        description
          "Operational state data for Ethernet protocol framing
          on logical channels";

        uses terminal-ethernet-protocol-state;
      }
    }
  }

  grouping terminal-otn-protocol-config {
    description
      "OTU configuration when logical channel
      framing is using an OTU protocol, e.g., OTU1, OTU3, etc.";

    leaf tti-msg-transmit {
      type string;
      description
        "Trail trace identifier (TTI) message transmitted";
    }

    leaf tti-msg-expected {
      type string;
      description
        "Trail trace identifier (TTI) message expected";
    }

    leaf tti-msg-auto {
      type boolean;
      description
        "Trail trace identifier (TTI) transmit message automatically
        created.  If true, then setting a custom transmit message
        would be invalid.";
    }
  }

  grouping terminal-otn-protocol-counter-stats {
    description
      "Counter based statistics containers for logical channels
      using OTN framing";

    leaf errored-seconds {
      type yang:counter64;
      description
        "The number of seconds that at least one errored blocks
        occurs, at least one code violation occurs, loss of sync is
        detected or loss of signal is detected";
    }

    leaf severely-errored-seconds {
      type yang:counter64;
      description
        "The number of seconds that loss of frame is detected OR
        the number of errored blocks, code violations, loss of sync
        or loss of signal is detected exceeds a predefined
        threshold";
    }

    leaf unavailable-seconds {
      type yang:counter64;
      description
        "The number of seconds during which the link is unavailable";
    }

    leaf code-violations {
      type yang:counter64;
      description
        "For ethernet or fiberchannel links, the number of 8b/10b
        coding violations. For SONET/SDH, the number of BIP (bit
        interleaved parity) errors";
    }

    leaf fec-uncorrectable-words {
      type yang:counter64;
      description
        "The number words that were uncorrectable by the FEC";
    }

    leaf fec-corrected-bytes {
      type yang:counter64;
      description
        "The number of bytes that were corrected by the FEC";
    }

    leaf fec-corrected-bits {
      type yang:counter64;
      description
        "The number of bits that were corrected by the FEC";
    }

    leaf background-block-errors {
      type yang:counter64;
      description
        "The number of background block errors";
    }
  }

  grouping terminal-otn-protocol-multi-stats {
    description
      "Multi-value statistics containers for logical channels using
      OTN framing (e.g., max, min, avg, instant)";

    container pre-fec-ber {
      description
        "Bit error rate before forward error correction -- computed
        value with 18 decimal precision. Note that decimal64
        supports values as small as i x 10^-18 where i is an
        integer. Values smaller than this should be reported as 0
        to inidicate error free or near error free performance.
        Values include the instantaneous, average, minimum, and
        maximum statistics. If avg/min/max statistics are not
        supported, the target is expected to just supply the
        instant value";

      uses oc-opt-types:avg-min-max-instant-stats-precision18-ber;
    }

    container post-fec-ber {
      description
        "Bit error rate after forward error correction -- computed
        value with 18 decimal precision. Note that decimal64
        supports values as small as i x 10^-18 where i is an
        integer. Values smaller than this should be reported as 0
        to inidicate error free or near error free performance.
        Values include the instantaneous, average, minimum, and
        maximum statistics. If avg/min/max statistics are not
        supported, the target is expected to just supply the
        instant value";

      uses oc-opt-types:avg-min-max-instant-stats-precision18-ber;
    }

    container q-value {
      description
        "Quality value (factor) in dB of a channel with two
        decimal precision. Values include the instantaneous,
        average, minimum, and maximum statistics. 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-dB;
    }

    container esnr {
      description
        "Electrical signal to noise ratio. Baud rate
        normalized signal to noise ratio based on
        error vector magnitude in dB with two decimal
        precision. Values include the instantaneous, average,
        minimum, and maximum statistics. 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-dB;
    }
  }

  grouping terminal-otn-protocol-state {
    description
      "OTU operational state when logical channel
      framing is using an OTU protocol, e.g., OTU1, OTU3, etc.";


      leaf tti-msg-recv {
        type string;
        description
          "Trail trace identifier (TTI) message received";
      }

      leaf rdi-msg {
        type string;
        description
          "Remote defect indication (RDI) message received";
      }
      uses terminal-otn-protocol-counter-stats;
      uses terminal-otn-protocol-multi-stats;
  }

  grouping terminal-otn-protocol-top {
    description
      "Top-level grouping for data related to OTN protocol framing";

    container otn {
      description
        "Top level container for OTU configuration when logical
        channel framing is using an OTU protocol, e.g., OTU1, OTU3,
        etc.";

      container config {
        description
          "Configuration data for OTN protocol framing";

        uses terminal-otn-protocol-config;
      }

      container state {

        config false;

        description
          "Operational state data for OTN protocol PMs, statistics,
          etc.";

        uses terminal-otn-protocol-config;
        uses terminal-otn-protocol-state;
      }
    }
  }

  grouping terminal-client-port-assignment-config {
    description
      "Configuration data for assigning physical client ports to
      logical channels";

    leaf index {
      type uint32;
      description
        "Index of the client port assignment";
    }

    leaf description {
      type string;
      description
        "Descriptive name for the client port-to-logical channel
        mapping";
    }

    leaf logical-channel {
      type leafref {
        path "/oc-opt-term:terminal-device/oc-opt-term:logical-channels" +
          "/oc-opt-term:channel/oc-opt-term:index";
      }
      description
        "Reference to the logical channel for this
        assignment";
    }

    leaf allocation {
      type decimal64 {
        fraction-digits 3;
      }
      units Gbps;
      description
        "Allocation of the client physical port to the assigned
        logical channel expressed in Gbps.  In most cases,
        the full client physical port rate is assigned to a single
        logical channel.";
    }

  }

  grouping terminal-client-port-assignment-state {
    description
      "Operational state data for assigning physical client ports
      to logical channels";
  }

  grouping terminal-client-port-assignment-top {
    description
      "Top-level grouping for the assigment of client physical ports
      to logical channels";
    //TODO: this grouping could be removed, instead reusing a common
    //grouping for logical client assignment pointers

    container logical-channel-assignments {
      description
        "Enclosing container for client port to logical client
        mappings";

      list assignment {
        key "index";
        description
          "List of assignments to logical clients";

        leaf index {
          type leafref {
            path "../config/index";
          }
          description
            "Reference to the index of this logical client
            assignment";
        }

        container config {
          description
            "Configuration data for the logical client assignment";

          uses terminal-client-port-assignment-config;
        }

        container state {

          config false;

          description
            "Operational state data for the logical client
            assignment";

          uses terminal-client-port-assignment-config;
          uses terminal-client-port-assignment-state;
        }
      }
    }
  }


  grouping terminal-logical-chan-assignment-config {
    description
      "Configuration data for assigning client logical channels
      to line-side tributaries";

    leaf index {
      type uint32;
      description
        "Index of the current logical client channel to tributary
        mapping";
    }

    leaf description {
      type string;
      description
        "Name assigned to the logical client channel";
    }

    leaf assignment-type {
      type enumeration {
        enum LOGICAL_CHANNEL {
          description
            "Subsequent channel is a logical channel";
        }
        enum OPTICAL_CHANNEL {
          description
            "Subsequent channel is a optical channel / carrier";
        }
      }
      description
        "Each logical channel element may be assigned to subsequent
        stages of logical elements to implement further grooming, or
        can be assigned to a line-side optical channel for
        transmission.  Each assignment also has an associated
        bandwidth allocation.";
    }

    leaf logical-channel {
      type leafref {
        path "/oc-opt-term:terminal-device/" +
          "oc-opt-term:logical-channels/oc-opt-term:channel/" +
          "oc-opt-term:index";
      }
      must "../assignment-type = 'LOGICAL_CHANNEL'" {
        description
          "The assignment-type must be set to LOGICAL_CHANNEL for
          this leaf to be valid";
      }
      description
         "Reference to another stage of logical channel elements.";
    }

    leaf optical-channel {
      type leafref {
        path "/oc-platform:components/oc-platform:component/" +
          "oc-platform:name";
      }
      must "../assignment-type = 'OPTICAL_CHANNEL'" {
        description
          "The assignment-type must be set to OPTICAL_CHANNEL for
          this leaf to be valid";
      }
      description
        "Reference to the line-side optical channel that should
        carry the current logical channel element.  Use this
        reference to exit the logical element stage.";
    }

    leaf allocation {
      type decimal64 {
        fraction-digits 3;
      }
      units Gbps;
      description
        "Allocation of the logical client channel to the tributary
        or sub-channel, expressed in Gbps";
    }

  }

  grouping terminal-logical-chan-assignment-state {
    description
      "Operational state data for the assignment of logical client
      channel to line-side tributary";
  }

  grouping terminal-logical-chan-assignment-top {
    description
      "Top-level grouping for the list of logical client channel-to-
      tributary assignments";

    container logical-channel-assignments {
      //TODO: we need a commonly understood name for this logical
      //channel structure
      description
        "Enclosing container for tributary assignments";

      list assignment {
        key "index";
        description
          "Logical channel elements may be assigned directly to
          optical channels for line-side transmission, or can be
          further groomed into additional stages of logical channel
          elements.  The grooming can multiplex (i.e., split the
          current element into multiple elements in the subsequent
          stage) or de-multiplex (i.e., combine the current element
          with other elements into the same element in the subsequent
          stage) logical elements in each stage.
          Note that to support the ability to groom the logical
          elements, the list of logical channel elements should be
          populated with an entry for the logical elements at
          each stage, starting with the initial assignment from the
          respective client physical port.
          Each logical element assignment consists of a pointer to
          an element in the next stage, or to an optical channel,
          along with a bandwidth allocation for the corresponding
          assignment (e.g., to split or combine signal).";

        leaf index {
          type leafref {
            path "../config/index";
          }
          description
            "Reference to the index for the current tributary
            assignment";
        }

        container config {
          description
            "Configuration data for tributary assignments";

          uses terminal-logical-chan-assignment-config;
        }

        container state {

          config false;

          description
            "Operational state data for tributary assignments";

          uses terminal-logical-chan-assignment-config;
          uses terminal-logical-chan-assignment-state;
        }
      }
    }
  }

  grouping terminal-logical-channel-ingress-config {
    description
      "Configuration data for ingress signal to logical channel";

    leaf transceiver {
      type leafref {
        path "/oc-platform:components/oc-platform:component/" +
        "oc-platform:name";
      }
      description
        "Reference to the transceiver carrying the input signal
        for the logical channel.  If specific physical channels
        are mapped to the logical channel (as opposed to all
        physical channels carried by the transceiver), they can be
        specified in the list of physical channel references.";
    }

    leaf-list physical-channel {
      type leafref {
        path "/oc-platform:components/oc-platform:component/" +
          "oc-transceiver:transceiver/" +
          "oc-transceiver:physical-channels/" +
          "oc-transceiver:channel/oc-transceiver:index";
      }
      description
        "This list should be populated with references
        to the client physical channels that feed this logical
        channel from the transceiver specified in the 'transceiver'
        leaf, which must be specified.  If this leaf-list is empty,
        all physical channels in the transceiver are assumed to be
        mapped to the logical channel.";
    }
  }

  grouping terminal-logical-channel-ingress-state {
    description
      "Operational state data for ingress signal to logical channel";
  }

  grouping terminal-logical-channel-ingress-top {
    description
      "Top-level grouping for ingress signal to logical channel";

    container ingress {
      description
        "Top-level container for specifying references to the
        source of signal for the logical channel, either a
        transceiver or individual physical channels";

      container config {
        description
          "Configuration data for the signal source for the
          logical channel";

        uses terminal-logical-channel-ingress-config;
      }

      container state {

        config false;

        description
          "Operational state data for the signal source for the
          logical channel";

        uses terminal-logical-channel-ingress-config;
        uses terminal-logical-channel-ingress-state;
      }
    }
  }

  grouping terminal-logical-channel-config {
    description
      "Configuration data for logical channels";

    leaf index {
      //type uint32;
      type string;
      description
        "Index of the current logical channel";
    }

    leaf description {
      type string;
      description
        "Description of the logical channel";
    }

    leaf admin-state {
      type oc-opt-types:admin-state-type;
      description
          "Sets the admin state of the logical channel";
    }

    leaf rate-class {
      type identityref {
        base oc-opt-types:TRIBUTARY_RATE_CLASS_TYPE;
      }
      description
        "Rounded bit rate of the tributary signal. Exact bit rate
        will be refined by protocol selection.";
    }

    leaf trib-protocol {
      type identityref {
        base oc-opt-types:TRIBUTARY_PROTOCOL_TYPE;
      }
      description
        "Protocol framing of the tributary signal. If this
        LogicalChannel is directly connected to a Client-Port or
        Optical-Channel, this is the protocol of the associated port.
        If the LogicalChannel is connected to other LogicalChannels,
        the TributaryProtocol of the LogicalChannels will define a
        specific mapping/demapping or multiplexing/demultiplexing
        function.
        Not all protocols are valid, depending on the value
        of trib-rate-class.  The expectation is that the NMS
        will validate that a correct combination of rate class
        and protocol are specfied.  Basic combinations are:
        rate class: 1G
        protocols: 1GE
        rate class: 2.5G
        protocols: OC48, STM16
        rate class: 10G
        protocols:  10GE LAN, 10GE WAN, OC192, STM64, OTU2, OTU2e,
                    OTU1e, ODU2, ODU2e, ODU1e
        rate class: 40G
        protocols:  40GE, OC768, STM256, OTU3, ODU3
        rate class: 100G
        protocols:  100GE, 100G MLG, OTU4, OTUCn, ODU4";
    }

    leaf logical-channel-type {
      type identityref {
        base oc-opt-types:LOGICAL_ELEMENT_PROTOCOL_TYPE;
      }
      description
        "The type / stage of the logical element determines the
        configuration and operational state parameters (PMs)
        available for the logical element";
    }

    leaf loopback-mode {
      type oc-opt-types:loopback-mode-type;
      description
        "Sets the loopback type on the logical channel. Setting the
        mode to something besides NONE activates the loopback in
        the specified mode.";
    }
  }


  grouping terminal-logical-channel-state {
    description
      "Operational state data for logical client channels";

    leaf link-state {
      type enumeration {
        enum UP {
          description
            "Logical channel is operationally up";
        }
        enum DOWN {
          description
            "Logical channel is operationally down";
        }
      }
      description
        "Link-state of the Ethernet protocol on the logical channel,
        SONET / SDH framed signal, etc.";
    }

  }

  grouping terminal-logical-channel-top {
    description
      "Top-level grouping for logical channels";

    container logical-channels {
      description
        "Enclosing container the list of logical channels";

      list channel {
        key "index";
        description
          "List of logical channels";
        //TODO: naming for this list of logical elements should be
        //revisited.

        leaf index {
          type string;
          // type leafref {
          //   path "../config/index";
          // }
          description
            "Reference to the index of the logical channel";
        }

        container config {
          description
            "Configuration data for logical channels";

          uses terminal-logical-channel-config;

        }

        container state {

          config false;

          description
            "Operational state data for logical channels";

          uses terminal-logical-channel-config;
          uses terminal-logical-channel-state;
        }

        uses terminal-otn-protocol-top {
          when "config/logical-channel-type = 'PROT_OTN'" {
            description
              "Include the OTN protocol data only when the
              channel is using OTN framing.";
          }
        }
        uses terminal-ethernet-protocol-top {
          when "config/logical-channel-type = 'oc-opt-types:PROT_ETHERNET'" {
            description
              "Include the Ethernet protocol statistics only when the
              protocol used by the link is Ethernet.";
          }
        }
        uses terminal-logical-channel-ingress-top;
        uses terminal-logical-chan-assignment-top;
      }
    }
  }


  grouping terminal-optical-channel-config {
    description
      "Configuration data for describing optical channels";

    leaf frequency {
      type oc-opt-types:frequency-type;
      description
        "Frequency of the optical channel, expressed in MHz";
    }

    leaf target-output-power {
      type decimal64 {
        fraction-digits 2;
      }
      units dBm;
      description
        "Target output optical power level of the optical channel,
        expressed in increments of 0.01 dBm (decibel-milliwats)";
    }

    leaf operational-mode {
      type uint16;
      description
        "Vendor-specific mode identifier -- sets the operational
        mode for the channel.  The specified operational mode must
        exist in the list of supported operational modes supplied
        by the device";
      //
      // Ideally, this leaf should be a leafref to the supported
      // operational modes, but YANG 1.0 does not allow a r/w
      // leaf to be a leafref to a r/o leaf.
    }


    leaf line-port {
      type leafref {
        path "/oc-platform:components/oc-platform:component/" +
          "oc-platform:name";
      }
      description
        "Reference to the line-side physical port that carries
        this optical channel.  The target port should be
        a component in the physical inventory data model.";
    }
  }

  grouping terminal-optical-channel-state {
    description
      "Operational state data for optical channels";

    leaf group-id {
      type uint32;
      description
        "If the device places constraints on which optical
        channels must be managed together (e.g., transmitted on the
        same line port), it can indicate that by setting the group-id
        to the same value across related optical channels.";
    }

    uses oc-transceiver:optical-power-state;

    container chromatic-dispersion {
      description
        "Chromatic Dispersion of an optical channel in
        picoseconds / nanometer (ps/nm) as reported by receiver
        with two decimal precision. Values include the instantaneous,
        average, minimum, and maximum statistics. If avg/min/max
        statistics are not supported, the target is expected to just
        supply the instant value";

      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps-nm;
    }

    container polarization-mode-dispersion {
      description
        "Polarization Mode Dispersion of an optical channel
        in picosends (ps) as reported by receiver with two decimal
        precision. Values include the instantaneous, average,
        minimum, and maximum statistics. If avg/min/max statistics
        are not supported, the target is expected to just supply the
        instant value";

      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps;
    }

    container second-order-polarization-mode-dispersion {
      description
        "Second Order Polarization Mode Dispersion of an optical
        channel in picoseconds squared (ps^2) as reported by
        receiver with two decimal precision. Values include the
        instantaneous, average, minimum, and maximum statistics.
        If avg/min/max statistics are not supported, the target
        is expected to just supply the instant value";

      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps2;
    }

    container polarization-dependent-loss {
      description
        "Polarization Dependent Loss of an optical channel
        in dB as reported by receiver with two decimal precision.
        Values include the instantaneous, average, minimum, and
        maximum statistics. 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-dB;
    }
  }

  grouping terminal-optical-channel-top {
    description
      "Top-level grouping for optical channel data";

    container optical-channel {
      description
        "Enclosing container for the list of optical channels";

      container config {
        description
          "Configuration data for optical channels";

        uses terminal-optical-channel-config;
      }

      container state {

        config false;

        description
          "Operational state data for optical channels";

        uses terminal-optical-channel-config;
        uses terminal-optical-channel-state;
      }
    }
  }

  grouping terminal-operational-mode-config {
    description
      "Configuration data for vendor-supported operational modes";
  }

  grouping terminal-operational-mode-state {
    description
      "Operational state data for vendor-supported operational
      modes";

      leaf mode-id {
        type uint16;
        description
          "Two-octet encoding of the vendor-defined operational
          mode";
      }

      leaf description {
        type string;
        description
          "Vendor-supplied textual description of the characteristics
          of this operational mode to enable operators to select the
          appropriate mode for the application.";
      }

      //TODO: examples of the kind of info that would be useful to
      //report in the operational mode:
      //Symbol rate (32G, 40G, 43G, 64G, etc.)
      //Modulation (QPSK, 8-QAM, 16-QAM, etc.)
      //Differential encoding (on, off/pilot symbol, etc)
      //State of polarization tracking mode (default, med.
      //high-speed, etc.)
      //Pulse shaping (RRC, RC, roll-off factor)
      //FEC mode (SD, HD, % OH)

      leaf vendor-id {
        type string;
        description
          "Identifier to represent the vendor / supplier of the
          platform and the associated operational mode information";
      }
  }

  grouping terminal-operational-mode-top {
    description
      "Top-level grouping for vendor-supported operational modes";

    container operational-modes {
      description
        "Enclosing container for list of operational modes";

      list mode {
        key "mode-id";
        config false;
        description
          "List of operational modes supported by the platform.
          The operational mode provides a platform-defined summary
          of information such as symbol rate, modulation, pulse
          shaping, etc.";

        leaf mode-id {
          type leafref {
            path "../state/mode-id";
          }
          description
            "Reference to mode-id";
        }

        container config {
          description
            "Configuration data for operational mode";

          uses terminal-operational-mode-config;
        }

        container state {

          config false;

          description
            "Operational state data for the platform-defined
            operational mode";

          uses terminal-operational-mode-config;
          uses terminal-operational-mode-state;
        }
      }
    }
  }


  grouping terminal-device-config {
    description
      "Configuration data for transport terminal devices at a
      device-wide level";
  }

  grouping terminal-device-state {
    description
      "Operational state data for transport terminal devices at a
      device-wide level";
  }

  grouping terminal-device-top {
    description
      "Top-level grouping for data for terminal devices";

    container terminal-device {
      description
        "Top-level container for the terminal device";

      container config {
        description
          "Configuration data for global terminal-device";

        uses terminal-device-config;
      }

      container state {

        config false;

        description
          "Operational state data for global terminal device";

        uses terminal-device-config;
        uses terminal-device-state;
      }

      uses terminal-logical-channel-top;
      uses terminal-operational-mode-top;

    }
  }

  // data definition statements

  uses terminal-device-top;

  // augment statements

/*  augment "/oc-platform:components/oc-platform:component" {
    when "/oc-platform:components/oc-platform:component/" +
      "oc-platform:state/oc-platform:type = 'OPTICAL_CHANNEL'" {
      description
        "Augment is active when component is of type
        OPTICAL_CHANNEL";
    }
    description
      "Adding optical channel data to physical inventory";

    uses terminal-optical-channel-top {
    }
  }
*/

}
