diff options
Diffstat (limited to 'src/rpc/envoy.api.v2.rs')
| -rw-r--r-- | src/rpc/envoy.api.v2.rs | 1890 |
1 files changed, 1890 insertions, 0 deletions
diff --git a/src/rpc/envoy.api.v2.rs b/src/rpc/envoy.api.v2.rs new file mode 100644 index 00000000..996ffeee --- /dev/null +++ b/src/rpc/envoy.api.v2.rs @@ -0,0 +1,1890 @@ +// @generated +// This file is @generated by prost-build. +// \[#protodoc-title: Endpoint configuration\] +// Endpoint discovery :ref:`architecture overview <arch_overview_service_discovery_types_eds>` + +/// Each route from RDS will map to a single cluster or traffic split across +/// clusters using weights expressed in the RDS WeightedCluster. +/// +/// With EDS, each cluster is treated independently from a LB perspective, with +/// LB taking place between the Localities within a cluster and at a finer +/// granularity between the hosts within a locality. The percentage of traffic +/// for each endpoint is determined by both its load_balancing_weight, and the +/// load_balancing_weight of its locality. First, a locality will be selected, +/// then an endpoint within that locality will be chose based on its weight. +/// \[#next-free-field: 6\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ClusterLoadAssignment { + /// Name of the cluster. This will be the :ref:`service_name + /// <envoy_api_field_Cluster.EdsClusterConfig.service_name>` value if specified + /// in the cluster :ref:`EdsClusterConfig + /// <envoy_api_msg_Cluster.EdsClusterConfig>`. + #[prost(string, tag="1")] + pub cluster_name: ::prost::alloc::string::String, + /// List of endpoints to load balance to. + #[prost(message, repeated, tag="2")] + pub endpoints: ::prost::alloc::vec::Vec<endpoint::LocalityLbEndpoints>, + /// Map of named endpoints that can be referenced in LocalityLbEndpoints. + /// \[#not-implemented-hide:\] + #[prost(map="string, message", tag="5")] + pub named_endpoints: ::std::collections::HashMap<::prost::alloc::string::String, endpoint::Endpoint>, + /// Load balancing policy settings. + #[prost(message, optional, tag="4")] + pub policy: ::core::option::Option<cluster_load_assignment::Policy>, +} +/// Nested message and enum types in `ClusterLoadAssignment`. +pub mod cluster_load_assignment { + /// Load balancing policy settings. + /// \[#next-free-field: 6\] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Policy { + /// Action to trim the overall incoming traffic to protect the upstream + /// hosts. This action allows protection in case the hosts are unable to + /// recover from an outage, or unable to autoscale or unable to handle + /// incoming traffic volume for any reason. + /// + /// At the client each category is applied one after the other to generate + /// the 'actual' drop percentage on all outgoing traffic. For example: + /// + /// .. code-block:: json + /// + /// { "drop_overloads": [ + /// { "category": "throttle", "drop_percentage": 60 } + /// { "category": "lb", "drop_percentage": 50 } + /// ]} + /// + /// The actual drop percentages applied to the traffic at the clients will be + /// "throttle"_drop = 60% + /// "lb"_drop = 20% // 50% of the remaining 'actual' load, which is 40%. + /// actual_outgoing_load = 20% // remaining after applying all categories. + /// \[#not-implemented-hide:\] + #[prost(message, repeated, tag="2")] + pub drop_overloads: ::prost::alloc::vec::Vec<policy::DropOverload>, + /// Priority levels and localities are considered overprovisioned with this + /// factor (in percentage). This means that we don't consider a priority + /// level or locality unhealthy until the percentage of healthy hosts + /// multiplied by the overprovisioning factor drops below 100. + /// With the default value 140(1.4), Envoy doesn't consider a priority level + /// or a locality unhealthy until their percentage of healthy hosts drops + /// below 72%. For example: + /// + /// .. code-block:: json + /// + /// { "overprovisioning_factor": 100 } + /// + /// Read more at :ref:`priority levels <arch_overview_load_balancing_priority_levels>` and + /// :ref:`localities <arch_overview_load_balancing_locality_weighted_lb>`. + #[prost(message, optional, tag="3")] + pub overprovisioning_factor: ::core::option::Option<super::super::super::super::google::protobuf::UInt32Value>, + /// The max time until which the endpoints from this assignment can be used. + /// If no new assignments are received before this time expires the endpoints + /// are considered stale and should be marked unhealthy. + /// Defaults to 0 which means endpoints never go stale. + #[prost(message, optional, tag="4")] + pub endpoint_stale_after: ::core::option::Option<super::super::super::super::google::protobuf::Duration>, + /// The flag to disable overprovisioning. If it is set to true, + /// :ref:`overprovisioning factor + /// <arch_overview_load_balancing_overprovisioning_factor>` will be ignored + /// and Envoy will not perform graceful failover between priority levels or + /// localities as endpoints become unhealthy. Otherwise Envoy will perform + /// graceful failover as :ref:`overprovisioning factor + /// <arch_overview_load_balancing_overprovisioning_factor>` suggests. + /// \[#not-implemented-hide:\] + #[deprecated] + #[prost(bool, tag="5")] + pub disable_overprovisioning: bool, + } + /// Nested message and enum types in `Policy`. + pub mod policy { + /// \[#not-implemented-hide:\] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct DropOverload { + /// Identifier for the policy specifying the drop. + #[prost(string, tag="1")] + pub category: ::prost::alloc::string::String, + /// Percentage of traffic that should be dropped for the category. + #[prost(message, optional, tag="2")] + pub drop_percentage: ::core::option::Option<super::super::super::super::r#type::FractionalPercent>, + } + } +} +// \[#protodoc-title: Cluster configuration\] + +/// Configuration for a single upstream cluster. +/// \[#next-free-field: 48\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Cluster { + /// Configuration to use different transport sockets for different endpoints. + /// The entry of *envoy.transport_socket_match* in the + /// :ref:`LbEndpoint.Metadata <envoy_api_field_endpoint.LbEndpoint.metadata>` + /// is used to match against the transport sockets as they appear in the list. The first + /// :ref:`match <envoy_api_msg_Cluster.TransportSocketMatch>` is used. + /// For example, with the following match + /// + /// .. code-block:: yaml + /// + /// transport_socket_matches: + /// - name: "enableMTLS" + /// match: + /// acceptMTLS: true + /// transport_socket: + /// name: envoy.transport_sockets.tls + /// config: { ... } # tls socket configuration + /// - name: "defaultToPlaintext" + /// match: {} + /// transport_socket: + /// name: envoy.transport_sockets.raw_buffer + /// + /// Connections to the endpoints whose metadata value under *envoy.transport_socket_match* + /// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration. + /// + /// If a :ref:`socket match <envoy_api_msg_Cluster.TransportSocketMatch>` with empty match + /// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext" + /// socket match in case above. + /// + /// If an endpoint metadata's value under *envoy.transport_socket_match* does not match any + /// *TransportSocketMatch*, socket configuration fallbacks to use the *tls_context* or + /// *transport_socket* specified in this cluster. + /// + /// This field allows gradual and flexible transport socket configuration changes. + /// + /// The metadata of endpoints in EDS can indicate transport socket capabilities. For example, + /// an endpoint's metadata can have two key value pairs as "acceptMTLS": "true", + /// "acceptPlaintext": "true". While some other endpoints, only accepting plaintext traffic + /// has "acceptPlaintext": "true" metadata information. + /// + /// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS + /// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding + /// *TransportSocketMatch* in this field. Other client Envoys receive CDS without + /// *transport_socket_match* set, and still send plain text traffic to the same cluster. + /// + /// \[#comment:TODO(incfly): add a detailed architecture doc on intended usage.\] + #[prost(message, repeated, tag="43")] + pub transport_socket_matches: ::prost::alloc::vec::Vec<cluster::TransportSocketMatch>, + /// Supplies the name of the cluster which must be unique across all clusters. + /// The cluster name is used when emitting + /// :ref:`statistics <config_cluster_manager_cluster_stats>` if :ref:`alt_stat_name + /// <envoy_api_field_Cluster.alt_stat_name>` is not provided. + /// Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// An optional alternative to the cluster name to be used while emitting stats. + /// Any ``:`` in the name will be converted to ``_`` when emitting statistics. This should not be + /// confused with :ref:`Router Filter Header + /// <config_http_filters_router_x-envoy-upstream-alt-stat-name>`. + #[prost(string, tag="28")] + pub alt_stat_name: ::prost::alloc::string::String, + /// Configuration to use for EDS updates for the Cluster. + #[prost(message, optional, tag="3")] + pub eds_cluster_config: ::core::option::Option<cluster::EdsClusterConfig>, + /// The timeout for new network connections to hosts in the cluster. + #[prost(message, optional, tag="4")] + pub connect_timeout: ::core::option::Option<super::super::super::google::protobuf::Duration>, + /// Soft limit on size of the cluster’s connections read and write buffers. If + /// unspecified, an implementation defined default is applied (1MiB). + #[prost(message, optional, tag="5")] + pub per_connection_buffer_limit_bytes: ::core::option::Option<super::super::super::google::protobuf::UInt32Value>, + /// The :ref:`load balancer type <arch_overview_load_balancing_types>` to use + /// when picking a host in the cluster. + #[prost(enumeration="cluster::LbPolicy", tag="6")] + pub lb_policy: i32, + /// If the service discovery type is + /// :ref:`STATIC<envoy_api_enum_value_Cluster.DiscoveryType.STATIC>`, + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` + /// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`, + /// then hosts is required. + /// + /// .. attention:: + /// + /// **This field is deprecated**. Set the + /// :ref:`load_assignment<envoy_api_field_Cluster.load_assignment>` field instead. + /// + #[deprecated] + #[prost(message, repeated, tag="7")] + pub hosts: ::prost::alloc::vec::Vec<core::Address>, + /// Setting this is required for specifying members of + /// :ref:`STATIC<envoy_api_enum_value_Cluster.DiscoveryType.STATIC>`, + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` + /// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` clusters. + /// This field supersedes the *hosts* field in the v2 API. + /// + /// .. attention:: + /// + /// Setting this allows non-EDS cluster types to contain embedded EDS equivalent + /// :ref:`endpoint assignments<envoy_api_msg_ClusterLoadAssignment>`. + /// + #[prost(message, optional, tag="33")] + pub load_assignment: ::core::option::Option<ClusterLoadAssignment>, + /// Optional :ref:`active health checking <arch_overview_health_checking>` + /// configuration for the cluster. If no + /// configuration is specified no health checking will be done and all cluster + /// members will be considered healthy at all times. + #[prost(message, repeated, tag="8")] + pub health_checks: ::prost::alloc::vec::Vec<core::HealthCheck>, + /// Optional maximum requests for a single upstream connection. This parameter + /// is respected by both the HTTP/1.1 and HTTP/2 connection pool + /// implementations. If not specified, there is no limit. Setting this + /// parameter to 1 will effectively disable keep alive. + #[prost(message, optional, tag="9")] + pub max_requests_per_connection: ::core::option::Option<super::super::super::google::protobuf::UInt32Value>, + /// Optional :ref:`circuit breaking <arch_overview_circuit_break>` for the cluster. + #[prost(message, optional, tag="10")] + pub circuit_breakers: ::core::option::Option<cluster::CircuitBreakers>, + /// The TLS configuration for connections to the upstream cluster. + /// + /// .. attention:: + /// + /// **This field is deprecated**. Use `transport_socket` with name `tls` instead. If both are + /// set, `transport_socket` takes priority. + #[deprecated] + #[prost(message, optional, tag="11")] + pub tls_context: ::core::option::Option<auth::UpstreamTlsContext>, + /// HTTP protocol options that are applied only to upstream HTTP connections. + /// These options apply to all HTTP versions. + #[prost(message, optional, tag="46")] + pub upstream_http_protocol_options: ::core::option::Option<core::UpstreamHttpProtocolOptions>, + /// Additional options when handling HTTP requests upstream. These options will be applicable to + /// both HTTP1 and HTTP2 requests. + #[prost(message, optional, tag="29")] + pub common_http_protocol_options: ::core::option::Option<core::HttpProtocolOptions>, + /// Additional options when handling HTTP1 requests. + #[prost(message, optional, tag="13")] + pub http_protocol_options: ::core::option::Option<core::Http1ProtocolOptions>, + /// Even if default HTTP2 protocol options are desired, this field must be + /// set so that Envoy will assume that the upstream supports HTTP/2 when + /// making new HTTP connection pool connections. Currently, Envoy only + /// supports prior knowledge for upstream connections. Even if TLS is used + /// with ALPN, `http2_protocol_options` must be specified. As an aside this allows HTTP/2 + /// connections to happen over plain text. + #[prost(message, optional, tag="14")] + pub http2_protocol_options: ::core::option::Option<core::Http2ProtocolOptions>, + /// The extension_protocol_options field is used to provide extension-specific protocol options + /// for upstream connections. The key should match the extension filter name, such as + /// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on + /// specific options. + #[prost(map="string, message", tag="35")] + pub extension_protocol_options: ::std::collections::HashMap<::prost::alloc::string::String, super::super::super::google::protobuf::Struct>, + /// The extension_protocol_options field is used to provide extension-specific protocol options + /// for upstream connections. The key should match the extension filter name, such as + /// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on + /// specific options. + #[prost(map="string, message", tag="36")] + pub typed_extension_protocol_options: ::std::collections::HashMap<::prost::alloc::string::String, super::super::super::google::protobuf::Any>, + /// If the DNS refresh rate is specified and the cluster type is either + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`, + /// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`, + /// this value is used as the cluster’s DNS refresh + /// rate. The value configured must be at least 1ms. If this setting is not specified, the + /// value defaults to 5000ms. For cluster types other than + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` + /// and :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` + /// this setting is ignored. + #[prost(message, optional, tag="16")] + pub dns_refresh_rate: ::core::option::Option<super::super::super::google::protobuf::Duration>, + /// If the DNS failure refresh rate is specified and the cluster type is either + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`, + /// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`, + /// this is used as the cluster’s DNS refresh rate when requests are failing. If this setting is + /// not specified, the failure refresh rate defaults to the DNS refresh rate. For cluster types + /// other than :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` and + /// :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` this setting is + /// ignored. + #[prost(message, optional, tag="44")] + pub dns_failure_refresh_rate: ::core::option::Option<cluster::RefreshRate>, + /// Optional configuration for setting cluster's DNS refresh rate. If the value is set to true, + /// cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS + /// resolution. + #[prost(bool, tag="39")] + pub respect_dns_ttl: bool, + /// The DNS IP address resolution policy. If this setting is not specified, the + /// value defaults to + /// :ref:`AUTO<envoy_api_enum_value_Cluster.DnsLookupFamily.AUTO>`. + #[prost(enumeration="cluster::DnsLookupFamily", tag="17")] + pub dns_lookup_family: i32, + /// If DNS resolvers are specified and the cluster type is either + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`, + /// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`, + /// this value is used to specify the cluster’s dns resolvers. + /// If this setting is not specified, the value defaults to the default + /// resolver, which uses /etc/resolv.conf for configuration. For cluster types + /// other than + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` + /// and :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` + /// this setting is ignored. + /// Setting this value causes failure if the + /// ``envoy.restart_features.use_apple_api_for_dns_lookups`` runtime value is true during + /// server startup. Apple's API only allows overriding DNS resolvers via system settings. + #[prost(message, repeated, tag="18")] + pub dns_resolvers: ::prost::alloc::vec::Vec<core::Address>, + /// \[#next-major-version: Reconcile DNS options in a single message.\] + /// Always use TCP queries instead of UDP queries for DNS lookups. + /// Setting this value causes failure if the + /// ``envoy.restart_features.use_apple_api_for_dns_lookups`` runtime value is true during + /// server startup. Apple' API only uses UDP for DNS resolution. + #[prost(bool, tag="45")] + pub use_tcp_for_dns_lookups: bool, + /// If specified, outlier detection will be enabled for this upstream cluster. + /// Each of the configuration values can be overridden via + /// :ref:`runtime values <config_cluster_manager_cluster_runtime_outlier_detection>`. + #[prost(message, optional, tag="19")] + pub outlier_detection: ::core::option::Option<cluster::OutlierDetection>, + /// The interval for removing stale hosts from a cluster type + /// :ref:`ORIGINAL_DST<envoy_api_enum_value_Cluster.DiscoveryType.ORIGINAL_DST>`. + /// Hosts are considered stale if they have not been used + /// as upstream destinations during this interval. New hosts are added + /// to original destination clusters on demand as new connections are + /// redirected to Envoy, causing the number of hosts in the cluster to + /// grow over time. Hosts that are not stale (they are actively used as + /// destinations) are kept in the cluster, which allows connections to + /// them remain open, saving the latency that would otherwise be spent + /// on opening new connections. If this setting is not specified, the + /// value defaults to 5000ms. For cluster types other than + /// :ref:`ORIGINAL_DST<envoy_api_enum_value_Cluster.DiscoveryType.ORIGINAL_DST>` + /// this setting is ignored. + #[prost(message, optional, tag="20")] + pub cleanup_interval: ::core::option::Option<super::super::super::google::protobuf::Duration>, + /// Optional configuration used to bind newly established upstream connections. + /// This overrides any bind_config specified in the bootstrap proto. + /// If the address and port are empty, no bind will be performed. + #[prost(message, optional, tag="21")] + pub upstream_bind_config: ::core::option::Option<core::BindConfig>, + /// Configuration for load balancing subsetting. + #[prost(message, optional, tag="22")] + pub lb_subset_config: ::core::option::Option<cluster::LbSubsetConfig>, + /// Common configuration for all load balancer implementations. + #[prost(message, optional, tag="27")] + pub common_lb_config: ::core::option::Option<cluster::CommonLbConfig>, + /// Optional custom transport socket implementation to use for upstream connections. + /// To setup TLS, set a transport socket with name `tls` and + /// :ref:`UpstreamTlsContexts <envoy_api_msg_auth.UpstreamTlsContext>` in the `typed_config`. + /// If no transport socket configuration is specified, new connections + /// will be set up with plaintext. + #[prost(message, optional, tag="24")] + pub transport_socket: ::core::option::Option<core::TransportSocket>, + /// The Metadata field can be used to provide additional information about the + /// cluster. It can be used for stats, logging, and varying filter behavior. + /// Fields should use reverse DNS notation to denote which entity within Envoy + /// will need the information. For instance, if the metadata is intended for + /// the Router filter, the filter name should be specified as *envoy.filters.http.router*. + #[prost(message, optional, tag="25")] + pub metadata: ::core::option::Option<core::Metadata>, + /// Determines how Envoy selects the protocol used to speak to upstream hosts. + #[prost(enumeration="cluster::ClusterProtocolSelection", tag="26")] + pub protocol_selection: i32, + /// Optional options for upstream connections. + #[prost(message, optional, tag="30")] + pub upstream_connection_options: ::core::option::Option<UpstreamConnectionOptions>, + /// If an upstream host becomes unhealthy (as determined by the configured health checks + /// or outlier detection), immediately close all connections to the failed host. + /// + /// .. note:: + /// + /// This is currently only supported for connections created by tcp_proxy. + /// + /// .. note:: + /// + /// The current implementation of this feature closes all connections immediately when + /// the unhealthy status is detected. If there are a large number of connections open + /// to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of + /// time exclusively closing these connections, and not processing any other traffic. + #[prost(bool, tag="31")] + pub close_connections_on_host_health_failure: bool, + /// If set to true, Envoy will ignore the health value of a host when processing its removal + /// from service discovery. This means that if active health checking is used, Envoy will *not* + /// wait for the endpoint to go unhealthy before removing it. + #[prost(bool, tag="32")] + pub drain_connections_on_host_removal: bool, + /// An (optional) network filter chain, listed in the order the filters should be applied. + /// The chain will be applied to all outgoing connections that Envoy makes to the upstream + /// servers of this cluster. + #[prost(message, repeated, tag="40")] + pub filters: ::prost::alloc::vec::Vec<cluster::Filter>, + /// \[#not-implemented-hide:\] New mechanism for LB policy configuration. Used only if the + /// :ref:`lb_policy<envoy_api_field_Cluster.lb_policy>` field has the value + /// :ref:`LOAD_BALANCING_POLICY_CONFIG<envoy_api_enum_value_Cluster.LbPolicy.LOAD_BALANCING_POLICY_CONFIG>`. + #[prost(message, optional, tag="41")] + pub load_balancing_policy: ::core::option::Option<LoadBalancingPolicy>, + /// \[#not-implemented-hide:\] + /// If present, tells the client where to send load reports via LRS. If not present, the + /// client will fall back to a client-side default, which may be either (a) don't send any + /// load reports or (b) send load reports for all clusters to a single default server + /// (which may be configured in the bootstrap file). + /// + /// Note that if multiple clusters point to the same LRS server, the client may choose to + /// create a separate stream for each cluster or it may choose to coalesce the data for + /// multiple clusters onto a single stream. Either way, the client must make sure to send + /// the data for any given cluster on no more than one stream. + /// + /// [#next-major-version: In the v3 API, we should consider restructuring this somehow, + /// maybe by allowing LRS to go on the ADS stream, or maybe by moving some of the negotiation + /// from the LRS stream here.] + #[prost(message, optional, tag="42")] + pub lrs_server: ::core::option::Option<core::ConfigSource>, + /// If track_timeout_budgets is true, the :ref:`timeout budget histograms + /// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each + /// request. These show what percentage of a request's per try and global timeout was used. A value + /// of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value + /// of 100 would indicate that the request took the entirety of the timeout given to it. + #[prost(bool, tag="47")] + pub track_timeout_budgets: bool, + #[prost(oneof="cluster::ClusterDiscoveryType", tags="2, 38")] + pub cluster_discovery_type: ::core::option::Option<cluster::ClusterDiscoveryType>, + /// Optional configuration for the load balancing algorithm selected by + /// LbPolicy. Currently only + /// :ref:`RING_HASH<envoy_api_enum_value_Cluster.LbPolicy.RING_HASH>` and + /// :ref:`LEAST_REQUEST<envoy_api_enum_value_Cluster.LbPolicy.LEAST_REQUEST>` + /// has additional configuration options. + /// Specifying ring_hash_lb_config or least_request_lb_config without setting the corresponding + /// LbPolicy will generate an error at runtime. + #[prost(oneof="cluster::LbConfig", tags="23, 34, 37")] + pub lb_config: ::core::option::Option<cluster::LbConfig>, +} +/// Nested message and enum types in `Cluster`. +pub mod cluster { + /// TransportSocketMatch specifies what transport socket config will be used + /// when the match conditions are satisfied. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct TransportSocketMatch { + /// The name of the match, used in stats generation. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Optional endpoint metadata match criteria. + /// The connection to the endpoint with metadata matching what is set in this field + /// will use the transport socket configuration specified here. + /// The endpoint's metadata entry in *envoy.transport_socket_match* is used to match + /// against the values specified in this field. + #[prost(message, optional, tag="2")] + pub r#match: ::core::option::Option<super::super::super::super::google::protobuf::Struct>, + /// The configuration of the transport socket. + #[prost(message, optional, tag="3")] + pub transport_socket: ::core::option::Option<super::core::TransportSocket>, + } + /// Extended cluster type. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct CustomClusterType { + /// The type of the cluster to instantiate. The name must match a supported cluster type. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Cluster specific configuration which depends on the cluster being instantiated. + /// See the supported cluster for further documentation. + #[prost(message, optional, tag="2")] + pub typed_config: ::core::option::Option<super::super::super::super::google::protobuf::Any>, + } + /// Only valid when discovery type is EDS. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct EdsClusterConfig { + /// Configuration for the source of EDS updates for this Cluster. + #[prost(message, optional, tag="1")] + pub eds_config: ::core::option::Option<super::core::ConfigSource>, + /// Optional alternative to cluster name to present to EDS. This does not + /// have the same restrictions as cluster name, i.e. it may be arbitrary + /// length. + #[prost(string, tag="2")] + pub service_name: ::prost::alloc::string::String, + } + /// Optionally divide the endpoints in this cluster into subsets defined by + /// endpoint metadata and selected by route and weighted cluster metadata. + /// \[#next-free-field: 8\] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct LbSubsetConfig { + /// The behavior used when no endpoint subset matches the selected route's + /// metadata. The value defaults to + /// :ref:`NO_FALLBACK<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`. + #[prost(enumeration="lb_subset_config::LbSubsetFallbackPolicy", tag="1")] + pub fallback_policy: i32, + /// Specifies the default subset of endpoints used during fallback if + /// fallback_policy is + /// :ref:`DEFAULT_SUBSET<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`. + /// Each field in default_subset is + /// compared to the matching LbEndpoint.Metadata under the *envoy.lb* + /// namespace. It is valid for no hosts to match, in which case the behavior + /// is the same as a fallback_policy of + /// :ref:`NO_FALLBACK<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`. + #[prost(message, optional, tag="2")] + pub default_subset: ::core::option::Option<super::super::super::super::google::protobuf::Struct>, + /// For each entry, LbEndpoint.Metadata's + /// *envoy.lb* namespace is traversed and a subset is created for each unique + /// combination of key and value. For example: + /// + /// .. code-block:: json + /// + /// { "subset_selectors": [ + /// { "keys": \[ "version" \] }, + /// { "keys": \[ "stage", "hardware_type" \] } + /// ]} + /// + /// A subset is matched when the metadata from the selected route and + /// weighted cluster contains the same keys and values as the subset's + /// metadata. The same host may appear in multiple subsets. + #[prost(message, repeated, tag="3")] + pub subset_selectors: ::prost::alloc::vec::Vec<lb_subset_config::LbSubsetSelector>, + /// If true, routing to subsets will take into account the localities and locality weights of the + /// endpoints when making the routing decision. + /// + /// There are some potential pitfalls associated with enabling this feature, as the resulting + /// traffic split after applying both a subset match and locality weights might be undesirable. + /// + /// Consider for example a situation in which you have 50/50 split across two localities X/Y + /// which have 100 hosts each without subsetting. If the subset LB results in X having only 1 + /// host selected but Y having 100, then a lot more load is being dumped on the single host in X + /// than originally anticipated in the load balancing assignment delivered via EDS. + #[prost(bool, tag="4")] + pub locality_weight_aware: bool, + /// When used with locality_weight_aware, scales the weight of each locality by the ratio + /// of hosts in the subset vs hosts in the original subset. This aims to even out the load + /// going to an individual locality if said locality is disproportionately affected by the + /// subset predicate. + #[prost(bool, tag="5")] + pub scale_locality_weight: bool, + /// If true, when a fallback policy is configured and its corresponding subset fails to find + /// a host this will cause any host to be selected instead. + /// + /// This is useful when using the default subset as the fallback policy, given the default + /// subset might become empty. With this option enabled, if that happens the LB will attempt + /// to select a host from the entire cluster. + #[prost(bool, tag="6")] + pub panic_mode_any: bool, + /// If true, metadata specified for a metadata key will be matched against the corresponding + /// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value + /// and any of the elements in the list matches the criteria. + #[prost(bool, tag="7")] + pub list_as_any: bool, + } + /// Nested message and enum types in `LbSubsetConfig`. + pub mod lb_subset_config { + /// Specifications for subsets. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct LbSubsetSelector { + /// List of keys to match with the weighted cluster metadata. + #[prost(string, repeated, tag="1")] + pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// The behavior used when no endpoint subset matches the selected route's + /// metadata. + #[prost(enumeration="lb_subset_selector::LbSubsetSelectorFallbackPolicy", tag="2")] + pub fallback_policy: i32, + /// Subset of + /// :ref:`keys<envoy_api_field_Cluster.LbSubsetConfig.LbSubsetSelector.keys>` used by + /// :ref:`KEYS_SUBSET<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.KEYS_SUBSET>` + /// fallback policy. + /// It has to be a non empty list if KEYS_SUBSET fallback policy is selected. + /// For any other fallback policy the parameter is not used and should not be set. + /// Only values also present in + /// :ref:`keys<envoy_api_field_Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but + /// `fallback_keys_subset` cannot be equal to `keys`. + #[prost(string, repeated, tag="3")] + pub fallback_keys_subset: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + } + /// Nested message and enum types in `LbSubsetSelector`. + pub mod lb_subset_selector { + /// Allows to override top level fallback policy per selector. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum LbSubsetSelectorFallbackPolicy { + /// If NOT_DEFINED top level config fallback policy is used instead. + NotDefined = 0, + /// If NO_FALLBACK is selected, a result equivalent to no healthy hosts is reported. + NoFallback = 1, + /// If ANY_ENDPOINT is selected, any cluster endpoint may be returned + /// (subject to policy, health checks, etc). + AnyEndpoint = 2, + /// If DEFAULT_SUBSET is selected, load balancing is performed over the + /// endpoints matching the values from the default_subset field. + DefaultSubset = 3, + /// If KEYS_SUBSET is selected, subset selector matching is performed again with metadata + /// keys reduced to + /// :ref:`fallback_keys_subset<envoy_api_field_Cluster.LbSubsetConfig.LbSubsetSelector.fallback_keys_subset>`. + /// It allows for a fallback to a different, less specific selector if some of the keys of + /// the selector are considered optional. + KeysSubset = 4, + } + impl LbSubsetSelectorFallbackPolicy { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + LbSubsetSelectorFallbackPolicy::NotDefined => "NOT_DEFINED", + LbSubsetSelectorFallbackPolicy::NoFallback => "NO_FALLBACK", + LbSubsetSelectorFallbackPolicy::AnyEndpoint => "ANY_ENDPOINT", + LbSubsetSelectorFallbackPolicy::DefaultSubset => "DEFAULT_SUBSET", + LbSubsetSelectorFallbackPolicy::KeysSubset => "KEYS_SUBSET", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "NOT_DEFINED" => Some(Self::NotDefined), + "NO_FALLBACK" => Some(Self::NoFallback), + "ANY_ENDPOINT" => Some(Self::AnyEndpoint), + "DEFAULT_SUBSET" => Some(Self::DefaultSubset), + "KEYS_SUBSET" => Some(Self::KeysSubset), + _ => None, + } + } + } + } + /// If NO_FALLBACK is selected, a result + /// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected, + /// any cluster endpoint may be returned (subject to policy, health checks, + /// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the + /// endpoints matching the values from the default_subset field. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum LbSubsetFallbackPolicy { + NoFallback = 0, + AnyEndpoint = 1, + DefaultSubset = 2, + } + impl LbSubsetFallbackPolicy { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + LbSubsetFallbackPolicy::NoFallback => "NO_FALLBACK", + LbSubsetFallbackPolicy::AnyEndpoint => "ANY_ENDPOINT", + LbSubsetFallbackPolicy::DefaultSubset => "DEFAULT_SUBSET", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "NO_FALLBACK" => Some(Self::NoFallback), + "ANY_ENDPOINT" => Some(Self::AnyEndpoint), + "DEFAULT_SUBSET" => Some(Self::DefaultSubset), + _ => None, + } + } + } + } + /// Specific configuration for the LeastRequest load balancing policy. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct LeastRequestLbConfig { + /// The number of random healthy hosts from which the host with the fewest active requests will + /// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set. + #[prost(message, optional, tag="1")] + pub choice_count: ::core::option::Option<super::super::super::super::google::protobuf::UInt32Value>, + } + /// Specific configuration for the :ref:`RingHash<arch_overview_load_balancing_types_ring_hash>` + /// load balancing policy. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct RingHashLbConfig { + /// Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each + /// provided host) the better the request distribution will reflect the desired weights. Defaults + /// to 1024 entries, and limited to 8M entries. See also + /// :ref:`maximum_ring_size<envoy_api_field_Cluster.RingHashLbConfig.maximum_ring_size>`. + #[prost(message, optional, tag="1")] + pub minimum_ring_size: ::core::option::Option<super::super::super::super::google::protobuf::UInt64Value>, + /// The hash function used to hash hosts onto the ketama ring. The value defaults to + /// :ref:`XX_HASH<envoy_api_enum_value_Cluster.RingHashLbConfig.HashFunction.XX_HASH>`. + #[prost(enumeration="ring_hash_lb_config::HashFunction", tag="3")] + pub hash_function: i32, + /// Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered + /// to further constrain resource use. See also + /// :ref:`minimum_ring_size<envoy_api_field_Cluster.RingHashLbConfig.minimum_ring_size>`. + #[prost(message, optional, tag="4")] + pub maximum_ring_size: ::core::option::Option<super::super::super::super::google::protobuf::UInt64Value>, + } + /// Nested message and enum types in `RingHashLbConfig`. + pub mod ring_hash_lb_config { + /// The hash function used to hash hosts onto the ketama ring. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum HashFunction { + /// Use `xxHash <<https://github.com/Cyan4973/xxHash>`_,> this is the default hash function. + XxHash = 0, + /// Use `MurmurHash2 <<https://sites.google.com/site/murmurhash/>`_,> this is compatible with + /// std:hash<string> in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled + /// on Linux and not macOS. + MurmurHash2 = 1, + } + impl HashFunction { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + HashFunction::XxHash => "XX_HASH", + HashFunction::MurmurHash2 => "MURMUR_HASH_2", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "XX_HASH" => Some(Self::XxHash), + "MURMUR_HASH_2" => Some(Self::MurmurHash2), + _ => None, + } + } + } + } + /// Specific configuration for the + /// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>` + /// load balancing policy. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct OriginalDstLbConfig { + /// When true, :ref:`x-envoy-original-dst-host + /// <config_http_conn_man_headers_x-envoy-original-dst-host>` can be used to override destination + /// address. + /// + /// .. attention:: + /// + /// This header isn't sanitized by default, so enabling this feature allows HTTP clients to + /// route traffic to arbitrary hosts and/or ports, which may have serious security + /// consequences. + /// + /// .. note:: + /// + /// If the header appears multiple times only the first value is used. + #[prost(bool, tag="1")] + pub use_http_header: bool, + } + /// Common configuration for all load balancer implementations. + /// \[#next-free-field: 8\] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct CommonLbConfig { + /// Configures the :ref:`healthy panic threshold <arch_overview_load_balancing_panic_threshold>`. + /// If not specified, the default is 50%. + /// To disable panic mode, set to 0%. + /// + /// .. note:: + /// The specified percent will be truncated to the nearest 1%. + #[prost(message, optional, tag="1")] + pub healthy_panic_threshold: ::core::option::Option<super::super::super::r#type::Percent>, + /// If set, all health check/weight/metadata updates that happen within this duration will be + /// merged and delivered in one shot when the duration expires. The start of the duration is when + /// the first update happens. This is useful for big clusters, with potentially noisy deploys + /// that might trigger excessive CPU usage due to a constant stream of healthcheck state changes + /// or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new + /// cluster). Please always keep in mind that the use of sandbox technologies may change this + /// behavior. + /// + /// If this is not set, we default to a merge window of 1000ms. To disable it, set the merge + /// window to 0. + /// + /// Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is + /// because merging those updates isn't currently safe. See + /// <https://github.com/envoyproxy/envoy/pull/3941.> + #[prost(message, optional, tag="4")] + pub update_merge_window: ::core::option::Option<super::super::super::super::google::protobuf::Duration>, + /// If set to true, Envoy will not consider new hosts when computing load balancing weights until + /// they have been health checked for the first time. This will have no effect unless + /// active health checking is also configured. + /// + /// Ignoring a host means that for any load balancing calculations that adjust weights based + /// on the ratio of eligible hosts and total hosts (priority spillover, locality weighting and + /// panic mode) Envoy will exclude these hosts in the denominator. + /// + /// For example, with hosts in two priorities P0 and P1, where P0 looks like + /// {healthy, unhealthy (new), unhealthy (new)} + /// and where P1 looks like + /// {healthy, healthy} + /// all traffic will still hit P0, as 1 / (3 - 2) = 1. + /// + /// Enabling this will allow scaling up the number of hosts for a given cluster without entering + /// panic mode or triggering priority spillover, assuming the hosts pass the first health check. + /// + /// If panic mode is triggered, new hosts are still eligible for traffic; they simply do not + /// contribute to the calculation when deciding whether panic mode is enabled or not. + #[prost(bool, tag="5")] + pub ignore_new_hosts_until_first_hc: bool, + /// If set to `true`, the cluster manager will drain all existing + /// connections to upstream hosts whenever hosts are added or removed from the cluster. + #[prost(bool, tag="6")] + pub close_connections_on_host_set_change: bool, + /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.) + #[prost(message, optional, tag="7")] + pub consistent_hashing_lb_config: ::core::option::Option<common_lb_config::ConsistentHashingLbConfig>, + #[prost(oneof="common_lb_config::LocalityConfigSpecifier", tags="2, 3")] + pub locality_config_specifier: ::core::option::Option<common_lb_config::LocalityConfigSpecifier>, + } + /// Nested message and enum types in `CommonLbConfig`. + pub mod common_lb_config { + /// Configuration for :ref:`zone aware routing + /// <arch_overview_load_balancing_zone_aware_routing>`. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct ZoneAwareLbConfig { + /// Configures percentage of requests that will be considered for zone aware routing + /// if zone aware routing is configured. If not specified, the default is 100%. + /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`. + /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`. + #[prost(message, optional, tag="1")] + pub routing_enabled: ::core::option::Option<super::super::super::super::r#type::Percent>, + /// Configures minimum upstream cluster size required for zone aware routing + /// If upstream cluster size is less than specified, zone aware routing is not performed + /// even if zone aware routing is configured. If not specified, the default is 6. + /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`. + /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`. + #[prost(message, optional, tag="2")] + pub min_cluster_size: ::core::option::Option<super::super::super::super::super::google::protobuf::UInt64Value>, + /// If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic + /// mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all + /// requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a + /// failing service. + #[prost(bool, tag="3")] + pub fail_traffic_on_panic: bool, + } + /// Configuration for :ref:`locality weighted load balancing + /// <arch_overview_load_balancing_locality_weighted_lb>` + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct LocalityWeightedLbConfig { + } + /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.) + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct ConsistentHashingLbConfig { + /// If set to `true`, the cluster will use hostname instead of the resolved + /// address as the key to consistently hash to an upstream host. Only valid for StrictDNS clusters with hostnames which resolve to a single IP address. + #[prost(bool, tag="1")] + pub use_hostname_for_hashing: bool, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Oneof)] + pub enum LocalityConfigSpecifier { + #[prost(message, tag="2")] + ZoneAwareLbConfig(ZoneAwareLbConfig), + #[prost(message, tag="3")] + LocalityWeightedLbConfig(LocalityWeightedLbConfig), + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct RefreshRate { + /// Specifies the base interval between refreshes. This parameter is required and must be greater + /// than zero and less than + /// :ref:`max_interval <envoy_api_field_Cluster.RefreshRate.max_interval>`. + #[prost(message, optional, tag="1")] + pub base_interval: ::core::option::Option<super::super::super::super::google::protobuf::Duration>, + /// Specifies the maximum interval between refreshes. This parameter is optional, but must be + /// greater than or equal to the + /// :ref:`base_interval <envoy_api_field_Cluster.RefreshRate.base_interval>` if set. The default + /// is 10 times the :ref:`base_interval <envoy_api_field_Cluster.RefreshRate.base_interval>`. + #[prost(message, optional, tag="2")] + pub max_interval: ::core::option::Option<super::super::super::super::google::protobuf::Duration>, + } + /// Refer to :ref:`service discovery type <arch_overview_service_discovery_types>` + /// for an explanation on each type. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum DiscoveryType { + /// Refer to the :ref:`static discovery type<arch_overview_service_discovery_types_static>` + /// for an explanation. + Static = 0, + /// Refer to the :ref:`strict DNS discovery + /// type<arch_overview_service_discovery_types_strict_dns>` + /// for an explanation. + StrictDns = 1, + /// Refer to the :ref:`logical DNS discovery + /// type<arch_overview_service_discovery_types_logical_dns>` + /// for an explanation. + LogicalDns = 2, + /// Refer to the :ref:`service discovery type<arch_overview_service_discovery_types_eds>` + /// for an explanation. + Eds = 3, + /// Refer to the :ref:`original destination discovery + /// type<arch_overview_service_discovery_types_original_destination>` + /// for an explanation. + OriginalDst = 4, + } + impl DiscoveryType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + DiscoveryType::Static => "STATIC", + DiscoveryType::StrictDns => "STRICT_DNS", + DiscoveryType::LogicalDns => "LOGICAL_DNS", + DiscoveryType::Eds => "EDS", + DiscoveryType::OriginalDst => "ORIGINAL_DST", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "STATIC" => Some(Self::Static), + "STRICT_DNS" => Some(Self::StrictDns), + "LOGICAL_DNS" => Some(Self::LogicalDns), + "EDS" => Some(Self::Eds), + "ORIGINAL_DST" => Some(Self::OriginalDst), + _ => None, + } + } + } + /// Refer to :ref:`load balancer type <arch_overview_load_balancing_types>` architecture + /// overview section for information on each type. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum LbPolicy { + /// Refer to the :ref:`round robin load balancing + /// policy<arch_overview_load_balancing_types_round_robin>` + /// for an explanation. + RoundRobin = 0, + /// Refer to the :ref:`least request load balancing + /// policy<arch_overview_load_balancing_types_least_request>` + /// for an explanation. + LeastRequest = 1, + /// Refer to the :ref:`ring hash load balancing + /// policy<arch_overview_load_balancing_types_ring_hash>` + /// for an explanation. + RingHash = 2, + /// Refer to the :ref:`random load balancing + /// policy<arch_overview_load_balancing_types_random>` + /// for an explanation. + Random = 3, + /// Refer to the :ref:`original destination load balancing + /// policy<arch_overview_load_balancing_types_original_destination>` + /// for an explanation. + /// + /// .. attention:: + /// + /// **This load balancing policy is deprecated**. Use CLUSTER_PROVIDED instead. + /// + OriginalDstLb = 4, + /// Refer to the :ref:`Maglev load balancing policy<arch_overview_load_balancing_types_maglev>` + /// for an explanation. + Maglev = 5, + /// This load balancer type must be specified if the configured cluster provides a cluster + /// specific load balancer. Consult the configured cluster's documentation for whether to set + /// this option or not. + ClusterProvided = 6, + /// \[#not-implemented-hide:\] Use the new :ref:`load_balancing_policy + /// <envoy_api_field_Cluster.load_balancing_policy>` field to determine the LB policy. + /// [#next-major-version: In the v3 API, we should consider deprecating the lb_policy field + /// and instead using the new load_balancing_policy field as the one and only mechanism for + /// configuring this.] + LoadBalancingPolicyConfig = 7, + } + impl LbPolicy { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + LbPolicy::RoundRobin => "ROUND_ROBIN", + LbPolicy::LeastRequest => "LEAST_REQUEST", + LbPolicy::RingHash => "RING_HASH", + LbPolicy::Random => "RANDOM", + LbPolicy::OriginalDstLb => "ORIGINAL_DST_LB", + LbPolicy::Maglev => "MAGLEV", + LbPolicy::ClusterProvided => "CLUSTER_PROVIDED", + LbPolicy::LoadBalancingPolicyConfig => "LOAD_BALANCING_POLICY_CONFIG", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "ROUND_ROBIN" => Some(Self::RoundRobin), + "LEAST_REQUEST" => Some(Self::LeastRequest), + "RING_HASH" => Some(Self::RingHash), + "RANDOM" => Some(Self::Random), + "ORIGINAL_DST_LB" => Some(Self::OriginalDstLb), + "MAGLEV" => Some(Self::Maglev), + "CLUSTER_PROVIDED" => Some(Self::ClusterProvided), + "LOAD_BALANCING_POLICY_CONFIG" => Some(Self::LoadBalancingPolicyConfig), + _ => None, + } + } + } + /// When V4_ONLY is selected, the DNS resolver will only perform a lookup for + /// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will + /// only perform a lookup for addresses in the IPv6 family. If AUTO is + /// specified, the DNS resolver will first perform a lookup for addresses in + /// the IPv6 family and fallback to a lookup for addresses in the IPv4 family. + /// For cluster types other than + /// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` and + /// :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`, + /// this setting is + /// ignored. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum DnsLookupFamily { + Auto = 0, + V4Only = 1, + V6Only = 2, + } + impl DnsLookupFamily { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + DnsLookupFamily::Auto => "AUTO", + DnsLookupFamily::V4Only => "V4_ONLY", + DnsLookupFamily::V6Only => "V6_ONLY", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "AUTO" => Some(Self::Auto), + "V4_ONLY" => Some(Self::V4Only), + "V6_ONLY" => Some(Self::V6Only), + _ => None, + } + } + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ClusterProtocolSelection { + /// Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2). + /// If :ref:`http2_protocol_options <envoy_api_field_Cluster.http2_protocol_options>` are + /// present, HTTP2 will be used, otherwise HTTP1.1 will be used. + UseConfiguredProtocol = 0, + /// Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection. + UseDownstreamProtocol = 1, + } + impl ClusterProtocolSelection { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ClusterProtocolSelection::UseConfiguredProtocol => "USE_CONFIGURED_PROTOCOL", + ClusterProtocolSelection::UseDownstreamProtocol => "USE_DOWNSTREAM_PROTOCOL", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "USE_CONFIGURED_PROTOCOL" => Some(Self::UseConfiguredProtocol), + "USE_DOWNSTREAM_PROTOCOL" => Some(Self::UseDownstreamProtocol), + _ => None, + } + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum ClusterDiscoveryType { + /// The :ref:`service discovery type <arch_overview_service_discovery_types>` + /// to use for resolving the cluster. + #[prost(enumeration="DiscoveryType", tag="2")] + Type(i32), + /// The custom cluster type. + #[prost(message, tag="38")] + ClusterType(CustomClusterType), + } + /// Optional configuration for the load balancing algorithm selected by + /// LbPolicy. Currently only + /// :ref:`RING_HASH<envoy_api_enum_value_Cluster.LbPolicy.RING_HASH>` and + /// :ref:`LEAST_REQUEST<envoy_api_enum_value_Cluster.LbPolicy.LEAST_REQUEST>` + /// has additional configuration options. + /// Specifying ring_hash_lb_config or least_request_lb_config without setting the corresponding + /// LbPolicy will generate an error at runtime. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Oneof)] + pub enum LbConfig { + /// Optional configuration for the Ring Hash load balancing policy. + #[prost(message, tag="23")] + RingHashLbConfig(RingHashLbConfig), + /// Optional configuration for the Original Destination load balancing policy. + #[prost(message, tag="34")] + OriginalDstLbConfig(OriginalDstLbConfig), + /// Optional configuration for the LeastRequest load balancing policy. + #[prost(message, tag="37")] + LeastRequestLbConfig(LeastRequestLbConfig), + } +} +/// \[#not-implemented-hide:\] Extensible load balancing policy configuration. +/// +/// Every LB policy defined via this mechanism will be identified via a unique name using reverse +/// DNS notation. If the policy needs configuration parameters, it must define a message for its +/// own configuration, which will be stored in the config field. The name of the policy will tell +/// clients which type of message they should expect to see in the config field. +/// +/// Note that there are cases where it is useful to be able to independently select LB policies +/// for choosing a locality and for choosing an endpoint within that locality. For example, a +/// given deployment may always use the same policy to choose the locality, but for choosing the +/// endpoint within the locality, some clusters may use weighted-round-robin, while others may +/// use some sort of session-based balancing. +/// +/// This can be accomplished via hierarchical LB policies, where the parent LB policy creates a +/// child LB policy for each locality. For each request, the parent chooses the locality and then +/// delegates to the child policy for that locality to choose the endpoint within the locality. +/// +/// To facilitate this, the config message for the top-level LB policy may include a field of +/// type LoadBalancingPolicy that specifies the child policy. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LoadBalancingPolicy { + /// Each client will iterate over the list in order and stop at the first policy that it + /// supports. This provides a mechanism for starting to use new LB policies that are not yet + /// supported by all clients. + #[prost(message, repeated, tag="1")] + pub policies: ::prost::alloc::vec::Vec<load_balancing_policy::Policy>, +} +/// Nested message and enum types in `LoadBalancingPolicy`. +pub mod load_balancing_policy { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Policy { + /// Required. The name of the LB policy. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Optional config for the LB policy. + /// No more than one of these two fields may be populated. + #[deprecated] + #[prost(message, optional, tag="2")] + pub config: ::core::option::Option<super::super::super::super::google::protobuf::Struct>, + #[prost(message, optional, tag="3")] + pub typed_config: ::core::option::Option<super::super::super::super::google::protobuf::Any>, + } +} +/// An extensible structure containing the address Envoy should bind to when +/// establishing upstream connections. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpstreamBindConfig { + /// The address Envoy should bind to when establishing upstream connections. + #[prost(message, optional, tag="1")] + pub source_address: ::core::option::Option<core::Address>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct UpstreamConnectionOptions { + /// If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. + #[prost(message, optional, tag="1")] + pub tcp_keepalive: ::core::option::Option<core::TcpKeepalive>, +} +// \[#protodoc-title: Listener configuration\] +// Listener :ref:`configuration overview <config_listeners>` + +/// \[#next-free-field: 23\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Listener { + /// The unique name by which this listener is known. If no name is provided, + /// Envoy will allocate an internal UUID for the listener. If the listener is to be dynamically + /// updated or removed via :ref:`LDS <config_listeners_lds>` a unique name must be provided. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// The address that the listener should listen on. In general, the address must be unique, though + /// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on + /// Linux as the actual port will be allocated by the OS. + #[prost(message, optional, tag="2")] + pub address: ::core::option::Option<core::Address>, + /// A list of filter chains to consider for this listener. The + /// :ref:`FilterChain <envoy_api_msg_listener.FilterChain>` with the most specific + /// :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` criteria is used on a + /// connection. + /// + /// Example using SNI for filter chain selection can be found in the + /// :ref:`FAQ entry <faq_how_to_setup_sni>`. + #[prost(message, repeated, tag="3")] + pub filter_chains: ::prost::alloc::vec::Vec<listener::FilterChain>, + /// If a connection is redirected using *iptables*, the port on which the proxy + /// receives it might be different from the original destination address. When this flag is set to + /// true, the listener hands off redirected connections to the listener associated with the + /// original destination address. If there is no listener associated with the original destination + /// address, the connection is handled by the listener that receives it. Defaults to false. + /// + /// .. attention:: + /// + /// This field is deprecated. Use :ref:`an original_dst <config_listener_filters_original_dst>` + /// :ref:`listener filter <envoy_api_field_Listener.listener_filters>` instead. + /// + /// Note that hand off to another listener is *NOT* performed without this flag. Once + /// :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` is implemented this flag + /// will be removed, as filter chain matching can be used to select a filter chain based on the + /// restored destination address. + #[deprecated] + #[prost(message, optional, tag="4")] + pub use_original_dst: ::core::option::Option<super::super::super::google::protobuf::BoolValue>, + /// Soft limit on size of the listener’s new connection read and write buffers. + /// If unspecified, an implementation defined default is applied (1MiB). + #[prost(message, optional, tag="5")] + pub per_connection_buffer_limit_bytes: ::core::option::Option<super::super::super::google::protobuf::UInt32Value>, + /// Listener metadata. + #[prost(message, optional, tag="6")] + pub metadata: ::core::option::Option<core::Metadata>, + /// \[#not-implemented-hide:\] + #[prost(message, optional, tag="7")] + pub deprecated_v1: ::core::option::Option<listener::DeprecatedV1>, + /// The type of draining to perform at a listener-wide level. + #[prost(enumeration="listener::DrainType", tag="8")] + pub drain_type: i32, + /// Listener filters have the opportunity to manipulate and augment the connection metadata that + /// is used in connection filter chain matching, for example. These filters are run before any in + /// :ref:`filter_chains <envoy_api_field_Listener.filter_chains>`. Order matters as the + /// filters are processed sequentially right after a socket has been accepted by the listener, and + /// before a connection is created. + /// UDP Listener filters can be specified when the protocol in the listener socket address in + /// :ref:`protocol <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP + /// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`. + /// UDP listeners currently support a single filter. + #[prost(message, repeated, tag="9")] + pub listener_filters: ::prost::alloc::vec::Vec<listener::ListenerFilter>, + /// The timeout to wait for all listener filters to complete operation. If the timeout is reached, + /// the accepted socket is closed without a connection being created unless + /// `continue_on_listener_filters_timeout` is set to true. Specify 0 to disable the + /// timeout. If not specified, a default timeout of 15s is used. + #[prost(message, optional, tag="15")] + pub listener_filters_timeout: ::core::option::Option<super::super::super::google::protobuf::Duration>, + /// Whether a connection should be created when listener filters timeout. Default is false. + /// + /// .. attention:: + /// + /// Some listener filters, such as :ref:`Proxy Protocol filter + /// <config_listener_filters_proxy_protocol>`, should not be used with this option. It will cause + /// unexpected behavior when a connection is created. + #[prost(bool, tag="17")] + pub continue_on_listener_filters_timeout: bool, + /// Whether the listener should be set as a transparent socket. + /// When this flag is set to true, connections can be redirected to the listener using an + /// *iptables* *TPROXY* target, in which case the original source and destination addresses and + /// ports are preserved on accepted connections. This flag should be used in combination with + /// :ref:`an original_dst <config_listener_filters_original_dst>` :ref:`listener filter + /// <envoy_api_field_Listener.listener_filters>` to mark the connections' local addresses as + /// "restored." This can be used to hand off each redirected connection to another listener + /// associated with the connection's destination address. Direct connections to the socket without + /// using *TPROXY* cannot be distinguished from connections redirected using *TPROXY* and are + /// therefore treated as if they were redirected. + /// When this flag is set to false, the listener's socket is explicitly reset as non-transparent. + /// Setting this flag requires Envoy to run with the *CAP_NET_ADMIN* capability. + /// When this flag is not set (default), the socket is not modified, i.e. the transparent option + /// is neither set nor reset. + #[prost(message, optional, tag="10")] + pub transparent: ::core::option::Option<super::super::super::google::protobuf::BoolValue>, + /// Whether the listener should set the *IP_FREEBIND* socket option. When this + /// flag is set to true, listeners can be bound to an IP address that is not + /// configured on the system running Envoy. When this flag is set to false, the + /// option *IP_FREEBIND* is disabled on the socket. When this flag is not set + /// (default), the socket is not modified, i.e. the option is neither enabled + /// nor disabled. + #[prost(message, optional, tag="11")] + pub freebind: ::core::option::Option<super::super::super::google::protobuf::BoolValue>, + /// Additional socket options that may not be present in Envoy source code or + /// precompiled binaries. + #[prost(message, repeated, tag="13")] + pub socket_options: ::prost::alloc::vec::Vec<core::SocketOption>, + /// Whether the listener should accept TCP Fast Open (TFO) connections. + /// When this flag is set to a value greater than 0, the option TCP_FASTOPEN is enabled on + /// the socket, with a queue length of the specified size + /// (see `details in RFC7413 <<https://tools.ietf.org/html/rfc7413#section-5.1>`_>). + /// When this flag is set to 0, the option TCP_FASTOPEN is disabled on the socket. + /// When this flag is not set (default), the socket is not modified, + /// i.e. the option is neither enabled nor disabled. + /// + /// On Linux, the net.ipv4.tcp_fastopen kernel parameter must include flag 0x2 to enable + /// TCP_FASTOPEN. + /// See `ip-sysctl.txt <<https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt>`_.> + /// + /// On macOS, only values of 0, 1, and unset are valid; other values may result in an error. + /// To set the queue length on macOS, set the net.inet.tcp.fastopen_backlog kernel parameter. + #[prost(message, optional, tag="12")] + pub tcp_fast_open_queue_length: ::core::option::Option<super::super::super::google::protobuf::UInt32Value>, + /// Specifies the intended direction of the traffic relative to the local Envoy. + /// This property is required on Windows for listeners using the original destination filter, + /// see :ref:`Original Destination <config_listener_filters_original_dst>`. + #[prost(enumeration="core::TrafficDirection", tag="16")] + pub traffic_direction: i32, + /// If the protocol in the listener socket address in :ref:`protocol + /// <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP + /// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`, this field specifies the actual udp + /// listener to create, i.e. :ref:`udp_listener_name + /// <envoy_api_field_listener.UdpListenerConfig.udp_listener_name>` = "raw_udp_listener" for + /// creating a packet-oriented UDP listener. If not present, treat it as "raw_udp_listener". + #[prost(message, optional, tag="18")] + pub udp_listener_config: ::core::option::Option<listener::UdpListenerConfig>, + /// Used to represent an API listener, which is used in non-proxy clients. The type of API + /// exposed to the non-proxy application depends on the type of API listener. + /// When this field is set, no other field except for :ref:`name<envoy_api_field_Listener.name>` + /// should be set. + /// + /// .. note:: + /// + /// Currently only one ApiListener can be installed; and it can only be done via bootstrap config, + /// not LDS. + /// + /// [#next-major-version: In the v3 API, instead of this messy approach where the socket + /// listener fields are directly in the top-level Listener message and the API listener types + /// are in the ApiListener message, the socket listener messages should be in their own message, + /// and the top-level Listener should essentially be a oneof that selects between the + /// socket listener and the various types of API listener. That way, a given Listener message + /// can structurally only contain the fields of the relevant type.] + #[prost(message, optional, tag="19")] + pub api_listener: ::core::option::Option<super::super::config::listener::v2::ApiListener>, + /// The listener's connection balancer configuration, currently only applicable to TCP listeners. + /// If no configuration is specified, Envoy will not attempt to balance active connections between + /// worker threads. + #[prost(message, optional, tag="20")] + pub connection_balance_config: ::core::option::Option<listener::ConnectionBalanceConfig>, + /// When this flag is set to true, listeners set the *SO_REUSEPORT* socket option and + /// create one socket for each worker thread. This makes inbound connections + /// distribute among worker threads roughly evenly in cases where there are a high number + /// of connections. When this flag is set to false, all worker threads share one socket. + /// + /// Before Linux v4.19-rc1, new TCP connections may be rejected during hot restart + /// (see `3rd paragraph in 'soreuseport' commit message + /// <<https://github.com/torvalds/linux/commit/c617f398edd4db2b8567a28e89>`_>). + /// This issue was fixed by `tcp: Avoid TCP syncookie rejected by SO_REUSEPORT socket + /// <<https://github.com/torvalds/linux/commit/40a1227ea845a37ab197dd1caffb60b047fa36b1>`_.> + #[prost(bool, tag="21")] + pub reuse_port: bool, + /// Configuration for :ref:`access logs <arch_overview_access_logs>` + /// emitted by this listener. + #[prost(message, repeated, tag="22")] + pub access_log: ::prost::alloc::vec::Vec<super::super::config::filter::accesslog::v2::AccessLog>, +} +/// Nested message and enum types in `Listener`. +pub mod listener { + /// \[#not-implemented-hide:\] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct DeprecatedV1 { + /// Whether the listener should bind to the port. A listener that doesn't + /// bind can only receive connections redirected from other listeners that + /// set use_original_dst parameter to true. Default is true. + /// + /// This is deprecated in v2, all Listeners will bind to their port. An + /// additional filter chain must be created for every original destination + /// port this listener may redirect to in v2, with the original port + /// specified in the FilterChainMatch destination_port field. + /// + /// \[#comment:TODO(PiotrSikora): Remove this once verified that we no longer need it.\] + #[prost(message, optional, tag="1")] + pub bind_to_port: ::core::option::Option<super::super::super::super::google::protobuf::BoolValue>, + } + /// Configuration for listener connection balancing. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct ConnectionBalanceConfig { + #[prost(oneof="connection_balance_config::BalanceType", tags="1")] + pub balance_type: ::core::option::Option<connection_balance_config::BalanceType>, + } + /// Nested message and enum types in `ConnectionBalanceConfig`. + pub mod connection_balance_config { + /// A connection balancer implementation that does exact balancing. This means that a lock is + /// held during balancing so that connection counts are nearly exactly balanced between worker + /// threads. This is "nearly" exact in the sense that a connection might close in parallel thus + /// making the counts incorrect, but this should be rectified on the next accept. This balancer + /// sacrifices accept throughput for accuracy and should be used when there are a small number of + /// connections that rarely cycle (e.g., service mesh gRPC egress). + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct ExactBalance { + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Oneof)] + pub enum BalanceType { + /// If specified, the listener will use the exact connection balancer. + #[prost(message, tag="1")] + ExactBalance(ExactBalance), + } + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum DrainType { + /// Drain in response to calling /healthcheck/fail admin endpoint (along with the health check + /// filter), listener removal/modification, and hot restart. + Default = 0, + /// Drain in response to listener removal/modification and hot restart. This setting does not + /// include /healthcheck/fail. This setting may be desirable if Envoy is hosting both ingress + /// and egress listeners. + ModifyOnly = 1, + } + impl DrainType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + DrainType::Default => "DEFAULT", + DrainType::ModifyOnly => "MODIFY_ONLY", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "DEFAULT" => Some(Self::Default), + "MODIFY_ONLY" => Some(Self::ModifyOnly), + _ => None, + } + } + } +} +// \[#protodoc-title: Common discovery API components\] + +/// A DiscoveryRequest requests a set of versioned resources of the same type for +/// a given Envoy node on some API. +/// \[#next-free-field: 7\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DiscoveryRequest { + /// The version_info provided in the request messages will be the version_info + /// received with the most recent successfully processed response or empty on + /// the first request. It is expected that no new request is sent after a + /// response is received until the Envoy instance is ready to ACK/NACK the new + /// configuration. ACK/NACK takes place by returning the new API config version + /// as applied or the previous API config version respectively. Each type_url + /// (see below) has an independent version associated with it. + #[prost(string, tag="1")] + pub version_info: ::prost::alloc::string::String, + /// The node making the request. + #[prost(message, optional, tag="2")] + pub node: ::core::option::Option<core::Node>, + /// List of resources to subscribe to, e.g. list of cluster names or a route + /// configuration name. If this is empty, all resources for the API are + /// returned. LDS/CDS may have empty resource_names, which will cause all + /// resources for the Envoy instance to be returned. The LDS and CDS responses + /// will then imply a number of resources that need to be fetched via EDS/RDS, + /// which will be explicitly enumerated in resource_names. + #[prost(string, repeated, tag="3")] + pub resource_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Type of the resource that is being requested, e.g. + /// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit + /// in requests made via singleton xDS APIs such as CDS, LDS, etc. but is + /// required for ADS. + #[prost(string, tag="4")] + pub type_url: ::prost::alloc::string::String, + /// nonce corresponding to DiscoveryResponse being ACK/NACKed. See above + /// discussion on version_info and the DiscoveryResponse nonce comment. This + /// may be empty only if 1) this is a non-persistent-stream xDS such as HTTP, + /// or 2) the client has not yet accepted an update in this xDS stream (unlike + /// delta, where it is populated only for new explicit ACKs). + #[prost(string, tag="5")] + pub response_nonce: ::prost::alloc::string::String, + /// This is populated when the previous :ref:`DiscoveryResponse <envoy_api_msg_DiscoveryResponse>` + /// failed to update configuration. The *message* field in *error_details* provides the Envoy + /// internal exception related to the failure. It is only intended for consumption during manual + /// debugging, the string provided is not guaranteed to be stable across Envoy versions. + #[prost(message, optional, tag="6")] + pub error_detail: ::core::option::Option<super::super::super::google::rpc::Status>, +} +/// \[#next-free-field: 7\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DiscoveryResponse { + /// The version of the response data. + #[prost(string, tag="1")] + pub version_info: ::prost::alloc::string::String, + /// The response resources. These resources are typed and depend on the API being called. + #[prost(message, repeated, tag="2")] + pub resources: ::prost::alloc::vec::Vec<super::super::super::google::protobuf::Any>, + /// \[#not-implemented-hide:\] + /// Canary is used to support two Envoy command line flags: + /// + /// * --terminate-on-canary-transition-failure. When set, Envoy is able to + /// terminate if it detects that configuration is stuck at canary. Consider + /// this example sequence of updates: + /// - Management server applies a canary config successfully. + /// - Management server rolls back to a production config. + /// - Envoy rejects the new production config. + /// Since there is no sensible way to continue receiving configuration + /// updates, Envoy will then terminate and apply production config from a + /// clean slate. + /// * --dry-run-canary. When set, a canary response will never be applied, only + /// validated via a dry run. + #[prost(bool, tag="3")] + pub canary: bool, + /// Type URL for resources. Identifies the xDS API when muxing over ADS. + /// Must be consistent with the type_url in the 'resources' repeated Any (if non-empty). + #[prost(string, tag="4")] + pub type_url: ::prost::alloc::string::String, + /// For gRPC based subscriptions, the nonce provides a way to explicitly ack a + /// specific DiscoveryResponse in a following DiscoveryRequest. Additional + /// messages may have been sent by Envoy to the management server for the + /// previous version on the stream prior to this DiscoveryResponse, that were + /// unprocessed at response send time. The nonce allows the management server + /// to ignore any further DiscoveryRequests for the previous version until a + /// DiscoveryRequest bearing the nonce. The nonce is optional and is not + /// required for non-stream based xDS implementations. + #[prost(string, tag="5")] + pub nonce: ::prost::alloc::string::String, + /// \[#not-implemented-hide:\] + /// The control plane instance that sent the response. + #[prost(message, optional, tag="6")] + pub control_plane: ::core::option::Option<core::ControlPlane>, +} +/// DeltaDiscoveryRequest and DeltaDiscoveryResponse are used in a new gRPC +/// endpoint for Delta xDS. +/// +/// With Delta xDS, the DeltaDiscoveryResponses do not need to include a full +/// snapshot of the tracked resources. Instead, DeltaDiscoveryResponses are a +/// diff to the state of a xDS client. +/// In Delta XDS there are per-resource versions, which allow tracking state at +/// the resource granularity. +/// An xDS Delta session is always in the context of a gRPC bidirectional +/// stream. This allows the xDS server to keep track of the state of xDS clients +/// connected to it. +/// +/// In Delta xDS the nonce field is required and used to pair +/// DeltaDiscoveryResponse to a DeltaDiscoveryRequest ACK or NACK. +/// Optionally, a response message level system_version_info is present for +/// debugging purposes only. +/// +/// DeltaDiscoveryRequest plays two independent roles. Any DeltaDiscoveryRequest +/// can be either or both of: \[1\] informing the server of what resources the +/// client has gained/lost interest in (using resource_names_subscribe and +/// resource_names_unsubscribe), or \[2\] (N)ACKing an earlier resource update from +/// the server (using response_nonce, with presence of error_detail making it a NACK). +/// Additionally, the first message (for a given type_url) of a reconnected gRPC stream +/// has a third role: informing the server of the resources (and their versions) +/// that the client already possesses, using the initial_resource_versions field. +/// +/// As with state-of-the-world, when multiple resource types are multiplexed (ADS), +/// all requests/acknowledgments/updates are logically walled off by type_url: +/// a Cluster ACK exists in a completely separate world from a prior Route NACK. +/// In particular, initial_resource_versions being sent at the "start" of every +/// gRPC stream actually entails a message for each type_url, each with its own +/// initial_resource_versions. +/// \[#next-free-field: 8\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeltaDiscoveryRequest { + /// The node making the request. + #[prost(message, optional, tag="1")] + pub node: ::core::option::Option<core::Node>, + /// Type of the resource that is being requested, e.g. + /// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". + #[prost(string, tag="2")] + pub type_url: ::prost::alloc::string::String, + /// DeltaDiscoveryRequests allow the client to add or remove individual + /// resources to the set of tracked resources in the context of a stream. + /// All resource names in the resource_names_subscribe list are added to the + /// set of tracked resources and all resource names in the resource_names_unsubscribe + /// list are removed from the set of tracked resources. + /// + /// *Unlike* state-of-the-world xDS, an empty resource_names_subscribe or + /// resource_names_unsubscribe list simply means that no resources are to be + /// added or removed to the resource list. + /// *Like* state-of-the-world xDS, the server must send updates for all tracked + /// resources, but can also send updates for resources the client has not subscribed to. + /// + /// NOTE: the server must respond with all resources listed in resource_names_subscribe, + /// even if it believes the client has the most recent version of them. The reason: + /// the client may have dropped them, but then regained interest before it had a chance + /// to send the unsubscribe message. See DeltaSubscriptionStateTest.RemoveThenAdd. + /// + /// These two fields can be set in any DeltaDiscoveryRequest, including ACKs + /// and initial_resource_versions. + /// + /// A list of Resource names to add to the list of tracked resources. + #[prost(string, repeated, tag="3")] + pub resource_names_subscribe: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// A list of Resource names to remove from the list of tracked resources. + #[prost(string, repeated, tag="4")] + pub resource_names_unsubscribe: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Informs the server of the versions of the resources the xDS client knows of, to enable the + /// client to continue the same logical xDS session even in the face of gRPC stream reconnection. + /// It will not be populated: \[1\] in the very first stream of a session, since the client will + /// not yet have any resources, \[2\] in any message after the first in a stream (for a given + /// type_url), since the server will already be correctly tracking the client's state. + /// (In ADS, the first message *of each type_url* of a reconnected stream populates this map.) + /// The map's keys are names of xDS resources known to the xDS client. + /// The map's values are opaque resource versions. + #[prost(map="string, string", tag="5")] + pub initial_resource_versions: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// When the DeltaDiscoveryRequest is a ACK or NACK message in response + /// to a previous DeltaDiscoveryResponse, the response_nonce must be the + /// nonce in the DeltaDiscoveryResponse. + /// Otherwise (unlike in DiscoveryRequest) response_nonce must be omitted. + #[prost(string, tag="6")] + pub response_nonce: ::prost::alloc::string::String, + /// This is populated when the previous :ref:`DiscoveryResponse <envoy_api_msg_DiscoveryResponse>` + /// failed to update configuration. The *message* field in *error_details* + /// provides the Envoy internal exception related to the failure. + #[prost(message, optional, tag="7")] + pub error_detail: ::core::option::Option<super::super::super::google::rpc::Status>, +} +/// \[#next-free-field: 7\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeltaDiscoveryResponse { + /// The version of the response data (used for debugging). + #[prost(string, tag="1")] + pub system_version_info: ::prost::alloc::string::String, + /// The response resources. These are typed resources, whose types must match + /// the type_url field. + #[prost(message, repeated, tag="2")] + pub resources: ::prost::alloc::vec::Vec<Resource>, + // field id 3 IS available! + + /// Type URL for resources. Identifies the xDS API when muxing over ADS. + /// Must be consistent with the type_url in the Any within 'resources' if 'resources' is non-empty. + #[prost(string, tag="4")] + pub type_url: ::prost::alloc::string::String, + /// Resources names of resources that have be deleted and to be removed from the xDS Client. + /// Removed resources for missing resources can be ignored. + #[prost(string, repeated, tag="6")] + pub removed_resources: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// The nonce provides a way for DeltaDiscoveryRequests to uniquely + /// reference a DeltaDiscoveryResponse when (N)ACKing. The nonce is required. + #[prost(string, tag="5")] + pub nonce: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Resource { + /// The resource's name, to distinguish it from others of the same type of resource. + #[prost(string, tag="3")] + pub name: ::prost::alloc::string::String, + /// The aliases are a list of other names that this resource can go by. + #[prost(string, repeated, tag="4")] + pub aliases: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// The resource level version. It allows xDS to track the state of individual + /// resources. + #[prost(string, tag="1")] + pub version: ::prost::alloc::string::String, + /// The resource being tracked. + #[prost(message, optional, tag="2")] + pub resource: ::core::option::Option<super::super::super::google::protobuf::Any>, +} +/// \[#not-implemented-hide:\] Not configuration. Workaround c++ protobuf issue with importing +/// services: <https://github.com/google/protobuf/issues/4221> and protoxform to upgrade the file. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct CdsDummy { +} +/// \[#not-implemented-hide:\] Not configuration. Workaround c++ protobuf issue with importing +/// services: <https://github.com/google/protobuf/issues/4221> and protoxform to upgrade the file. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct EdsDummy { +} +/// \[#not-implemented-hide:\] Not configuration. Workaround c++ protobuf issue with importing +/// services: <https://github.com/google/protobuf/issues/4221> and protoxform to upgrade the file. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct LdsDummy { +} +// \[#protodoc-title: HTTP route configuration\] +// * Routing :ref:`architecture overview <arch_overview_http_routing>` +// * HTTP :ref:`router filter <config_http_filters_router>` + +/// \[#next-free-field: 11\] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RouteConfiguration { + /// The name of the route configuration. For example, it might match + /// :ref:`route_config_name + /// <envoy_api_field_config.filter.network.http_connection_manager.v2.Rds.route_config_name>` in + /// :ref:`envoy_api_msg_config.filter.network.http_connection_manager.v2.Rds`. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// An array of virtual hosts that make up the route table. + #[prost(message, repeated, tag="2")] + pub virtual_hosts: ::prost::alloc::vec::Vec<route::VirtualHost>, + /// An array of virtual hosts will be dynamically loaded via the VHDS API. + /// Both *virtual_hosts* and *vhds* fields will be used when present. *virtual_hosts* can be used + /// for a base routing table or for infrequently changing virtual hosts. *vhds* is used for + /// on-demand discovery of virtual hosts. The contents of these two fields will be merged to + /// generate a routing table for a given RouteConfiguration, with *vhds* derived configuration + /// taking precedence. + #[prost(message, optional, tag="9")] + pub vhds: ::core::option::Option<Vhds>, + /// Optionally specifies a list of HTTP headers that the connection manager + /// will consider to be internal only. If they are found on external requests they will be cleaned + /// prior to filter invocation. See :ref:`config_http_conn_man_headers_x-envoy-internal` for more + /// information. + #[prost(string, repeated, tag="3")] + pub internal_only_headers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Specifies a list of HTTP headers that should be added to each response that + /// the connection manager encodes. Headers specified at this level are applied + /// after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or + /// :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on + /// header value syntax, see the documentation on :ref:`custom request headers + /// <config_http_conn_man_headers_custom_request_headers>`. + #[prost(message, repeated, tag="4")] + pub response_headers_to_add: ::prost::alloc::vec::Vec<core::HeaderValueOption>, + /// Specifies a list of HTTP headers that should be removed from each response + /// that the connection manager encodes. + #[prost(string, repeated, tag="5")] + pub response_headers_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Specifies a list of HTTP headers that should be added to each request + /// routed by the HTTP connection manager. Headers specified at this level are + /// applied after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or + /// :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on + /// header value syntax, see the documentation on :ref:`custom request headers + /// <config_http_conn_man_headers_custom_request_headers>`. + #[prost(message, repeated, tag="6")] + pub request_headers_to_add: ::prost::alloc::vec::Vec<core::HeaderValueOption>, + /// Specifies a list of HTTP headers that should be removed from each request + /// routed by the HTTP connection manager. + #[prost(string, repeated, tag="8")] + pub request_headers_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// By default, headers that should be added/removed are evaluated from most to least specific: + /// + /// * route level + /// * virtual host level + /// * connection manager level + /// + /// To allow setting overrides at the route or virtual host level, this order can be reversed + /// by setting this option to true. Defaults to false. + /// + /// \[#next-major-version: In the v3 API, this will default to true.\] + #[prost(bool, tag="10")] + pub most_specific_header_mutations_wins: bool, + /// An optional boolean that specifies whether the clusters that the route + /// table refers to will be validated by the cluster manager. If set to true + /// and a route refers to a non-existent cluster, the route table will not + /// load. If set to false and a route refers to a non-existent cluster, the + /// route table will load and the router filter will return a 404 if the route + /// is selected at runtime. This setting defaults to true if the route table + /// is statically defined via the :ref:`route_config + /// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.route_config>` + /// option. This setting default to false if the route table is loaded dynamically via the + /// :ref:`rds + /// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.rds>` + /// option. Users may wish to override the default behavior in certain cases (for example when + /// using CDS with a static route table). + #[prost(message, optional, tag="7")] + pub validate_clusters: ::core::option::Option<super::super::super::google::protobuf::BoolValue>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Vhds { + /// Configuration source specifier for VHDS. + #[prost(message, optional, tag="1")] + pub config_source: ::core::option::Option<core::ConfigSource>, +} +/// \[#not-implemented-hide:\] Not configuration. Workaround c++ protobuf issue with importing +/// services: <https://github.com/google/protobuf/issues/4221> and protoxform to upgrade the file. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct RdsDummy { +} +// \[#protodoc-title: HTTP scoped routing configuration\] +// * Routing :ref:`architecture overview <arch_overview_http_routing>` + +/// Specifies a routing scope, which associates a +/// :ref:`Key<envoy_api_msg_ScopedRouteConfiguration.Key>` to a +/// :ref:`envoy_api_msg_RouteConfiguration` (identified by its resource name). +/// +/// The HTTP connection manager builds up a table consisting of these Key to +/// RouteConfiguration mappings, and looks up the RouteConfiguration to use per +/// request according to the algorithm specified in the +/// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>` +/// assigned to the HttpConnectionManager. +/// +/// For example, with the following configurations (in YAML): +/// +/// HttpConnectionManager config: +/// +/// .. code:: +/// +/// ... +/// scoped_routes: +/// name: foo-scoped-routes +/// scope_key_builder: +/// fragments: +/// - header_value_extractor: +/// name: X-Route-Selector +/// element_separator: "," +/// element: +/// separator: = +/// key: vip +/// +/// ScopedRouteConfiguration resources (specified statically via +/// :ref:`scoped_route_configurations_list<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scoped_route_configurations_list>` +/// or obtained dynamically via SRDS): +/// +/// .. code:: +/// +/// (1) +/// name: route-scope1 +/// route_configuration_name: route-config1 +/// key: +/// fragments: +/// - string_key: 172.10.10.20 +/// +/// (2) +/// name: route-scope2 +/// route_configuration_name: route-config2 +/// key: +/// fragments: +/// - string_key: 172.20.20.30 +/// +/// A request from a client such as: +/// +/// .. code:: +/// +/// GET / HTTP/1.1 +/// Host: foo.com +/// X-Route-Selector: vip=172.10.10.20 +/// +/// would result in the routing table defined by the `route-config1` +/// RouteConfiguration being assigned to the HTTP request/stream. +/// +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ScopedRouteConfiguration { + /// The name assigned to the routing scope. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// The resource name to use for a :ref:`envoy_api_msg_DiscoveryRequest` to an + /// RDS server to fetch the :ref:`envoy_api_msg_RouteConfiguration` associated + /// with this scope. + #[prost(string, tag="2")] + pub route_configuration_name: ::prost::alloc::string::String, + /// The key to match against. + #[prost(message, optional, tag="3")] + pub key: ::core::option::Option<scoped_route_configuration::Key>, +} +/// Nested message and enum types in `ScopedRouteConfiguration`. +pub mod scoped_route_configuration { + /// Specifies a key which is matched against the output of the + /// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>` + /// specified in the HttpConnectionManager. The matching is done per HTTP + /// request and is dependent on the order of the fragments contained in the + /// Key. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Key { + /// The ordered set of fragments to match against. The order must match the + /// fragments in the corresponding + /// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>`. + #[prost(message, repeated, tag="1")] + pub fragments: ::prost::alloc::vec::Vec<key::Fragment>, + } + /// Nested message and enum types in `Key`. + pub mod key { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Fragment { + #[prost(oneof="fragment::Type", tags="1")] + pub r#type: ::core::option::Option<fragment::Type>, + } + /// Nested message and enum types in `Fragment`. + pub mod fragment { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Type { + /// A string to match against. + #[prost(string, tag="1")] + StringKey(::prost::alloc::string::String), + } + } + } +} +/// \[#not-implemented-hide:\] Not configuration. Workaround c++ protobuf issue with importing +/// services: <https://github.com/google/protobuf/issues/4221> and protoxform to upgrade the file. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct SrdsDummy { +} +include!("envoy.api.v2.tonic.rs"); +// @@protoc_insertion_point(module)
\ No newline at end of file |
