// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

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

  import ietf-yang-types{ prefix yg; }
  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 yg:yang-identifier {
            length 1..32;
        }
   description "The typedef for enterprise-id";
  }

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

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

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

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf description {
        type at:description;
        description "description of this enterprise";
      }

      list connectivity-service {
        key "connectivity-service";
        leaf connectivity-service {
          type leafref {
            path "/cs:connectivity-services/cs:connectivity-service/cs: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;
    }
  }
}
