// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module onf-enterprise {
  namespace "http://opennetworking.org/aether/enterprise";
  prefix ent;

  import onf-aether-types { prefix at; }
  import onf-connectivity-service { prefix cs; }

  include onf-site;
  include onf-upf;
  include onf-slice;
  include onf-device-group;
  include onf-ip-domain;
  include onf-application;
  include onf-sim-card;
  include onf-traffic-class;
  include onf-template;
  include onf-device;
  include onf-priority-traffic-rule;

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether Enterprise is an administration entity that
     has ownership of resrouces.";

  revision "2022-01-19" {
    description "Sim-card, Device, and Priority-Traffic-Rule Support";
    reference "RFC 6020";
  }

  revision "2022-01-14" {
    description "Refactored to work with submodules";
    reference "RFC 6020";
  }

  revision "2021-06-02" {
    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
    reference "RFC 6087";
  }

  typedef enterprise-id {
     type at:aether-identifier;
     description "The typedef for enterprise-id";
  }

  container enterprises {
    description "The top level enterprises container";

    list enterprise {
      key "enterprise-id";
      description
        "List of enterprises";

      leaf enterprise-id {
        type enterprise-id;
        description "ID for this enterprise.";
      }

      uses at:desc-display-name;

      list connectivity-service {
        key "connectivity-service";
        leaf connectivity-service {
          type leafref {
            path "/cs:connectivity-services/cs:connectivity-service/cs:connectivity-service-id";
          }
          description
            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
        }
        leaf enabled {
          type boolean;
          default true;
          description
            "Allow or disallow pushes to this connectivity service";
        }
        description "The list for connectivity-service";
      }

      uses application;

      uses traffic-class;

      uses template;

      uses site;
    }
  }
}
