xds_api/generated/
envoy.config.cluster.v3.rs

1// This file is @generated by prost-build.
2/// :ref:`Circuit breaking<arch_overview_circuit_break>` settings can be
3/// specified individually for each defined priority.
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct CircuitBreakers {
6    /// If multiple :ref:`Thresholds<envoy_v3_api_msg_config.cluster.v3.CircuitBreakers.Thresholds>`
7    /// are defined with the same :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
8    /// the first one in the list is used. If no Thresholds is defined for a given
9    /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`, the default values
10    /// are used.
11    #[prost(message, repeated, tag = "1")]
12    pub thresholds: ::prost::alloc::vec::Vec<circuit_breakers::Thresholds>,
13    /// Optional per-host limits which apply to each individual host in a cluster.
14    ///
15    /// .. note::
16    ///   currently only the :ref:`max_connections
17    ///   <envoy_v3_api_field_config.cluster.v3.CircuitBreakers.Thresholds.max_connections>` field is supported for per-host limits.
18    ///
19    /// If multiple per-host :ref:`Thresholds<envoy_v3_api_msg_config.cluster.v3.CircuitBreakers.Thresholds>`
20    /// are defined with the same :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
21    /// the first one in the list is used. If no per-host Thresholds are defined for a given
22    /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
23    /// the cluster will not have per-host limits.
24    #[prost(message, repeated, tag = "2")]
25    pub per_host_thresholds: ::prost::alloc::vec::Vec<circuit_breakers::Thresholds>,
26}
27/// Nested message and enum types in `CircuitBreakers`.
28pub mod circuit_breakers {
29    /// A Thresholds defines CircuitBreaker settings for a
30    /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`.
31    /// \[#next-free-field: 9\]
32    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
33    pub struct Thresholds {
34        /// The :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`
35        /// the specified CircuitBreaker settings apply to.
36        #[prost(
37            enumeration = "super::super::super::core::v3::RoutingPriority",
38            tag = "1"
39        )]
40        pub priority: i32,
41        /// The maximum number of connections that Envoy will make to the upstream
42        /// cluster. If not specified, the default is 1024.
43        #[prost(message, optional, tag = "2")]
44        pub max_connections: ::core::option::Option<
45            super::super::super::super::super::google::protobuf::UInt32Value,
46        >,
47        /// The maximum number of pending requests that Envoy will allow to the
48        /// upstream cluster. If not specified, the default is 1024.
49        /// This limit is applied as a connection limit for non-HTTP traffic.
50        #[prost(message, optional, tag = "3")]
51        pub max_pending_requests: ::core::option::Option<
52            super::super::super::super::super::google::protobuf::UInt32Value,
53        >,
54        /// The maximum number of parallel requests that Envoy will make to the
55        /// upstream cluster. If not specified, the default is 1024.
56        /// This limit does not apply to non-HTTP traffic.
57        #[prost(message, optional, tag = "4")]
58        pub max_requests: ::core::option::Option<
59            super::super::super::super::super::google::protobuf::UInt32Value,
60        >,
61        /// The maximum number of parallel retries that Envoy will allow to the
62        /// upstream cluster. If not specified, the default is 3.
63        #[prost(message, optional, tag = "5")]
64        pub max_retries: ::core::option::Option<
65            super::super::super::super::super::google::protobuf::UInt32Value,
66        >,
67        /// Specifies a limit on concurrent retries in relation to the number of active requests. This
68        /// parameter is optional.
69        ///
70        /// .. note::
71        ///
72        ///     If this field is set, the retry budget will override any configured retry circuit
73        ///     breaker.
74        #[prost(message, optional, tag = "8")]
75        pub retry_budget: ::core::option::Option<thresholds::RetryBudget>,
76        /// If track_remaining is true, then stats will be published that expose
77        /// the number of resources remaining until the circuit breakers open. If
78        /// not specified, the default is false.
79        ///
80        /// .. note::
81        ///
82        ///     If a retry budget is used in lieu of the max_retries circuit breaker,
83        ///     the remaining retry resources remaining will not be tracked.
84        #[prost(bool, tag = "6")]
85        pub track_remaining: bool,
86        /// The maximum number of connection pools per cluster that Envoy will concurrently support at
87        /// once. If not specified, the default is unlimited. Set this for clusters which create a
88        /// large number of connection pools. See
89        /// :ref:`Circuit Breaking <arch_overview_circuit_break_cluster_maximum_connection_pools>` for
90        /// more details.
91        #[prost(message, optional, tag = "7")]
92        pub max_connection_pools: ::core::option::Option<
93            super::super::super::super::super::google::protobuf::UInt32Value,
94        >,
95    }
96    /// Nested message and enum types in `Thresholds`.
97    pub mod thresholds {
98        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
99        pub struct RetryBudget {
100            /// Specifies the limit on concurrent retries as a percentage of the sum of active requests and
101            /// active pending requests. For example, if there are 100 active requests and the
102            /// budget_percent is set to 25, there may be 25 active retries.
103            ///
104            /// This parameter is optional. Defaults to 20%.
105            #[prost(message, optional, tag = "1")]
106            pub budget_percent: ::core::option::Option<
107                super::super::super::super::super::r#type::v3::Percent,
108            >,
109            /// Specifies the minimum retry concurrency allowed for the retry budget. The limit on the
110            /// number of active retries may never go below this number.
111            ///
112            /// This parameter is optional. Defaults to 3.
113            #[prost(message, optional, tag = "2")]
114            pub min_retry_concurrency: ::core::option::Option<
115                super::super::super::super::super::super::google::protobuf::UInt32Value,
116            >,
117        }
118        impl ::prost::Name for RetryBudget {
119            const NAME: &'static str = "RetryBudget";
120            const PACKAGE: &'static str = "envoy.config.cluster.v3";
121            fn full_name() -> ::prost::alloc::string::String {
122                "envoy.config.cluster.v3.CircuitBreakers.Thresholds.RetryBudget".into()
123            }
124            fn type_url() -> ::prost::alloc::string::String {
125                "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers.Thresholds.RetryBudget"
126                    .into()
127            }
128        }
129    }
130    impl ::prost::Name for Thresholds {
131        const NAME: &'static str = "Thresholds";
132        const PACKAGE: &'static str = "envoy.config.cluster.v3";
133        fn full_name() -> ::prost::alloc::string::String {
134            "envoy.config.cluster.v3.CircuitBreakers.Thresholds".into()
135        }
136        fn type_url() -> ::prost::alloc::string::String {
137            "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers.Thresholds"
138                .into()
139        }
140    }
141}
142impl ::prost::Name for CircuitBreakers {
143    const NAME: &'static str = "CircuitBreakers";
144    const PACKAGE: &'static str = "envoy.config.cluster.v3";
145    fn full_name() -> ::prost::alloc::string::String {
146        "envoy.config.cluster.v3.CircuitBreakers".into()
147    }
148    fn type_url() -> ::prost::alloc::string::String {
149        "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers".into()
150    }
151}
152#[derive(Clone, PartialEq, ::prost::Message)]
153pub struct Filter {
154    /// The name of the filter configuration.
155    #[prost(string, tag = "1")]
156    pub name: ::prost::alloc::string::String,
157    /// Filter specific configuration which depends on the filter being
158    /// instantiated. See the supported filters for further documentation.
159    /// Note that Envoy's :ref:`downstream network
160    /// filters <config_network_filters>` are not valid upstream network filters.
161    /// Only one of typed_config or config_discovery can be used.
162    #[prost(message, optional, tag = "2")]
163    pub typed_config: ::core::option::Option<
164        super::super::super::super::google::protobuf::Any,
165    >,
166    /// Configuration source specifier for an extension configuration discovery
167    /// service. In case of a failure and without the default configuration, the
168    /// listener closes the connections.
169    /// Only one of typed_config or config_discovery can be used.
170    #[prost(message, optional, tag = "3")]
171    pub config_discovery: ::core::option::Option<
172        super::super::core::v3::ExtensionConfigSource,
173    >,
174}
175impl ::prost::Name for Filter {
176    const NAME: &'static str = "Filter";
177    const PACKAGE: &'static str = "envoy.config.cluster.v3";
178    fn full_name() -> ::prost::alloc::string::String {
179        "envoy.config.cluster.v3.Filter".into()
180    }
181    fn type_url() -> ::prost::alloc::string::String {
182        "type.googleapis.com/envoy.config.cluster.v3.Filter".into()
183    }
184}
185/// See the :ref:`architecture overview <arch_overview_outlier_detection>` for
186/// more information on outlier detection.
187/// \[#next-free-field: 25\]
188#[derive(Clone, PartialEq, ::prost::Message)]
189pub struct OutlierDetection {
190    /// The number of consecutive server-side error responses (for HTTP traffic,
191    /// 5xx responses; for TCP traffic, connection failures; for Redis, failure to
192    /// respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.
193    #[prost(message, optional, tag = "1")]
194    pub consecutive_5xx: ::core::option::Option<
195        super::super::super::super::google::protobuf::UInt32Value,
196    >,
197    /// The time interval between ejection analysis sweeps. This can result in
198    /// both new ejections as well as hosts being returned to service. Defaults
199    /// to 10000ms or 10s.
200    #[prost(message, optional, tag = "2")]
201    pub interval: ::core::option::Option<
202        super::super::super::super::google::protobuf::Duration,
203    >,
204    /// The base time that a host is ejected for. The real time is equal to the
205    /// base time multiplied by the number of times the host has been ejected and is
206    /// capped by :ref:`max_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.max_ejection_time>`.
207    /// Defaults to 30000ms or 30s.
208    #[prost(message, optional, tag = "3")]
209    pub base_ejection_time: ::core::option::Option<
210        super::super::super::super::google::protobuf::Duration,
211    >,
212    /// The maximum % of an upstream cluster that can be ejected due to outlier
213    /// detection. Defaults to 10% but will eject at least one host regardless of the value.
214    #[prost(message, optional, tag = "4")]
215    pub max_ejection_percent: ::core::option::Option<
216        super::super::super::super::google::protobuf::UInt32Value,
217    >,
218    /// The % chance that a host will be actually ejected when an outlier status
219    /// is detected through consecutive 5xx. This setting can be used to disable
220    /// ejection or to ramp it up slowly. Defaults to 100.
221    #[prost(message, optional, tag = "5")]
222    pub enforcing_consecutive_5xx: ::core::option::Option<
223        super::super::super::super::google::protobuf::UInt32Value,
224    >,
225    /// The % chance that a host will be actually ejected when an outlier status
226    /// is detected through success rate statistics. This setting can be used to
227    /// disable ejection or to ramp it up slowly. Defaults to 100.
228    #[prost(message, optional, tag = "6")]
229    pub enforcing_success_rate: ::core::option::Option<
230        super::super::super::super::google::protobuf::UInt32Value,
231    >,
232    /// The number of hosts in a cluster that must have enough request volume to
233    /// detect success rate outliers. If the number of hosts is less than this
234    /// setting, outlier detection via success rate statistics is not performed
235    /// for any host in the cluster. Defaults to 5.
236    #[prost(message, optional, tag = "7")]
237    pub success_rate_minimum_hosts: ::core::option::Option<
238        super::super::super::super::google::protobuf::UInt32Value,
239    >,
240    /// The minimum number of total requests that must be collected in one
241    /// interval (as defined by the interval duration above) to include this host
242    /// in success rate based outlier detection. If the volume is lower than this
243    /// setting, outlier detection via success rate statistics is not performed
244    /// for that host. Defaults to 100.
245    #[prost(message, optional, tag = "8")]
246    pub success_rate_request_volume: ::core::option::Option<
247        super::super::super::super::google::protobuf::UInt32Value,
248    >,
249    /// This factor is used to determine the ejection threshold for success rate
250    /// outlier ejection. The ejection threshold is the difference between the
251    /// mean success rate, and the product of this factor and the standard
252    /// deviation of the mean success rate: mean - (stdev *
253    /// success_rate_stdev_factor). This factor is divided by a thousand to get a
254    /// double. That is, if the desired factor is 1.9, the runtime value should
255    /// be 1900. Defaults to 1900.
256    #[prost(message, optional, tag = "9")]
257    pub success_rate_stdev_factor: ::core::option::Option<
258        super::super::super::super::google::protobuf::UInt32Value,
259    >,
260    /// The number of consecutive gateway failures (502, 503, 504 status codes)
261    /// before a consecutive gateway failure ejection occurs. Defaults to 5.
262    #[prost(message, optional, tag = "10")]
263    pub consecutive_gateway_failure: ::core::option::Option<
264        super::super::super::super::google::protobuf::UInt32Value,
265    >,
266    /// The % chance that a host will be actually ejected when an outlier status
267    /// is detected through consecutive gateway failures. This setting can be
268    /// used to disable ejection or to ramp it up slowly. Defaults to 0.
269    #[prost(message, optional, tag = "11")]
270    pub enforcing_consecutive_gateway_failure: ::core::option::Option<
271        super::super::super::super::google::protobuf::UInt32Value,
272    >,
273    /// Determines whether to distinguish local origin failures from external errors. If set to true
274    /// the following configuration parameters are taken into account:
275    /// :ref:`consecutive_local_origin_failure<envoy_v3_api_field_config.cluster.v3.OutlierDetection.consecutive_local_origin_failure>`,
276    /// :ref:`enforcing_consecutive_local_origin_failure<envoy_v3_api_field_config.cluster.v3.OutlierDetection.enforcing_consecutive_local_origin_failure>`
277    /// and
278    /// :ref:`enforcing_local_origin_success_rate<envoy_v3_api_field_config.cluster.v3.OutlierDetection.enforcing_local_origin_success_rate>`.
279    /// Defaults to false.
280    #[prost(bool, tag = "12")]
281    pub split_external_local_origin_errors: bool,
282    /// The number of consecutive locally originated failures before ejection
283    /// occurs. Defaults to 5. Parameter takes effect only when
284    /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
285    /// is set to true.
286    #[prost(message, optional, tag = "13")]
287    pub consecutive_local_origin_failure: ::core::option::Option<
288        super::super::super::super::google::protobuf::UInt32Value,
289    >,
290    /// The % chance that a host will be actually ejected when an outlier status
291    /// is detected through consecutive locally originated failures. This setting can be
292    /// used to disable ejection or to ramp it up slowly. Defaults to 100.
293    /// Parameter takes effect only when
294    /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
295    /// is set to true.
296    #[prost(message, optional, tag = "14")]
297    pub enforcing_consecutive_local_origin_failure: ::core::option::Option<
298        super::super::super::super::google::protobuf::UInt32Value,
299    >,
300    /// The % chance that a host will be actually ejected when an outlier status
301    /// is detected through success rate statistics for locally originated errors.
302    /// This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
303    /// Parameter takes effect only when
304    /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
305    /// is set to true.
306    #[prost(message, optional, tag = "15")]
307    pub enforcing_local_origin_success_rate: ::core::option::Option<
308        super::super::super::super::google::protobuf::UInt32Value,
309    >,
310    /// The failure percentage to use when determining failure percentage-based outlier detection. If
311    /// the failure percentage of a given host is greater than or equal to this value, it will be
312    /// ejected. Defaults to 85.
313    #[prost(message, optional, tag = "16")]
314    pub failure_percentage_threshold: ::core::option::Option<
315        super::super::super::super::google::protobuf::UInt32Value,
316    >,
317    /// The % chance that a host will be actually ejected when an outlier status is detected through
318    /// failure percentage statistics. This setting can be used to disable ejection or to ramp it up
319    /// slowly. Defaults to 0.
320    ///
321    /// [#next-major-version: setting this without setting failure_percentage_threshold should be
322    /// invalid in v4.]
323    #[prost(message, optional, tag = "17")]
324    pub enforcing_failure_percentage: ::core::option::Option<
325        super::super::super::super::google::protobuf::UInt32Value,
326    >,
327    /// The % chance that a host will be actually ejected when an outlier status is detected through
328    /// local-origin failure percentage statistics. This setting can be used to disable ejection or to
329    /// ramp it up slowly. Defaults to 0.
330    #[prost(message, optional, tag = "18")]
331    pub enforcing_failure_percentage_local_origin: ::core::option::Option<
332        super::super::super::super::google::protobuf::UInt32Value,
333    >,
334    /// The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.
335    /// If the total number of hosts in the cluster is less than this value, failure percentage-based
336    /// ejection will not be performed. Defaults to 5.
337    #[prost(message, optional, tag = "19")]
338    pub failure_percentage_minimum_hosts: ::core::option::Option<
339        super::super::super::super::google::protobuf::UInt32Value,
340    >,
341    /// The minimum number of total requests that must be collected in one interval (as defined by the
342    /// interval duration above) to perform failure percentage-based ejection for this host. If the
343    /// volume is lower than this setting, failure percentage-based ejection will not be performed for
344    /// this host. Defaults to 50.
345    #[prost(message, optional, tag = "20")]
346    pub failure_percentage_request_volume: ::core::option::Option<
347        super::super::super::super::google::protobuf::UInt32Value,
348    >,
349    /// The maximum time that a host is ejected for. See :ref:`base_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>`
350    /// for more information. If not specified, the default value (300000ms or 300s) or
351    /// :ref:`base_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>` value is applied, whatever is larger.
352    #[prost(message, optional, tag = "21")]
353    pub max_ejection_time: ::core::option::Option<
354        super::super::super::super::google::protobuf::Duration,
355    >,
356    /// The maximum amount of jitter to add to the ejection time, in order to prevent
357    /// a 'thundering herd' effect where all proxies try to reconnect to host at the same time.
358    /// See :ref:`max_ejection_time_jitter<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>`
359    /// Defaults to 0s.
360    #[prost(message, optional, tag = "22")]
361    pub max_ejection_time_jitter: ::core::option::Option<
362        super::super::super::super::google::protobuf::Duration,
363    >,
364    /// If active health checking is enabled and a host is ejected by outlier detection, a successful active health check
365    /// unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.
366    /// To change this default behavior set this config to ``false`` where active health checking will not uneject the host.
367    /// Defaults to true.
368    #[prost(message, optional, tag = "23")]
369    pub successful_active_health_check_uneject_host: ::core::option::Option<
370        super::super::super::super::google::protobuf::BoolValue,
371    >,
372    /// Set of host's passive monitors.
373    /// \[#not-implemented-hide:\]
374    #[prost(message, repeated, tag = "24")]
375    pub monitors: ::prost::alloc::vec::Vec<super::super::core::v3::TypedExtensionConfig>,
376}
377impl ::prost::Name for OutlierDetection {
378    const NAME: &'static str = "OutlierDetection";
379    const PACKAGE: &'static str = "envoy.config.cluster.v3";
380    fn full_name() -> ::prost::alloc::string::String {
381        "envoy.config.cluster.v3.OutlierDetection".into()
382    }
383    fn type_url() -> ::prost::alloc::string::String {
384        "type.googleapis.com/envoy.config.cluster.v3.OutlierDetection".into()
385    }
386}
387/// Cluster list collections. Entries are ``Cluster`` resources or references.
388/// \[#not-implemented-hide:\]
389#[derive(Clone, PartialEq, ::prost::Message)]
390pub struct ClusterCollection {
391    #[prost(message, optional, tag = "1")]
392    pub entries: ::core::option::Option<
393        super::super::super::super::xds::core::v3::CollectionEntry,
394    >,
395}
396impl ::prost::Name for ClusterCollection {
397    const NAME: &'static str = "ClusterCollection";
398    const PACKAGE: &'static str = "envoy.config.cluster.v3";
399    fn full_name() -> ::prost::alloc::string::String {
400        "envoy.config.cluster.v3.ClusterCollection".into()
401    }
402    fn type_url() -> ::prost::alloc::string::String {
403        "type.googleapis.com/envoy.config.cluster.v3.ClusterCollection".into()
404    }
405}
406/// Configuration for a single upstream cluster.
407/// \[#next-free-field: 57\]
408#[derive(Clone, PartialEq, ::prost::Message)]
409pub struct Cluster {
410    /// Configuration to use different transport sockets for different endpoints.
411    /// The entry of ``envoy.transport_socket_match`` in the
412    /// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
413    /// is used to match against the transport sockets as they appear in the list. The first
414    /// :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
415    /// For example, with the following match
416    ///
417    /// .. code-block:: yaml
418    ///
419    ///   transport_socket_matches:
420    ///   - name: "enableMTLS"
421    ///     match:
422    ///       acceptMTLS: true
423    ///     transport_socket:
424    ///       name: envoy.transport_sockets.tls
425    ///       config: { ... } # tls socket configuration
426    ///   - name: "defaultToPlaintext"
427    ///     match: {}
428    ///     transport_socket:
429    ///       name: envoy.transport_sockets.raw_buffer
430    ///
431    /// Connections to the endpoints whose metadata value under ``envoy.transport_socket_match``
432    /// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
433    ///
434    /// If a :ref:`socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` with empty match
435    /// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
436    /// socket match in case above.
437    ///
438    /// If an endpoint metadata's value under ``envoy.transport_socket_match`` does not match any
439    /// ``TransportSocketMatch``, socket configuration fallbacks to use the ``tls_context`` or
440    /// ``transport_socket`` specified in this cluster.
441    ///
442    /// This field allows gradual and flexible transport socket configuration changes.
443    ///
444    /// The metadata of endpoints in EDS can indicate transport socket capabilities. For example,
445    /// an endpoint's metadata can have two key value pairs as "acceptMTLS": "true",
446    /// "acceptPlaintext": "true". While some other endpoints, only accepting plaintext traffic
447    /// has "acceptPlaintext": "true" metadata information.
448    ///
449    /// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
450    /// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
451    /// ``TransportSocketMatch`` in this field. Other client Envoys receive CDS without
452    /// ``transport_socket_match`` set, and still send plain text traffic to the same cluster.
453    ///
454    /// This field can be used to specify custom transport socket configurations for health
455    /// checks by adding matching key/value pairs in a health check's
456    /// :ref:`transport socket match criteria <envoy_v3_api_field_config.core.v3.HealthCheck.transport_socket_match_criteria>` field.
457    ///
458    /// \[#comment:TODO(incfly): add a detailed architecture doc on intended usage.\]
459    #[prost(message, repeated, tag = "43")]
460    pub transport_socket_matches: ::prost::alloc::vec::Vec<
461        cluster::TransportSocketMatch,
462    >,
463    /// Supplies the name of the cluster which must be unique across all clusters.
464    /// The cluster name is used when emitting
465    /// :ref:`statistics <config_cluster_manager_cluster_stats>` if :ref:`alt_stat_name
466    /// <envoy_v3_api_field_config.cluster.v3.Cluster.alt_stat_name>` is not provided.
467    /// Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics.
468    #[prost(string, tag = "1")]
469    pub name: ::prost::alloc::string::String,
470    /// An optional alternative to the cluster name to be used for observability. This name is used
471    /// emitting stats for the cluster and access logging the cluster name. This will appear as
472    /// additional information in configuration dumps of a cluster's current status as
473    /// :ref:`observability_name <envoy_v3_api_field_admin.v3.ClusterStatus.observability_name>`
474    /// and as an additional tag "upstream_cluster.name" while tracing. Note: Any ``:`` in the name
475    /// will be converted to ``_`` when emitting statistics. This should not be confused with
476    /// :ref:`Router Filter Header <config_http_filters_router_x-envoy-upstream-alt-stat-name>`.
477    #[prost(string, tag = "28")]
478    pub alt_stat_name: ::prost::alloc::string::String,
479    /// Configuration to use for EDS updates for the Cluster.
480    #[prost(message, optional, tag = "3")]
481    pub eds_cluster_config: ::core::option::Option<cluster::EdsClusterConfig>,
482    /// The timeout for new network connections to hosts in the cluster.
483    /// If not set, a default value of 5s will be used.
484    #[prost(message, optional, tag = "4")]
485    pub connect_timeout: ::core::option::Option<
486        super::super::super::super::google::protobuf::Duration,
487    >,
488    /// Soft limit on size of the cluster’s connections read and write buffers. If
489    /// unspecified, an implementation defined default is applied (1MiB).
490    #[prost(message, optional, tag = "5")]
491    pub per_connection_buffer_limit_bytes: ::core::option::Option<
492        super::super::super::super::google::protobuf::UInt32Value,
493    >,
494    /// The :ref:`load balancer type <arch_overview_load_balancing_types>` to use
495    /// when picking a host in the cluster.
496    #[prost(enumeration = "cluster::LbPolicy", tag = "6")]
497    pub lb_policy: i32,
498    /// Setting this is required for specifying members of
499    /// :ref:`STATIC<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STATIC>`,
500    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
501    /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
502    /// This field supersedes the ``hosts`` field in the v2 API.
503    ///
504    /// .. attention::
505    ///
506    ///    Setting this allows non-EDS cluster types to contain embedded EDS equivalent
507    ///    :ref:`endpoint assignments<envoy_v3_api_msg_config.endpoint.v3.ClusterLoadAssignment>`.
508    ///
509    #[prost(message, optional, tag = "33")]
510    pub load_assignment: ::core::option::Option<
511        super::super::endpoint::v3::ClusterLoadAssignment,
512    >,
513    /// Optional :ref:`active health checking <arch_overview_health_checking>`
514    /// configuration for the cluster. If no
515    /// configuration is specified no health checking will be done and all cluster
516    /// members will be considered healthy at all times.
517    #[prost(message, repeated, tag = "8")]
518    pub health_checks: ::prost::alloc::vec::Vec<super::super::core::v3::HealthCheck>,
519    /// Optional maximum requests for a single upstream connection. This parameter
520    /// is respected by both the HTTP/1.1 and HTTP/2 connection pool
521    /// implementations. If not specified, there is no limit. Setting this
522    /// parameter to 1 will effectively disable keep alive.
523    ///
524    /// .. attention::
525    ///    This field has been deprecated in favor of the :ref:`max_requests_per_connection <envoy_v3_api_field_config.core.v3.HttpProtocolOptions.max_requests_per_connection>` field.
526    #[deprecated]
527    #[prost(message, optional, tag = "9")]
528    pub max_requests_per_connection: ::core::option::Option<
529        super::super::super::super::google::protobuf::UInt32Value,
530    >,
531    /// Optional :ref:`circuit breaking <arch_overview_circuit_break>` for the cluster.
532    #[prost(message, optional, tag = "10")]
533    pub circuit_breakers: ::core::option::Option<CircuitBreakers>,
534    /// HTTP protocol options that are applied only to upstream HTTP connections.
535    /// These options apply to all HTTP versions.
536    /// This has been deprecated in favor of
537    /// :ref:`upstream_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
538    /// in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
539    /// upstream_http_protocol_options can be set via the cluster's
540    /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
541    /// See :ref:`upstream_http_protocol_options
542    /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
543    /// for example usage.
544    #[deprecated]
545    #[prost(message, optional, tag = "46")]
546    pub upstream_http_protocol_options: ::core::option::Option<
547        super::super::core::v3::UpstreamHttpProtocolOptions,
548    >,
549    /// Additional options when handling HTTP requests upstream. These options will be applicable to
550    /// both HTTP1 and HTTP2 requests.
551    /// This has been deprecated in favor of
552    /// :ref:`common_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.common_http_protocol_options>`
553    /// in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
554    /// common_http_protocol_options can be set via the cluster's
555    /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
556    /// See :ref:`upstream_http_protocol_options
557    /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
558    /// for example usage.
559    #[deprecated]
560    #[prost(message, optional, tag = "29")]
561    pub common_http_protocol_options: ::core::option::Option<
562        super::super::core::v3::HttpProtocolOptions,
563    >,
564    /// Additional options when handling HTTP1 requests.
565    /// This has been deprecated in favor of http_protocol_options fields in the
566    /// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
567    /// http_protocol_options can be set via the cluster's
568    /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
569    /// See :ref:`upstream_http_protocol_options
570    /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
571    /// for example usage.
572    #[deprecated]
573    #[prost(message, optional, tag = "13")]
574    pub http_protocol_options: ::core::option::Option<
575        super::super::core::v3::Http1ProtocolOptions,
576    >,
577    /// Even if default HTTP2 protocol options are desired, this field must be
578    /// set so that Envoy will assume that the upstream supports HTTP/2 when
579    /// making new HTTP connection pool connections. Currently, Envoy only
580    /// supports prior knowledge for upstream connections. Even if TLS is used
581    /// with ALPN, ``http2_protocol_options`` must be specified. As an aside this allows HTTP/2
582    /// connections to happen over plain text.
583    /// This has been deprecated in favor of http2_protocol_options fields in the
584    /// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>`
585    /// message. http2_protocol_options can be set via the cluster's
586    /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
587    /// See :ref:`upstream_http_protocol_options
588    /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
589    /// for example usage.
590    #[deprecated]
591    #[prost(message, optional, tag = "14")]
592    pub http2_protocol_options: ::core::option::Option<
593        super::super::core::v3::Http2ProtocolOptions,
594    >,
595    /// The extension_protocol_options field is used to provide extension-specific protocol options
596    /// for upstream connections. The key should match the extension filter name, such as
597    /// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on
598    /// specific options.
599    /// \[#next-major-version: make this a list of typed extensions.\]
600    #[prost(map = "string, message", tag = "36")]
601    pub typed_extension_protocol_options: ::std::collections::HashMap<
602        ::prost::alloc::string::String,
603        super::super::super::super::google::protobuf::Any,
604    >,
605    /// If the DNS refresh rate is specified and the cluster type is either
606    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
607    /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
608    /// this value is used as the cluster’s DNS refresh
609    /// rate. The value configured must be at least 1ms. If this setting is not specified, the
610    /// value defaults to 5000ms. For cluster types other than
611    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
612    /// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
613    /// this setting is ignored.
614    #[prost(message, optional, tag = "16")]
615    pub dns_refresh_rate: ::core::option::Option<
616        super::super::super::super::google::protobuf::Duration,
617    >,
618    /// If the DNS failure refresh rate is specified and the cluster type is either
619    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
620    /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
621    /// this is used as the cluster’s DNS refresh rate when requests are failing. If this setting is
622    /// not specified, the failure refresh rate defaults to the DNS refresh rate. For cluster types
623    /// other than :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
624    /// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` this setting is
625    /// ignored.
626    #[prost(message, optional, tag = "44")]
627    pub dns_failure_refresh_rate: ::core::option::Option<cluster::RefreshRate>,
628    /// Optional configuration for setting cluster's DNS refresh rate. If the value is set to true,
629    /// cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS
630    /// resolution.
631    #[prost(bool, tag = "39")]
632    pub respect_dns_ttl: bool,
633    /// The DNS IP address resolution policy. If this setting is not specified, the
634    /// value defaults to
635    /// :ref:`AUTO<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DnsLookupFamily.AUTO>`.
636    #[prost(enumeration = "cluster::DnsLookupFamily", tag = "17")]
637    pub dns_lookup_family: i32,
638    /// If DNS resolvers are specified and the cluster type is either
639    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
640    /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
641    /// this value is used to specify the cluster’s dns resolvers.
642    /// If this setting is not specified, the value defaults to the default
643    /// resolver, which uses /etc/resolv.conf for configuration. For cluster types
644    /// other than
645    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
646    /// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
647    /// this setting is ignored.
648    /// This field is deprecated in favor of ``dns_resolution_config``
649    /// which aggregates all of the DNS resolver configuration in a single message.
650    #[deprecated]
651    #[prost(message, repeated, tag = "18")]
652    pub dns_resolvers: ::prost::alloc::vec::Vec<super::super::core::v3::Address>,
653    /// Always use TCP queries instead of UDP queries for DNS lookups.
654    /// This field is deprecated in favor of ``dns_resolution_config``
655    /// which aggregates all of the DNS resolver configuration in a single message.
656    #[deprecated]
657    #[prost(bool, tag = "45")]
658    pub use_tcp_for_dns_lookups: bool,
659    /// DNS resolution configuration which includes the underlying dns resolver addresses and options.
660    /// This field is deprecated in favor of
661    /// :ref:`typed_dns_resolver_config <envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`.
662    #[deprecated]
663    #[prost(message, optional, tag = "53")]
664    pub dns_resolution_config: ::core::option::Option<
665        super::super::core::v3::DnsResolutionConfig,
666    >,
667    /// DNS resolver type configuration extension. This extension can be used to configure c-ares, apple,
668    /// or any other DNS resolver types and the related parameters.
669    /// For example, an object of
670    /// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
671    /// can be packed into this ``typed_dns_resolver_config``. This configuration replaces the
672    /// :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
673    /// configuration.
674    /// During the transition period when both ``dns_resolution_config`` and ``typed_dns_resolver_config`` exists,
675    /// when ``typed_dns_resolver_config`` is in place, Envoy will use it and ignore ``dns_resolution_config``.
676    /// When ``typed_dns_resolver_config`` is missing, the default behavior is in place.
677    /// \[#extension-category: envoy.network.dns_resolver\]
678    #[prost(message, optional, tag = "55")]
679    pub typed_dns_resolver_config: ::core::option::Option<
680        super::super::core::v3::TypedExtensionConfig,
681    >,
682    /// Optional configuration for having cluster readiness block on warm-up. Currently, only applicable for
683    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
684    /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
685    /// or :ref:`Redis Cluster<arch_overview_redis>`.
686    /// If true, cluster readiness blocks on warm-up. If false, the cluster will complete
687    /// initialization whether or not warm-up has completed. Defaults to true.
688    #[prost(message, optional, tag = "54")]
689    pub wait_for_warm_on_init: ::core::option::Option<
690        super::super::super::super::google::protobuf::BoolValue,
691    >,
692    /// If specified, outlier detection will be enabled for this upstream cluster.
693    /// Each of the configuration values can be overridden via
694    /// :ref:`runtime values <config_cluster_manager_cluster_runtime_outlier_detection>`.
695    #[prost(message, optional, tag = "19")]
696    pub outlier_detection: ::core::option::Option<OutlierDetection>,
697    /// The interval for removing stale hosts from a cluster type
698    /// :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`.
699    /// Hosts are considered stale if they have not been used
700    /// as upstream destinations during this interval. New hosts are added
701    /// to original destination clusters on demand as new connections are
702    /// redirected to Envoy, causing the number of hosts in the cluster to
703    /// grow over time. Hosts that are not stale (they are actively used as
704    /// destinations) are kept in the cluster, which allows connections to
705    /// them remain open, saving the latency that would otherwise be spent
706    /// on opening new connections. If this setting is not specified, the
707    /// value defaults to 5000ms. For cluster types other than
708    /// :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`
709    /// this setting is ignored.
710    #[prost(message, optional, tag = "20")]
711    pub cleanup_interval: ::core::option::Option<
712        super::super::super::super::google::protobuf::Duration,
713    >,
714    /// Optional configuration used to bind newly established upstream connections.
715    /// This overrides any bind_config specified in the bootstrap proto.
716    /// If the address and port are empty, no bind will be performed.
717    #[prost(message, optional, tag = "21")]
718    pub upstream_bind_config: ::core::option::Option<super::super::core::v3::BindConfig>,
719    /// Configuration for load balancing subsetting.
720    #[prost(message, optional, tag = "22")]
721    pub lb_subset_config: ::core::option::Option<cluster::LbSubsetConfig>,
722    /// Common configuration for all load balancer implementations.
723    #[prost(message, optional, tag = "27")]
724    pub common_lb_config: ::core::option::Option<cluster::CommonLbConfig>,
725    /// Optional custom transport socket implementation to use for upstream connections.
726    /// To setup TLS, set a transport socket with name ``envoy.transport_sockets.tls`` and
727    /// :ref:`UpstreamTlsContexts <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.UpstreamTlsContext>` in the ``typed_config``.
728    /// If no transport socket configuration is specified, new connections
729    /// will be set up with plaintext.
730    #[prost(message, optional, tag = "24")]
731    pub transport_socket: ::core::option::Option<
732        super::super::core::v3::TransportSocket,
733    >,
734    /// The Metadata field can be used to provide additional information about the
735    /// cluster. It can be used for stats, logging, and varying filter behavior.
736    /// Fields should use reverse DNS notation to denote which entity within Envoy
737    /// will need the information. For instance, if the metadata is intended for
738    /// the Router filter, the filter name should be specified as ``envoy.filters.http.router``.
739    #[prost(message, optional, tag = "25")]
740    pub metadata: ::core::option::Option<super::super::core::v3::Metadata>,
741    /// Determines how Envoy selects the protocol used to speak to upstream hosts.
742    /// This has been deprecated in favor of setting explicit protocol selection
743    /// in the :ref:`http_protocol_options
744    /// <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
745    /// http_protocol_options can be set via the cluster's
746    /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
747    #[deprecated]
748    #[prost(enumeration = "cluster::ClusterProtocolSelection", tag = "26")]
749    pub protocol_selection: i32,
750    /// Optional options for upstream connections.
751    #[prost(message, optional, tag = "30")]
752    pub upstream_connection_options: ::core::option::Option<UpstreamConnectionOptions>,
753    /// If an upstream host becomes unhealthy (as determined by the configured health checks
754    /// or outlier detection), immediately close all connections to the failed host.
755    ///
756    /// .. note::
757    ///
758    ///    This is currently only supported for connections created by tcp_proxy.
759    ///
760    /// .. note::
761    ///
762    ///    The current implementation of this feature closes all connections immediately when
763    ///    the unhealthy status is detected. If there are a large number of connections open
764    ///    to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of
765    ///    time exclusively closing these connections, and not processing any other traffic.
766    #[prost(bool, tag = "31")]
767    pub close_connections_on_host_health_failure: bool,
768    /// If set to true, Envoy will ignore the health value of a host when processing its removal
769    /// from service discovery. This means that if active health checking is used, Envoy will *not*
770    /// wait for the endpoint to go unhealthy before removing it.
771    #[prost(bool, tag = "32")]
772    pub ignore_health_on_host_removal: bool,
773    /// An (optional) network filter chain, listed in the order the filters should be applied.
774    /// The chain will be applied to all outgoing connections that Envoy makes to the upstream
775    /// servers of this cluster.
776    #[prost(message, repeated, tag = "40")]
777    pub filters: ::prost::alloc::vec::Vec<Filter>,
778    /// If this field is set and is supported by the client, it will supersede the value of
779    /// :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
780    #[prost(message, optional, tag = "41")]
781    pub load_balancing_policy: ::core::option::Option<LoadBalancingPolicy>,
782    /// \[#not-implemented-hide:\]
783    /// If present, tells the client where to send load reports via LRS. If not present, the
784    /// client will fall back to a client-side default, which may be either (a) don't send any
785    /// load reports or (b) send load reports for all clusters to a single default server
786    /// (which may be configured in the bootstrap file).
787    ///
788    /// Note that if multiple clusters point to the same LRS server, the client may choose to
789    /// create a separate stream for each cluster or it may choose to coalesce the data for
790    /// multiple clusters onto a single stream. Either way, the client must make sure to send
791    /// the data for any given cluster on no more than one stream.
792    ///
793    /// [#next-major-version: In the v3 API, we should consider restructuring this somehow,
794    /// maybe by allowing LRS to go on the ADS stream, or maybe by moving some of the negotiation
795    /// from the LRS stream here.]
796    #[prost(message, optional, tag = "42")]
797    pub lrs_server: ::core::option::Option<super::super::core::v3::ConfigSource>,
798    /// If track_timeout_budgets is true, the :ref:`timeout budget histograms
799    /// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
800    /// request. These show what percentage of a request's per try and global timeout was used. A value
801    /// of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value
802    /// of 100 would indicate that the request took the entirety of the timeout given to it.
803    ///
804    /// .. attention::
805    ///
806    ///    This field has been deprecated in favor of ``timeout_budgets``, part of
807    ///    :ref:`track_cluster_stats <envoy_v3_api_field_config.cluster.v3.Cluster.track_cluster_stats>`.
808    #[deprecated]
809    #[prost(bool, tag = "47")]
810    pub track_timeout_budgets: bool,
811    /// Optional customization and configuration of upstream connection pool, and upstream type.
812    ///
813    /// Currently this field only applies for HTTP traffic but is designed for eventual use for custom
814    /// TCP upstreams.
815    ///
816    /// For HTTP traffic, Envoy will generally take downstream HTTP and send it upstream as upstream
817    /// HTTP, using the http connection pool and the codec from ``http2_protocol_options``
818    ///
819    /// For routes where CONNECT termination is configured, Envoy will take downstream CONNECT
820    /// requests and forward the CONNECT payload upstream over raw TCP using the tcp connection pool.
821    ///
822    /// The default pool used is the generic connection pool which creates the HTTP upstream for most
823    /// HTTP requests, and the TCP upstream if CONNECT termination is configured.
824    ///
825    /// If users desire custom connection pool or upstream behavior, for example terminating
826    /// CONNECT only if a custom filter indicates it is appropriate, the custom factories
827    /// can be registered and configured here.
828    /// \[#extension-category: envoy.upstreams\]
829    #[prost(message, optional, tag = "48")]
830    pub upstream_config: ::core::option::Option<
831        super::super::core::v3::TypedExtensionConfig,
832    >,
833    /// Configuration to track optional cluster stats.
834    #[prost(message, optional, tag = "49")]
835    pub track_cluster_stats: ::core::option::Option<TrackClusterStats>,
836    /// Preconnect configuration for this cluster.
837    #[prost(message, optional, tag = "50")]
838    pub preconnect_policy: ::core::option::Option<cluster::PreconnectPolicy>,
839    /// If ``connection_pool_per_downstream_connection`` is true, the cluster will use a separate
840    /// connection pool for every downstream connection
841    #[prost(bool, tag = "51")]
842    pub connection_pool_per_downstream_connection: bool,
843    #[prost(oneof = "cluster::ClusterDiscoveryType", tags = "2, 38")]
844    pub cluster_discovery_type: ::core::option::Option<cluster::ClusterDiscoveryType>,
845    /// Optional configuration for the load balancing algorithm selected by
846    /// LbPolicy. Currently only
847    /// :ref:`RING_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.RING_HASH>`,
848    /// :ref:`MAGLEV<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.MAGLEV>` and
849    /// :ref:`LEAST_REQUEST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.LEAST_REQUEST>`
850    /// has additional configuration options.
851    /// Specifying ring_hash_lb_config or maglev_lb_config or least_request_lb_config without setting the corresponding
852    /// LbPolicy will generate an error at runtime.
853    #[prost(oneof = "cluster::LbConfig", tags = "23, 52, 34, 37, 56")]
854    pub lb_config: ::core::option::Option<cluster::LbConfig>,
855}
856/// Nested message and enum types in `Cluster`.
857pub mod cluster {
858    /// TransportSocketMatch specifies what transport socket config will be used
859    /// when the match conditions are satisfied.
860    #[derive(Clone, PartialEq, ::prost::Message)]
861    pub struct TransportSocketMatch {
862        /// The name of the match, used in stats generation.
863        #[prost(string, tag = "1")]
864        pub name: ::prost::alloc::string::String,
865        /// Optional endpoint metadata match criteria.
866        /// The connection to the endpoint with metadata matching what is set in this field
867        /// will use the transport socket configuration specified here.
868        /// The endpoint's metadata entry in ``envoy.transport_socket_match`` is used to match
869        /// against the values specified in this field.
870        #[prost(message, optional, tag = "2")]
871        pub r#match: ::core::option::Option<
872            super::super::super::super::super::google::protobuf::Struct,
873        >,
874        /// The configuration of the transport socket.
875        /// \[#extension-category: envoy.transport_sockets.upstream\]
876        #[prost(message, optional, tag = "3")]
877        pub transport_socket: ::core::option::Option<
878            super::super::super::core::v3::TransportSocket,
879        >,
880    }
881    impl ::prost::Name for TransportSocketMatch {
882        const NAME: &'static str = "TransportSocketMatch";
883        const PACKAGE: &'static str = "envoy.config.cluster.v3";
884        fn full_name() -> ::prost::alloc::string::String {
885            "envoy.config.cluster.v3.Cluster.TransportSocketMatch".into()
886        }
887        fn type_url() -> ::prost::alloc::string::String {
888            "type.googleapis.com/envoy.config.cluster.v3.Cluster.TransportSocketMatch"
889                .into()
890        }
891    }
892    /// Extended cluster type.
893    #[derive(Clone, PartialEq, ::prost::Message)]
894    pub struct CustomClusterType {
895        /// The type of the cluster to instantiate. The name must match a supported cluster type.
896        #[prost(string, tag = "1")]
897        pub name: ::prost::alloc::string::String,
898        /// Cluster specific configuration which depends on the cluster being instantiated.
899        /// See the supported cluster for further documentation.
900        /// \[#extension-category: envoy.clusters\]
901        #[prost(message, optional, tag = "2")]
902        pub typed_config: ::core::option::Option<
903            super::super::super::super::super::google::protobuf::Any,
904        >,
905    }
906    impl ::prost::Name for CustomClusterType {
907        const NAME: &'static str = "CustomClusterType";
908        const PACKAGE: &'static str = "envoy.config.cluster.v3";
909        fn full_name() -> ::prost::alloc::string::String {
910            "envoy.config.cluster.v3.Cluster.CustomClusterType".into()
911        }
912        fn type_url() -> ::prost::alloc::string::String {
913            "type.googleapis.com/envoy.config.cluster.v3.Cluster.CustomClusterType"
914                .into()
915        }
916    }
917    /// Only valid when discovery type is EDS.
918    #[derive(Clone, PartialEq, ::prost::Message)]
919    pub struct EdsClusterConfig {
920        /// Configuration for the source of EDS updates for this Cluster.
921        #[prost(message, optional, tag = "1")]
922        pub eds_config: ::core::option::Option<
923            super::super::super::core::v3::ConfigSource,
924        >,
925        /// Optional alternative to cluster name to present to EDS. This does not
926        /// have the same restrictions as cluster name, i.e. it may be arbitrary
927        /// length. This may be a xdstp:// URL.
928        #[prost(string, tag = "2")]
929        pub service_name: ::prost::alloc::string::String,
930    }
931    impl ::prost::Name for EdsClusterConfig {
932        const NAME: &'static str = "EdsClusterConfig";
933        const PACKAGE: &'static str = "envoy.config.cluster.v3";
934        fn full_name() -> ::prost::alloc::string::String {
935            "envoy.config.cluster.v3.Cluster.EdsClusterConfig".into()
936        }
937        fn type_url() -> ::prost::alloc::string::String {
938            "type.googleapis.com/envoy.config.cluster.v3.Cluster.EdsClusterConfig".into()
939        }
940    }
941    /// Optionally divide the endpoints in this cluster into subsets defined by
942    /// endpoint metadata and selected by route and weighted cluster metadata.
943    /// \[#next-free-field: 9\]
944    #[derive(Clone, PartialEq, ::prost::Message)]
945    pub struct LbSubsetConfig {
946        /// The behavior used when no endpoint subset matches the selected route's
947        /// metadata. The value defaults to
948        /// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
949        #[prost(enumeration = "lb_subset_config::LbSubsetFallbackPolicy", tag = "1")]
950        pub fallback_policy: i32,
951        /// Specifies the default subset of endpoints used during fallback if
952        /// fallback_policy is
953        /// :ref:`DEFAULT_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
954        /// Each field in default_subset is
955        /// compared to the matching LbEndpoint.Metadata under the ``envoy.lb``
956        /// namespace. It is valid for no hosts to match, in which case the behavior
957        /// is the same as a fallback_policy of
958        /// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
959        #[prost(message, optional, tag = "2")]
960        pub default_subset: ::core::option::Option<
961            super::super::super::super::super::google::protobuf::Struct,
962        >,
963        /// For each entry, LbEndpoint.Metadata's
964        /// ``envoy.lb`` namespace is traversed and a subset is created for each unique
965        /// combination of key and value. For example:
966        ///
967        /// .. code-block:: json
968        ///
969        ///    { "subset_selectors": [
970        ///        { "keys": \[ "version" \] },
971        ///        { "keys": \[ "stage", "hardware_type" \] }
972        ///    ]}
973        ///
974        /// A subset is matched when the metadata from the selected route and
975        /// weighted cluster contains the same keys and values as the subset's
976        /// metadata. The same host may appear in multiple subsets.
977        #[prost(message, repeated, tag = "3")]
978        pub subset_selectors: ::prost::alloc::vec::Vec<
979            lb_subset_config::LbSubsetSelector,
980        >,
981        /// If true, routing to subsets will take into account the localities and locality weights of the
982        /// endpoints when making the routing decision.
983        ///
984        /// There are some potential pitfalls associated with enabling this feature, as the resulting
985        /// traffic split after applying both a subset match and locality weights might be undesirable.
986        ///
987        /// Consider for example a situation in which you have 50/50 split across two localities X/Y
988        /// which have 100 hosts each without subsetting. If the subset LB results in X having only 1
989        /// host selected but Y having 100, then a lot more load is being dumped on the single host in X
990        /// than originally anticipated in the load balancing assignment delivered via EDS.
991        #[prost(bool, tag = "4")]
992        pub locality_weight_aware: bool,
993        /// When used with locality_weight_aware, scales the weight of each locality by the ratio
994        /// of hosts in the subset vs hosts in the original subset. This aims to even out the load
995        /// going to an individual locality if said locality is disproportionately affected by the
996        /// subset predicate.
997        #[prost(bool, tag = "5")]
998        pub scale_locality_weight: bool,
999        /// If true, when a fallback policy is configured and its corresponding subset fails to find
1000        /// a host this will cause any host to be selected instead.
1001        ///
1002        /// This is useful when using the default subset as the fallback policy, given the default
1003        /// subset might become empty. With this option enabled, if that happens the LB will attempt
1004        /// to select a host from the entire cluster.
1005        #[prost(bool, tag = "6")]
1006        pub panic_mode_any: bool,
1007        /// If true, metadata specified for a metadata key will be matched against the corresponding
1008        /// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
1009        /// and any of the elements in the list matches the criteria.
1010        #[prost(bool, tag = "7")]
1011        pub list_as_any: bool,
1012        /// Fallback mechanism that allows to try different route metadata until a host is found.
1013        /// If load balancing process, including all its mechanisms (like
1014        /// :ref:`fallback_policy<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.fallback_policy>`)
1015        /// fails to select a host, this policy decides if and how the process is repeated using another metadata.
1016        ///
1017        /// The value defaults to
1018        /// :ref:`METADATA_NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetMetadataFallbackPolicy.METADATA_NO_FALLBACK>`.
1019        #[prost(
1020            enumeration = "lb_subset_config::LbSubsetMetadataFallbackPolicy",
1021            tag = "8"
1022        )]
1023        pub metadata_fallback_policy: i32,
1024    }
1025    /// Nested message and enum types in `LbSubsetConfig`.
1026    pub mod lb_subset_config {
1027        /// Specifications for subsets.
1028        #[derive(Clone, PartialEq, ::prost::Message)]
1029        pub struct LbSubsetSelector {
1030            /// List of keys to match with the weighted cluster metadata.
1031            #[prost(string, repeated, tag = "1")]
1032            pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1033            /// Selects a mode of operation in which each subset has only one host. This mode uses the same rules for
1034            /// choosing a host, but updating hosts is faster, especially for large numbers of hosts.
1035            ///
1036            /// If a match is found to a host, that host will be used regardless of priority levels.
1037            ///
1038            /// When this mode is enabled, configurations that contain more than one host with the same metadata value for the single key in ``keys``
1039            /// will use only one of the hosts with the given key; no requests will be routed to the others. The cluster gauge
1040            /// :ref:`lb_subsets_single_host_per_subset_duplicate<config_cluster_manager_cluster_stats_subset_lb>` indicates how many duplicates are
1041            /// present in the current configuration.
1042            #[prost(bool, tag = "4")]
1043            pub single_host_per_subset: bool,
1044            /// The behavior used when no endpoint subset matches the selected route's
1045            /// metadata.
1046            #[prost(
1047                enumeration = "lb_subset_selector::LbSubsetSelectorFallbackPolicy",
1048                tag = "2"
1049            )]
1050            pub fallback_policy: i32,
1051            /// Subset of
1052            /// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` used by
1053            /// :ref:`KEYS_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.KEYS_SUBSET>`
1054            /// fallback policy.
1055            /// It has to be a non empty list if KEYS_SUBSET fallback policy is selected.
1056            /// For any other fallback policy the parameter is not used and should not be set.
1057            /// Only values also present in
1058            /// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but
1059            /// ``fallback_keys_subset`` cannot be equal to ``keys``.
1060            #[prost(string, repeated, tag = "3")]
1061            pub fallback_keys_subset: ::prost::alloc::vec::Vec<
1062                ::prost::alloc::string::String,
1063            >,
1064        }
1065        /// Nested message and enum types in `LbSubsetSelector`.
1066        pub mod lb_subset_selector {
1067            /// Allows to override top level fallback policy per selector.
1068            #[derive(
1069                Clone,
1070                Copy,
1071                Debug,
1072                PartialEq,
1073                Eq,
1074                Hash,
1075                PartialOrd,
1076                Ord,
1077                ::prost::Enumeration
1078            )]
1079            #[repr(i32)]
1080            pub enum LbSubsetSelectorFallbackPolicy {
1081                /// If NOT_DEFINED top level config fallback policy is used instead.
1082                NotDefined = 0,
1083                /// If NO_FALLBACK is selected, a result equivalent to no healthy hosts is reported.
1084                NoFallback = 1,
1085                /// If ANY_ENDPOINT is selected, any cluster endpoint may be returned
1086                /// (subject to policy, health checks, etc).
1087                AnyEndpoint = 2,
1088                /// If DEFAULT_SUBSET is selected, load balancing is performed over the
1089                /// endpoints matching the values from the default_subset field.
1090                DefaultSubset = 3,
1091                /// If KEYS_SUBSET is selected, subset selector matching is performed again with metadata
1092                /// keys reduced to
1093                /// :ref:`fallback_keys_subset<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.fallback_keys_subset>`.
1094                /// It allows for a fallback to a different, less specific selector if some of the keys of
1095                /// the selector are considered optional.
1096                KeysSubset = 4,
1097            }
1098            impl LbSubsetSelectorFallbackPolicy {
1099                /// String value of the enum field names used in the ProtoBuf definition.
1100                ///
1101                /// The values are not transformed in any way and thus are considered stable
1102                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1103                pub fn as_str_name(&self) -> &'static str {
1104                    match self {
1105                        Self::NotDefined => "NOT_DEFINED",
1106                        Self::NoFallback => "NO_FALLBACK",
1107                        Self::AnyEndpoint => "ANY_ENDPOINT",
1108                        Self::DefaultSubset => "DEFAULT_SUBSET",
1109                        Self::KeysSubset => "KEYS_SUBSET",
1110                    }
1111                }
1112                /// Creates an enum from field names used in the ProtoBuf definition.
1113                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1114                    match value {
1115                        "NOT_DEFINED" => Some(Self::NotDefined),
1116                        "NO_FALLBACK" => Some(Self::NoFallback),
1117                        "ANY_ENDPOINT" => Some(Self::AnyEndpoint),
1118                        "DEFAULT_SUBSET" => Some(Self::DefaultSubset),
1119                        "KEYS_SUBSET" => Some(Self::KeysSubset),
1120                        _ => None,
1121                    }
1122                }
1123            }
1124        }
1125        impl ::prost::Name for LbSubsetSelector {
1126            const NAME: &'static str = "LbSubsetSelector";
1127            const PACKAGE: &'static str = "envoy.config.cluster.v3";
1128            fn full_name() -> ::prost::alloc::string::String {
1129                "envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector".into()
1130            }
1131            fn type_url() -> ::prost::alloc::string::String {
1132                "type.googleapis.com/envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector"
1133                    .into()
1134            }
1135        }
1136        /// If NO_FALLBACK is selected, a result
1137        /// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected,
1138        /// any cluster endpoint may be returned (subject to policy, health checks,
1139        /// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the
1140        /// endpoints matching the values from the default_subset field.
1141        #[derive(
1142            Clone,
1143            Copy,
1144            Debug,
1145            PartialEq,
1146            Eq,
1147            Hash,
1148            PartialOrd,
1149            Ord,
1150            ::prost::Enumeration
1151        )]
1152        #[repr(i32)]
1153        pub enum LbSubsetFallbackPolicy {
1154            NoFallback = 0,
1155            AnyEndpoint = 1,
1156            DefaultSubset = 2,
1157        }
1158        impl LbSubsetFallbackPolicy {
1159            /// String value of the enum field names used in the ProtoBuf definition.
1160            ///
1161            /// The values are not transformed in any way and thus are considered stable
1162            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1163            pub fn as_str_name(&self) -> &'static str {
1164                match self {
1165                    Self::NoFallback => "NO_FALLBACK",
1166                    Self::AnyEndpoint => "ANY_ENDPOINT",
1167                    Self::DefaultSubset => "DEFAULT_SUBSET",
1168                }
1169            }
1170            /// Creates an enum from field names used in the ProtoBuf definition.
1171            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1172                match value {
1173                    "NO_FALLBACK" => Some(Self::NoFallback),
1174                    "ANY_ENDPOINT" => Some(Self::AnyEndpoint),
1175                    "DEFAULT_SUBSET" => Some(Self::DefaultSubset),
1176                    _ => None,
1177                }
1178            }
1179        }
1180        #[derive(
1181            Clone,
1182            Copy,
1183            Debug,
1184            PartialEq,
1185            Eq,
1186            Hash,
1187            PartialOrd,
1188            Ord,
1189            ::prost::Enumeration
1190        )]
1191        #[repr(i32)]
1192        pub enum LbSubsetMetadataFallbackPolicy {
1193            /// No fallback. Route metadata will be used as-is.
1194            MetadataNoFallback = 0,
1195            /// A special metadata key ``fallback_list`` will be used to provide variants of metadata to try.
1196            /// Value of ``fallback_list`` key has to be a list. Every list element has to be a struct - it will
1197            /// be merged with route metadata, overriding keys that appear in both places.
1198            /// ``fallback_list`` entries will be used in order until a host is found.
1199            ///
1200            /// ``fallback_list`` key itself is removed from metadata before subset load balancing is performed.
1201            ///
1202            /// Example:
1203            ///
1204            /// for metadata:
1205            ///
1206            /// .. code-block:: yaml
1207            ///
1208            ///    version: 1.0
1209            ///    fallback_list:
1210            ///      - version: 2.0
1211            ///        hardware: c64
1212            ///      - hardware: c32
1213            ///      - version: 3.0
1214            ///
1215            /// at first, metadata:
1216            ///
1217            /// .. code-block:: json
1218            ///
1219            ///    {"version": "2.0", "hardware": "c64"}
1220            ///
1221            /// will be used for load balancing. If no host is found, metadata:
1222            ///
1223            /// .. code-block:: json
1224            ///
1225            ///    {"version": "1.0", "hardware": "c32"}
1226            ///
1227            /// is next to try. If it still results in no host, finally metadata:
1228            ///
1229            /// .. code-block:: json
1230            ///
1231            ///    {"version": "3.0"}
1232            ///
1233            /// is used.
1234            FallbackList = 1,
1235        }
1236        impl LbSubsetMetadataFallbackPolicy {
1237            /// String value of the enum field names used in the ProtoBuf definition.
1238            ///
1239            /// The values are not transformed in any way and thus are considered stable
1240            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1241            pub fn as_str_name(&self) -> &'static str {
1242                match self {
1243                    Self::MetadataNoFallback => "METADATA_NO_FALLBACK",
1244                    Self::FallbackList => "FALLBACK_LIST",
1245                }
1246            }
1247            /// Creates an enum from field names used in the ProtoBuf definition.
1248            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1249                match value {
1250                    "METADATA_NO_FALLBACK" => Some(Self::MetadataNoFallback),
1251                    "FALLBACK_LIST" => Some(Self::FallbackList),
1252                    _ => None,
1253                }
1254            }
1255        }
1256    }
1257    impl ::prost::Name for LbSubsetConfig {
1258        const NAME: &'static str = "LbSubsetConfig";
1259        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1260        fn full_name() -> ::prost::alloc::string::String {
1261            "envoy.config.cluster.v3.Cluster.LbSubsetConfig".into()
1262        }
1263        fn type_url() -> ::prost::alloc::string::String {
1264            "type.googleapis.com/envoy.config.cluster.v3.Cluster.LbSubsetConfig".into()
1265        }
1266    }
1267    /// Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
1268    #[derive(Clone, PartialEq, ::prost::Message)]
1269    pub struct SlowStartConfig {
1270        /// Represents the size of slow start window.
1271        /// If set, the newly created host remains in slow start mode starting from its creation time
1272        /// for the duration of slow start window.
1273        #[prost(message, optional, tag = "1")]
1274        pub slow_start_window: ::core::option::Option<
1275            super::super::super::super::super::google::protobuf::Duration,
1276        >,
1277        /// This parameter controls the speed of traffic increase over the slow start window. Defaults to 1.0,
1278        /// so that endpoint would get linearly increasing amount of traffic.
1279        /// When increasing the value for this parameter, the speed of traffic ramp-up increases non-linearly.
1280        /// The value of aggression parameter should be greater than 0.0.
1281        /// By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
1282        ///
1283        /// During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
1284        /// ``new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))``,
1285        /// where ``time_factor=(time_since_start_seconds / slow_start_time_seconds)``.
1286        ///
1287        /// As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
1288        /// Once host exits slow start, time_factor and aggression no longer affect its weight.
1289        #[prost(message, optional, tag = "2")]
1290        pub aggression: ::core::option::Option<
1291            super::super::super::core::v3::RuntimeDouble,
1292        >,
1293        /// Configures the minimum percentage of origin weight that avoids too small new weight,
1294        /// which may cause endpoints in slow start mode receive no traffic in slow start window.
1295        /// If not specified, the default is 10%.
1296        #[prost(message, optional, tag = "3")]
1297        pub min_weight_percent: ::core::option::Option<
1298            super::super::super::super::r#type::v3::Percent,
1299        >,
1300    }
1301    impl ::prost::Name for SlowStartConfig {
1302        const NAME: &'static str = "SlowStartConfig";
1303        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1304        fn full_name() -> ::prost::alloc::string::String {
1305            "envoy.config.cluster.v3.Cluster.SlowStartConfig".into()
1306        }
1307        fn type_url() -> ::prost::alloc::string::String {
1308            "type.googleapis.com/envoy.config.cluster.v3.Cluster.SlowStartConfig".into()
1309        }
1310    }
1311    /// Specific configuration for the RoundRobin load balancing policy.
1312    #[derive(Clone, PartialEq, ::prost::Message)]
1313    pub struct RoundRobinLbConfig {
1314        /// Configuration for slow start mode.
1315        /// If this configuration is not set, slow start will not be not enabled.
1316        #[prost(message, optional, tag = "1")]
1317        pub slow_start_config: ::core::option::Option<SlowStartConfig>,
1318    }
1319    impl ::prost::Name for RoundRobinLbConfig {
1320        const NAME: &'static str = "RoundRobinLbConfig";
1321        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1322        fn full_name() -> ::prost::alloc::string::String {
1323            "envoy.config.cluster.v3.Cluster.RoundRobinLbConfig".into()
1324        }
1325        fn type_url() -> ::prost::alloc::string::String {
1326            "type.googleapis.com/envoy.config.cluster.v3.Cluster.RoundRobinLbConfig"
1327                .into()
1328        }
1329    }
1330    /// Specific configuration for the LeastRequest load balancing policy.
1331    #[derive(Clone, PartialEq, ::prost::Message)]
1332    pub struct LeastRequestLbConfig {
1333        /// The number of random healthy hosts from which the host with the fewest active requests will
1334        /// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
1335        #[prost(message, optional, tag = "1")]
1336        pub choice_count: ::core::option::Option<
1337            super::super::super::super::super::google::protobuf::UInt32Value,
1338        >,
1339        /// The following formula is used to calculate the dynamic weights when hosts have different load
1340        /// balancing weights:
1341        ///
1342        /// ``weight = load_balancing_weight / (active_requests + 1)^active_request_bias``
1343        ///
1344        /// The larger the active request bias is, the more aggressively active requests will lower the
1345        /// effective weight when all host weights are not equal.
1346        ///
1347        /// ``active_request_bias`` must be greater than or equal to 0.0.
1348        ///
1349        /// When ``active_request_bias == 0.0`` the Least Request Load Balancer doesn't consider the number
1350        /// of active requests at the time it picks a host and behaves like the Round Robin Load
1351        /// Balancer.
1352        ///
1353        /// When ``active_request_bias > 0.0`` the Least Request Load Balancer scales the load balancing
1354        /// weight by the number of active requests at the time it does a pick.
1355        ///
1356        /// The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
1357        /// host sets changes, e.g., whenever there is a host membership update or a host load balancing
1358        /// weight change.
1359        ///
1360        /// .. note::
1361        ///    This setting only takes effect if all host weights are not equal.
1362        #[prost(message, optional, tag = "2")]
1363        pub active_request_bias: ::core::option::Option<
1364            super::super::super::core::v3::RuntimeDouble,
1365        >,
1366        /// Configuration for slow start mode.
1367        /// If this configuration is not set, slow start will not be not enabled.
1368        #[prost(message, optional, tag = "3")]
1369        pub slow_start_config: ::core::option::Option<SlowStartConfig>,
1370    }
1371    impl ::prost::Name for LeastRequestLbConfig {
1372        const NAME: &'static str = "LeastRequestLbConfig";
1373        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1374        fn full_name() -> ::prost::alloc::string::String {
1375            "envoy.config.cluster.v3.Cluster.LeastRequestLbConfig".into()
1376        }
1377        fn type_url() -> ::prost::alloc::string::String {
1378            "type.googleapis.com/envoy.config.cluster.v3.Cluster.LeastRequestLbConfig"
1379                .into()
1380        }
1381    }
1382    /// Specific configuration for the :ref:`RingHash<arch_overview_load_balancing_types_ring_hash>`
1383    /// load balancing policy.
1384    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1385    pub struct RingHashLbConfig {
1386        /// Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each
1387        /// provided host) the better the request distribution will reflect the desired weights. Defaults
1388        /// to 1024 entries, and limited to 8M entries. See also
1389        /// :ref:`maximum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.maximum_ring_size>`.
1390        #[prost(message, optional, tag = "1")]
1391        pub minimum_ring_size: ::core::option::Option<
1392            super::super::super::super::super::google::protobuf::UInt64Value,
1393        >,
1394        /// The hash function used to hash hosts onto the ketama ring. The value defaults to
1395        /// :ref:`XX_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH>`.
1396        #[prost(enumeration = "ring_hash_lb_config::HashFunction", tag = "3")]
1397        pub hash_function: i32,
1398        /// Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered
1399        /// to further constrain resource use. See also
1400        /// :ref:`minimum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.minimum_ring_size>`.
1401        #[prost(message, optional, tag = "4")]
1402        pub maximum_ring_size: ::core::option::Option<
1403            super::super::super::super::super::google::protobuf::UInt64Value,
1404        >,
1405    }
1406    /// Nested message and enum types in `RingHashLbConfig`.
1407    pub mod ring_hash_lb_config {
1408        /// The hash function used to hash hosts onto the ketama ring.
1409        #[derive(
1410            Clone,
1411            Copy,
1412            Debug,
1413            PartialEq,
1414            Eq,
1415            Hash,
1416            PartialOrd,
1417            Ord,
1418            ::prost::Enumeration
1419        )]
1420        #[repr(i32)]
1421        pub enum HashFunction {
1422            /// Use `xxHash <<https://github.com/Cyan4973/xxHash>`_,> this is the default hash function.
1423            XxHash = 0,
1424            /// Use `MurmurHash2 <<https://sites.google.com/site/murmurhash/>`_,> this is compatible with
1425            /// std:hash<string> in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled
1426            /// on Linux and not macOS.
1427            MurmurHash2 = 1,
1428        }
1429        impl HashFunction {
1430            /// String value of the enum field names used in the ProtoBuf definition.
1431            ///
1432            /// The values are not transformed in any way and thus are considered stable
1433            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1434            pub fn as_str_name(&self) -> &'static str {
1435                match self {
1436                    Self::XxHash => "XX_HASH",
1437                    Self::MurmurHash2 => "MURMUR_HASH_2",
1438                }
1439            }
1440            /// Creates an enum from field names used in the ProtoBuf definition.
1441            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1442                match value {
1443                    "XX_HASH" => Some(Self::XxHash),
1444                    "MURMUR_HASH_2" => Some(Self::MurmurHash2),
1445                    _ => None,
1446                }
1447            }
1448        }
1449    }
1450    impl ::prost::Name for RingHashLbConfig {
1451        const NAME: &'static str = "RingHashLbConfig";
1452        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1453        fn full_name() -> ::prost::alloc::string::String {
1454            "envoy.config.cluster.v3.Cluster.RingHashLbConfig".into()
1455        }
1456        fn type_url() -> ::prost::alloc::string::String {
1457            "type.googleapis.com/envoy.config.cluster.v3.Cluster.RingHashLbConfig".into()
1458        }
1459    }
1460    /// Specific configuration for the :ref:`Maglev<arch_overview_load_balancing_types_maglev>`
1461    /// load balancing policy.
1462    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1463    pub struct MaglevLbConfig {
1464        /// The table size for Maglev hashing. Maglev aims for "minimal disruption" rather than an absolute guarantee.
1465        /// Minimal disruption means that when the set of upstream hosts change, a connection will likely be sent to the same
1466        /// upstream as it was before. Increasing the table size reduces the amount of disruption.
1467        /// The table size must be prime number limited to 5000011. If it is not specified, the default is 65537.
1468        #[prost(message, optional, tag = "1")]
1469        pub table_size: ::core::option::Option<
1470            super::super::super::super::super::google::protobuf::UInt64Value,
1471        >,
1472    }
1473    impl ::prost::Name for MaglevLbConfig {
1474        const NAME: &'static str = "MaglevLbConfig";
1475        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1476        fn full_name() -> ::prost::alloc::string::String {
1477            "envoy.config.cluster.v3.Cluster.MaglevLbConfig".into()
1478        }
1479        fn type_url() -> ::prost::alloc::string::String {
1480            "type.googleapis.com/envoy.config.cluster.v3.Cluster.MaglevLbConfig".into()
1481        }
1482    }
1483    /// Specific configuration for the
1484    /// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
1485    /// load balancing policy.
1486    /// \[#extension: envoy.clusters.original_dst\]
1487    #[derive(Clone, PartialEq, ::prost::Message)]
1488    pub struct OriginalDstLbConfig {
1489        /// When true, a HTTP header can be used to override the original dst address. The default header is
1490        /// :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>`.
1491        ///
1492        /// .. attention::
1493        ///
1494        ///    This header isn't sanitized by default, so enabling this feature allows HTTP clients to
1495        ///    route traffic to arbitrary hosts and/or ports, which may have serious security
1496        ///    consequences.
1497        ///
1498        /// .. note::
1499        ///
1500        ///    If the header appears multiple times only the first value is used.
1501        #[prost(bool, tag = "1")]
1502        pub use_http_header: bool,
1503        /// The http header to override destination address if :ref:`use_http_header <envoy_v3_api_field_config.cluster.v3.Cluster.OriginalDstLbConfig.use_http_header>`.
1504        /// is set to true. If the value is empty, :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>` will be used.
1505        #[prost(string, tag = "2")]
1506        pub http_header_name: ::prost::alloc::string::String,
1507        /// The port to override for the original dst address. This port
1508        /// will take precedence over filter state and header override ports
1509        #[prost(message, optional, tag = "3")]
1510        pub upstream_port_override: ::core::option::Option<
1511            super::super::super::super::super::google::protobuf::UInt32Value,
1512        >,
1513        /// The dynamic metadata key to override destination address.
1514        /// First the request metadata is considered, then the connection one.
1515        #[prost(message, optional, tag = "4")]
1516        pub metadata_key: ::core::option::Option<
1517            super::super::super::super::r#type::metadata::v3::MetadataKey,
1518        >,
1519    }
1520    impl ::prost::Name for OriginalDstLbConfig {
1521        const NAME: &'static str = "OriginalDstLbConfig";
1522        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1523        fn full_name() -> ::prost::alloc::string::String {
1524            "envoy.config.cluster.v3.Cluster.OriginalDstLbConfig".into()
1525        }
1526        fn type_url() -> ::prost::alloc::string::String {
1527            "type.googleapis.com/envoy.config.cluster.v3.Cluster.OriginalDstLbConfig"
1528                .into()
1529        }
1530    }
1531    /// Common configuration for all load balancer implementations.
1532    /// \[#next-free-field: 9\]
1533    #[derive(Clone, PartialEq, ::prost::Message)]
1534    pub struct CommonLbConfig {
1535        /// Configures the :ref:`healthy panic threshold <arch_overview_load_balancing_panic_threshold>`.
1536        /// If not specified, the default is 50%.
1537        /// To disable panic mode, set to 0%.
1538        ///
1539        /// .. note::
1540        ///    The specified percent will be truncated to the nearest 1%.
1541        #[prost(message, optional, tag = "1")]
1542        pub healthy_panic_threshold: ::core::option::Option<
1543            super::super::super::super::r#type::v3::Percent,
1544        >,
1545        /// If set, all health check/weight/metadata updates that happen within this duration will be
1546        /// merged and delivered in one shot when the duration expires. The start of the duration is when
1547        /// the first update happens. This is useful for big clusters, with potentially noisy deploys
1548        /// that might trigger excessive CPU usage due to a constant stream of healthcheck state changes
1549        /// or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new
1550        /// cluster). Please always keep in mind that the use of sandbox technologies may change this
1551        /// behavior.
1552        ///
1553        /// If this is not set, we default to a merge window of 1000ms. To disable it, set the merge
1554        /// window to 0.
1555        ///
1556        /// Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is
1557        /// because merging those updates isn't currently safe. See
1558        /// <https://github.com/envoyproxy/envoy/pull/3941.>
1559        #[prost(message, optional, tag = "4")]
1560        pub update_merge_window: ::core::option::Option<
1561            super::super::super::super::super::google::protobuf::Duration,
1562        >,
1563        /// If set to true, Envoy will :ref:`exclude <arch_overview_load_balancing_excluded>` new hosts
1564        /// when computing load balancing weights until they have been health checked for the first time.
1565        /// This will have no effect unless active health checking is also configured.
1566        #[prost(bool, tag = "5")]
1567        pub ignore_new_hosts_until_first_hc: bool,
1568        /// If set to ``true``, the cluster manager will drain all existing
1569        /// connections to upstream hosts whenever hosts are added or removed from the cluster.
1570        #[prost(bool, tag = "6")]
1571        pub close_connections_on_host_set_change: bool,
1572        /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
1573        #[prost(message, optional, tag = "7")]
1574        pub consistent_hashing_lb_config: ::core::option::Option<
1575            common_lb_config::ConsistentHashingLbConfig,
1576        >,
1577        /// This controls what hosts are considered valid when using
1578        /// :ref:`host overrides <arch_overview_load_balancing_override_host>`, which is used by some
1579        /// filters to modify the load balancing decision.
1580        ///
1581        /// If this is unset then \[UNKNOWN, HEALTHY, DEGRADED\] will be applied by default. If this is
1582        /// set with an empty set of statuses then host overrides will be ignored by the load balancing.
1583        #[prost(message, optional, tag = "8")]
1584        pub override_host_status: ::core::option::Option<
1585            super::super::super::core::v3::HealthStatusSet,
1586        >,
1587        #[prost(oneof = "common_lb_config::LocalityConfigSpecifier", tags = "2, 3")]
1588        pub locality_config_specifier: ::core::option::Option<
1589            common_lb_config::LocalityConfigSpecifier,
1590        >,
1591    }
1592    /// Nested message and enum types in `CommonLbConfig`.
1593    pub mod common_lb_config {
1594        /// Configuration for :ref:`zone aware routing
1595        /// <arch_overview_load_balancing_zone_aware_routing>`.
1596        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1597        pub struct ZoneAwareLbConfig {
1598            /// Configures percentage of requests that will be considered for zone aware routing
1599            /// if zone aware routing is configured. If not specified, the default is 100%.
1600            /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
1601            /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
1602            #[prost(message, optional, tag = "1")]
1603            pub routing_enabled: ::core::option::Option<
1604                super::super::super::super::super::r#type::v3::Percent,
1605            >,
1606            /// Configures minimum upstream cluster size required for zone aware routing
1607            /// If upstream cluster size is less than specified, zone aware routing is not performed
1608            /// even if zone aware routing is configured. If not specified, the default is 6.
1609            /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
1610            /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
1611            #[prost(message, optional, tag = "2")]
1612            pub min_cluster_size: ::core::option::Option<
1613                super::super::super::super::super::super::google::protobuf::UInt64Value,
1614            >,
1615            /// If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic
1616            /// mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all
1617            /// requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a
1618            /// failing service.
1619            #[prost(bool, tag = "3")]
1620            pub fail_traffic_on_panic: bool,
1621        }
1622        impl ::prost::Name for ZoneAwareLbConfig {
1623            const NAME: &'static str = "ZoneAwareLbConfig";
1624            const PACKAGE: &'static str = "envoy.config.cluster.v3";
1625            fn full_name() -> ::prost::alloc::string::String {
1626                "envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig".into()
1627            }
1628            fn type_url() -> ::prost::alloc::string::String {
1629                "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig"
1630                    .into()
1631            }
1632        }
1633        /// Configuration for :ref:`locality weighted load balancing
1634        /// <arch_overview_load_balancing_locality_weighted_lb>`
1635        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1636        pub struct LocalityWeightedLbConfig {}
1637        impl ::prost::Name for LocalityWeightedLbConfig {
1638            const NAME: &'static str = "LocalityWeightedLbConfig";
1639            const PACKAGE: &'static str = "envoy.config.cluster.v3";
1640            fn full_name() -> ::prost::alloc::string::String {
1641                "envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig"
1642                    .into()
1643            }
1644            fn type_url() -> ::prost::alloc::string::String {
1645                "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig"
1646                    .into()
1647            }
1648        }
1649        /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
1650        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1651        pub struct ConsistentHashingLbConfig {
1652            /// If set to ``true``, the cluster will use hostname instead of the resolved
1653            /// 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.
1654            #[prost(bool, tag = "1")]
1655            pub use_hostname_for_hashing: bool,
1656            /// Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
1657            /// no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
1658            /// If not specified, the load is not bounded for any upstream host. Typical value for this parameter is between 120 and 200.
1659            /// Minimum is 100.
1660            ///
1661            /// Applies to both Ring Hash and Maglev load balancers.
1662            ///
1663            /// This is implemented based on the method described in the paper <https://arxiv.org/abs/1608.01350.> For the specified
1664            /// ``hash_balance_factor``, requests to any upstream host are capped at ``hash_balance_factor/100`` times the average number of requests
1665            /// across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
1666            /// is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
1667            /// the eligible host (this technique is as described in the paper <https://arxiv.org/abs/1908.08762> - the random jump avoids the
1668            /// cascading overflow effect when choosing the next host in the ring/table).
1669            ///
1670            /// If weights are specified on the hosts, they are respected.
1671            ///
1672            /// This is an O(N) algorithm, unlike other load balancers. Using a lower ``hash_balance_factor`` results in more hosts
1673            /// being probed, so use a higher value if you require better performance.
1674            #[prost(message, optional, tag = "2")]
1675            pub hash_balance_factor: ::core::option::Option<
1676                super::super::super::super::super::super::google::protobuf::UInt32Value,
1677            >,
1678        }
1679        impl ::prost::Name for ConsistentHashingLbConfig {
1680            const NAME: &'static str = "ConsistentHashingLbConfig";
1681            const PACKAGE: &'static str = "envoy.config.cluster.v3";
1682            fn full_name() -> ::prost::alloc::string::String {
1683                "envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig"
1684                    .into()
1685            }
1686            fn type_url() -> ::prost::alloc::string::String {
1687                "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig"
1688                    .into()
1689            }
1690        }
1691        #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1692        pub enum LocalityConfigSpecifier {
1693            #[prost(message, tag = "2")]
1694            ZoneAwareLbConfig(ZoneAwareLbConfig),
1695            #[prost(message, tag = "3")]
1696            LocalityWeightedLbConfig(LocalityWeightedLbConfig),
1697        }
1698    }
1699    impl ::prost::Name for CommonLbConfig {
1700        const NAME: &'static str = "CommonLbConfig";
1701        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1702        fn full_name() -> ::prost::alloc::string::String {
1703            "envoy.config.cluster.v3.Cluster.CommonLbConfig".into()
1704        }
1705        fn type_url() -> ::prost::alloc::string::String {
1706            "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig".into()
1707        }
1708    }
1709    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1710    pub struct RefreshRate {
1711        /// Specifies the base interval between refreshes. This parameter is required and must be greater
1712        /// than zero and less than
1713        /// :ref:`max_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.max_interval>`.
1714        #[prost(message, optional, tag = "1")]
1715        pub base_interval: ::core::option::Option<
1716            super::super::super::super::super::google::protobuf::Duration,
1717        >,
1718        /// Specifies the maximum interval between refreshes. This parameter is optional, but must be
1719        /// greater than or equal to the
1720        /// :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>`  if set. The default
1721        /// is 10 times the :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>`.
1722        #[prost(message, optional, tag = "2")]
1723        pub max_interval: ::core::option::Option<
1724            super::super::super::super::super::google::protobuf::Duration,
1725        >,
1726    }
1727    impl ::prost::Name for RefreshRate {
1728        const NAME: &'static str = "RefreshRate";
1729        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1730        fn full_name() -> ::prost::alloc::string::String {
1731            "envoy.config.cluster.v3.Cluster.RefreshRate".into()
1732        }
1733        fn type_url() -> ::prost::alloc::string::String {
1734            "type.googleapis.com/envoy.config.cluster.v3.Cluster.RefreshRate".into()
1735        }
1736    }
1737    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1738    pub struct PreconnectPolicy {
1739        /// Indicates how many streams (rounded up) can be anticipated per-upstream for each
1740        /// incoming stream. This is useful for high-QPS or latency-sensitive services. Preconnecting
1741        /// will only be done if the upstream is healthy and the cluster has traffic.
1742        ///
1743        /// For example if this is 2, for an incoming HTTP/1.1 stream, 2 connections will be
1744        /// established, one for the new incoming stream, and one for a presumed follow-up stream. For
1745        /// HTTP/2, only one connection would be established by default as one connection can
1746        /// serve both the original and presumed follow-up stream.
1747        ///
1748        /// In steady state for non-multiplexed connections a value of 1.5 would mean if there were 100
1749        /// active streams, there would be 100 connections in use, and 50 connections preconnected.
1750        /// This might be a useful value for something like short lived single-use connections,
1751        /// for example proxying HTTP/1.1 if keep-alive were false and each stream resulted in connection
1752        /// termination. It would likely be overkill for long lived connections, such as TCP proxying SMTP
1753        /// or regular HTTP/1.1 with keep-alive. For long lived traffic, a value of 1.05 would be more
1754        /// reasonable, where for every 100 connections, 5 preconnected connections would be in the queue
1755        /// in case of unexpected disconnects where the connection could not be reused.
1756        ///
1757        /// If this value is not set, or set explicitly to one, Envoy will fetch as many connections
1758        /// as needed to serve streams in flight. This means in steady state if a connection is torn down,
1759        /// a subsequent streams will pay an upstream-rtt latency penalty waiting for a new connection.
1760        ///
1761        /// This is limited somewhat arbitrarily to 3 because preconnecting too aggressively can
1762        /// harm latency more than the preconnecting helps.
1763        #[prost(message, optional, tag = "1")]
1764        pub per_upstream_preconnect_ratio: ::core::option::Option<
1765            super::super::super::super::super::google::protobuf::DoubleValue,
1766        >,
1767        /// Indicates how many streams (rounded up) can be anticipated across a cluster for each
1768        /// stream, useful for low QPS services. This is currently supported for a subset of
1769        /// deterministic non-hash-based load-balancing algorithms (weighted round robin, random).
1770        /// Unlike ``per_upstream_preconnect_ratio`` this preconnects across the upstream instances in a
1771        /// cluster, doing best effort predictions of what upstream would be picked next and
1772        /// pre-establishing a connection.
1773        ///
1774        /// Preconnecting will be limited to one preconnect per configured upstream in the cluster and will
1775        /// only be done if there are healthy upstreams and the cluster has traffic.
1776        ///
1777        /// For example if preconnecting is set to 2 for a round robin HTTP/2 cluster, on the first
1778        /// incoming stream, 2 connections will be preconnected - one to the first upstream for this
1779        /// cluster, one to the second on the assumption there will be a follow-up stream.
1780        ///
1781        /// If this value is not set, or set explicitly to one, Envoy will fetch as many connections
1782        /// as needed to serve streams in flight, so during warm up and in steady state if a connection
1783        /// is closed (and per_upstream_preconnect_ratio is not set), there will be a latency hit for
1784        /// connection establishment.
1785        ///
1786        /// If both this and preconnect_ratio are set, Envoy will make sure both predicted needs are met,
1787        /// basically preconnecting max(predictive-preconnect, per-upstream-preconnect), for each
1788        /// upstream.
1789        #[prost(message, optional, tag = "2")]
1790        pub predictive_preconnect_ratio: ::core::option::Option<
1791            super::super::super::super::super::google::protobuf::DoubleValue,
1792        >,
1793    }
1794    impl ::prost::Name for PreconnectPolicy {
1795        const NAME: &'static str = "PreconnectPolicy";
1796        const PACKAGE: &'static str = "envoy.config.cluster.v3";
1797        fn full_name() -> ::prost::alloc::string::String {
1798            "envoy.config.cluster.v3.Cluster.PreconnectPolicy".into()
1799        }
1800        fn type_url() -> ::prost::alloc::string::String {
1801            "type.googleapis.com/envoy.config.cluster.v3.Cluster.PreconnectPolicy".into()
1802        }
1803    }
1804    /// Refer to :ref:`service discovery type <arch_overview_service_discovery_types>`
1805    /// for an explanation on each type.
1806    #[derive(
1807        Clone,
1808        Copy,
1809        Debug,
1810        PartialEq,
1811        Eq,
1812        Hash,
1813        PartialOrd,
1814        Ord,
1815        ::prost::Enumeration
1816    )]
1817    #[repr(i32)]
1818    pub enum DiscoveryType {
1819        /// Refer to the :ref:`static discovery type<arch_overview_service_discovery_types_static>`
1820        /// for an explanation.
1821        Static = 0,
1822        /// Refer to the :ref:`strict DNS discovery
1823        /// type<arch_overview_service_discovery_types_strict_dns>`
1824        /// for an explanation.
1825        StrictDns = 1,
1826        /// Refer to the :ref:`logical DNS discovery
1827        /// type<arch_overview_service_discovery_types_logical_dns>`
1828        /// for an explanation.
1829        LogicalDns = 2,
1830        /// Refer to the :ref:`service discovery type<arch_overview_service_discovery_types_eds>`
1831        /// for an explanation.
1832        Eds = 3,
1833        /// Refer to the :ref:`original destination discovery
1834        /// type<arch_overview_service_discovery_types_original_destination>`
1835        /// for an explanation.
1836        OriginalDst = 4,
1837    }
1838    impl DiscoveryType {
1839        /// String value of the enum field names used in the ProtoBuf definition.
1840        ///
1841        /// The values are not transformed in any way and thus are considered stable
1842        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1843        pub fn as_str_name(&self) -> &'static str {
1844            match self {
1845                Self::Static => "STATIC",
1846                Self::StrictDns => "STRICT_DNS",
1847                Self::LogicalDns => "LOGICAL_DNS",
1848                Self::Eds => "EDS",
1849                Self::OriginalDst => "ORIGINAL_DST",
1850            }
1851        }
1852        /// Creates an enum from field names used in the ProtoBuf definition.
1853        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1854            match value {
1855                "STATIC" => Some(Self::Static),
1856                "STRICT_DNS" => Some(Self::StrictDns),
1857                "LOGICAL_DNS" => Some(Self::LogicalDns),
1858                "EDS" => Some(Self::Eds),
1859                "ORIGINAL_DST" => Some(Self::OriginalDst),
1860                _ => None,
1861            }
1862        }
1863    }
1864    /// Refer to :ref:`load balancer type <arch_overview_load_balancing_types>` architecture
1865    /// overview section for information on each type.
1866    #[derive(
1867        Clone,
1868        Copy,
1869        Debug,
1870        PartialEq,
1871        Eq,
1872        Hash,
1873        PartialOrd,
1874        Ord,
1875        ::prost::Enumeration
1876    )]
1877    #[repr(i32)]
1878    pub enum LbPolicy {
1879        /// Refer to the :ref:`round robin load balancing
1880        /// policy<arch_overview_load_balancing_types_round_robin>`
1881        /// for an explanation.
1882        RoundRobin = 0,
1883        /// Refer to the :ref:`least request load balancing
1884        /// policy<arch_overview_load_balancing_types_least_request>`
1885        /// for an explanation.
1886        LeastRequest = 1,
1887        /// Refer to the :ref:`ring hash load balancing
1888        /// policy<arch_overview_load_balancing_types_ring_hash>`
1889        /// for an explanation.
1890        RingHash = 2,
1891        /// Refer to the :ref:`random load balancing
1892        /// policy<arch_overview_load_balancing_types_random>`
1893        /// for an explanation.
1894        Random = 3,
1895        /// Refer to the :ref:`Maglev load balancing policy<arch_overview_load_balancing_types_maglev>`
1896        /// for an explanation.
1897        Maglev = 5,
1898        /// This load balancer type must be specified if the configured cluster provides a cluster
1899        /// specific load balancer. Consult the configured cluster's documentation for whether to set
1900        /// this option or not.
1901        ClusterProvided = 6,
1902        /// Use the new :ref:`load_balancing_policy
1903        /// <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field to determine the LB policy.
1904        /// This has been deprecated in favor of using the :ref:`load_balancing_policy
1905        /// <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field without
1906        /// setting any value in :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
1907        LoadBalancingPolicyConfig = 7,
1908    }
1909    impl LbPolicy {
1910        /// String value of the enum field names used in the ProtoBuf definition.
1911        ///
1912        /// The values are not transformed in any way and thus are considered stable
1913        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1914        pub fn as_str_name(&self) -> &'static str {
1915            match self {
1916                Self::RoundRobin => "ROUND_ROBIN",
1917                Self::LeastRequest => "LEAST_REQUEST",
1918                Self::RingHash => "RING_HASH",
1919                Self::Random => "RANDOM",
1920                Self::Maglev => "MAGLEV",
1921                Self::ClusterProvided => "CLUSTER_PROVIDED",
1922                Self::LoadBalancingPolicyConfig => "LOAD_BALANCING_POLICY_CONFIG",
1923            }
1924        }
1925        /// Creates an enum from field names used in the ProtoBuf definition.
1926        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1927            match value {
1928                "ROUND_ROBIN" => Some(Self::RoundRobin),
1929                "LEAST_REQUEST" => Some(Self::LeastRequest),
1930                "RING_HASH" => Some(Self::RingHash),
1931                "RANDOM" => Some(Self::Random),
1932                "MAGLEV" => Some(Self::Maglev),
1933                "CLUSTER_PROVIDED" => Some(Self::ClusterProvided),
1934                "LOAD_BALANCING_POLICY_CONFIG" => Some(Self::LoadBalancingPolicyConfig),
1935                _ => None,
1936            }
1937        }
1938    }
1939    /// When V4_ONLY is selected, the DNS resolver will only perform a lookup for
1940    /// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will
1941    /// only perform a lookup for addresses in the IPv6 family. If AUTO is
1942    /// specified, the DNS resolver will first perform a lookup for addresses in
1943    /// the IPv6 family and fallback to a lookup for addresses in the IPv4 family.
1944    /// This is semantically equivalent to a non-existent V6_PREFERRED option.
1945    /// AUTO is a legacy name that is more opaque than
1946    /// necessary and will be deprecated in favor of V6_PREFERRED in a future major version of the API.
1947    /// If V4_PREFERRED is specified, the DNS resolver will first perform a lookup for addresses in the
1948    /// IPv4 family and fallback to a lookup for addresses in the IPv6 family. i.e., the callback
1949    /// target will only get v6 addresses if there were NO v4 addresses to return.
1950    /// If ALL is specified, the DNS resolver will perform a lookup for both IPv4 and IPv6 families,
1951    /// and return all resolved addresses. When this is used, Happy Eyeballs will be enabled for
1952    /// upstream connections. Refer to :ref:`Happy Eyeballs Support <arch_overview_happy_eyeballs>`
1953    /// for more information.
1954    /// For cluster types other than
1955    /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
1956    /// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
1957    /// this setting is
1958    /// ignored.
1959    /// \[#next-major-version: deprecate AUTO in favor of a V6_PREFERRED option.\]
1960    #[derive(
1961        Clone,
1962        Copy,
1963        Debug,
1964        PartialEq,
1965        Eq,
1966        Hash,
1967        PartialOrd,
1968        Ord,
1969        ::prost::Enumeration
1970    )]
1971    #[repr(i32)]
1972    pub enum DnsLookupFamily {
1973        Auto = 0,
1974        V4Only = 1,
1975        V6Only = 2,
1976        V4Preferred = 3,
1977        All = 4,
1978    }
1979    impl DnsLookupFamily {
1980        /// String value of the enum field names used in the ProtoBuf definition.
1981        ///
1982        /// The values are not transformed in any way and thus are considered stable
1983        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1984        pub fn as_str_name(&self) -> &'static str {
1985            match self {
1986                Self::Auto => "AUTO",
1987                Self::V4Only => "V4_ONLY",
1988                Self::V6Only => "V6_ONLY",
1989                Self::V4Preferred => "V4_PREFERRED",
1990                Self::All => "ALL",
1991            }
1992        }
1993        /// Creates an enum from field names used in the ProtoBuf definition.
1994        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1995            match value {
1996                "AUTO" => Some(Self::Auto),
1997                "V4_ONLY" => Some(Self::V4Only),
1998                "V6_ONLY" => Some(Self::V6Only),
1999                "V4_PREFERRED" => Some(Self::V4Preferred),
2000                "ALL" => Some(Self::All),
2001                _ => None,
2002            }
2003        }
2004    }
2005    #[derive(
2006        Clone,
2007        Copy,
2008        Debug,
2009        PartialEq,
2010        Eq,
2011        Hash,
2012        PartialOrd,
2013        Ord,
2014        ::prost::Enumeration
2015    )]
2016    #[repr(i32)]
2017    pub enum ClusterProtocolSelection {
2018        /// Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2).
2019        /// If :ref:`http2_protocol_options <envoy_v3_api_field_config.cluster.v3.Cluster.http2_protocol_options>` are
2020        /// present, HTTP2 will be used, otherwise HTTP1.1 will be used.
2021        UseConfiguredProtocol = 0,
2022        /// Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection.
2023        UseDownstreamProtocol = 1,
2024    }
2025    impl ClusterProtocolSelection {
2026        /// String value of the enum field names used in the ProtoBuf definition.
2027        ///
2028        /// The values are not transformed in any way and thus are considered stable
2029        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2030        pub fn as_str_name(&self) -> &'static str {
2031            match self {
2032                Self::UseConfiguredProtocol => "USE_CONFIGURED_PROTOCOL",
2033                Self::UseDownstreamProtocol => "USE_DOWNSTREAM_PROTOCOL",
2034            }
2035        }
2036        /// Creates an enum from field names used in the ProtoBuf definition.
2037        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2038            match value {
2039                "USE_CONFIGURED_PROTOCOL" => Some(Self::UseConfiguredProtocol),
2040                "USE_DOWNSTREAM_PROTOCOL" => Some(Self::UseDownstreamProtocol),
2041                _ => None,
2042            }
2043        }
2044    }
2045    #[derive(Clone, PartialEq, ::prost::Oneof)]
2046    pub enum ClusterDiscoveryType {
2047        /// The :ref:`service discovery type <arch_overview_service_discovery_types>`
2048        /// to use for resolving the cluster.
2049        #[prost(enumeration = "DiscoveryType", tag = "2")]
2050        Type(i32),
2051        /// The custom cluster type.
2052        #[prost(message, tag = "38")]
2053        ClusterType(CustomClusterType),
2054    }
2055    /// Optional configuration for the load balancing algorithm selected by
2056    /// LbPolicy. Currently only
2057    /// :ref:`RING_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.RING_HASH>`,
2058    /// :ref:`MAGLEV<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.MAGLEV>` and
2059    /// :ref:`LEAST_REQUEST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.LEAST_REQUEST>`
2060    /// has additional configuration options.
2061    /// Specifying ring_hash_lb_config or maglev_lb_config or least_request_lb_config without setting the corresponding
2062    /// LbPolicy will generate an error at runtime.
2063    #[derive(Clone, PartialEq, ::prost::Oneof)]
2064    pub enum LbConfig {
2065        /// Optional configuration for the Ring Hash load balancing policy.
2066        #[prost(message, tag = "23")]
2067        RingHashLbConfig(RingHashLbConfig),
2068        /// Optional configuration for the Maglev load balancing policy.
2069        #[prost(message, tag = "52")]
2070        MaglevLbConfig(MaglevLbConfig),
2071        /// Optional configuration for the Original Destination load balancing policy.
2072        #[prost(message, tag = "34")]
2073        OriginalDstLbConfig(OriginalDstLbConfig),
2074        /// Optional configuration for the LeastRequest load balancing policy.
2075        #[prost(message, tag = "37")]
2076        LeastRequestLbConfig(LeastRequestLbConfig),
2077        /// Optional configuration for the RoundRobin load balancing policy.
2078        #[prost(message, tag = "56")]
2079        RoundRobinLbConfig(RoundRobinLbConfig),
2080    }
2081}
2082impl ::prost::Name for Cluster {
2083    const NAME: &'static str = "Cluster";
2084    const PACKAGE: &'static str = "envoy.config.cluster.v3";
2085    fn full_name() -> ::prost::alloc::string::String {
2086        "envoy.config.cluster.v3.Cluster".into()
2087    }
2088    fn type_url() -> ::prost::alloc::string::String {
2089        "type.googleapis.com/envoy.config.cluster.v3.Cluster".into()
2090    }
2091}
2092/// Extensible load balancing policy configuration.
2093///
2094/// Every LB policy defined via this mechanism will be identified via a unique name using reverse
2095/// DNS notation. If the policy needs configuration parameters, it must define a message for its
2096/// own configuration, which will be stored in the config field. The name of the policy will tell
2097/// clients which type of message they should expect to see in the config field.
2098///
2099/// Note that there are cases where it is useful to be able to independently select LB policies
2100/// for choosing a locality and for choosing an endpoint within that locality. For example, a
2101/// given deployment may always use the same policy to choose the locality, but for choosing the
2102/// endpoint within the locality, some clusters may use weighted-round-robin, while others may
2103/// use some sort of session-based balancing.
2104///
2105/// This can be accomplished via hierarchical LB policies, where the parent LB policy creates a
2106/// child LB policy for each locality. For each request, the parent chooses the locality and then
2107/// delegates to the child policy for that locality to choose the endpoint within the locality.
2108///
2109/// To facilitate this, the config message for the top-level LB policy may include a field of
2110/// type LoadBalancingPolicy that specifies the child policy.
2111#[derive(Clone, PartialEq, ::prost::Message)]
2112pub struct LoadBalancingPolicy {
2113    /// Each client will iterate over the list in order and stop at the first policy that it
2114    /// supports. This provides a mechanism for starting to use new LB policies that are not yet
2115    /// supported by all clients.
2116    #[prost(message, repeated, tag = "1")]
2117    pub policies: ::prost::alloc::vec::Vec<load_balancing_policy::Policy>,
2118}
2119/// Nested message and enum types in `LoadBalancingPolicy`.
2120pub mod load_balancing_policy {
2121    #[derive(Clone, PartialEq, ::prost::Message)]
2122    pub struct Policy {
2123        /// \[#extension-category: envoy.load_balancing_policies\]
2124        #[prost(message, optional, tag = "4")]
2125        pub typed_extension_config: ::core::option::Option<
2126            super::super::super::core::v3::TypedExtensionConfig,
2127        >,
2128    }
2129    impl ::prost::Name for Policy {
2130        const NAME: &'static str = "Policy";
2131        const PACKAGE: &'static str = "envoy.config.cluster.v3";
2132        fn full_name() -> ::prost::alloc::string::String {
2133            "envoy.config.cluster.v3.LoadBalancingPolicy.Policy".into()
2134        }
2135        fn type_url() -> ::prost::alloc::string::String {
2136            "type.googleapis.com/envoy.config.cluster.v3.LoadBalancingPolicy.Policy"
2137                .into()
2138        }
2139    }
2140}
2141impl ::prost::Name for LoadBalancingPolicy {
2142    const NAME: &'static str = "LoadBalancingPolicy";
2143    const PACKAGE: &'static str = "envoy.config.cluster.v3";
2144    fn full_name() -> ::prost::alloc::string::String {
2145        "envoy.config.cluster.v3.LoadBalancingPolicy".into()
2146    }
2147    fn type_url() -> ::prost::alloc::string::String {
2148        "type.googleapis.com/envoy.config.cluster.v3.LoadBalancingPolicy".into()
2149    }
2150}
2151#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2152pub struct UpstreamConnectionOptions {
2153    /// If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
2154    #[prost(message, optional, tag = "1")]
2155    pub tcp_keepalive: ::core::option::Option<super::super::core::v3::TcpKeepalive>,
2156    /// If enabled, associates the interface name of the local address with the upstream connection.
2157    /// This can be used by extensions during processing of requests. The association mechanism is
2158    /// implementation specific. Defaults to false due to performance concerns.
2159    #[prost(bool, tag = "2")]
2160    pub set_local_interface_name_on_upstream_connections: bool,
2161    /// Configurations for happy eyeballs algorithm.
2162    /// Add configs for first_address_family_version and first_address_family_count
2163    /// when sorting destination ip addresses.
2164    #[prost(message, optional, tag = "3")]
2165    pub happy_eyeballs_config: ::core::option::Option<
2166        upstream_connection_options::HappyEyeballsConfig,
2167    >,
2168}
2169/// Nested message and enum types in `UpstreamConnectionOptions`.
2170pub mod upstream_connection_options {
2171    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2172    pub struct HappyEyeballsConfig {
2173        /// Specify the IP address family to attempt connection first in happy
2174        /// eyeballs algorithm according to RFC8305#section-4.
2175        #[prost(enumeration = "FirstAddressFamilyVersion", tag = "1")]
2176        pub first_address_family_version: i32,
2177        /// Specify the number of addresses of the first_address_family_version being
2178        /// attempted for connection before the other address family.
2179        #[prost(message, optional, tag = "2")]
2180        pub first_address_family_count: ::core::option::Option<
2181            super::super::super::super::super::google::protobuf::UInt32Value,
2182        >,
2183    }
2184    impl ::prost::Name for HappyEyeballsConfig {
2185        const NAME: &'static str = "HappyEyeballsConfig";
2186        const PACKAGE: &'static str = "envoy.config.cluster.v3";
2187        fn full_name() -> ::prost::alloc::string::String {
2188            "envoy.config.cluster.v3.UpstreamConnectionOptions.HappyEyeballsConfig"
2189                .into()
2190        }
2191        fn type_url() -> ::prost::alloc::string::String {
2192            "type.googleapis.com/envoy.config.cluster.v3.UpstreamConnectionOptions.HappyEyeballsConfig"
2193                .into()
2194        }
2195    }
2196    #[derive(
2197        Clone,
2198        Copy,
2199        Debug,
2200        PartialEq,
2201        Eq,
2202        Hash,
2203        PartialOrd,
2204        Ord,
2205        ::prost::Enumeration
2206    )]
2207    #[repr(i32)]
2208    pub enum FirstAddressFamilyVersion {
2209        /// respect the native ranking of destination ip addresses returned from dns
2210        /// resolution
2211        Default = 0,
2212        V4 = 1,
2213        V6 = 2,
2214    }
2215    impl FirstAddressFamilyVersion {
2216        /// String value of the enum field names used in the ProtoBuf definition.
2217        ///
2218        /// The values are not transformed in any way and thus are considered stable
2219        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2220        pub fn as_str_name(&self) -> &'static str {
2221            match self {
2222                Self::Default => "DEFAULT",
2223                Self::V4 => "V4",
2224                Self::V6 => "V6",
2225            }
2226        }
2227        /// Creates an enum from field names used in the ProtoBuf definition.
2228        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2229            match value {
2230                "DEFAULT" => Some(Self::Default),
2231                "V4" => Some(Self::V4),
2232                "V6" => Some(Self::V6),
2233                _ => None,
2234            }
2235        }
2236    }
2237}
2238impl ::prost::Name for UpstreamConnectionOptions {
2239    const NAME: &'static str = "UpstreamConnectionOptions";
2240    const PACKAGE: &'static str = "envoy.config.cluster.v3";
2241    fn full_name() -> ::prost::alloc::string::String {
2242        "envoy.config.cluster.v3.UpstreamConnectionOptions".into()
2243    }
2244    fn type_url() -> ::prost::alloc::string::String {
2245        "type.googleapis.com/envoy.config.cluster.v3.UpstreamConnectionOptions".into()
2246    }
2247}
2248#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2249pub struct TrackClusterStats {
2250    /// If timeout_budgets is true, the :ref:`timeout budget histograms
2251    /// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
2252    /// request. These show what percentage of a request's per try and global timeout was used. A value
2253    /// of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value
2254    /// of 100 would indicate that the request took the entirety of the timeout given to it.
2255    #[prost(bool, tag = "1")]
2256    pub timeout_budgets: bool,
2257    /// If request_response_sizes is true, then the :ref:`histograms
2258    /// <config_cluster_manager_cluster_stats_request_response_sizes>`  tracking header and body sizes
2259    /// of requests and responses will be published.
2260    #[prost(bool, tag = "2")]
2261    pub request_response_sizes: bool,
2262    /// If true, some stats will be emitted per-endpoint, similar to the stats in admin ``/clusters``
2263    /// output.
2264    ///
2265    /// This does not currently output correct stats during a hot-restart.
2266    ///
2267    /// This is not currently implemented by all stat sinks.
2268    ///
2269    /// These stats do not honor filtering or tag extraction rules in :ref:`StatsConfig
2270    /// <envoy_v3_api_msg_config.metrics.v3.StatsConfig>` (but fixed-value tags are supported). Admin
2271    /// endpoint filtering is supported.
2272    ///
2273    /// This may not be used at the same time as
2274    /// :ref:`load_stats_config <envoy_v3_api_field_config.bootstrap.v3.ClusterManager.load_stats_config>`.
2275    #[prost(bool, tag = "3")]
2276    pub per_endpoint_stats: bool,
2277}
2278impl ::prost::Name for TrackClusterStats {
2279    const NAME: &'static str = "TrackClusterStats";
2280    const PACKAGE: &'static str = "envoy.config.cluster.v3";
2281    fn full_name() -> ::prost::alloc::string::String {
2282        "envoy.config.cluster.v3.TrackClusterStats".into()
2283    }
2284    fn type_url() -> ::prost::alloc::string::String {
2285        "type.googleapis.com/envoy.config.cluster.v3.TrackClusterStats".into()
2286    }
2287}