syntax = "proto3"; package envoy.service.status.v4alpha; import "envoy/admin/v4alpha/config_dump.proto"; import "envoy/config/core/v4alpha/base.proto"; import "envoy/type/matcher/v4alpha/node.proto"; import "google/api/annotations.proto"; import "google/protobuf/struct.proto"; import "udpa/annotations/status.proto"; import "udpa/annotations/versioning.proto"; option java_package = "io.envoyproxy.envoy.service.status.v4alpha"; option java_outer_classname = "CsdsProto"; option java_multiple_files = true; option java_generic_services = true; option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; // [#protodoc-title: Client Status Discovery Service (CSDS)] // CSDS is Client Status Discovery Service. It can be used to get the status of // an xDS-compliant client from the management server's point of view. In the // future, it can potentially be used as an interface to get the current // state directly from the client. service ClientStatusDiscoveryService { rpc StreamClientStatus(stream ClientStatusRequest) returns (stream ClientStatusResponse) { } rpc FetchClientStatus(ClientStatusRequest) returns (ClientStatusResponse) { option (google.api.http).post = "/v3/discovery:client_status"; option (google.api.http).body = "*"; } } // Status of a config. enum ConfigStatus { // Status info is not available/unknown. UNKNOWN = 0; // Management server has sent the config to client and received ACK. SYNCED = 1; // Config is not sent. NOT_SENT = 2; // Management server has sent the config to client but hasn’t received // ACK/NACK. STALE = 3; // Management server has sent the config to client but received NACK. ERROR = 4; } // Request for client status of clients identified by a list of NodeMatchers. message ClientStatusRequest { option (udpa.annotations.versioning).previous_message_type = "envoy.service.status.v3.ClientStatusRequest"; // Management server can use these match criteria to identify clients. // The match follows OR semantics. repeated type.matcher.v4alpha.NodeMatcher node_matchers = 1; } // Detailed config (per xDS) with status. // [#next-free-field: 7] message PerXdsConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.service.status.v3.PerXdsConfig"; ConfigStatus status = 1; oneof per_xds_config { admin.v4alpha.ListenersConfigDump listener_config = 2; admin.v4alpha.ClustersConfigDump cluster_config = 3; admin.v4alpha.RoutesConfigDump route_config = 4; admin.v4alpha.ScopedRoutesConfigDump scoped_route_config = 5; // [#not-implemented-hide:] admin.v4alpha.EndpointsConfigDump endpoint_config = 6; } } // All xds configs for a particular client. message ClientConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.service.status.v3.ClientConfig"; // Node for a particular client. config.core.v4alpha.Node node = 1; repeated PerXdsConfig xds_config = 2; } message ClientStatusResponse { option (udpa.annotations.versioning).previous_message_type = "envoy.service.status.v3.ClientStatusResponse"; // Client configs for the clients specified in the ClientStatusRequest. repeated ClientConfig config = 1; }