// 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-vcs;
  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;
    }
  }
}
