module bbf-device-aggregation {
  yang-version 1.1;
  namespace "urn:bbf:yang:bbf-device-aggregation";
  prefix bbf-dev-agg;

  import bbf-yang-types {
    prefix bbf-yang;
  }
  import bbf-device-types {
    prefix bbf-dvct;
  }
  import ietf-yang-schema-mount {
    prefix yangmnt;
  }

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

     Editor:      Nick Hancock, ADTRAN

     Editor:      Ludwig Pauwels, Nokia

     PS Leader:   Joey Boyd, ADTRAN

     WA Director: Joey Boyd, ADTRAN

     WA Director: Sven Ooghe, Nokia";
  description
    "This module contains a collection of YANG definitions for
     supporting the Broadband Forum requirements on device
     aggregation. As such, this module is specific to access network
     equipment (e.g., BBF-specified Access Nodes and FTTdp DPUs).

     Copyright (c) 2017-2022, 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-383a5; see
     the TR itself for full legal notices.";

  revision 2022-03-01 {
    description
      "Amendment 5.
       * Approval Date:    2022-03-01.
       * Publication Date: 2022-03-01.";
    reference
      "TR-383a5: Common YANG Modules
                 <https://www.broadband-forum.org/technical/download/
                          TR-383_Amendment-5.pdf>";
  }

  container devices {
    description
      "Aggregation and management of multiple devices.";
    list device {
      key "name";
      description
        "An aggregated device.";
      leaf name {
        type bbf-yang:string-ascii64;
        description
          "The unique name of the device.";
      }
      leaf type {
        type identityref {
          base bbf-dvct:device-type;
        }
        mandatory true;
        description
          "The type of device.";
      }
      container identification {
        presence
          "Presence of the container indicates that data nodes that
           identify the device exist.";
        description
          "Data nodes identifying the device instance.";
        choice identification {
          mandatory true;
          description
            "A choice for different methods to uniquely identify a
             device instance.";
          case hardware-inventory-data {
            leaf mfg-name {
              type string;
              description
                "The name of the manufacturer of the device.";
            }
            leaf model-name {
              type string;
              description
                "The vendor-specific model name associated with the
                 device.";
            }
            leaf serial-num {
              type string;
              description
                "The vendor-specific serial number string for the
                 device.";
            }
          }
        }
      }
      container data {
        description
          "The data nodes of the device's schema.";
        yangmnt:mount-point "device-yang-library" {
          description
            "The YANG library associated with the device.";
        }
      }
    }
  }
}
