// 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 "2022-01-14" {
    description "Renamed top level container as plural";
    reference "RFC 6020";
  }

  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-services {
    description "The connectivity-services top level container";

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

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

      uses at:desc-display-name;

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