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

1// This file is @generated by prost-build.
2/// Message type for extension configuration.
3/// \[#next-major-version: revisit all existing typed_config that doesn't use this wrapper.\].
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct TypedExtensionConfig {
6    /// The name of an extension. This is not used to select the extension, instead
7    /// it serves the role of an opaque identifier.
8    #[prost(string, tag = "1")]
9    pub name: ::prost::alloc::string::String,
10    /// The typed config for the extension. The type URL will be used to identify
11    /// the extension. In the case that the type URL is ``xds.type.v3.TypedStruct``
12    /// (or, for historical reasons, ``udpa.type.v1.TypedStruct``), the inner type
13    /// URL of ``TypedStruct`` will be utilized. See the
14    /// :ref:`extension configuration overview
15    /// <config_overview_extension_configuration>` for further details.
16    #[prost(message, optional, tag = "2")]
17    pub typed_config: ::core::option::Option<
18        super::super::super::super::google::protobuf::Any,
19    >,
20}
21impl ::prost::Name for TypedExtensionConfig {
22    const NAME: &'static str = "TypedExtensionConfig";
23    const PACKAGE: &'static str = "envoy.config.core.v3";
24    fn full_name() -> ::prost::alloc::string::String {
25        "envoy.config.core.v3.TypedExtensionConfig".into()
26    }
27    fn type_url() -> ::prost::alloc::string::String {
28        "type.googleapis.com/envoy.config.core.v3.TypedExtensionConfig".into()
29    }
30}
31/// Generic socket option message. This would be used to set socket options that
32/// might not exist in upstream kernels or precompiled Envoy binaries.
33///
34/// For example:
35///
36/// .. code-block:: json
37///
38///   {
39///     "description": "support tcp keep alive",
40///     "state": 0,
41///     "level": 1,
42///     "name": 9,
43///     "int_value": 1,
44///   }
45///
46/// 1 means SOL_SOCKET and 9 means SO_KEEPALIVE on Linux.
47/// With the above configuration, `TCP Keep-Alives <<https://www.freesoft.org/CIE/RFC/1122/114.htm>`_>
48/// can be enabled in socket with Linux, which can be used in
49/// :ref:`listener's<envoy_v3_api_field_config.listener.v3.Listener.socket_options>` or
50/// :ref:`admin's <envoy_v3_api_field_config.bootstrap.v3.Admin.socket_options>` socket_options etc.
51///
52/// It should be noted that the name or level may have different values on different platforms.
53/// \[#next-free-field: 7\]
54#[derive(Clone, PartialEq, ::prost::Message)]
55pub struct SocketOption {
56    /// An optional name to give this socket option for debugging, etc.
57    /// Uniqueness is not required and no special meaning is assumed.
58    #[prost(string, tag = "1")]
59    pub description: ::prost::alloc::string::String,
60    /// Corresponding to the level value passed to setsockopt, such as IPPROTO_TCP
61    #[prost(int64, tag = "2")]
62    pub level: i64,
63    /// The numeric name as passed to setsockopt
64    #[prost(int64, tag = "3")]
65    pub name: i64,
66    /// The state in which the option will be applied. When used in BindConfig
67    /// STATE_PREBIND is currently the only valid value.
68    #[prost(enumeration = "socket_option::SocketState", tag = "6")]
69    pub state: i32,
70    #[prost(oneof = "socket_option::Value", tags = "4, 5")]
71    pub value: ::core::option::Option<socket_option::Value>,
72}
73/// Nested message and enum types in `SocketOption`.
74pub mod socket_option {
75    #[derive(
76        Clone,
77        Copy,
78        Debug,
79        PartialEq,
80        Eq,
81        Hash,
82        PartialOrd,
83        Ord,
84        ::prost::Enumeration
85    )]
86    #[repr(i32)]
87    pub enum SocketState {
88        /// Socket options are applied after socket creation but before binding the socket to a port
89        StatePrebind = 0,
90        /// Socket options are applied after binding the socket to a port but before calling listen()
91        StateBound = 1,
92        /// Socket options are applied after calling listen()
93        StateListening = 2,
94    }
95    impl SocketState {
96        /// String value of the enum field names used in the ProtoBuf definition.
97        ///
98        /// The values are not transformed in any way and thus are considered stable
99        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
100        pub fn as_str_name(&self) -> &'static str {
101            match self {
102                Self::StatePrebind => "STATE_PREBIND",
103                Self::StateBound => "STATE_BOUND",
104                Self::StateListening => "STATE_LISTENING",
105            }
106        }
107        /// Creates an enum from field names used in the ProtoBuf definition.
108        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
109            match value {
110                "STATE_PREBIND" => Some(Self::StatePrebind),
111                "STATE_BOUND" => Some(Self::StateBound),
112                "STATE_LISTENING" => Some(Self::StateListening),
113                _ => None,
114            }
115        }
116    }
117    #[derive(Clone, PartialEq, ::prost::Oneof)]
118    pub enum Value {
119        /// Because many sockopts take an int value.
120        #[prost(int64, tag = "4")]
121        IntValue(i64),
122        /// Otherwise it's a byte buffer.
123        #[prost(bytes, tag = "5")]
124        BufValue(::prost::alloc::vec::Vec<u8>),
125    }
126}
127impl ::prost::Name for SocketOption {
128    const NAME: &'static str = "SocketOption";
129    const PACKAGE: &'static str = "envoy.config.core.v3";
130    fn full_name() -> ::prost::alloc::string::String {
131        "envoy.config.core.v3.SocketOption".into()
132    }
133    fn type_url() -> ::prost::alloc::string::String {
134        "type.googleapis.com/envoy.config.core.v3.SocketOption".into()
135    }
136}
137#[derive(Clone, PartialEq, ::prost::Message)]
138pub struct SocketOptionsOverride {
139    #[prost(message, repeated, tag = "1")]
140    pub socket_options: ::prost::alloc::vec::Vec<SocketOption>,
141}
142impl ::prost::Name for SocketOptionsOverride {
143    const NAME: &'static str = "SocketOptionsOverride";
144    const PACKAGE: &'static str = "envoy.config.core.v3";
145    fn full_name() -> ::prost::alloc::string::String {
146        "envoy.config.core.v3.SocketOptionsOverride".into()
147    }
148    fn type_url() -> ::prost::alloc::string::String {
149        "type.googleapis.com/envoy.config.core.v3.SocketOptionsOverride".into()
150    }
151}
152#[derive(Clone, PartialEq, ::prost::Message)]
153pub struct Pipe {
154    /// Unix Domain Socket path. On Linux, paths starting with '@' will use the
155    /// abstract namespace. The starting '@' is replaced by a null byte by Envoy.
156    /// Paths starting with '@' will result in an error in environments other than
157    /// Linux.
158    #[prost(string, tag = "1")]
159    pub path: ::prost::alloc::string::String,
160    /// The mode for the Pipe. Not applicable for abstract sockets.
161    #[prost(uint32, tag = "2")]
162    pub mode: u32,
163}
164impl ::prost::Name for Pipe {
165    const NAME: &'static str = "Pipe";
166    const PACKAGE: &'static str = "envoy.config.core.v3";
167    fn full_name() -> ::prost::alloc::string::String {
168        "envoy.config.core.v3.Pipe".into()
169    }
170    fn type_url() -> ::prost::alloc::string::String {
171        "type.googleapis.com/envoy.config.core.v3.Pipe".into()
172    }
173}
174/// The address represents an envoy internal listener.
175/// \[#comment: TODO(asraa): When address available, remove workaround from test/server/server_fuzz_test.cc:30.\]
176#[derive(Clone, PartialEq, ::prost::Message)]
177pub struct EnvoyInternalAddress {
178    /// Specifies an endpoint identifier to distinguish between multiple endpoints for the same internal listener in a
179    /// single upstream pool. Only used in the upstream addresses for tracking changes to individual endpoints. This, for
180    /// example, may be set to the final destination IP for the target internal listener.
181    #[prost(string, tag = "2")]
182    pub endpoint_id: ::prost::alloc::string::String,
183    #[prost(oneof = "envoy_internal_address::AddressNameSpecifier", tags = "1")]
184    pub address_name_specifier: ::core::option::Option<
185        envoy_internal_address::AddressNameSpecifier,
186    >,
187}
188/// Nested message and enum types in `EnvoyInternalAddress`.
189pub mod envoy_internal_address {
190    #[derive(Clone, PartialEq, ::prost::Oneof)]
191    pub enum AddressNameSpecifier {
192        /// Specifies the :ref:`name <envoy_v3_api_field_config.listener.v3.Listener.name>` of the
193        /// internal listener.
194        #[prost(string, tag = "1")]
195        ServerListenerName(::prost::alloc::string::String),
196    }
197}
198impl ::prost::Name for EnvoyInternalAddress {
199    const NAME: &'static str = "EnvoyInternalAddress";
200    const PACKAGE: &'static str = "envoy.config.core.v3";
201    fn full_name() -> ::prost::alloc::string::String {
202        "envoy.config.core.v3.EnvoyInternalAddress".into()
203    }
204    fn type_url() -> ::prost::alloc::string::String {
205        "type.googleapis.com/envoy.config.core.v3.EnvoyInternalAddress".into()
206    }
207}
208/// \[#next-free-field: 7\]
209#[derive(Clone, PartialEq, ::prost::Message)]
210pub struct SocketAddress {
211    #[prost(enumeration = "socket_address::Protocol", tag = "1")]
212    pub protocol: i32,
213    /// The address for this socket. :ref:`Listeners <config_listeners>` will bind
214    /// to the address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::``
215    /// to bind to any address. [#comment:TODO(zuercher) reinstate when implemented:
216    /// It is possible to distinguish a Listener address via the prefix/suffix matching
217    /// in :ref:`FilterChainMatch <envoy_v3_api_msg_config.listener.v3.FilterChainMatch>`.] When used
218    /// within an upstream :ref:`BindConfig <envoy_v3_api_msg_config.core.v3.BindConfig>`, the address
219    /// controls the source address of outbound connections. For :ref:`clusters
220    /// <envoy_v3_api_msg_config.cluster.v3.Cluster>`, the cluster type determines whether the
221    /// address must be an IP (``STATIC`` or ``EDS`` clusters) or a hostname resolved by DNS
222    /// (``STRICT_DNS`` or ``LOGICAL_DNS`` clusters). Address resolution can be customized
223    /// via :ref:`resolver_name <envoy_v3_api_field_config.core.v3.SocketAddress.resolver_name>`.
224    #[prost(string, tag = "2")]
225    pub address: ::prost::alloc::string::String,
226    /// The name of the custom resolver. This must have been registered with Envoy. If
227    /// this is empty, a context dependent default applies. If the address is a concrete
228    /// IP address, no resolution will occur. If address is a hostname this
229    /// should be set for resolution other than DNS. Specifying a custom resolver with
230    /// ``STRICT_DNS`` or ``LOGICAL_DNS`` will generate an error at runtime.
231    #[prost(string, tag = "5")]
232    pub resolver_name: ::prost::alloc::string::String,
233    /// When binding to an IPv6 address above, this enables `IPv4 compatibility
234    /// <<https://tools.ietf.org/html/rfc3493#page-11>`_.> Binding to ``::`` will
235    /// allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into
236    /// IPv6 space as ``::FFFF:<IPv4-address>``.
237    #[prost(bool, tag = "6")]
238    pub ipv4_compat: bool,
239    #[prost(oneof = "socket_address::PortSpecifier", tags = "3, 4")]
240    pub port_specifier: ::core::option::Option<socket_address::PortSpecifier>,
241}
242/// Nested message and enum types in `SocketAddress`.
243pub mod socket_address {
244    #[derive(
245        Clone,
246        Copy,
247        Debug,
248        PartialEq,
249        Eq,
250        Hash,
251        PartialOrd,
252        Ord,
253        ::prost::Enumeration
254    )]
255    #[repr(i32)]
256    pub enum Protocol {
257        Tcp = 0,
258        Udp = 1,
259    }
260    impl Protocol {
261        /// String value of the enum field names used in the ProtoBuf definition.
262        ///
263        /// The values are not transformed in any way and thus are considered stable
264        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
265        pub fn as_str_name(&self) -> &'static str {
266            match self {
267                Self::Tcp => "TCP",
268                Self::Udp => "UDP",
269            }
270        }
271        /// Creates an enum from field names used in the ProtoBuf definition.
272        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
273            match value {
274                "TCP" => Some(Self::Tcp),
275                "UDP" => Some(Self::Udp),
276                _ => None,
277            }
278        }
279    }
280    #[derive(Clone, PartialEq, ::prost::Oneof)]
281    pub enum PortSpecifier {
282        #[prost(uint32, tag = "3")]
283        PortValue(u32),
284        /// This is only valid if :ref:`resolver_name
285        /// <envoy_v3_api_field_config.core.v3.SocketAddress.resolver_name>` is specified below and the
286        /// named resolver is capable of named port resolution.
287        #[prost(string, tag = "4")]
288        NamedPort(::prost::alloc::string::String),
289    }
290}
291impl ::prost::Name for SocketAddress {
292    const NAME: &'static str = "SocketAddress";
293    const PACKAGE: &'static str = "envoy.config.core.v3";
294    fn full_name() -> ::prost::alloc::string::String {
295        "envoy.config.core.v3.SocketAddress".into()
296    }
297    fn type_url() -> ::prost::alloc::string::String {
298        "type.googleapis.com/envoy.config.core.v3.SocketAddress".into()
299    }
300}
301#[derive(Clone, Copy, PartialEq, ::prost::Message)]
302pub struct TcpKeepalive {
303    /// Maximum number of keepalive probes to send without response before deciding
304    /// the connection is dead. Default is to use the OS level configuration (unless
305    /// overridden, Linux defaults to 9.)
306    #[prost(message, optional, tag = "1")]
307    pub keepalive_probes: ::core::option::Option<
308        super::super::super::super::google::protobuf::UInt32Value,
309    >,
310    /// The number of seconds a connection needs to be idle before keep-alive probes
311    /// start being sent. Default is to use the OS level configuration (unless
312    /// overridden, Linux defaults to 7200s (i.e., 2 hours.)
313    #[prost(message, optional, tag = "2")]
314    pub keepalive_time: ::core::option::Option<
315        super::super::super::super::google::protobuf::UInt32Value,
316    >,
317    /// The number of seconds between keep-alive probes. Default is to use the OS
318    /// level configuration (unless overridden, Linux defaults to 75s.)
319    #[prost(message, optional, tag = "3")]
320    pub keepalive_interval: ::core::option::Option<
321        super::super::super::super::google::protobuf::UInt32Value,
322    >,
323}
324impl ::prost::Name for TcpKeepalive {
325    const NAME: &'static str = "TcpKeepalive";
326    const PACKAGE: &'static str = "envoy.config.core.v3";
327    fn full_name() -> ::prost::alloc::string::String {
328        "envoy.config.core.v3.TcpKeepalive".into()
329    }
330    fn type_url() -> ::prost::alloc::string::String {
331        "type.googleapis.com/envoy.config.core.v3.TcpKeepalive".into()
332    }
333}
334#[derive(Clone, PartialEq, ::prost::Message)]
335pub struct ExtraSourceAddress {
336    /// The additional address to bind.
337    #[prost(message, optional, tag = "1")]
338    pub address: ::core::option::Option<SocketAddress>,
339    /// Additional socket options that may not be present in Envoy source code or
340    /// precompiled binaries. If specified, this will override the
341    /// :ref:`socket_options <envoy_v3_api_field_config.core.v3.BindConfig.socket_options>`
342    /// in the BindConfig. If specified with no
343    /// :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`
344    /// or an empty list of :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`,
345    /// it means no socket option will apply.
346    #[prost(message, optional, tag = "2")]
347    pub socket_options: ::core::option::Option<SocketOptionsOverride>,
348}
349impl ::prost::Name for ExtraSourceAddress {
350    const NAME: &'static str = "ExtraSourceAddress";
351    const PACKAGE: &'static str = "envoy.config.core.v3";
352    fn full_name() -> ::prost::alloc::string::String {
353        "envoy.config.core.v3.ExtraSourceAddress".into()
354    }
355    fn type_url() -> ::prost::alloc::string::String {
356        "type.googleapis.com/envoy.config.core.v3.ExtraSourceAddress".into()
357    }
358}
359/// \[#next-free-field: 7\]
360#[derive(Clone, PartialEq, ::prost::Message)]
361pub struct BindConfig {
362    /// The address to bind to when creating a socket.
363    #[prost(message, optional, tag = "1")]
364    pub source_address: ::core::option::Option<SocketAddress>,
365    /// Whether to set the ``IP_FREEBIND`` option when creating the socket. When this
366    /// flag is set to true, allows the :ref:`source_address
367    /// <envoy_v3_api_field_config.core.v3.BindConfig.source_address>` to be an IP address
368    /// that is not configured on the system running Envoy. When this flag is set
369    /// to false, the option ``IP_FREEBIND`` is disabled on the socket. When this
370    /// flag is not set (default), the socket is not modified, i.e. the option is
371    /// neither enabled nor disabled.
372    #[prost(message, optional, tag = "2")]
373    pub freebind: ::core::option::Option<
374        super::super::super::super::google::protobuf::BoolValue,
375    >,
376    /// Additional socket options that may not be present in Envoy source code or
377    /// precompiled binaries.
378    #[prost(message, repeated, tag = "3")]
379    pub socket_options: ::prost::alloc::vec::Vec<SocketOption>,
380    /// Extra source addresses appended to the address specified in the ``source_address``
381    /// field. This enables to specify multiple source addresses.
382    /// The source address selection is determined by :ref:`local_address_selector
383    /// <envoy_v3_api_field_config.core.v3.BindConfig.local_address_selector>`.
384    #[prost(message, repeated, tag = "5")]
385    pub extra_source_addresses: ::prost::alloc::vec::Vec<ExtraSourceAddress>,
386    /// Deprecated by
387    /// :ref:`extra_source_addresses <envoy_v3_api_field_config.core.v3.BindConfig.extra_source_addresses>`
388    #[deprecated]
389    #[prost(message, repeated, tag = "4")]
390    pub additional_source_addresses: ::prost::alloc::vec::Vec<SocketAddress>,
391    /// Custom local address selector to override the default (i.e.
392    /// :ref:`DefaultLocalAddressSelector
393    /// <envoy_v3_api_msg_config.upstream.local_address_selector.v3.DefaultLocalAddressSelector>`).
394    /// \[#extension-category: envoy.upstream.local_address_selector\]
395    #[prost(message, optional, tag = "6")]
396    pub local_address_selector: ::core::option::Option<TypedExtensionConfig>,
397}
398impl ::prost::Name for BindConfig {
399    const NAME: &'static str = "BindConfig";
400    const PACKAGE: &'static str = "envoy.config.core.v3";
401    fn full_name() -> ::prost::alloc::string::String {
402        "envoy.config.core.v3.BindConfig".into()
403    }
404    fn type_url() -> ::prost::alloc::string::String {
405        "type.googleapis.com/envoy.config.core.v3.BindConfig".into()
406    }
407}
408/// Addresses specify either a logical or physical address and port, which are
409/// used to tell Envoy where to bind/listen, connect to upstream and find
410/// management servers.
411#[derive(Clone, PartialEq, ::prost::Message)]
412pub struct Address {
413    #[prost(oneof = "address::Address", tags = "1, 2, 3")]
414    pub address: ::core::option::Option<address::Address>,
415}
416/// Nested message and enum types in `Address`.
417pub mod address {
418    #[derive(Clone, PartialEq, ::prost::Oneof)]
419    pub enum Address {
420        #[prost(message, tag = "1")]
421        SocketAddress(super::SocketAddress),
422        #[prost(message, tag = "2")]
423        Pipe(super::Pipe),
424        /// Specifies a user-space address handled by :ref:`internal listeners
425        /// <envoy_v3_api_field_config.listener.v3.Listener.internal_listener>`.
426        #[prost(message, tag = "3")]
427        EnvoyInternalAddress(super::EnvoyInternalAddress),
428    }
429}
430impl ::prost::Name for Address {
431    const NAME: &'static str = "Address";
432    const PACKAGE: &'static str = "envoy.config.core.v3";
433    fn full_name() -> ::prost::alloc::string::String {
434        "envoy.config.core.v3.Address".into()
435    }
436    fn type_url() -> ::prost::alloc::string::String {
437        "type.googleapis.com/envoy.config.core.v3.Address".into()
438    }
439}
440/// CidrRange specifies an IP Address and a prefix length to construct
441/// the subnet mask for a `CIDR <<https://tools.ietf.org/html/rfc4632>`_> range.
442#[derive(Clone, PartialEq, ::prost::Message)]
443pub struct CidrRange {
444    /// IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``.
445    #[prost(string, tag = "1")]
446    pub address_prefix: ::prost::alloc::string::String,
447    /// Length of prefix, e.g. 0, 32. Defaults to 0 when unset.
448    #[prost(message, optional, tag = "2")]
449    pub prefix_len: ::core::option::Option<
450        super::super::super::super::google::protobuf::UInt32Value,
451    >,
452}
453impl ::prost::Name for CidrRange {
454    const NAME: &'static str = "CidrRange";
455    const PACKAGE: &'static str = "envoy.config.core.v3";
456    fn full_name() -> ::prost::alloc::string::String {
457        "envoy.config.core.v3.CidrRange".into()
458    }
459    fn type_url() -> ::prost::alloc::string::String {
460        "type.googleapis.com/envoy.config.core.v3.CidrRange".into()
461    }
462}
463/// Configuration defining a jittered exponential back off strategy.
464#[derive(Clone, Copy, PartialEq, ::prost::Message)]
465pub struct BackoffStrategy {
466    /// The base interval to be used for the next back off computation. It should
467    /// be greater than zero and less than or equal to :ref:`max_interval
468    /// <envoy_v3_api_field_config.core.v3.BackoffStrategy.max_interval>`.
469    #[prost(message, optional, tag = "1")]
470    pub base_interval: ::core::option::Option<
471        super::super::super::super::google::protobuf::Duration,
472    >,
473    /// Specifies the maximum interval between retries. This parameter is optional,
474    /// but must be greater than or equal to the :ref:`base_interval
475    /// <envoy_v3_api_field_config.core.v3.BackoffStrategy.base_interval>` if set. The default
476    /// is 10 times the :ref:`base_interval
477    /// <envoy_v3_api_field_config.core.v3.BackoffStrategy.base_interval>`.
478    #[prost(message, optional, tag = "2")]
479    pub max_interval: ::core::option::Option<
480        super::super::super::super::google::protobuf::Duration,
481    >,
482}
483impl ::prost::Name for BackoffStrategy {
484    const NAME: &'static str = "BackoffStrategy";
485    const PACKAGE: &'static str = "envoy.config.core.v3";
486    fn full_name() -> ::prost::alloc::string::String {
487        "envoy.config.core.v3.BackoffStrategy".into()
488    }
489    fn type_url() -> ::prost::alloc::string::String {
490        "type.googleapis.com/envoy.config.core.v3.BackoffStrategy".into()
491    }
492}
493/// Envoy external URI descriptor
494#[derive(Clone, PartialEq, ::prost::Message)]
495pub struct HttpUri {
496    /// The HTTP server URI. It should be a full FQDN with protocol, host and path.
497    ///
498    /// Example:
499    ///
500    /// .. code-block:: yaml
501    ///
502    ///     uri: <https://www.googleapis.com/oauth2/v1/certs>
503    ///
504    #[prost(string, tag = "1")]
505    pub uri: ::prost::alloc::string::String,
506    /// Sets the maximum duration in milliseconds that a response can take to arrive upon request.
507    #[prost(message, optional, tag = "3")]
508    pub timeout: ::core::option::Option<
509        super::super::super::super::google::protobuf::Duration,
510    >,
511    /// Specify how ``uri`` is to be fetched. Today, this requires an explicit
512    /// cluster, but in the future we may support dynamic cluster creation or
513    /// inline DNS resolution. See `issue
514    /// <<https://github.com/envoyproxy/envoy/issues/1606>`_.>
515    #[prost(oneof = "http_uri::HttpUpstreamType", tags = "2")]
516    pub http_upstream_type: ::core::option::Option<http_uri::HttpUpstreamType>,
517}
518/// Nested message and enum types in `HttpUri`.
519pub mod http_uri {
520    /// Specify how ``uri`` is to be fetched. Today, this requires an explicit
521    /// cluster, but in the future we may support dynamic cluster creation or
522    /// inline DNS resolution. See `issue
523    /// <<https://github.com/envoyproxy/envoy/issues/1606>`_.>
524    #[derive(Clone, PartialEq, ::prost::Oneof)]
525    pub enum HttpUpstreamType {
526        /// A cluster is created in the Envoy "cluster_manager" config
527        /// section. This field specifies the cluster name.
528        ///
529        /// Example:
530        ///
531        /// .. code-block:: yaml
532        ///
533        ///     cluster: jwks_cluster
534        ///
535        #[prost(string, tag = "2")]
536        Cluster(::prost::alloc::string::String),
537    }
538}
539impl ::prost::Name for HttpUri {
540    const NAME: &'static str = "HttpUri";
541    const PACKAGE: &'static str = "envoy.config.core.v3";
542    fn full_name() -> ::prost::alloc::string::String {
543        "envoy.config.core.v3.HttpUri".into()
544    }
545    fn type_url() -> ::prost::alloc::string::String {
546        "type.googleapis.com/envoy.config.core.v3.HttpUri".into()
547    }
548}
549/// Identifies location of where either Envoy runs or where upstream hosts run.
550#[derive(Clone, PartialEq, ::prost::Message)]
551pub struct Locality {
552    /// Region this :ref:`zone <envoy_v3_api_field_config.core.v3.Locality.zone>` belongs to.
553    #[prost(string, tag = "1")]
554    pub region: ::prost::alloc::string::String,
555    /// Defines the local service zone where Envoy is running. Though optional, it
556    /// should be set if discovery service routing is used and the discovery
557    /// service exposes :ref:`zone data <envoy_v3_api_field_config.endpoint.v3.LocalityLbEndpoints.locality>`,
558    /// either in this message or via :option:`--service-zone`. The meaning of zone
559    /// is context dependent, e.g. `Availability Zone (AZ)
560    /// <<https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html>`_>
561    /// on AWS, `Zone <<https://cloud.google.com/compute/docs/regions-zones/>`_> on
562    /// GCP, etc.
563    #[prost(string, tag = "2")]
564    pub zone: ::prost::alloc::string::String,
565    /// When used for locality of upstream hosts, this field further splits zone
566    /// into smaller chunks of sub-zones so they can be load balanced
567    /// independently.
568    #[prost(string, tag = "3")]
569    pub sub_zone: ::prost::alloc::string::String,
570}
571impl ::prost::Name for Locality {
572    const NAME: &'static str = "Locality";
573    const PACKAGE: &'static str = "envoy.config.core.v3";
574    fn full_name() -> ::prost::alloc::string::String {
575        "envoy.config.core.v3.Locality".into()
576    }
577    fn type_url() -> ::prost::alloc::string::String {
578        "type.googleapis.com/envoy.config.core.v3.Locality".into()
579    }
580}
581/// BuildVersion combines SemVer version of extension with free-form build information
582/// (i.e. 'alpha', 'private-build') as a set of strings.
583#[derive(Clone, PartialEq, ::prost::Message)]
584pub struct BuildVersion {
585    /// SemVer version of extension.
586    #[prost(message, optional, tag = "1")]
587    pub version: ::core::option::Option<
588        super::super::super::r#type::v3::SemanticVersion,
589    >,
590    /// Free-form build information.
591    /// Envoy defines several well known keys in the source/common/version/version.h file
592    #[prost(message, optional, tag = "2")]
593    pub metadata: ::core::option::Option<
594        super::super::super::super::google::protobuf::Struct,
595    >,
596}
597impl ::prost::Name for BuildVersion {
598    const NAME: &'static str = "BuildVersion";
599    const PACKAGE: &'static str = "envoy.config.core.v3";
600    fn full_name() -> ::prost::alloc::string::String {
601        "envoy.config.core.v3.BuildVersion".into()
602    }
603    fn type_url() -> ::prost::alloc::string::String {
604        "type.googleapis.com/envoy.config.core.v3.BuildVersion".into()
605    }
606}
607/// Version and identification for an Envoy extension.
608/// \[#next-free-field: 7\]
609#[derive(Clone, PartialEq, ::prost::Message)]
610pub struct Extension {
611    /// This is the name of the Envoy filter as specified in the Envoy
612    /// configuration, e.g. envoy.filters.http.router, com.acme.widget.
613    #[prost(string, tag = "1")]
614    pub name: ::prost::alloc::string::String,
615    /// Category of the extension.
616    /// Extension category names use reverse DNS notation. For instance "envoy.filters.listener"
617    /// for Envoy's built-in listener filters or "com.acme.filters.http" for HTTP filters from
618    /// acme.com vendor.
619    /// \[#comment:TODO(yanavlasov): Link to the doc with existing envoy category names.\]
620    #[prost(string, tag = "2")]
621    pub category: ::prost::alloc::string::String,
622    /// \[#not-implemented-hide:\] Type descriptor of extension configuration proto.
623    /// \[#comment:TODO(yanavlasov): Link to the doc with existing configuration protos.\]
624    /// \[#comment:TODO(yanavlasov): Add tests when PR #9391 lands.\]
625    #[deprecated]
626    #[prost(string, tag = "3")]
627    pub type_descriptor: ::prost::alloc::string::String,
628    /// The version is a property of the extension and maintained independently
629    /// of other extensions and the Envoy API.
630    /// This field is not set when extension did not provide version information.
631    #[prost(message, optional, tag = "4")]
632    pub version: ::core::option::Option<BuildVersion>,
633    /// Indicates that the extension is present but was disabled via dynamic configuration.
634    #[prost(bool, tag = "5")]
635    pub disabled: bool,
636    /// Type URLs of extension configuration protos.
637    #[prost(string, repeated, tag = "6")]
638    pub type_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
639}
640impl ::prost::Name for Extension {
641    const NAME: &'static str = "Extension";
642    const PACKAGE: &'static str = "envoy.config.core.v3";
643    fn full_name() -> ::prost::alloc::string::String {
644        "envoy.config.core.v3.Extension".into()
645    }
646    fn type_url() -> ::prost::alloc::string::String {
647        "type.googleapis.com/envoy.config.core.v3.Extension".into()
648    }
649}
650/// Identifies a specific Envoy instance. The node identifier is presented to the
651/// management server, which may use this identifier to distinguish per Envoy
652/// configuration for serving.
653/// \[#next-free-field: 13\]
654#[derive(Clone, PartialEq, ::prost::Message)]
655pub struct Node {
656    /// An opaque node identifier for the Envoy node. This also provides the local
657    /// service node name. It should be set if any of the following features are
658    /// used: :ref:`statsd <arch_overview_statistics>`, :ref:`CDS
659    /// <config_cluster_manager_cds>`, and :ref:`HTTP tracing
660    /// <arch_overview_tracing>`, either in this message or via
661    /// :option:`--service-node`.
662    #[prost(string, tag = "1")]
663    pub id: ::prost::alloc::string::String,
664    /// Defines the local service cluster name where Envoy is running. Though
665    /// optional, it should be set if any of the following features are used:
666    /// :ref:`statsd <arch_overview_statistics>`, :ref:`health check cluster
667    /// verification
668    /// <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.service_name_matcher>`,
669    /// :ref:`runtime override directory <envoy_v3_api_msg_config.bootstrap.v3.Runtime>`,
670    /// :ref:`user agent addition
671    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.add_user_agent>`,
672    /// :ref:`HTTP global rate limiting <config_http_filters_rate_limit>`,
673    /// :ref:`CDS <config_cluster_manager_cds>`, and :ref:`HTTP tracing
674    /// <arch_overview_tracing>`, either in this message or via
675    /// :option:`--service-cluster`.
676    #[prost(string, tag = "2")]
677    pub cluster: ::prost::alloc::string::String,
678    /// Opaque metadata extending the node identifier. Envoy will pass this
679    /// directly to the management server.
680    #[prost(message, optional, tag = "3")]
681    pub metadata: ::core::option::Option<
682        super::super::super::super::google::protobuf::Struct,
683    >,
684    /// Map from xDS resource type URL to dynamic context parameters. These may vary at runtime (unlike
685    /// other fields in this message). For example, the xDS client may have a shard identifier that
686    /// changes during the lifetime of the xDS client. In Envoy, this would be achieved by updating the
687    /// dynamic context on the Server::Instance's LocalInfo context provider. The shard ID dynamic
688    /// parameter then appears in this field during future discovery requests.
689    #[prost(map = "string, message", tag = "12")]
690    pub dynamic_parameters: ::std::collections::HashMap<
691        ::prost::alloc::string::String,
692        super::super::super::super::xds::core::v3::ContextParams,
693    >,
694    /// Locality specifying where the Envoy instance is running.
695    #[prost(message, optional, tag = "4")]
696    pub locality: ::core::option::Option<Locality>,
697    /// Free-form string that identifies the entity requesting config.
698    /// E.g. "envoy" or "grpc"
699    #[prost(string, tag = "6")]
700    pub user_agent_name: ::prost::alloc::string::String,
701    /// List of extensions and their versions supported by the node.
702    #[prost(message, repeated, tag = "9")]
703    pub extensions: ::prost::alloc::vec::Vec<Extension>,
704    /// Client feature support list. These are well known features described
705    /// in the Envoy API repository for a given major version of an API. Client features
706    /// use reverse DNS naming scheme, for example ``com.acme.feature``.
707    /// See :ref:`the list of features <client_features>` that xDS client may
708    /// support.
709    #[prost(string, repeated, tag = "10")]
710    pub client_features: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
711    /// Known listening ports on the node as a generic hint to the management server
712    /// for filtering :ref:`listeners <config_listeners>` to be returned. For example,
713    /// if there is a listener bound to port 80, the list can optionally contain the
714    /// SocketAddress ``(0.0.0.0,80)``. The field is optional and just a hint.
715    #[deprecated]
716    #[prost(message, repeated, tag = "11")]
717    pub listening_addresses: ::prost::alloc::vec::Vec<Address>,
718    #[prost(oneof = "node::UserAgentVersionType", tags = "7, 8")]
719    pub user_agent_version_type: ::core::option::Option<node::UserAgentVersionType>,
720}
721/// Nested message and enum types in `Node`.
722pub mod node {
723    #[derive(Clone, PartialEq, ::prost::Oneof)]
724    pub enum UserAgentVersionType {
725        /// Free-form string that identifies the version of the entity requesting config.
726        /// E.g. "1.12.2" or "abcd1234", or "SpecialEnvoyBuild"
727        #[prost(string, tag = "7")]
728        UserAgentVersion(::prost::alloc::string::String),
729        /// Structured version of the entity requesting config.
730        #[prost(message, tag = "8")]
731        UserAgentBuildVersion(super::BuildVersion),
732    }
733}
734impl ::prost::Name for Node {
735    const NAME: &'static str = "Node";
736    const PACKAGE: &'static str = "envoy.config.core.v3";
737    fn full_name() -> ::prost::alloc::string::String {
738        "envoy.config.core.v3.Node".into()
739    }
740    fn type_url() -> ::prost::alloc::string::String {
741        "type.googleapis.com/envoy.config.core.v3.Node".into()
742    }
743}
744/// Metadata provides additional inputs to filters based on matched listeners,
745/// filter chains, routes and endpoints. It is structured as a map, usually from
746/// filter name (in reverse DNS format) to metadata specific to the filter. Metadata
747/// key-values for a filter are merged as connection and request handling occurs,
748/// with later values for the same key overriding earlier values.
749///
750/// An example use of metadata is providing additional values to
751/// http_connection_manager in the envoy.http_connection_manager.access_log
752/// namespace.
753///
754/// Another example use of metadata is to per service config info in cluster metadata, which may get
755/// consumed by multiple filters.
756///
757/// For load balancing, Metadata provides a means to subset cluster endpoints.
758/// Endpoints have a Metadata object associated and routes contain a Metadata
759/// object to match against. There are some well defined metadata used today for
760/// this purpose:
761///
762/// * ``{"envoy.lb": {"canary": <bool> }}`` This indicates the canary status of an
763///    endpoint and is also used during header processing
764///    (x-envoy-upstream-canary) and for stats purposes.
765/// \[#next-major-version: move to type/metadata/v2\]
766#[derive(Clone, PartialEq, ::prost::Message)]
767pub struct Metadata {
768    /// Key is the reverse DNS filter name, e.g. com.acme.widget. The ``envoy.*``
769    /// namespace is reserved for Envoy's built-in filters.
770    /// If both ``filter_metadata`` and
771    /// :ref:`typed_filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.typed_filter_metadata>`
772    /// fields are present in the metadata with same keys,
773    /// only ``typed_filter_metadata`` field will be parsed.
774    #[prost(map = "string, message", tag = "1")]
775    pub filter_metadata: ::std::collections::HashMap<
776        ::prost::alloc::string::String,
777        super::super::super::super::google::protobuf::Struct,
778    >,
779    /// Key is the reverse DNS filter name, e.g. com.acme.widget. The ``envoy.*``
780    /// namespace is reserved for Envoy's built-in filters.
781    /// The value is encoded as google.protobuf.Any.
782    /// If both :ref:`filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.filter_metadata>`
783    /// and ``typed_filter_metadata`` fields are present in the metadata with same keys,
784    /// only ``typed_filter_metadata`` field will be parsed.
785    #[prost(map = "string, message", tag = "2")]
786    pub typed_filter_metadata: ::std::collections::HashMap<
787        ::prost::alloc::string::String,
788        super::super::super::super::google::protobuf::Any,
789    >,
790}
791impl ::prost::Name for Metadata {
792    const NAME: &'static str = "Metadata";
793    const PACKAGE: &'static str = "envoy.config.core.v3";
794    fn full_name() -> ::prost::alloc::string::String {
795        "envoy.config.core.v3.Metadata".into()
796    }
797    fn type_url() -> ::prost::alloc::string::String {
798        "type.googleapis.com/envoy.config.core.v3.Metadata".into()
799    }
800}
801/// Runtime derived uint32 with a default when not specified.
802#[derive(Clone, PartialEq, ::prost::Message)]
803pub struct RuntimeUInt32 {
804    /// Default value if runtime value is not available.
805    #[prost(uint32, tag = "2")]
806    pub default_value: u32,
807    /// Runtime key to get value for comparison. This value is used if defined.
808    #[prost(string, tag = "3")]
809    pub runtime_key: ::prost::alloc::string::String,
810}
811impl ::prost::Name for RuntimeUInt32 {
812    const NAME: &'static str = "RuntimeUInt32";
813    const PACKAGE: &'static str = "envoy.config.core.v3";
814    fn full_name() -> ::prost::alloc::string::String {
815        "envoy.config.core.v3.RuntimeUInt32".into()
816    }
817    fn type_url() -> ::prost::alloc::string::String {
818        "type.googleapis.com/envoy.config.core.v3.RuntimeUInt32".into()
819    }
820}
821/// Runtime derived percentage with a default when not specified.
822#[derive(Clone, PartialEq, ::prost::Message)]
823pub struct RuntimePercent {
824    /// Default value if runtime value is not available.
825    #[prost(message, optional, tag = "1")]
826    pub default_value: ::core::option::Option<super::super::super::r#type::v3::Percent>,
827    /// Runtime key to get value for comparison. This value is used if defined.
828    #[prost(string, tag = "2")]
829    pub runtime_key: ::prost::alloc::string::String,
830}
831impl ::prost::Name for RuntimePercent {
832    const NAME: &'static str = "RuntimePercent";
833    const PACKAGE: &'static str = "envoy.config.core.v3";
834    fn full_name() -> ::prost::alloc::string::String {
835        "envoy.config.core.v3.RuntimePercent".into()
836    }
837    fn type_url() -> ::prost::alloc::string::String {
838        "type.googleapis.com/envoy.config.core.v3.RuntimePercent".into()
839    }
840}
841/// Runtime derived double with a default when not specified.
842#[derive(Clone, PartialEq, ::prost::Message)]
843pub struct RuntimeDouble {
844    /// Default value if runtime value is not available.
845    #[prost(double, tag = "1")]
846    pub default_value: f64,
847    /// Runtime key to get value for comparison. This value is used if defined.
848    #[prost(string, tag = "2")]
849    pub runtime_key: ::prost::alloc::string::String,
850}
851impl ::prost::Name for RuntimeDouble {
852    const NAME: &'static str = "RuntimeDouble";
853    const PACKAGE: &'static str = "envoy.config.core.v3";
854    fn full_name() -> ::prost::alloc::string::String {
855        "envoy.config.core.v3.RuntimeDouble".into()
856    }
857    fn type_url() -> ::prost::alloc::string::String {
858        "type.googleapis.com/envoy.config.core.v3.RuntimeDouble".into()
859    }
860}
861/// Runtime derived bool with a default when not specified.
862#[derive(Clone, PartialEq, ::prost::Message)]
863pub struct RuntimeFeatureFlag {
864    /// Default value if runtime value is not available.
865    #[prost(message, optional, tag = "1")]
866    pub default_value: ::core::option::Option<
867        super::super::super::super::google::protobuf::BoolValue,
868    >,
869    /// Runtime key to get value for comparison. This value is used if defined. The boolean value must
870    /// be represented via its
871    /// `canonical JSON encoding <<https://developers.google.com/protocol-buffers/docs/proto3#json>`_.>
872    #[prost(string, tag = "2")]
873    pub runtime_key: ::prost::alloc::string::String,
874}
875impl ::prost::Name for RuntimeFeatureFlag {
876    const NAME: &'static str = "RuntimeFeatureFlag";
877    const PACKAGE: &'static str = "envoy.config.core.v3";
878    fn full_name() -> ::prost::alloc::string::String {
879        "envoy.config.core.v3.RuntimeFeatureFlag".into()
880    }
881    fn type_url() -> ::prost::alloc::string::String {
882        "type.googleapis.com/envoy.config.core.v3.RuntimeFeatureFlag".into()
883    }
884}
885#[derive(Clone, PartialEq, ::prost::Message)]
886pub struct KeyValue {
887    /// The key of the key/value pair.
888    #[prost(string, tag = "1")]
889    pub key: ::prost::alloc::string::String,
890    /// The value of the key/value pair.
891    #[prost(bytes = "vec", tag = "2")]
892    pub value: ::prost::alloc::vec::Vec<u8>,
893}
894impl ::prost::Name for KeyValue {
895    const NAME: &'static str = "KeyValue";
896    const PACKAGE: &'static str = "envoy.config.core.v3";
897    fn full_name() -> ::prost::alloc::string::String {
898        "envoy.config.core.v3.KeyValue".into()
899    }
900    fn type_url() -> ::prost::alloc::string::String {
901        "type.googleapis.com/envoy.config.core.v3.KeyValue".into()
902    }
903}
904/// Key/value pair plus option to control append behavior. This is used to specify
905/// key/value pairs that should be appended to a set of existing key/value pairs.
906#[derive(Clone, PartialEq, ::prost::Message)]
907pub struct KeyValueAppend {
908    /// Key/value pair entry that this option to append or overwrite.
909    #[prost(message, optional, tag = "1")]
910    pub entry: ::core::option::Option<KeyValue>,
911    /// Describes the action taken to append/overwrite the given value for an existing
912    /// key or to only add this key if it's absent.
913    #[prost(enumeration = "key_value_append::KeyValueAppendAction", tag = "2")]
914    pub action: i32,
915}
916/// Nested message and enum types in `KeyValueAppend`.
917pub mod key_value_append {
918    /// Describes the supported actions types for key/value pair append action.
919    #[derive(
920        Clone,
921        Copy,
922        Debug,
923        PartialEq,
924        Eq,
925        Hash,
926        PartialOrd,
927        Ord,
928        ::prost::Enumeration
929    )]
930    #[repr(i32)]
931    pub enum KeyValueAppendAction {
932        /// If the key already exists, this action will result in the following behavior:
933        ///
934        /// - Comma-concatenated value if multiple values are not allowed.
935        /// - New value added to the list of values if multiple values are allowed.
936        ///
937        /// If the key doesn't exist then this will add pair with specified key and value.
938        AppendIfExistsOrAdd = 0,
939        /// This action will add the key/value pair if it doesn't already exist. If the
940        /// key already exists then this will be a no-op.
941        AddIfAbsent = 1,
942        /// This action will overwrite the specified value by discarding any existing
943        /// values if the key already exists. If the key doesn't exist then this will add
944        /// the pair with specified key and value.
945        OverwriteIfExistsOrAdd = 2,
946        /// This action will overwrite the specified value by discarding any existing
947        /// values if the key already exists. If the key doesn't exist then this will
948        /// be no-op.
949        OverwriteIfExists = 3,
950    }
951    impl KeyValueAppendAction {
952        /// String value of the enum field names used in the ProtoBuf definition.
953        ///
954        /// The values are not transformed in any way and thus are considered stable
955        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
956        pub fn as_str_name(&self) -> &'static str {
957            match self {
958                Self::AppendIfExistsOrAdd => "APPEND_IF_EXISTS_OR_ADD",
959                Self::AddIfAbsent => "ADD_IF_ABSENT",
960                Self::OverwriteIfExistsOrAdd => "OVERWRITE_IF_EXISTS_OR_ADD",
961                Self::OverwriteIfExists => "OVERWRITE_IF_EXISTS",
962            }
963        }
964        /// Creates an enum from field names used in the ProtoBuf definition.
965        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
966            match value {
967                "APPEND_IF_EXISTS_OR_ADD" => Some(Self::AppendIfExistsOrAdd),
968                "ADD_IF_ABSENT" => Some(Self::AddIfAbsent),
969                "OVERWRITE_IF_EXISTS_OR_ADD" => Some(Self::OverwriteIfExistsOrAdd),
970                "OVERWRITE_IF_EXISTS" => Some(Self::OverwriteIfExists),
971                _ => None,
972            }
973        }
974    }
975}
976impl ::prost::Name for KeyValueAppend {
977    const NAME: &'static str = "KeyValueAppend";
978    const PACKAGE: &'static str = "envoy.config.core.v3";
979    fn full_name() -> ::prost::alloc::string::String {
980        "envoy.config.core.v3.KeyValueAppend".into()
981    }
982    fn type_url() -> ::prost::alloc::string::String {
983        "type.googleapis.com/envoy.config.core.v3.KeyValueAppend".into()
984    }
985}
986/// Key/value pair to append or remove.
987#[derive(Clone, PartialEq, ::prost::Message)]
988pub struct KeyValueMutation {
989    /// Key/value pair to append or overwrite. Only one of ``append`` or ``remove`` can be set.
990    #[prost(message, optional, tag = "1")]
991    pub append: ::core::option::Option<KeyValueAppend>,
992    /// Key to remove. Only one of ``append`` or ``remove`` can be set.
993    #[prost(string, tag = "2")]
994    pub remove: ::prost::alloc::string::String,
995}
996impl ::prost::Name for KeyValueMutation {
997    const NAME: &'static str = "KeyValueMutation";
998    const PACKAGE: &'static str = "envoy.config.core.v3";
999    fn full_name() -> ::prost::alloc::string::String {
1000        "envoy.config.core.v3.KeyValueMutation".into()
1001    }
1002    fn type_url() -> ::prost::alloc::string::String {
1003        "type.googleapis.com/envoy.config.core.v3.KeyValueMutation".into()
1004    }
1005}
1006/// Query parameter name/value pair.
1007#[derive(Clone, PartialEq, ::prost::Message)]
1008pub struct QueryParameter {
1009    /// The key of the query parameter. Case sensitive.
1010    #[prost(string, tag = "1")]
1011    pub key: ::prost::alloc::string::String,
1012    /// The value of the query parameter.
1013    #[prost(string, tag = "2")]
1014    pub value: ::prost::alloc::string::String,
1015}
1016impl ::prost::Name for QueryParameter {
1017    const NAME: &'static str = "QueryParameter";
1018    const PACKAGE: &'static str = "envoy.config.core.v3";
1019    fn full_name() -> ::prost::alloc::string::String {
1020        "envoy.config.core.v3.QueryParameter".into()
1021    }
1022    fn type_url() -> ::prost::alloc::string::String {
1023        "type.googleapis.com/envoy.config.core.v3.QueryParameter".into()
1024    }
1025}
1026/// Header name/value pair.
1027#[derive(Clone, PartialEq, ::prost::Message)]
1028pub struct HeaderValue {
1029    /// Header name.
1030    #[prost(string, tag = "1")]
1031    pub key: ::prost::alloc::string::String,
1032    /// Header value.
1033    ///
1034    /// The same :ref:`format specifier <config_access_log_format>` as used for
1035    /// :ref:`HTTP access logging <config_access_log>` applies here, however
1036    /// unknown header values are replaced with the empty string instead of ``-``.
1037    /// Header value is encoded as string. This does not work for non-utf8 characters.
1038    /// Only one of ``value`` or ``raw_value`` can be set.
1039    #[prost(string, tag = "2")]
1040    pub value: ::prost::alloc::string::String,
1041    /// Header value is encoded as bytes which can support non-utf8 characters.
1042    /// Only one of ``value`` or ``raw_value`` can be set.
1043    #[prost(bytes = "vec", tag = "3")]
1044    pub raw_value: ::prost::alloc::vec::Vec<u8>,
1045}
1046impl ::prost::Name for HeaderValue {
1047    const NAME: &'static str = "HeaderValue";
1048    const PACKAGE: &'static str = "envoy.config.core.v3";
1049    fn full_name() -> ::prost::alloc::string::String {
1050        "envoy.config.core.v3.HeaderValue".into()
1051    }
1052    fn type_url() -> ::prost::alloc::string::String {
1053        "type.googleapis.com/envoy.config.core.v3.HeaderValue".into()
1054    }
1055}
1056/// Header name/value pair plus option to control append behavior.
1057#[derive(Clone, PartialEq, ::prost::Message)]
1058pub struct HeaderValueOption {
1059    /// Header name/value pair that this option applies to.
1060    #[prost(message, optional, tag = "1")]
1061    pub header: ::core::option::Option<HeaderValue>,
1062    /// Should the value be appended? If true (default), the value is appended to
1063    /// existing values. Otherwise it replaces any existing values.
1064    /// This field is deprecated and please use
1065    /// :ref:`append_action <envoy_v3_api_field_config.core.v3.HeaderValueOption.append_action>` as replacement.
1066    ///
1067    /// .. note::
1068    ///    The :ref:`external authorization service <envoy_v3_api_msg_service.auth.v3.CheckResponse>` and
1069    ///    :ref:`external processor service <envoy_v3_api_msg_service.ext_proc.v3.ProcessingResponse>` have
1070    ///    default value (``false``) for this field.
1071    #[deprecated]
1072    #[prost(message, optional, tag = "2")]
1073    pub append: ::core::option::Option<
1074        super::super::super::super::google::protobuf::BoolValue,
1075    >,
1076    /// Describes the action taken to append/overwrite the given value for an existing header
1077    /// or to only add this header if it's absent.
1078    /// Value defaults to :ref:`APPEND_IF_EXISTS_OR_ADD
1079    /// <envoy_v3_api_enum_value_config.core.v3.HeaderValueOption.HeaderAppendAction.APPEND_IF_EXISTS_OR_ADD>`.
1080    #[prost(enumeration = "header_value_option::HeaderAppendAction", tag = "3")]
1081    pub append_action: i32,
1082    /// Is the header value allowed to be empty? If false (default), custom headers with empty values are dropped,
1083    /// otherwise they are added.
1084    #[prost(bool, tag = "4")]
1085    pub keep_empty_value: bool,
1086}
1087/// Nested message and enum types in `HeaderValueOption`.
1088pub mod header_value_option {
1089    /// Describes the supported actions types for header append action.
1090    #[derive(
1091        Clone,
1092        Copy,
1093        Debug,
1094        PartialEq,
1095        Eq,
1096        Hash,
1097        PartialOrd,
1098        Ord,
1099        ::prost::Enumeration
1100    )]
1101    #[repr(i32)]
1102    pub enum HeaderAppendAction {
1103        /// If the header already exists, this action will result in:
1104        ///
1105        /// - Comma-concatenated for predefined inline headers.
1106        /// - Duplicate header added in the ``HeaderMap`` for other headers.
1107        ///
1108        /// If the header doesn't exist then this will add new header with specified key and value.
1109        AppendIfExistsOrAdd = 0,
1110        /// This action will add the header if it doesn't already exist. If the header
1111        /// already exists then this will be a no-op.
1112        AddIfAbsent = 1,
1113        /// This action will overwrite the specified value by discarding any existing values if
1114        /// the header already exists. If the header doesn't exist then this will add the header
1115        /// with specified key and value.
1116        OverwriteIfExistsOrAdd = 2,
1117        /// This action will overwrite the specified value by discarding any existing values if
1118        /// the header already exists. If the header doesn't exist then this will be no-op.
1119        OverwriteIfExists = 3,
1120    }
1121    impl HeaderAppendAction {
1122        /// String value of the enum field names used in the ProtoBuf definition.
1123        ///
1124        /// The values are not transformed in any way and thus are considered stable
1125        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1126        pub fn as_str_name(&self) -> &'static str {
1127            match self {
1128                Self::AppendIfExistsOrAdd => "APPEND_IF_EXISTS_OR_ADD",
1129                Self::AddIfAbsent => "ADD_IF_ABSENT",
1130                Self::OverwriteIfExistsOrAdd => "OVERWRITE_IF_EXISTS_OR_ADD",
1131                Self::OverwriteIfExists => "OVERWRITE_IF_EXISTS",
1132            }
1133        }
1134        /// Creates an enum from field names used in the ProtoBuf definition.
1135        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1136            match value {
1137                "APPEND_IF_EXISTS_OR_ADD" => Some(Self::AppendIfExistsOrAdd),
1138                "ADD_IF_ABSENT" => Some(Self::AddIfAbsent),
1139                "OVERWRITE_IF_EXISTS_OR_ADD" => Some(Self::OverwriteIfExistsOrAdd),
1140                "OVERWRITE_IF_EXISTS" => Some(Self::OverwriteIfExists),
1141                _ => None,
1142            }
1143        }
1144    }
1145}
1146impl ::prost::Name for HeaderValueOption {
1147    const NAME: &'static str = "HeaderValueOption";
1148    const PACKAGE: &'static str = "envoy.config.core.v3";
1149    fn full_name() -> ::prost::alloc::string::String {
1150        "envoy.config.core.v3.HeaderValueOption".into()
1151    }
1152    fn type_url() -> ::prost::alloc::string::String {
1153        "type.googleapis.com/envoy.config.core.v3.HeaderValueOption".into()
1154    }
1155}
1156/// Wrapper for a set of headers.
1157#[derive(Clone, PartialEq, ::prost::Message)]
1158pub struct HeaderMap {
1159    #[prost(message, repeated, tag = "1")]
1160    pub headers: ::prost::alloc::vec::Vec<HeaderValue>,
1161}
1162impl ::prost::Name for HeaderMap {
1163    const NAME: &'static str = "HeaderMap";
1164    const PACKAGE: &'static str = "envoy.config.core.v3";
1165    fn full_name() -> ::prost::alloc::string::String {
1166        "envoy.config.core.v3.HeaderMap".into()
1167    }
1168    fn type_url() -> ::prost::alloc::string::String {
1169        "type.googleapis.com/envoy.config.core.v3.HeaderMap".into()
1170    }
1171}
1172/// A directory that is watched for changes, e.g. by inotify on Linux. Move/rename
1173/// events inside this directory trigger the watch.
1174#[derive(Clone, PartialEq, ::prost::Message)]
1175pub struct WatchedDirectory {
1176    /// Directory path to watch.
1177    #[prost(string, tag = "1")]
1178    pub path: ::prost::alloc::string::String,
1179}
1180impl ::prost::Name for WatchedDirectory {
1181    const NAME: &'static str = "WatchedDirectory";
1182    const PACKAGE: &'static str = "envoy.config.core.v3";
1183    fn full_name() -> ::prost::alloc::string::String {
1184        "envoy.config.core.v3.WatchedDirectory".into()
1185    }
1186    fn type_url() -> ::prost::alloc::string::String {
1187        "type.googleapis.com/envoy.config.core.v3.WatchedDirectory".into()
1188    }
1189}
1190/// Data source consisting of a file, an inline value, or an environment variable.
1191/// \[#next-free-field: 6\]
1192#[derive(Clone, PartialEq, ::prost::Message)]
1193pub struct DataSource {
1194    /// Watched directory that is watched for file changes. If this is set explicitly, the file
1195    /// specified in the ``filename`` field will be reloaded when relevant file move events occur.
1196    ///
1197    /// .. note::
1198    ///    This field only makes sense when the ``filename`` field is set.
1199    ///
1200    /// .. note::
1201    ///    Envoy only updates when the file is replaced by a file move, and not when the file is
1202    ///    edited in place.
1203    ///
1204    /// .. note::
1205    ///    Not all use cases of ``DataSource`` support watching directories. It depends on the
1206    ///    specific usage of the ``DataSource``. See the documentation of the parent message for
1207    ///    details.
1208    #[prost(message, optional, tag = "5")]
1209    pub watched_directory: ::core::option::Option<WatchedDirectory>,
1210    #[prost(oneof = "data_source::Specifier", tags = "1, 2, 3, 4")]
1211    pub specifier: ::core::option::Option<data_source::Specifier>,
1212}
1213/// Nested message and enum types in `DataSource`.
1214pub mod data_source {
1215    #[derive(Clone, PartialEq, ::prost::Oneof)]
1216    pub enum Specifier {
1217        /// Local filesystem data source.
1218        #[prost(string, tag = "1")]
1219        Filename(::prost::alloc::string::String),
1220        /// Bytes inlined in the configuration.
1221        #[prost(bytes, tag = "2")]
1222        InlineBytes(::prost::alloc::vec::Vec<u8>),
1223        /// String inlined in the configuration.
1224        #[prost(string, tag = "3")]
1225        InlineString(::prost::alloc::string::String),
1226        /// Environment variable data source.
1227        #[prost(string, tag = "4")]
1228        EnvironmentVariable(::prost::alloc::string::String),
1229    }
1230}
1231impl ::prost::Name for DataSource {
1232    const NAME: &'static str = "DataSource";
1233    const PACKAGE: &'static str = "envoy.config.core.v3";
1234    fn full_name() -> ::prost::alloc::string::String {
1235        "envoy.config.core.v3.DataSource".into()
1236    }
1237    fn type_url() -> ::prost::alloc::string::String {
1238        "type.googleapis.com/envoy.config.core.v3.DataSource".into()
1239    }
1240}
1241/// The message specifies the retry policy of remote data source when fetching fails.
1242/// \[#next-free-field: 7\]
1243#[derive(Clone, PartialEq, ::prost::Message)]
1244pub struct RetryPolicy {
1245    /// Specifies parameters that control :ref:`retry backoff strategy <envoy_v3_api_msg_config.core.v3.BackoffStrategy>`.
1246    /// This parameter is optional, in which case the default base interval is 1000 milliseconds. The
1247    /// default maximum interval is 10 times the base interval.
1248    #[prost(message, optional, tag = "1")]
1249    pub retry_back_off: ::core::option::Option<BackoffStrategy>,
1250    /// Specifies the allowed number of retries. This parameter is optional and
1251    /// defaults to 1.
1252    #[prost(message, optional, tag = "2")]
1253    pub num_retries: ::core::option::Option<
1254        super::super::super::super::google::protobuf::UInt32Value,
1255    >,
1256    /// For details, see :ref:`retry_on <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_on>`.
1257    #[prost(string, tag = "3")]
1258    pub retry_on: ::prost::alloc::string::String,
1259    /// For details, see :ref:`retry_priority <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_priority>`.
1260    #[prost(message, optional, tag = "4")]
1261    pub retry_priority: ::core::option::Option<retry_policy::RetryPriority>,
1262    /// For details, see :ref:`RetryHostPredicate <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_host_predicate>`.
1263    #[prost(message, repeated, tag = "5")]
1264    pub retry_host_predicate: ::prost::alloc::vec::Vec<retry_policy::RetryHostPredicate>,
1265    /// For details, see :ref:`host_selection_retry_max_attempts <envoy_v3_api_field_config.route.v3.RetryPolicy.host_selection_retry_max_attempts>`.
1266    #[prost(int64, tag = "6")]
1267    pub host_selection_retry_max_attempts: i64,
1268}
1269/// Nested message and enum types in `RetryPolicy`.
1270pub mod retry_policy {
1271    /// See :ref:`RetryPriority <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_priority>`.
1272    #[derive(Clone, PartialEq, ::prost::Message)]
1273    pub struct RetryPriority {
1274        #[prost(string, tag = "1")]
1275        pub name: ::prost::alloc::string::String,
1276        #[prost(oneof = "retry_priority::ConfigType", tags = "2")]
1277        pub config_type: ::core::option::Option<retry_priority::ConfigType>,
1278    }
1279    /// Nested message and enum types in `RetryPriority`.
1280    pub mod retry_priority {
1281        #[derive(Clone, PartialEq, ::prost::Oneof)]
1282        pub enum ConfigType {
1283            #[prost(message, tag = "2")]
1284            TypedConfig(super::super::super::super::super::super::google::protobuf::Any),
1285        }
1286    }
1287    impl ::prost::Name for RetryPriority {
1288        const NAME: &'static str = "RetryPriority";
1289        const PACKAGE: &'static str = "envoy.config.core.v3";
1290        fn full_name() -> ::prost::alloc::string::String {
1291            "envoy.config.core.v3.RetryPolicy.RetryPriority".into()
1292        }
1293        fn type_url() -> ::prost::alloc::string::String {
1294            "type.googleapis.com/envoy.config.core.v3.RetryPolicy.RetryPriority".into()
1295        }
1296    }
1297    /// See :ref:`RetryHostPredicate <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_host_predicate>`.
1298    #[derive(Clone, PartialEq, ::prost::Message)]
1299    pub struct RetryHostPredicate {
1300        #[prost(string, tag = "1")]
1301        pub name: ::prost::alloc::string::String,
1302        #[prost(oneof = "retry_host_predicate::ConfigType", tags = "2")]
1303        pub config_type: ::core::option::Option<retry_host_predicate::ConfigType>,
1304    }
1305    /// Nested message and enum types in `RetryHostPredicate`.
1306    pub mod retry_host_predicate {
1307        #[derive(Clone, PartialEq, ::prost::Oneof)]
1308        pub enum ConfigType {
1309            #[prost(message, tag = "2")]
1310            TypedConfig(super::super::super::super::super::super::google::protobuf::Any),
1311        }
1312    }
1313    impl ::prost::Name for RetryHostPredicate {
1314        const NAME: &'static str = "RetryHostPredicate";
1315        const PACKAGE: &'static str = "envoy.config.core.v3";
1316        fn full_name() -> ::prost::alloc::string::String {
1317            "envoy.config.core.v3.RetryPolicy.RetryHostPredicate".into()
1318        }
1319        fn type_url() -> ::prost::alloc::string::String {
1320            "type.googleapis.com/envoy.config.core.v3.RetryPolicy.RetryHostPredicate"
1321                .into()
1322        }
1323    }
1324}
1325impl ::prost::Name for RetryPolicy {
1326    const NAME: &'static str = "RetryPolicy";
1327    const PACKAGE: &'static str = "envoy.config.core.v3";
1328    fn full_name() -> ::prost::alloc::string::String {
1329        "envoy.config.core.v3.RetryPolicy".into()
1330    }
1331    fn type_url() -> ::prost::alloc::string::String {
1332        "type.googleapis.com/envoy.config.core.v3.RetryPolicy".into()
1333    }
1334}
1335/// The message specifies how to fetch data from remote and how to verify it.
1336#[derive(Clone, PartialEq, ::prost::Message)]
1337pub struct RemoteDataSource {
1338    /// The HTTP URI to fetch the remote data.
1339    #[prost(message, optional, tag = "1")]
1340    pub http_uri: ::core::option::Option<HttpUri>,
1341    /// SHA256 string for verifying data.
1342    #[prost(string, tag = "2")]
1343    pub sha256: ::prost::alloc::string::String,
1344    /// Retry policy for fetching remote data.
1345    #[prost(message, optional, tag = "3")]
1346    pub retry_policy: ::core::option::Option<RetryPolicy>,
1347}
1348impl ::prost::Name for RemoteDataSource {
1349    const NAME: &'static str = "RemoteDataSource";
1350    const PACKAGE: &'static str = "envoy.config.core.v3";
1351    fn full_name() -> ::prost::alloc::string::String {
1352        "envoy.config.core.v3.RemoteDataSource".into()
1353    }
1354    fn type_url() -> ::prost::alloc::string::String {
1355        "type.googleapis.com/envoy.config.core.v3.RemoteDataSource".into()
1356    }
1357}
1358/// Async data source which support async data fetch.
1359#[derive(Clone, PartialEq, ::prost::Message)]
1360pub struct AsyncDataSource {
1361    #[prost(oneof = "async_data_source::Specifier", tags = "1, 2")]
1362    pub specifier: ::core::option::Option<async_data_source::Specifier>,
1363}
1364/// Nested message and enum types in `AsyncDataSource`.
1365pub mod async_data_source {
1366    #[derive(Clone, PartialEq, ::prost::Oneof)]
1367    pub enum Specifier {
1368        /// Local async data source.
1369        #[prost(message, tag = "1")]
1370        Local(super::DataSource),
1371        /// Remote async data source.
1372        #[prost(message, tag = "2")]
1373        Remote(super::RemoteDataSource),
1374    }
1375}
1376impl ::prost::Name for AsyncDataSource {
1377    const NAME: &'static str = "AsyncDataSource";
1378    const PACKAGE: &'static str = "envoy.config.core.v3";
1379    fn full_name() -> ::prost::alloc::string::String {
1380        "envoy.config.core.v3.AsyncDataSource".into()
1381    }
1382    fn type_url() -> ::prost::alloc::string::String {
1383        "type.googleapis.com/envoy.config.core.v3.AsyncDataSource".into()
1384    }
1385}
1386/// Configuration for transport socket in :ref:`listeners <config_listeners>` and
1387/// :ref:`clusters <envoy_v3_api_msg_config.cluster.v3.Cluster>`. If the configuration is
1388/// empty, a default transport socket implementation and configuration will be
1389/// chosen based on the platform and existence of tls_context.
1390#[derive(Clone, PartialEq, ::prost::Message)]
1391pub struct TransportSocket {
1392    /// The name of the transport socket to instantiate. The name must match a supported transport
1393    /// socket implementation.
1394    #[prost(string, tag = "1")]
1395    pub name: ::prost::alloc::string::String,
1396    /// Implementation specific configuration which depends on the implementation being instantiated.
1397    /// See the supported transport socket implementations for further documentation.
1398    #[prost(oneof = "transport_socket::ConfigType", tags = "3")]
1399    pub config_type: ::core::option::Option<transport_socket::ConfigType>,
1400}
1401/// Nested message and enum types in `TransportSocket`.
1402pub mod transport_socket {
1403    /// Implementation specific configuration which depends on the implementation being instantiated.
1404    /// See the supported transport socket implementations for further documentation.
1405    #[derive(Clone, PartialEq, ::prost::Oneof)]
1406    pub enum ConfigType {
1407        #[prost(message, tag = "3")]
1408        TypedConfig(super::super::super::super::super::google::protobuf::Any),
1409    }
1410}
1411impl ::prost::Name for TransportSocket {
1412    const NAME: &'static str = "TransportSocket";
1413    const PACKAGE: &'static str = "envoy.config.core.v3";
1414    fn full_name() -> ::prost::alloc::string::String {
1415        "envoy.config.core.v3.TransportSocket".into()
1416    }
1417    fn type_url() -> ::prost::alloc::string::String {
1418        "type.googleapis.com/envoy.config.core.v3.TransportSocket".into()
1419    }
1420}
1421/// Runtime derived FractionalPercent with defaults for when the numerator or denominator is not
1422/// specified via a runtime key.
1423///
1424/// .. note::
1425///
1426///    Parsing of the runtime key's data is implemented such that it may be represented as a
1427///    :ref:`FractionalPercent <envoy_v3_api_msg_type.v3.FractionalPercent>` proto represented as JSON/YAML
1428///    and may also be represented as an integer with the assumption that the value is an integral
1429///    percentage out of 100. For instance, a runtime key lookup returning the value "42" would parse
1430///    as a ``FractionalPercent`` whose numerator is 42 and denominator is HUNDRED.
1431#[derive(Clone, PartialEq, ::prost::Message)]
1432pub struct RuntimeFractionalPercent {
1433    /// Default value if the runtime value's for the numerator/denominator keys are not available.
1434    #[prost(message, optional, tag = "1")]
1435    pub default_value: ::core::option::Option<
1436        super::super::super::r#type::v3::FractionalPercent,
1437    >,
1438    /// Runtime key for a YAML representation of a FractionalPercent.
1439    #[prost(string, tag = "2")]
1440    pub runtime_key: ::prost::alloc::string::String,
1441}
1442impl ::prost::Name for RuntimeFractionalPercent {
1443    const NAME: &'static str = "RuntimeFractionalPercent";
1444    const PACKAGE: &'static str = "envoy.config.core.v3";
1445    fn full_name() -> ::prost::alloc::string::String {
1446        "envoy.config.core.v3.RuntimeFractionalPercent".into()
1447    }
1448    fn type_url() -> ::prost::alloc::string::String {
1449        "type.googleapis.com/envoy.config.core.v3.RuntimeFractionalPercent".into()
1450    }
1451}
1452/// Identifies a specific ControlPlane instance that Envoy is connected to.
1453#[derive(Clone, PartialEq, ::prost::Message)]
1454pub struct ControlPlane {
1455    /// An opaque control plane identifier that uniquely identifies an instance
1456    /// of control plane. This can be used to identify which control plane instance,
1457    /// the Envoy is connected to.
1458    #[prost(string, tag = "1")]
1459    pub identifier: ::prost::alloc::string::String,
1460}
1461impl ::prost::Name for ControlPlane {
1462    const NAME: &'static str = "ControlPlane";
1463    const PACKAGE: &'static str = "envoy.config.core.v3";
1464    fn full_name() -> ::prost::alloc::string::String {
1465        "envoy.config.core.v3.ControlPlane".into()
1466    }
1467    fn type_url() -> ::prost::alloc::string::String {
1468        "type.googleapis.com/envoy.config.core.v3.ControlPlane".into()
1469    }
1470}
1471/// Envoy supports :ref:`upstream priority routing
1472/// <arch_overview_http_routing_priority>` both at the route and the virtual
1473/// cluster level. The current priority implementation uses different connection
1474/// pool and circuit breaking settings for each priority level. This means that
1475/// even for HTTP/2 requests, two physical connections will be used to an
1476/// upstream host. In the future Envoy will likely support true HTTP/2 priority
1477/// over a single upstream connection.
1478#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1479#[repr(i32)]
1480pub enum RoutingPriority {
1481    Default = 0,
1482    High = 1,
1483}
1484impl RoutingPriority {
1485    /// String value of the enum field names used in the ProtoBuf definition.
1486    ///
1487    /// The values are not transformed in any way and thus are considered stable
1488    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1489    pub fn as_str_name(&self) -> &'static str {
1490        match self {
1491            Self::Default => "DEFAULT",
1492            Self::High => "HIGH",
1493        }
1494    }
1495    /// Creates an enum from field names used in the ProtoBuf definition.
1496    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1497        match value {
1498            "DEFAULT" => Some(Self::Default),
1499            "HIGH" => Some(Self::High),
1500            _ => None,
1501        }
1502    }
1503}
1504/// HTTP request method.
1505#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1506#[repr(i32)]
1507pub enum RequestMethod {
1508    MethodUnspecified = 0,
1509    Get = 1,
1510    Head = 2,
1511    Post = 3,
1512    Put = 4,
1513    Delete = 5,
1514    Connect = 6,
1515    Options = 7,
1516    Trace = 8,
1517    Patch = 9,
1518}
1519impl RequestMethod {
1520    /// String value of the enum field names used in the ProtoBuf definition.
1521    ///
1522    /// The values are not transformed in any way and thus are considered stable
1523    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1524    pub fn as_str_name(&self) -> &'static str {
1525        match self {
1526            Self::MethodUnspecified => "METHOD_UNSPECIFIED",
1527            Self::Get => "GET",
1528            Self::Head => "HEAD",
1529            Self::Post => "POST",
1530            Self::Put => "PUT",
1531            Self::Delete => "DELETE",
1532            Self::Connect => "CONNECT",
1533            Self::Options => "OPTIONS",
1534            Self::Trace => "TRACE",
1535            Self::Patch => "PATCH",
1536        }
1537    }
1538    /// Creates an enum from field names used in the ProtoBuf definition.
1539    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1540        match value {
1541            "METHOD_UNSPECIFIED" => Some(Self::MethodUnspecified),
1542            "GET" => Some(Self::Get),
1543            "HEAD" => Some(Self::Head),
1544            "POST" => Some(Self::Post),
1545            "PUT" => Some(Self::Put),
1546            "DELETE" => Some(Self::Delete),
1547            "CONNECT" => Some(Self::Connect),
1548            "OPTIONS" => Some(Self::Options),
1549            "TRACE" => Some(Self::Trace),
1550            "PATCH" => Some(Self::Patch),
1551            _ => None,
1552        }
1553    }
1554}
1555/// Identifies the direction of the traffic relative to the local Envoy.
1556#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1557#[repr(i32)]
1558pub enum TrafficDirection {
1559    /// Default option is unspecified.
1560    Unspecified = 0,
1561    /// The transport is used for incoming traffic.
1562    Inbound = 1,
1563    /// The transport is used for outgoing traffic.
1564    Outbound = 2,
1565}
1566impl TrafficDirection {
1567    /// String value of the enum field names used in the ProtoBuf definition.
1568    ///
1569    /// The values are not transformed in any way and thus are considered stable
1570    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1571    pub fn as_str_name(&self) -> &'static str {
1572        match self {
1573            Self::Unspecified => "UNSPECIFIED",
1574            Self::Inbound => "INBOUND",
1575            Self::Outbound => "OUTBOUND",
1576        }
1577    }
1578    /// Creates an enum from field names used in the ProtoBuf definition.
1579    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1580        match value {
1581            "UNSPECIFIED" => Some(Self::Unspecified),
1582            "INBOUND" => Some(Self::Inbound),
1583            "OUTBOUND" => Some(Self::Outbound),
1584            _ => None,
1585        }
1586    }
1587}
1588#[derive(Clone, PartialEq, ::prost::Message)]
1589pub struct ProxyProtocolPassThroughTlVs {
1590    /// The strategy to pass through TLVs. Default is INCLUDE_ALL.
1591    /// If INCLUDE_ALL is set, all TLVs will be passed through no matter the tlv_type field.
1592    #[prost(
1593        enumeration = "proxy_protocol_pass_through_tl_vs::PassTlVsMatchType",
1594        tag = "1"
1595    )]
1596    pub match_type: i32,
1597    /// The TLV types that are applied based on match_type.
1598    /// TLV type is defined as uint8_t in proxy protocol. See `the spec
1599    /// <<https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt>`_> for details.
1600    #[prost(uint32, repeated, packed = "false", tag = "2")]
1601    pub tlv_type: ::prost::alloc::vec::Vec<u32>,
1602}
1603/// Nested message and enum types in `ProxyProtocolPassThroughTLVs`.
1604pub mod proxy_protocol_pass_through_tl_vs {
1605    #[derive(
1606        Clone,
1607        Copy,
1608        Debug,
1609        PartialEq,
1610        Eq,
1611        Hash,
1612        PartialOrd,
1613        Ord,
1614        ::prost::Enumeration
1615    )]
1616    #[repr(i32)]
1617    pub enum PassTlVsMatchType {
1618        /// Pass all TLVs.
1619        IncludeAll = 0,
1620        /// Pass specific TLVs defined in tlv_type.
1621        Include = 1,
1622    }
1623    impl PassTlVsMatchType {
1624        /// String value of the enum field names used in the ProtoBuf definition.
1625        ///
1626        /// The values are not transformed in any way and thus are considered stable
1627        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1628        pub fn as_str_name(&self) -> &'static str {
1629            match self {
1630                Self::IncludeAll => "INCLUDE_ALL",
1631                Self::Include => "INCLUDE",
1632            }
1633        }
1634        /// Creates an enum from field names used in the ProtoBuf definition.
1635        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1636            match value {
1637                "INCLUDE_ALL" => Some(Self::IncludeAll),
1638                "INCLUDE" => Some(Self::Include),
1639                _ => None,
1640            }
1641        }
1642    }
1643}
1644impl ::prost::Name for ProxyProtocolPassThroughTlVs {
1645    const NAME: &'static str = "ProxyProtocolPassThroughTLVs";
1646    const PACKAGE: &'static str = "envoy.config.core.v3";
1647    fn full_name() -> ::prost::alloc::string::String {
1648        "envoy.config.core.v3.ProxyProtocolPassThroughTLVs".into()
1649    }
1650    fn type_url() -> ::prost::alloc::string::String {
1651        "type.googleapis.com/envoy.config.core.v3.ProxyProtocolPassThroughTLVs".into()
1652    }
1653}
1654#[derive(Clone, PartialEq, ::prost::Message)]
1655pub struct ProxyProtocolConfig {
1656    /// The PROXY protocol version to use. See <https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt> for details
1657    #[prost(enumeration = "proxy_protocol_config::Version", tag = "1")]
1658    pub version: i32,
1659    /// This config controls which TLVs can be passed to upstream if it is Proxy Protocol
1660    /// V2 header. If there is no setting for this field, no TLVs will be passed through.
1661    #[prost(message, optional, tag = "2")]
1662    pub pass_through_tlvs: ::core::option::Option<ProxyProtocolPassThroughTlVs>,
1663}
1664/// Nested message and enum types in `ProxyProtocolConfig`.
1665pub mod proxy_protocol_config {
1666    #[derive(
1667        Clone,
1668        Copy,
1669        Debug,
1670        PartialEq,
1671        Eq,
1672        Hash,
1673        PartialOrd,
1674        Ord,
1675        ::prost::Enumeration
1676    )]
1677    #[repr(i32)]
1678    pub enum Version {
1679        /// PROXY protocol version 1. Human readable format.
1680        V1 = 0,
1681        /// PROXY protocol version 2. Binary format.
1682        V2 = 1,
1683    }
1684    impl Version {
1685        /// String value of the enum field names used in the ProtoBuf definition.
1686        ///
1687        /// The values are not transformed in any way and thus are considered stable
1688        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1689        pub fn as_str_name(&self) -> &'static str {
1690            match self {
1691                Self::V1 => "V1",
1692                Self::V2 => "V2",
1693            }
1694        }
1695        /// Creates an enum from field names used in the ProtoBuf definition.
1696        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1697            match value {
1698                "V1" => Some(Self::V1),
1699                "V2" => Some(Self::V2),
1700                _ => None,
1701            }
1702        }
1703    }
1704}
1705impl ::prost::Name for ProxyProtocolConfig {
1706    const NAME: &'static str = "ProxyProtocolConfig";
1707    const PACKAGE: &'static str = "envoy.config.core.v3";
1708    fn full_name() -> ::prost::alloc::string::String {
1709        "envoy.config.core.v3.ProxyProtocolConfig".into()
1710    }
1711    fn type_url() -> ::prost::alloc::string::String {
1712        "type.googleapis.com/envoy.config.core.v3.ProxyProtocolConfig".into()
1713    }
1714}
1715/// gRPC service configuration. This is used by :ref:`ApiConfigSource
1716/// <envoy_v3_api_msg_config.core.v3.ApiConfigSource>` and filter configurations.
1717/// \[#next-free-field: 7\]
1718#[derive(Clone, PartialEq, ::prost::Message)]
1719pub struct GrpcService {
1720    /// The timeout for the gRPC request. This is the timeout for a specific
1721    /// request.
1722    #[prost(message, optional, tag = "3")]
1723    pub timeout: ::core::option::Option<
1724        super::super::super::super::google::protobuf::Duration,
1725    >,
1726    /// Additional metadata to include in streams initiated to the GrpcService. This can be used for
1727    /// scenarios in which additional ad hoc authorization headers (e.g. ``x-foo-bar: baz-key``) are to
1728    /// be injected. For more information, including details on header value syntax, see the
1729    /// documentation on :ref:`custom request headers
1730    /// <config_http_conn_man_headers_custom_request_headers>`.
1731    #[prost(message, repeated, tag = "5")]
1732    pub initial_metadata: ::prost::alloc::vec::Vec<HeaderValue>,
1733    /// Optional default retry policy for streams toward the service.
1734    /// If an async stream doesn't have retry policy configured in its stream options, this retry policy is used.
1735    #[prost(message, optional, tag = "6")]
1736    pub retry_policy: ::core::option::Option<RetryPolicy>,
1737    #[prost(oneof = "grpc_service::TargetSpecifier", tags = "1, 2")]
1738    pub target_specifier: ::core::option::Option<grpc_service::TargetSpecifier>,
1739}
1740/// Nested message and enum types in `GrpcService`.
1741pub mod grpc_service {
1742    #[derive(Clone, PartialEq, ::prost::Message)]
1743    pub struct EnvoyGrpc {
1744        /// The name of the upstream gRPC cluster. SSL credentials will be supplied
1745        /// in the :ref:`Cluster <envoy_v3_api_msg_config.cluster.v3.Cluster>` :ref:`transport_socket
1746        /// <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket>`.
1747        #[prost(string, tag = "1")]
1748        pub cluster_name: ::prost::alloc::string::String,
1749        /// The ``:authority`` header in the grpc request. If this field is not set, the authority header value will be ``cluster_name``.
1750        /// Note that this authority does not override the SNI. The SNI is provided by the transport socket of the cluster.
1751        #[prost(string, tag = "2")]
1752        pub authority: ::prost::alloc::string::String,
1753        /// Indicates the retry policy for re-establishing the gRPC stream
1754        /// This field is optional. If max interval is not provided, it will be set to ten times the provided base interval.
1755        /// Currently only supported for xDS gRPC streams.
1756        /// If not set, xDS gRPC streams default base interval:500ms, maximum interval:30s will be applied.
1757        #[prost(message, optional, tag = "3")]
1758        pub retry_policy: ::core::option::Option<super::RetryPolicy>,
1759        /// Maximum gRPC message size that is allowed to be received.
1760        /// If a message over this limit is received, the gRPC stream is terminated with the RESOURCE_EXHAUSTED error.
1761        /// This limit is applied to individual messages in the streaming response and not the total size of streaming response.
1762        /// Defaults to 0, which means unlimited.
1763        #[prost(message, optional, tag = "4")]
1764        pub max_receive_message_length: ::core::option::Option<
1765            super::super::super::super::super::google::protobuf::UInt32Value,
1766        >,
1767    }
1768    impl ::prost::Name for EnvoyGrpc {
1769        const NAME: &'static str = "EnvoyGrpc";
1770        const PACKAGE: &'static str = "envoy.config.core.v3";
1771        fn full_name() -> ::prost::alloc::string::String {
1772            "envoy.config.core.v3.GrpcService.EnvoyGrpc".into()
1773        }
1774        fn type_url() -> ::prost::alloc::string::String {
1775            "type.googleapis.com/envoy.config.core.v3.GrpcService.EnvoyGrpc".into()
1776        }
1777    }
1778    /// \[#next-free-field: 9\]
1779    #[derive(Clone, PartialEq, ::prost::Message)]
1780    pub struct GoogleGrpc {
1781        /// The target URI when using the `Google C++ gRPC client
1782        /// <<https://github.com/grpc/grpc>`_.> SSL credentials will be supplied in
1783        /// :ref:`channel_credentials <envoy_v3_api_field_config.core.v3.GrpcService.GoogleGrpc.channel_credentials>`.
1784        #[prost(string, tag = "1")]
1785        pub target_uri: ::prost::alloc::string::String,
1786        #[prost(message, optional, tag = "2")]
1787        pub channel_credentials: ::core::option::Option<google_grpc::ChannelCredentials>,
1788        /// A set of call credentials that can be composed with `channel credentials
1789        /// <<https://grpc.io/docs/guides/auth.html#credential-types>`_.>
1790        #[prost(message, repeated, tag = "3")]
1791        pub call_credentials: ::prost::alloc::vec::Vec<google_grpc::CallCredentials>,
1792        /// The human readable prefix to use when emitting statistics for the gRPC
1793        /// service.
1794        ///
1795        /// .. csv-table::
1796        ///     :header: Name, Type, Description
1797        ///     :widths: 1, 1, 2
1798        ///
1799        ///     streams_total, Counter, Total number of streams opened
1800        ///     streams_closed_<gRPC status code>, Counter, Total streams closed with <gRPC status code>
1801        #[prost(string, tag = "4")]
1802        pub stat_prefix: ::prost::alloc::string::String,
1803        /// The name of the Google gRPC credentials factory to use. This must have been registered with
1804        /// Envoy. If this is empty, a default credentials factory will be used that sets up channel
1805        /// credentials based on other configuration parameters.
1806        #[prost(string, tag = "5")]
1807        pub credentials_factory_name: ::prost::alloc::string::String,
1808        /// Additional configuration for site-specific customizations of the Google
1809        /// gRPC library.
1810        #[prost(message, optional, tag = "6")]
1811        pub config: ::core::option::Option<
1812            super::super::super::super::super::google::protobuf::Struct,
1813        >,
1814        /// How many bytes each stream can buffer internally.
1815        /// If not set an implementation defined default is applied (1MiB).
1816        #[prost(message, optional, tag = "7")]
1817        pub per_stream_buffer_limit_bytes: ::core::option::Option<
1818            super::super::super::super::super::google::protobuf::UInt32Value,
1819        >,
1820        /// Custom channels args.
1821        #[prost(message, optional, tag = "8")]
1822        pub channel_args: ::core::option::Option<google_grpc::ChannelArgs>,
1823    }
1824    /// Nested message and enum types in `GoogleGrpc`.
1825    pub mod google_grpc {
1826        /// See <https://grpc.io/grpc/cpp/structgrpc_1_1_ssl_credentials_options.html.>
1827        #[derive(Clone, PartialEq, ::prost::Message)]
1828        pub struct SslCredentials {
1829            /// PEM encoded server root certificates.
1830            #[prost(message, optional, tag = "1")]
1831            pub root_certs: ::core::option::Option<super::super::DataSource>,
1832            /// PEM encoded client private key.
1833            #[prost(message, optional, tag = "2")]
1834            pub private_key: ::core::option::Option<super::super::DataSource>,
1835            /// PEM encoded client certificate chain.
1836            #[prost(message, optional, tag = "3")]
1837            pub cert_chain: ::core::option::Option<super::super::DataSource>,
1838        }
1839        impl ::prost::Name for SslCredentials {
1840            const NAME: &'static str = "SslCredentials";
1841            const PACKAGE: &'static str = "envoy.config.core.v3";
1842            fn full_name() -> ::prost::alloc::string::String {
1843                "envoy.config.core.v3.GrpcService.GoogleGrpc.SslCredentials".into()
1844            }
1845            fn type_url() -> ::prost::alloc::string::String {
1846                "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.SslCredentials"
1847                    .into()
1848            }
1849        }
1850        /// Local channel credentials. Only UDS is supported for now.
1851        /// See <https://github.com/grpc/grpc/pull/15909.>
1852        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1853        pub struct GoogleLocalCredentials {}
1854        impl ::prost::Name for GoogleLocalCredentials {
1855            const NAME: &'static str = "GoogleLocalCredentials";
1856            const PACKAGE: &'static str = "envoy.config.core.v3";
1857            fn full_name() -> ::prost::alloc::string::String {
1858                "envoy.config.core.v3.GrpcService.GoogleGrpc.GoogleLocalCredentials"
1859                    .into()
1860            }
1861            fn type_url() -> ::prost::alloc::string::String {
1862                "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.GoogleLocalCredentials"
1863                    .into()
1864            }
1865        }
1866        /// See <https://grpc.io/docs/guides/auth.html#credential-types> to understand Channel and Call
1867        /// credential types.
1868        #[derive(Clone, PartialEq, ::prost::Message)]
1869        pub struct ChannelCredentials {
1870            #[prost(
1871                oneof = "channel_credentials::CredentialSpecifier",
1872                tags = "1, 2, 3"
1873            )]
1874            pub credential_specifier: ::core::option::Option<
1875                channel_credentials::CredentialSpecifier,
1876            >,
1877        }
1878        /// Nested message and enum types in `ChannelCredentials`.
1879        pub mod channel_credentials {
1880            #[derive(Clone, PartialEq, ::prost::Oneof)]
1881            pub enum CredentialSpecifier {
1882                #[prost(message, tag = "1")]
1883                SslCredentials(super::SslCredentials),
1884                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a6beb3ac70ff94bd2ebbd89b8f21d1f61>
1885                #[prost(message, tag = "2")]
1886                GoogleDefault(
1887                    super::super::super::super::super::super::super::google::protobuf::Empty,
1888                ),
1889                #[prost(message, tag = "3")]
1890                LocalCredentials(super::GoogleLocalCredentials),
1891            }
1892        }
1893        impl ::prost::Name for ChannelCredentials {
1894            const NAME: &'static str = "ChannelCredentials";
1895            const PACKAGE: &'static str = "envoy.config.core.v3";
1896            fn full_name() -> ::prost::alloc::string::String {
1897                "envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelCredentials".into()
1898            }
1899            fn type_url() -> ::prost::alloc::string::String {
1900                "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelCredentials"
1901                    .into()
1902            }
1903        }
1904        /// \[#next-free-field: 8\]
1905        #[derive(Clone, PartialEq, ::prost::Message)]
1906        pub struct CallCredentials {
1907            #[prost(
1908                oneof = "call_credentials::CredentialSpecifier",
1909                tags = "1, 2, 3, 4, 5, 6, 7"
1910            )]
1911            pub credential_specifier: ::core::option::Option<
1912                call_credentials::CredentialSpecifier,
1913            >,
1914        }
1915        /// Nested message and enum types in `CallCredentials`.
1916        pub mod call_credentials {
1917            #[derive(Clone, PartialEq, ::prost::Message)]
1918            pub struct ServiceAccountJwtAccessCredentials {
1919                #[prost(string, tag = "1")]
1920                pub json_key: ::prost::alloc::string::String,
1921                #[prost(uint64, tag = "2")]
1922                pub token_lifetime_seconds: u64,
1923            }
1924            impl ::prost::Name for ServiceAccountJwtAccessCredentials {
1925                const NAME: &'static str = "ServiceAccountJWTAccessCredentials";
1926                const PACKAGE: &'static str = "envoy.config.core.v3";
1927                fn full_name() -> ::prost::alloc::string::String {
1928                    "envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.ServiceAccountJWTAccessCredentials"
1929                        .into()
1930                }
1931                fn type_url() -> ::prost::alloc::string::String {
1932                    "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.ServiceAccountJWTAccessCredentials"
1933                        .into()
1934                }
1935            }
1936            #[derive(Clone, PartialEq, ::prost::Message)]
1937            pub struct GoogleIamCredentials {
1938                #[prost(string, tag = "1")]
1939                pub authorization_token: ::prost::alloc::string::String,
1940                #[prost(string, tag = "2")]
1941                pub authority_selector: ::prost::alloc::string::String,
1942            }
1943            impl ::prost::Name for GoogleIamCredentials {
1944                const NAME: &'static str = "GoogleIAMCredentials";
1945                const PACKAGE: &'static str = "envoy.config.core.v3";
1946                fn full_name() -> ::prost::alloc::string::String {
1947                    "envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.GoogleIAMCredentials"
1948                        .into()
1949                }
1950                fn type_url() -> ::prost::alloc::string::String {
1951                    "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.GoogleIAMCredentials"
1952                        .into()
1953                }
1954            }
1955            #[derive(Clone, PartialEq, ::prost::Message)]
1956            pub struct MetadataCredentialsFromPlugin {
1957                #[prost(string, tag = "1")]
1958                pub name: ::prost::alloc::string::String,
1959                /// \[#extension-category: envoy.grpc_credentials\]
1960                #[prost(
1961                    oneof = "metadata_credentials_from_plugin::ConfigType",
1962                    tags = "3"
1963                )]
1964                pub config_type: ::core::option::Option<
1965                    metadata_credentials_from_plugin::ConfigType,
1966                >,
1967            }
1968            /// Nested message and enum types in `MetadataCredentialsFromPlugin`.
1969            pub mod metadata_credentials_from_plugin {
1970                /// \[#extension-category: envoy.grpc_credentials\]
1971                #[derive(Clone, PartialEq, ::prost::Oneof)]
1972                pub enum ConfigType {
1973                    #[prost(message, tag = "3")]
1974                    TypedConfig(
1975                        super::super::super::super::super::super::super::super::google::protobuf::Any,
1976                    ),
1977                }
1978            }
1979            impl ::prost::Name for MetadataCredentialsFromPlugin {
1980                const NAME: &'static str = "MetadataCredentialsFromPlugin";
1981                const PACKAGE: &'static str = "envoy.config.core.v3";
1982                fn full_name() -> ::prost::alloc::string::String {
1983                    "envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.MetadataCredentialsFromPlugin"
1984                        .into()
1985                }
1986                fn type_url() -> ::prost::alloc::string::String {
1987                    "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.MetadataCredentialsFromPlugin"
1988                        .into()
1989                }
1990            }
1991            /// Security token service configuration that allows Google gRPC to
1992            /// fetch security token from an OAuth 2.0 authorization server.
1993            /// See <https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16> and
1994            /// <https://github.com/grpc/grpc/pull/19587.>
1995            /// \[#next-free-field: 10\]
1996            #[derive(Clone, PartialEq, ::prost::Message)]
1997            pub struct StsService {
1998                /// URI of the token exchange service that handles token exchange requests.
1999                /// [#comment:TODO(asraa): Add URI validation when implemented. Tracked by
2000                /// <https://github.com/bufbuild/protoc-gen-validate/issues/303]>
2001                #[prost(string, tag = "1")]
2002                pub token_exchange_service_uri: ::prost::alloc::string::String,
2003                /// Location of the target service or resource where the client
2004                /// intends to use the requested security token.
2005                #[prost(string, tag = "2")]
2006                pub resource: ::prost::alloc::string::String,
2007                /// Logical name of the target service where the client intends to
2008                /// use the requested security token.
2009                #[prost(string, tag = "3")]
2010                pub audience: ::prost::alloc::string::String,
2011                /// The desired scope of the requested security token in the
2012                /// context of the service or resource where the token will be used.
2013                #[prost(string, tag = "4")]
2014                pub scope: ::prost::alloc::string::String,
2015                /// Type of the requested security token.
2016                #[prost(string, tag = "5")]
2017                pub requested_token_type: ::prost::alloc::string::String,
2018                /// The path of subject token, a security token that represents the
2019                /// identity of the party on behalf of whom the request is being made.
2020                #[prost(string, tag = "6")]
2021                pub subject_token_path: ::prost::alloc::string::String,
2022                /// Type of the subject token.
2023                #[prost(string, tag = "7")]
2024                pub subject_token_type: ::prost::alloc::string::String,
2025                /// The path of actor token, a security token that represents the identity
2026                /// of the acting party. The acting party is authorized to use the
2027                /// requested security token and act on behalf of the subject.
2028                #[prost(string, tag = "8")]
2029                pub actor_token_path: ::prost::alloc::string::String,
2030                /// Type of the actor token.
2031                #[prost(string, tag = "9")]
2032                pub actor_token_type: ::prost::alloc::string::String,
2033            }
2034            impl ::prost::Name for StsService {
2035                const NAME: &'static str = "StsService";
2036                const PACKAGE: &'static str = "envoy.config.core.v3";
2037                fn full_name() -> ::prost::alloc::string::String {
2038                    "envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.StsService"
2039                        .into()
2040                }
2041                fn type_url() -> ::prost::alloc::string::String {
2042                    "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials.StsService"
2043                        .into()
2044                }
2045            }
2046            #[derive(Clone, PartialEq, ::prost::Oneof)]
2047            pub enum CredentialSpecifier {
2048                /// Access token credentials.
2049                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#ad3a80da696ffdaea943f0f858d7a360d.>
2050                #[prost(string, tag = "1")]
2051                AccessToken(::prost::alloc::string::String),
2052                /// Google Compute Engine credentials.
2053                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a6beb3ac70ff94bd2ebbd89b8f21d1f61>
2054                #[prost(message, tag = "2")]
2055                GoogleComputeEngine(
2056                    super::super::super::super::super::super::super::google::protobuf::Empty,
2057                ),
2058                /// Google refresh token credentials.
2059                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a96901c997b91bc6513b08491e0dca37c.>
2060                #[prost(string, tag = "3")]
2061                GoogleRefreshToken(::prost::alloc::string::String),
2062                /// Service Account JWT Access credentials.
2063                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a92a9f959d6102461f66ee973d8e9d3aa.>
2064                #[prost(message, tag = "4")]
2065                ServiceAccountJwtAccess(ServiceAccountJwtAccessCredentials),
2066                /// Google IAM credentials.
2067                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a9fc1fc101b41e680d47028166e76f9d0.>
2068                #[prost(message, tag = "5")]
2069                GoogleIam(GoogleIamCredentials),
2070                /// Custom authenticator credentials.
2071                /// <https://grpc.io/grpc/cpp/namespacegrpc.html#a823c6a4b19ffc71fb33e90154ee2ad07.>
2072                /// <https://grpc.io/docs/guides/auth.html#extending-grpc-to-support-other-authentication-mechanisms.>
2073                #[prost(message, tag = "6")]
2074                FromPlugin(MetadataCredentialsFromPlugin),
2075                /// Custom security token service which implements OAuth 2.0 token exchange.
2076                /// <https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16>
2077                /// See <https://github.com/grpc/grpc/pull/19587.>
2078                #[prost(message, tag = "7")]
2079                StsService(StsService),
2080            }
2081        }
2082        impl ::prost::Name for CallCredentials {
2083            const NAME: &'static str = "CallCredentials";
2084            const PACKAGE: &'static str = "envoy.config.core.v3";
2085            fn full_name() -> ::prost::alloc::string::String {
2086                "envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials".into()
2087            }
2088            fn type_url() -> ::prost::alloc::string::String {
2089                "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.CallCredentials"
2090                    .into()
2091            }
2092        }
2093        /// Channel arguments.
2094        #[derive(Clone, PartialEq, ::prost::Message)]
2095        pub struct ChannelArgs {
2096            /// See grpc_types.h GRPC_ARG #defines for keys that work here.
2097            #[prost(map = "string, message", tag = "1")]
2098            pub args: ::std::collections::HashMap<
2099                ::prost::alloc::string::String,
2100                channel_args::Value,
2101            >,
2102        }
2103        /// Nested message and enum types in `ChannelArgs`.
2104        pub mod channel_args {
2105            #[derive(Clone, PartialEq, ::prost::Message)]
2106            pub struct Value {
2107                /// Pointer values are not supported, since they don't make any sense when
2108                /// delivered via the API.
2109                #[prost(oneof = "value::ValueSpecifier", tags = "1, 2")]
2110                pub value_specifier: ::core::option::Option<value::ValueSpecifier>,
2111            }
2112            /// Nested message and enum types in `Value`.
2113            pub mod value {
2114                /// Pointer values are not supported, since they don't make any sense when
2115                /// delivered via the API.
2116                #[derive(Clone, PartialEq, ::prost::Oneof)]
2117                pub enum ValueSpecifier {
2118                    #[prost(string, tag = "1")]
2119                    StringValue(::prost::alloc::string::String),
2120                    #[prost(int64, tag = "2")]
2121                    IntValue(i64),
2122                }
2123            }
2124            impl ::prost::Name for Value {
2125                const NAME: &'static str = "Value";
2126                const PACKAGE: &'static str = "envoy.config.core.v3";
2127                fn full_name() -> ::prost::alloc::string::String {
2128                    "envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelArgs.Value"
2129                        .into()
2130                }
2131                fn type_url() -> ::prost::alloc::string::String {
2132                    "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelArgs.Value"
2133                        .into()
2134                }
2135            }
2136        }
2137        impl ::prost::Name for ChannelArgs {
2138            const NAME: &'static str = "ChannelArgs";
2139            const PACKAGE: &'static str = "envoy.config.core.v3";
2140            fn full_name() -> ::prost::alloc::string::String {
2141                "envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelArgs".into()
2142            }
2143            fn type_url() -> ::prost::alloc::string::String {
2144                "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc.ChannelArgs"
2145                    .into()
2146            }
2147        }
2148    }
2149    impl ::prost::Name for GoogleGrpc {
2150        const NAME: &'static str = "GoogleGrpc";
2151        const PACKAGE: &'static str = "envoy.config.core.v3";
2152        fn full_name() -> ::prost::alloc::string::String {
2153            "envoy.config.core.v3.GrpcService.GoogleGrpc".into()
2154        }
2155        fn type_url() -> ::prost::alloc::string::String {
2156            "type.googleapis.com/envoy.config.core.v3.GrpcService.GoogleGrpc".into()
2157        }
2158    }
2159    #[derive(Clone, PartialEq, ::prost::Oneof)]
2160    pub enum TargetSpecifier {
2161        /// Envoy's in-built gRPC client.
2162        /// See the :ref:`gRPC services overview <arch_overview_grpc_services>`
2163        /// documentation for discussion on gRPC client selection.
2164        #[prost(message, tag = "1")]
2165        EnvoyGrpc(EnvoyGrpc),
2166        /// `Google C++ gRPC client <<https://github.com/grpc/grpc>`_>
2167        /// See the :ref:`gRPC services overview <arch_overview_grpc_services>`
2168        /// documentation for discussion on gRPC client selection.
2169        #[prost(message, tag = "2")]
2170        GoogleGrpc(GoogleGrpc),
2171    }
2172}
2173impl ::prost::Name for GrpcService {
2174    const NAME: &'static str = "GrpcService";
2175    const PACKAGE: &'static str = "envoy.config.core.v3";
2176    fn full_name() -> ::prost::alloc::string::String {
2177        "envoy.config.core.v3.GrpcService".into()
2178    }
2179    fn type_url() -> ::prost::alloc::string::String {
2180        "type.googleapis.com/envoy.config.core.v3.GrpcService".into()
2181    }
2182}
2183/// API configuration source. This identifies the API type and cluster that Envoy
2184/// will use to fetch an xDS API.
2185/// \[#next-free-field: 10\]
2186#[derive(Clone, PartialEq, ::prost::Message)]
2187pub struct ApiConfigSource {
2188    /// API type (gRPC, REST, delta gRPC)
2189    #[prost(enumeration = "api_config_source::ApiType", tag = "1")]
2190    pub api_type: i32,
2191    /// API version for xDS transport protocol. This describes the xDS gRPC/REST
2192    /// endpoint and version of \[Delta\]DiscoveryRequest/Response used on the wire.
2193    #[prost(enumeration = "ApiVersion", tag = "8")]
2194    pub transport_api_version: i32,
2195    /// Cluster names should be used only with REST. If > 1
2196    /// cluster is defined, clusters will be cycled through if any kind of failure
2197    /// occurs.
2198    ///
2199    /// .. note::
2200    ///
2201    ///   The cluster with name ``cluster_name`` must be statically defined and its
2202    ///   type must not be ``EDS``.
2203    #[prost(string, repeated, tag = "2")]
2204    pub cluster_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2205    /// Multiple gRPC services be provided for GRPC. If > 1 cluster is defined,
2206    /// services will be cycled through if any kind of failure occurs.
2207    #[prost(message, repeated, tag = "4")]
2208    pub grpc_services: ::prost::alloc::vec::Vec<GrpcService>,
2209    /// For REST APIs, the delay between successive polls.
2210    #[prost(message, optional, tag = "3")]
2211    pub refresh_delay: ::core::option::Option<
2212        super::super::super::super::google::protobuf::Duration,
2213    >,
2214    /// For REST APIs, the request timeout. If not set, a default value of 1s will be used.
2215    #[prost(message, optional, tag = "5")]
2216    pub request_timeout: ::core::option::Option<
2217        super::super::super::super::google::protobuf::Duration,
2218    >,
2219    /// For GRPC APIs, the rate limit settings. If present, discovery requests made by Envoy will be
2220    /// rate limited.
2221    #[prost(message, optional, tag = "6")]
2222    pub rate_limit_settings: ::core::option::Option<RateLimitSettings>,
2223    /// Skip the node identifier in subsequent discovery requests for streaming gRPC config types.
2224    #[prost(bool, tag = "7")]
2225    pub set_node_on_first_message_only: bool,
2226    /// A list of config validators that will be executed when a new update is
2227    /// received from the ApiConfigSource. Note that each validator handles a
2228    /// specific xDS service type, and only the validators corresponding to the
2229    /// type url (in ``:ref: DiscoveryResponse`` or ``:ref: DeltaDiscoveryResponse``)
2230    /// will be invoked.
2231    /// If the validator returns false or throws an exception, the config will be rejected by
2232    /// the client, and a NACK will be sent.
2233    /// \[#extension-category: envoy.config.validators\]
2234    #[prost(message, repeated, tag = "9")]
2235    pub config_validators: ::prost::alloc::vec::Vec<TypedExtensionConfig>,
2236}
2237/// Nested message and enum types in `ApiConfigSource`.
2238pub mod api_config_source {
2239    /// APIs may be fetched via either REST or gRPC.
2240    #[derive(
2241        Clone,
2242        Copy,
2243        Debug,
2244        PartialEq,
2245        Eq,
2246        Hash,
2247        PartialOrd,
2248        Ord,
2249        ::prost::Enumeration
2250    )]
2251    #[repr(i32)]
2252    pub enum ApiType {
2253        /// Ideally this would be 'reserved 0' but one can't reserve the default
2254        /// value. Instead we throw an exception if this is ever used.
2255        DeprecatedAndUnavailableDoNotUse = 0,
2256        /// REST-JSON v2 API. The `canonical JSON encoding
2257        /// <<https://developers.google.com/protocol-buffers/docs/proto3#json>`_> for
2258        /// the v2 protos is used.
2259        Rest = 1,
2260        /// SotW gRPC service.
2261        Grpc = 2,
2262        /// Using the delta xDS gRPC service, i.e. DeltaDiscovery{Request,Response}
2263        /// rather than Discovery{Request,Response}. Rather than sending Envoy the entire state
2264        /// with every update, the xDS server only sends what has changed since the last update.
2265        DeltaGrpc = 3,
2266        /// SotW xDS gRPC with ADS. All resources which resolve to this configuration source will be
2267        /// multiplexed on a single connection to an ADS endpoint.
2268        /// \[#not-implemented-hide:\]
2269        AggregatedGrpc = 5,
2270        /// Delta xDS gRPC with ADS. All resources which resolve to this configuration source will be
2271        /// multiplexed on a single connection to an ADS endpoint.
2272        /// \[#not-implemented-hide:\]
2273        AggregatedDeltaGrpc = 6,
2274    }
2275    impl ApiType {
2276        /// String value of the enum field names used in the ProtoBuf definition.
2277        ///
2278        /// The values are not transformed in any way and thus are considered stable
2279        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2280        pub fn as_str_name(&self) -> &'static str {
2281            match self {
2282                Self::DeprecatedAndUnavailableDoNotUse => {
2283                    "DEPRECATED_AND_UNAVAILABLE_DO_NOT_USE"
2284                }
2285                Self::Rest => "REST",
2286                Self::Grpc => "GRPC",
2287                Self::DeltaGrpc => "DELTA_GRPC",
2288                Self::AggregatedGrpc => "AGGREGATED_GRPC",
2289                Self::AggregatedDeltaGrpc => "AGGREGATED_DELTA_GRPC",
2290            }
2291        }
2292        /// Creates an enum from field names used in the ProtoBuf definition.
2293        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2294            match value {
2295                "DEPRECATED_AND_UNAVAILABLE_DO_NOT_USE" => {
2296                    Some(Self::DeprecatedAndUnavailableDoNotUse)
2297                }
2298                "REST" => Some(Self::Rest),
2299                "GRPC" => Some(Self::Grpc),
2300                "DELTA_GRPC" => Some(Self::DeltaGrpc),
2301                "AGGREGATED_GRPC" => Some(Self::AggregatedGrpc),
2302                "AGGREGATED_DELTA_GRPC" => Some(Self::AggregatedDeltaGrpc),
2303                _ => None,
2304            }
2305        }
2306    }
2307}
2308impl ::prost::Name for ApiConfigSource {
2309    const NAME: &'static str = "ApiConfigSource";
2310    const PACKAGE: &'static str = "envoy.config.core.v3";
2311    fn full_name() -> ::prost::alloc::string::String {
2312        "envoy.config.core.v3.ApiConfigSource".into()
2313    }
2314    fn type_url() -> ::prost::alloc::string::String {
2315        "type.googleapis.com/envoy.config.core.v3.ApiConfigSource".into()
2316    }
2317}
2318/// Aggregated Discovery Service (ADS) options. This is currently empty, but when
2319/// set in :ref:`ConfigSource <envoy_v3_api_msg_config.core.v3.ConfigSource>` can be used to
2320/// specify that ADS is to be used.
2321#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2322pub struct AggregatedConfigSource {}
2323impl ::prost::Name for AggregatedConfigSource {
2324    const NAME: &'static str = "AggregatedConfigSource";
2325    const PACKAGE: &'static str = "envoy.config.core.v3";
2326    fn full_name() -> ::prost::alloc::string::String {
2327        "envoy.config.core.v3.AggregatedConfigSource".into()
2328    }
2329    fn type_url() -> ::prost::alloc::string::String {
2330        "type.googleapis.com/envoy.config.core.v3.AggregatedConfigSource".into()
2331    }
2332}
2333/// \[#not-implemented-hide:\]
2334/// Self-referencing config source options. This is currently empty, but when
2335/// set in :ref:`ConfigSource <envoy_v3_api_msg_config.core.v3.ConfigSource>` can be used to
2336/// specify that other data can be obtained from the same server.
2337#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2338pub struct SelfConfigSource {
2339    /// API version for xDS transport protocol. This describes the xDS gRPC/REST
2340    /// endpoint and version of \[Delta\]DiscoveryRequest/Response used on the wire.
2341    #[prost(enumeration = "ApiVersion", tag = "1")]
2342    pub transport_api_version: i32,
2343}
2344impl ::prost::Name for SelfConfigSource {
2345    const NAME: &'static str = "SelfConfigSource";
2346    const PACKAGE: &'static str = "envoy.config.core.v3";
2347    fn full_name() -> ::prost::alloc::string::String {
2348        "envoy.config.core.v3.SelfConfigSource".into()
2349    }
2350    fn type_url() -> ::prost::alloc::string::String {
2351        "type.googleapis.com/envoy.config.core.v3.SelfConfigSource".into()
2352    }
2353}
2354/// Rate Limit settings to be applied for discovery requests made by Envoy.
2355#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2356pub struct RateLimitSettings {
2357    /// Maximum number of tokens to be used for rate limiting discovery request calls. If not set, a
2358    /// default value of 100 will be used.
2359    #[prost(message, optional, tag = "1")]
2360    pub max_tokens: ::core::option::Option<
2361        super::super::super::super::google::protobuf::UInt32Value,
2362    >,
2363    /// Rate at which tokens will be filled per second. If not set, a default fill rate of 10 tokens
2364    /// per second will be used. The minimal fill rate is once per year. Lower
2365    /// fill rates will be set to once per year.
2366    #[prost(message, optional, tag = "2")]
2367    pub fill_rate: ::core::option::Option<
2368        super::super::super::super::google::protobuf::DoubleValue,
2369    >,
2370}
2371impl ::prost::Name for RateLimitSettings {
2372    const NAME: &'static str = "RateLimitSettings";
2373    const PACKAGE: &'static str = "envoy.config.core.v3";
2374    fn full_name() -> ::prost::alloc::string::String {
2375        "envoy.config.core.v3.RateLimitSettings".into()
2376    }
2377    fn type_url() -> ::prost::alloc::string::String {
2378        "type.googleapis.com/envoy.config.core.v3.RateLimitSettings".into()
2379    }
2380}
2381/// Local filesystem path configuration source.
2382#[derive(Clone, PartialEq, ::prost::Message)]
2383pub struct PathConfigSource {
2384    /// Path on the filesystem to source and watch for configuration updates.
2385    /// When sourcing configuration for a :ref:`secret <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.Secret>`,
2386    /// the certificate and key files are also watched for updates.
2387    ///
2388    /// .. note::
2389    ///
2390    ///   The path to the source must exist at config load time.
2391    ///
2392    /// .. note::
2393    ///
2394    ///    If ``watched_directory`` is *not* configured, Envoy will watch the file path for *moves*.
2395    ///    This is because in general only moves are atomic. The same method of swapping files as is
2396    ///    demonstrated in the :ref:`runtime documentation <config_runtime_symbolic_link_swap>` can be
2397    ///    used here also. If ``watched_directory`` is configured, no watch will be placed directly on
2398    ///    this path. Instead, the configured ``watched_directory`` will be used to trigger reloads of
2399    ///    this path. This is required in certain deployment scenarios. See below for more information.
2400    #[prost(string, tag = "1")]
2401    pub path: ::prost::alloc::string::String,
2402    /// If configured, this directory will be watched for *moves*. When an entry in this directory is
2403    /// moved to, the ``path`` will be reloaded. This is required in certain deployment scenarios.
2404    ///
2405    /// Specifically, if trying to load an xDS resource using a
2406    /// `Kubernetes ConfigMap <<https://kubernetes.io/docs/concepts/configuration/configmap/>`_,> the
2407    /// following configuration might be used:
2408    /// 1. Store xds.yaml inside a ConfigMap.
2409    /// 2. Mount the ConfigMap to ``/config_map/xds``
2410    /// 3. Configure path ``/config_map/xds/xds.yaml``
2411    /// 4. Configure watched directory ``/config_map/xds``
2412    ///
2413    /// The above configuration will ensure that Envoy watches the owning directory for moves which is
2414    /// required due to how Kubernetes manages ConfigMap symbolic links during atomic updates.
2415    #[prost(message, optional, tag = "2")]
2416    pub watched_directory: ::core::option::Option<WatchedDirectory>,
2417}
2418impl ::prost::Name for PathConfigSource {
2419    const NAME: &'static str = "PathConfigSource";
2420    const PACKAGE: &'static str = "envoy.config.core.v3";
2421    fn full_name() -> ::prost::alloc::string::String {
2422        "envoy.config.core.v3.PathConfigSource".into()
2423    }
2424    fn type_url() -> ::prost::alloc::string::String {
2425        "type.googleapis.com/envoy.config.core.v3.PathConfigSource".into()
2426    }
2427}
2428/// Configuration for :ref:`listeners <config_listeners>`, :ref:`clusters
2429/// <config_cluster_manager>`, :ref:`routes
2430/// <envoy_v3_api_msg_config.route.v3.RouteConfiguration>`, :ref:`endpoints
2431/// <arch_overview_service_discovery>` etc. may either be sourced from the
2432/// filesystem or from an xDS API source. Filesystem configs are watched with
2433/// inotify for updates.
2434/// \[#next-free-field: 9\]
2435#[derive(Clone, PartialEq, ::prost::Message)]
2436pub struct ConfigSource {
2437    /// Authorities that this config source may be used for. An authority specified in a xdstp:// URL
2438    /// is resolved to a ``ConfigSource`` prior to configuration fetch. This field provides the
2439    /// association between authority name and configuration source.
2440    /// \[#not-implemented-hide:\]
2441    #[prost(message, repeated, tag = "7")]
2442    pub authorities: ::prost::alloc::vec::Vec<
2443        super::super::super::super::xds::core::v3::Authority,
2444    >,
2445    /// When this timeout is specified, Envoy will wait no longer than the specified time for first
2446    /// config response on this xDS subscription during the :ref:`initialization process
2447    /// <arch_overview_initialization>`. After reaching the timeout, Envoy will move to the next
2448    /// initialization phase, even if the first config is not delivered yet. The timer is activated
2449    /// when the xDS API subscription starts, and is disarmed on first config update or on error. 0
2450    /// means no timeout - Envoy will wait indefinitely for the first xDS config (unless another
2451    /// timeout applies). The default is 15s.
2452    #[prost(message, optional, tag = "4")]
2453    pub initial_fetch_timeout: ::core::option::Option<
2454        super::super::super::super::google::protobuf::Duration,
2455    >,
2456    /// API version for xDS resources. This implies the type URLs that the client
2457    /// will request for resources and the resource type that the client will in
2458    /// turn expect to be delivered.
2459    #[prost(enumeration = "ApiVersion", tag = "6")]
2460    pub resource_api_version: i32,
2461    #[prost(oneof = "config_source::ConfigSourceSpecifier", tags = "1, 8, 2, 3, 5")]
2462    pub config_source_specifier: ::core::option::Option<
2463        config_source::ConfigSourceSpecifier,
2464    >,
2465}
2466/// Nested message and enum types in `ConfigSource`.
2467pub mod config_source {
2468    #[derive(Clone, PartialEq, ::prost::Oneof)]
2469    pub enum ConfigSourceSpecifier {
2470        /// Deprecated in favor of ``path_config_source``. Use that field instead.
2471        #[prost(string, tag = "1")]
2472        Path(::prost::alloc::string::String),
2473        /// Local filesystem path configuration source.
2474        #[prost(message, tag = "8")]
2475        PathConfigSource(super::PathConfigSource),
2476        /// API configuration source.
2477        #[prost(message, tag = "2")]
2478        ApiConfigSource(super::ApiConfigSource),
2479        /// When set, ADS will be used to fetch resources. The ADS API configuration
2480        /// source in the bootstrap configuration is used.
2481        #[prost(message, tag = "3")]
2482        Ads(super::AggregatedConfigSource),
2483        /// \[#not-implemented-hide:\]
2484        /// When set, the client will access the resources from the same server it got the
2485        /// ConfigSource from, although not necessarily from the same stream. This is similar to the
2486        /// :ref:`ads<envoy_v3_api_field.ConfigSource.ads>` field, except that the client may use a
2487        /// different stream to the same server. As a result, this field can be used for things
2488        /// like LRS that cannot be sent on an ADS stream. It can also be used to link from (e.g.)
2489        /// LDS to RDS on the same server without requiring the management server to know its name
2490        /// or required credentials.
2491        /// [#next-major-version: In xDS v3, consider replacing the ads field with this one, since
2492        /// this field can implicitly mean to use the same stream in the case where the ConfigSource
2493        /// is provided via ADS and the specified data can also be obtained via ADS.]
2494        #[prost(message, tag = "5")]
2495        Self_(super::SelfConfigSource),
2496    }
2497}
2498impl ::prost::Name for ConfigSource {
2499    const NAME: &'static str = "ConfigSource";
2500    const PACKAGE: &'static str = "envoy.config.core.v3";
2501    fn full_name() -> ::prost::alloc::string::String {
2502        "envoy.config.core.v3.ConfigSource".into()
2503    }
2504    fn type_url() -> ::prost::alloc::string::String {
2505        "type.googleapis.com/envoy.config.core.v3.ConfigSource".into()
2506    }
2507}
2508/// Configuration source specifier for a late-bound extension configuration. The
2509/// parent resource is warmed until all the initial extension configurations are
2510/// received, unless the flag to apply the default configuration is set.
2511/// Subsequent extension updates are atomic on a per-worker basis. Once an
2512/// extension configuration is applied to a request or a connection, it remains
2513/// constant for the duration of processing. If the initial delivery of the
2514/// extension configuration fails, due to a timeout for example, the optional
2515/// default configuration is applied. Without a default configuration, the
2516/// extension is disabled, until an extension configuration is received. The
2517/// behavior of a disabled extension depends on the context. For example, a
2518/// filter chain with a disabled extension filter rejects all incoming streams.
2519#[derive(Clone, PartialEq, ::prost::Message)]
2520pub struct ExtensionConfigSource {
2521    #[prost(message, optional, tag = "1")]
2522    pub config_source: ::core::option::Option<ConfigSource>,
2523    /// Optional default configuration to use as the initial configuration if
2524    /// there is a failure to receive the initial extension configuration or if
2525    /// ``apply_default_config_without_warming`` flag is set.
2526    #[prost(message, optional, tag = "2")]
2527    pub default_config: ::core::option::Option<
2528        super::super::super::super::google::protobuf::Any,
2529    >,
2530    /// Use the default config as the initial configuration without warming and
2531    /// waiting for the first discovery response. Requires the default configuration
2532    /// to be supplied.
2533    #[prost(bool, tag = "3")]
2534    pub apply_default_config_without_warming: bool,
2535    /// A set of permitted extension type URLs. Extension configuration updates are rejected
2536    /// if they do not match any type URL in the set.
2537    #[prost(string, repeated, tag = "4")]
2538    pub type_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2539}
2540impl ::prost::Name for ExtensionConfigSource {
2541    const NAME: &'static str = "ExtensionConfigSource";
2542    const PACKAGE: &'static str = "envoy.config.core.v3";
2543    fn full_name() -> ::prost::alloc::string::String {
2544        "envoy.config.core.v3.ExtensionConfigSource".into()
2545    }
2546    fn type_url() -> ::prost::alloc::string::String {
2547        "type.googleapis.com/envoy.config.core.v3.ExtensionConfigSource".into()
2548    }
2549}
2550/// xDS API and non-xDS services version. This is used to describe both resource and transport
2551/// protocol versions (in distinct configuration fields).
2552#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2553#[repr(i32)]
2554pub enum ApiVersion {
2555    /// When not specified, we assume v3; it is the only supported version.
2556    Auto = 0,
2557    /// Use xDS v2 API. This is no longer supported.
2558    V2 = 1,
2559    /// Use xDS v3 API.
2560    V3 = 2,
2561}
2562impl ApiVersion {
2563    /// String value of the enum field names used in the ProtoBuf definition.
2564    ///
2565    /// The values are not transformed in any way and thus are considered stable
2566    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2567    pub fn as_str_name(&self) -> &'static str {
2568        match self {
2569            Self::Auto => "AUTO",
2570            Self::V2 => "V2",
2571            Self::V3 => "V3",
2572        }
2573    }
2574    /// Creates an enum from field names used in the ProtoBuf definition.
2575    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2576        match value {
2577            "AUTO" => Some(Self::Auto),
2578            "V2" => Some(Self::V2),
2579            "V3" => Some(Self::V3),
2580            _ => None,
2581        }
2582    }
2583}
2584/// \[#not-implemented-hide:\]
2585/// Configuration of the event reporting service endpoint.
2586#[derive(Clone, PartialEq, ::prost::Message)]
2587pub struct EventServiceConfig {
2588    #[prost(oneof = "event_service_config::ConfigSourceSpecifier", tags = "1")]
2589    pub config_source_specifier: ::core::option::Option<
2590        event_service_config::ConfigSourceSpecifier,
2591    >,
2592}
2593/// Nested message and enum types in `EventServiceConfig`.
2594pub mod event_service_config {
2595    #[derive(Clone, PartialEq, ::prost::Oneof)]
2596    pub enum ConfigSourceSpecifier {
2597        /// Specifies the gRPC service that hosts the event reporting service.
2598        #[prost(message, tag = "1")]
2599        GrpcService(super::GrpcService),
2600    }
2601}
2602impl ::prost::Name for EventServiceConfig {
2603    const NAME: &'static str = "EventServiceConfig";
2604    const PACKAGE: &'static str = "envoy.config.core.v3";
2605    fn full_name() -> ::prost::alloc::string::String {
2606        "envoy.config.core.v3.EventServiceConfig".into()
2607    }
2608    fn type_url() -> ::prost::alloc::string::String {
2609        "type.googleapis.com/envoy.config.core.v3.EventServiceConfig".into()
2610    }
2611}
2612#[derive(Clone, PartialEq, ::prost::Message)]
2613pub struct HealthStatusSet {
2614    /// An order-independent set of health status.
2615    #[prost(enumeration = "HealthStatus", repeated, packed = "false", tag = "1")]
2616    pub statuses: ::prost::alloc::vec::Vec<i32>,
2617}
2618impl ::prost::Name for HealthStatusSet {
2619    const NAME: &'static str = "HealthStatusSet";
2620    const PACKAGE: &'static str = "envoy.config.core.v3";
2621    fn full_name() -> ::prost::alloc::string::String {
2622        "envoy.config.core.v3.HealthStatusSet".into()
2623    }
2624    fn type_url() -> ::prost::alloc::string::String {
2625        "type.googleapis.com/envoy.config.core.v3.HealthStatusSet".into()
2626    }
2627}
2628/// \[#next-free-field: 27\]
2629#[derive(Clone, PartialEq, ::prost::Message)]
2630pub struct HealthCheck {
2631    /// The time to wait for a health check response. If the timeout is reached the
2632    /// health check attempt will be considered a failure.
2633    #[prost(message, optional, tag = "1")]
2634    pub timeout: ::core::option::Option<
2635        super::super::super::super::google::protobuf::Duration,
2636    >,
2637    /// The interval between health checks.
2638    #[prost(message, optional, tag = "2")]
2639    pub interval: ::core::option::Option<
2640        super::super::super::super::google::protobuf::Duration,
2641    >,
2642    /// An optional jitter amount in milliseconds. If specified, Envoy will start health
2643    /// checking after for a random time in ms between 0 and initial_jitter. This only
2644    /// applies to the first health check.
2645    #[prost(message, optional, tag = "20")]
2646    pub initial_jitter: ::core::option::Option<
2647        super::super::super::super::google::protobuf::Duration,
2648    >,
2649    /// An optional jitter amount in milliseconds. If specified, during every
2650    /// interval Envoy will add interval_jitter to the wait time.
2651    #[prost(message, optional, tag = "3")]
2652    pub interval_jitter: ::core::option::Option<
2653        super::super::super::super::google::protobuf::Duration,
2654    >,
2655    /// An optional jitter amount as a percentage of interval_ms. If specified,
2656    /// during every interval Envoy will add ``interval_ms`` *
2657    /// ``interval_jitter_percent`` / 100 to the wait time.
2658    ///
2659    /// If interval_jitter_ms and interval_jitter_percent are both set, both of
2660    /// them will be used to increase the wait time.
2661    #[prost(uint32, tag = "18")]
2662    pub interval_jitter_percent: u32,
2663    /// The number of unhealthy health checks required before a host is marked
2664    /// unhealthy. Note that for ``http`` health checking if a host responds with a code not in
2665    /// :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`
2666    /// or :ref:`retriable_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.retriable_statuses>`,
2667    /// this threshold is ignored and the host is considered immediately unhealthy.
2668    #[prost(message, optional, tag = "4")]
2669    pub unhealthy_threshold: ::core::option::Option<
2670        super::super::super::super::google::protobuf::UInt32Value,
2671    >,
2672    /// The number of healthy health checks required before a host is marked
2673    /// healthy. Note that during startup, only a single successful health check is
2674    /// required to mark a host healthy.
2675    #[prost(message, optional, tag = "5")]
2676    pub healthy_threshold: ::core::option::Option<
2677        super::super::super::super::google::protobuf::UInt32Value,
2678    >,
2679    /// \[#not-implemented-hide:\] Non-serving port for health checking.
2680    #[prost(message, optional, tag = "6")]
2681    pub alt_port: ::core::option::Option<
2682        super::super::super::super::google::protobuf::UInt32Value,
2683    >,
2684    /// Reuse health check connection between health checks. Default is true.
2685    #[prost(message, optional, tag = "7")]
2686    pub reuse_connection: ::core::option::Option<
2687        super::super::super::super::google::protobuf::BoolValue,
2688    >,
2689    /// The "no traffic interval" is a special health check interval that is used when a cluster has
2690    /// never had traffic routed to it. This lower interval allows cluster information to be kept up to
2691    /// date, without sending a potentially large amount of active health checking traffic for no
2692    /// reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the
2693    /// standard health check interval that is defined. Note that this interval takes precedence over
2694    /// any other.
2695    ///
2696    /// The default value for "no traffic interval" is 60 seconds.
2697    #[prost(message, optional, tag = "12")]
2698    pub no_traffic_interval: ::core::option::Option<
2699        super::super::super::super::google::protobuf::Duration,
2700    >,
2701    /// The "no traffic healthy interval" is a special health check interval that
2702    /// is used for hosts that are currently passing active health checking
2703    /// (including new hosts) when the cluster has received no traffic.
2704    ///
2705    /// This is useful for when we want to send frequent health checks with
2706    /// ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once
2707    /// a host in the cluster is marked as healthy.
2708    ///
2709    /// Once a cluster has been used for traffic routing, Envoy will shift back to using the
2710    /// standard health check interval that is defined.
2711    ///
2712    /// If no_traffic_healthy_interval is not set, it will default to the
2713    /// no traffic interval and send that interval regardless of health state.
2714    #[prost(message, optional, tag = "24")]
2715    pub no_traffic_healthy_interval: ::core::option::Option<
2716        super::super::super::super::google::protobuf::Duration,
2717    >,
2718    /// The "unhealthy interval" is a health check interval that is used for hosts that are marked as
2719    /// unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the
2720    /// standard health check interval that is defined.
2721    ///
2722    /// The default value for "unhealthy interval" is the same as "interval".
2723    #[prost(message, optional, tag = "14")]
2724    pub unhealthy_interval: ::core::option::Option<
2725        super::super::super::super::google::protobuf::Duration,
2726    >,
2727    /// The "unhealthy edge interval" is a special health check interval that is used for the first
2728    /// health check right after a host is marked as unhealthy. For subsequent health checks
2729    /// Envoy will shift back to using either "unhealthy interval" if present or the standard health
2730    /// check interval that is defined.
2731    ///
2732    /// The default value for "unhealthy edge interval" is the same as "unhealthy interval".
2733    #[prost(message, optional, tag = "15")]
2734    pub unhealthy_edge_interval: ::core::option::Option<
2735        super::super::super::super::google::protobuf::Duration,
2736    >,
2737    /// The "healthy edge interval" is a special health check interval that is used for the first
2738    /// health check right after a host is marked as healthy. For subsequent health checks
2739    /// Envoy will shift back to using the standard health check interval that is defined.
2740    ///
2741    /// The default value for "healthy edge interval" is the same as the default interval.
2742    #[prost(message, optional, tag = "16")]
2743    pub healthy_edge_interval: ::core::option::Option<
2744        super::super::super::super::google::protobuf::Duration,
2745    >,
2746    /// .. attention::
2747    /// This field is deprecated in favor of the extension
2748    /// :ref:`event_logger <envoy_v3_api_field_config.core.v3.HealthCheck.event_logger>` and
2749    /// :ref:`event_log_path <envoy_v3_api_field_extensions.health_check.event_sinks.file.v3.HealthCheckEventFileSink.event_log_path>`
2750    /// in the file sink extension.
2751    ///
2752    /// Specifies the path to the :ref:`health check event log <arch_overview_health_check_logging>`.
2753    #[deprecated]
2754    #[prost(string, tag = "17")]
2755    pub event_log_path: ::prost::alloc::string::String,
2756    /// A list of event log sinks to process the health check event.
2757    /// \[#extension-category: envoy.health_check.event_sinks\]
2758    #[prost(message, repeated, tag = "25")]
2759    pub event_logger: ::prost::alloc::vec::Vec<TypedExtensionConfig>,
2760    /// \[#not-implemented-hide:\]
2761    /// The gRPC service for the health check event service.
2762    /// If empty, health check events won't be sent to a remote endpoint.
2763    #[prost(message, optional, tag = "22")]
2764    pub event_service: ::core::option::Option<EventServiceConfig>,
2765    /// If set to true, health check failure events will always be logged. If set to false, only the
2766    /// initial health check failure event will be logged.
2767    /// The default value is false.
2768    #[prost(bool, tag = "19")]
2769    pub always_log_health_check_failures: bool,
2770    /// If set to true, health check success events will always be logged. If set to false, only host addition event will be logged
2771    /// if it is the first successful health check, or if the healthy threshold is reached.
2772    /// The default value is false.
2773    #[prost(bool, tag = "26")]
2774    pub always_log_health_check_success: bool,
2775    /// This allows overriding the cluster TLS settings, just for health check connections.
2776    #[prost(message, optional, tag = "21")]
2777    pub tls_options: ::core::option::Option<health_check::TlsOptions>,
2778    /// Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's
2779    /// :ref:`tranport socket matches <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket_matches>`.
2780    /// For example, the following match criteria
2781    ///
2782    /// .. code-block:: yaml
2783    ///
2784    ///   transport_socket_match_criteria:
2785    ///     useMTLS: true
2786    ///
2787    /// Will match the following :ref:`cluster socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>`
2788    ///
2789    /// .. code-block:: yaml
2790    ///
2791    ///   transport_socket_matches:
2792    ///   - name: "useMTLS"
2793    ///     match:
2794    ///       useMTLS: true
2795    ///     transport_socket:
2796    ///       name: envoy.transport_sockets.tls
2797    ///       config: { ... } # tls socket configuration
2798    ///
2799    /// If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the
2800    /// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`.
2801    /// This allows using different transport socket capabilities for health checking versus proxying to the
2802    /// endpoint.
2803    ///
2804    /// If the key/values pairs specified do not match any
2805    /// :ref:`transport socket matches <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket_matches>`,
2806    /// the cluster's :ref:`transport socket <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket>`
2807    /// will be used for health check socket configuration.
2808    #[prost(message, optional, tag = "23")]
2809    pub transport_socket_match_criteria: ::core::option::Option<
2810        super::super::super::super::google::protobuf::Struct,
2811    >,
2812    #[prost(oneof = "health_check::HealthChecker", tags = "8, 9, 11, 13")]
2813    pub health_checker: ::core::option::Option<health_check::HealthChecker>,
2814}
2815/// Nested message and enum types in `HealthCheck`.
2816pub mod health_check {
2817    /// Describes the encoding of the payload bytes in the payload.
2818    #[derive(Clone, PartialEq, ::prost::Message)]
2819    pub struct Payload {
2820        #[prost(oneof = "payload::Payload", tags = "1, 2")]
2821        pub payload: ::core::option::Option<payload::Payload>,
2822    }
2823    /// Nested message and enum types in `Payload`.
2824    pub mod payload {
2825        #[derive(Clone, PartialEq, ::prost::Oneof)]
2826        pub enum Payload {
2827            /// Hex encoded payload. E.g., "000000FF".
2828            #[prost(string, tag = "1")]
2829            Text(::prost::alloc::string::String),
2830            /// Binary payload.
2831            #[prost(bytes, tag = "2")]
2832            Binary(::prost::alloc::vec::Vec<u8>),
2833        }
2834    }
2835    impl ::prost::Name for Payload {
2836        const NAME: &'static str = "Payload";
2837        const PACKAGE: &'static str = "envoy.config.core.v3";
2838        fn full_name() -> ::prost::alloc::string::String {
2839            "envoy.config.core.v3.HealthCheck.Payload".into()
2840        }
2841        fn type_url() -> ::prost::alloc::string::String {
2842            "type.googleapis.com/envoy.config.core.v3.HealthCheck.Payload".into()
2843        }
2844    }
2845    /// \[#next-free-field: 15\]
2846    #[derive(Clone, PartialEq, ::prost::Message)]
2847    pub struct HttpHealthCheck {
2848        /// The value of the host header in the HTTP health check request. If
2849        /// left empty (default value), the name of the cluster this health check is associated
2850        /// with will be used. The host header can be customized for a specific endpoint by setting the
2851        /// :ref:`hostname <envoy_v3_api_field_config.endpoint.v3.Endpoint.HealthCheckConfig.hostname>` field.
2852        #[prost(string, tag = "1")]
2853        pub host: ::prost::alloc::string::String,
2854        /// Specifies the HTTP path that will be requested during health checking. For example
2855        /// ``/healthcheck``.
2856        #[prost(string, tag = "2")]
2857        pub path: ::prost::alloc::string::String,
2858        /// \[#not-implemented-hide:\] HTTP specific payload.
2859        #[prost(message, optional, tag = "3")]
2860        pub send: ::core::option::Option<Payload>,
2861        /// Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.
2862        /// If it is set, both the expected response check and status code determine the health check.
2863        /// When checking the response, “fuzzy” matching is performed such that each payload block must be found,
2864        /// and in the order specified, but not necessarily contiguous.
2865        ///
2866        /// .. note::
2867        ///
2868        ///    It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.
2869        ///    The default buffer size is 1024 bytes when it is not set.
2870        #[prost(message, repeated, tag = "4")]
2871        pub receive: ::prost::alloc::vec::Vec<Payload>,
2872        /// Specifies the size of response buffer in bytes that is used to Payload match.
2873        /// The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.
2874        #[prost(message, optional, tag = "14")]
2875        pub response_buffer_size: ::core::option::Option<
2876            super::super::super::super::super::google::protobuf::UInt64Value,
2877        >,
2878        /// Specifies a list of HTTP headers that should be added to each request that is sent to the
2879        /// health checked cluster. For more information, including details on header value syntax, see
2880        /// the documentation on :ref:`custom request headers
2881        /// <config_http_conn_man_headers_custom_request_headers>`.
2882        #[prost(message, repeated, tag = "6")]
2883        pub request_headers_to_add: ::prost::alloc::vec::Vec<super::HeaderValueOption>,
2884        /// Specifies a list of HTTP headers that should be removed from each request that is sent to the
2885        /// health checked cluster.
2886        #[prost(string, repeated, tag = "8")]
2887        pub request_headers_to_remove: ::prost::alloc::vec::Vec<
2888            ::prost::alloc::string::String,
2889        >,
2890        /// Specifies a list of HTTP response statuses considered healthy. If provided, replaces default
2891        /// 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open
2892        /// semantics of :ref:`Int64Range <envoy_v3_api_msg_type.v3.Int64Range>`. The start and end of each
2893        /// range are required. Only statuses in the range [100, 600) are allowed.
2894        #[prost(message, repeated, tag = "9")]
2895        pub expected_statuses: ::prost::alloc::vec::Vec<
2896            super::super::super::super::r#type::v3::Int64Range,
2897        >,
2898        /// Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range
2899        /// will count towards the configured :ref:`unhealthy_threshold <envoy_v3_api_field_config.core.v3.HealthCheck.unhealthy_threshold>`,
2900        /// but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of
2901        /// :ref:`Int64Range <envoy_v3_api_msg_type.v3.Int64Range>`. The start and end of each range are required.
2902        /// Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`
2903        /// field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will
2904        /// be considered a successful health check. By default all responses not in
2905        /// :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>` will result in
2906        /// the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any
2907        /// non-200 response will result in the host being marked unhealthy.
2908        #[prost(message, repeated, tag = "12")]
2909        pub retriable_statuses: ::prost::alloc::vec::Vec<
2910            super::super::super::super::r#type::v3::Int64Range,
2911        >,
2912        /// Use specified application protocol for health checks.
2913        #[prost(
2914            enumeration = "super::super::super::super::r#type::v3::CodecClientType",
2915            tag = "10"
2916        )]
2917        pub codec_client_type: i32,
2918        /// An optional service name parameter which is used to validate the identity of
2919        /// the health checked cluster using a :ref:`StringMatcher
2920        /// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>`. See the :ref:`architecture overview
2921        /// <arch_overview_health_checking_identity>` for more information.
2922        #[prost(message, optional, tag = "11")]
2923        pub service_name_matcher: ::core::option::Option<
2924            super::super::super::super::r#type::matcher::v3::StringMatcher,
2925        >,
2926        /// HTTP Method that will be used for health checking, default is "GET".
2927        /// GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE, PATCH methods are supported, but making request body is not supported.
2928        /// CONNECT method is disallowed because it is not appropriate for health check request.
2929        /// If a non-200 response is expected by the method, it needs to be set in :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`.
2930        #[prost(enumeration = "super::RequestMethod", tag = "13")]
2931        pub method: i32,
2932    }
2933    impl ::prost::Name for HttpHealthCheck {
2934        const NAME: &'static str = "HttpHealthCheck";
2935        const PACKAGE: &'static str = "envoy.config.core.v3";
2936        fn full_name() -> ::prost::alloc::string::String {
2937            "envoy.config.core.v3.HealthCheck.HttpHealthCheck".into()
2938        }
2939        fn type_url() -> ::prost::alloc::string::String {
2940            "type.googleapis.com/envoy.config.core.v3.HealthCheck.HttpHealthCheck".into()
2941        }
2942    }
2943    #[derive(Clone, PartialEq, ::prost::Message)]
2944    pub struct TcpHealthCheck {
2945        /// Empty payloads imply a connect-only health check.
2946        #[prost(message, optional, tag = "1")]
2947        pub send: ::core::option::Option<Payload>,
2948        /// When checking the response, “fuzzy” matching is performed such that each
2949        /// payload block must be found, and in the order specified, but not
2950        /// necessarily contiguous.
2951        #[prost(message, repeated, tag = "2")]
2952        pub receive: ::prost::alloc::vec::Vec<Payload>,
2953        /// When setting this value, it tries to attempt health check request with ProxyProtocol.
2954        /// When ``send`` is presented, they are sent after preceding ProxyProtocol header.
2955        /// Only ProxyProtocol header is sent when ``send`` is not presented.
2956        /// It allows to use both ProxyProtocol V1 and V2. In V1, it presents L3/L4. In V2, it includes
2957        /// LOCAL command and doesn't include L3/L4.
2958        #[prost(message, optional, tag = "3")]
2959        pub proxy_protocol_config: ::core::option::Option<super::ProxyProtocolConfig>,
2960    }
2961    impl ::prost::Name for TcpHealthCheck {
2962        const NAME: &'static str = "TcpHealthCheck";
2963        const PACKAGE: &'static str = "envoy.config.core.v3";
2964        fn full_name() -> ::prost::alloc::string::String {
2965            "envoy.config.core.v3.HealthCheck.TcpHealthCheck".into()
2966        }
2967        fn type_url() -> ::prost::alloc::string::String {
2968            "type.googleapis.com/envoy.config.core.v3.HealthCheck.TcpHealthCheck".into()
2969        }
2970    }
2971    #[derive(Clone, PartialEq, ::prost::Message)]
2972    pub struct RedisHealthCheck {
2973        /// If set, optionally perform ``EXISTS <key>`` instead of ``PING``. A return value
2974        /// from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other
2975        /// than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance
2976        /// by setting the specified key to any value and waiting for traffic to drain.
2977        #[prost(string, tag = "1")]
2978        pub key: ::prost::alloc::string::String,
2979    }
2980    impl ::prost::Name for RedisHealthCheck {
2981        const NAME: &'static str = "RedisHealthCheck";
2982        const PACKAGE: &'static str = "envoy.config.core.v3";
2983        fn full_name() -> ::prost::alloc::string::String {
2984            "envoy.config.core.v3.HealthCheck.RedisHealthCheck".into()
2985        }
2986        fn type_url() -> ::prost::alloc::string::String {
2987            "type.googleapis.com/envoy.config.core.v3.HealthCheck.RedisHealthCheck"
2988                .into()
2989        }
2990    }
2991    /// `grpc.health.v1.Health
2992    /// <<https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto>`_-based>
2993    /// healthcheck. See `gRPC doc <<https://github.com/grpc/grpc/blob/master/doc/health-checking.md>`_>
2994    /// for details.
2995    #[derive(Clone, PartialEq, ::prost::Message)]
2996    pub struct GrpcHealthCheck {
2997        /// An optional service name parameter which will be sent to gRPC service in
2998        /// `grpc.health.v1.HealthCheckRequest
2999        /// <<https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto#L20>`_.>
3000        /// message. See `gRPC health-checking overview
3001        /// <<https://github.com/grpc/grpc/blob/master/doc/health-checking.md>`_> for more information.
3002        #[prost(string, tag = "1")]
3003        pub service_name: ::prost::alloc::string::String,
3004        /// The value of the :authority header in the gRPC health check request. If
3005        /// left empty (default value), the name of the cluster this health check is associated
3006        /// with will be used. The authority header can be customized for a specific endpoint by setting
3007        /// the :ref:`hostname <envoy_v3_api_field_config.endpoint.v3.Endpoint.HealthCheckConfig.hostname>` field.
3008        #[prost(string, tag = "2")]
3009        pub authority: ::prost::alloc::string::String,
3010        /// Specifies a list of key-value pairs that should be added to the metadata of each GRPC call
3011        /// that is sent to the health checked cluster. For more information, including details on header value syntax,
3012        /// see the documentation on :ref:`custom request headers
3013        /// <config_http_conn_man_headers_custom_request_headers>`.
3014        #[prost(message, repeated, tag = "3")]
3015        pub initial_metadata: ::prost::alloc::vec::Vec<super::HeaderValueOption>,
3016    }
3017    impl ::prost::Name for GrpcHealthCheck {
3018        const NAME: &'static str = "GrpcHealthCheck";
3019        const PACKAGE: &'static str = "envoy.config.core.v3";
3020        fn full_name() -> ::prost::alloc::string::String {
3021            "envoy.config.core.v3.HealthCheck.GrpcHealthCheck".into()
3022        }
3023        fn type_url() -> ::prost::alloc::string::String {
3024            "type.googleapis.com/envoy.config.core.v3.HealthCheck.GrpcHealthCheck".into()
3025        }
3026    }
3027    /// Custom health check.
3028    #[derive(Clone, PartialEq, ::prost::Message)]
3029    pub struct CustomHealthCheck {
3030        /// The registered name of the custom health checker.
3031        #[prost(string, tag = "1")]
3032        pub name: ::prost::alloc::string::String,
3033        /// A custom health checker specific configuration which depends on the custom health checker
3034        /// being instantiated. See :api:`envoy/config/health_checker` for reference.
3035        /// \[#extension-category: envoy.health_checkers\]
3036        #[prost(oneof = "custom_health_check::ConfigType", tags = "3")]
3037        pub config_type: ::core::option::Option<custom_health_check::ConfigType>,
3038    }
3039    /// Nested message and enum types in `CustomHealthCheck`.
3040    pub mod custom_health_check {
3041        /// A custom health checker specific configuration which depends on the custom health checker
3042        /// being instantiated. See :api:`envoy/config/health_checker` for reference.
3043        /// \[#extension-category: envoy.health_checkers\]
3044        #[derive(Clone, PartialEq, ::prost::Oneof)]
3045        pub enum ConfigType {
3046            #[prost(message, tag = "3")]
3047            TypedConfig(super::super::super::super::super::super::google::protobuf::Any),
3048        }
3049    }
3050    impl ::prost::Name for CustomHealthCheck {
3051        const NAME: &'static str = "CustomHealthCheck";
3052        const PACKAGE: &'static str = "envoy.config.core.v3";
3053        fn full_name() -> ::prost::alloc::string::String {
3054            "envoy.config.core.v3.HealthCheck.CustomHealthCheck".into()
3055        }
3056        fn type_url() -> ::prost::alloc::string::String {
3057            "type.googleapis.com/envoy.config.core.v3.HealthCheck.CustomHealthCheck"
3058                .into()
3059        }
3060    }
3061    /// Health checks occur over the transport socket specified for the cluster. This implies that if a
3062    /// cluster is using a TLS-enabled transport socket, the health check will also occur over TLS.
3063    ///
3064    /// This allows overriding the cluster TLS settings, just for health check connections.
3065    #[derive(Clone, PartialEq, ::prost::Message)]
3066    pub struct TlsOptions {
3067        /// Specifies the ALPN protocols for health check connections. This is useful if the
3068        /// corresponding upstream is using ALPN-based :ref:`FilterChainMatch
3069        /// <envoy_v3_api_msg_config.listener.v3.FilterChainMatch>` along with different protocols for health checks
3070        /// versus data connections. If empty, no ALPN protocols will be set on health check connections.
3071        #[prost(string, repeated, tag = "1")]
3072        pub alpn_protocols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3073    }
3074    impl ::prost::Name for TlsOptions {
3075        const NAME: &'static str = "TlsOptions";
3076        const PACKAGE: &'static str = "envoy.config.core.v3";
3077        fn full_name() -> ::prost::alloc::string::String {
3078            "envoy.config.core.v3.HealthCheck.TlsOptions".into()
3079        }
3080        fn type_url() -> ::prost::alloc::string::String {
3081            "type.googleapis.com/envoy.config.core.v3.HealthCheck.TlsOptions".into()
3082        }
3083    }
3084    #[derive(Clone, PartialEq, ::prost::Oneof)]
3085    pub enum HealthChecker {
3086        /// HTTP health check.
3087        #[prost(message, tag = "8")]
3088        HttpHealthCheck(HttpHealthCheck),
3089        /// TCP health check.
3090        #[prost(message, tag = "9")]
3091        TcpHealthCheck(TcpHealthCheck),
3092        /// gRPC health check.
3093        #[prost(message, tag = "11")]
3094        GrpcHealthCheck(GrpcHealthCheck),
3095        /// Custom health check.
3096        #[prost(message, tag = "13")]
3097        CustomHealthCheck(CustomHealthCheck),
3098    }
3099}
3100impl ::prost::Name for HealthCheck {
3101    const NAME: &'static str = "HealthCheck";
3102    const PACKAGE: &'static str = "envoy.config.core.v3";
3103    fn full_name() -> ::prost::alloc::string::String {
3104        "envoy.config.core.v3.HealthCheck".into()
3105    }
3106    fn type_url() -> ::prost::alloc::string::String {
3107        "type.googleapis.com/envoy.config.core.v3.HealthCheck".into()
3108    }
3109}
3110/// Endpoint health status.
3111#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3112#[repr(i32)]
3113pub enum HealthStatus {
3114    /// The health status is not known. This is interpreted by Envoy as ``HEALTHY``.
3115    Unknown = 0,
3116    /// Healthy.
3117    Healthy = 1,
3118    /// Unhealthy.
3119    Unhealthy = 2,
3120    /// Connection draining in progress. E.g.,
3121    /// `<<https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/>`_>
3122    /// or
3123    /// `<<https://cloud.google.com/compute/docs/load-balancing/enabling-connection-draining>`_.>
3124    /// This is interpreted by Envoy as ``UNHEALTHY``.
3125    Draining = 3,
3126    /// Health check timed out. This is part of HDS and is interpreted by Envoy as
3127    /// ``UNHEALTHY``.
3128    Timeout = 4,
3129    /// Degraded.
3130    Degraded = 5,
3131}
3132impl HealthStatus {
3133    /// String value of the enum field names used in the ProtoBuf definition.
3134    ///
3135    /// The values are not transformed in any way and thus are considered stable
3136    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3137    pub fn as_str_name(&self) -> &'static str {
3138        match self {
3139            Self::Unknown => "UNKNOWN",
3140            Self::Healthy => "HEALTHY",
3141            Self::Unhealthy => "UNHEALTHY",
3142            Self::Draining => "DRAINING",
3143            Self::Timeout => "TIMEOUT",
3144            Self::Degraded => "DEGRADED",
3145        }
3146    }
3147    /// Creates an enum from field names used in the ProtoBuf definition.
3148    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3149        match value {
3150            "UNKNOWN" => Some(Self::Unknown),
3151            "HEALTHY" => Some(Self::Healthy),
3152            "UNHEALTHY" => Some(Self::Unhealthy),
3153            "DRAINING" => Some(Self::Draining),
3154            "TIMEOUT" => Some(Self::Timeout),
3155            "DEGRADED" => Some(Self::Degraded),
3156            _ => None,
3157        }
3158    }
3159}
3160/// \[#not-implemented-hide:\]
3161#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3162pub struct TcpProtocolOptions {}
3163impl ::prost::Name for TcpProtocolOptions {
3164    const NAME: &'static str = "TcpProtocolOptions";
3165    const PACKAGE: &'static str = "envoy.config.core.v3";
3166    fn full_name() -> ::prost::alloc::string::String {
3167        "envoy.config.core.v3.TcpProtocolOptions".into()
3168    }
3169    fn type_url() -> ::prost::alloc::string::String {
3170        "type.googleapis.com/envoy.config.core.v3.TcpProtocolOptions".into()
3171    }
3172}
3173/// Config for keepalive probes in a QUIC connection.
3174/// Note that QUIC keep-alive probing packets work differently from HTTP/2 keep-alive PINGs in a sense that the probing packet
3175/// itself doesn't timeout waiting for a probing response. Quic has a shorter idle timeout than TCP, so it doesn't rely on such probing to discover dead connections. If the peer fails to respond, the connection will idle timeout eventually. Thus, they are configured differently from :ref:`connection_keepalive <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.connection_keepalive>`.
3176#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3177pub struct QuicKeepAliveSettings {
3178    /// The max interval for a connection to send keep-alive probing packets (with PING or PATH_RESPONSE). The value should be smaller than :ref:`connection idle_timeout <envoy_v3_api_field_config.listener.v3.QuicProtocolOptions.idle_timeout>` to prevent idle timeout while not less than 1s to avoid throttling the connection or flooding the peer with probes.
3179    ///
3180    /// If :ref:`initial_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.initial_interval>` is absent or zero, a client connection will use this value to start probing.
3181    ///
3182    /// If zero, disable keepalive probing.
3183    /// If absent, use the QUICHE default interval to probe.
3184    #[prost(message, optional, tag = "1")]
3185    pub max_interval: ::core::option::Option<
3186        super::super::super::super::google::protobuf::Duration,
3187    >,
3188    /// The interval to send the first few keep-alive probing packets to prevent connection from hitting the idle timeout. Subsequent probes will be sent, each one with an interval exponentially longer than previous one, till it reaches :ref:`max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval>`. And the probes afterwards will always use :ref:`max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval>`.
3189    ///
3190    /// The value should be smaller than :ref:`connection idle_timeout <envoy_v3_api_field_config.listener.v3.QuicProtocolOptions.idle_timeout>` to prevent idle timeout and smaller than max_interval to take effect.
3191    ///
3192    /// If absent or zero, disable keepalive probing for a server connection. For a client connection, if :ref:`max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval>`  is also zero, do not keepalive, otherwise use max_interval or QUICHE default to probe all the time.
3193    #[prost(message, optional, tag = "2")]
3194    pub initial_interval: ::core::option::Option<
3195        super::super::super::super::google::protobuf::Duration,
3196    >,
3197}
3198impl ::prost::Name for QuicKeepAliveSettings {
3199    const NAME: &'static str = "QuicKeepAliveSettings";
3200    const PACKAGE: &'static str = "envoy.config.core.v3";
3201    fn full_name() -> ::prost::alloc::string::String {
3202        "envoy.config.core.v3.QuicKeepAliveSettings".into()
3203    }
3204    fn type_url() -> ::prost::alloc::string::String {
3205        "type.googleapis.com/envoy.config.core.v3.QuicKeepAliveSettings".into()
3206    }
3207}
3208/// QUIC protocol options which apply to both downstream and upstream connections.
3209/// \[#next-free-field: 9\]
3210#[derive(Clone, PartialEq, ::prost::Message)]
3211pub struct QuicProtocolOptions {
3212    /// Maximum number of streams that the client can negotiate per connection. 100
3213    /// if not specified.
3214    #[prost(message, optional, tag = "1")]
3215    pub max_concurrent_streams: ::core::option::Option<
3216        super::super::super::super::google::protobuf::UInt32Value,
3217    >,
3218    /// `Initial stream-level flow-control receive window
3219    /// <<https://tools.ietf.org/html/draft-ietf-quic-transport-34#section-4.1>`_> size. Valid values range from
3220    /// 1 to 16777216 (2^24, maximum supported by QUICHE) and defaults to 16777216 (16 * 1024 * 1024).
3221    ///
3222    /// NOTE: 16384 (2^14) is the minimum window size supported in Google QUIC. If configured smaller than it, we will use 16384 instead.
3223    /// QUICHE IETF Quic implementation supports 1 bytes window. We only support increasing the default window size now, so it's also the minimum.
3224    ///
3225    /// This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the
3226    /// QUIC stream send and receive buffers. Once the buffer reaches this pointer, watermark callbacks will fire to
3227    /// stop the flow of data to the stream buffers.
3228    #[prost(message, optional, tag = "2")]
3229    pub initial_stream_window_size: ::core::option::Option<
3230        super::super::super::super::google::protobuf::UInt32Value,
3231    >,
3232    /// Similar to ``initial_stream_window_size``, but for connection-level
3233    /// flow-control. Valid values rage from 1 to 25165824 (24MB, maximum supported by QUICHE) and defaults
3234    /// to 25165824 (24 * 1024 * 1024).
3235    ///
3236    /// NOTE: 16384 (2^14) is the minimum window size supported in Google QUIC. We only support increasing the default
3237    /// window size now, so it's also the minimum.
3238    #[prost(message, optional, tag = "3")]
3239    pub initial_connection_window_size: ::core::option::Option<
3240        super::super::super::super::google::protobuf::UInt32Value,
3241    >,
3242    /// The number of timeouts that can occur before port migration is triggered for QUIC clients.
3243    /// This defaults to 4. If set to 0, port migration will not occur on path degrading.
3244    /// Timeout here refers to QUIC internal path degrading timeout mechanism, such as PTO.
3245    /// This has no effect on server sessions.
3246    #[prost(message, optional, tag = "4")]
3247    pub num_timeouts_to_trigger_port_migration: ::core::option::Option<
3248        super::super::super::super::google::protobuf::UInt32Value,
3249    >,
3250    /// Probes the peer at the configured interval to solicit traffic, i.e. ACK or PATH_RESPONSE, from the peer to push back connection idle timeout.
3251    /// If absent, use the default keepalive behavior of which a client connection sends PINGs every 15s, and a server connection doesn't do anything.
3252    #[prost(message, optional, tag = "5")]
3253    pub connection_keepalive: ::core::option::Option<QuicKeepAliveSettings>,
3254    /// A comma-separated list of strings representing QUIC connection options defined in
3255    /// `QUICHE <<https://github.com/google/quiche/blob/main/quiche/quic/core/crypto/crypto_protocol.h>`_> and to be sent by upstream connections.
3256    #[prost(string, tag = "6")]
3257    pub connection_options: ::prost::alloc::string::String,
3258    /// A comma-separated list of strings representing QUIC client connection options defined in
3259    /// `QUICHE <<https://github.com/google/quiche/blob/main/quiche/quic/core/crypto/crypto_protocol.h>`_> and to be sent by upstream connections.
3260    #[prost(string, tag = "7")]
3261    pub client_connection_options: ::prost::alloc::string::String,
3262    /// The duration that a QUIC connection stays idle before it closes itself. If this field is not present, QUICHE
3263    /// default 600s will be applied.
3264    /// For internal corporate network, a long timeout is often fine.
3265    /// But for client facing network, 30s is usually a good choice.
3266    #[prost(message, optional, tag = "8")]
3267    pub idle_network_timeout: ::core::option::Option<
3268        super::super::super::super::google::protobuf::Duration,
3269    >,
3270}
3271impl ::prost::Name for QuicProtocolOptions {
3272    const NAME: &'static str = "QuicProtocolOptions";
3273    const PACKAGE: &'static str = "envoy.config.core.v3";
3274    fn full_name() -> ::prost::alloc::string::String {
3275        "envoy.config.core.v3.QuicProtocolOptions".into()
3276    }
3277    fn type_url() -> ::prost::alloc::string::String {
3278        "type.googleapis.com/envoy.config.core.v3.QuicProtocolOptions".into()
3279    }
3280}
3281#[derive(Clone, PartialEq, ::prost::Message)]
3282pub struct UpstreamHttpProtocolOptions {
3283    /// Set transport socket `SNI <<https://en.wikipedia.org/wiki/Server_Name_Indication>`_> for new
3284    /// upstream connections based on the downstream HTTP host/authority header or any other arbitrary
3285    /// header when :ref:`override_auto_sni_header <envoy_v3_api_field_config.core.v3.UpstreamHttpProtocolOptions.override_auto_sni_header>`
3286    /// is set, as seen by the :ref:`router filter <config_http_filters_router>`.
3287    /// Does nothing if a filter before the http router filter sets the corresponding metadata.
3288    #[prost(bool, tag = "1")]
3289    pub auto_sni: bool,
3290    /// Automatic validate upstream presented certificate for new upstream connections based on the
3291    /// downstream HTTP host/authority header or any other arbitrary header when :ref:`override_auto_sni_header <envoy_v3_api_field_config.core.v3.UpstreamHttpProtocolOptions.override_auto_sni_header>`
3292    /// is set, as seen by the :ref:`router filter <config_http_filters_router>`.
3293    /// This field is intended to be set with ``auto_sni`` field.
3294    /// Does nothing if a filter before the http router filter sets the corresponding metadata.
3295    #[prost(bool, tag = "2")]
3296    pub auto_san_validation: bool,
3297    /// An optional alternative to the host/authority header to be used for setting the SNI value.
3298    /// It should be a valid downstream HTTP header, as seen by the
3299    /// :ref:`router filter <config_http_filters_router>`.
3300    /// If unset, host/authority header will be used for populating the SNI. If the specified header
3301    /// is not found or the value is empty, host/authority header will be used instead.
3302    /// This field is intended to be set with ``auto_sni`` and/or ``auto_san_validation`` fields.
3303    /// If none of these fields are set then setting this would be a no-op.
3304    /// Does nothing if a filter before the http router filter sets the corresponding metadata.
3305    #[prost(string, tag = "3")]
3306    pub override_auto_sni_header: ::prost::alloc::string::String,
3307}
3308impl ::prost::Name for UpstreamHttpProtocolOptions {
3309    const NAME: &'static str = "UpstreamHttpProtocolOptions";
3310    const PACKAGE: &'static str = "envoy.config.core.v3";
3311    fn full_name() -> ::prost::alloc::string::String {
3312        "envoy.config.core.v3.UpstreamHttpProtocolOptions".into()
3313    }
3314    fn type_url() -> ::prost::alloc::string::String {
3315        "type.googleapis.com/envoy.config.core.v3.UpstreamHttpProtocolOptions".into()
3316    }
3317}
3318/// Configures the alternate protocols cache which tracks alternate protocols that can be used to
3319/// make an HTTP connection to an origin server. See <https://tools.ietf.org/html/rfc7838> for
3320/// HTTP Alternative Services and <https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-04>
3321/// for the "HTTPS" DNS resource record.
3322/// \[#next-free-field: 6\]
3323#[derive(Clone, PartialEq, ::prost::Message)]
3324pub struct AlternateProtocolsCacheOptions {
3325    /// The name of the cache. Multiple named caches allow independent alternate protocols cache
3326    /// configurations to operate within a single Envoy process using different configurations. All
3327    /// alternate protocols cache options with the same name *must* be equal in all fields when
3328    /// referenced from different configuration components. Configuration will fail to load if this is
3329    /// not the case.
3330    #[prost(string, tag = "1")]
3331    pub name: ::prost::alloc::string::String,
3332    /// The maximum number of entries that the cache will hold. If not specified defaults to 1024.
3333    ///
3334    /// .. note:
3335    ///
3336    ///    The implementation is approximate and enforced independently on each worker thread, thus
3337    ///    it is possible for the maximum entries in the cache to go slightly above the configured
3338    ///    value depending on timing. This is similar to how other circuit breakers work.
3339    #[prost(message, optional, tag = "2")]
3340    pub max_entries: ::core::option::Option<
3341        super::super::super::super::google::protobuf::UInt32Value,
3342    >,
3343    /// Allows configuring a persistent
3344    /// :ref:`key value store <envoy_v3_api_msg_config.common.key_value.v3.KeyValueStoreConfig>` to flush
3345    /// alternate protocols entries to disk.
3346    /// This function is currently only supported if concurrency is 1
3347    /// Cached entries will take precedence over pre-populated entries below.
3348    #[prost(message, optional, tag = "3")]
3349    pub key_value_store_config: ::core::option::Option<TypedExtensionConfig>,
3350    /// Allows pre-populating the cache with entries, as described above.
3351    #[prost(message, repeated, tag = "4")]
3352    pub prepopulated_entries: ::prost::alloc::vec::Vec<
3353        alternate_protocols_cache_options::AlternateProtocolsCacheEntry,
3354    >,
3355    /// Optional list of hostnames suffixes for which Alt-Svc entries can be shared. For example, if
3356    /// this list contained the value ``.c.example.com``, then an Alt-Svc entry for ``foo.c.example.com``
3357    /// could be shared with ``bar.c.example.com`` but would not be shared with ``baz.example.com``. On
3358    /// the other hand, if the list contained the value ``.example.com`` then all three hosts could share
3359    /// Alt-Svc entries. Each entry must start with ``.``. If a hostname matches multiple suffixes, the
3360    /// first listed suffix will be used.
3361    ///
3362    /// Since lookup in this list is O(n), it is recommended that the number of suffixes be limited.
3363    /// \[#not-implemented-hide:\]
3364    #[prost(string, repeated, tag = "5")]
3365    pub canonical_suffixes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3366}
3367/// Nested message and enum types in `AlternateProtocolsCacheOptions`.
3368pub mod alternate_protocols_cache_options {
3369    /// Allows pre-populating the cache with HTTP/3 alternate protocols entries with a 7 day lifetime.
3370    /// This will cause Envoy to attempt HTTP/3 to those upstreams, even if the upstreams have not
3371    /// advertised HTTP/3 support. These entries will be overwritten by alt-svc
3372    /// response headers or cached values.
3373    /// As with regular cached entries, if the origin response would result in clearing an existing
3374    /// alternate protocol cache entry, pre-populated entries will also be cleared.
3375    /// Adding a cache entry with hostname=foo.com port=123 is the equivalent of getting
3376    /// response headers
3377    /// alt-svc: h3=:"123"; ma=86400" in a response to a request to foo.com:123
3378    #[derive(Clone, PartialEq, ::prost::Message)]
3379    pub struct AlternateProtocolsCacheEntry {
3380        /// The host name for the alternate protocol entry.
3381        #[prost(string, tag = "1")]
3382        pub hostname: ::prost::alloc::string::String,
3383        /// The port for the alternate protocol entry.
3384        #[prost(uint32, tag = "2")]
3385        pub port: u32,
3386    }
3387    impl ::prost::Name for AlternateProtocolsCacheEntry {
3388        const NAME: &'static str = "AlternateProtocolsCacheEntry";
3389        const PACKAGE: &'static str = "envoy.config.core.v3";
3390        fn full_name() -> ::prost::alloc::string::String {
3391            "envoy.config.core.v3.AlternateProtocolsCacheOptions.AlternateProtocolsCacheEntry"
3392                .into()
3393        }
3394        fn type_url() -> ::prost::alloc::string::String {
3395            "type.googleapis.com/envoy.config.core.v3.AlternateProtocolsCacheOptions.AlternateProtocolsCacheEntry"
3396                .into()
3397        }
3398    }
3399}
3400impl ::prost::Name for AlternateProtocolsCacheOptions {
3401    const NAME: &'static str = "AlternateProtocolsCacheOptions";
3402    const PACKAGE: &'static str = "envoy.config.core.v3";
3403    fn full_name() -> ::prost::alloc::string::String {
3404        "envoy.config.core.v3.AlternateProtocolsCacheOptions".into()
3405    }
3406    fn type_url() -> ::prost::alloc::string::String {
3407        "type.googleapis.com/envoy.config.core.v3.AlternateProtocolsCacheOptions".into()
3408    }
3409}
3410/// \[#next-free-field: 7\]
3411#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3412pub struct HttpProtocolOptions {
3413    /// The idle timeout for connections. The idle timeout is defined as the
3414    /// period in which there are no active requests. When the
3415    /// idle timeout is reached the connection will be closed. If the connection is an HTTP/2
3416    /// downstream connection a drain sequence will occur prior to closing the connection, see
3417    /// :ref:`drain_timeout
3418    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.drain_timeout>`.
3419    /// Note that request based timeouts mean that HTTP/2 PINGs will not keep the connection alive.
3420    /// If not specified, this defaults to 1 hour. To disable idle timeouts explicitly set this to 0.
3421    ///
3422    /// .. warning::
3423    ///    Disabling this timeout has a highly likelihood of yielding connection leaks due to lost TCP
3424    ///    FIN packets, etc.
3425    ///
3426    /// If the :ref:`overload action <config_overload_manager_overload_actions>` "envoy.overload_actions.reduce_timeouts"
3427    /// is configured, this timeout is scaled for downstream connections according to the value for
3428    /// :ref:`HTTP_DOWNSTREAM_CONNECTION_IDLE <envoy_v3_api_enum_value_config.overload.v3.ScaleTimersOverloadActionConfig.TimerType.HTTP_DOWNSTREAM_CONNECTION_IDLE>`.
3429    #[prost(message, optional, tag = "1")]
3430    pub idle_timeout: ::core::option::Option<
3431        super::super::super::super::google::protobuf::Duration,
3432    >,
3433    /// The maximum duration of a connection. The duration is defined as a period since a connection
3434    /// was established. If not set, there is no max duration. When max_connection_duration is reached
3435    /// and if there are no active streams, the connection will be closed. If the connection is a
3436    /// downstream connection and there are any active streams, the drain sequence will kick-in,
3437    /// and the connection will be force-closed after the drain period. See :ref:`drain_timeout
3438    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.drain_timeout>`.
3439    #[prost(message, optional, tag = "3")]
3440    pub max_connection_duration: ::core::option::Option<
3441        super::super::super::super::google::protobuf::Duration,
3442    >,
3443    /// The maximum number of headers. If unconfigured, the default
3444    /// maximum number of request headers allowed is 100. Requests that exceed this limit will receive
3445    /// a 431 response for HTTP/1.x and cause a stream reset for HTTP/2.
3446    #[prost(message, optional, tag = "2")]
3447    pub max_headers_count: ::core::option::Option<
3448        super::super::super::super::google::protobuf::UInt32Value,
3449    >,
3450    /// Total duration to keep alive an HTTP request/response stream. If the time limit is reached the stream will be
3451    /// reset independent of any other timeouts. If not specified, this value is not set.
3452    #[prost(message, optional, tag = "4")]
3453    pub max_stream_duration: ::core::option::Option<
3454        super::super::super::super::google::protobuf::Duration,
3455    >,
3456    /// Action to take when a client request with a header name containing underscore characters is received.
3457    /// If this setting is not specified, the value defaults to ALLOW.
3458    /// Note: upstream responses are not affected by this setting.
3459    /// Note: this only affects client headers. It does not affect headers added
3460    /// by Envoy filters and does not have any impact if added to cluster config.
3461    #[prost(
3462        enumeration = "http_protocol_options::HeadersWithUnderscoresAction",
3463        tag = "5"
3464    )]
3465    pub headers_with_underscores_action: i32,
3466    /// Optional maximum requests for both upstream and downstream connections.
3467    /// If not specified, there is no limit.
3468    /// Setting this parameter to 1 will effectively disable keep alive.
3469    /// For HTTP/2 and HTTP/3, due to concurrent stream processing, the limit is approximate.
3470    #[prost(message, optional, tag = "6")]
3471    pub max_requests_per_connection: ::core::option::Option<
3472        super::super::super::super::google::protobuf::UInt32Value,
3473    >,
3474}
3475/// Nested message and enum types in `HttpProtocolOptions`.
3476pub mod http_protocol_options {
3477    /// Action to take when Envoy receives client request with header names containing underscore
3478    /// characters.
3479    /// Underscore character is allowed in header names by the RFC-7230 and this behavior is implemented
3480    /// as a security measure due to systems that treat '_' and '-' as interchangeable. Envoy by default allows client request headers with underscore
3481    /// characters.
3482    #[derive(
3483        Clone,
3484        Copy,
3485        Debug,
3486        PartialEq,
3487        Eq,
3488        Hash,
3489        PartialOrd,
3490        Ord,
3491        ::prost::Enumeration
3492    )]
3493    #[repr(i32)]
3494    pub enum HeadersWithUnderscoresAction {
3495        /// Allow headers with underscores. This is the default behavior.
3496        Allow = 0,
3497        /// Reject client request. HTTP/1 requests are rejected with the 400 status. HTTP/2 requests
3498        /// end with the stream reset. The "httpN.requests_rejected_with_underscores_in_headers" counter
3499        /// is incremented for each rejected request.
3500        RejectRequest = 1,
3501        /// Drop the client header with name containing underscores. The header is dropped before the filter chain is
3502        /// invoked and as such filters will not see dropped headers. The
3503        /// "httpN.dropped_headers_with_underscores" is incremented for each dropped header.
3504        DropHeader = 2,
3505    }
3506    impl HeadersWithUnderscoresAction {
3507        /// String value of the enum field names used in the ProtoBuf definition.
3508        ///
3509        /// The values are not transformed in any way and thus are considered stable
3510        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3511        pub fn as_str_name(&self) -> &'static str {
3512            match self {
3513                Self::Allow => "ALLOW",
3514                Self::RejectRequest => "REJECT_REQUEST",
3515                Self::DropHeader => "DROP_HEADER",
3516            }
3517        }
3518        /// Creates an enum from field names used in the ProtoBuf definition.
3519        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3520            match value {
3521                "ALLOW" => Some(Self::Allow),
3522                "REJECT_REQUEST" => Some(Self::RejectRequest),
3523                "DROP_HEADER" => Some(Self::DropHeader),
3524                _ => None,
3525            }
3526        }
3527    }
3528}
3529impl ::prost::Name for HttpProtocolOptions {
3530    const NAME: &'static str = "HttpProtocolOptions";
3531    const PACKAGE: &'static str = "envoy.config.core.v3";
3532    fn full_name() -> ::prost::alloc::string::String {
3533        "envoy.config.core.v3.HttpProtocolOptions".into()
3534    }
3535    fn type_url() -> ::prost::alloc::string::String {
3536        "type.googleapis.com/envoy.config.core.v3.HttpProtocolOptions".into()
3537    }
3538}
3539/// \[#next-free-field: 11\]
3540#[derive(Clone, PartialEq, ::prost::Message)]
3541pub struct Http1ProtocolOptions {
3542    /// Handle HTTP requests with absolute URLs in the requests. These requests
3543    /// are generally sent by clients to forward/explicit proxies. This allows clients to configure
3544    /// envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the
3545    /// ``http_proxy`` environment variable.
3546    #[prost(message, optional, tag = "1")]
3547    pub allow_absolute_url: ::core::option::Option<
3548        super::super::super::super::google::protobuf::BoolValue,
3549    >,
3550    /// Handle incoming HTTP/1.0 and HTTP 0.9 requests.
3551    /// This is off by default, and not fully standards compliant. There is support for pre-HTTP/1.1
3552    /// style connect logic, dechunking, and handling lack of client host iff
3553    /// ``default_host_for_http_10`` is configured.
3554    #[prost(bool, tag = "2")]
3555    pub accept_http_10: bool,
3556    /// A default host for HTTP/1.0 requests. This is highly suggested if ``accept_http_10`` is true as
3557    /// Envoy does not otherwise support HTTP/1.0 without a Host header.
3558    /// This is a no-op if ``accept_http_10`` is not true.
3559    #[prost(string, tag = "3")]
3560    pub default_host_for_http_10: ::prost::alloc::string::String,
3561    /// Describes how the keys for response headers should be formatted. By default, all header keys
3562    /// are lower cased.
3563    #[prost(message, optional, tag = "4")]
3564    pub header_key_format: ::core::option::Option<
3565        http1_protocol_options::HeaderKeyFormat,
3566    >,
3567    /// Enables trailers for HTTP/1. By default the HTTP/1 codec drops proxied trailers.
3568    ///
3569    /// .. attention::
3570    ///
3571    ///    Note that this only happens when Envoy is chunk encoding which occurs when:
3572    ///    - The request is HTTP/1.1.
3573    ///    - Is neither a HEAD only request nor a HTTP Upgrade.
3574    ///    - Not a response to a HEAD request.
3575    ///    - The content length header is not present.
3576    #[prost(bool, tag = "5")]
3577    pub enable_trailers: bool,
3578    /// Allows Envoy to process requests/responses with both ``Content-Length`` and ``Transfer-Encoding``
3579    /// headers set. By default such messages are rejected, but if option is enabled - Envoy will
3580    /// remove Content-Length header and process message.
3581    /// See `RFC7230, sec. 3.3.3 <<https://tools.ietf.org/html/rfc7230#section-3.3.3>`_> for details.
3582    ///
3583    /// .. attention::
3584    ///    Enabling this option might lead to request smuggling vulnerability, especially if traffic
3585    ///    is proxied via multiple layers of proxies.
3586    /// [#comment:TODO: This field is ignored when the
3587    /// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
3588    /// is present.]
3589    #[prost(bool, tag = "6")]
3590    pub allow_chunked_length: bool,
3591    /// Allows invalid HTTP messaging. When this option is false, then Envoy will terminate
3592    /// HTTP/1.1 connections upon receiving an invalid HTTP message. However,
3593    /// when this option is true, then Envoy will leave the HTTP/1.1 connection
3594    /// open where possible.
3595    /// If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
3596    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
3597    #[prost(message, optional, tag = "7")]
3598    pub override_stream_error_on_invalid_http_message: ::core::option::Option<
3599        super::super::super::super::google::protobuf::BoolValue,
3600    >,
3601    /// Allows sending fully qualified URLs when proxying the first line of the
3602    /// response. By default, Envoy will only send the path components in the first line.
3603    /// If this is true, Envoy will create a fully qualified URI composing scheme
3604    /// (inferred if not present), host (from the host/:authority header) and path
3605    /// (from first line or :path header).
3606    #[prost(bool, tag = "8")]
3607    pub send_fully_qualified_url: bool,
3608    /// \[#not-implemented-hide:\] Hiding so that field can be removed after BalsaParser is rolled out.
3609    /// If set, force HTTP/1 parser: BalsaParser if true, http-parser if false.
3610    /// If unset, HTTP/1 parser is selected based on
3611    /// envoy.reloadable_features.http1_use_balsa_parser.
3612    /// See issue #21245.
3613    #[prost(message, optional, tag = "9")]
3614    pub use_balsa_parser: ::core::option::Option<
3615        super::super::super::super::google::protobuf::BoolValue,
3616    >,
3617    /// \[#not-implemented-hide:\] Hiding so that field can be removed.
3618    /// If true, and BalsaParser is used (either `use_balsa_parser` above is true,
3619    /// or `envoy.reloadable_features.http1_use_balsa_parser` is true and
3620    /// `use_balsa_parser` is unset), then every non-empty method with only valid
3621    /// characters is accepted. Otherwise, methods not on the hard-coded list are
3622    /// rejected.
3623    /// Once UHV is enabled, this field should be removed, and BalsaParser should
3624    /// allow any method. UHV validates the method, rejecting empty string or
3625    /// invalid characters, and provides :ref:`restrict_http_methods
3626    /// <envoy_v3_api_field_extensions.http.header_validators.envoy_default.v3.HeaderValidatorConfig.restrict_http_methods>`
3627    /// to reject custom methods.
3628    #[prost(bool, tag = "10")]
3629    pub allow_custom_methods: bool,
3630}
3631/// Nested message and enum types in `Http1ProtocolOptions`.
3632pub mod http1_protocol_options {
3633    /// \[#next-free-field: 9\]
3634    #[derive(Clone, PartialEq, ::prost::Message)]
3635    pub struct HeaderKeyFormat {
3636        #[prost(oneof = "header_key_format::HeaderFormat", tags = "1, 8")]
3637        pub header_format: ::core::option::Option<header_key_format::HeaderFormat>,
3638    }
3639    /// Nested message and enum types in `HeaderKeyFormat`.
3640    pub mod header_key_format {
3641        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
3642        pub struct ProperCaseWords {}
3643        impl ::prost::Name for ProperCaseWords {
3644            const NAME: &'static str = "ProperCaseWords";
3645            const PACKAGE: &'static str = "envoy.config.core.v3";
3646            fn full_name() -> ::prost::alloc::string::String {
3647                "envoy.config.core.v3.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords"
3648                    .into()
3649            }
3650            fn type_url() -> ::prost::alloc::string::String {
3651                "type.googleapis.com/envoy.config.core.v3.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords"
3652                    .into()
3653            }
3654        }
3655        #[derive(Clone, PartialEq, ::prost::Oneof)]
3656        pub enum HeaderFormat {
3657            /// Formats the header by proper casing words: the first character and any character following
3658            /// a special character will be capitalized if it's an alpha character. For example,
3659            /// "content-type" becomes "Content-Type", and "foo$b#$are" becomes "Foo$B#$Are".
3660            /// Note that while this results in most headers following conventional casing, certain headers
3661            /// are not covered. For example, the "TE" header will be formatted as "Te".
3662            #[prost(message, tag = "1")]
3663            ProperCaseWords(ProperCaseWords),
3664            /// Configuration for stateful formatter extensions that allow using received headers to
3665            /// affect the output of encoding headers. E.g., preserving case during proxying.
3666            /// \[#extension-category: envoy.http.stateful_header_formatters\]
3667            #[prost(message, tag = "8")]
3668            StatefulFormatter(super::super::TypedExtensionConfig),
3669        }
3670    }
3671    impl ::prost::Name for HeaderKeyFormat {
3672        const NAME: &'static str = "HeaderKeyFormat";
3673        const PACKAGE: &'static str = "envoy.config.core.v3";
3674        fn full_name() -> ::prost::alloc::string::String {
3675            "envoy.config.core.v3.Http1ProtocolOptions.HeaderKeyFormat".into()
3676        }
3677        fn type_url() -> ::prost::alloc::string::String {
3678            "type.googleapis.com/envoy.config.core.v3.Http1ProtocolOptions.HeaderKeyFormat"
3679                .into()
3680        }
3681    }
3682}
3683impl ::prost::Name for Http1ProtocolOptions {
3684    const NAME: &'static str = "Http1ProtocolOptions";
3685    const PACKAGE: &'static str = "envoy.config.core.v3";
3686    fn full_name() -> ::prost::alloc::string::String {
3687        "envoy.config.core.v3.Http1ProtocolOptions".into()
3688    }
3689    fn type_url() -> ::prost::alloc::string::String {
3690        "type.googleapis.com/envoy.config.core.v3.Http1ProtocolOptions".into()
3691    }
3692}
3693#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3694pub struct KeepaliveSettings {
3695    /// Send HTTP/2 PING frames at this period, in order to test that the connection is still alive.
3696    /// If this is zero, interval PINGs will not be sent.
3697    #[prost(message, optional, tag = "1")]
3698    pub interval: ::core::option::Option<
3699        super::super::super::super::google::protobuf::Duration,
3700    >,
3701    /// How long to wait for a response to a keepalive PING. If a response is not received within this
3702    /// time period, the connection will be aborted. Note that in order to prevent the influence of
3703    /// Head-of-line (HOL) blocking the timeout period is extended when *any* frame is received on
3704    /// the connection, under the assumption that if a frame is received the connection is healthy.
3705    #[prost(message, optional, tag = "2")]
3706    pub timeout: ::core::option::Option<
3707        super::super::super::super::google::protobuf::Duration,
3708    >,
3709    /// A random jitter amount as a percentage of interval that will be added to each interval.
3710    /// A value of zero means there will be no jitter.
3711    /// The default value is 15%.
3712    #[prost(message, optional, tag = "3")]
3713    pub interval_jitter: ::core::option::Option<
3714        super::super::super::r#type::v3::Percent,
3715    >,
3716    /// If the connection has been idle for this duration, send a HTTP/2 ping ahead
3717    /// of new stream creation, to quickly detect dead connections.
3718    /// If this is zero, this type of PING will not be sent.
3719    /// If an interval ping is outstanding, a second ping will not be sent as the
3720    /// interval ping will determine if the connection is dead.
3721    ///
3722    /// The same feature for HTTP/3 is given by inheritance from QUICHE which uses :ref:`connection idle_timeout <envoy_v3_api_field_config.listener.v3.QuicProtocolOptions.idle_timeout>` and the current PTO of the connection to decide whether to probe before sending a new request.
3723    #[prost(message, optional, tag = "4")]
3724    pub connection_idle_interval: ::core::option::Option<
3725        super::super::super::super::google::protobuf::Duration,
3726    >,
3727}
3728impl ::prost::Name for KeepaliveSettings {
3729    const NAME: &'static str = "KeepaliveSettings";
3730    const PACKAGE: &'static str = "envoy.config.core.v3";
3731    fn full_name() -> ::prost::alloc::string::String {
3732        "envoy.config.core.v3.KeepaliveSettings".into()
3733    }
3734    fn type_url() -> ::prost::alloc::string::String {
3735        "type.googleapis.com/envoy.config.core.v3.KeepaliveSettings".into()
3736    }
3737}
3738/// \[#next-free-field: 17\]
3739#[derive(Clone, PartialEq, ::prost::Message)]
3740pub struct Http2ProtocolOptions {
3741    /// `Maximum table size <<https://httpwg.org/specs/rfc7541.html#rfc.section.4.2>`_>
3742    /// (in octets) that the encoder is permitted to use for the dynamic HPACK table. Valid values
3743    /// range from 0 to 4294967295 (2^32 - 1) and defaults to 4096. 0 effectively disables header
3744    /// compression.
3745    #[prost(message, optional, tag = "1")]
3746    pub hpack_table_size: ::core::option::Option<
3747        super::super::super::super::google::protobuf::UInt32Value,
3748    >,
3749    /// `Maximum concurrent streams <<https://httpwg.org/specs/rfc7540.html#rfc.section.5.1.2>`_>
3750    /// allowed for peer on one HTTP/2 connection. Valid values range from 1 to 2147483647 (2^31 - 1)
3751    /// and defaults to 2147483647.
3752    ///
3753    /// For upstream connections, this also limits how many streams Envoy will initiate concurrently
3754    /// on a single connection. If the limit is reached, Envoy may queue requests or establish
3755    /// additional connections (as allowed per circuit breaker limits).
3756    ///
3757    /// This acts as an upper bound: Envoy will lower the max concurrent streams allowed on a given
3758    /// connection based on upstream settings. Config dumps will reflect the configured upper bound,
3759    /// not the per-connection negotiated limits.
3760    #[prost(message, optional, tag = "2")]
3761    pub max_concurrent_streams: ::core::option::Option<
3762        super::super::super::super::google::protobuf::UInt32Value,
3763    >,
3764    /// `Initial stream-level flow-control window
3765    /// <<https://httpwg.org/specs/rfc7540.html#rfc.section.6.9.2>`_> size. Valid values range from 65535
3766    /// (2^16 - 1, HTTP/2 default) to 2147483647 (2^31 - 1, HTTP/2 maximum) and defaults to 268435456
3767    /// (256 * 1024 * 1024).
3768    ///
3769    /// NOTE: 65535 is the initial window size from HTTP/2 spec. We only support increasing the default
3770    /// window size now, so it's also the minimum.
3771    ///
3772    /// This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the
3773    /// HTTP/2 codec buffers. Once the buffer reaches this pointer, watermark callbacks will fire to
3774    /// stop the flow of data to the codec buffers.
3775    #[prost(message, optional, tag = "3")]
3776    pub initial_stream_window_size: ::core::option::Option<
3777        super::super::super::super::google::protobuf::UInt32Value,
3778    >,
3779    /// Similar to ``initial_stream_window_size``, but for connection-level flow-control
3780    /// window. Currently, this has the same minimum/maximum/default as ``initial_stream_window_size``.
3781    #[prost(message, optional, tag = "4")]
3782    pub initial_connection_window_size: ::core::option::Option<
3783        super::super::super::super::google::protobuf::UInt32Value,
3784    >,
3785    /// Allows proxying Websocket and other upgrades over H2 connect.
3786    #[prost(bool, tag = "5")]
3787    pub allow_connect: bool,
3788    /// \[#not-implemented-hide:\] Hiding until Envoy has full metadata support.
3789    /// Still under implementation. DO NOT USE.
3790    ///
3791    /// Allows sending and receiving HTTP/2 METADATA frames. See [metadata
3792    /// docs](<https://github.com/envoyproxy/envoy/blob/main/source/docs/h2_metadata.md>) for more
3793    /// information.
3794    #[prost(bool, tag = "6")]
3795    pub allow_metadata: bool,
3796    /// Limit the number of pending outbound downstream frames of all types (frames that are waiting to
3797    /// be written into the socket). Exceeding this limit triggers flood mitigation and connection is
3798    /// terminated. The ``http2.outbound_flood`` stat tracks the number of terminated connections due
3799    /// to flood mitigation. The default limit is 10000.
3800    #[prost(message, optional, tag = "7")]
3801    pub max_outbound_frames: ::core::option::Option<
3802        super::super::super::super::google::protobuf::UInt32Value,
3803    >,
3804    /// Limit the number of pending outbound downstream frames of types PING, SETTINGS and RST_STREAM,
3805    /// preventing high memory utilization when receiving continuous stream of these frames. Exceeding
3806    /// this limit triggers flood mitigation and connection is terminated. The
3807    /// ``http2.outbound_control_flood`` stat tracks the number of terminated connections due to flood
3808    /// mitigation. The default limit is 1000.
3809    #[prost(message, optional, tag = "8")]
3810    pub max_outbound_control_frames: ::core::option::Option<
3811        super::super::super::super::google::protobuf::UInt32Value,
3812    >,
3813    /// Limit the number of consecutive inbound frames of types HEADERS, CONTINUATION and DATA with an
3814    /// empty payload and no end stream flag. Those frames have no legitimate use and are abusive, but
3815    /// might be a result of a broken HTTP/2 implementation. The `http2.inbound_empty_frames_flood``
3816    /// stat tracks the number of connections terminated due to flood mitigation.
3817    /// Setting this to 0 will terminate connection upon receiving first frame with an empty payload
3818    /// and no end stream flag. The default limit is 1.
3819    #[prost(message, optional, tag = "9")]
3820    pub max_consecutive_inbound_frames_with_empty_payload: ::core::option::Option<
3821        super::super::super::super::google::protobuf::UInt32Value,
3822    >,
3823    /// Limit the number of inbound PRIORITY frames allowed per each opened stream. If the number
3824    /// of PRIORITY frames received over the lifetime of connection exceeds the value calculated
3825    /// using this formula::
3826    ///
3827    ///    ``max_inbound_priority_frames_per_stream`` * (1 + ``opened_streams``)
3828    ///
3829    /// the connection is terminated. For downstream connections the ``opened_streams`` is incremented when
3830    /// Envoy receives complete response headers from the upstream server. For upstream connection the
3831    /// ``opened_streams`` is incremented when Envoy send the HEADERS frame for a new stream. The
3832    /// ``http2.inbound_priority_frames_flood`` stat tracks
3833    /// the number of connections terminated due to flood mitigation. The default limit is 100.
3834    #[prost(message, optional, tag = "10")]
3835    pub max_inbound_priority_frames_per_stream: ::core::option::Option<
3836        super::super::super::super::google::protobuf::UInt32Value,
3837    >,
3838    /// Limit the number of inbound WINDOW_UPDATE frames allowed per DATA frame sent. If the number
3839    /// of WINDOW_UPDATE frames received over the lifetime of connection exceeds the value calculated
3840    /// using this formula::
3841    ///
3842    ///    5 + 2 * (``opened_streams`` +
3843    ///             ``max_inbound_window_update_frames_per_data_frame_sent`` * ``outbound_data_frames``)
3844    ///
3845    /// the connection is terminated. For downstream connections the ``opened_streams`` is incremented when
3846    /// Envoy receives complete response headers from the upstream server. For upstream connections the
3847    /// ``opened_streams`` is incremented when Envoy sends the HEADERS frame for a new stream. The
3848    /// ``http2.inbound_priority_frames_flood`` stat tracks the number of connections terminated due to
3849    /// flood mitigation. The default max_inbound_window_update_frames_per_data_frame_sent value is 10.
3850    /// Setting this to 1 should be enough to support HTTP/2 implementations with basic flow control,
3851    /// but more complex implementations that try to estimate available bandwidth require at least 2.
3852    #[prost(message, optional, tag = "11")]
3853    pub max_inbound_window_update_frames_per_data_frame_sent: ::core::option::Option<
3854        super::super::super::super::google::protobuf::UInt32Value,
3855    >,
3856    /// Allows invalid HTTP messaging and headers. When this option is disabled (default), then
3857    /// the whole HTTP/2 connection is terminated upon receiving invalid HEADERS frame. However,
3858    /// when this option is enabled, only the offending stream is terminated.
3859    ///
3860    /// This is overridden by HCM :ref:`stream_error_on_invalid_http_messaging
3861    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`
3862    /// iff present.
3863    ///
3864    /// This is deprecated in favor of :ref:`override_stream_error_on_invalid_http_message
3865    /// <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.override_stream_error_on_invalid_http_message>`
3866    ///
3867    /// See `RFC7540, sec. 8.1 <<https://tools.ietf.org/html/rfc7540#section-8.1>`_> for details.
3868    #[deprecated]
3869    #[prost(bool, tag = "12")]
3870    pub stream_error_on_invalid_http_messaging: bool,
3871    /// Allows invalid HTTP messaging and headers. When this option is disabled (default), then
3872    /// the whole HTTP/2 connection is terminated upon receiving invalid HEADERS frame. However,
3873    /// when this option is enabled, only the offending stream is terminated.
3874    ///
3875    /// This overrides any HCM :ref:`stream_error_on_invalid_http_messaging
3876    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`
3877    ///
3878    /// See `RFC7540, sec. 8.1 <<https://tools.ietf.org/html/rfc7540#section-8.1>`_> for details.
3879    #[prost(message, optional, tag = "14")]
3880    pub override_stream_error_on_invalid_http_message: ::core::option::Option<
3881        super::super::super::super::google::protobuf::BoolValue,
3882    >,
3883    /// \[#not-implemented-hide:\]
3884    /// Specifies SETTINGS frame parameters to be sent to the peer, with two exceptions:
3885    ///
3886    /// 1. SETTINGS_ENABLE_PUSH (0x2) is not configurable as HTTP/2 server push is not supported by
3887    /// Envoy.
3888    ///
3889    /// 2. SETTINGS_ENABLE_CONNECT_PROTOCOL (0x8) is only configurable through the named field
3890    /// 'allow_connect'.
3891    ///
3892    /// Note that custom parameters specified through this field can not also be set in the
3893    /// corresponding named parameters:
3894    ///
3895    /// .. code-block:: text
3896    ///
3897    ///    ID    Field Name
3898    ///    ----------------
3899    ///    0x1   hpack_table_size
3900    ///    0x3   max_concurrent_streams
3901    ///    0x4   initial_stream_window_size
3902    ///
3903    /// Collisions will trigger config validation failure on load/update. Likewise, inconsistencies
3904    /// between custom parameters with the same identifier will trigger a failure.
3905    ///
3906    /// See `IANA HTTP/2 Settings
3907    /// <<https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml#settings>`_> for
3908    /// standardized identifiers.
3909    #[prost(message, repeated, tag = "13")]
3910    pub custom_settings_parameters: ::prost::alloc::vec::Vec<
3911        http2_protocol_options::SettingsParameter,
3912    >,
3913    /// Send HTTP/2 PING frames to verify that the connection is still healthy. If the remote peer
3914    /// does not respond within the configured timeout, the connection will be aborted.
3915    #[prost(message, optional, tag = "15")]
3916    pub connection_keepalive: ::core::option::Option<KeepaliveSettings>,
3917    /// \[#not-implemented-hide:\] Hiding so that the field can be removed after oghttp2 is rolled out.
3918    /// If set, force use of a particular HTTP/2 codec: oghttp2 if true, nghttp2 if false.
3919    /// If unset, HTTP/2 codec is selected based on envoy.reloadable_features.http2_use_oghttp2.
3920    #[prost(message, optional, tag = "16")]
3921    pub use_oghttp2_codec: ::core::option::Option<
3922        super::super::super::super::google::protobuf::BoolValue,
3923    >,
3924}
3925/// Nested message and enum types in `Http2ProtocolOptions`.
3926pub mod http2_protocol_options {
3927    /// Defines a parameter to be sent in the SETTINGS frame.
3928    /// See `RFC7540, sec. 6.5.1 <<https://tools.ietf.org/html/rfc7540#section-6.5.1>`_> for details.
3929    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
3930    pub struct SettingsParameter {
3931        /// The 16 bit parameter identifier.
3932        #[prost(message, optional, tag = "1")]
3933        pub identifier: ::core::option::Option<
3934            super::super::super::super::super::google::protobuf::UInt32Value,
3935        >,
3936        /// The 32 bit parameter value.
3937        #[prost(message, optional, tag = "2")]
3938        pub value: ::core::option::Option<
3939            super::super::super::super::super::google::protobuf::UInt32Value,
3940        >,
3941    }
3942    impl ::prost::Name for SettingsParameter {
3943        const NAME: &'static str = "SettingsParameter";
3944        const PACKAGE: &'static str = "envoy.config.core.v3";
3945        fn full_name() -> ::prost::alloc::string::String {
3946            "envoy.config.core.v3.Http2ProtocolOptions.SettingsParameter".into()
3947        }
3948        fn type_url() -> ::prost::alloc::string::String {
3949            "type.googleapis.com/envoy.config.core.v3.Http2ProtocolOptions.SettingsParameter"
3950                .into()
3951        }
3952    }
3953}
3954impl ::prost::Name for Http2ProtocolOptions {
3955    const NAME: &'static str = "Http2ProtocolOptions";
3956    const PACKAGE: &'static str = "envoy.config.core.v3";
3957    fn full_name() -> ::prost::alloc::string::String {
3958        "envoy.config.core.v3.Http2ProtocolOptions".into()
3959    }
3960    fn type_url() -> ::prost::alloc::string::String {
3961        "type.googleapis.com/envoy.config.core.v3.Http2ProtocolOptions".into()
3962    }
3963}
3964/// \[#not-implemented-hide:\]
3965#[derive(Clone, PartialEq, ::prost::Message)]
3966pub struct GrpcProtocolOptions {
3967    #[prost(message, optional, tag = "1")]
3968    pub http2_protocol_options: ::core::option::Option<Http2ProtocolOptions>,
3969}
3970impl ::prost::Name for GrpcProtocolOptions {
3971    const NAME: &'static str = "GrpcProtocolOptions";
3972    const PACKAGE: &'static str = "envoy.config.core.v3";
3973    fn full_name() -> ::prost::alloc::string::String {
3974        "envoy.config.core.v3.GrpcProtocolOptions".into()
3975    }
3976    fn type_url() -> ::prost::alloc::string::String {
3977        "type.googleapis.com/envoy.config.core.v3.GrpcProtocolOptions".into()
3978    }
3979}
3980/// A message which allows using HTTP/3.
3981/// \[#next-free-field: 7\]
3982#[derive(Clone, PartialEq, ::prost::Message)]
3983pub struct Http3ProtocolOptions {
3984    #[prost(message, optional, tag = "1")]
3985    pub quic_protocol_options: ::core::option::Option<QuicProtocolOptions>,
3986    /// Allows invalid HTTP messaging and headers. When this option is disabled (default), then
3987    /// the whole HTTP/3 connection is terminated upon receiving invalid HEADERS frame. However,
3988    /// when this option is enabled, only the offending stream is terminated.
3989    ///
3990    /// If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
3991    /// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
3992    #[prost(message, optional, tag = "2")]
3993    pub override_stream_error_on_invalid_http_message: ::core::option::Option<
3994        super::super::super::super::google::protobuf::BoolValue,
3995    >,
3996    /// Allows proxying Websocket and other upgrades over HTTP/3 CONNECT using
3997    /// the header mechanisms from the `HTTP/2 extended connect RFC
3998    /// <<https://datatracker.ietf.org/doc/html/rfc8441>`_>
3999    /// and settings `proposed for HTTP/3
4000    /// <<https://datatracker.ietf.org/doc/draft-ietf-httpbis-h3-websockets/>`_>
4001    /// Note that HTTP/3 CONNECT is not yet an RFC.
4002    #[prost(bool, tag = "5")]
4003    pub allow_extended_connect: bool,
4004    /// \[#not-implemented-hide:\] Hiding until Envoy has full metadata support.
4005    /// Still under implementation. DO NOT USE.
4006    ///
4007    /// Allows sending and receiving HTTP/3 METADATA frames. See [metadata
4008    /// docs](<https://github.com/envoyproxy/envoy/blob/main/source/docs/h2_metadata.md>) for more
4009    /// information.
4010    #[prost(bool, tag = "6")]
4011    pub allow_metadata: bool,
4012}
4013impl ::prost::Name for Http3ProtocolOptions {
4014    const NAME: &'static str = "Http3ProtocolOptions";
4015    const PACKAGE: &'static str = "envoy.config.core.v3";
4016    fn full_name() -> ::prost::alloc::string::String {
4017        "envoy.config.core.v3.Http3ProtocolOptions".into()
4018    }
4019    fn type_url() -> ::prost::alloc::string::String {
4020        "type.googleapis.com/envoy.config.core.v3.Http3ProtocolOptions".into()
4021    }
4022}
4023/// A message to control transformations to the :scheme header
4024#[derive(Clone, PartialEq, ::prost::Message)]
4025pub struct SchemeHeaderTransformation {
4026    /// Set the Scheme header to match the upstream transport protocol. For example, should a
4027    /// request be sent to the upstream over TLS, the scheme header will be set to "https". Should the
4028    /// request be sent over plaintext, the scheme header will be set to "http".
4029    /// If scheme_to_overwrite is set, this field is not used.
4030    #[prost(bool, tag = "2")]
4031    pub match_upstream: bool,
4032    #[prost(oneof = "scheme_header_transformation::Transformation", tags = "1")]
4033    pub transformation: ::core::option::Option<
4034        scheme_header_transformation::Transformation,
4035    >,
4036}
4037/// Nested message and enum types in `SchemeHeaderTransformation`.
4038pub mod scheme_header_transformation {
4039    #[derive(Clone, PartialEq, ::prost::Oneof)]
4040    pub enum Transformation {
4041        /// Overwrite any Scheme header with the contents of this string.
4042        /// If set, takes precedence over match_upstream.
4043        #[prost(string, tag = "1")]
4044        SchemeToOverwrite(::prost::alloc::string::String),
4045    }
4046}
4047impl ::prost::Name for SchemeHeaderTransformation {
4048    const NAME: &'static str = "SchemeHeaderTransformation";
4049    const PACKAGE: &'static str = "envoy.config.core.v3";
4050    fn full_name() -> ::prost::alloc::string::String {
4051        "envoy.config.core.v3.SchemeHeaderTransformation".into()
4052    }
4053    fn type_url() -> ::prost::alloc::string::String {
4054        "type.googleapis.com/envoy.config.core.v3.SchemeHeaderTransformation".into()
4055    }
4056}
4057/// Configuration of DNS resolver option flags which control the behavior of the DNS resolver.
4058#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4059pub struct DnsResolverOptions {
4060    /// Use TCP for all DNS queries instead of the default protocol UDP.
4061    #[prost(bool, tag = "1")]
4062    pub use_tcp_for_dns_lookups: bool,
4063    /// Do not use the default search domains; only query hostnames as-is or as aliases.
4064    #[prost(bool, tag = "2")]
4065    pub no_default_search_domain: bool,
4066}
4067impl ::prost::Name for DnsResolverOptions {
4068    const NAME: &'static str = "DnsResolverOptions";
4069    const PACKAGE: &'static str = "envoy.config.core.v3";
4070    fn full_name() -> ::prost::alloc::string::String {
4071        "envoy.config.core.v3.DnsResolverOptions".into()
4072    }
4073    fn type_url() -> ::prost::alloc::string::String {
4074        "type.googleapis.com/envoy.config.core.v3.DnsResolverOptions".into()
4075    }
4076}
4077/// DNS resolution configuration which includes the underlying dns resolver addresses and options.
4078#[derive(Clone, PartialEq, ::prost::Message)]
4079pub struct DnsResolutionConfig {
4080    /// A list of dns resolver addresses. If specified, the DNS client library will perform resolution
4081    /// via the underlying DNS resolvers. Otherwise, the default system resolvers
4082    /// (e.g., /etc/resolv.conf) will be used.
4083    #[prost(message, repeated, tag = "1")]
4084    pub resolvers: ::prost::alloc::vec::Vec<Address>,
4085    /// Configuration of DNS resolver option flags which control the behavior of the DNS resolver.
4086    #[prost(message, optional, tag = "2")]
4087    pub dns_resolver_options: ::core::option::Option<DnsResolverOptions>,
4088}
4089impl ::prost::Name for DnsResolutionConfig {
4090    const NAME: &'static str = "DnsResolutionConfig";
4091    const PACKAGE: &'static str = "envoy.config.core.v3";
4092    fn full_name() -> ::prost::alloc::string::String {
4093        "envoy.config.core.v3.DnsResolutionConfig".into()
4094    }
4095    fn type_url() -> ::prost::alloc::string::String {
4096        "type.googleapis.com/envoy.config.core.v3.DnsResolutionConfig".into()
4097    }
4098}
4099/// Generic UDP socket configuration.
4100#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4101pub struct UdpSocketConfig {
4102    /// The maximum size of received UDP datagrams. Using a larger size will cause Envoy to allocate
4103    /// more memory per socket. Received datagrams above this size will be dropped. If not set
4104    /// defaults to 1500 bytes.
4105    #[prost(message, optional, tag = "1")]
4106    pub max_rx_datagram_size: ::core::option::Option<
4107        super::super::super::super::google::protobuf::UInt64Value,
4108    >,
4109    /// Configures whether Generic Receive Offload (GRO)
4110    /// <<https://en.wikipedia.org/wiki/Large_receive_offload>_> is preferred when reading from the
4111    /// UDP socket. The default is context dependent and is documented where UdpSocketConfig is used.
4112    /// This option affects performance but not functionality. If GRO is not supported by the operating
4113    /// system, non-GRO receive will be used.
4114    #[prost(message, optional, tag = "2")]
4115    pub prefer_gro: ::core::option::Option<
4116        super::super::super::super::google::protobuf::BoolValue,
4117    >,
4118}
4119impl ::prost::Name for UdpSocketConfig {
4120    const NAME: &'static str = "UdpSocketConfig";
4121    const PACKAGE: &'static str = "envoy.config.core.v3";
4122    fn full_name() -> ::prost::alloc::string::String {
4123        "envoy.config.core.v3.UdpSocketConfig".into()
4124    }
4125    fn type_url() -> ::prost::alloc::string::String {
4126        "type.googleapis.com/envoy.config.core.v3.UdpSocketConfig".into()
4127    }
4128}
4129/// A list of gRPC methods which can be used as an allowlist, for example.
4130#[derive(Clone, PartialEq, ::prost::Message)]
4131pub struct GrpcMethodList {
4132    #[prost(message, repeated, tag = "1")]
4133    pub services: ::prost::alloc::vec::Vec<grpc_method_list::Service>,
4134}
4135/// Nested message and enum types in `GrpcMethodList`.
4136pub mod grpc_method_list {
4137    #[derive(Clone, PartialEq, ::prost::Message)]
4138    pub struct Service {
4139        /// The name of the gRPC service.
4140        #[prost(string, tag = "1")]
4141        pub name: ::prost::alloc::string::String,
4142        /// The names of the gRPC methods in this service.
4143        #[prost(string, repeated, tag = "2")]
4144        pub method_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4145    }
4146    impl ::prost::Name for Service {
4147        const NAME: &'static str = "Service";
4148        const PACKAGE: &'static str = "envoy.config.core.v3";
4149        fn full_name() -> ::prost::alloc::string::String {
4150            "envoy.config.core.v3.GrpcMethodList.Service".into()
4151        }
4152        fn type_url() -> ::prost::alloc::string::String {
4153            "type.googleapis.com/envoy.config.core.v3.GrpcMethodList.Service".into()
4154        }
4155    }
4156}
4157impl ::prost::Name for GrpcMethodList {
4158    const NAME: &'static str = "GrpcMethodList";
4159    const PACKAGE: &'static str = "envoy.config.core.v3";
4160    fn full_name() -> ::prost::alloc::string::String {
4161        "envoy.config.core.v3.GrpcMethodList".into()
4162    }
4163    fn type_url() -> ::prost::alloc::string::String {
4164        "type.googleapis.com/envoy.config.core.v3.GrpcMethodList".into()
4165    }
4166}
4167/// HTTP service configuration.
4168#[derive(Clone, PartialEq, ::prost::Message)]
4169pub struct HttpService {
4170    /// The service's HTTP URI. For example:
4171    ///
4172    /// .. code-block:: yaml
4173    ///
4174    ///     http_uri:
4175    ///       uri: <https://www.myserviceapi.com/v1/data>
4176    ///       cluster: www.myserviceapi.com|443
4177    ///
4178    #[prost(message, optional, tag = "1")]
4179    pub http_uri: ::core::option::Option<HttpUri>,
4180    /// Specifies a list of HTTP headers that should be added to each request
4181    /// handled by this virtual host.
4182    #[prost(message, repeated, tag = "2")]
4183    pub request_headers_to_add: ::prost::alloc::vec::Vec<HeaderValueOption>,
4184}
4185impl ::prost::Name for HttpService {
4186    const NAME: &'static str = "HttpService";
4187    const PACKAGE: &'static str = "envoy.config.core.v3";
4188    fn full_name() -> ::prost::alloc::string::String {
4189        "envoy.config.core.v3.HttpService".into()
4190    }
4191    fn type_url() -> ::prost::alloc::string::String {
4192        "type.googleapis.com/envoy.config.core.v3.HttpService".into()
4193    }
4194}
4195/// Optional configuration options to be used with json_format.
4196#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4197pub struct JsonFormatOptions {
4198    /// The output JSON string properties will be sorted.
4199    #[prost(bool, tag = "1")]
4200    pub sort_properties: bool,
4201}
4202impl ::prost::Name for JsonFormatOptions {
4203    const NAME: &'static str = "JsonFormatOptions";
4204    const PACKAGE: &'static str = "envoy.config.core.v3";
4205    fn full_name() -> ::prost::alloc::string::String {
4206        "envoy.config.core.v3.JsonFormatOptions".into()
4207    }
4208    fn type_url() -> ::prost::alloc::string::String {
4209        "type.googleapis.com/envoy.config.core.v3.JsonFormatOptions".into()
4210    }
4211}
4212/// Configuration to use multiple :ref:`command operators <config_access_log_command_operators>`
4213/// to generate a new string in either plain text or JSON format.
4214/// \[#next-free-field: 8\]
4215#[derive(Clone, PartialEq, ::prost::Message)]
4216pub struct SubstitutionFormatString {
4217    /// If set to true, when command operators are evaluated to null,
4218    ///
4219    /// * for ``text_format``, the output of the empty operator is changed from ``-`` to an
4220    ///    empty string, so that empty values are omitted entirely.
4221    /// * for ``json_format`` the keys with null values are omitted in the output structure.
4222    #[prost(bool, tag = "3")]
4223    pub omit_empty_values: bool,
4224    /// Specify a ``content_type`` field.
4225    /// If this field is not set then ``text/plain`` is used for ``text_format`` and
4226    /// ``application/json`` is used for ``json_format``.
4227    ///
4228    /// .. validated-code-block:: yaml
4229    ///    :type-name: envoy.config.core.v3.SubstitutionFormatString
4230    ///
4231    ///    content_type: "text/html; charset=UTF-8"
4232    ///
4233    #[prost(string, tag = "4")]
4234    pub content_type: ::prost::alloc::string::String,
4235    /// Specifies a collection of Formatter plugins that can be called from the access log configuration.
4236    /// See the formatters extensions documentation for details.
4237    /// \[#extension-category: envoy.formatter\]
4238    #[prost(message, repeated, tag = "6")]
4239    pub formatters: ::prost::alloc::vec::Vec<TypedExtensionConfig>,
4240    /// If json_format is used, the options will be applied to the output JSON string.
4241    #[prost(message, optional, tag = "7")]
4242    pub json_format_options: ::core::option::Option<JsonFormatOptions>,
4243    #[prost(oneof = "substitution_format_string::Format", tags = "1, 2, 5")]
4244    pub format: ::core::option::Option<substitution_format_string::Format>,
4245}
4246/// Nested message and enum types in `SubstitutionFormatString`.
4247pub mod substitution_format_string {
4248    #[derive(Clone, PartialEq, ::prost::Oneof)]
4249    pub enum Format {
4250        /// Specify a format with command operators to form a text string.
4251        /// Its details is described in :ref:`format string<config_access_log_format_strings>`.
4252        ///
4253        /// For example, setting ``text_format`` like below,
4254        ///
4255        /// .. validated-code-block:: yaml
4256        ///    :type-name: envoy.config.core.v3.SubstitutionFormatString
4257        ///
4258        ///    text_format: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n"
4259        ///
4260        /// generates plain text similar to:
4261        ///
4262        /// .. code-block:: text
4263        ///
4264        ///    upstream connect error:503:path=/foo
4265        ///
4266        /// Deprecated in favor of :ref:`text_format_source <envoy_v3_api_field_config.core.v3.SubstitutionFormatString.text_format_source>`. To migrate text format strings, use the :ref:`inline_string <envoy_v3_api_field_config.core.v3.DataSource.inline_string>` field.
4267        #[prost(string, tag = "1")]
4268        TextFormat(::prost::alloc::string::String),
4269        /// Specify a format with command operators to form a JSON string.
4270        /// Its details is described in :ref:`format dictionary<config_access_log_format_dictionaries>`.
4271        /// Values are rendered as strings, numbers, or boolean values as appropriate.
4272        /// Nested JSON objects may be produced by some command operators (e.g. FILTER_STATE or DYNAMIC_METADATA).
4273        /// See the documentation for a specific command operator for details.
4274        ///
4275        /// .. validated-code-block:: yaml
4276        ///    :type-name: envoy.config.core.v3.SubstitutionFormatString
4277        ///
4278        ///    json_format:
4279        ///      status: "%RESPONSE_CODE%"
4280        ///      message: "%LOCAL_REPLY_BODY%"
4281        ///
4282        /// The following JSON object would be created:
4283        ///
4284        /// .. code-block:: json
4285        ///
4286        ///   {
4287        ///     "status": 500,
4288        ///     "message": "My error message"
4289        ///   }
4290        ///
4291        #[prost(message, tag = "2")]
4292        JsonFormat(super::super::super::super::super::google::protobuf::Struct),
4293        /// Specify a format with command operators to form a text string.
4294        /// Its details is described in :ref:`format string<config_access_log_format_strings>`.
4295        ///
4296        /// For example, setting ``text_format`` like below,
4297        ///
4298        /// .. validated-code-block:: yaml
4299        ///    :type-name: envoy.config.core.v3.SubstitutionFormatString
4300        ///
4301        ///    text_format_source:
4302        ///      inline_string: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n"
4303        ///
4304        /// generates plain text similar to:
4305        ///
4306        /// .. code-block:: text
4307        ///
4308        ///    upstream connect error:503:path=/foo
4309        ///
4310        #[prost(message, tag = "5")]
4311        TextFormatSource(super::DataSource),
4312    }
4313}
4314impl ::prost::Name for SubstitutionFormatString {
4315    const NAME: &'static str = "SubstitutionFormatString";
4316    const PACKAGE: &'static str = "envoy.config.core.v3";
4317    fn full_name() -> ::prost::alloc::string::String {
4318        "envoy.config.core.v3.SubstitutionFormatString".into()
4319    }
4320    fn type_url() -> ::prost::alloc::string::String {
4321        "type.googleapis.com/envoy.config.core.v3.SubstitutionFormatString".into()
4322    }
4323}