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

}
