submodule bbf-xpon-wavelength-profile-body {
  yang-version 1.1;
  belongs-to bbf-xpon {
    prefix bbf-xpon;
  }

  import bbf-yang-types {
    prefix bbf-yang;
  }
  include bbf-xpon-base;

  organization
    "Broadband Forum <https://www.broadband-forum.org>
     Fiber Access Networks Work Area";
  contact
    "Comments or questions about this Broadband Forum YANG module
     should be directed to <mailto:help@broadband-forum.org>.

     Editor:      Joey Boyd, ADTRAN

     Editor:      Samuel Chen, Broadcom

     Editor:      Robert Peschi, Nokia

     WA Director: Marta Seda, Calix

     WA Director: Lin Wei, Huawei";
  description
    "This submodule contains a collection of YANG definitions for
     managing wavelength profiles.

     Copyright (c) 2018, Broadband Forum

     Redistribution and use in source and binary forms, with or
     without modification, are permitted provided that the following
     conditions are met:

     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

     2. Redistributions in binary form must reproduce the above
        copyright notice, this list of conditions and the following
        disclaimer in the documentation and/or other materials
        provided with the distribution.

     3. Neither the name of the copyright holder nor the names of its
        contributors may be used to endorse or promote products
        derived from this software without specific prior written
        permission.

     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
     CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

     The above license is used as a license under copyright only.
     Please reference the Forum IPR Policy for patent licensing terms
     <https://www.broadband-forum.org/ipr-policy>.

     Any moral rights which are necessary to exercise under the above
     license grant are also deemed granted under this license.

     This version of this YANG module is part of TR-385; see
     the TR itself for full legal notices.";

  revision 2019-02-25 {
    description
      "Initial revision.
       * Approval Date:    2019-02-25.
       * Publication Date: 2019-02-25.";
    reference
      "TR-385: ITU-T PON YANG Modules
               <https://www.broadband-forum.org/technical/download/
                        TR-385.pdf>";
  }

  typedef wavelength-prof-ref {
    type leafref {
      path '/bbf-xpon:xpon/bbf-xpon:wavelength-profiles/bbf-xpon:'
         + 'wavelength-profile/bbf-xpon:name';
    }
    description
      "A reference to a wavelength profile.";
  }

  augment '/bbf-xpon:xpon' {
    description
      "Augment system level xPON configuration with wavelength
       profile configuration.";
    container wavelength-profiles {
      description
        "Wavelength profile configuration.";
      uses wavelength-profile-data;
    }
  }

  grouping wavelength-profile-data {
    description
      "All config data for wavelength profile.";
    list wavelength-profile {
      key "name";
      description
        "The list of wavelength profiles.";
      leaf name {
        type bbf-yang:string-ascii64;
        description
          "Wavelength profile name.";
      }
      leaf upstream-channel-id {
        type uint8 {
          range "0..15";
        }
        default "0";
        description
          "Upstream channel ID.";
        reference
          "ITU-T G.989.3 clause 6.1.5.5.";
      }
      leaf downstream-channel-id {
        type uint8 {
          range "0..15";
        }
        default "0";
        description
          "Downstream channel ID.";
        reference
          "ITU-T G.989.3 clause 6.1.5.4.";
      }
      leaf downstream-wavelength {
        type uint32 {
          range "0 | 156000..161000";
        }
        units "0.01nm";
        default "0";
        description
          "Downstream wavelength.";
        reference
          "ITU-T G.989.2";
      }
    }
  }
}
