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

module onf-connectivity-service {
  namespace "http://opennetworking.org/aether/connectivity-service";
  prefix cs;

  import ietf-inet-types { prefix inet; }
  import ietf-yang-types{ prefix yg; }
  import onf-aether-types { prefix at; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether Connectivity service is the linkage between the
     ROC and a core that provides connectivity.";

  revision "2021-10-21" {
    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
    reference "RFC 6087";
  }

  typedef connectivity-service-id {
        type yg:yang-identifier {
            length 1..32;
        }
   description "The typedef for connectivity-service-id";
  }

  container connectivity-service {
    description "The top level container";

    list connectivity-service {
      key "id";
      description
        "List of connectivity services";

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

      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 connectivity service";
      }

      leaf core-5g-endpoint {
        type inet:uri;
        description "url of the 5g core";
      }

      leaf acc-prometheus-url {
          type inet:uri;
          description
            "URL of ACC prometheus";
      }
    }
  }
}
