// This file is @generated by prost-build.
/// \[\#next-free-field: 10\]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DnsCluster {
    /// This value is the cluster’s DNS refresh rate. The value configured must be at least 1ms.
    /// If this setting is not specified, the
    /// value defaults to 5000ms.
    #[prost(message, optional, tag = "3")]
    pub dns_refresh_rate: ::core::option::Option<
        super::super::super::super::super::google::protobuf::Duration,
    >,
    /// This is the cluster’s DNS refresh rate when requests are failing. If this setting is
    /// not specified, the failure refresh rate defaults to the DNS refresh rate.
    #[prost(message, optional, tag = "4")]
    pub dns_failure_refresh_rate: ::core::option::Option<dns_cluster::RefreshRate>,
    /// Optional configuration for setting cluster's DNS refresh rate. If the value is set to true,
    /// cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS
    /// resolution.
    #[prost(bool, tag = "5")]
    pub respect_dns_ttl: bool,
    /// DNS jitter causes the cluster to refresh DNS entries later by a random amount of time to avoid a
    /// stampede of DNS requests. This value sets the upper bound (exclusive) for the random amount.
    /// There will be no jitter if this value is omitted.
    #[prost(message, optional, tag = "6")]
    pub dns_jitter: ::core::option::Option<
        super::super::super::super::super::google::protobuf::Duration,
    >,
    ///
    /// DNS resolver type configuration extension. This extension can be used to configure c-ares, apple,
    /// or any other DNS resolver types and the related parameters.
    /// For example, an object of
    /// : ref:`CaresDnsResolverConfig<envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
    ///   can be packed into this `typed_dns_resolver_config`. This configuration replaces the
    /// : ref:`Cluster.typed_dns_resolver_config<envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`
    ///   configuration which replaces :ref:`Cluster.dns_resolution_config<envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`.
    ///   During the transition period when
    /// : ref:`DnsCluster.typed_dns_resolver_config<envoy_v3_api_field_extensions.clusters.dns.v3.DnsCluster.typed_dns_resolver_config>`,
    /// : ref:`Cluster.typed_dns_resolver_config<envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`,
    ///   and :ref:`Cluster.dns_resolution_config<envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
    ///   exist, Envoy will use
    /// : ref:`DnsCluster.typed_dns_resolver_config<envoy_v3_api_field_extensions.clusters.dns.v3.DnsCluster.typed_dns_resolver_config>`
    ///   and ignore
    ///   DNS resolver-related fields in :ref:`Cluster<envoy_v3_api_msg_config.cluster.v3.Cluster>` if the cluster is configured via the
    /// : ref:`Cluster.cluster_type<envoy_v3_api_field_config.cluster.v3.Cluster.cluster_type>` extension point with the
    /// : ref:`DnsCluster<envoy_v3_api_msg_extensions.clusters.dns.v3.DnsCluster>` extension type.
    ///   Otherwise, see  :ref:`Cluster.typed_dns_resolver_config<envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`.
    ///   \[\#extension-category: envoy.network.dns_resolver\]
    #[prost(message, optional, tag = "7")]
    pub typed_dns_resolver_config: ::core::option::Option<
        super::super::super::super::config::core::v3::TypedExtensionConfig,
    >,
    ///
    /// The DNS IP address resolution policy. If this setting is not specified, the
    /// value defaults to
    /// : ref:`AUTO<envoy_v3_api_enum_value_extensions.clusters.common.dns.v3.DnsLookupFamily.AUTO>`.
    #[prost(enumeration = "super::super::common::dns::v3::DnsLookupFamily", tag = "8")]
    pub dns_lookup_family: i32,
    ///
    /// If true, all returned addresses are considered to be associated with a single endpoint,
    /// which maps to :ref:`logical DNS discovery <arch_overview_service_discovery_types_logical_dns>`
    /// semantics. Otherwise, each address is considered to be a separate endpoint, which maps to
    /// : ref:`strict DNS discovery <arch_overview_service_discovery_types_strict_dns>` semantics.
    #[prost(bool, tag = "9")]
    pub all_addresses_in_single_endpoint: bool,
}
/// Nested message and enum types in `DnsCluster`.
pub mod dns_cluster {
    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
    pub struct RefreshRate {
        ///
        /// Specifies the base interval between refreshes. This parameter is required and must be greater
        /// than zero and less than
        /// : ref:`max_interval <envoy_v3_api_field_extensions.clusters.dns.v3.DnsCluster.RefreshRate.max_interval>`.
        #[prost(message, optional, tag = "1")]
        pub base_interval: ::core::option::Option<
            super::super::super::super::super::super::google::protobuf::Duration,
        >,
        ///
        /// Specifies the maximum interval between refreshes. This parameter is optional, but must be
        /// greater than or equal to the
        /// : ref:`base_interval <envoy_v3_api_field_extensions.clusters.dns.v3.DnsCluster.RefreshRate.base_interval>`  if set. The default
        ///   is 10 times the :ref:`base_interval <envoy_v3_api_field_extensions.clusters.dns.v3.DnsCluster.RefreshRate.base_interval>`.
        #[prost(message, optional, tag = "2")]
        pub max_interval: ::core::option::Option<
            super::super::super::super::super::super::google::protobuf::Duration,
        >,
    }
}
