// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        v7.35.1
// source: envoy/config/route/v3/route_components.proto

package routev3

import (
	_ "github.com/cncf/xds/go/udpa/annotations"
	v3 "github.com/cncf/xds/go/xds/type/matcher/v3"
	_ "github.com/envoyproxy/go-control-plane/envoy/annotations"
	v35 "github.com/envoyproxy/go-control-plane/envoy/config/common/mutation_rules/v3"
	v31 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
	v32 "github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3"
	v36 "github.com/envoyproxy/go-control-plane/envoy/type/metadata/v3"
	v34 "github.com/envoyproxy/go-control-plane/envoy/type/tracing/v3"
	v33 "github.com/envoyproxy/go-control-plane/envoy/type/v3"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	anypb "google.golang.org/protobuf/types/known/anypb"
	durationpb "google.golang.org/protobuf/types/known/durationpb"
	wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type VirtualHost_TlsRequirementType int32

const (
	// No TLS requirement for the virtual host.
	VirtualHost_NONE VirtualHost_TlsRequirementType = 0
	// External requests must use TLS. If a request is external and it is not
	// using TLS, a 301 redirect will be sent telling the client to use HTTPS.
	VirtualHost_EXTERNAL_ONLY VirtualHost_TlsRequirementType = 1
	// All requests must use TLS. If a request is not using TLS, a 301 redirect
	// will be sent telling the client to use HTTPS.
	VirtualHost_ALL VirtualHost_TlsRequirementType = 2
)

// Enum value maps for VirtualHost_TlsRequirementType.
var (
	VirtualHost_TlsRequirementType_name = map[int32]string{
		0: "NONE",
		1: "EXTERNAL_ONLY",
		2: "ALL",
	}
	VirtualHost_TlsRequirementType_value = map[string]int32{
		"NONE":          0,
		"EXTERNAL_ONLY": 1,
		"ALL":           2,
	}
)

func (x VirtualHost_TlsRequirementType) Enum() *VirtualHost_TlsRequirementType {
	p := new(VirtualHost_TlsRequirementType)
	*p = x
	return p
}

func (x VirtualHost_TlsRequirementType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (VirtualHost_TlsRequirementType) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[0].Descriptor()
}

func (VirtualHost_TlsRequirementType) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[0]
}

func (x VirtualHost_TlsRequirementType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use VirtualHost_TlsRequirementType.Descriptor instead.
func (VirtualHost_TlsRequirementType) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{0, 0}
}

type RouteAction_ClusterNotFoundResponseCode int32

const (
	// HTTP status code - 503 Service Unavailable.
	RouteAction_SERVICE_UNAVAILABLE RouteAction_ClusterNotFoundResponseCode = 0
	// HTTP status code - 404 Not Found.
	RouteAction_NOT_FOUND RouteAction_ClusterNotFoundResponseCode = 1
	// HTTP status code - 500 Internal Server Error.
	RouteAction_INTERNAL_SERVER_ERROR RouteAction_ClusterNotFoundResponseCode = 2
)

// Enum value maps for RouteAction_ClusterNotFoundResponseCode.
var (
	RouteAction_ClusterNotFoundResponseCode_name = map[int32]string{
		0: "SERVICE_UNAVAILABLE",
		1: "NOT_FOUND",
		2: "INTERNAL_SERVER_ERROR",
	}
	RouteAction_ClusterNotFoundResponseCode_value = map[string]int32{
		"SERVICE_UNAVAILABLE":   0,
		"NOT_FOUND":             1,
		"INTERNAL_SERVER_ERROR": 2,
	}
)

func (x RouteAction_ClusterNotFoundResponseCode) Enum() *RouteAction_ClusterNotFoundResponseCode {
	p := new(RouteAction_ClusterNotFoundResponseCode)
	*p = x
	return p
}

func (x RouteAction_ClusterNotFoundResponseCode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RouteAction_ClusterNotFoundResponseCode) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[1].Descriptor()
}

func (RouteAction_ClusterNotFoundResponseCode) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[1]
}

func (x RouteAction_ClusterNotFoundResponseCode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RouteAction_ClusterNotFoundResponseCode.Descriptor instead.
func (RouteAction_ClusterNotFoundResponseCode) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 0}
}

// Configures :ref:`internal redirect <arch_overview_internal_redirects>` behavior.
// [#next-major-version: remove this definition - it's defined in the InternalRedirectPolicy message.]
//
// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
type RouteAction_InternalRedirectAction int32

const (
	RouteAction_PASS_THROUGH_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 0
	RouteAction_HANDLE_INTERNAL_REDIRECT       RouteAction_InternalRedirectAction = 1
)

// Enum value maps for RouteAction_InternalRedirectAction.
var (
	RouteAction_InternalRedirectAction_name = map[int32]string{
		0: "PASS_THROUGH_INTERNAL_REDIRECT",
		1: "HANDLE_INTERNAL_REDIRECT",
	}
	RouteAction_InternalRedirectAction_value = map[string]int32{
		"PASS_THROUGH_INTERNAL_REDIRECT": 0,
		"HANDLE_INTERNAL_REDIRECT":       1,
	}
)

func (x RouteAction_InternalRedirectAction) Enum() *RouteAction_InternalRedirectAction {
	p := new(RouteAction_InternalRedirectAction)
	*p = x
	return p
}

func (x RouteAction_InternalRedirectAction) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RouteAction_InternalRedirectAction) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[2].Descriptor()
}

func (RouteAction_InternalRedirectAction) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[2]
}

func (x RouteAction_InternalRedirectAction) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RouteAction_InternalRedirectAction.Descriptor instead.
func (RouteAction_InternalRedirectAction) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1}
}

type RetryPolicy_ResetHeaderFormat int32

const (
	RetryPolicy_SECONDS        RetryPolicy_ResetHeaderFormat = 0
	RetryPolicy_UNIX_TIMESTAMP RetryPolicy_ResetHeaderFormat = 1
)

// Enum value maps for RetryPolicy_ResetHeaderFormat.
var (
	RetryPolicy_ResetHeaderFormat_name = map[int32]string{
		0: "SECONDS",
		1: "UNIX_TIMESTAMP",
	}
	RetryPolicy_ResetHeaderFormat_value = map[string]int32{
		"SECONDS":        0,
		"UNIX_TIMESTAMP": 1,
	}
)

func (x RetryPolicy_ResetHeaderFormat) Enum() *RetryPolicy_ResetHeaderFormat {
	p := new(RetryPolicy_ResetHeaderFormat)
	*p = x
	return p
}

func (x RetryPolicy_ResetHeaderFormat) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RetryPolicy_ResetHeaderFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[3].Descriptor()
}

func (RetryPolicy_ResetHeaderFormat) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[3]
}

func (x RetryPolicy_ResetHeaderFormat) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RetryPolicy_ResetHeaderFormat.Descriptor instead.
func (RetryPolicy_ResetHeaderFormat) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 0}
}

type RedirectAction_RedirectResponseCode int32

const (
	// Moved Permanently HTTP Status Code - 301.
	RedirectAction_MOVED_PERMANENTLY RedirectAction_RedirectResponseCode = 0
	// Found HTTP Status Code - 302.
	RedirectAction_FOUND RedirectAction_RedirectResponseCode = 1
	// See Other HTTP Status Code - 303.
	RedirectAction_SEE_OTHER RedirectAction_RedirectResponseCode = 2
	// Temporary Redirect HTTP Status Code - 307.
	RedirectAction_TEMPORARY_REDIRECT RedirectAction_RedirectResponseCode = 3
	// Permanent Redirect HTTP Status Code - 308.
	RedirectAction_PERMANENT_REDIRECT RedirectAction_RedirectResponseCode = 4
)

// Enum value maps for RedirectAction_RedirectResponseCode.
var (
	RedirectAction_RedirectResponseCode_name = map[int32]string{
		0: "MOVED_PERMANENTLY",
		1: "FOUND",
		2: "SEE_OTHER",
		3: "TEMPORARY_REDIRECT",
		4: "PERMANENT_REDIRECT",
	}
	RedirectAction_RedirectResponseCode_value = map[string]int32{
		"MOVED_PERMANENTLY":  0,
		"FOUND":              1,
		"SEE_OTHER":          2,
		"TEMPORARY_REDIRECT": 3,
		"PERMANENT_REDIRECT": 4,
	}
)

func (x RedirectAction_RedirectResponseCode) Enum() *RedirectAction_RedirectResponseCode {
	p := new(RedirectAction_RedirectResponseCode)
	*p = x
	return p
}

func (x RedirectAction_RedirectResponseCode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RedirectAction_RedirectResponseCode) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[4].Descriptor()
}

func (RedirectAction_RedirectResponseCode) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[4]
}

func (x RedirectAction_RedirectResponseCode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RedirectAction_RedirectResponseCode.Descriptor instead.
func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{11, 0}
}

type RateLimit_XRateLimitOption int32

const (
	// X-RateLimit headers is not specified. When this enum is used at descriptor level,
	// the behavior is to inherit the setting from the filter.
	RateLimit_UNSPECIFIED RateLimit_XRateLimitOption = 0
	// X-RateLimit headers disabled.
	RateLimit_OFF RateLimit_XRateLimitOption = 1
	// Use `draft RFC Version 03 <https://tools.ietf.org/id/draft-polli-ratelimit-headers-03.html>`_
	// where 3 headers will be added:
	//
	//   - “X-RateLimit-Limit“ - indicates the request-quota associated to the
	//     client in the current time-window followed by the description of the
	//     quota policy. The value is returned by the maximum tokens of the token bucket.
	//   - “X-RateLimit-Remaining“ - indicates the remaining requests in the
	//     current time-window. The value is returned by the remaining tokens in the token bucket.
	//   - “X-RateLimit-Reset“ - indicates the number of seconds until reset of
	//     the current time-window. The value is returned by the remaining fill interval of the token bucket.
	RateLimit_DRAFT_VERSION_03 RateLimit_XRateLimitOption = 2
)

// Enum value maps for RateLimit_XRateLimitOption.
var (
	RateLimit_XRateLimitOption_name = map[int32]string{
		0: "UNSPECIFIED",
		1: "OFF",
		2: "DRAFT_VERSION_03",
	}
	RateLimit_XRateLimitOption_value = map[string]int32{
		"UNSPECIFIED":      0,
		"OFF":              1,
		"DRAFT_VERSION_03": 2,
	}
)

func (x RateLimit_XRateLimitOption) Enum() *RateLimit_XRateLimitOption {
	p := new(RateLimit_XRateLimitOption)
	*p = x
	return p
}

func (x RateLimit_XRateLimitOption) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RateLimit_XRateLimitOption) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[5].Descriptor()
}

func (RateLimit_XRateLimitOption) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[5]
}

func (x RateLimit_XRateLimitOption) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RateLimit_XRateLimitOption.Descriptor instead.
func (RateLimit_XRateLimitOption) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0}
}

type RateLimit_Action_MetaData_Source int32

const (
	// Query :ref:`dynamic metadata <well_known_dynamic_metadata>`
	RateLimit_Action_MetaData_DYNAMIC RateLimit_Action_MetaData_Source = 0
	// Query :ref:`route entry metadata <envoy_v3_api_field_config.route.v3.Route.metadata>`
	RateLimit_Action_MetaData_ROUTE_ENTRY RateLimit_Action_MetaData_Source = 1
	// Query :ref:`cluster metadata <envoy_v3_api_field_config.cluster.v3.Cluster.metadata>`
	RateLimit_Action_MetaData_CLUSTER_ENTRY RateLimit_Action_MetaData_Source = 2
	// Query :ref:`cluster locality metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
	// Cluster locality metadata is available after upstream host selection only. To populate descriptors
	// with cluster locality metadata it needs to be have the
	// :ref:`apply_on_stream_done field <envoy_v3_api_field_config.route.v3.RateLimit.apply_on_stream_done>`
	// set to “true“ or host selection completed before the rate limit filter is executed.
	RateLimit_Action_MetaData_CLUSTER_LOCALITY_ENTRY RateLimit_Action_MetaData_Source = 3
)

// Enum value maps for RateLimit_Action_MetaData_Source.
var (
	RateLimit_Action_MetaData_Source_name = map[int32]string{
		0: "DYNAMIC",
		1: "ROUTE_ENTRY",
		2: "CLUSTER_ENTRY",
		3: "CLUSTER_LOCALITY_ENTRY",
	}
	RateLimit_Action_MetaData_Source_value = map[string]int32{
		"DYNAMIC":                0,
		"ROUTE_ENTRY":            1,
		"CLUSTER_ENTRY":          2,
		"CLUSTER_LOCALITY_ENTRY": 3,
	}
)

func (x RateLimit_Action_MetaData_Source) Enum() *RateLimit_Action_MetaData_Source {
	p := new(RateLimit_Action_MetaData_Source)
	*p = x
	return p
}

func (x RateLimit_Action_MetaData_Source) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RateLimit_Action_MetaData_Source) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_config_route_v3_route_components_proto_enumTypes[6].Descriptor()
}

func (RateLimit_Action_MetaData_Source) Type() protoreflect.EnumType {
	return &file_envoy_config_route_v3_route_components_proto_enumTypes[6]
}

func (x RateLimit_Action_MetaData_Source) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RateLimit_Action_MetaData_Source.Descriptor instead.
func (RateLimit_Action_MetaData_Source) EnumDescriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 9, 0}
}

// The top level element in the routing configuration is a virtual host. Each virtual host has
// a logical name as well as a set of domains that get routed to it based on the incoming request's
// host header. This allows a single listener to service multiple top level domain path trees. Once
// a virtual host is selected based on the domain, the routes are processed in order to see which
// upstream cluster to route to or whether to perform a redirect.
// [#next-free-field: 26]
type VirtualHost struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The logical name of the virtual host. This is used when emitting certain
	// statistics but is not relevant for routing.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// A list of domains (host/authority header) that will be matched to this
	// virtual host. Wildcard hosts are supported in the suffix or prefix form.
	//
	// Domain search order:
	//  1. Exact domain names: “www.foo.com“.
	//  2. Suffix domain wildcards: “*.foo.com“ or “*-bar.foo.com“.
	//  3. Prefix domain wildcards: “foo.*“ or “foo-*“.
	//  4. Special wildcard “*“ matching any domain.
	//
	// .. note::
	//
	//	The wildcard will not match the empty string.
	//	For example, ``*-bar.foo.com`` will match ``baz-bar.foo.com`` but not ``-bar.foo.com``.
	//	The longest wildcards match first.
	//	Only a single virtual host in the entire route configuration can match on ``*``. A domain
	//	must be unique across all virtual hosts or the config will fail to load.
	//
	// Domains cannot contain control characters. This is validated by the well_known_regex HTTP_HEADER_VALUE.
	Domains []string `protobuf:"bytes,2,rep,name=domains,proto3" json:"domains,omitempty"`
	// The list of routes that will be matched, in order, for incoming requests.
	// The first route that matches will be used.
	// Only one of this and “matcher“ can be specified.
	Routes []*Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"`
	// The match tree to use when resolving route actions for incoming requests. Only one of this and “routes“
	// can be specified.
	Matcher *v3.Matcher `protobuf:"bytes,21,opt,name=matcher,proto3" json:"matcher,omitempty"`
	// Specifies the type of TLS enforcement the virtual host expects. If this option is not
	// specified, there is no TLS requirement for the virtual host.
	RequireTls VirtualHost_TlsRequirementType `protobuf:"varint,4,opt,name=require_tls,json=requireTls,proto3,enum=envoy.config.route.v3.VirtualHost_TlsRequirementType" json:"require_tls,omitempty"`
	// A list of virtual clusters defined for this virtual host. Virtual clusters
	// are used for additional statistics gathering.
	VirtualClusters []*VirtualCluster `protobuf:"bytes,5,rep,name=virtual_clusters,json=virtualClusters,proto3" json:"virtual_clusters,omitempty"`
	// Specifies a set of rate limit configurations that will be applied to the
	// virtual host.
	RateLimits []*RateLimit `protobuf:"bytes,6,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
	// Specifies a list of HTTP headers that should be added to each request
	// handled by this virtual host. Headers specified at this level are applied
	// after headers from enclosed :ref:`envoy_v3_api_msg_config.route.v3.Route` and before headers from the
	// enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,7,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request
	// handled by this virtual host.
	RequestHeadersToRemove []string `protobuf:"bytes,13,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a list of HTTP headers that should be added to each response
	// handled by this virtual host. Headers specified at this level are applied
	// after headers from enclosed :ref:`envoy_v3_api_msg_config.route.v3.Route` and before headers from the
	// enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each response
	// handled by this virtual host.
	ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// Indicates that the virtual host has a CORS policy. This field is ignored if related cors policy is
	// found in the
	// :ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>`.
	//
	// .. attention::
	//
	//	This option has been deprecated. Please use
	//	:ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>`
	//	to configure the CORS HTTP filter.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	Cors *CorsPolicy `protobuf:"bytes,8,opt,name=cors,proto3" json:"cors,omitempty"`
	// This field can be used to provide virtual host level per filter config. The key should match the
	// :ref:`filter config name
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
	// See :ref:`HTTP filter route-specific config <arch_overview_http_filters_per_filter_config>`
	// for details.
	// [#comment: An entry's value may be wrapped in a
	// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
	// message to specify additional options.]
	TypedPerFilterConfig map[string]*anypb.Any `protobuf:"bytes,15,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// Decides whether the :ref:`x-envoy-attempt-count
	// <config_http_filters_router_x-envoy-attempt-count>` header should be included
	// in the upstream request. Setting this option will cause it to override any existing header
	// value, so in the case of two Envoys on the request path with this option enabled, the upstream
	// will see the attempt count as perceived by the second Envoy.
	//
	// Defaults to “false“.
	//
	// This header is unaffected by the
	// :ref:`suppress_envoy_headers
	// <envoy_v3_api_field_extensions.filters.http.router.v3.Router.suppress_envoy_headers>` flag.
	//
	// [#next-major-version: rename to include_attempt_count_in_request.]
	IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"`
	// Decides whether the :ref:`x-envoy-attempt-count
	// <config_http_filters_router_x-envoy-attempt-count>` header should be included
	// in the downstream response. Setting this option will cause the router to override any existing header
	// value, so in the case of two Envoys on the request path with this option enabled, the downstream
	// will see the attempt count as perceived by the Envoy closest upstream from itself.
	//
	// Defaults to “false“.
	//
	// This header is unaffected by the
	// :ref:`suppress_envoy_headers
	// <envoy_v3_api_field_extensions.filters.http.router.v3.Router.suppress_envoy_headers>` flag.
	IncludeAttemptCountInResponse bool `protobuf:"varint,19,opt,name=include_attempt_count_in_response,json=includeAttemptCountInResponse,proto3" json:"include_attempt_count_in_response,omitempty"`
	// Indicates the retry policy for all routes in this virtual host. Note that setting a
	// route level entry will take precedence over this config and it'll be treated
	// independently (e.g., values are not inherited).
	RetryPolicy *RetryPolicy `protobuf:"bytes,16,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"`
	// [#not-implemented-hide:]
	// Specifies the configuration for retry policy extension. Note that setting a route level entry
	// will take precedence over this config and it'll be treated independently (e.g., values are not
	// inherited). :ref:`Retry policy <envoy_v3_api_field_config.route.v3.VirtualHost.retry_policy>` should not be
	// set if this field is used.
	RetryPolicyTypedConfig *anypb.Any `protobuf:"bytes,20,opt,name=retry_policy_typed_config,json=retryPolicyTypedConfig,proto3" json:"retry_policy_typed_config,omitempty"`
	// Indicates the hedge policy for all routes in this virtual host. Note that setting a
	// route level entry will take precedence over this config and it'll be treated
	// independently (e.g., values are not inherited).
	HedgePolicy *HedgePolicy `protobuf:"bytes,17,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"`
	// Decides whether to include the :ref:`x-envoy-is-timeout-retry <config_http_filters_router_x-envoy-is-timeout-retry>`
	// request header in retries initiated by per-try timeouts.
	IncludeIsTimeoutRetryHeader bool `protobuf:"varint,23,opt,name=include_is_timeout_retry_header,json=includeIsTimeoutRetryHeader,proto3" json:"include_is_timeout_retry_header,omitempty"`
	// The maximum bytes which will be buffered for retries and shadowing. If set, the bytes actually buffered will be
	// the minimum value of this and the listener “per_connection_buffer_limit_bytes“.
	//
	// .. attention::
	//
	//	This field has been deprecated. Please use :ref:`request_body_buffer_limit
	//	<envoy_v3_api_field_config.route.v3.VirtualHost.request_body_buffer_limit>` instead.
	//	Only one of ``per_request_buffer_limit_bytes`` and ``request_body_buffer_limit`` could be set.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	PerRequestBufferLimitBytes *wrapperspb.UInt32Value `protobuf:"bytes,18,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"`
	// The maximum bytes which will be buffered for request bodies to support large request body
	// buffering beyond the “per_connection_buffer_limit_bytes“.
	//
	// This limit is specifically for the request body buffering and allows buffering larger payloads while maintaining
	// flow control.
	//
	// Buffer limit precedence (from highest to lowest priority):
	//
	//  1. If “request_body_buffer_limit“ is set, then “request_body_buffer_limit“ will be used.
	//  2. If :ref:`per_request_buffer_limit_bytes <envoy_v3_api_field_config.route.v3.VirtualHost.per_request_buffer_limit_bytes>`
	//     is set but “request_body_buffer_limit“ is not, then “min(per_request_buffer_limit_bytes, per_connection_buffer_limit_bytes)“
	//     will be used.
	//  3. If neither is set, then “per_connection_buffer_limit_bytes“ will be used.
	//
	// For flow control chunk sizes, “min(per_connection_buffer_limit_bytes, 16KB)“ will be used.
	//
	// Only one of :ref:`per_request_buffer_limit_bytes <envoy_v3_api_field_config.route.v3.VirtualHost.per_request_buffer_limit_bytes>`
	// and “request_body_buffer_limit“ could be set.
	RequestBodyBufferLimit *wrapperspb.UInt64Value `protobuf:"bytes,25,opt,name=request_body_buffer_limit,json=requestBodyBufferLimit,proto3" json:"request_body_buffer_limit,omitempty"`
	// Specify a set of default request mirroring policies for every route under this virtual host.
	// It takes precedence over the route config mirror policy entirely.
	// That is, policies are not merged, the most specific non-empty one becomes the mirror policies.
	RequestMirrorPolicies []*RouteAction_RequestMirrorPolicy `protobuf:"bytes,22,rep,name=request_mirror_policies,json=requestMirrorPolicies,proto3" json:"request_mirror_policies,omitempty"`
	// The metadata field can be used to provide additional information
	// about the virtual host. It can be used for configuration, stats, and logging.
	// The metadata should go under the filter namespace that will need it.
	// For instance, if the metadata is intended for the Router filter,
	// the filter name should be specified as “envoy.filters.http.router“.
	Metadata      *v31.Metadata `protobuf:"bytes,24,opt,name=metadata,proto3" json:"metadata,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *VirtualHost) Reset() {
	*x = VirtualHost{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *VirtualHost) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VirtualHost) ProtoMessage() {}

func (x *VirtualHost) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VirtualHost.ProtoReflect.Descriptor instead.
func (*VirtualHost) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{0}
}

func (x *VirtualHost) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *VirtualHost) GetDomains() []string {
	if x != nil {
		return x.Domains
	}
	return nil
}

func (x *VirtualHost) GetRoutes() []*Route {
	if x != nil {
		return x.Routes
	}
	return nil
}

func (x *VirtualHost) GetMatcher() *v3.Matcher {
	if x != nil {
		return x.Matcher
	}
	return nil
}

func (x *VirtualHost) GetRequireTls() VirtualHost_TlsRequirementType {
	if x != nil {
		return x.RequireTls
	}
	return VirtualHost_NONE
}

func (x *VirtualHost) GetVirtualClusters() []*VirtualCluster {
	if x != nil {
		return x.VirtualClusters
	}
	return nil
}

func (x *VirtualHost) GetRateLimits() []*RateLimit {
	if x != nil {
		return x.RateLimits
	}
	return nil
}

func (x *VirtualHost) GetRequestHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.RequestHeadersToAdd
	}
	return nil
}

func (x *VirtualHost) GetRequestHeadersToRemove() []string {
	if x != nil {
		return x.RequestHeadersToRemove
	}
	return nil
}

func (x *VirtualHost) GetResponseHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.ResponseHeadersToAdd
	}
	return nil
}

func (x *VirtualHost) GetResponseHeadersToRemove() []string {
	if x != nil {
		return x.ResponseHeadersToRemove
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *VirtualHost) GetCors() *CorsPolicy {
	if x != nil {
		return x.Cors
	}
	return nil
}

func (x *VirtualHost) GetTypedPerFilterConfig() map[string]*anypb.Any {
	if x != nil {
		return x.TypedPerFilterConfig
	}
	return nil
}

func (x *VirtualHost) GetIncludeRequestAttemptCount() bool {
	if x != nil {
		return x.IncludeRequestAttemptCount
	}
	return false
}

func (x *VirtualHost) GetIncludeAttemptCountInResponse() bool {
	if x != nil {
		return x.IncludeAttemptCountInResponse
	}
	return false
}

func (x *VirtualHost) GetRetryPolicy() *RetryPolicy {
	if x != nil {
		return x.RetryPolicy
	}
	return nil
}

func (x *VirtualHost) GetRetryPolicyTypedConfig() *anypb.Any {
	if x != nil {
		return x.RetryPolicyTypedConfig
	}
	return nil
}

func (x *VirtualHost) GetHedgePolicy() *HedgePolicy {
	if x != nil {
		return x.HedgePolicy
	}
	return nil
}

func (x *VirtualHost) GetIncludeIsTimeoutRetryHeader() bool {
	if x != nil {
		return x.IncludeIsTimeoutRetryHeader
	}
	return false
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *VirtualHost) GetPerRequestBufferLimitBytes() *wrapperspb.UInt32Value {
	if x != nil {
		return x.PerRequestBufferLimitBytes
	}
	return nil
}

func (x *VirtualHost) GetRequestBodyBufferLimit() *wrapperspb.UInt64Value {
	if x != nil {
		return x.RequestBodyBufferLimit
	}
	return nil
}

func (x *VirtualHost) GetRequestMirrorPolicies() []*RouteAction_RequestMirrorPolicy {
	if x != nil {
		return x.RequestMirrorPolicies
	}
	return nil
}

func (x *VirtualHost) GetMetadata() *v31.Metadata {
	if x != nil {
		return x.Metadata
	}
	return nil
}

// A filter-defined action type.
type FilterAction struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Action        *anypb.Any             `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *FilterAction) Reset() {
	*x = FilterAction{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FilterAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FilterAction) ProtoMessage() {}

func (x *FilterAction) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FilterAction.ProtoReflect.Descriptor instead.
func (*FilterAction) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{1}
}

func (x *FilterAction) GetAction() *anypb.Any {
	if x != nil {
		return x.Action
	}
	return nil
}

// This can be used in route matcher :ref:`VirtualHost.matcher <envoy_v3_api_field_config.route.v3.VirtualHost.matcher>`.
// When the matcher matches, routes will be matched and run.
type RouteList struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The list of routes that will be matched and run, in order. The first route that matches will be used.
	Routes        []*Route `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteList) Reset() {
	*x = RouteList{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteList) ProtoMessage() {}

func (x *RouteList) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteList.ProtoReflect.Descriptor instead.
func (*RouteList) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{2}
}

func (x *RouteList) GetRoutes() []*Route {
	if x != nil {
		return x.Routes
	}
	return nil
}

// A route is both a specification of how to match a request as well as an indication of what to do
// next (e.g., redirect, forward, rewrite, etc.).
//
// .. attention::
//
//	Envoy supports routing on HTTP method via :ref:`header matching
//	<envoy_v3_api_msg_config.route.v3.HeaderMatcher>`.
//
// [#next-free-field: 21]
type Route struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Name for the route.
	Name string `protobuf:"bytes,14,opt,name=name,proto3" json:"name,omitempty"`
	// Route matching parameters.
	Match *RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"`
	// Types that are valid to be assigned to Action:
	//
	//	*Route_Route
	//	*Route_Redirect
	//	*Route_DirectResponse
	//	*Route_FilterAction
	//	*Route_NonForwardingAction
	Action isRoute_Action `protobuf_oneof:"action"`
	// The Metadata field can be used to provide additional information
	// about the route. It can be used for configuration, stats, and logging.
	// The metadata should go under the filter namespace that will need it.
	// For instance, if the metadata is intended for the Router filter,
	// the filter name should be specified as “envoy.filters.http.router“.
	Metadata *v31.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Decorator for the matched route.
	Decorator *Decorator `protobuf:"bytes,5,opt,name=decorator,proto3" json:"decorator,omitempty"`
	// This field can be used to provide route specific per filter config. The key should match the
	// :ref:`filter config name
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
	// See :ref:`HTTP filter route-specific config <arch_overview_http_filters_per_filter_config>`
	// for details.
	// [#comment: An entry's value may be wrapped in a
	// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
	// message to specify additional options.]
	TypedPerFilterConfig map[string]*anypb.Any `protobuf:"bytes,13,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// Specifies a set of headers that will be added to requests matching this
	// route. Headers specified at this level are applied before headers from the
	// enclosing :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost` and
	// :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,9,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request
	// matching this route.
	RequestHeadersToRemove []string `protobuf:"bytes,12,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a set of headers that will be added to responses to requests
	// matching this route. Headers specified at this level are applied before
	// headers from the enclosing :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost` and
	// :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on
	// :ref:`custom request headers <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each response
	// to requests matching this route.
	ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// Presence of the object defines whether the connection manager's tracing configuration
	// is overridden by this route specific instance.
	Tracing *Tracing `protobuf:"bytes,15,opt,name=tracing,proto3" json:"tracing,omitempty"`
	// The maximum bytes which will be buffered for retries and shadowing.
	// If set, the bytes actually buffered will be the minimum value of this and the
	// listener per_connection_buffer_limit_bytes.
	//
	// .. attention::
	//
	//	This field has been deprecated. Please use :ref:`request_body_buffer_limit
	//	<envoy_v3_api_field_config.route.v3.Route.request_body_buffer_limit>` instead.
	//	Only one of ``per_request_buffer_limit_bytes`` and ``request_body_buffer_limit`` may be set.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	PerRequestBufferLimitBytes *wrapperspb.UInt32Value `protobuf:"bytes,16,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"`
	// The human readable prefix to use when emitting statistics for this endpoint.
	// The statistics are rooted at vhost.<virtual host name>.route.<stat_prefix>.
	// This should be set for highly critical
	// endpoints that one wishes to get “per-route” statistics on.
	// If not set, endpoint statistics are not generated.
	//
	// The emitted statistics are the same as those documented for :ref:`virtual clusters <config_http_filters_router_vcluster_stats>`.
	//
	// .. warning::
	//
	//	We do not recommend setting up a stat prefix for
	//	every application endpoint. This is both not easily maintainable and
	//	statistics use a non-trivial amount of memory (approximately 1KiB per route).
	StatPrefix string `protobuf:"bytes,19,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The maximum bytes which will be buffered for request bodies to support large request body
	// buffering beyond the “per_connection_buffer_limit_bytes“.
	//
	// This limit is specifically for the request body buffering and allows buffering larger payloads while maintaining
	// flow control.
	//
	// Buffer limit precedence (from highest to lowest priority):
	//
	//  1. If “request_body_buffer_limit“ is set: use “request_body_buffer_limit“
	//  2. If :ref:`per_request_buffer_limit_bytes <envoy_v3_api_field_config.route.v3.Route.per_request_buffer_limit_bytes>`
	//     is set but “request_body_buffer_limit“ is not: use “min(per_request_buffer_limit_bytes, per_connection_buffer_limit_bytes)“
	//  3. If neither is set: use “per_connection_buffer_limit_bytes“
	//
	// For flow control chunk sizes, use “min(per_connection_buffer_limit_bytes, 16KB)“.
	//
	// Only one of :ref:`per_request_buffer_limit_bytes <envoy_v3_api_field_config.route.v3.Route.per_request_buffer_limit_bytes>`
	// and “request_body_buffer_limit“ may be set.
	RequestBodyBufferLimit *wrapperspb.UInt64Value `protobuf:"bytes,20,opt,name=request_body_buffer_limit,json=requestBodyBufferLimit,proto3" json:"request_body_buffer_limit,omitempty"`
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *Route) Reset() {
	*x = Route{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Route) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Route) ProtoMessage() {}

func (x *Route) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Route.ProtoReflect.Descriptor instead.
func (*Route) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{3}
}

func (x *Route) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Route) GetMatch() *RouteMatch {
	if x != nil {
		return x.Match
	}
	return nil
}

func (x *Route) GetAction() isRoute_Action {
	if x != nil {
		return x.Action
	}
	return nil
}

func (x *Route) GetRoute() *RouteAction {
	if x != nil {
		if x, ok := x.Action.(*Route_Route); ok {
			return x.Route
		}
	}
	return nil
}

func (x *Route) GetRedirect() *RedirectAction {
	if x != nil {
		if x, ok := x.Action.(*Route_Redirect); ok {
			return x.Redirect
		}
	}
	return nil
}

func (x *Route) GetDirectResponse() *DirectResponseAction {
	if x != nil {
		if x, ok := x.Action.(*Route_DirectResponse); ok {
			return x.DirectResponse
		}
	}
	return nil
}

func (x *Route) GetFilterAction() *FilterAction {
	if x != nil {
		if x, ok := x.Action.(*Route_FilterAction); ok {
			return x.FilterAction
		}
	}
	return nil
}

func (x *Route) GetNonForwardingAction() *NonForwardingAction {
	if x != nil {
		if x, ok := x.Action.(*Route_NonForwardingAction); ok {
			return x.NonForwardingAction
		}
	}
	return nil
}

func (x *Route) GetMetadata() *v31.Metadata {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *Route) GetDecorator() *Decorator {
	if x != nil {
		return x.Decorator
	}
	return nil
}

func (x *Route) GetTypedPerFilterConfig() map[string]*anypb.Any {
	if x != nil {
		return x.TypedPerFilterConfig
	}
	return nil
}

func (x *Route) GetRequestHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.RequestHeadersToAdd
	}
	return nil
}

func (x *Route) GetRequestHeadersToRemove() []string {
	if x != nil {
		return x.RequestHeadersToRemove
	}
	return nil
}

func (x *Route) GetResponseHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.ResponseHeadersToAdd
	}
	return nil
}

func (x *Route) GetResponseHeadersToRemove() []string {
	if x != nil {
		return x.ResponseHeadersToRemove
	}
	return nil
}

func (x *Route) GetTracing() *Tracing {
	if x != nil {
		return x.Tracing
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *Route) GetPerRequestBufferLimitBytes() *wrapperspb.UInt32Value {
	if x != nil {
		return x.PerRequestBufferLimitBytes
	}
	return nil
}

func (x *Route) GetStatPrefix() string {
	if x != nil {
		return x.StatPrefix
	}
	return ""
}

func (x *Route) GetRequestBodyBufferLimit() *wrapperspb.UInt64Value {
	if x != nil {
		return x.RequestBodyBufferLimit
	}
	return nil
}

type isRoute_Action interface {
	isRoute_Action()
}

type Route_Route struct {
	// Route request to some upstream cluster.
	Route *RouteAction `protobuf:"bytes,2,opt,name=route,proto3,oneof"`
}

type Route_Redirect struct {
	// Return a redirect.
	Redirect *RedirectAction `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"`
}

type Route_DirectResponse struct {
	// Return an arbitrary HTTP response directly, without proxying.
	DirectResponse *DirectResponseAction `protobuf:"bytes,7,opt,name=direct_response,json=directResponse,proto3,oneof"`
}

type Route_FilterAction struct {
	// [#not-implemented-hide:]
	// A filter-defined action (e.g., it could dynamically generate the RouteAction).
	// [#comment: TODO(samflattery): Remove cleanup in route_fuzz_test.cc when
	// implemented]
	FilterAction *FilterAction `protobuf:"bytes,17,opt,name=filter_action,json=filterAction,proto3,oneof"`
}

type Route_NonForwardingAction struct {
	// [#not-implemented-hide:]
	// An action used when the route will generate a response directly,
	// without forwarding to an upstream host. This will be used in non-proxy
	// xDS clients like the gRPC server. It could also be used in the future
	// in Envoy for a filter that directly generates responses for requests.
	NonForwardingAction *NonForwardingAction `protobuf:"bytes,18,opt,name=non_forwarding_action,json=nonForwardingAction,proto3,oneof"`
}

func (*Route_Route) isRoute_Action() {}

func (*Route_Redirect) isRoute_Action() {}

func (*Route_DirectResponse) isRoute_Action() {}

func (*Route_FilterAction) isRoute_Action() {}

func (*Route_NonForwardingAction) isRoute_Action() {}

// Compared to the :ref:`cluster <envoy_v3_api_field_config.route.v3.RouteAction.cluster>` field that specifies a
// single upstream cluster as the target of a request, the :ref:`weighted_clusters
// <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>` option allows for specification of
// multiple upstream clusters along with weights that indicate the percentage of
// traffic to be forwarded to each cluster. The router selects an upstream cluster based on the
// weights.
// [#next-free-field: 6]
type WeightedCluster struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies one or more upstream clusters associated with the route.
	Clusters []*WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	// Specifies the total weight across all clusters. The sum of all cluster weights must equal this
	// value, if this is greater than 0.
	// This field is now deprecated, and the client will use the sum of all
	// cluster weights. It is up to the management server to supply the correct weights.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	TotalWeight *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"`
	// Specifies the runtime key prefix that should be used to construct the
	// runtime keys associated with each cluster. When the “runtime_key_prefix“ is
	// specified, the router will look for weights associated with each upstream
	// cluster under the key “runtime_key_prefix“ + “.“ + “cluster[i].name“ where
	// “cluster[i]“ denotes an entry in the clusters array field. If the runtime
	// key for the cluster does not exist, the value specified in the
	// configuration file will be used as the default weight. See the :ref:`runtime documentation
	// <operations_runtime>` for how key names map to the underlying implementation.
	RuntimeKeyPrefix string `protobuf:"bytes,2,opt,name=runtime_key_prefix,json=runtimeKeyPrefix,proto3" json:"runtime_key_prefix,omitempty"`
	// Types that are valid to be assigned to RandomValueSpecifier:
	//
	//	*WeightedCluster_HeaderName
	//	*WeightedCluster_UseHashPolicy
	RandomValueSpecifier isWeightedCluster_RandomValueSpecifier `protobuf_oneof:"random_value_specifier"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *WeightedCluster) Reset() {
	*x = WeightedCluster{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *WeightedCluster) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*WeightedCluster) ProtoMessage() {}

func (x *WeightedCluster) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use WeightedCluster.ProtoReflect.Descriptor instead.
func (*WeightedCluster) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{4}
}

func (x *WeightedCluster) GetClusters() []*WeightedCluster_ClusterWeight {
	if x != nil {
		return x.Clusters
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *WeightedCluster) GetTotalWeight() *wrapperspb.UInt32Value {
	if x != nil {
		return x.TotalWeight
	}
	return nil
}

func (x *WeightedCluster) GetRuntimeKeyPrefix() string {
	if x != nil {
		return x.RuntimeKeyPrefix
	}
	return ""
}

func (x *WeightedCluster) GetRandomValueSpecifier() isWeightedCluster_RandomValueSpecifier {
	if x != nil {
		return x.RandomValueSpecifier
	}
	return nil
}

func (x *WeightedCluster) GetHeaderName() string {
	if x != nil {
		if x, ok := x.RandomValueSpecifier.(*WeightedCluster_HeaderName); ok {
			return x.HeaderName
		}
	}
	return ""
}

func (x *WeightedCluster) GetUseHashPolicy() *wrapperspb.BoolValue {
	if x != nil {
		if x, ok := x.RandomValueSpecifier.(*WeightedCluster_UseHashPolicy); ok {
			return x.UseHashPolicy
		}
	}
	return nil
}

type isWeightedCluster_RandomValueSpecifier interface {
	isWeightedCluster_RandomValueSpecifier()
}

type WeightedCluster_HeaderName struct {
	// Specifies the header name that is used to look up the random value passed in the request header.
	// This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
	// If header is not present or invalid, Envoy will fall back to use the internally generated random value.
	// This header is expected to be single-valued header as we only want to have one selected value throughout
	// the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
	HeaderName string `protobuf:"bytes,4,opt,name=header_name,json=headerName,proto3,oneof"`
}

type WeightedCluster_UseHashPolicy struct {
	// When set to true, the hash policies will be used to generate the random value for weighted cluster selection.
	// This could ensure consistent cluster picking across multiple proxy levels for weighted traffic.
	UseHashPolicy *wrapperspb.BoolValue `protobuf:"bytes,5,opt,name=use_hash_policy,json=useHashPolicy,proto3,oneof"`
}

func (*WeightedCluster_HeaderName) isWeightedCluster_RandomValueSpecifier() {}

func (*WeightedCluster_UseHashPolicy) isWeightedCluster_RandomValueSpecifier() {}

// Configuration for a cluster specifier plugin.
type ClusterSpecifierPlugin struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the plugin and its opaque configuration.
	//
	// [#extension-category: envoy.router.cluster_specifier_plugin]
	Extension *v31.TypedExtensionConfig `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"`
	// If is_optional is not set or is set to false and the plugin defined by this message is not a
	// supported type, the containing resource is NACKed. If is_optional is set to true, the resource
	// would not be NACKed for this reason. In this case, routes referencing this plugin's name would
	// not be treated as an illegal configuration, but would result in a failure if the route is
	// selected.
	IsOptional    bool `protobuf:"varint,2,opt,name=is_optional,json=isOptional,proto3" json:"is_optional,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ClusterSpecifierPlugin) Reset() {
	*x = ClusterSpecifierPlugin{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ClusterSpecifierPlugin) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ClusterSpecifierPlugin) ProtoMessage() {}

func (x *ClusterSpecifierPlugin) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ClusterSpecifierPlugin.ProtoReflect.Descriptor instead.
func (*ClusterSpecifierPlugin) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{5}
}

func (x *ClusterSpecifierPlugin) GetExtension() *v31.TypedExtensionConfig {
	if x != nil {
		return x.Extension
	}
	return nil
}

func (x *ClusterSpecifierPlugin) GetIsOptional() bool {
	if x != nil {
		return x.IsOptional
	}
	return false
}

// [#next-free-field: 18]
type RouteMatch struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to PathSpecifier:
	//
	//	*RouteMatch_Prefix
	//	*RouteMatch_Path
	//	*RouteMatch_SafeRegex
	//	*RouteMatch_ConnectMatcher_
	//	*RouteMatch_PathSeparatedPrefix
	//	*RouteMatch_PathMatchPolicy
	PathSpecifier isRouteMatch_PathSpecifier `protobuf_oneof:"path_specifier"`
	// Indicates that prefix/path matching should be case-sensitive. The default
	// is true. Ignored for safe_regex matching.
	CaseSensitive *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"`
	// Indicates that the route should additionally match on a runtime key. Every time the route
	// is considered for a match, it must also fall under the percentage of matches indicated by
	// this field. For some fraction N/D, a random number in the range [0,D) is selected. If the
	// number is <= the value of the numerator N, or if the key is not present, the default
	// value, the router continues to evaluate the remaining match criteria. A runtime_fraction
	// route configuration can be used to roll out route changes in a gradual manner without full
	// code/config deploys. Refer to the :ref:`traffic shifting
	// <config_http_conn_man_route_table_traffic_splitting_shift>` docs for additional documentation.
	//
	// .. note::
	//
	//	Parsing this field is implemented such that the runtime key's data may be represented
	//	as a FractionalPercent proto represented as JSON/YAML and may also be represented as an
	//	integer with the assumption that the value is an integral percentage out of 100. For
	//	instance, a runtime key lookup returning the value "42" would parse as a FractionalPercent
	//	whose numerator is 42 and denominator is HUNDRED. This preserves legacy semantics.
	RuntimeFraction *v31.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"`
	// Specifies a set of headers that the route should match on. The router will
	// check the request’s headers against all the specified headers in the route
	// config. A match will happen if all the headers in the route are present in
	// the request with the same values (or based on presence if the value field
	// is not in the config).
	Headers []*HeaderMatcher `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty"`
	// Specifies a set of URL query parameters on which the route should
	// match. The router will check the query string from the “path“ header
	// against all the specified query parameters. If the number of specified
	// query parameters is nonzero, they all must match the “path“ header's
	// query string for a match to occur. In the event query parameters are
	// repeated, only the first value for each key will be considered.
	//
	// .. note::
	//
	//	If query parameters are used to pass request message fields when
	//	`grpc_json_transcoder <https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter>`_
	//	is used, the transcoded message fields may be different. The query parameters are
	//	URL-encoded, but the message fields are not. For example, if a query
	//	parameter is "foo%20bar", the message field will be "foo bar".
	QueryParameters []*QueryParameterMatcher `protobuf:"bytes,7,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"`
	// Specifies a set of cookies on which the route should match. The router parses the “Cookie“
	// header and evaluates the named cookie against each matcher. If the number of specified cookie
	// matchers is nonzero, they all must match for the route to be selected.
	Cookies []*CookieMatcher `protobuf:"bytes,17,rep,name=cookies,proto3" json:"cookies,omitempty"`
	// If specified, only gRPC requests will be matched. The router will check
	// that the “Content-Type“ header has “application/grpc“ or one of the various
	// “application/grpc+“ values.
	Grpc *RouteMatch_GrpcRouteMatchOptions `protobuf:"bytes,8,opt,name=grpc,proto3" json:"grpc,omitempty"`
	// If specified, the client tls context will be matched against the defined
	// match options.
	//
	// [#next-major-version: unify with RBAC]
	TlsContext *RouteMatch_TlsContextMatchOptions `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"`
	// Specifies a set of dynamic metadata matchers on which the route should match.
	// The router will check the dynamic metadata against all the specified dynamic metadata matchers.
	// If the number of specified dynamic metadata matchers is nonzero, they all must match the
	// dynamic metadata for a match to occur.
	DynamicMetadata []*v32.MetadataMatcher `protobuf:"bytes,13,rep,name=dynamic_metadata,json=dynamicMetadata,proto3" json:"dynamic_metadata,omitempty"`
	// Specifies a set of filter state matchers on which the route should match.
	// The router will check the filter state against all the specified filter state matchers.
	// If the number of specified filter state matchers is nonzero, they all must match the
	// filter state for a match to occur.
	FilterState   []*v32.FilterStateMatcher `protobuf:"bytes,16,rep,name=filter_state,json=filterState,proto3" json:"filter_state,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteMatch) Reset() {
	*x = RouteMatch{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteMatch) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteMatch) ProtoMessage() {}

func (x *RouteMatch) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteMatch.ProtoReflect.Descriptor instead.
func (*RouteMatch) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{6}
}

func (x *RouteMatch) GetPathSpecifier() isRouteMatch_PathSpecifier {
	if x != nil {
		return x.PathSpecifier
	}
	return nil
}

func (x *RouteMatch) GetPrefix() string {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_Prefix); ok {
			return x.Prefix
		}
	}
	return ""
}

func (x *RouteMatch) GetPath() string {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_Path); ok {
			return x.Path
		}
	}
	return ""
}

func (x *RouteMatch) GetSafeRegex() *v32.RegexMatcher {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_SafeRegex); ok {
			return x.SafeRegex
		}
	}
	return nil
}

func (x *RouteMatch) GetConnectMatcher() *RouteMatch_ConnectMatcher {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_ConnectMatcher_); ok {
			return x.ConnectMatcher
		}
	}
	return nil
}

func (x *RouteMatch) GetPathSeparatedPrefix() string {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_PathSeparatedPrefix); ok {
			return x.PathSeparatedPrefix
		}
	}
	return ""
}

func (x *RouteMatch) GetPathMatchPolicy() *v31.TypedExtensionConfig {
	if x != nil {
		if x, ok := x.PathSpecifier.(*RouteMatch_PathMatchPolicy); ok {
			return x.PathMatchPolicy
		}
	}
	return nil
}

func (x *RouteMatch) GetCaseSensitive() *wrapperspb.BoolValue {
	if x != nil {
		return x.CaseSensitive
	}
	return nil
}

func (x *RouteMatch) GetRuntimeFraction() *v31.RuntimeFractionalPercent {
	if x != nil {
		return x.RuntimeFraction
	}
	return nil
}

func (x *RouteMatch) GetHeaders() []*HeaderMatcher {
	if x != nil {
		return x.Headers
	}
	return nil
}

func (x *RouteMatch) GetQueryParameters() []*QueryParameterMatcher {
	if x != nil {
		return x.QueryParameters
	}
	return nil
}

func (x *RouteMatch) GetCookies() []*CookieMatcher {
	if x != nil {
		return x.Cookies
	}
	return nil
}

func (x *RouteMatch) GetGrpc() *RouteMatch_GrpcRouteMatchOptions {
	if x != nil {
		return x.Grpc
	}
	return nil
}

func (x *RouteMatch) GetTlsContext() *RouteMatch_TlsContextMatchOptions {
	if x != nil {
		return x.TlsContext
	}
	return nil
}

func (x *RouteMatch) GetDynamicMetadata() []*v32.MetadataMatcher {
	if x != nil {
		return x.DynamicMetadata
	}
	return nil
}

func (x *RouteMatch) GetFilterState() []*v32.FilterStateMatcher {
	if x != nil {
		return x.FilterState
	}
	return nil
}

type isRouteMatch_PathSpecifier interface {
	isRouteMatch_PathSpecifier()
}

type RouteMatch_Prefix struct {
	// If specified, the route is a prefix rule meaning that the prefix must
	// match the beginning of the “:path“ header.
	Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"`
}

type RouteMatch_Path struct {
	// If specified, the route is an exact path rule meaning that the path must
	// exactly match the “:path“ header once the query string is removed.
	Path string `protobuf:"bytes,2,opt,name=path,proto3,oneof"`
}

type RouteMatch_SafeRegex struct {
	// If specified, the route is a regular expression rule meaning that the
	// regex must match the “:path“ header once the query string is removed. The entire path
	// (without the query string) must match the regex. The rule will not match if only a
	// subsequence of the “:path“ header matches the regex.
	//
	// [#next-major-version: In the v3 API we should redo how path specification works such
	// that we utilize StringMatcher, and additionally have consistent options around whether we
	// strip query strings, do a case-sensitive match, etc. In the interim it will be too disruptive
	// to deprecate the existing options. We should even consider whether we want to do away with
	// path_specifier entirely and just rely on a set of header matchers which can already match
	// on :path, etc. The issue with that is it is unclear how to generically deal with query string
	// stripping. This needs more thought.]
	SafeRegex *v32.RegexMatcher `protobuf:"bytes,10,opt,name=safe_regex,json=safeRegex,proto3,oneof"`
}

type RouteMatch_ConnectMatcher_ struct {
	// If this is used as the matcher, the matcher will only match CONNECT or CONNECT-UDP requests.
	// Note that this will not match other Extended CONNECT requests (WebSocket and the like) as
	// they are normalized in Envoy as HTTP/1.1 style upgrades.
	// This is the only way to match CONNECT requests for HTTP/1.1. For HTTP/2 and HTTP/3,
	// where Extended CONNECT requests may have a path, the path matchers will work if
	// there is a path present.
	// Note that CONNECT support is currently considered alpha in Envoy.
	// [#comment: TODO(htuch): Replace the above comment with an alpha tag.]
	ConnectMatcher *RouteMatch_ConnectMatcher `protobuf:"bytes,12,opt,name=connect_matcher,json=connectMatcher,proto3,oneof"`
}

type RouteMatch_PathSeparatedPrefix struct {
	// If specified, the route is a path-separated prefix rule meaning that the
	// “:path“ header (without the query string) must either exactly match the
	// “path_separated_prefix“ or have it as a prefix, followed by “/“
	//
	// For example, “/api/dev“ would match
	// “/api/dev“, “/api/dev/“, “/api/dev/v1“, and “/api/dev?param=true“
	// but would not match “/api/developer“
	//
	// Expect the value to not contain “?“ or “#“ and not to end in “/“
	PathSeparatedPrefix string `protobuf:"bytes,14,opt,name=path_separated_prefix,json=pathSeparatedPrefix,proto3,oneof"`
}

type RouteMatch_PathMatchPolicy struct {
	// [#extension-category: envoy.path.match]
	PathMatchPolicy *v31.TypedExtensionConfig `protobuf:"bytes,15,opt,name=path_match_policy,json=pathMatchPolicy,proto3,oneof"`
}

func (*RouteMatch_Prefix) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_Path) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_SafeRegex) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_ConnectMatcher_) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_PathSeparatedPrefix) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_PathMatchPolicy) isRouteMatch_PathSpecifier() {}

// Cors policy configuration.
//
// .. attention::
//
//	This message has been deprecated. Please use
//	:ref:`CorsPolicy in filter extension <envoy_v3_api_msg_extensions.filters.http.cors.v3.CorsPolicy>`
//	as as alternative.
//
// [#next-free-field: 14]
type CorsPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies string patterns that match allowed origins. An origin is allowed if any of the
	// string matchers match.
	AllowOriginStringMatch []*v32.StringMatcher `protobuf:"bytes,11,rep,name=allow_origin_string_match,json=allowOriginStringMatch,proto3" json:"allow_origin_string_match,omitempty"`
	// Specifies the content for the “access-control-allow-methods“ header.
	AllowMethods string `protobuf:"bytes,2,opt,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"`
	// Specifies the content for the “access-control-allow-headers“ header.
	AllowHeaders string `protobuf:"bytes,3,opt,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"`
	// Specifies the content for the “access-control-expose-headers“ header.
	ExposeHeaders string `protobuf:"bytes,4,opt,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"`
	// Specifies the content for the “access-control-max-age“ header.
	MaxAge string `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"`
	// Specifies whether the resource allows credentials.
	AllowCredentials *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"`
	// Types that are valid to be assigned to EnabledSpecifier:
	//
	//	*CorsPolicy_FilterEnabled
	EnabledSpecifier isCorsPolicy_EnabledSpecifier `protobuf_oneof:"enabled_specifier"`
	// Specifies the % of requests for which the CORS policies will be evaluated and tracked, but not
	// enforced.
	//
	// This field is intended to be used when “filter_enabled“ and “enabled“ are off. One of those
	// fields have to explicitly disable the filter in order for this setting to take effect.
	//
	// If :ref:`runtime_key <envoy_v3_api_field_config.core.v3.RuntimeFractionalPercent.runtime_key>` is specified,
	// Envoy will lookup the runtime key to get the percentage of requests for which it will evaluate
	// and track the request's “Origin“ to determine if it's valid but will not enforce any policies.
	ShadowEnabled *v31.RuntimeFractionalPercent `protobuf:"bytes,10,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"`
	// Specify whether allow requests whose target server's IP address is more private than that from
	// which the request initiator was fetched.
	//
	// More details refer to https://developer.chrome.com/blog/private-network-access-preflight.
	AllowPrivateNetworkAccess *wrapperspb.BoolValue `protobuf:"bytes,12,opt,name=allow_private_network_access,json=allowPrivateNetworkAccess,proto3" json:"allow_private_network_access,omitempty"`
	// Specifies if preflight requests not matching the configured allowed origin should be forwarded
	// to the upstream. Default is “true“.
	ForwardNotMatchingPreflights *wrapperspb.BoolValue `protobuf:"bytes,13,opt,name=forward_not_matching_preflights,json=forwardNotMatchingPreflights,proto3" json:"forward_not_matching_preflights,omitempty"`
	unknownFields                protoimpl.UnknownFields
	sizeCache                    protoimpl.SizeCache
}

func (x *CorsPolicy) Reset() {
	*x = CorsPolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CorsPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CorsPolicy) ProtoMessage() {}

func (x *CorsPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead.
func (*CorsPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{7}
}

func (x *CorsPolicy) GetAllowOriginStringMatch() []*v32.StringMatcher {
	if x != nil {
		return x.AllowOriginStringMatch
	}
	return nil
}

func (x *CorsPolicy) GetAllowMethods() string {
	if x != nil {
		return x.AllowMethods
	}
	return ""
}

func (x *CorsPolicy) GetAllowHeaders() string {
	if x != nil {
		return x.AllowHeaders
	}
	return ""
}

func (x *CorsPolicy) GetExposeHeaders() string {
	if x != nil {
		return x.ExposeHeaders
	}
	return ""
}

func (x *CorsPolicy) GetMaxAge() string {
	if x != nil {
		return x.MaxAge
	}
	return ""
}

func (x *CorsPolicy) GetAllowCredentials() *wrapperspb.BoolValue {
	if x != nil {
		return x.AllowCredentials
	}
	return nil
}

func (x *CorsPolicy) GetEnabledSpecifier() isCorsPolicy_EnabledSpecifier {
	if x != nil {
		return x.EnabledSpecifier
	}
	return nil
}

func (x *CorsPolicy) GetFilterEnabled() *v31.RuntimeFractionalPercent {
	if x != nil {
		if x, ok := x.EnabledSpecifier.(*CorsPolicy_FilterEnabled); ok {
			return x.FilterEnabled
		}
	}
	return nil
}

func (x *CorsPolicy) GetShadowEnabled() *v31.RuntimeFractionalPercent {
	if x != nil {
		return x.ShadowEnabled
	}
	return nil
}

func (x *CorsPolicy) GetAllowPrivateNetworkAccess() *wrapperspb.BoolValue {
	if x != nil {
		return x.AllowPrivateNetworkAccess
	}
	return nil
}

func (x *CorsPolicy) GetForwardNotMatchingPreflights() *wrapperspb.BoolValue {
	if x != nil {
		return x.ForwardNotMatchingPreflights
	}
	return nil
}

type isCorsPolicy_EnabledSpecifier interface {
	isCorsPolicy_EnabledSpecifier()
}

type CorsPolicy_FilterEnabled struct {
	// Specifies the % of requests for which the CORS filter is enabled.
	//
	// If neither “enabled“, “filter_enabled“, nor “shadow_enabled“ are specified, the CORS
	// filter will be enabled for 100% of the requests.
	//
	// If :ref:`runtime_key <envoy_v3_api_field_config.core.v3.RuntimeFractionalPercent.runtime_key>` is
	// specified, Envoy will lookup the runtime key to get the percentage of requests to filter.
	FilterEnabled *v31.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3,oneof"`
}

func (*CorsPolicy_FilterEnabled) isCorsPolicy_EnabledSpecifier() {}

// [#next-free-field: 46]
type RouteAction struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to ClusterSpecifier:
	//
	//	*RouteAction_Cluster
	//	*RouteAction_ClusterHeader
	//	*RouteAction_WeightedClusters
	//	*RouteAction_ClusterSpecifierPlugin
	//	*RouteAction_InlineClusterSpecifierPlugin
	ClusterSpecifier isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"`
	// The HTTP status code to use when configured cluster is not found.
	// The default response code is 503 Service Unavailable.
	ClusterNotFoundResponseCode RouteAction_ClusterNotFoundResponseCode `protobuf:"varint,20,opt,name=cluster_not_found_response_code,json=clusterNotFoundResponseCode,proto3,enum=envoy.config.route.v3.RouteAction_ClusterNotFoundResponseCode" json:"cluster_not_found_response_code,omitempty"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints
	// in the upstream cluster with metadata matching what's set in this field will be considered
	// for load balancing. If using :ref:`weighted_clusters
	// <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>`, metadata will be merged, with values
	// provided there taking precedence. The filter name should be specified as “envoy.lb“.
	MetadataMatch *v31.Metadata `protobuf:"bytes,4,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// Indicates that during forwarding, the matched prefix (or path) should be
	// swapped with this value. This option allows application URLs to be rooted
	// at a different path from those exposed at the reverse proxy layer. The router filter will
	// place the original path before rewrite into the :ref:`x-envoy-original-path
	// <config_http_filters_router_x-envoy-original-path>` header.
	//
	// Only one of :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`,
	// :ref:`path_rewrite_policy <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite_policy>`,
	// :ref:`path_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite>`,
	// or :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`
	// may be specified.
	//
	// .. attention::
	//
	//	Pay careful attention to the use of trailing slashes in the
	//	:ref:`route's match <envoy_v3_api_field_config.route.v3.Route.match>` prefix value.
	//	Stripping a prefix from a path requires multiple Routes to handle all cases. For example,
	//	rewriting ``/prefix`` to ``/`` and ``/prefix/etc`` to ``/etc`` cannot be done in a single
	//	:ref:`Route <envoy_v3_api_msg_config.route.v3.Route>`, as shown by the below config entries:
	//
	//	.. code-block:: yaml
	//
	//	  - match:
	//	      prefix: "/prefix/"
	//	    route:
	//	      prefix_rewrite: "/"
	//	  - match:
	//	      prefix: "/prefix"
	//	    route:
	//	      prefix_rewrite: "/"
	//
	//	Having above entries in the config, requests to ``/prefix`` will be stripped to ``/``, while
	//	requests to ``/prefix/etc`` will be stripped to ``/etc``.
	PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3" json:"prefix_rewrite,omitempty"`
	// Indicates that during forwarding, portions of the path that match the
	// pattern should be rewritten, even allowing the substitution of capture
	// groups from the pattern into the new path as specified by the rewrite
	// substitution string. This is useful to allow application paths to be
	// rewritten in a way that is aware of segments with variable content like
	// identifiers. The router filter will place the original path as it was
	// before the rewrite into the :ref:`x-envoy-original-path
	// <config_http_filters_router_x-envoy-original-path>` header.
	//
	// Only one of :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`,
	// :ref:`path_rewrite_policy <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite_policy>`,
	// :ref:`path_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite>`,
	// or :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`
	// may be specified.
	//
	// Examples using Google's `RE2 <https://github.com/google/re2>`_ engine:
	//
	//   - The path pattern “^/service/([^/]+)(/.*)$“ paired with a substitution
	//     string of “\2/instance/\1“ would transform “/service/foo/v1/api“
	//     into “/v1/api/instance/foo“.
	//
	//   - The pattern “one“ paired with a substitution string of “two“ would
	//     transform “/xxx/one/yyy/one/zzz“ into “/xxx/two/yyy/two/zzz“.
	//
	//   - The pattern “^(.*?)one(.*)$“ paired with a substitution string of
	//     “\1two\2“ would replace only the first occurrence of “one“,
	//     transforming path “/xxx/one/yyy/one/zzz“ into “/xxx/two/yyy/one/zzz“.
	//
	//   - The pattern “(?i)/xxx/“ paired with a substitution string of “/yyy/“
	//     would do a case-insensitive match and transform path “/aaa/XxX/bbb“ to
	//     “/aaa/yyy/bbb“.
	RegexRewrite *v32.RegexMatchAndSubstitute `protobuf:"bytes,32,opt,name=regex_rewrite,json=regexRewrite,proto3" json:"regex_rewrite,omitempty"`
	// [#extension-category: envoy.path.rewrite]
	PathRewritePolicy *v31.TypedExtensionConfig `protobuf:"bytes,41,opt,name=path_rewrite_policy,json=pathRewritePolicy,proto3" json:"path_rewrite_policy,omitempty"`
	// Rewrites the whole path (without query parameters) with the given path value.
	// The router filter will
	// place the original path before rewrite into the :ref:`x-envoy-original-path
	// <config_http_filters_router_x-envoy-original-path>` header.
	//
	// Only one of :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`,
	// :ref:`path_rewrite_policy <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite_policy>`,
	// :ref:`path_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite>`,
	// or :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`
	// may be specified.
	//
	// The :ref:`substitution format specifier <config_access_log_format>` could be applied here.
	// For example, with the following config:
	//
	//	.. code-block:: yaml
	//
	//	  path_rewrite: "/new_path_prefix%REQ(custom-path-header-name)%"
	//
	// Would rewrite the path to “/new_path_prefix/some_value“ given the header
	// “custom-path-header-name: some_value“. If the header is not present, the path will be
	// rewritten to “/new_path_prefix“.
	//
	// If the final output of the path rewrite is empty, then the update will be ignored and the
	// original path will be preserved.
	PathRewrite string `protobuf:"bytes,45,opt,name=path_rewrite,json=pathRewrite,proto3" json:"path_rewrite,omitempty"`
	// If one of the host rewrite specifiers is set and the
	// :ref:`suppress_envoy_headers
	// <envoy_v3_api_field_extensions.filters.http.router.v3.Router.suppress_envoy_headers>` flag is not
	// set to true, the router filter will place the original host header value before
	// rewriting into the :ref:`x-envoy-original-host
	// <config_http_filters_router_x-envoy-original-host>` header.
	//
	// And if the
	// :ref:`append_x_forwarded_host <envoy_v3_api_field_config.route.v3.RouteAction.append_x_forwarded_host>`
	// is set to true, the original host value will also be appended to the
	// :ref:`config_http_conn_man_headers_x-forwarded-host` header.
	//
	// Types that are valid to be assigned to HostRewriteSpecifier:
	//
	//	*RouteAction_HostRewriteLiteral
	//	*RouteAction_AutoHostRewrite
	//	*RouteAction_HostRewriteHeader
	//	*RouteAction_HostRewritePathRegex
	//	*RouteAction_HostRewrite
	HostRewriteSpecifier isRouteAction_HostRewriteSpecifier `protobuf_oneof:"host_rewrite_specifier"`
	// If set, then a host rewrite action (one of
	// :ref:`host_rewrite_literal <envoy_v3_api_field_config.route.v3.RouteAction.host_rewrite_literal>`,
	// :ref:`auto_host_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.auto_host_rewrite>`,
	// :ref:`host_rewrite_header <envoy_v3_api_field_config.route.v3.RouteAction.host_rewrite_header>`, or
	// :ref:`host_rewrite_path_regex <envoy_v3_api_field_config.route.v3.RouteAction.host_rewrite_path_regex>`)
	// causes the original value of the host header, if any, to be appended to the
	// :ref:`config_http_conn_man_headers_x-forwarded-host` HTTP header if it is different to the last value appended.
	AppendXForwardedHost bool `protobuf:"varint,38,opt,name=append_x_forwarded_host,json=appendXForwardedHost,proto3" json:"append_x_forwarded_host,omitempty"`
	// Specifies the upstream timeout for the route. If not specified, the default is 15s. This
	// spans between the point at which the entire downstream request (i.e. end-of-stream) has been
	// processed and when the upstream response has been completely processed. A value of 0 will
	// disable the route's timeout.
	//
	// .. note::
	//
	//	This timeout includes all retries. See also
	//	:ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`,
	//	:ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`, and the
	//	:ref:`retry overview <arch_overview_http_routing_retry>`.
	Timeout *durationpb.Duration `protobuf:"bytes,8,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// Specifies the idle timeout for the route. If not specified, there is no per-route idle timeout,
	// although the connection manager wide :ref:`stream_idle_timeout
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_idle_timeout>`
	// will still apply. A value of 0 will completely disable the route's idle timeout, even if a
	// connection manager stream idle timeout is configured.
	//
	// The idle timeout is distinct to :ref:`timeout
	// <envoy_v3_api_field_config.route.v3.RouteAction.timeout>`, which provides an upper bound
	// on the upstream response time; :ref:`idle_timeout
	// <envoy_v3_api_field_config.route.v3.RouteAction.idle_timeout>` instead bounds the amount
	// of time the request's stream may be idle.
	//
	// After header decoding, the idle timeout will apply on downstream and
	// upstream request events. Each time an encode/decode event for headers or
	// data is processed for the stream, the timer will be reset. If the timeout
	// fires, the stream is terminated with a 408 Request Timeout error code if no
	// upstream response header has been received, otherwise a stream reset
	// occurs.
	//
	// If the :ref:`overload action <config_overload_manager_overload_actions>` "envoy.overload_actions.reduce_timeouts"
	// is configured, this timeout is scaled according to the value for
	// :ref:`HTTP_DOWNSTREAM_STREAM_IDLE <envoy_v3_api_enum_value_config.overload.v3.ScaleTimersOverloadActionConfig.TimerType.HTTP_DOWNSTREAM_STREAM_IDLE>`.
	//
	// This timeout may also be used in place of “flush_timeout“ in very specific cases. See the
	// documentation for “flush_timeout“ for more details.
	IdleTimeout *durationpb.Duration `protobuf:"bytes,24,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
	// Specifies the codec stream flush timeout for the route.
	//
	// If not specified, the first preference is the global :ref:`stream_flush_timeout
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_flush_timeout>`,
	// but only if explicitly configured.
	//
	// If neither the explicit HCM-wide flush timeout nor this route-specific flush timeout is configured,
	// the route's stream idle timeout is reused for this timeout. This is for
	// backwards compatibility since both behaviors were historically controlled by the one timeout.
	//
	// If the route also does not have an idle timeout configured, the global :ref:`stream_idle_timeout
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_idle_timeout>`. used, again
	// for backwards compatibility. That timeout defaults to 5 minutes.
	//
	// A value of 0 via any of the above paths will completely disable the timeout for a given route.
	FlushTimeout *durationpb.Duration `protobuf:"bytes,42,opt,name=flush_timeout,json=flushTimeout,proto3" json:"flush_timeout,omitempty"`
	// Specifies how to send request over TLS early data.
	// If absent, allows `safe HTTP requests <https://www.rfc-editor.org/rfc/rfc7231#section-4.2.1>`_ to be sent on early data.
	// [#extension-category: envoy.route.early_data_policy]
	EarlyDataPolicy *v31.TypedExtensionConfig `protobuf:"bytes,40,opt,name=early_data_policy,json=earlyDataPolicy,proto3" json:"early_data_policy,omitempty"`
	// Indicates that the route has a retry policy. Note that if this is set,
	// it'll take precedence over the virtual host level retry policy entirely
	// (e.g., policies are not merged, the most internal one becomes the enforced policy).
	RetryPolicy *RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"`
	// [#not-implemented-hide:]
	// Specifies the configuration for retry policy extension. Note that if this is set, it'll take
	// precedence over the virtual host level retry policy entirely (e.g., policies are not merged,
	// the most internal one becomes the enforced policy). :ref:`Retry policy <envoy_v3_api_field_config.route.v3.VirtualHost.retry_policy>`
	// should not be set if this field is used.
	RetryPolicyTypedConfig *anypb.Any `protobuf:"bytes,33,opt,name=retry_policy_typed_config,json=retryPolicyTypedConfig,proto3" json:"retry_policy_typed_config,omitempty"`
	// Specify a set of route request mirroring policies.
	// It takes precedence over the virtual host and route config mirror policy entirely.
	// That is, policies are not merged, the most specific non-empty one becomes the mirror policies.
	RequestMirrorPolicies []*RouteAction_RequestMirrorPolicy `protobuf:"bytes,30,rep,name=request_mirror_policies,json=requestMirrorPolicies,proto3" json:"request_mirror_policies,omitempty"`
	// Optionally specifies the :ref:`routing priority <arch_overview_http_routing_priority>`.
	Priority v31.RoutingPriority `protobuf:"varint,11,opt,name=priority,proto3,enum=envoy.config.core.v3.RoutingPriority" json:"priority,omitempty"`
	// Specifies a set of rate limit configurations that could be applied to the
	// route.
	RateLimits []*RateLimit `protobuf:"bytes,13,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
	// Specifies if the rate limit filter should include the virtual host rate
	// limits. By default, if the route configured rate limits, the virtual host
	// :ref:`rate_limits <envoy_v3_api_field_config.route.v3.VirtualHost.rate_limits>` are not applied to the
	// request.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`vh_rate_limits <envoy_v3_api_field_extensions.filters.http.ratelimit.v3.RateLimitPerRoute.vh_rate_limits>`
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	IncludeVhRateLimits *wrapperspb.BoolValue `protobuf:"bytes,14,opt,name=include_vh_rate_limits,json=includeVhRateLimits,proto3" json:"include_vh_rate_limits,omitempty"`
	// Specifies a list of hash policies to use for ring hash load balancing. Each
	// hash policy is evaluated individually and the combined result is used to
	// route the request. The method of combination is deterministic such that
	// identical lists of hash policies will produce the same hash. Since a hash
	// policy examines specific parts of a request, it can fail to produce a hash
	// (i.e. if the hashed header is not present). If (and only if) all configured
	// hash policies fail to generate a hash, no hash will be produced for
	// the route. In this case, the behavior is the same as if no hash policies
	// were specified (i.e. the ring hash load balancer will choose a random
	// backend). If a hash policy has the "terminal" attribute set to true, and
	// there is already a hash generated, the hash is returned immediately,
	// ignoring the rest of the hash policy list.
	HashPolicy []*RouteAction_HashPolicy `protobuf:"bytes,15,rep,name=hash_policy,json=hashPolicy,proto3" json:"hash_policy,omitempty"`
	// Indicates that the route has a CORS policy. This field is ignored if related cors policy is
	// found in the :ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>` or
	// :ref:`WeightedCluster.ClusterWeight.typed_per_filter_config<envoy_v3_api_field_config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config>`.
	//
	// .. attention::
	//
	//	This option has been deprecated. Please use
	//	:ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>` or
	//	:ref:`WeightedCluster.ClusterWeight.typed_per_filter_config<envoy_v3_api_field_config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config>`
	//	to configure the CORS HTTP filter.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	Cors *CorsPolicy `protobuf:"bytes,17,opt,name=cors,proto3" json:"cors,omitempty"`
	// Deprecated by :ref:`grpc_timeout_header_max <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_max>`
	// If present, and the request is a gRPC request, use the
	// `grpc-timeout header <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_,
	// or its default value (infinity) instead of
	// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>`, but limit the applied timeout
	// to the maximum value specified here. If configured as 0, the maximum allowed timeout for
	// gRPC requests is infinity. If not configured at all, the “grpc-timeout“ header is not used
	// and gRPC requests time out like any other requests using
	// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>` or its default.
	// This can be used to prevent unexpected upstream request timeouts due to potentially long
	// time gaps between gRPC request and response in gRPC streaming mode.
	//
	// .. note::
	//
	//	If a timeout is specified using :ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`, it takes
	//	precedence over `grpc-timeout header <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_, when
	//	both are present. See also
	//	:ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`,
	//	:ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`, and the
	//	:ref:`retry overview <arch_overview_http_routing_retry>`.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	MaxGrpcTimeout *durationpb.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3" json:"max_grpc_timeout,omitempty"`
	// Deprecated by :ref:`grpc_timeout_header_offset <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_offset>`.
	// If present, Envoy will adjust the timeout provided by the “grpc-timeout“ header by subtracting
	// the provided duration from the header. This is useful in allowing Envoy to set its global
	// timeout to be less than that of the deadline imposed by the calling client, which makes it more
	// likely that Envoy will handle the timeout instead of having the call canceled by the client.
	// The offset will only be applied if the provided grpc_timeout is greater than the offset. This
	// ensures that the offset will only ever decrease the timeout and never set it to 0 (meaning
	// infinity).
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	GrpcTimeoutOffset *durationpb.Duration         `protobuf:"bytes,28,opt,name=grpc_timeout_offset,json=grpcTimeoutOffset,proto3" json:"grpc_timeout_offset,omitempty"`
	UpgradeConfigs    []*RouteAction_UpgradeConfig `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"`
	// If present, Envoy will try to follow an upstream redirect response instead of proxying the
	// response back to the downstream. An upstream redirect response is defined
	// by :ref:`redirect_response_codes
	// <envoy_v3_api_field_config.route.v3.InternalRedirectPolicy.redirect_response_codes>`.
	InternalRedirectPolicy *InternalRedirectPolicy `protobuf:"bytes,34,opt,name=internal_redirect_policy,json=internalRedirectPolicy,proto3" json:"internal_redirect_policy,omitempty"`
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	InternalRedirectAction RouteAction_InternalRedirectAction `protobuf:"varint,26,opt,name=internal_redirect_action,json=internalRedirectAction,proto3,enum=envoy.config.route.v3.RouteAction_InternalRedirectAction" json:"internal_redirect_action,omitempty"`
	// An internal redirect is handled, iff the number of previous internal redirects that a
	// downstream request has encountered is lower than this value, and
	// :ref:`internal_redirect_action <envoy_v3_api_field_config.route.v3.RouteAction.internal_redirect_action>`
	// is set to :ref:`HANDLE_INTERNAL_REDIRECT
	// <envoy_v3_api_enum_value_config.route.v3.RouteAction.InternalRedirectAction.HANDLE_INTERNAL_REDIRECT>`
	// In the case where a downstream request is bounced among multiple routes by internal redirect,
	// the first route that hits this threshold, or has
	// :ref:`internal_redirect_action <envoy_v3_api_field_config.route.v3.RouteAction.internal_redirect_action>`
	// set to
	// :ref:`PASS_THROUGH_INTERNAL_REDIRECT
	// <envoy_v3_api_enum_value_config.route.v3.RouteAction.InternalRedirectAction.PASS_THROUGH_INTERNAL_REDIRECT>`
	// will pass the redirect back to downstream.
	//
	// If not specified, at most one redirect will be followed.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	MaxInternalRedirects *wrapperspb.UInt32Value `protobuf:"bytes,31,opt,name=max_internal_redirects,json=maxInternalRedirects,proto3" json:"max_internal_redirects,omitempty"`
	// Indicates that the route has a hedge policy. Note that if this is set,
	// it'll take precedence over the virtual host level hedge policy entirely
	// (e.g., policies are not merged, the most internal one becomes the enforced policy).
	HedgePolicy *HedgePolicy `protobuf:"bytes,27,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"`
	// Specifies the maximum stream duration for this route.
	MaxStreamDuration *RouteAction_MaxStreamDuration `protobuf:"bytes,36,opt,name=max_stream_duration,json=maxStreamDuration,proto3" json:"max_stream_duration,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *RouteAction) Reset() {
	*x = RouteAction{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction) ProtoMessage() {}

func (x *RouteAction) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction.ProtoReflect.Descriptor instead.
func (*RouteAction) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8}
}

func (x *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier {
	if x != nil {
		return x.ClusterSpecifier
	}
	return nil
}

func (x *RouteAction) GetCluster() string {
	if x != nil {
		if x, ok := x.ClusterSpecifier.(*RouteAction_Cluster); ok {
			return x.Cluster
		}
	}
	return ""
}

func (x *RouteAction) GetClusterHeader() string {
	if x != nil {
		if x, ok := x.ClusterSpecifier.(*RouteAction_ClusterHeader); ok {
			return x.ClusterHeader
		}
	}
	return ""
}

func (x *RouteAction) GetWeightedClusters() *WeightedCluster {
	if x != nil {
		if x, ok := x.ClusterSpecifier.(*RouteAction_WeightedClusters); ok {
			return x.WeightedClusters
		}
	}
	return nil
}

func (x *RouteAction) GetClusterSpecifierPlugin() string {
	if x != nil {
		if x, ok := x.ClusterSpecifier.(*RouteAction_ClusterSpecifierPlugin); ok {
			return x.ClusterSpecifierPlugin
		}
	}
	return ""
}

func (x *RouteAction) GetInlineClusterSpecifierPlugin() *ClusterSpecifierPlugin {
	if x != nil {
		if x, ok := x.ClusterSpecifier.(*RouteAction_InlineClusterSpecifierPlugin); ok {
			return x.InlineClusterSpecifierPlugin
		}
	}
	return nil
}

func (x *RouteAction) GetClusterNotFoundResponseCode() RouteAction_ClusterNotFoundResponseCode {
	if x != nil {
		return x.ClusterNotFoundResponseCode
	}
	return RouteAction_SERVICE_UNAVAILABLE
}

func (x *RouteAction) GetMetadataMatch() *v31.Metadata {
	if x != nil {
		return x.MetadataMatch
	}
	return nil
}

func (x *RouteAction) GetPrefixRewrite() string {
	if x != nil {
		return x.PrefixRewrite
	}
	return ""
}

func (x *RouteAction) GetRegexRewrite() *v32.RegexMatchAndSubstitute {
	if x != nil {
		return x.RegexRewrite
	}
	return nil
}

func (x *RouteAction) GetPathRewritePolicy() *v31.TypedExtensionConfig {
	if x != nil {
		return x.PathRewritePolicy
	}
	return nil
}

func (x *RouteAction) GetPathRewrite() string {
	if x != nil {
		return x.PathRewrite
	}
	return ""
}

func (x *RouteAction) GetHostRewriteSpecifier() isRouteAction_HostRewriteSpecifier {
	if x != nil {
		return x.HostRewriteSpecifier
	}
	return nil
}

func (x *RouteAction) GetHostRewriteLiteral() string {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*RouteAction_HostRewriteLiteral); ok {
			return x.HostRewriteLiteral
		}
	}
	return ""
}

func (x *RouteAction) GetAutoHostRewrite() *wrapperspb.BoolValue {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*RouteAction_AutoHostRewrite); ok {
			return x.AutoHostRewrite
		}
	}
	return nil
}

func (x *RouteAction) GetHostRewriteHeader() string {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*RouteAction_HostRewriteHeader); ok {
			return x.HostRewriteHeader
		}
	}
	return ""
}

func (x *RouteAction) GetHostRewritePathRegex() *v32.RegexMatchAndSubstitute {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*RouteAction_HostRewritePathRegex); ok {
			return x.HostRewritePathRegex
		}
	}
	return nil
}

func (x *RouteAction) GetHostRewrite() string {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*RouteAction_HostRewrite); ok {
			return x.HostRewrite
		}
	}
	return ""
}

func (x *RouteAction) GetAppendXForwardedHost() bool {
	if x != nil {
		return x.AppendXForwardedHost
	}
	return false
}

func (x *RouteAction) GetTimeout() *durationpb.Duration {
	if x != nil {
		return x.Timeout
	}
	return nil
}

func (x *RouteAction) GetIdleTimeout() *durationpb.Duration {
	if x != nil {
		return x.IdleTimeout
	}
	return nil
}

func (x *RouteAction) GetFlushTimeout() *durationpb.Duration {
	if x != nil {
		return x.FlushTimeout
	}
	return nil
}

func (x *RouteAction) GetEarlyDataPolicy() *v31.TypedExtensionConfig {
	if x != nil {
		return x.EarlyDataPolicy
	}
	return nil
}

func (x *RouteAction) GetRetryPolicy() *RetryPolicy {
	if x != nil {
		return x.RetryPolicy
	}
	return nil
}

func (x *RouteAction) GetRetryPolicyTypedConfig() *anypb.Any {
	if x != nil {
		return x.RetryPolicyTypedConfig
	}
	return nil
}

func (x *RouteAction) GetRequestMirrorPolicies() []*RouteAction_RequestMirrorPolicy {
	if x != nil {
		return x.RequestMirrorPolicies
	}
	return nil
}

func (x *RouteAction) GetPriority() v31.RoutingPriority {
	if x != nil {
		return x.Priority
	}
	return v31.RoutingPriority(0)
}

func (x *RouteAction) GetRateLimits() []*RateLimit {
	if x != nil {
		return x.RateLimits
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetIncludeVhRateLimits() *wrapperspb.BoolValue {
	if x != nil {
		return x.IncludeVhRateLimits
	}
	return nil
}

func (x *RouteAction) GetHashPolicy() []*RouteAction_HashPolicy {
	if x != nil {
		return x.HashPolicy
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetCors() *CorsPolicy {
	if x != nil {
		return x.Cors
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetMaxGrpcTimeout() *durationpb.Duration {
	if x != nil {
		return x.MaxGrpcTimeout
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetGrpcTimeoutOffset() *durationpb.Duration {
	if x != nil {
		return x.GrpcTimeoutOffset
	}
	return nil
}

func (x *RouteAction) GetUpgradeConfigs() []*RouteAction_UpgradeConfig {
	if x != nil {
		return x.UpgradeConfigs
	}
	return nil
}

func (x *RouteAction) GetInternalRedirectPolicy() *InternalRedirectPolicy {
	if x != nil {
		return x.InternalRedirectPolicy
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetInternalRedirectAction() RouteAction_InternalRedirectAction {
	if x != nil {
		return x.InternalRedirectAction
	}
	return RouteAction_PASS_THROUGH_INTERNAL_REDIRECT
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RouteAction) GetMaxInternalRedirects() *wrapperspb.UInt32Value {
	if x != nil {
		return x.MaxInternalRedirects
	}
	return nil
}

func (x *RouteAction) GetHedgePolicy() *HedgePolicy {
	if x != nil {
		return x.HedgePolicy
	}
	return nil
}

func (x *RouteAction) GetMaxStreamDuration() *RouteAction_MaxStreamDuration {
	if x != nil {
		return x.MaxStreamDuration
	}
	return nil
}

type isRouteAction_ClusterSpecifier interface {
	isRouteAction_ClusterSpecifier()
}

type RouteAction_Cluster struct {
	// Indicates the upstream cluster to which the request should be routed
	// to.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"`
}

type RouteAction_ClusterHeader struct {
	// Envoy will determine the cluster to route to by reading the value of the
	// HTTP header named by cluster_header from the request headers. If the
	// header is not found or the referenced cluster does not exist, Envoy will
	// return a 404 response.
	//
	// .. attention::
	//
	//	Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
	//	``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
	//
	// .. note::
	//
	//	If the header appears multiple times only the first value is used.
	ClusterHeader string `protobuf:"bytes,2,opt,name=cluster_header,json=clusterHeader,proto3,oneof"`
}

type RouteAction_WeightedClusters struct {
	// Multiple upstream clusters can be specified for a given route. The
	// request is routed to one of the upstream clusters based on weights
	// assigned to each cluster. See
	// :ref:`traffic splitting <config_http_conn_man_route_table_traffic_splitting_split>`
	// for additional documentation.
	WeightedClusters *WeightedCluster `protobuf:"bytes,3,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"`
}

type RouteAction_ClusterSpecifierPlugin struct {
	// Name of the cluster specifier plugin to use to determine the cluster for requests on this route.
	// The cluster specifier plugin name must be defined in the associated
	// :ref:`cluster specifier plugins <envoy_v3_api_field_config.route.v3.RouteConfiguration.cluster_specifier_plugins>`
	// in the :ref:`name <envoy_v3_api_field_config.core.v3.TypedExtensionConfig.name>` field.
	ClusterSpecifierPlugin string `protobuf:"bytes,37,opt,name=cluster_specifier_plugin,json=clusterSpecifierPlugin,proto3,oneof"`
}

type RouteAction_InlineClusterSpecifierPlugin struct {
	// Custom cluster specifier plugin configuration to use to determine the cluster for requests
	// on this route.
	InlineClusterSpecifierPlugin *ClusterSpecifierPlugin `protobuf:"bytes,39,opt,name=inline_cluster_specifier_plugin,json=inlineClusterSpecifierPlugin,proto3,oneof"`
}

func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_ClusterHeader) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_ClusterSpecifierPlugin) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_InlineClusterSpecifierPlugin) isRouteAction_ClusterSpecifier() {}

type isRouteAction_HostRewriteSpecifier interface {
	isRouteAction_HostRewriteSpecifier()
}

type RouteAction_HostRewriteLiteral struct {
	// Indicates that during forwarding, the host header will be swapped with
	// this value.
	HostRewriteLiteral string `protobuf:"bytes,6,opt,name=host_rewrite_literal,json=hostRewriteLiteral,proto3,oneof"`
}

type RouteAction_AutoHostRewrite struct {
	// Indicates that during forwarding, the host header will be swapped with
	// the hostname of the upstream host chosen by the cluster manager. This
	// option is applicable only when the destination cluster for a route is of
	// type “strict_dns“ or “logical_dns“,
	// or when :ref:`hostname <envoy_v3_api_field_config.endpoint.v3.Endpoint.hostname>`
	// field is not empty. Setting this to true with other cluster types
	// has no effect.
	AutoHostRewrite *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=auto_host_rewrite,json=autoHostRewrite,proto3,oneof"`
}

type RouteAction_HostRewriteHeader struct {
	// Indicates that during forwarding, the host header will be swapped with the content of given
	// downstream or :ref:`custom <config_http_conn_man_headers_custom_request_headers>` header.
	// If header value is empty, host header is left intact.
	//
	// .. attention::
	//
	//	Pay attention to the potential security implications of using this option. Provided header
	//	must come from trusted source.
	//
	// .. note::
	//
	//	If the header appears multiple times only the first value is used.
	HostRewriteHeader string `protobuf:"bytes,29,opt,name=host_rewrite_header,json=hostRewriteHeader,proto3,oneof"`
}

type RouteAction_HostRewritePathRegex struct {
	// Indicates that during forwarding, the host header will be swapped with
	// the result of the regex substitution executed on path value with query and fragment removed.
	// This is useful for transitioning variable content between path segment and subdomain.
	//
	// For example with the following config:
	//
	//	.. code-block:: yaml
	//
	//	  host_rewrite_path_regex:
	//	    pattern:
	//	      google_re2: {}
	//	      regex: "^/(.+)/.+$"
	//	    substitution: \1
	//
	// Would rewrite the host header to “envoyproxy.io“ given the path “/envoyproxy.io/some/path“.
	HostRewritePathRegex *v32.RegexMatchAndSubstitute `protobuf:"bytes,35,opt,name=host_rewrite_path_regex,json=hostRewritePathRegex,proto3,oneof"`
}

type RouteAction_HostRewrite struct {
	// Rewrites the host header with the value of this field. The router filter will
	// place the original host header value before rewriting into the :ref:`x-envoy-original-host
	// <config_http_filters_router_x-envoy-original-host>` header.
	//
	// The :ref:`substitution format specifier <config_access_log_format>` could be applied here.
	// For example, with the following config:
	//
	//	.. code-block:: yaml
	//
	//	  host_rewrite: "prefix-%REQ(custom-host-header-name)%"
	//
	// Would rewrite the host header to “prefix-some_value“ given the header
	// “custom-host-header-name: some_value“. If the header is not present, the host header will
	// be rewritten to an value of “prefix-“.
	//
	// If the final output of the host rewrite is empty, then the update will be ignored and the
	// original host header will be preserved.
	HostRewrite string `protobuf:"bytes,44,opt,name=host_rewrite,json=hostRewrite,proto3,oneof"`
}

func (*RouteAction_HostRewriteLiteral) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_AutoHostRewrite) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_HostRewriteHeader) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_HostRewritePathRegex) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_HostRewrite) isRouteAction_HostRewriteSpecifier() {}

// HTTP retry :ref:`architecture overview <arch_overview_http_routing_retry>`.
// [#next-free-field: 15]
type RetryPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the conditions under which retry takes place. These are the same
	// conditions documented for :ref:`config_http_filters_router_x-envoy-retry-on` and
	// :ref:`config_http_filters_router_x-envoy-retry-grpc-on`.
	RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"`
	// Specifies the allowed number of retries. This parameter is optional and
	// defaults to 1. These are the same conditions documented for
	// :ref:`config_http_filters_router_x-envoy-max-retries`.
	NumRetries *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"`
	// Specifies a non-zero upstream timeout per retry attempt (including the initial attempt). This
	// parameter is optional. The same conditions documented for
	// :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms` apply.
	//
	// .. note::
	//
	//	If left unspecified, Envoy will use the global
	//	:ref:`route timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>` for the request.
	//	Consequently, when using a :ref:`5xx <config_http_filters_router_x-envoy-retry-on>` based
	//	retry policy, a request that times out will not be retried as the total timeout budget
	//	would have been exhausted.
	PerTryTimeout *durationpb.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3" json:"per_try_timeout,omitempty"`
	// Specifies an upstream idle timeout per retry attempt (including the initial attempt). This
	// parameter is optional and if absent there is no per-try idle timeout. The semantics of the per-
	// try idle timeout are similar to the
	// :ref:`route idle timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>` and
	// :ref:`stream idle timeout
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_idle_timeout>`
	// both enforced by the HTTP connection manager. The difference is that this idle timeout
	// is enforced by the router for each individual attempt and thus after all previous filters have
	// run, as opposed to *before* all previous filters run for the other idle timeouts. This timeout
	// is useful in cases in which total request timeout is bounded by a number of retries and a
	// :ref:`per_try_timeout <envoy_v3_api_field_config.route.v3.RetryPolicy.per_try_timeout>`, but
	// there is a desire to ensure each try is making incremental progress. Note also that similar
	// to :ref:`per_try_timeout <envoy_v3_api_field_config.route.v3.RetryPolicy.per_try_timeout>`,
	// this idle timeout does not start until after both the entire request has been received by the
	// router *and* a connection pool connection has been obtained. Unlike
	// :ref:`per_try_timeout <envoy_v3_api_field_config.route.v3.RetryPolicy.per_try_timeout>`,
	// the idle timer continues once the response starts streaming back to the downstream client.
	// This ensures that response data continues to make progress without using one of the HTTP
	// connection manager idle timeouts.
	PerTryIdleTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=per_try_idle_timeout,json=perTryIdleTimeout,proto3" json:"per_try_idle_timeout,omitempty"`
	// Specifies an implementation of a RetryPriority which is used to determine the
	// distribution of load across priorities used for retries. Refer to
	// :ref:`retry plugin configuration <arch_overview_http_retry_plugins>` for more details.
	RetryPriority *RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"`
	// Specifies a collection of RetryHostPredicates that will be consulted when selecting a host
	// for retries. If any of the predicates reject the host, host selection will be reattempted.
	// Refer to :ref:`retry plugin configuration <arch_overview_http_retry_plugins>` for more
	// details.
	RetryHostPredicate []*RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"`
	// Retry options predicates that will be applied prior to retrying a request. These predicates
	// allow customizing request behavior between retries.
	// [#comment: add [#extension-category: envoy.retry_options_predicates] when there are built-in extensions]
	RetryOptionsPredicates []*v31.TypedExtensionConfig `protobuf:"bytes,12,rep,name=retry_options_predicates,json=retryOptionsPredicates,proto3" json:"retry_options_predicates,omitempty"`
	// The maximum number of times host selection will be reattempted before giving up, at which
	// point the host that was last selected will be routed to. If unspecified, this will default to
	// retrying once.
	HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"`
	// HTTP status codes that should trigger a retry in addition to those specified by retry_on.
	RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"`
	// Specifies parameters that control exponential retry back off. This parameter is optional, in which case the
	// default base interval is 25 milliseconds or, if set, the current value of the
	// “upstream.base_retry_backoff_ms“ runtime parameter. The default maximum interval is 10 times
	// the base interval. The documentation for :ref:`config_http_filters_router_x-envoy-max-retries`
	// describes Envoy's back-off algorithm.
	RetryBackOff *RetryPolicy_RetryBackOff `protobuf:"bytes,8,opt,name=retry_back_off,json=retryBackOff,proto3" json:"retry_back_off,omitempty"`
	// Specifies parameters that control a retry back-off strategy that is used
	// when the request is rate limited by the upstream server. The server may
	// return a response header like “Retry-After“ or “X-RateLimit-Reset“ to
	// provide feedback to the client on how long to wait before retrying. If
	// configured, this back-off strategy will be used instead of the
	// default exponential back off strategy (configured using “retry_back_off“)
	// whenever a response includes the matching headers.
	RateLimitedRetryBackOff *RetryPolicy_RateLimitedRetryBackOff `protobuf:"bytes,11,opt,name=rate_limited_retry_back_off,json=rateLimitedRetryBackOff,proto3" json:"rate_limited_retry_back_off,omitempty"`
	// HTTP response headers that trigger a retry if present in the response. A retry will be
	// triggered if any of the header matches match the upstream response headers.
	// The field is only consulted if 'retriable-headers' retry policy is active.
	RetriableHeaders []*HeaderMatcher `protobuf:"bytes,9,rep,name=retriable_headers,json=retriableHeaders,proto3" json:"retriable_headers,omitempty"`
	// HTTP headers which must be present in the request for retries to be attempted.
	RetriableRequestHeaders []*HeaderMatcher `protobuf:"bytes,10,rep,name=retriable_request_headers,json=retriableRequestHeaders,proto3" json:"retriable_request_headers,omitempty"`
	// By default, the target upstream cluster of a retry request is the same as the original request,
	// and Envoy will not try to refresh it when retrying.
	// If this field is set to true, Envoy will try to refresh the target upstream cluster when
	// retrying a request. This is useful when users want to try different upstream cluster for
	// each retry attempt.
	//
	// .. note::
	//
	//	This currently works when the route cluster specifier support the dynamic refresh,
	//	e.g. :ref:`matcher cluster specifier
	//	<envoy_v3_api_msg_extensions.router.cluster_specifiers.matcher.v3.MatcherClusterSpecifier>`.
	RefreshClusterOnRetry bool `protobuf:"varint,14,opt,name=refresh_cluster_on_retry,json=refreshClusterOnRetry,proto3" json:"refresh_cluster_on_retry,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

func (x *RetryPolicy) Reset() {
	*x = RetryPolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy) ProtoMessage() {}

func (x *RetryPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy.ProtoReflect.Descriptor instead.
func (*RetryPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9}
}

func (x *RetryPolicy) GetRetryOn() string {
	if x != nil {
		return x.RetryOn
	}
	return ""
}

func (x *RetryPolicy) GetNumRetries() *wrapperspb.UInt32Value {
	if x != nil {
		return x.NumRetries
	}
	return nil
}

func (x *RetryPolicy) GetPerTryTimeout() *durationpb.Duration {
	if x != nil {
		return x.PerTryTimeout
	}
	return nil
}

func (x *RetryPolicy) GetPerTryIdleTimeout() *durationpb.Duration {
	if x != nil {
		return x.PerTryIdleTimeout
	}
	return nil
}

func (x *RetryPolicy) GetRetryPriority() *RetryPolicy_RetryPriority {
	if x != nil {
		return x.RetryPriority
	}
	return nil
}

func (x *RetryPolicy) GetRetryHostPredicate() []*RetryPolicy_RetryHostPredicate {
	if x != nil {
		return x.RetryHostPredicate
	}
	return nil
}

func (x *RetryPolicy) GetRetryOptionsPredicates() []*v31.TypedExtensionConfig {
	if x != nil {
		return x.RetryOptionsPredicates
	}
	return nil
}

func (x *RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 {
	if x != nil {
		return x.HostSelectionRetryMaxAttempts
	}
	return 0
}

func (x *RetryPolicy) GetRetriableStatusCodes() []uint32 {
	if x != nil {
		return x.RetriableStatusCodes
	}
	return nil
}

func (x *RetryPolicy) GetRetryBackOff() *RetryPolicy_RetryBackOff {
	if x != nil {
		return x.RetryBackOff
	}
	return nil
}

func (x *RetryPolicy) GetRateLimitedRetryBackOff() *RetryPolicy_RateLimitedRetryBackOff {
	if x != nil {
		return x.RateLimitedRetryBackOff
	}
	return nil
}

func (x *RetryPolicy) GetRetriableHeaders() []*HeaderMatcher {
	if x != nil {
		return x.RetriableHeaders
	}
	return nil
}

func (x *RetryPolicy) GetRetriableRequestHeaders() []*HeaderMatcher {
	if x != nil {
		return x.RetriableRequestHeaders
	}
	return nil
}

func (x *RetryPolicy) GetRefreshClusterOnRetry() bool {
	if x != nil {
		return x.RefreshClusterOnRetry
	}
	return false
}

// HTTP request hedging :ref:`architecture overview <arch_overview_http_routing_hedging>`.
type HedgePolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the number of initial requests that should be sent upstream.
	// Must be at least 1.
	//
	// Defaults to 1.
	// [#not-implemented-hide:]
	InitialRequests *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=initial_requests,json=initialRequests,proto3" json:"initial_requests,omitempty"`
	// Specifies a probability that an additional upstream request should be sent
	// on top of what is specified by initial_requests.
	//
	// Defaults to 0.
	// [#not-implemented-hide:]
	AdditionalRequestChance *v33.FractionalPercent `protobuf:"bytes,2,opt,name=additional_request_chance,json=additionalRequestChance,proto3" json:"additional_request_chance,omitempty"`
	// Indicates that a hedged request should be sent when the per-try timeout is hit.
	// This means that a retry will be issued without resetting the original request, leaving multiple upstream requests in flight.
	// The first request to complete successfully will be the one returned to the caller.
	//
	//   - At any time, a successful response (i.e. not triggering any of the retry-on conditions) would be returned to the client.
	//   - Before per-try timeout, an error response (per retry-on conditions) would be retried immediately or returned to the client
	//     if there are no more retries left.
	//   - After per-try timeout, an error response would be discarded, as a retry in the form of a hedged request is already in progress.
	//
	// .. note::
	//
	//	For this to have effect, you must have a :ref:`RetryPolicy <envoy_v3_api_msg_config.route.v3.RetryPolicy>` that retries at least
	//	one error code and specifies a maximum number of retries.
	//
	// Defaults to “false“.
	HedgeOnPerTryTimeout bool `protobuf:"varint,3,opt,name=hedge_on_per_try_timeout,json=hedgeOnPerTryTimeout,proto3" json:"hedge_on_per_try_timeout,omitempty"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *HedgePolicy) Reset() {
	*x = HedgePolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *HedgePolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HedgePolicy) ProtoMessage() {}

func (x *HedgePolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HedgePolicy.ProtoReflect.Descriptor instead.
func (*HedgePolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{10}
}

func (x *HedgePolicy) GetInitialRequests() *wrapperspb.UInt32Value {
	if x != nil {
		return x.InitialRequests
	}
	return nil
}

func (x *HedgePolicy) GetAdditionalRequestChance() *v33.FractionalPercent {
	if x != nil {
		return x.AdditionalRequestChance
	}
	return nil
}

func (x *HedgePolicy) GetHedgeOnPerTryTimeout() bool {
	if x != nil {
		return x.HedgeOnPerTryTimeout
	}
	return false
}

// [#next-free-field: 11]
type RedirectAction struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// When the scheme redirection take place, the following rules apply:
	//  1. If the source URI scheme is “http“ and the port is explicitly
	//     set to “:80“, the port will be removed after the redirection
	//  2. If the source URI scheme is “https“ and the port is explicitly
	//     set to “:443“, the port will be removed after the redirection
	//
	// Types that are valid to be assigned to SchemeRewriteSpecifier:
	//
	//	*RedirectAction_HttpsRedirect
	//	*RedirectAction_SchemeRedirect
	SchemeRewriteSpecifier isRedirectAction_SchemeRewriteSpecifier `protobuf_oneof:"scheme_rewrite_specifier"`
	// The host portion of the URL will be swapped with this value.
	HostRedirect string `protobuf:"bytes,1,opt,name=host_redirect,json=hostRedirect,proto3" json:"host_redirect,omitempty"`
	// The port value of the URL will be swapped with this value.
	PortRedirect uint32 `protobuf:"varint,8,opt,name=port_redirect,json=portRedirect,proto3" json:"port_redirect,omitempty"`
	// Types that are valid to be assigned to PathRewriteSpecifier:
	//
	//	*RedirectAction_PathRedirect
	//	*RedirectAction_PrefixRewrite
	//	*RedirectAction_RegexRewrite
	//	*RedirectAction_PathRewrite
	PathRewriteSpecifier isRedirectAction_PathRewriteSpecifier `protobuf_oneof:"path_rewrite_specifier"`
	// The HTTP status code to use in the redirect response. The default response
	// code is MOVED_PERMANENTLY (301).
	ResponseCode RedirectAction_RedirectResponseCode `protobuf:"varint,3,opt,name=response_code,json=responseCode,proto3,enum=envoy.config.route.v3.RedirectAction_RedirectResponseCode" json:"response_code,omitempty"`
	// Indicates that during redirection, the query portion of the URL will
	// be removed. Default value is false.
	StripQuery    bool `protobuf:"varint,6,opt,name=strip_query,json=stripQuery,proto3" json:"strip_query,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RedirectAction) Reset() {
	*x = RedirectAction{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RedirectAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RedirectAction) ProtoMessage() {}

func (x *RedirectAction) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RedirectAction.ProtoReflect.Descriptor instead.
func (*RedirectAction) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{11}
}

func (x *RedirectAction) GetSchemeRewriteSpecifier() isRedirectAction_SchemeRewriteSpecifier {
	if x != nil {
		return x.SchemeRewriteSpecifier
	}
	return nil
}

func (x *RedirectAction) GetHttpsRedirect() bool {
	if x != nil {
		if x, ok := x.SchemeRewriteSpecifier.(*RedirectAction_HttpsRedirect); ok {
			return x.HttpsRedirect
		}
	}
	return false
}

func (x *RedirectAction) GetSchemeRedirect() string {
	if x != nil {
		if x, ok := x.SchemeRewriteSpecifier.(*RedirectAction_SchemeRedirect); ok {
			return x.SchemeRedirect
		}
	}
	return ""
}

func (x *RedirectAction) GetHostRedirect() string {
	if x != nil {
		return x.HostRedirect
	}
	return ""
}

func (x *RedirectAction) GetPortRedirect() uint32 {
	if x != nil {
		return x.PortRedirect
	}
	return 0
}

func (x *RedirectAction) GetPathRewriteSpecifier() isRedirectAction_PathRewriteSpecifier {
	if x != nil {
		return x.PathRewriteSpecifier
	}
	return nil
}

func (x *RedirectAction) GetPathRedirect() string {
	if x != nil {
		if x, ok := x.PathRewriteSpecifier.(*RedirectAction_PathRedirect); ok {
			return x.PathRedirect
		}
	}
	return ""
}

func (x *RedirectAction) GetPrefixRewrite() string {
	if x != nil {
		if x, ok := x.PathRewriteSpecifier.(*RedirectAction_PrefixRewrite); ok {
			return x.PrefixRewrite
		}
	}
	return ""
}

func (x *RedirectAction) GetRegexRewrite() *v32.RegexMatchAndSubstitute {
	if x != nil {
		if x, ok := x.PathRewriteSpecifier.(*RedirectAction_RegexRewrite); ok {
			return x.RegexRewrite
		}
	}
	return nil
}

func (x *RedirectAction) GetPathRewrite() string {
	if x != nil {
		if x, ok := x.PathRewriteSpecifier.(*RedirectAction_PathRewrite); ok {
			return x.PathRewrite
		}
	}
	return ""
}

func (x *RedirectAction) GetResponseCode() RedirectAction_RedirectResponseCode {
	if x != nil {
		return x.ResponseCode
	}
	return RedirectAction_MOVED_PERMANENTLY
}

func (x *RedirectAction) GetStripQuery() bool {
	if x != nil {
		return x.StripQuery
	}
	return false
}

type isRedirectAction_SchemeRewriteSpecifier interface {
	isRedirectAction_SchemeRewriteSpecifier()
}

type RedirectAction_HttpsRedirect struct {
	// The scheme portion of the URL will be swapped with "https".
	HttpsRedirect bool `protobuf:"varint,4,opt,name=https_redirect,json=httpsRedirect,proto3,oneof"`
}

type RedirectAction_SchemeRedirect struct {
	// The scheme portion of the URL will be swapped with this value.
	SchemeRedirect string `protobuf:"bytes,7,opt,name=scheme_redirect,json=schemeRedirect,proto3,oneof"`
}

func (*RedirectAction_HttpsRedirect) isRedirectAction_SchemeRewriteSpecifier() {}

func (*RedirectAction_SchemeRedirect) isRedirectAction_SchemeRewriteSpecifier() {}

type isRedirectAction_PathRewriteSpecifier interface {
	isRedirectAction_PathRewriteSpecifier()
}

type RedirectAction_PathRedirect struct {
	// The path portion of the URL will be swapped with this value.
	// Please note that query string in path_redirect will override the
	// request's query string and will not be stripped.
	//
	// For example, let's say we have the following routes:
	//
	//   - match: { path: "/old-path-1" }
	//     redirect: { path_redirect: "/new-path-1" }
	//   - match: { path: "/old-path-2" }
	//     redirect: { path_redirect: "/new-path-2", strip-query: "true" }
	//   - match: { path: "/old-path-3" }
	//     redirect: { path_redirect: "/new-path-3?foo=1", strip_query: "true" }
	//
	// 1. if request uri is "/old-path-1?bar=1", users will be redirected to "/new-path-1?bar=1"
	// 2. if request uri is "/old-path-2?bar=1", users will be redirected to "/new-path-2"
	// 3. if request uri is "/old-path-3?bar=1", users will be redirected to "/new-path-3?foo=1"
	PathRedirect string `protobuf:"bytes,2,opt,name=path_redirect,json=pathRedirect,proto3,oneof"`
}

type RedirectAction_PrefixRewrite struct {
	// Indicates that during redirection, the matched prefix (or path)
	// should be swapped with this value. This option allows redirect URLs be dynamically created
	// based on the request.
	//
	// .. attention::
	//
	//	Pay attention to the use of trailing slashes as mentioned in
	//	:ref:`RouteAction's prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`.
	PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3,oneof"`
}

type RedirectAction_RegexRewrite struct {
	// Indicates that during redirect, portions of the path that match the
	// pattern should be rewritten, even allowing the substitution of capture
	// groups from the pattern into the new path as specified by the rewrite
	// substitution string. This is useful to allow application paths to be
	// rewritten in a way that is aware of segments with variable content like
	// identifiers.
	//
	// Examples using Google's `RE2 <https://github.com/google/re2>`_ engine:
	//
	//   - The path pattern “^/service/([^/]+)(/.*)$“ paired with a substitution
	//     string of “\2/instance/\1“ would transform “/service/foo/v1/api“
	//     into “/v1/api/instance/foo“.
	//
	//   - The pattern “one“ paired with a substitution string of “two“ would
	//     transform “/xxx/one/yyy/one/zzz“ into “/xxx/two/yyy/two/zzz“.
	//
	//   - The pattern “^(.*?)one(.*)$“ paired with a substitution string of
	//     “\1two\2“ would replace only the first occurrence of “one“,
	//     transforming path “/xxx/one/yyy/one/zzz“ into “/xxx/two/yyy/one/zzz“.
	//
	//   - The pattern “(?i)/xxx/“ paired with a substitution string of “/yyy/“
	//     would do a case-insensitive match and transform path “/aaa/XxX/bbb“ to
	//     “/aaa/yyy/bbb“.
	RegexRewrite *v32.RegexMatchAndSubstitute `protobuf:"bytes,9,opt,name=regex_rewrite,json=regexRewrite,proto3,oneof"`
}

type RedirectAction_PathRewrite struct {
	// The path portion of the URL will be set to this value and supports
	// :ref:`substitution format specifiers <config_access_log_format>` and CEL
	// expressions.
	//
	// For example, with the following config:
	//
	// .. code-block:: yaml
	//
	//	path_rewrite: "/new/%REQ(x-version)%"
	//
	// Would redirect to “/new/v2“ given a request header “x-version: v2“.
	// If the substitution produces an empty string the path redirect is ignored
	// and the original path is preserved.
	PathRewrite string `protobuf:"bytes,10,opt,name=path_rewrite,json=pathRewrite,proto3,oneof"`
}

func (*RedirectAction_PathRedirect) isRedirectAction_PathRewriteSpecifier() {}

func (*RedirectAction_PrefixRewrite) isRedirectAction_PathRewriteSpecifier() {}

func (*RedirectAction_RegexRewrite) isRedirectAction_PathRewriteSpecifier() {}

func (*RedirectAction_PathRewrite) isRedirectAction_PathRewriteSpecifier() {}

type DirectResponseAction struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the HTTP response status to be returned.
	Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
	// Specifies the content of the response body. If this setting is omitted,
	// no body is included in the generated response.
	//
	// .. note::
	//
	//	Headers can be specified using ``response_headers_to_add`` in the enclosing
	//	:ref:`envoy_v3_api_msg_config.route.v3.Route`, :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration` or
	//	:ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.
	Body *v31.DataSource `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"`
	// Specifies a format string for the response body. If present, the contents of
	// “body_format“ will be formatted and used as the response body, where the
	// contents of “body“ (may be empty) will be passed as the variable “%LOCAL_REPLY_BODY%“.
	// If neither are provided, no body is included in the generated response.
	BodyFormat    *v31.SubstitutionFormatString `protobuf:"bytes,3,opt,name=body_format,json=bodyFormat,proto3" json:"body_format,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DirectResponseAction) Reset() {
	*x = DirectResponseAction{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DirectResponseAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DirectResponseAction) ProtoMessage() {}

func (x *DirectResponseAction) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DirectResponseAction.ProtoReflect.Descriptor instead.
func (*DirectResponseAction) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{12}
}

func (x *DirectResponseAction) GetStatus() uint32 {
	if x != nil {
		return x.Status
	}
	return 0
}

func (x *DirectResponseAction) GetBody() *v31.DataSource {
	if x != nil {
		return x.Body
	}
	return nil
}

func (x *DirectResponseAction) GetBodyFormat() *v31.SubstitutionFormatString {
	if x != nil {
		return x.BodyFormat
	}
	return nil
}

// [#not-implemented-hide:]
type NonForwardingAction struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *NonForwardingAction) Reset() {
	*x = NonForwardingAction{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *NonForwardingAction) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*NonForwardingAction) ProtoMessage() {}

func (x *NonForwardingAction) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use NonForwardingAction.ProtoReflect.Descriptor instead.
func (*NonForwardingAction) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{13}
}

type Decorator struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The operation name associated with the request matched to this route. If tracing is
	// enabled, this information will be used as the span name reported for this request.
	//
	// .. note::
	//
	//	For ingress (inbound) requests, or egress (outbound) responses, this value may be overridden
	//	by the :ref:`x-envoy-decorator-operation
	//	<config_http_filters_router_x-envoy-decorator-operation>` header.
	Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"`
	// Whether the decorated details should be propagated to the other party. The default is “true“.
	Propagate     *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=propagate,proto3" json:"propagate,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Decorator) Reset() {
	*x = Decorator{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Decorator) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Decorator) ProtoMessage() {}

func (x *Decorator) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Decorator.ProtoReflect.Descriptor instead.
func (*Decorator) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{14}
}

func (x *Decorator) GetOperation() string {
	if x != nil {
		return x.Operation
	}
	return ""
}

func (x *Decorator) GetPropagate() *wrapperspb.BoolValue {
	if x != nil {
		return x.Propagate
	}
	return nil
}

// [#next-free-field: 7]
type Tracing struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Target percentage of requests managed by this HTTP connection manager that will be force
	// traced if the :ref:`x-client-trace-id <config_http_conn_man_headers_x-client-trace-id>`
	// header is set. This field is a direct analog for the runtime variable
	// 'tracing.client_enabled' in the :ref:`HTTP Connection Manager
	// <config_http_conn_man_runtime>`.
	// Default: 100%
	ClientSampling *v33.FractionalPercent `protobuf:"bytes,1,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be randomly
	// selected for trace generation, if not requested by the client or not forced. This field is
	// a direct analog for the runtime variable 'tracing.random_sampling' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	RandomSampling *v33.FractionalPercent `protobuf:"bytes,2,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be traced
	// after all other sampling checks have been applied (client-directed, force tracing, random
	// sampling). This field functions as an upper limit on the total configured sampling rate. For
	// instance, setting client_sampling to 100% but overall_sampling to 1% will result in only 1%
	// of client requests with the appropriate headers to be force traced. This field is a direct
	// analog for the runtime variable 'tracing.global_enabled' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	OverallSampling *v33.FractionalPercent `protobuf:"bytes,3,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"`
	// A list of custom tags with unique tag name to create tags for the active span.
	// It will take effect after merging with the :ref:`corresponding configuration
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.custom_tags>`
	// configured in the HTTP connection manager. If two tags with the same name are configured
	// each in the HTTP connection manager and the route level, the one configured here takes
	// priority.
	CustomTags []*v34.CustomTag `protobuf:"bytes,4,rep,name=custom_tags,json=customTags,proto3" json:"custom_tags,omitempty"`
	// The operation name of the span which will be used for tracing.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// This field will take precedence over and make following settings ineffective:
	//
	//   - :ref:`route decorator <envoy_v3_api_field_config.route.v3.Route.decorator>`.
	//   - :ref:`x-envoy-decorator-operation <config_http_filters_router_x-envoy-decorator-operation>`.
	//   - :ref:`HCM tracing operation
	//     <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.operation>`.
	Operation string `protobuf:"bytes,5,opt,name=operation,proto3" json:"operation,omitempty"`
	// The operation name of the upstream span which will be used for tracing.
	// This only takes effect when “spawn_upstream_span“ is set to true and the upstream
	// span is created.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// This field will take precedence over and make following settings ineffective:
	//
	//   - :ref:`HCM tracing upstream operation
	//     <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.upstream_operation>`
	UpstreamOperation string `protobuf:"bytes,6,opt,name=upstream_operation,json=upstreamOperation,proto3" json:"upstream_operation,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *Tracing) Reset() {
	*x = Tracing{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[15]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Tracing) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Tracing) ProtoMessage() {}

func (x *Tracing) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[15]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Tracing.ProtoReflect.Descriptor instead.
func (*Tracing) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{15}
}

func (x *Tracing) GetClientSampling() *v33.FractionalPercent {
	if x != nil {
		return x.ClientSampling
	}
	return nil
}

func (x *Tracing) GetRandomSampling() *v33.FractionalPercent {
	if x != nil {
		return x.RandomSampling
	}
	return nil
}

func (x *Tracing) GetOverallSampling() *v33.FractionalPercent {
	if x != nil {
		return x.OverallSampling
	}
	return nil
}

func (x *Tracing) GetCustomTags() []*v34.CustomTag {
	if x != nil {
		return x.CustomTags
	}
	return nil
}

func (x *Tracing) GetOperation() string {
	if x != nil {
		return x.Operation
	}
	return ""
}

func (x *Tracing) GetUpstreamOperation() string {
	if x != nil {
		return x.UpstreamOperation
	}
	return ""
}

// A virtual cluster is a way of specifying a regex matching rule against
// certain important endpoints such that statistics are generated explicitly for
// the matched requests. The reason this is useful is that when doing
// prefix/path matching Envoy does not always know what the application
// considers to be an endpoint. Thus, it’s impossible for Envoy to generically
// emit per endpoint statistics. However, often systems have highly critical
// endpoints that they wish to get “perfect” statistics on. Virtual cluster
// statistics are perfect in the sense that they are emitted on the downstream
// side such that they include network level failures.
//
// Documentation for :ref:`virtual cluster statistics <config_http_filters_router_vcluster_stats>`.
//
// .. note::
//
//	Virtual clusters are a useful tool, but we do not recommend setting up a virtual cluster for
//	every application endpoint. This is both not easily maintainable and as well the matching and
//	statistics output are not free.
type VirtualCluster struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies a list of header matchers to use for matching requests. Each specified header must
	// match. The pseudo-headers “:path“ and “:method“ can be used to match the request path and
	// method, respectively.
	Headers []*HeaderMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"`
	// Specifies the name of the virtual cluster. The virtual cluster name as well
	// as the virtual host name are used when emitting statistics. The statistics are emitted by the
	// router filter and are documented :ref:`here <config_http_filters_router_stats>`.
	Name          string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *VirtualCluster) Reset() {
	*x = VirtualCluster{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *VirtualCluster) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VirtualCluster) ProtoMessage() {}

func (x *VirtualCluster) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[16]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VirtualCluster.ProtoReflect.Descriptor instead.
func (*VirtualCluster) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{16}
}

func (x *VirtualCluster) GetHeaders() []*HeaderMatcher {
	if x != nil {
		return x.Headers
	}
	return nil
}

func (x *VirtualCluster) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

// Global rate limiting :ref:`architecture overview <arch_overview_global_rate_limit>`.
// Also applies to Local rate limiting :ref:`using descriptors <config_http_filters_local_rate_limit_descriptors>`.
// [#next-free-field: 8]
type RateLimit struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Refers to the stage set in the filter. The rate limit configuration only
	// applies to filters with the same stage number. The default stage number is
	// 0.
	//
	// .. note::
	//
	//	The filter supports a range of 0 - 10 inclusively for stage numbers.
	//
	// .. note::
	//
	//	This is not supported if the rate limit action is configured in the ``typed_per_filter_config`` like
	//	:ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>` or
	//	:ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>`, etc.
	Stage *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"`
	// The key to be set in runtime to disable this rate limit configuration.
	//
	// .. note::
	//
	//	This is not supported if the rate limit action is configured in the ``typed_per_filter_config`` like
	//	:ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>` or
	//	:ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>`, etc.
	DisableKey string `protobuf:"bytes,2,opt,name=disable_key,json=disableKey,proto3" json:"disable_key,omitempty"`
	// A list of actions that are to be applied for this rate limit configuration.
	// Order matters as the actions are processed sequentially and the descriptor
	// is composed by appending descriptor entries in that sequence. If an action
	// cannot append a descriptor entry, no descriptor is generated for the
	// configuration. See :ref:`composing actions
	// <config_http_filters_rate_limit_composing_actions>` for additional documentation.
	Actions []*RateLimit_Action `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"`
	// An optional limit override to be appended to the descriptor produced by this
	// rate limit configuration. If the override value is invalid or cannot be resolved
	// from metadata, no override is provided. See :ref:`rate limit override
	// <config_http_filters_rate_limit_rate_limit_override>` for more information.
	//
	// .. note::
	//
	//	For the global HTTP :ref:`rate limit filter
	//	<config_http_filters_rate_limit>`, this is supported both at the route/virtual host
	//	level and when the rate limit configuration is supplied via the filter's
	//	``rate_limits`` field or the ``typed_per_filter_config``
	//	(:ref:`RateLimitPerRoute <envoy_v3_api_msg_extensions.filters.http.ratelimit.v3.RateLimitPerRoute>`).
	//	This is not supported by the :ref:`local rate limit filter
	//	<config_http_filters_local_rate_limit>`.
	Limit *RateLimit_Override `protobuf:"bytes,4,opt,name=limit,proto3" json:"limit,omitempty"`
	// An optional hits addend to be appended to the descriptor produced by this rate limit
	// configuration.
	//
	// .. note::
	//
	//	This is only supported if the rate limit action is configured in the ``typed_per_filter_config`` like
	//	:ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>` or
	//	:ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>`, etc.
	HitsAddend *RateLimit_HitsAddend `protobuf:"bytes,5,opt,name=hits_addend,json=hitsAddend,proto3" json:"hits_addend,omitempty"`
	// If true, the rate limit request will be applied when the stream completes. The default value is false.
	// This is useful when the rate limit budget needs to reflect the response context that is not available
	// on the request path.
	//
	// For example, let's say the upstream service calculates the usage statistics and returns them in the response body
	// and we want to utilize these numbers to apply the rate limit action for the subsequent requests.
	// Combined with another filter that can set the desired addend based on the response (e.g. Lua filter),
	// this can be used to subtract the usage statistics from the rate limit budget.
	//
	// A rate limit applied on the stream completion is "fire-and-forget" by nature, and rate limit is not enforced by this config.
	// In other words, the current request won't be blocked when this is true, but the budget will be updated for the subsequent
	// requests based on the action with this field set to true. Users should ensure that the rate limit is enforced by the actions
	// applied on the request path, i.e. the ones with this field set to false.
	//
	// Currently, this is only supported by the HTTP global rate filter.
	ApplyOnStreamDone bool `protobuf:"varint,6,opt,name=apply_on_stream_done,json=applyOnStreamDone,proto3" json:"apply_on_stream_done,omitempty"`
	// Descriptor level X-RateLimit headers options which may override the filter level setting.
	XRatelimitOption RateLimit_XRateLimitOption `protobuf:"varint,7,opt,name=x_ratelimit_option,json=xRatelimitOption,proto3,enum=envoy.config.route.v3.RateLimit_XRateLimitOption" json:"x_ratelimit_option,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *RateLimit) Reset() {
	*x = RateLimit{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit) ProtoMessage() {}

func (x *RateLimit) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[17]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit.ProtoReflect.Descriptor instead.
func (*RateLimit) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17}
}

func (x *RateLimit) GetStage() *wrapperspb.UInt32Value {
	if x != nil {
		return x.Stage
	}
	return nil
}

func (x *RateLimit) GetDisableKey() string {
	if x != nil {
		return x.DisableKey
	}
	return ""
}

func (x *RateLimit) GetActions() []*RateLimit_Action {
	if x != nil {
		return x.Actions
	}
	return nil
}

func (x *RateLimit) GetLimit() *RateLimit_Override {
	if x != nil {
		return x.Limit
	}
	return nil
}

func (x *RateLimit) GetHitsAddend() *RateLimit_HitsAddend {
	if x != nil {
		return x.HitsAddend
	}
	return nil
}

func (x *RateLimit) GetApplyOnStreamDone() bool {
	if x != nil {
		return x.ApplyOnStreamDone
	}
	return false
}

func (x *RateLimit) GetXRatelimitOption() RateLimit_XRateLimitOption {
	if x != nil {
		return x.XRatelimitOption
	}
	return RateLimit_UNSPECIFIED
}

// .. attention::
//
//	Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1 ``Host``
//	header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
//
// .. attention::
//
//	To route on HTTP method, use the special HTTP/2 ``:method`` header. This works for both
//	HTTP/1 and HTTP/2 as Envoy normalizes headers. E.g.,
//
//	.. code-block:: json
//
//	  {
//	    "name": ":method",
//	    "string_match": {
//	      "exact": "POST"
//	    }
//	  }
//
// .. attention::
//
//	 In the absence of any header match specifier, match will default to :ref:`present_match
//	 <envoy_v3_api_field_config.route.v3.HeaderMatcher.present_match>`. i.e, a request that has the :ref:`name
//	 <envoy_v3_api_field_config.route.v3.HeaderMatcher.name>` header will match, regardless of the header's
//	 value.
//
//	[#next-major-version: HeaderMatcher should be refactored to use StringMatcher.]
//
// [#next-free-field: 15]
type HeaderMatcher struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the name of the header in the request.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Specifies how the header match will be performed to route the request.
	//
	// Types that are valid to be assigned to HeaderMatchSpecifier:
	//
	//	*HeaderMatcher_ExactMatch
	//	*HeaderMatcher_SafeRegexMatch
	//	*HeaderMatcher_RangeMatch
	//	*HeaderMatcher_PresentMatch
	//	*HeaderMatcher_PrefixMatch
	//	*HeaderMatcher_SuffixMatch
	//	*HeaderMatcher_ContainsMatch
	//	*HeaderMatcher_StringMatch
	HeaderMatchSpecifier isHeaderMatcher_HeaderMatchSpecifier `protobuf_oneof:"header_match_specifier"`
	// If specified, the match result will be inverted before checking.
	//
	// Defaults to “false“.
	//
	// Examples:
	//
	// * The regex “\d{3}“ does not match the value “1234“, so it will match when inverted.
	// * The range [-10,0) will match the value -1, so it will not match when inverted.
	InvertMatch bool `protobuf:"varint,8,opt,name=invert_match,json=invertMatch,proto3" json:"invert_match,omitempty"`
	// If specified, for any header match rule, if the header match rule specified header
	// does not exist, this header value will be treated as empty.
	//
	// Defaults to “false“.
	//
	// Examples:
	//
	//   - The header match rule specified header "header1" to range match of [0, 10],
	//     :ref:`invert_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.invert_match>`
	//     is set to true and :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
	//     is set to true; The "header1" header is not present. The match rule will
	//     treat the "header1" as an empty header. The empty header does not match the range,
	//     so it will match when inverted.
	//   - The header match rule specified header "header2" to range match of [0, 10],
	//     :ref:`invert_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.invert_match>`
	//     is set to true and :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
	//     is set to false; The "header2" header is not present and the header
	//     matcher rule for "header2" will be ignored so it will not match.
	//   - The header match rule specified header "header3" to a string regex match
	//     “^$“ which means an empty string, and
	//     :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
	//     is set to true; The "header3" header is not present.
	//     The match rule will treat the "header3" header as an empty header so it will match.
	//   - The header match rule specified header "header4" to a string regex match
	//     “^$“ which means an empty string, and
	//     :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
	//     is set to false; The "header4" header is not present.
	//     The match rule for "header4" will be ignored so it will not match.
	TreatMissingHeaderAsEmpty bool `protobuf:"varint,14,opt,name=treat_missing_header_as_empty,json=treatMissingHeaderAsEmpty,proto3" json:"treat_missing_header_as_empty,omitempty"`
	unknownFields             protoimpl.UnknownFields
	sizeCache                 protoimpl.SizeCache
}

func (x *HeaderMatcher) Reset() {
	*x = HeaderMatcher{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *HeaderMatcher) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HeaderMatcher) ProtoMessage() {}

func (x *HeaderMatcher) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[18]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HeaderMatcher.ProtoReflect.Descriptor instead.
func (*HeaderMatcher) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{18}
}

func (x *HeaderMatcher) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *HeaderMatcher) GetHeaderMatchSpecifier() isHeaderMatcher_HeaderMatchSpecifier {
	if x != nil {
		return x.HeaderMatchSpecifier
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *HeaderMatcher) GetExactMatch() string {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_ExactMatch); ok {
			return x.ExactMatch
		}
	}
	return ""
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *HeaderMatcher) GetSafeRegexMatch() *v32.RegexMatcher {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_SafeRegexMatch); ok {
			return x.SafeRegexMatch
		}
	}
	return nil
}

func (x *HeaderMatcher) GetRangeMatch() *v33.Int64Range {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_RangeMatch); ok {
			return x.RangeMatch
		}
	}
	return nil
}

func (x *HeaderMatcher) GetPresentMatch() bool {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_PresentMatch); ok {
			return x.PresentMatch
		}
	}
	return false
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *HeaderMatcher) GetPrefixMatch() string {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_PrefixMatch); ok {
			return x.PrefixMatch
		}
	}
	return ""
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *HeaderMatcher) GetSuffixMatch() string {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_SuffixMatch); ok {
			return x.SuffixMatch
		}
	}
	return ""
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *HeaderMatcher) GetContainsMatch() string {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_ContainsMatch); ok {
			return x.ContainsMatch
		}
	}
	return ""
}

func (x *HeaderMatcher) GetStringMatch() *v32.StringMatcher {
	if x != nil {
		if x, ok := x.HeaderMatchSpecifier.(*HeaderMatcher_StringMatch); ok {
			return x.StringMatch
		}
	}
	return nil
}

func (x *HeaderMatcher) GetInvertMatch() bool {
	if x != nil {
		return x.InvertMatch
	}
	return false
}

func (x *HeaderMatcher) GetTreatMissingHeaderAsEmpty() bool {
	if x != nil {
		return x.TreatMissingHeaderAsEmpty
	}
	return false
}

type isHeaderMatcher_HeaderMatchSpecifier interface {
	isHeaderMatcher_HeaderMatchSpecifier()
}

type HeaderMatcher_ExactMatch struct {
	// If specified, header match will be performed based on the value of the header.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`string_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.string_match>`.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	ExactMatch string `protobuf:"bytes,4,opt,name=exact_match,json=exactMatch,proto3,oneof"`
}

type HeaderMatcher_SafeRegexMatch struct {
	// If specified, this regex string is a regular expression rule which implies the entire request
	// header value must match the regex. The rule will not match if only a subsequence of the
	// request header value matches the regex.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`string_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.string_match>`.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	SafeRegexMatch *v32.RegexMatcher `protobuf:"bytes,11,opt,name=safe_regex_match,json=safeRegexMatch,proto3,oneof"`
}

type HeaderMatcher_RangeMatch struct {
	// If specified, header match will be performed based on range.
	// The rule will match if the request header value is within this range.
	// The entire request header value must represent an integer in base 10 notation: consisting of
	// an optional plus or minus sign followed by a sequence of digits. The rule will not match if
	// the header value does not represent an integer. Match will fail for empty values, floating
	// point numbers or if only a subsequence of the header value is an integer.
	//
	// Examples:
	//
	//   - For range [-10,0), route will match for header value -1, but not for 0, “somestring“, 10.9,
	//     “-1somestring“
	RangeMatch *v33.Int64Range `protobuf:"bytes,6,opt,name=range_match,json=rangeMatch,proto3,oneof"`
}

type HeaderMatcher_PresentMatch struct {
	// If specified as true, header match will be performed based on whether the header is in the
	// request. If specified as false, header match will be performed based on whether the header is absent.
	PresentMatch bool `protobuf:"varint,7,opt,name=present_match,json=presentMatch,proto3,oneof"`
}

type HeaderMatcher_PrefixMatch struct {
	// If specified, header match will be performed based on the prefix of the header value.
	//
	// .. note::
	//
	//	Empty prefix is not allowed. Please use ``present_match`` instead.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`string_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.string_match>`.
	//
	// Examples:
	//
	// * The prefix “abcd“ matches the value “abcdxyz“, but not for “abcxyz“.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	PrefixMatch string `protobuf:"bytes,9,opt,name=prefix_match,json=prefixMatch,proto3,oneof"`
}

type HeaderMatcher_SuffixMatch struct {
	// If specified, header match will be performed based on the suffix of the header value.
	//
	// .. note::
	//
	//	Empty suffix is not allowed. Please use ``present_match`` instead.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`string_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.string_match>`.
	//
	// Examples:
	//
	// * The suffix “abcd“ matches the value “xyzabcd“, but not for “xyzbcd“.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	SuffixMatch string `protobuf:"bytes,10,opt,name=suffix_match,json=suffixMatch,proto3,oneof"`
}

type HeaderMatcher_ContainsMatch struct {
	// If specified, header match will be performed based on whether the header value contains
	// the given value or not.
	//
	// .. note::
	//
	//	Empty contains match is not allowed. Please use ``present_match`` instead.
	//
	// .. attention::
	//
	//	This field is deprecated. Please use :ref:`string_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.string_match>`.
	//
	// Examples:
	//
	// * The value “abcd“ matches the value “xyzabcdpqr“, but not for “xyzbcdpqr“.
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	ContainsMatch string `protobuf:"bytes,12,opt,name=contains_match,json=containsMatch,proto3,oneof"`
}

type HeaderMatcher_StringMatch struct {
	// If specified, header match will be performed based on the string match of the header value.
	StringMatch *v32.StringMatcher `protobuf:"bytes,13,opt,name=string_match,json=stringMatch,proto3,oneof"`
}

func (*HeaderMatcher_ExactMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_SafeRegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_RangeMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_PresentMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_PrefixMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_SuffixMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_ContainsMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_StringMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

// Query parameter matching treats the query string of a request's :path header
// as an ampersand-separated list of keys and/or key=value elements.
// [#next-free-field: 7]
type QueryParameterMatcher struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the name of a key that must be present in the requested
	// “path“'s query string.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to QueryParameterMatchSpecifier:
	//
	//	*QueryParameterMatcher_StringMatch
	//	*QueryParameterMatcher_PresentMatch
	QueryParameterMatchSpecifier isQueryParameterMatcher_QueryParameterMatchSpecifier `protobuf_oneof:"query_parameter_match_specifier"`
	unknownFields                protoimpl.UnknownFields
	sizeCache                    protoimpl.SizeCache
}

func (x *QueryParameterMatcher) Reset() {
	*x = QueryParameterMatcher{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *QueryParameterMatcher) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QueryParameterMatcher) ProtoMessage() {}

func (x *QueryParameterMatcher) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[19]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QueryParameterMatcher.ProtoReflect.Descriptor instead.
func (*QueryParameterMatcher) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{19}
}

func (x *QueryParameterMatcher) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *QueryParameterMatcher) GetQueryParameterMatchSpecifier() isQueryParameterMatcher_QueryParameterMatchSpecifier {
	if x != nil {
		return x.QueryParameterMatchSpecifier
	}
	return nil
}

func (x *QueryParameterMatcher) GetStringMatch() *v32.StringMatcher {
	if x != nil {
		if x, ok := x.QueryParameterMatchSpecifier.(*QueryParameterMatcher_StringMatch); ok {
			return x.StringMatch
		}
	}
	return nil
}

func (x *QueryParameterMatcher) GetPresentMatch() bool {
	if x != nil {
		if x, ok := x.QueryParameterMatchSpecifier.(*QueryParameterMatcher_PresentMatch); ok {
			return x.PresentMatch
		}
	}
	return false
}

type isQueryParameterMatcher_QueryParameterMatchSpecifier interface {
	isQueryParameterMatcher_QueryParameterMatchSpecifier()
}

type QueryParameterMatcher_StringMatch struct {
	// Specifies whether a query parameter value should match against a string.
	StringMatch *v32.StringMatcher `protobuf:"bytes,5,opt,name=string_match,json=stringMatch,proto3,oneof"`
}

type QueryParameterMatcher_PresentMatch struct {
	// Specifies whether a query parameter should be present.
	PresentMatch bool `protobuf:"varint,6,opt,name=present_match,json=presentMatch,proto3,oneof"`
}

func (*QueryParameterMatcher_StringMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {}

func (*QueryParameterMatcher_PresentMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {}

// Cookie matching inspects individual name/value pairs parsed from the “Cookie“ header.
type CookieMatcher struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the cookie name to evaluate.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Match the cookie value using :ref:`StringMatcher
	// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>` semantics.
	StringMatch *v32.StringMatcher `protobuf:"bytes,2,opt,name=string_match,json=stringMatch,proto3" json:"string_match,omitempty"`
	// Invert the match result. If the cookie is not present, the match result is false, so
	// “invert_match“ will cause the matcher to succeed when the cookie is absent.
	InvertMatch   bool `protobuf:"varint,3,opt,name=invert_match,json=invertMatch,proto3" json:"invert_match,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CookieMatcher) Reset() {
	*x = CookieMatcher{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CookieMatcher) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CookieMatcher) ProtoMessage() {}

func (x *CookieMatcher) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[20]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CookieMatcher.ProtoReflect.Descriptor instead.
func (*CookieMatcher) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{20}
}

func (x *CookieMatcher) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CookieMatcher) GetStringMatch() *v32.StringMatcher {
	if x != nil {
		return x.StringMatch
	}
	return nil
}

func (x *CookieMatcher) GetInvertMatch() bool {
	if x != nil {
		return x.InvertMatch
	}
	return false
}

// HTTP Internal Redirect :ref:`architecture overview <arch_overview_internal_redirects>`.
// [#next-free-field: 6]
type InternalRedirectPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// An internal redirect is not handled, unless the number of previous internal redirects that a
	// downstream request has encountered is lower than this value.
	// In the case where a downstream request is bounced among multiple routes by internal redirect,
	// the first route that hits this threshold, or does not set :ref:`internal_redirect_policy
	// <envoy_v3_api_field_config.route.v3.RouteAction.internal_redirect_policy>`
	// will pass the redirect back to downstream.
	//
	// If not specified, at most one redirect will be followed.
	MaxInternalRedirects *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=max_internal_redirects,json=maxInternalRedirects,proto3" json:"max_internal_redirects,omitempty"`
	// Defines what upstream response codes are allowed to trigger internal redirect. If unspecified,
	// only 302 will be treated as internal redirect.
	// Only 301, 302, 303, 307 and 308 are valid values. Any other codes will be ignored.
	RedirectResponseCodes []uint32 `protobuf:"varint,2,rep,packed,name=redirect_response_codes,json=redirectResponseCodes,proto3" json:"redirect_response_codes,omitempty"`
	// Specifies a list of predicates that are queried when an upstream response is deemed
	// to trigger an internal redirect by all other criteria. Any predicate in the list can reject
	// the redirect, causing the response to be proxied to downstream.
	// [#extension-category: envoy.internal_redirect_predicates]
	Predicates []*v31.TypedExtensionConfig `protobuf:"bytes,3,rep,name=predicates,proto3" json:"predicates,omitempty"`
	// Allow internal redirect to follow a target URI with a different scheme than the value of
	// x-forwarded-proto. The default is “false“.
	AllowCrossSchemeRedirect bool `protobuf:"varint,4,opt,name=allow_cross_scheme_redirect,json=allowCrossSchemeRedirect,proto3" json:"allow_cross_scheme_redirect,omitempty"`
	// Specifies a list of headers, by name, to copy from the internal redirect into the subsequent
	// request. If a header is specified here but not present in the redirect, it will be cleared in
	// the subsequent request.
	ResponseHeadersToCopy []string `protobuf:"bytes,5,rep,name=response_headers_to_copy,json=responseHeadersToCopy,proto3" json:"response_headers_to_copy,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

func (x *InternalRedirectPolicy) Reset() {
	*x = InternalRedirectPolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[21]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *InternalRedirectPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InternalRedirectPolicy) ProtoMessage() {}

func (x *InternalRedirectPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[21]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InternalRedirectPolicy.ProtoReflect.Descriptor instead.
func (*InternalRedirectPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{21}
}

func (x *InternalRedirectPolicy) GetMaxInternalRedirects() *wrapperspb.UInt32Value {
	if x != nil {
		return x.MaxInternalRedirects
	}
	return nil
}

func (x *InternalRedirectPolicy) GetRedirectResponseCodes() []uint32 {
	if x != nil {
		return x.RedirectResponseCodes
	}
	return nil
}

func (x *InternalRedirectPolicy) GetPredicates() []*v31.TypedExtensionConfig {
	if x != nil {
		return x.Predicates
	}
	return nil
}

func (x *InternalRedirectPolicy) GetAllowCrossSchemeRedirect() bool {
	if x != nil {
		return x.AllowCrossSchemeRedirect
	}
	return false
}

func (x *InternalRedirectPolicy) GetResponseHeadersToCopy() []string {
	if x != nil {
		return x.ResponseHeadersToCopy
	}
	return nil
}

// A simple wrapper for an HTTP filter config. This is intended to be used as a wrapper for the
// map value in
// :ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>`,
// :ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>`,
// or :ref:`WeightedCluster.ClusterWeight.typed_per_filter_config<envoy_v3_api_field_config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config>`
// to add additional flags to the filter.
type FilterConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The filter config.
	Config *anypb.Any `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
	// If true, the filter is optional, meaning that if the client does
	// not support the specified filter, it may ignore the map entry rather
	// than rejecting the config.
	IsOptional bool `protobuf:"varint,2,opt,name=is_optional,json=isOptional,proto3" json:"is_optional,omitempty"`
	// If true, the filter is disabled in the route or virtual host and the “config“ field is ignored.
	// See :ref:`route based filter chain <arch_overview_http_filters_route_based_filter_chain>`
	// for more details.
	//
	// .. note::
	//
	//	This field will take effect when the request arrive and filter chain is created for the request.
	//	If initial route is selected for the request and a filter is disabled in the initial route, then
	//	the filter will not be added to the filter chain.
	//	And if the request is mutated later and re-match to another route, the disabled filter by the
	//	initial route will not be added back to the filter chain because the filter chain is already
	//	created and it is too late to change the chain.
	Disabled      bool `protobuf:"varint,3,opt,name=disabled,proto3" json:"disabled,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *FilterConfig) Reset() {
	*x = FilterConfig{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[22]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FilterConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FilterConfig) ProtoMessage() {}

func (x *FilterConfig) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[22]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FilterConfig.ProtoReflect.Descriptor instead.
func (*FilterConfig) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{22}
}

func (x *FilterConfig) GetConfig() *anypb.Any {
	if x != nil {
		return x.Config
	}
	return nil
}

func (x *FilterConfig) GetIsOptional() bool {
	if x != nil {
		return x.IsOptional
	}
	return false
}

func (x *FilterConfig) GetDisabled() bool {
	if x != nil {
		return x.Disabled
	}
	return false
}

// [#next-free-field: 13]
type WeightedCluster_ClusterWeight struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Only one of “name“ and “cluster_header“ may be specified.
	// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
	// Name of the upstream cluster. The cluster must exist in the
	// :ref:`cluster manager configuration <config_cluster_manager>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Only one of “name“ and “cluster_header“ may be specified.
	// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1 }]
	// Envoy will determine the cluster to route to by reading the value of the
	// HTTP header named by cluster_header from the request headers. If the
	// header is not found or the referenced cluster does not exist, Envoy will
	// return a 404 response.
	//
	// .. attention::
	//
	//	Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
	//	``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
	//
	// .. note::
	//
	//	If the header appears multiple times only the first value is used.
	ClusterHeader string `protobuf:"bytes,12,opt,name=cluster_header,json=clusterHeader,proto3" json:"cluster_header,omitempty"`
	// The weight of the cluster. This value is relative to the other clusters'
	// weights. When a request matches the route, the choice of an upstream cluster
	// is determined by its weight. The sum of weights across all
	// entries in the clusters array must be greater than 0, and must not exceed
	// uint32_t maximal value (4294967295).
	Weight *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=weight,proto3" json:"weight,omitempty"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
	// the upstream cluster with metadata matching what is set in this field will be considered for
	// load balancing. Note that this will be merged with what's provided in
	// :ref:`RouteAction.metadata_match <envoy_v3_api_field_config.route.v3.RouteAction.metadata_match>`, with
	// values here taking precedence. The filter name should be specified as “envoy.lb“.
	MetadataMatch *v31.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// Specifies a list of headers to be added to requests when this cluster is selected
	// through the enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteAction`.
	// Headers specified at this level are applied before headers from the enclosing
	// :ref:`envoy_v3_api_msg_config.route.v3.Route`, :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`, and
	// :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,4,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request when
	// this cluster is selected through the enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteAction`.
	RequestHeadersToRemove []string `protobuf:"bytes,9,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a list of headers to be added to responses when this cluster is selected
	// through the enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteAction`.
	// Headers specified at this level are applied before headers from the enclosing
	// :ref:`envoy_v3_api_msg_config.route.v3.Route`, :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`, and
	// :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*v31.HeaderValueOption `protobuf:"bytes,5,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of headers to be removed from responses when this cluster is selected
	// through the enclosing :ref:`envoy_v3_api_msg_config.route.v3.RouteAction`.
	ResponseHeadersToRemove []string `protobuf:"bytes,6,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// This field can be used to provide weighted cluster specific per filter config. The key should match the
	// :ref:`filter config name
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
	// See :ref:`HTTP filter route-specific config <arch_overview_http_filters_per_filter_config>`
	// for details.
	// [#comment: An entry's value may be wrapped in a
	// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
	// message to specify additional options.]
	TypedPerFilterConfig map[string]*anypb.Any `protobuf:"bytes,10,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// Types that are valid to be assigned to HostRewriteSpecifier:
	//
	//	*WeightedCluster_ClusterWeight_HostRewriteLiteral
	HostRewriteSpecifier isWeightedCluster_ClusterWeight_HostRewriteSpecifier `protobuf_oneof:"host_rewrite_specifier"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *WeightedCluster_ClusterWeight) Reset() {
	*x = WeightedCluster_ClusterWeight{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[25]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *WeightedCluster_ClusterWeight) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*WeightedCluster_ClusterWeight) ProtoMessage() {}

func (x *WeightedCluster_ClusterWeight) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[25]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use WeightedCluster_ClusterWeight.ProtoReflect.Descriptor instead.
func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{4, 0}
}

func (x *WeightedCluster_ClusterWeight) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *WeightedCluster_ClusterWeight) GetClusterHeader() string {
	if x != nil {
		return x.ClusterHeader
	}
	return ""
}

func (x *WeightedCluster_ClusterWeight) GetWeight() *wrapperspb.UInt32Value {
	if x != nil {
		return x.Weight
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetMetadataMatch() *v31.Metadata {
	if x != nil {
		return x.MetadataMatch
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetRequestHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.RequestHeadersToAdd
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetRequestHeadersToRemove() []string {
	if x != nil {
		return x.RequestHeadersToRemove
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetResponseHeadersToAdd() []*v31.HeaderValueOption {
	if x != nil {
		return x.ResponseHeadersToAdd
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetResponseHeadersToRemove() []string {
	if x != nil {
		return x.ResponseHeadersToRemove
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetTypedPerFilterConfig() map[string]*anypb.Any {
	if x != nil {
		return x.TypedPerFilterConfig
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetHostRewriteSpecifier() isWeightedCluster_ClusterWeight_HostRewriteSpecifier {
	if x != nil {
		return x.HostRewriteSpecifier
	}
	return nil
}

func (x *WeightedCluster_ClusterWeight) GetHostRewriteLiteral() string {
	if x != nil {
		if x, ok := x.HostRewriteSpecifier.(*WeightedCluster_ClusterWeight_HostRewriteLiteral); ok {
			return x.HostRewriteLiteral
		}
	}
	return ""
}

type isWeightedCluster_ClusterWeight_HostRewriteSpecifier interface {
	isWeightedCluster_ClusterWeight_HostRewriteSpecifier()
}

type WeightedCluster_ClusterWeight_HostRewriteLiteral struct {
	// Indicates that during forwarding, the host header will be swapped with
	// this value.
	HostRewriteLiteral string `protobuf:"bytes,11,opt,name=host_rewrite_literal,json=hostRewriteLiteral,proto3,oneof"`
}

func (*WeightedCluster_ClusterWeight_HostRewriteLiteral) isWeightedCluster_ClusterWeight_HostRewriteSpecifier() {
}

type RouteMatch_GrpcRouteMatchOptions struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteMatch_GrpcRouteMatchOptions) Reset() {
	*x = RouteMatch_GrpcRouteMatchOptions{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[27]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteMatch_GrpcRouteMatchOptions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteMatch_GrpcRouteMatchOptions) ProtoMessage() {}

func (x *RouteMatch_GrpcRouteMatchOptions) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[27]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteMatch_GrpcRouteMatchOptions.ProtoReflect.Descriptor instead.
func (*RouteMatch_GrpcRouteMatchOptions) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{6, 0}
}

type RouteMatch_TlsContextMatchOptions struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// If specified, the route will match against whether or not a certificate is presented.
	// If not specified, certificate presentation status (true or false) will not be considered when route matching.
	Presented *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=presented,proto3" json:"presented,omitempty"`
	// If specified, the route will match against whether or not a certificate is validated.
	// If not specified, certificate validation status (true or false) will not be considered when route matching.
	//
	// .. warning::
	//
	//	Client certificate validation is not currently performed upon TLS session resumption. For
	//	a resumed TLS session the route will match only when ``validated`` is false, regardless of
	//	whether the client TLS certificate is valid.
	//
	//	The only known workaround for this issue is to disable TLS session resumption entirely, by
	//	setting both :ref:`disable_stateless_session_resumption <envoy_v3_api_field_extensions.transport_sockets.tls.v3.DownstreamTlsContext.disable_stateless_session_resumption>`
	//	and :ref:`disable_stateful_session_resumption <envoy_v3_api_field_extensions.transport_sockets.tls.v3.DownstreamTlsContext.disable_stateful_session_resumption>` on the DownstreamTlsContext.
	Validated     *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=validated,proto3" json:"validated,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteMatch_TlsContextMatchOptions) Reset() {
	*x = RouteMatch_TlsContextMatchOptions{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[28]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteMatch_TlsContextMatchOptions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteMatch_TlsContextMatchOptions) ProtoMessage() {}

func (x *RouteMatch_TlsContextMatchOptions) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[28]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteMatch_TlsContextMatchOptions.ProtoReflect.Descriptor instead.
func (*RouteMatch_TlsContextMatchOptions) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{6, 1}
}

func (x *RouteMatch_TlsContextMatchOptions) GetPresented() *wrapperspb.BoolValue {
	if x != nil {
		return x.Presented
	}
	return nil
}

func (x *RouteMatch_TlsContextMatchOptions) GetValidated() *wrapperspb.BoolValue {
	if x != nil {
		return x.Validated
	}
	return nil
}

// An extensible message for matching CONNECT or CONNECT-UDP requests.
type RouteMatch_ConnectMatcher struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteMatch_ConnectMatcher) Reset() {
	*x = RouteMatch_ConnectMatcher{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[29]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteMatch_ConnectMatcher) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteMatch_ConnectMatcher) ProtoMessage() {}

func (x *RouteMatch_ConnectMatcher) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[29]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteMatch_ConnectMatcher.ProtoReflect.Descriptor instead.
func (*RouteMatch_ConnectMatcher) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{6, 2}
}

// The router is capable of shadowing traffic from one cluster to another. The current
// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to
// respond before returning the response from the primary cluster. All normal statistics are
// collected for the shadow cluster making this feature useful for testing.
//
// During shadowing, the host/authority header is altered such that “-shadow“ is appended. This is
// useful for logging. For example, “cluster1“ becomes “cluster1-shadow“. This behavior can be
// disabled by setting “disable_shadow_host_suffix_append“ to “true“.
//
// .. note::
//
//	Shadowing will not be triggered if the primary cluster does not exist.
//
// .. note::
//
//	Shadowing doesn't support HTTP CONNECT and upgrades.
//
// [#next-free-field: 9]
type RouteAction_RequestMirrorPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Only one of “cluster“ and “cluster_header“ can be specified.
	// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
	// Specifies the cluster that requests will be mirrored to. The cluster must
	// exist in the cluster manager configuration.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// Only one of “cluster“ and “cluster_header“ can be specified.
	// Envoy will determine the cluster to route to by reading the value of the
	// HTTP header named by cluster_header from the request headers. Only the first value in header is used,
	// and no shadow request will happen if the value is not found in headers. Envoy will not wait for
	// the shadow cluster to respond before returning the response from the primary cluster.
	//
	// .. attention::
	//
	//	Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
	//	``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
	//
	// .. note::
	//
	//	If the header appears multiple times only the first value is used.
	ClusterHeader string `protobuf:"bytes,5,opt,name=cluster_header,json=clusterHeader,proto3" json:"cluster_header,omitempty"`
	// If not specified, all requests to the target cluster will be mirrored.
	//
	// If specified, this field takes precedence over the “runtime_key“ field and requests must also
	// fall under the percentage of matches indicated by this field.
	//
	// For some fraction N/D, a random number in the range [0,D) is selected. If the
	// number is <= the value of the numerator N, or if the key is not present, the default
	// value, the request will be mirrored.
	RuntimeFraction *v31.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"`
	// Specifies whether the trace span for the shadow request should be sampled. If this field is not explicitly set,
	// the shadow request will inherit the sampling decision of its parent span. This ensures consistency with the trace
	// sampling policy of the original request and prevents oversampling, especially in scenarios where runtime sampling
	// is disabled.
	TraceSampled *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=trace_sampled,json=traceSampled,proto3" json:"trace_sampled,omitempty"`
	// Disables appending the “-shadow“ suffix to the shadowed “Host“ header.
	//
	// Defaults to “false“.
	DisableShadowHostSuffixAppend bool `protobuf:"varint,6,opt,name=disable_shadow_host_suffix_append,json=disableShadowHostSuffixAppend,proto3" json:"disable_shadow_host_suffix_append,omitempty"`
	// Specifies a list of header mutations that should be applied to each mirrored request.
	// Header mutations are applied in the order they are specified. For more information, including
	// details on header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersMutations []*v35.HeaderMutation `protobuf:"bytes,7,rep,name=request_headers_mutations,json=requestHeadersMutations,proto3" json:"request_headers_mutations,omitempty"`
	// Indicates that during mirroring, the host header will be swapped with this value.
	// :ref:`disable_shadow_host_suffix_append
	// <envoy_v3_api_field_config.route.v3.RouteAction.RequestMirrorPolicy.disable_shadow_host_suffix_append>`
	// is implicitly enabled if this field is set.
	HostRewriteLiteral string `protobuf:"bytes,8,opt,name=host_rewrite_literal,json=hostRewriteLiteral,proto3" json:"host_rewrite_literal,omitempty"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

func (x *RouteAction_RequestMirrorPolicy) Reset() {
	*x = RouteAction_RequestMirrorPolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_RequestMirrorPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_RequestMirrorPolicy) ProtoMessage() {}

func (x *RouteAction_RequestMirrorPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_RequestMirrorPolicy.ProtoReflect.Descriptor instead.
func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 0}
}

func (x *RouteAction_RequestMirrorPolicy) GetCluster() string {
	if x != nil {
		return x.Cluster
	}
	return ""
}

func (x *RouteAction_RequestMirrorPolicy) GetClusterHeader() string {
	if x != nil {
		return x.ClusterHeader
	}
	return ""
}

func (x *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *v31.RuntimeFractionalPercent {
	if x != nil {
		return x.RuntimeFraction
	}
	return nil
}

func (x *RouteAction_RequestMirrorPolicy) GetTraceSampled() *wrapperspb.BoolValue {
	if x != nil {
		return x.TraceSampled
	}
	return nil
}

func (x *RouteAction_RequestMirrorPolicy) GetDisableShadowHostSuffixAppend() bool {
	if x != nil {
		return x.DisableShadowHostSuffixAppend
	}
	return false
}

func (x *RouteAction_RequestMirrorPolicy) GetRequestHeadersMutations() []*v35.HeaderMutation {
	if x != nil {
		return x.RequestHeadersMutations
	}
	return nil
}

func (x *RouteAction_RequestMirrorPolicy) GetHostRewriteLiteral() string {
	if x != nil {
		return x.HostRewriteLiteral
	}
	return ""
}

// Specifies the route's hashing policy if the upstream cluster uses a hashing :ref:`load balancer
// <arch_overview_load_balancing_types>`.
// [#next-free-field: 7]
type RouteAction_HashPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to PolicySpecifier:
	//
	//	*RouteAction_HashPolicy_Header_
	//	*RouteAction_HashPolicy_Cookie_
	//	*RouteAction_HashPolicy_ConnectionProperties_
	//	*RouteAction_HashPolicy_QueryParameter_
	//	*RouteAction_HashPolicy_FilterState_
	PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"`
	// The flag that short-circuits the hash computing. This field provides a
	// 'fallback' style of configuration: "if a terminal policy doesn't work,
	// fallback to rest of the policy list", it saves time when the terminal
	// policy works.
	//
	// If true, and there is already a hash computed, ignore rest of the
	// list of hash polices.
	// For example, if the following hash methods are configured:
	//
	//	========= ========
	//	specifier terminal
	//	========= ========
	//	Header A  true
	//	Header B  false
	//	Header C  false
	//	========= ========
	//
	// The generateHash process ends if policy "header A" generates a hash, as
	// it's a terminal policy.
	Terminal      bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy) Reset() {
	*x = RouteAction_HashPolicy{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[31]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy) ProtoMessage() {}

func (x *RouteAction_HashPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[31]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1}
}

func (x *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier {
	if x != nil {
		return x.PolicySpecifier
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*RouteAction_HashPolicy_Header_); ok {
			return x.Header
		}
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*RouteAction_HashPolicy_Cookie_); ok {
			return x.Cookie
		}
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*RouteAction_HashPolicy_ConnectionProperties_); ok {
			return x.ConnectionProperties
		}
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetQueryParameter() *RouteAction_HashPolicy_QueryParameter {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*RouteAction_HashPolicy_QueryParameter_); ok {
			return x.QueryParameter
		}
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetFilterState() *RouteAction_HashPolicy_FilterState {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*RouteAction_HashPolicy_FilterState_); ok {
			return x.FilterState
		}
	}
	return nil
}

func (x *RouteAction_HashPolicy) GetTerminal() bool {
	if x != nil {
		return x.Terminal
	}
	return false
}

type isRouteAction_HashPolicy_PolicySpecifier interface {
	isRouteAction_HashPolicy_PolicySpecifier()
}

type RouteAction_HashPolicy_Header_ struct {
	// Header hash policy.
	Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"`
}

type RouteAction_HashPolicy_Cookie_ struct {
	// Cookie hash policy.
	Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"`
}

type RouteAction_HashPolicy_ConnectionProperties_ struct {
	// Connection properties hash policy.
	ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"`
}

type RouteAction_HashPolicy_QueryParameter_ struct {
	// Query parameter hash policy.
	QueryParameter *RouteAction_HashPolicy_QueryParameter `protobuf:"bytes,5,opt,name=query_parameter,json=queryParameter,proto3,oneof"`
}

type RouteAction_HashPolicy_FilterState_ struct {
	// Filter state hash policy.
	FilterState *RouteAction_HashPolicy_FilterState `protobuf:"bytes,6,opt,name=filter_state,json=filterState,proto3,oneof"`
}

func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_QueryParameter_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_FilterState_) isRouteAction_HashPolicy_PolicySpecifier() {}

// Allows enabling and disabling upgrades on a per-route basis.
// This overrides any enabled/disabled upgrade filter chain specified in the
// HttpConnectionManager
// :ref:`upgrade_configs
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.upgrade_configs>`
// but does not affect any custom filter chain specified there.
type RouteAction_UpgradeConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The case-insensitive name of this upgrade, for example, "websocket".
	// For each upgrade type present in upgrade_configs, requests with
	// Upgrade: [upgrade_type] will be proxied upstream.
	UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"`
	// Determines if upgrades are available on this route.
	//
	// Defaults to “true“.
	Enabled *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
	// Configuration for sending data upstream as a raw data payload. This is used for
	// CONNECT requests, when forwarding CONNECT payload as raw TCP.
	// Note that CONNECT support is currently considered alpha in Envoy.
	// [#comment: TODO(htuch): Replace the above comment with an alpha tag.]
	ConnectConfig *RouteAction_UpgradeConfig_ConnectConfig `protobuf:"bytes,3,opt,name=connect_config,json=connectConfig,proto3" json:"connect_config,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_UpgradeConfig) Reset() {
	*x = RouteAction_UpgradeConfig{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_UpgradeConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_UpgradeConfig) ProtoMessage() {}

func (x *RouteAction_UpgradeConfig) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_UpgradeConfig.ProtoReflect.Descriptor instead.
func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 2}
}

func (x *RouteAction_UpgradeConfig) GetUpgradeType() string {
	if x != nil {
		return x.UpgradeType
	}
	return ""
}

func (x *RouteAction_UpgradeConfig) GetEnabled() *wrapperspb.BoolValue {
	if x != nil {
		return x.Enabled
	}
	return nil
}

func (x *RouteAction_UpgradeConfig) GetConnectConfig() *RouteAction_UpgradeConfig_ConnectConfig {
	if x != nil {
		return x.ConnectConfig
	}
	return nil
}

type RouteAction_MaxStreamDuration struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the maximum duration allowed for streams on the route. If not specified, the value
	// from the :ref:`max_stream_duration
	// <envoy_v3_api_field_config.core.v3.HttpProtocolOptions.max_stream_duration>` field in
	// :ref:`HttpConnectionManager.common_http_protocol_options
	// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.common_http_protocol_options>`
	// is used. If this field is set explicitly to zero, any
	// HttpConnectionManager max_stream_duration timeout will be disabled for
	// this route.
	MaxStreamDuration *durationpb.Duration `protobuf:"bytes,1,opt,name=max_stream_duration,json=maxStreamDuration,proto3" json:"max_stream_duration,omitempty"`
	// If present, and the request contains a `grpc-timeout header
	// <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_, use that value as the
	// “max_stream_duration“, but limit the applied timeout to the maximum value specified here.
	// If set to 0, the “grpc-timeout“ header is used without modification.
	GrpcTimeoutHeaderMax *durationpb.Duration `protobuf:"bytes,2,opt,name=grpc_timeout_header_max,json=grpcTimeoutHeaderMax,proto3" json:"grpc_timeout_header_max,omitempty"`
	// If present, Envoy will adjust the timeout provided by the “grpc-timeout“ header by
	// subtracting the provided duration from the header. This is useful for allowing Envoy to set
	// its global timeout to be less than that of the deadline imposed by the calling client, which
	// makes it more likely that Envoy will handle the timeout instead of having the call canceled
	// by the client. If, after applying the offset, the resulting timeout is zero or negative,
	// the stream will timeout immediately.
	GrpcTimeoutHeaderOffset *durationpb.Duration `protobuf:"bytes,3,opt,name=grpc_timeout_header_offset,json=grpcTimeoutHeaderOffset,proto3" json:"grpc_timeout_header_offset,omitempty"`
	unknownFields           protoimpl.UnknownFields
	sizeCache               protoimpl.SizeCache
}

func (x *RouteAction_MaxStreamDuration) Reset() {
	*x = RouteAction_MaxStreamDuration{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_MaxStreamDuration) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_MaxStreamDuration) ProtoMessage() {}

func (x *RouteAction_MaxStreamDuration) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_MaxStreamDuration.ProtoReflect.Descriptor instead.
func (*RouteAction_MaxStreamDuration) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 3}
}

func (x *RouteAction_MaxStreamDuration) GetMaxStreamDuration() *durationpb.Duration {
	if x != nil {
		return x.MaxStreamDuration
	}
	return nil
}

func (x *RouteAction_MaxStreamDuration) GetGrpcTimeoutHeaderMax() *durationpb.Duration {
	if x != nil {
		return x.GrpcTimeoutHeaderMax
	}
	return nil
}

func (x *RouteAction_MaxStreamDuration) GetGrpcTimeoutHeaderOffset() *durationpb.Duration {
	if x != nil {
		return x.GrpcTimeoutHeaderOffset
	}
	return nil
}

type RouteAction_HashPolicy_Header struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the request header that will be used to obtain the hash
	// key. If the request header is not present, no hash will be produced.
	HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"`
	// If specified, the request header value will be rewritten and used
	// to produce the hash key.
	RegexRewrite  *v32.RegexMatchAndSubstitute `protobuf:"bytes,2,opt,name=regex_rewrite,json=regexRewrite,proto3" json:"regex_rewrite,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_Header) Reset() {
	*x = RouteAction_HashPolicy_Header{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[34]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_Header) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_Header) ProtoMessage() {}

func (x *RouteAction_HashPolicy_Header) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[34]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_Header.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 0}
}

func (x *RouteAction_HashPolicy_Header) GetHeaderName() string {
	if x != nil {
		return x.HeaderName
	}
	return ""
}

func (x *RouteAction_HashPolicy_Header) GetRegexRewrite() *v32.RegexMatchAndSubstitute {
	if x != nil {
		return x.RegexRewrite
	}
	return nil
}

// CookieAttribute defines an API for adding additional attributes for a HTTP cookie.
type RouteAction_HashPolicy_CookieAttribute struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the cookie attribute.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The optional value of the cookie attribute.
	Value         string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_CookieAttribute) Reset() {
	*x = RouteAction_HashPolicy_CookieAttribute{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[35]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_CookieAttribute) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_CookieAttribute) ProtoMessage() {}

func (x *RouteAction_HashPolicy_CookieAttribute) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[35]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_CookieAttribute.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_CookieAttribute) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 1}
}

func (x *RouteAction_HashPolicy_CookieAttribute) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *RouteAction_HashPolicy_CookieAttribute) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

// Envoy supports two types of cookie affinity:
//
//  1. Passive. Envoy takes a cookie that's present in the cookies header and
//     hashes on its value.
//
//  2. Generated. Envoy generates and sets a cookie with an expiration (TTL)
//     on the first request from the client in its response to the client,
//     based on the endpoint the request gets sent to. The client then
//     presents this on the next and all subsequent requests. The hash of
//     this is sufficient to ensure these requests get sent to the same
//     endpoint. The cookie is generated by hashing the source and
//     destination ports and addresses so that multiple independent HTTP2
//     streams on the same connection will independently receive the same
//     cookie, even if they arrive at the Envoy simultaneously.
type RouteAction_HashPolicy_Cookie struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the cookie that will be used to obtain the hash key. If the
	// cookie is not present and ttl below is not set, no hash will be
	// produced.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// If specified, a cookie with the TTL will be generated if the cookie is
	// not present. If the TTL is present and zero, the generated cookie will
	// be a session cookie.
	Ttl *durationpb.Duration `protobuf:"bytes,2,opt,name=ttl,proto3" json:"ttl,omitempty"`
	// The name of the path for the cookie. If no path is specified here, no path
	// will be set for the cookie.
	Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
	// Additional attributes for the cookie. They will be used when generating a new cookie.
	Attributes    []*RouteAction_HashPolicy_CookieAttribute `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_Cookie) Reset() {
	*x = RouteAction_HashPolicy_Cookie{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[36]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_Cookie) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_Cookie) ProtoMessage() {}

func (x *RouteAction_HashPolicy_Cookie) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[36]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_Cookie.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 2}
}

func (x *RouteAction_HashPolicy_Cookie) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *RouteAction_HashPolicy_Cookie) GetTtl() *durationpb.Duration {
	if x != nil {
		return x.Ttl
	}
	return nil
}

func (x *RouteAction_HashPolicy_Cookie) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *RouteAction_HashPolicy_Cookie) GetAttributes() []*RouteAction_HashPolicy_CookieAttribute {
	if x != nil {
		return x.Attributes
	}
	return nil
}

type RouteAction_HashPolicy_ConnectionProperties struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Hash on source IP address.
	SourceIp      bool `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_ConnectionProperties) Reset() {
	*x = RouteAction_HashPolicy_ConnectionProperties{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[37]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_ConnectionProperties) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {}

func (x *RouteAction_HashPolicy_ConnectionProperties) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[37]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_ConnectionProperties.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 3}
}

func (x *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool {
	if x != nil {
		return x.SourceIp
	}
	return false
}

type RouteAction_HashPolicy_QueryParameter struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the URL query parameter that will be used to obtain the hash
	// key. If the parameter is not present, no hash will be produced. Query
	// parameter names are case-sensitive. If query parameters are repeated, only
	// the first value will be considered.
	Name          string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_QueryParameter) Reset() {
	*x = RouteAction_HashPolicy_QueryParameter{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[38]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_QueryParameter) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_QueryParameter) ProtoMessage() {}

func (x *RouteAction_HashPolicy_QueryParameter) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[38]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_QueryParameter.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_QueryParameter) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 4}
}

func (x *RouteAction_HashPolicy_QueryParameter) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

type RouteAction_HashPolicy_FilterState struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the Object in the per-request filterState, which is an
	// Envoy::Hashable object. If there is no data associated with the key,
	// or the stored object is not Envoy::Hashable, no hash will be produced.
	Key           string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_HashPolicy_FilterState) Reset() {
	*x = RouteAction_HashPolicy_FilterState{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[39]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_HashPolicy_FilterState) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_HashPolicy_FilterState) ProtoMessage() {}

func (x *RouteAction_HashPolicy_FilterState) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[39]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_HashPolicy_FilterState.ProtoReflect.Descriptor instead.
func (*RouteAction_HashPolicy_FilterState) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 1, 5}
}

func (x *RouteAction_HashPolicy_FilterState) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

// Configuration for sending data upstream as a raw data payload. This is used for
// CONNECT or POST requests, when forwarding request payload as raw TCP.
type RouteAction_UpgradeConfig_ConnectConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// If present, the proxy protocol header will be prepended to the CONNECT payload sent upstream.
	ProxyProtocolConfig *v31.ProxyProtocolConfig `protobuf:"bytes,1,opt,name=proxy_protocol_config,json=proxyProtocolConfig,proto3" json:"proxy_protocol_config,omitempty"`
	// If set, the route will also allow forwarding POST payload as raw TCP.
	AllowPost     bool `protobuf:"varint,2,opt,name=allow_post,json=allowPost,proto3" json:"allow_post,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RouteAction_UpgradeConfig_ConnectConfig) Reset() {
	*x = RouteAction_UpgradeConfig_ConnectConfig{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[40]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RouteAction_UpgradeConfig_ConnectConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RouteAction_UpgradeConfig_ConnectConfig) ProtoMessage() {}

func (x *RouteAction_UpgradeConfig_ConnectConfig) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[40]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RouteAction_UpgradeConfig_ConnectConfig.ProtoReflect.Descriptor instead.
func (*RouteAction_UpgradeConfig_ConnectConfig) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{8, 2, 0}
}

func (x *RouteAction_UpgradeConfig_ConnectConfig) GetProxyProtocolConfig() *v31.ProxyProtocolConfig {
	if x != nil {
		return x.ProxyProtocolConfig
	}
	return nil
}

func (x *RouteAction_UpgradeConfig_ConnectConfig) GetAllowPost() bool {
	if x != nil {
		return x.AllowPost
	}
	return false
}

type RetryPolicy_RetryPriority struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	Name  string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// [#extension-category: envoy.retry_priorities]
	//
	// Types that are valid to be assigned to ConfigType:
	//
	//	*RetryPolicy_RetryPriority_TypedConfig
	ConfigType    isRetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RetryPolicy_RetryPriority) Reset() {
	*x = RetryPolicy_RetryPriority{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[41]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy_RetryPriority) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy_RetryPriority) ProtoMessage() {}

func (x *RetryPolicy_RetryPriority) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[41]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy_RetryPriority.ProtoReflect.Descriptor instead.
func (*RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 0}
}

func (x *RetryPolicy_RetryPriority) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *RetryPolicy_RetryPriority) GetConfigType() isRetryPolicy_RetryPriority_ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return nil
}

func (x *RetryPolicy_RetryPriority) GetTypedConfig() *anypb.Any {
	if x != nil {
		if x, ok := x.ConfigType.(*RetryPolicy_RetryPriority_TypedConfig); ok {
			return x.TypedConfig
		}
	}
	return nil
}

type isRetryPolicy_RetryPriority_ConfigType interface {
	isRetryPolicy_RetryPriority_ConfigType()
}

type RetryPolicy_RetryPriority_TypedConfig struct {
	TypedConfig *anypb.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*RetryPolicy_RetryPriority_TypedConfig) isRetryPolicy_RetryPriority_ConfigType() {}

type RetryPolicy_RetryHostPredicate struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	Name  string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// [#extension-category: envoy.retry_host_predicates]
	//
	// Types that are valid to be assigned to ConfigType:
	//
	//	*RetryPolicy_RetryHostPredicate_TypedConfig
	ConfigType    isRetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RetryPolicy_RetryHostPredicate) Reset() {
	*x = RetryPolicy_RetryHostPredicate{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[42]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy_RetryHostPredicate) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy_RetryHostPredicate) ProtoMessage() {}

func (x *RetryPolicy_RetryHostPredicate) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[42]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy_RetryHostPredicate.ProtoReflect.Descriptor instead.
func (*RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 1}
}

func (x *RetryPolicy_RetryHostPredicate) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *RetryPolicy_RetryHostPredicate) GetConfigType() isRetryPolicy_RetryHostPredicate_ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return nil
}

func (x *RetryPolicy_RetryHostPredicate) GetTypedConfig() *anypb.Any {
	if x != nil {
		if x, ok := x.ConfigType.(*RetryPolicy_RetryHostPredicate_TypedConfig); ok {
			return x.TypedConfig
		}
	}
	return nil
}

type isRetryPolicy_RetryHostPredicate_ConfigType interface {
	isRetryPolicy_RetryHostPredicate_ConfigType()
}

type RetryPolicy_RetryHostPredicate_TypedConfig struct {
	TypedConfig *anypb.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*RetryPolicy_RetryHostPredicate_TypedConfig) isRetryPolicy_RetryHostPredicate_ConfigType() {}

type RetryPolicy_RetryBackOff struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the base interval between retries. This parameter is required and must be greater
	// than zero. Values less than 1 ms are rounded up to 1 ms.
	// See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion of Envoy's
	// back-off algorithm.
	BaseInterval *durationpb.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"`
	// Specifies the maximum interval between retries. This parameter is optional, but must be
	// greater than or equal to the “base_interval“ if set. The default is 10 times the
	// “base_interval“. See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion
	// of Envoy's back-off algorithm.
	MaxInterval   *durationpb.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RetryPolicy_RetryBackOff) Reset() {
	*x = RetryPolicy_RetryBackOff{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[43]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy_RetryBackOff) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy_RetryBackOff) ProtoMessage() {}

func (x *RetryPolicy_RetryBackOff) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[43]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy_RetryBackOff.ProtoReflect.Descriptor instead.
func (*RetryPolicy_RetryBackOff) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 2}
}

func (x *RetryPolicy_RetryBackOff) GetBaseInterval() *durationpb.Duration {
	if x != nil {
		return x.BaseInterval
	}
	return nil
}

func (x *RetryPolicy_RetryBackOff) GetMaxInterval() *durationpb.Duration {
	if x != nil {
		return x.MaxInterval
	}
	return nil
}

type RetryPolicy_ResetHeader struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the reset header.
	//
	// .. note::
	//
	//	If the header appears multiple times only the first value is used.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The format of the reset header.
	Format        RetryPolicy_ResetHeaderFormat `protobuf:"varint,2,opt,name=format,proto3,enum=envoy.config.route.v3.RetryPolicy_ResetHeaderFormat" json:"format,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RetryPolicy_ResetHeader) Reset() {
	*x = RetryPolicy_ResetHeader{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[44]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy_ResetHeader) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy_ResetHeader) ProtoMessage() {}

func (x *RetryPolicy_ResetHeader) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[44]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy_ResetHeader.ProtoReflect.Descriptor instead.
func (*RetryPolicy_ResetHeader) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 3}
}

func (x *RetryPolicy_ResetHeader) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *RetryPolicy_ResetHeader) GetFormat() RetryPolicy_ResetHeaderFormat {
	if x != nil {
		return x.Format
	}
	return RetryPolicy_SECONDS
}

// A retry back-off strategy that applies when the upstream server rate limits
// the request.
//
// Given this configuration:
//
// .. code-block:: yaml
//
//	rate_limited_retry_back_off:
//	  reset_headers:
//	  - name: Retry-After
//	    format: SECONDS
//	  - name: X-RateLimit-Reset
//	    format: UNIX_TIMESTAMP
//	  max_interval: "300s"
//
// The following algorithm will apply:
//
//  1. If the response contains the header “Retry-After“ its value must be on
//     the form “120“ (an integer that represents the number of seconds to
//     wait before retrying). If so, this value is used as the back-off interval.
//  2. Otherwise, if the response contains the header “X-RateLimit-Reset“ its
//     value must be on the form “1595320702“ (an integer that represents the
//     point in time at which to retry, as a Unix timestamp in seconds). If so,
//     the current time is subtracted from this value and the result is used as
//     the back-off interval.
//  3. Otherwise, Envoy will use the default
//     :ref:`exponential back-off <envoy_v3_api_field_config.route.v3.RetryPolicy.retry_back_off>`
//     strategy.
//
// No matter which format is used, if the resulting back-off interval exceeds
// “max_interval“ it is discarded and the next header in “reset_headers“
// is tried. If a request timeout is configured for the route it will further
// limit how long the request will be allowed to run.
//
// To prevent many clients retrying at the same point in time jitter is added
// to the back-off interval, so the resulting interval is decided by taking:
// “random(interval, interval * 1.5)“.
//
// .. attention::
//
//	Configuring ``rate_limited_retry_back_off`` will not by itself cause a request
//	to be retried. You will still need to configure the right retry policy to match
//	the responses from the upstream server.
type RetryPolicy_RateLimitedRetryBackOff struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Specifies the reset headers (like “Retry-After“ or “X-RateLimit-Reset“)
	// to match against the response. Headers are tried in order, and matched case
	// insensitive. The first header to be parsed successfully is used. If no headers
	// match the default exponential back-off is used instead.
	ResetHeaders []*RetryPolicy_ResetHeader `protobuf:"bytes,1,rep,name=reset_headers,json=resetHeaders,proto3" json:"reset_headers,omitempty"`
	// Specifies the maximum back off interval that Envoy will allow. If a reset
	// header contains an interval longer than this then it will be discarded and
	// the next header will be tried.
	//
	// Defaults to 300 seconds.
	MaxInterval   *durationpb.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RetryPolicy_RateLimitedRetryBackOff) Reset() {
	*x = RetryPolicy_RateLimitedRetryBackOff{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[45]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RetryPolicy_RateLimitedRetryBackOff) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RetryPolicy_RateLimitedRetryBackOff) ProtoMessage() {}

func (x *RetryPolicy_RateLimitedRetryBackOff) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[45]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RetryPolicy_RateLimitedRetryBackOff.ProtoReflect.Descriptor instead.
func (*RetryPolicy_RateLimitedRetryBackOff) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{9, 4}
}

func (x *RetryPolicy_RateLimitedRetryBackOff) GetResetHeaders() []*RetryPolicy_ResetHeader {
	if x != nil {
		return x.ResetHeaders
	}
	return nil
}

func (x *RetryPolicy_RateLimitedRetryBackOff) GetMaxInterval() *durationpb.Duration {
	if x != nil {
		return x.MaxInterval
	}
	return nil
}

// [#next-free-field: 14]
type RateLimit_Action struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to ActionSpecifier:
	//
	//	*RateLimit_Action_SourceCluster_
	//	*RateLimit_Action_DestinationCluster_
	//	*RateLimit_Action_RequestHeaders_
	//	*RateLimit_Action_QueryParameters_
	//	*RateLimit_Action_RemoteAddress_
	//	*RateLimit_Action_GenericKey_
	//	*RateLimit_Action_HeaderValueMatch_
	//	*RateLimit_Action_DynamicMetadata
	//	*RateLimit_Action_Metadata
	//	*RateLimit_Action_Extension
	//	*RateLimit_Action_MaskedRemoteAddress_
	//	*RateLimit_Action_QueryParameterValueMatch_
	//	*RateLimit_Action_RemoteAddressMatch_
	ActionSpecifier isRateLimit_Action_ActionSpecifier `protobuf_oneof:"action_specifier"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *RateLimit_Action) Reset() {
	*x = RateLimit_Action{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[46]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action) ProtoMessage() {}

func (x *RateLimit_Action) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[46]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action.ProtoReflect.Descriptor instead.
func (*RateLimit_Action) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0}
}

func (x *RateLimit_Action) GetActionSpecifier() isRateLimit_Action_ActionSpecifier {
	if x != nil {
		return x.ActionSpecifier
	}
	return nil
}

func (x *RateLimit_Action) GetSourceCluster() *RateLimit_Action_SourceCluster {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_SourceCluster_); ok {
			return x.SourceCluster
		}
	}
	return nil
}

func (x *RateLimit_Action) GetDestinationCluster() *RateLimit_Action_DestinationCluster {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_DestinationCluster_); ok {
			return x.DestinationCluster
		}
	}
	return nil
}

func (x *RateLimit_Action) GetRequestHeaders() *RateLimit_Action_RequestHeaders {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_RequestHeaders_); ok {
			return x.RequestHeaders
		}
	}
	return nil
}

func (x *RateLimit_Action) GetQueryParameters() *RateLimit_Action_QueryParameters {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_QueryParameters_); ok {
			return x.QueryParameters
		}
	}
	return nil
}

func (x *RateLimit_Action) GetRemoteAddress() *RateLimit_Action_RemoteAddress {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_RemoteAddress_); ok {
			return x.RemoteAddress
		}
	}
	return nil
}

func (x *RateLimit_Action) GetGenericKey() *RateLimit_Action_GenericKey {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_GenericKey_); ok {
			return x.GenericKey
		}
	}
	return nil
}

func (x *RateLimit_Action) GetHeaderValueMatch() *RateLimit_Action_HeaderValueMatch {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_HeaderValueMatch_); ok {
			return x.HeaderValueMatch
		}
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
func (x *RateLimit_Action) GetDynamicMetadata() *RateLimit_Action_DynamicMetaData {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_DynamicMetadata); ok {
			return x.DynamicMetadata
		}
	}
	return nil
}

func (x *RateLimit_Action) GetMetadata() *RateLimit_Action_MetaData {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_Metadata); ok {
			return x.Metadata
		}
	}
	return nil
}

func (x *RateLimit_Action) GetExtension() *v31.TypedExtensionConfig {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_Extension); ok {
			return x.Extension
		}
	}
	return nil
}

func (x *RateLimit_Action) GetMaskedRemoteAddress() *RateLimit_Action_MaskedRemoteAddress {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_MaskedRemoteAddress_); ok {
			return x.MaskedRemoteAddress
		}
	}
	return nil
}

func (x *RateLimit_Action) GetQueryParameterValueMatch() *RateLimit_Action_QueryParameterValueMatch {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_QueryParameterValueMatch_); ok {
			return x.QueryParameterValueMatch
		}
	}
	return nil
}

func (x *RateLimit_Action) GetRemoteAddressMatch() *RateLimit_Action_RemoteAddressMatch {
	if x != nil {
		if x, ok := x.ActionSpecifier.(*RateLimit_Action_RemoteAddressMatch_); ok {
			return x.RemoteAddressMatch
		}
	}
	return nil
}

type isRateLimit_Action_ActionSpecifier interface {
	isRateLimit_Action_ActionSpecifier()
}

type RateLimit_Action_SourceCluster_ struct {
	// Rate limit on source cluster.
	SourceCluster *RateLimit_Action_SourceCluster `protobuf:"bytes,1,opt,name=source_cluster,json=sourceCluster,proto3,oneof"`
}

type RateLimit_Action_DestinationCluster_ struct {
	// Rate limit on destination cluster.
	DestinationCluster *RateLimit_Action_DestinationCluster `protobuf:"bytes,2,opt,name=destination_cluster,json=destinationCluster,proto3,oneof"`
}

type RateLimit_Action_RequestHeaders_ struct {
	// Rate limit on request headers.
	RequestHeaders *RateLimit_Action_RequestHeaders `protobuf:"bytes,3,opt,name=request_headers,json=requestHeaders,proto3,oneof"`
}

type RateLimit_Action_QueryParameters_ struct {
	// Rate limit on query parameters.
	QueryParameters *RateLimit_Action_QueryParameters `protobuf:"bytes,12,opt,name=query_parameters,json=queryParameters,proto3,oneof"`
}

type RateLimit_Action_RemoteAddress_ struct {
	// Rate limit on remote address.
	RemoteAddress *RateLimit_Action_RemoteAddress `protobuf:"bytes,4,opt,name=remote_address,json=remoteAddress,proto3,oneof"`
}

type RateLimit_Action_GenericKey_ struct {
	// Rate limit on a generic key.
	GenericKey *RateLimit_Action_GenericKey `protobuf:"bytes,5,opt,name=generic_key,json=genericKey,proto3,oneof"`
}

type RateLimit_Action_HeaderValueMatch_ struct {
	// Rate limit on the existence of request headers.
	HeaderValueMatch *RateLimit_Action_HeaderValueMatch `protobuf:"bytes,6,opt,name=header_value_match,json=headerValueMatch,proto3,oneof"`
}

type RateLimit_Action_DynamicMetadata struct {
	// Rate limit on dynamic metadata.
	//
	// .. attention::
	//
	//	This field has been deprecated in favor of the :ref:`metadata <envoy_v3_api_field_config.route.v3.RateLimit.Action.metadata>` field
	//
	// Deprecated: Marked as deprecated in envoy/config/route/v3/route_components.proto.
	DynamicMetadata *RateLimit_Action_DynamicMetaData `protobuf:"bytes,7,opt,name=dynamic_metadata,json=dynamicMetadata,proto3,oneof"`
}

type RateLimit_Action_Metadata struct {
	// Rate limit on metadata.
	Metadata *RateLimit_Action_MetaData `protobuf:"bytes,8,opt,name=metadata,proto3,oneof"`
}

type RateLimit_Action_Extension struct {
	// Rate limit descriptor extension. See the rate limit descriptor extensions documentation.
	//
	// :ref:`HTTP matching input functions <arch_overview_matching_api>` are
	// permitted as descriptor extensions. The input functions are only
	// looked up if there is no rate limit descriptor extension matching
	// the type URL.
	//
	// [#extension-category: envoy.rate_limit_descriptors]
	Extension *v31.TypedExtensionConfig `protobuf:"bytes,9,opt,name=extension,proto3,oneof"`
}

type RateLimit_Action_MaskedRemoteAddress_ struct {
	// Rate limit on masked remote address.
	MaskedRemoteAddress *RateLimit_Action_MaskedRemoteAddress `protobuf:"bytes,10,opt,name=masked_remote_address,json=maskedRemoteAddress,proto3,oneof"`
}

type RateLimit_Action_QueryParameterValueMatch_ struct {
	// Rate limit on the existence of query parameters.
	QueryParameterValueMatch *RateLimit_Action_QueryParameterValueMatch `protobuf:"bytes,11,opt,name=query_parameter_value_match,json=queryParameterValueMatch,proto3,oneof"`
}

type RateLimit_Action_RemoteAddressMatch_ struct {
	// Rate limit on remote address match.
	RemoteAddressMatch *RateLimit_Action_RemoteAddressMatch `protobuf:"bytes,13,opt,name=remote_address_match,json=remoteAddressMatch,proto3,oneof"`
}

func (*RateLimit_Action_SourceCluster_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_DestinationCluster_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_RequestHeaders_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_QueryParameters_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_RemoteAddress_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_GenericKey_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_HeaderValueMatch_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_DynamicMetadata) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_Metadata) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_Extension) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_MaskedRemoteAddress_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_QueryParameterValueMatch_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_RemoteAddressMatch_) isRateLimit_Action_ActionSpecifier() {}

type RateLimit_Override struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to OverrideSpecifier:
	//
	//	*RateLimit_Override_DynamicMetadata_
	//	*RateLimit_Override_RateLimit
	OverrideSpecifier isRateLimit_Override_OverrideSpecifier `protobuf_oneof:"override_specifier"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *RateLimit_Override) Reset() {
	*x = RateLimit_Override{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[47]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Override) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Override) ProtoMessage() {}

func (x *RateLimit_Override) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[47]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Override.ProtoReflect.Descriptor instead.
func (*RateLimit_Override) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 1}
}

func (x *RateLimit_Override) GetOverrideSpecifier() isRateLimit_Override_OverrideSpecifier {
	if x != nil {
		return x.OverrideSpecifier
	}
	return nil
}

func (x *RateLimit_Override) GetDynamicMetadata() *RateLimit_Override_DynamicMetadata {
	if x != nil {
		if x, ok := x.OverrideSpecifier.(*RateLimit_Override_DynamicMetadata_); ok {
			return x.DynamicMetadata
		}
	}
	return nil
}

func (x *RateLimit_Override) GetRateLimit() *RateLimit_Override_RateLimitOverride {
	if x != nil {
		if x, ok := x.OverrideSpecifier.(*RateLimit_Override_RateLimit); ok {
			return x.RateLimit
		}
	}
	return nil
}

type isRateLimit_Override_OverrideSpecifier interface {
	isRateLimit_Override_OverrideSpecifier()
}

type RateLimit_Override_DynamicMetadata_ struct {
	// Limit override from dynamic metadata.
	DynamicMetadata *RateLimit_Override_DynamicMetadata `protobuf:"bytes,1,opt,name=dynamic_metadata,json=dynamicMetadata,proto3,oneof"`
}

type RateLimit_Override_RateLimit struct {
	// Static limit override.
	RateLimit *RateLimit_Override_RateLimitOverride `protobuf:"bytes,2,opt,name=rate_limit,json=rateLimit,proto3,oneof"`
}

func (*RateLimit_Override_DynamicMetadata_) isRateLimit_Override_OverrideSpecifier() {}

func (*RateLimit_Override_RateLimit) isRateLimit_Override_OverrideSpecifier() {}

type RateLimit_HitsAddend struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Fixed number of hits to add to the rate limit descriptor.
	//
	// One of the “number“ or “format“ fields should be set but not both.
	Number *wrapperspb.UInt64Value `protobuf:"bytes,1,opt,name=number,proto3" json:"number,omitempty"`
	// Substitution format string to extract the number of hits to add to the rate limit descriptor.
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here.
	//
	// .. note::
	//
	//	The format string must contains only single valid substitution field. If the format string
	//	not meets the requirement, the configuration will be rejected.
	//
	//	The substitution field should generates a non-negative number or string representation of
	//	a non-negative number. The value of the non-negative number should be less than or equal
	//	to 1000000000 like the ``number`` field. If the output of the substitution field not meet
	//	the requirement, this will be treated as an error and the current descriptor will be ignored.
	//
	// For example, the “%BYTES_RECEIVED%“ format string will be replaced with the number of bytes
	// received in the request.
	//
	// One of the “number“ or “format“ fields should be set but not both.
	Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"`
	// If true, the hits addend value will be treated as negative, effectively adding to
	// the rate limit budget instead of consuming from it. This can be used to refill previously consumed
	// rate limit tokens.
	IsNegativeHits bool `protobuf:"varint,3,opt,name=is_negative_hits,json=isNegativeHits,proto3" json:"is_negative_hits,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *RateLimit_HitsAddend) Reset() {
	*x = RateLimit_HitsAddend{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[48]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_HitsAddend) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_HitsAddend) ProtoMessage() {}

func (x *RateLimit_HitsAddend) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[48]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_HitsAddend.ProtoReflect.Descriptor instead.
func (*RateLimit_HitsAddend) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 2}
}

func (x *RateLimit_HitsAddend) GetNumber() *wrapperspb.UInt64Value {
	if x != nil {
		return x.Number
	}
	return nil
}

func (x *RateLimit_HitsAddend) GetFormat() string {
	if x != nil {
		return x.Format
	}
	return ""
}

func (x *RateLimit_HitsAddend) GetIsNegativeHits() bool {
	if x != nil {
		return x.IsNegativeHits
	}
	return false
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("source_cluster", "<local service cluster>")
//
// <local service cluster> is derived from the :option:`--service-cluster` option.
type RateLimit_Action_SourceCluster struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_SourceCluster) Reset() {
	*x = RateLimit_Action_SourceCluster{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[49]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_SourceCluster) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_SourceCluster) ProtoMessage() {}

func (x *RateLimit_Action_SourceCluster) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[49]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_SourceCluster.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_SourceCluster) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 0}
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("destination_cluster", "<routed target cluster>")
//
// Once a request matches against a route table rule, a routed cluster is determined by one of
// the following :ref:`route table configuration <envoy_v3_api_msg_config.route.v3.RouteConfiguration>`
// settings:
//
//   - :ref:`cluster <envoy_v3_api_field_config.route.v3.RouteAction.cluster>` indicates the upstream cluster
//     to route to.
//   - :ref:`weighted_clusters <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>`
//     chooses a cluster randomly from a set of clusters with attributed weight.
//   - :ref:`cluster_header <envoy_v3_api_field_config.route.v3.RouteAction.cluster_header>` indicates which
//     header in the request contains the target cluster.
type RateLimit_Action_DestinationCluster struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_DestinationCluster) Reset() {
	*x = RateLimit_Action_DestinationCluster{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[50]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_DestinationCluster) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_DestinationCluster) ProtoMessage() {}

func (x *RateLimit_Action_DestinationCluster) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[50]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_DestinationCluster.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_DestinationCluster) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 1}
}

// The following descriptor entry is appended when a header contains a key that matches the
// “header_name“:
//
// .. code-block:: cpp
//
//	("<descriptor_key>", "<header_value_queried_from_header>")
type RateLimit_Action_RequestHeaders struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The header name to be queried from the request headers. The header’s
	// value is used to populate the value of the descriptor entry for the
	// descriptor_key.
	HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"`
	// The key to use in the descriptor entry.
	DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// Controls the behavior when the specified header is not present in the request.
	//
	// If set to “false“ (default):
	//
	// * Envoy does **NOT** call the rate limiting service for this descriptor.
	// * Useful if the header is optional and you prefer to skip rate limiting when it's absent.
	//
	// If set to “true“:
	//
	// * Envoy calls the rate limiting service but omits this descriptor if the header is missing.
	// * Useful if you want Envoy to enforce rate limiting even when the header is not present.
	SkipIfAbsent  bool `protobuf:"varint,3,opt,name=skip_if_absent,json=skipIfAbsent,proto3" json:"skip_if_absent,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_RequestHeaders) Reset() {
	*x = RateLimit_Action_RequestHeaders{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[51]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_RequestHeaders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_RequestHeaders) ProtoMessage() {}

func (x *RateLimit_Action_RequestHeaders) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[51]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_RequestHeaders.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_RequestHeaders) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 2}
}

func (x *RateLimit_Action_RequestHeaders) GetHeaderName() string {
	if x != nil {
		return x.HeaderName
	}
	return ""
}

func (x *RateLimit_Action_RequestHeaders) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_RequestHeaders) GetSkipIfAbsent() bool {
	if x != nil {
		return x.SkipIfAbsent
	}
	return false
}

// The following descriptor entry is appended when a query parameter contains a key that matches the
// “query_parameter_name“:
//
// .. code-block:: cpp
//
//	("<descriptor_key>", "<query_parameter_value_queried_from_query_parameter>")
type RateLimit_Action_QueryParameters struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the query parameter to use for rate limiting. Value of this query parameter is used to populate
	// the value of the descriptor entry for the descriptor_key.
	QueryParameterName string `protobuf:"bytes,1,opt,name=query_parameter_name,json=queryParameterName,proto3" json:"query_parameter_name,omitempty"`
	// The key to use when creating the rate limit descriptor entry. This descriptor key will be used to identify the
	// rate limit rule in the rate limiting service.
	DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// Controls the behavior when the specified query parameter is not present in the request.
	//
	// If set to “false“ (default):
	//
	// * Envoy does **NOT** call the rate limiting service for this descriptor.
	// * Useful if the query parameter is optional and you prefer to skip rate limiting when it's absent.
	//
	// If set to “true“:
	//
	// * Envoy calls the rate limiting service but omits this descriptor if the query parameter is missing.
	// * Useful if you want Envoy to enforce rate limiting even when the query parameter is not present.
	SkipIfAbsent  bool `protobuf:"varint,3,opt,name=skip_if_absent,json=skipIfAbsent,proto3" json:"skip_if_absent,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_QueryParameters) Reset() {
	*x = RateLimit_Action_QueryParameters{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[52]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_QueryParameters) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_QueryParameters) ProtoMessage() {}

func (x *RateLimit_Action_QueryParameters) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[52]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_QueryParameters.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_QueryParameters) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 3}
}

func (x *RateLimit_Action_QueryParameters) GetQueryParameterName() string {
	if x != nil {
		return x.QueryParameterName
	}
	return ""
}

func (x *RateLimit_Action_QueryParameters) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_QueryParameters) GetSkipIfAbsent() bool {
	if x != nil {
		return x.SkipIfAbsent
	}
	return false
}

// The following descriptor entry is appended to the descriptor and is populated using the
// trusted address from :ref:`x-forwarded-for <config_http_conn_man_headers_x-forwarded-for>`:
//
// .. code-block:: cpp
//
//	("remote_address", "<trusted address from x-forwarded-for>")
type RateLimit_Action_RemoteAddress struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_RemoteAddress) Reset() {
	*x = RateLimit_Action_RemoteAddress{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[53]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_RemoteAddress) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_RemoteAddress) ProtoMessage() {}

func (x *RateLimit_Action_RemoteAddress) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[53]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_RemoteAddress.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_RemoteAddress) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 4}
}

// The following descriptor entry is appended to the descriptor and is populated using the
// masked address from :ref:`x-forwarded-for <config_http_conn_man_headers_x-forwarded-for>`:
//
// .. code-block:: cpp
//
//	("masked_remote_address", "<masked address from x-forwarded-for>")
type RateLimit_Action_MaskedRemoteAddress struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Length of prefix mask len for IPv4 (e.g. 0, 32).
	//
	// Defaults to 32 when unset.
	//
	// For example, trusted address from x-forwarded-for is “192.168.1.1“,
	// the descriptor entry is ("masked_remote_address", "192.168.1.1/32");
	// if mask len is 24, the descriptor entry is ("masked_remote_address", "192.168.1.0/24").
	V4PrefixMaskLen *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=v4_prefix_mask_len,json=v4PrefixMaskLen,proto3" json:"v4_prefix_mask_len,omitempty"`
	// Length of prefix mask len for IPv6 (e.g. 0, 128).
	//
	// Defaults to 128 when unset.
	//
	// For example, trusted address from x-forwarded-for is “2001:abcd:ef01:2345:6789:abcd:ef01:234“,
	// the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345:6789:abcd:ef01:234/128");
	// if mask len is 64, the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345::/64").
	V6PrefixMaskLen *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=v6_prefix_mask_len,json=v6PrefixMaskLen,proto3" json:"v6_prefix_mask_len,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *RateLimit_Action_MaskedRemoteAddress) Reset() {
	*x = RateLimit_Action_MaskedRemoteAddress{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[54]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_MaskedRemoteAddress) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_MaskedRemoteAddress) ProtoMessage() {}

func (x *RateLimit_Action_MaskedRemoteAddress) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[54]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_MaskedRemoteAddress.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_MaskedRemoteAddress) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 5}
}

func (x *RateLimit_Action_MaskedRemoteAddress) GetV4PrefixMaskLen() *wrapperspb.UInt32Value {
	if x != nil {
		return x.V4PrefixMaskLen
	}
	return nil
}

func (x *RateLimit_Action_MaskedRemoteAddress) GetV6PrefixMaskLen() *wrapperspb.UInt32Value {
	if x != nil {
		return x.V6PrefixMaskLen
	}
	return nil
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("generic_key", "<descriptor_value>")
type RateLimit_Action_GenericKey struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Descriptor value of entry.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// .. note::
	//
	//	Formatter parsing is controlled by the runtime feature flag
	//	``envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value``
	//	(disabled by default).
	//
	//	When enabled: The format string can contain multiple valid substitution
	//	fields. If multiple substitution fields are present, their results will be concatenated
	//	to form the final descriptor value. If it contains no substitution fields, the value
	//	will be used as is. If the final concatenated result is empty and ``default_value`` is set,
	//	the ``default_value`` will be used. If ``default_value`` is not set and the result is
	//	empty, this descriptor will be skipped and not included in the rate limit call.
	//
	//	When disabled (default): The descriptor_value is used as a literal string without any formatter
	//	parsing or substitution.
	//
	// For example, “static_value“ will be used as is since there are no substitution fields.
	// “%REQ(:method)%“ will be replaced with the HTTP method, and
	// “%REQ(:method)%%REQ(:path)%“ will be replaced with the concatenation of the HTTP method and path.
	// “%CEL(request.headers['user-id'])%“ will use CEL to extract the user ID from request headers.
	DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	// An optional value to use if the final concatenated “descriptor_value“ result is empty.
	// Only applicable when formatter parsing is enabled by the runtime feature flag
	// “envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value“ (disabled by default).
	DefaultValue string `protobuf:"bytes,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// An optional key to use in the descriptor entry. If not set it defaults
	// to 'generic_key' as the descriptor key.
	DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_GenericKey) Reset() {
	*x = RateLimit_Action_GenericKey{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[55]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_GenericKey) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_GenericKey) ProtoMessage() {}

func (x *RateLimit_Action_GenericKey) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[55]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_GenericKey.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_GenericKey) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 6}
}

func (x *RateLimit_Action_GenericKey) GetDescriptorValue() string {
	if x != nil {
		return x.DescriptorValue
	}
	return ""
}

func (x *RateLimit_Action_GenericKey) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

func (x *RateLimit_Action_GenericKey) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("header_match", "<descriptor_value>")
//
// [#next-free-field: 6]
type RateLimit_Action_HeaderValueMatch struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Descriptor value of entry.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// .. note::
	//
	//	Formatter parsing is controlled by the runtime feature flag
	//	``envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value``
	//	(disabled by default).
	//
	//	When enabled: The format string can contain multiple valid substitution
	//	fields. If multiple substitution fields are present, their results will be concatenated
	//	to form the final descriptor value. If it contains no substitution fields, the value
	//	will be used as is. All substitution fields will be evaluated and their results
	//	concatenated. If the final concatenated result is empty and ``default_value`` is set,
	//	the ``default_value`` will be used. If ``default_value`` is not set and the result is
	//	empty, this descriptor will be skipped and not included in the rate limit call.
	//
	//	When disabled (default): The descriptor_value is used as a literal string without any formatter
	//	parsing or substitution.
	//
	// For example, “static_value“ will be used as is since there are no substitution fields.
	// “%REQ(:method)%“ will be replaced with the HTTP method, and
	// “%REQ(:method)%%REQ(:path)%“ will be replaced with the concatenation of the HTTP method and path.
	// “%CEL(request.headers['user-id'])%“ will use CEL to extract the user ID from request headers.
	DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	// An optional value to use if the final concatenated “descriptor_value“ result is empty.
	// Only applicable when formatter parsing is enabled by the runtime feature flag
	// “envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value“ (disabled by default).
	DefaultValue string `protobuf:"bytes,5,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// The key to use in the descriptor entry.
	//
	// Defaults to “header_match“.
	DescriptorKey string `protobuf:"bytes,4,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// If set to true, the action will append a descriptor entry when the
	// request matches the headers. If set to false, the action will append a
	// descriptor entry when the request does not match the headers. The
	// default value is true.
	ExpectMatch *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=expect_match,json=expectMatch,proto3" json:"expect_match,omitempty"`
	// Specifies a set of headers that the rate limit action should match
	// on. The action will check the request's headers against all the
	// specified headers in the config. A match will happen if all the
	// headers in the config are present in the request with the same values
	// (or based on presence if the value field is not in the config).
	Headers       []*HeaderMatcher `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_HeaderValueMatch) Reset() {
	*x = RateLimit_Action_HeaderValueMatch{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[56]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_HeaderValueMatch) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_HeaderValueMatch) ProtoMessage() {}

func (x *RateLimit_Action_HeaderValueMatch) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[56]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_HeaderValueMatch.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_HeaderValueMatch) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 7}
}

func (x *RateLimit_Action_HeaderValueMatch) GetDescriptorValue() string {
	if x != nil {
		return x.DescriptorValue
	}
	return ""
}

func (x *RateLimit_Action_HeaderValueMatch) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

func (x *RateLimit_Action_HeaderValueMatch) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_HeaderValueMatch) GetExpectMatch() *wrapperspb.BoolValue {
	if x != nil {
		return x.ExpectMatch
	}
	return nil
}

func (x *RateLimit_Action_HeaderValueMatch) GetHeaders() []*HeaderMatcher {
	if x != nil {
		return x.Headers
	}
	return nil
}

// The following descriptor entry is appended when the
// :ref:`dynamic metadata <well_known_dynamic_metadata>` contains a key value:
//
// .. code-block:: cpp
//
//	("<descriptor_key>", "<value_queried_from_dynamic_metadata>")
//
// .. attention::
//
//	This action has been deprecated in favor of the :ref:`metadata <envoy_v3_api_msg_config.route.v3.RateLimit.Action.MetaData>` action
type RateLimit_Action_DynamicMetaData struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The key to use in the descriptor entry.
	DescriptorKey string `protobuf:"bytes,1,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// Metadata struct that defines the key and path to retrieve the string value. A match will
	// only happen if the value in the dynamic metadata is of type string.
	MetadataKey *v36.MetadataKey `protobuf:"bytes,2,opt,name=metadata_key,json=metadataKey,proto3" json:"metadata_key,omitempty"`
	// An optional value to use if “metadata_key“ is empty. If not set and
	// no value is present under the metadata_key then no descriptor is generated.
	DefaultValue  string `protobuf:"bytes,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_DynamicMetaData) Reset() {
	*x = RateLimit_Action_DynamicMetaData{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[57]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_DynamicMetaData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_DynamicMetaData) ProtoMessage() {}

func (x *RateLimit_Action_DynamicMetaData) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[57]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_DynamicMetaData.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_DynamicMetaData) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 8}
}

func (x *RateLimit_Action_DynamicMetaData) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_DynamicMetaData) GetMetadataKey() *v36.MetadataKey {
	if x != nil {
		return x.MetadataKey
	}
	return nil
}

func (x *RateLimit_Action_DynamicMetaData) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

// The following descriptor entry is appended when the metadata contains a key value:
//
// .. code-block:: cpp
//
//	("<descriptor_key>", "<value_queried_from_metadata>")
//
// [#next-free-field: 6]
type RateLimit_Action_MetaData struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The key to use in the descriptor entry.
	DescriptorKey string `protobuf:"bytes,1,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// Metadata struct that defines the key and path to retrieve the string value. A match will
	// only happen if the value in the metadata is of type string.
	MetadataKey *v36.MetadataKey `protobuf:"bytes,2,opt,name=metadata_key,json=metadataKey,proto3" json:"metadata_key,omitempty"`
	// An optional value to use if “metadata_key“ is empty. If not set and
	// no value is present under the metadata_key then “skip_if_absent“ is followed to
	// skip calling the rate limiting service or skip the descriptor.
	DefaultValue string `protobuf:"bytes,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// Source of metadata
	Source RateLimit_Action_MetaData_Source `protobuf:"varint,4,opt,name=source,proto3,enum=envoy.config.route.v3.RateLimit_Action_MetaData_Source" json:"source,omitempty"`
	// Controls the behavior when the specified “metadata_key“ is empty and “default_value“ is not set.
	//
	// If set to “false“ (default):
	//
	// * Envoy does **NOT** call the rate limiting service for this descriptor.
	// * Useful if the metadata is optional and you prefer to skip rate limiting when it's absent.
	//
	// If set to “true“:
	//
	//   - Envoy calls the rate limiting service but omits this descriptor if the “metadata_key“ is empty and
	//     “default_value“ is missing.
	//   - Useful if you want Envoy to enforce rate limiting even when the metadata is not present.
	SkipIfAbsent  bool `protobuf:"varint,5,opt,name=skip_if_absent,json=skipIfAbsent,proto3" json:"skip_if_absent,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Action_MetaData) Reset() {
	*x = RateLimit_Action_MetaData{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[58]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_MetaData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_MetaData) ProtoMessage() {}

func (x *RateLimit_Action_MetaData) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[58]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_MetaData.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_MetaData) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 9}
}

func (x *RateLimit_Action_MetaData) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_MetaData) GetMetadataKey() *v36.MetadataKey {
	if x != nil {
		return x.MetadataKey
	}
	return nil
}

func (x *RateLimit_Action_MetaData) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

func (x *RateLimit_Action_MetaData) GetSource() RateLimit_Action_MetaData_Source {
	if x != nil {
		return x.Source
	}
	return RateLimit_Action_MetaData_DYNAMIC
}

func (x *RateLimit_Action_MetaData) GetSkipIfAbsent() bool {
	if x != nil {
		return x.SkipIfAbsent
	}
	return false
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("query_match", "<descriptor_value>")
//
// [#next-free-field: 6]
type RateLimit_Action_QueryParameterValueMatch struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Descriptor value of entry.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// .. note::
	//
	//	Formatter parsing is controlled by the runtime feature flag
	//	``envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value``
	//	(disabled by default).
	//
	//	When enabled: The format string can contain multiple valid substitution
	//	fields. If multiple substitution fields are present, their results will be concatenated
	//	to form the final descriptor value. If it contains no substitution fields, the value
	//	will be used as is. All substitution fields will be evaluated and their results
	//	concatenated. If the final concatenated result is empty and ``default_value`` is set,
	//	the ``default_value`` will be used. If ``default_value`` is not set and the result is
	//	empty, this descriptor will be skipped and not included in the rate limit call.
	//
	//	When disabled (default): The descriptor_value is used as a literal string without any formatter
	//	parsing or substitution.
	//
	// For example, “static_value“ will be used as is since there are no substitution fields.
	// “%REQ(:method)%“ will be replaced with the HTTP method, and
	// “%REQ(:method)%%REQ(:path)%“ will be replaced with the concatenation of the HTTP method and path.
	// “%CEL(request.headers['user-id'])%“ will use CEL to extract the user ID from request headers.
	DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	// An optional value to use if the final concatenated “descriptor_value“ result is empty.
	// Only applicable when formatter parsing is enabled by the runtime feature flag
	// “envoy.reloadable_features.enable_formatter_for_ratelimit_action_descriptor_value“ (disabled by default).
	DefaultValue string `protobuf:"bytes,5,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// The key to use in the descriptor entry.
	//
	// Defaults to “query_match“.
	DescriptorKey string `protobuf:"bytes,4,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// If set to true, the action will append a descriptor entry when the
	// request matches the headers. If set to false, the action will append a
	// descriptor entry when the request does not match the headers. The
	// default value is true.
	ExpectMatch *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=expect_match,json=expectMatch,proto3" json:"expect_match,omitempty"`
	// Specifies a set of query parameters that the rate limit action should match
	// on. The action will check the request's query parameters against all the
	// specified query parameters in the config. A match will happen if all the
	// query parameters in the config are present in the request with the same values
	// (or based on presence if the value field is not in the config).
	QueryParameters []*QueryParameterMatcher `protobuf:"bytes,3,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *RateLimit_Action_QueryParameterValueMatch) Reset() {
	*x = RateLimit_Action_QueryParameterValueMatch{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[59]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_QueryParameterValueMatch) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_QueryParameterValueMatch) ProtoMessage() {}

func (x *RateLimit_Action_QueryParameterValueMatch) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[59]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_QueryParameterValueMatch.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_QueryParameterValueMatch) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 10}
}

func (x *RateLimit_Action_QueryParameterValueMatch) GetDescriptorValue() string {
	if x != nil {
		return x.DescriptorValue
	}
	return ""
}

func (x *RateLimit_Action_QueryParameterValueMatch) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

func (x *RateLimit_Action_QueryParameterValueMatch) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_QueryParameterValueMatch) GetExpectMatch() *wrapperspb.BoolValue {
	if x != nil {
		return x.ExpectMatch
	}
	return nil
}

func (x *RateLimit_Action_QueryParameterValueMatch) GetQueryParameters() []*QueryParameterMatcher {
	if x != nil {
		return x.QueryParameters
	}
	return nil
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//	("remote_address_match", "<descriptor_value>")
type RateLimit_Action_RemoteAddressMatch struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Descriptor value of entry.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown specifier values are replaced with the empty string instead of “-“.
	//
	// .. note::
	//
	//	The format string can contain multiple valid substitution fields. If multiple
	//	substitution fields are present, their results will be concatenated to form the
	//	final descriptor value. If it contains no substitution fields, the value will be
	//	used as is. All substitution fields will be evaluated and their results concatenated.
	//	If the final concatenated result is empty and ``default_value`` is set, the
	//	``default_value`` will be used. If ``default_value`` is not set and the result is
	//	empty, this descriptor will be skipped and not included in the rate limit call.
	//
	// For example, “static_value“ will be used as is since there are no substitution fields.
	// “%REQ(:method)%“ will be replaced with the HTTP method, and
	// “%REQ(:method)%%REQ(:path)%“ will be replaced with the concatenation of the HTTP method and path.
	// “%CEL(request.headers['user-id'])%“ will use CEL to extract the user ID from request headers.
	DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	// The key to use in the descriptor entry.
	//
	// Defaults to “remote_address_match“.
	DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	// An optional value to use if the final concatenated “descriptor_value“ result is empty.
	DefaultValue string `protobuf:"bytes,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// Specifies an address matcher that controls whether the rate limit action is applied.
	// The matcher checks the remote address (trusted address from
	// :ref:`x-forwarded-for <config_http_conn_man_headers_x-forwarded-for>`)
	// against the specified CIDR ranges. The rate limit action will be applied if
	// the remote address matches any of the CIDR ranges (or does not match any if
	// “invert_match“ is set to true in the address matcher).
	AddressMatcher *v32.AddressMatcher `protobuf:"bytes,4,opt,name=address_matcher,json=addressMatcher,proto3" json:"address_matcher,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *RateLimit_Action_RemoteAddressMatch) Reset() {
	*x = RateLimit_Action_RemoteAddressMatch{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[60]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Action_RemoteAddressMatch) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Action_RemoteAddressMatch) ProtoMessage() {}

func (x *RateLimit_Action_RemoteAddressMatch) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[60]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Action_RemoteAddressMatch.ProtoReflect.Descriptor instead.
func (*RateLimit_Action_RemoteAddressMatch) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 0, 11}
}

func (x *RateLimit_Action_RemoteAddressMatch) GetDescriptorValue() string {
	if x != nil {
		return x.DescriptorValue
	}
	return ""
}

func (x *RateLimit_Action_RemoteAddressMatch) GetDescriptorKey() string {
	if x != nil {
		return x.DescriptorKey
	}
	return ""
}

func (x *RateLimit_Action_RemoteAddressMatch) GetDefaultValue() string {
	if x != nil {
		return x.DefaultValue
	}
	return ""
}

func (x *RateLimit_Action_RemoteAddressMatch) GetAddressMatcher() *v32.AddressMatcher {
	if x != nil {
		return x.AddressMatcher
	}
	return nil
}

// Fetches the override from the dynamic metadata.
type RateLimit_Override_DynamicMetadata struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Metadata struct that defines the key and path to retrieve the struct value.
	// The value must be a struct containing an integer "requests_per_unit" property
	// and a "unit" property with a value parseable to :ref:`RateLimitUnit
	// enum <envoy_v3_api_enum_type.v3.RateLimitUnit>`
	MetadataKey   *v36.MetadataKey `protobuf:"bytes,1,opt,name=metadata_key,json=metadataKey,proto3" json:"metadata_key,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Override_DynamicMetadata) Reset() {
	*x = RateLimit_Override_DynamicMetadata{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[61]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Override_DynamicMetadata) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Override_DynamicMetadata) ProtoMessage() {}

func (x *RateLimit_Override_DynamicMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[61]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Override_DynamicMetadata.ProtoReflect.Descriptor instead.
func (*RateLimit_Override_DynamicMetadata) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 1, 0}
}

func (x *RateLimit_Override_DynamicMetadata) GetMetadataKey() *v36.MetadataKey {
	if x != nil {
		return x.MetadataKey
	}
	return nil
}

// Rate limit to apply to this descriptor.
type RateLimit_Override_RateLimitOverride struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The number of requests per unit of time.
	RequestsPerUnit uint32 `protobuf:"varint,1,opt,name=requests_per_unit,json=requestsPerUnit,proto3" json:"requests_per_unit,omitempty"`
	// The unit of time.
	Unit          v33.RateLimitUnit `protobuf:"varint,2,opt,name=unit,proto3,enum=envoy.type.v3.RateLimitUnit" json:"unit,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RateLimit_Override_RateLimitOverride) Reset() {
	*x = RateLimit_Override_RateLimitOverride{}
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[62]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RateLimit_Override_RateLimitOverride) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RateLimit_Override_RateLimitOverride) ProtoMessage() {}

func (x *RateLimit_Override_RateLimitOverride) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_config_route_v3_route_components_proto_msgTypes[62]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RateLimit_Override_RateLimitOverride.ProtoReflect.Descriptor instead.
func (*RateLimit_Override_RateLimitOverride) Descriptor() ([]byte, []int) {
	return file_envoy_config_route_v3_route_components_proto_rawDescGZIP(), []int{17, 1, 1}
}

func (x *RateLimit_Override_RateLimitOverride) GetRequestsPerUnit() uint32 {
	if x != nil {
		return x.RequestsPerUnit
	}
	return 0
}

func (x *RateLimit_Override_RateLimitOverride) GetUnit() v33.RateLimitUnit {
	if x != nil {
		return x.Unit
	}
	return v33.RateLimitUnit(0)
}

var File_envoy_config_route_v3_route_components_proto protoreflect.FileDescriptor

const file_envoy_config_route_v3_route_components_proto_rawDesc = "" +
	"\n" +
	",envoy/config/route/v3/route_components.proto\x12\x15envoy.config.route.v3\x1a:envoy/config/common/mutation_rules/v3/mutation_rules.proto\x1a\x1fenvoy/config/core/v3/base.proto\x1a$envoy/config/core/v3/extension.proto\x1a)envoy/config/core/v3/proxy_protocol.proto\x1a5envoy/config/core/v3/substitution_format_string.proto\x1a#envoy/type/matcher/v3/address.proto\x1a(envoy/type/matcher/v3/filter_state.proto\x1a$envoy/type/matcher/v3/metadata.proto\x1a!envoy/type/matcher/v3/regex.proto\x1a\"envoy/type/matcher/v3/string.proto\x1a%envoy/type/metadata/v3/metadata.proto\x1a&envoy/type/tracing/v3/custom_tag.proto\x1a\x1benvoy/type/v3/percent.proto\x1a\x19envoy/type/v3/range.proto\x1a\"envoy/type/v3/ratelimit_unit.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a!xds/type/matcher/v3/matcher.proto\x1a#envoy/annotations/deprecation.proto\x1a\x1eudpa/annotations/migrate.proto\x1a\x1dudpa/annotations/status.proto\x1a!udpa/annotations/versioning.proto\x1a\x17validate/validate.proto\"\xad\x10\n" +
	"\vVirtualHost\x12\x1b\n" +
	"\x04name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name\x12,\n" +
	"\adomains\x18\x02 \x03(\tB\x12\xfaB\x0f\x92\x01\f\b\x01\"\br\x06\xc8\x01\x00\xc0\x01\x02R\adomains\x12M\n" +
	"\x06routes\x18\x03 \x03(\v2\x1c.envoy.config.route.v3.RouteB\x17\xf2\x98\xfe\x8f\x05\x11\x12\x0froute_selectionR\x06routes\x12O\n" +
	"\amatcher\x18\x15 \x01(\v2\x1c.xds.type.matcher.v3.MatcherB\x17\xf2\x98\xfe\x8f\x05\x11\x12\x0froute_selectionR\amatcher\x12`\n" +
	"\vrequire_tls\x18\x04 \x01(\x0e25.envoy.config.route.v3.VirtualHost.TlsRequirementTypeB\b\xfaB\x05\x82\x01\x02\x10\x01R\n" +
	"requireTls\x12P\n" +
	"\x10virtual_clusters\x18\x05 \x03(\v2%.envoy.config.route.v3.VirtualClusterR\x0fvirtualClusters\x12A\n" +
	"\vrate_limits\x18\x06 \x03(\v2 .envoy.config.route.v3.RateLimitR\n" +
	"rateLimits\x12g\n" +
	"\x16request_headers_to_add\x18\a \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x13requestHeadersToAdd\x12M\n" +
	"\x19request_headers_to_remove\x18\r \x03(\tB\x12\xfaB\x0f\x92\x01\f\"\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x16requestHeadersToRemove\x12i\n" +
	"\x17response_headers_to_add\x18\n" +
	" \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x14responseHeadersToAdd\x12O\n" +
	"\x1aresponse_headers_to_remove\x18\v \x03(\tB\x12\xfaB\x0f\x92\x01\f\"\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x17responseHeadersToRemove\x12B\n" +
	"\x04cors\x18\b \x01(\v2!.envoy.config.route.v3.CorsPolicyB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x04cors\x12s\n" +
	"\x17typed_per_filter_config\x18\x0f \x03(\v2<.envoy.config.route.v3.VirtualHost.TypedPerFilterConfigEntryR\x14typedPerFilterConfig\x12A\n" +
	"\x1dinclude_request_attempt_count\x18\x0e \x01(\bR\x1aincludeRequestAttemptCount\x12H\n" +
	"!include_attempt_count_in_response\x18\x13 \x01(\bR\x1dincludeAttemptCountInResponse\x12E\n" +
	"\fretry_policy\x18\x10 \x01(\v2\".envoy.config.route.v3.RetryPolicyR\vretryPolicy\x12O\n" +
	"\x19retry_policy_typed_config\x18\x14 \x01(\v2\x14.google.protobuf.AnyR\x16retryPolicyTypedConfig\x12E\n" +
	"\fhedge_policy\x18\x11 \x01(\v2\".envoy.config.route.v3.HedgePolicyR\vhedgePolicy\x12D\n" +
	"\x1finclude_is_timeout_retry_header\x18\x17 \x01(\bR\x1bincludeIsTimeoutRetryHeader\x12m\n" +
	"\x1eper_request_buffer_limit_bytes\x18\x12 \x01(\v2\x1c.google.protobuf.UInt32ValueB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x1aperRequestBufferLimitBytes\x12a\n" +
	"\x19request_body_buffer_limit\x18\x19 \x01(\v2\x1c.google.protobuf.UInt64ValueB\b\xfaB\x05\x8a\x01\x02\x10\x00R\x16requestBodyBufferLimit\x12n\n" +
	"\x17request_mirror_policies\x18\x16 \x03(\v26.envoy.config.route.v3.RouteAction.RequestMirrorPolicyR\x15requestMirrorPolicies\x12:\n" +
	"\bmetadata\x18\x18 \x01(\v2\x1e.envoy.config.core.v3.MetadataR\bmetadata\x1a]\n" +
	"\x19TypedPerFilterConfigEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12*\n" +
	"\x05value\x18\x02 \x01(\v2\x14.google.protobuf.AnyR\x05value:\x028\x01\":\n" +
	"\x12TlsRequirementType\x12\b\n" +
	"\x04NONE\x10\x00\x12\x11\n" +
	"\rEXTERNAL_ONLY\x10\x01\x12\a\n" +
	"\x03ALL\x10\x02:%\x9aň\x1e \n" +
	"\x1eenvoy.api.v2.route.VirtualHostJ\x04\b\t\x10\n" +
	"J\x04\b\f\x10\rR\x11per_filter_config\"d\n" +
	"\fFilterAction\x12,\n" +
	"\x06action\x18\x01 \x01(\v2\x14.google.protobuf.AnyR\x06action:&\x9aň\x1e!\n" +
	"\x1fenvoy.api.v2.route.FilterAction\"A\n" +
	"\tRouteList\x124\n" +
	"\x06routes\x18\x01 \x03(\v2\x1c.envoy.config.route.v3.RouteR\x06routes\"\x95\f\n" +
	"\x05Route\x12\x12\n" +
	"\x04name\x18\x0e \x01(\tR\x04name\x12A\n" +
	"\x05match\x18\x01 \x01(\v2!.envoy.config.route.v3.RouteMatchB\b\xfaB\x05\x8a\x01\x02\x10\x01R\x05match\x12:\n" +
	"\x05route\x18\x02 \x01(\v2\".envoy.config.route.v3.RouteActionH\x00R\x05route\x12C\n" +
	"\bredirect\x18\x03 \x01(\v2%.envoy.config.route.v3.RedirectActionH\x00R\bredirect\x12V\n" +
	"\x0fdirect_response\x18\a \x01(\v2+.envoy.config.route.v3.DirectResponseActionH\x00R\x0edirectResponse\x12J\n" +
	"\rfilter_action\x18\x11 \x01(\v2#.envoy.config.route.v3.FilterActionH\x00R\ffilterAction\x12`\n" +
	"\x15non_forwarding_action\x18\x12 \x01(\v2*.envoy.config.route.v3.NonForwardingActionH\x00R\x13nonForwardingAction\x12:\n" +
	"\bmetadata\x18\x04 \x01(\v2\x1e.envoy.config.core.v3.MetadataR\bmetadata\x12>\n" +
	"\tdecorator\x18\x05 \x01(\v2 .envoy.config.route.v3.DecoratorR\tdecorator\x12m\n" +
	"\x17typed_per_filter_config\x18\r \x03(\v26.envoy.config.route.v3.Route.TypedPerFilterConfigEntryR\x14typedPerFilterConfig\x12g\n" +
	"\x16request_headers_to_add\x18\t \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x13requestHeadersToAdd\x12M\n" +
	"\x19request_headers_to_remove\x18\f \x03(\tB\x12\xfaB\x0f\x92\x01\f\"\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x16requestHeadersToRemove\x12i\n" +
	"\x17response_headers_to_add\x18\n" +
	" \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x14responseHeadersToAdd\x12O\n" +
	"\x1aresponse_headers_to_remove\x18\v \x03(\tB\x12\xfaB\x0f\x92\x01\f\"\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x17responseHeadersToRemove\x128\n" +
	"\atracing\x18\x0f \x01(\v2\x1e.envoy.config.route.v3.TracingR\atracing\x12m\n" +
	"\x1eper_request_buffer_limit_bytes\x18\x10 \x01(\v2\x1c.google.protobuf.UInt32ValueB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x1aperRequestBufferLimitBytes\x12\x1f\n" +
	"\vstat_prefix\x18\x13 \x01(\tR\n" +
	"statPrefix\x12W\n" +
	"\x19request_body_buffer_limit\x18\x14 \x01(\v2\x1c.google.protobuf.UInt64ValueR\x16requestBodyBufferLimit\x1a]\n" +
	"\x19TypedPerFilterConfigEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12*\n" +
	"\x05value\x18\x02 \x01(\v2\x14.google.protobuf.AnyR\x05value:\x028\x01:\x1f\x9aň\x1e\x1a\n" +
	"\x18envoy.api.v2.route.RouteB\r\n" +
	"\x06action\x12\x03\xf8B\x01J\x04\b\x06\x10\aJ\x04\b\b\x10\tR\x11per_filter_config\"\xb9\v\n" +
	"\x0fWeightedCluster\x12Z\n" +
	"\bclusters\x18\x01 \x03(\v24.envoy.config.route.v3.WeightedCluster.ClusterWeightB\b\xfaB\x05\x92\x01\x02\b\x01R\bclusters\x12L\n" +
	"\ftotal_weight\x18\x03 \x01(\v2\x1c.google.protobuf.UInt32ValueB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\vtotalWeight\x12,\n" +
	"\x12runtime_key_prefix\x18\x02 \x01(\tR\x10runtimeKeyPrefix\x12.\n" +
	"\vheader_name\x18\x04 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x01H\x00R\n" +
	"headerName\x12D\n" +
	"\x0fuse_hash_policy\x18\x05 \x01(\v2\x1a.google.protobuf.BoolValueH\x00R\ruseHashPolicy\x1a\x92\b\n" +
	"\rClusterWeight\x12-\n" +
	"\x04name\x18\x01 \x01(\tB\x19\xf2\x98\xfe\x8f\x05\x13\x12\x11cluster_specifierR\x04name\x12K\n" +
	"\x0ecluster_header\x18\f \x01(\tB$\xfaB\br\x06\xc8\x01\x00\xc0\x01\x01\xf2\x98\xfe\x8f\x05\x13\x12\x11cluster_specifierR\rclusterHeader\x124\n" +
	"\x06weight\x18\x02 \x01(\v2\x1c.google.protobuf.UInt32ValueR\x06weight\x12E\n" +
	"\x0emetadata_match\x18\x03 \x01(\v2\x1e.envoy.config.core.v3.MetadataR\rmetadataMatch\x12g\n" +
	"\x16request_headers_to_add\x18\x04 \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x13requestHeadersToAdd\x12K\n" +
	"\x19request_headers_to_remove\x18\t \x03(\tB\x10\xfaB\r\x92\x01\n" +
	"\"\br\x06\xc8\x01\x00\xc0\x01\x01R\x16requestHeadersToRemove\x12i\n" +
	"\x17response_headers_to_add\x18\x05 \x03(\v2'.envoy.config.core.v3.HeaderValueOptionB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x14responseHeadersToAdd\x12M\n" +
	"\x1aresponse_headers_to_remove\x18\x06 \x03(\tB\x10\xfaB\r\x92\x01\n" +
	"\"\br\x06\xc8\x01\x00\xc0\x01\x01R\x17responseHeadersToRemove\x12\x85\x01\n" +
	"\x17typed_per_filter_config\x18\n" +
	" \x03(\v2N.envoy.config.route.v3.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntryR\x14typedPerFilterConfig\x12?\n" +
	"\x14host_rewrite_literal\x18\v \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02H\x00R\x12hostRewriteLiteral\x1a]\n" +
	"\x19TypedPerFilterConfigEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12*\n" +
	"\x05value\x18\x02 \x01(\v2\x14.google.protobuf.AnyR\x05value:\x028\x01:7\x9aň\x1e2\n" +
	"0envoy.api.v2.route.WeightedCluster.ClusterWeightB\x18\n" +
	"\x16host_rewrite_specifierJ\x04\b\a\x10\bJ\x04\b\b\x10\tR\x11per_filter_config:)\x9aň\x1e$\n" +
	"\"envoy.api.v2.route.WeightedClusterB\x18\n" +
	"\x16random_value_specifier\"\x8d\x01\n" +
	"\x16ClusterSpecifierPlugin\x12R\n" +
	"\textension\x18\x01 \x01(\v2*.envoy.config.core.v3.TypedExtensionConfigB\b\xfaB\x05\x8a\x01\x02\x10\x01R\textension\x12\x1f\n" +
	"\vis_optional\x18\x02 \x01(\bR\n" +
	"isOptional\"\xd3\v\n" +
	"\n" +
	"RouteMatch\x12\x18\n" +
	"\x06prefix\x18\x01 \x01(\tH\x00R\x06prefix\x12\x14\n" +
	"\x04path\x18\x02 \x01(\tH\x00R\x04path\x12N\n" +
	"\n" +
	"safe_regex\x18\n" +
	" \x01(\v2#.envoy.type.matcher.v3.RegexMatcherB\b\xfaB\x05\x8a\x01\x02\x10\x01H\x00R\tsafeRegex\x12[\n" +
	"\x0fconnect_matcher\x18\f \x01(\v20.envoy.config.route.v3.RouteMatch.ConnectMatcherH\x00R\x0econnectMatcher\x12K\n" +
	"\x15path_separated_prefix\x18\x0e \x01(\tB\x15\xfaB\x12r\x102\x0e^[^?#]+[^?#/]$H\x00R\x13pathSeparatedPrefix\x12X\n" +
	"\x11path_match_policy\x18\x0f \x01(\v2*.envoy.config.core.v3.TypedExtensionConfigH\x00R\x0fpathMatchPolicy\x12A\n" +
	"\x0ecase_sensitive\x18\x04 \x01(\v2\x1a.google.protobuf.BoolValueR\rcaseSensitive\x12Y\n" +
	"\x10runtime_fraction\x18\t \x01(\v2..envoy.config.core.v3.RuntimeFractionalPercentR\x0fruntimeFraction\x12>\n" +
	"\aheaders\x18\x06 \x03(\v2$.envoy.config.route.v3.HeaderMatcherR\aheaders\x12W\n" +
	"\x10query_parameters\x18\a \x03(\v2,.envoy.config.route.v3.QueryParameterMatcherR\x0fqueryParameters\x12>\n" +
	"\acookies\x18\x11 \x03(\v2$.envoy.config.route.v3.CookieMatcherR\acookies\x12K\n" +
	"\x04grpc\x18\b \x01(\v27.envoy.config.route.v3.RouteMatch.GrpcRouteMatchOptionsR\x04grpc\x12Y\n" +
	"\vtls_context\x18\v \x01(\v28.envoy.config.route.v3.RouteMatch.TlsContextMatchOptionsR\n" +
	"tlsContext\x12Q\n" +
	"\x10dynamic_metadata\x18\r \x03(\v2&.envoy.type.matcher.v3.MetadataMatcherR\x0fdynamicMetadata\x12L\n" +
	"\ffilter_state\x18\x10 \x03(\v2).envoy.type.matcher.v3.FilterStateMatcherR\vfilterState\x1aS\n" +
	"\x15GrpcRouteMatchOptions::\x9aň\x1e5\n" +
	"3envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions\x1a\xc9\x01\n" +
	"\x16TlsContextMatchOptions\x128\n" +
	"\tpresented\x18\x01 \x01(\v2\x1a.google.protobuf.BoolValueR\tpresented\x128\n" +
	"\tvalidated\x18\x02 \x01(\v2\x1a.google.protobuf.BoolValueR\tvalidated:;\x9aň\x1e6\n" +
	"4envoy.api.v2.route.RouteMatch.TlsContextMatchOptions\x1a\x10\n" +
	"\x0eConnectMatcher:$\x9aň\x1e\x1f\n" +
	"\x1denvoy.api.v2.route.RouteMatchB\x15\n" +
	"\x0epath_specifier\x12\x03\xf8B\x01J\x04\b\x05\x10\x06J\x04\b\x03\x10\x04R\x05regex\"\xa8\x06\n" +
	"\n" +
	"CorsPolicy\x12_\n" +
	"\x19allow_origin_string_match\x18\v \x03(\v2$.envoy.type.matcher.v3.StringMatcherR\x16allowOriginStringMatch\x12#\n" +
	"\rallow_methods\x18\x02 \x01(\tR\fallowMethods\x12#\n" +
	"\rallow_headers\x18\x03 \x01(\tR\fallowHeaders\x12%\n" +
	"\x0eexpose_headers\x18\x04 \x01(\tR\rexposeHeaders\x12\x17\n" +
	"\amax_age\x18\x05 \x01(\tR\x06maxAge\x12G\n" +
	"\x11allow_credentials\x18\x06 \x01(\v2\x1a.google.protobuf.BoolValueR\x10allowCredentials\x12W\n" +
	"\x0efilter_enabled\x18\t \x01(\v2..envoy.config.core.v3.RuntimeFractionalPercentH\x00R\rfilterEnabled\x12U\n" +
	"\x0eshadow_enabled\x18\n" +
	" \x01(\v2..envoy.config.core.v3.RuntimeFractionalPercentR\rshadowEnabled\x12[\n" +
	"\x1callow_private_network_access\x18\f \x01(\v2\x1a.google.protobuf.BoolValueR\x19allowPrivateNetworkAccess\x12a\n" +
	"\x1fforward_not_matching_preflights\x18\r \x01(\v2\x1a.google.protobuf.BoolValueR\x1cforwardNotMatchingPreflights:$\x9aň\x1e\x1f\n" +
	"\x1denvoy.api.v2.route.CorsPolicyB\x13\n" +
	"\x11enabled_specifierJ\x04\b\x01\x10\x02J\x04\b\b\x10\tJ\x04\b\a\x10\bR\fallow_originR\x12allow_origin_regexR\aenabled\"\xeb/\n" +
	"\vRouteAction\x12#\n" +
	"\acluster\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01H\x00R\acluster\x126\n" +
	"\x0ecluster_header\x18\x02 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01H\x00R\rclusterHeader\x12U\n" +
	"\x11weighted_clusters\x18\x03 \x01(\v2&.envoy.config.route.v3.WeightedClusterH\x00R\x10weightedClusters\x12:\n" +
	"\x18cluster_specifier_plugin\x18% \x01(\tH\x00R\x16clusterSpecifierPlugin\x12v\n" +
	"\x1finline_cluster_specifier_plugin\x18' \x01(\v2-.envoy.config.route.v3.ClusterSpecifierPluginH\x00R\x1cinlineClusterSpecifierPlugin\x12\x8e\x01\n" +
	"\x1fcluster_not_found_response_code\x18\x14 \x01(\x0e2>.envoy.config.route.v3.RouteAction.ClusterNotFoundResponseCodeB\b\xfaB\x05\x82\x01\x02\x10\x01R\x1bclusterNotFoundResponseCode\x12E\n" +
	"\x0emetadata_match\x18\x04 \x01(\v2\x1e.envoy.config.core.v3.MetadataR\rmetadataMatch\x122\n" +
	"\x0eprefix_rewrite\x18\x05 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02R\rprefixRewrite\x12S\n" +
	"\rregex_rewrite\x18  \x01(\v2..envoy.type.matcher.v3.RegexMatchAndSubstituteR\fregexRewrite\x12Z\n" +
	"\x13path_rewrite_policy\x18) \x01(\v2*.envoy.config.core.v3.TypedExtensionConfigR\x11pathRewritePolicy\x12!\n" +
	"\fpath_rewrite\x18- \x01(\tR\vpathRewrite\x12?\n" +
	"\x14host_rewrite_literal\x18\x06 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02H\x01R\x12hostRewriteLiteral\x12H\n" +
	"\x11auto_host_rewrite\x18\a \x01(\v2\x1a.google.protobuf.BoolValueH\x01R\x0fautoHostRewrite\x12=\n" +
	"\x13host_rewrite_header\x18\x1d \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x01H\x01R\x11hostRewriteHeader\x12g\n" +
	"\x17host_rewrite_path_regex\x18# \x01(\v2..envoy.type.matcher.v3.RegexMatchAndSubstituteH\x01R\x14hostRewritePathRegex\x12#\n" +
	"\fhost_rewrite\x18, \x01(\tH\x01R\vhostRewrite\x125\n" +
	"\x17append_x_forwarded_host\x18& \x01(\bR\x14appendXForwardedHost\x123\n" +
	"\atimeout\x18\b \x01(\v2\x19.google.protobuf.DurationR\atimeout\x12<\n" +
	"\fidle_timeout\x18\x18 \x01(\v2\x19.google.protobuf.DurationR\vidleTimeout\x12>\n" +
	"\rflush_timeout\x18* \x01(\v2\x19.google.protobuf.DurationR\fflushTimeout\x12V\n" +
	"\x11early_data_policy\x18( \x01(\v2*.envoy.config.core.v3.TypedExtensionConfigR\x0fearlyDataPolicy\x12E\n" +
	"\fretry_policy\x18\t \x01(\v2\".envoy.config.route.v3.RetryPolicyR\vretryPolicy\x12O\n" +
	"\x19retry_policy_typed_config\x18! \x01(\v2\x14.google.protobuf.AnyR\x16retryPolicyTypedConfig\x12n\n" +
	"\x17request_mirror_policies\x18\x1e \x03(\v26.envoy.config.route.v3.RouteAction.RequestMirrorPolicyR\x15requestMirrorPolicies\x12K\n" +
	"\bpriority\x18\v \x01(\x0e2%.envoy.config.core.v3.RoutingPriorityB\b\xfaB\x05\x82\x01\x02\x10\x01R\bpriority\x12A\n" +
	"\vrate_limits\x18\r \x03(\v2 .envoy.config.route.v3.RateLimitR\n" +
	"rateLimits\x12\\\n" +
	"\x16include_vh_rate_limits\x18\x0e \x01(\v2\x1a.google.protobuf.BoolValueB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x13includeVhRateLimits\x12N\n" +
	"\vhash_policy\x18\x0f \x03(\v2-.envoy.config.route.v3.RouteAction.HashPolicyR\n" +
	"hashPolicy\x12B\n" +
	"\x04cors\x18\x11 \x01(\v2!.envoy.config.route.v3.CorsPolicyB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x04cors\x12P\n" +
	"\x10max_grpc_timeout\x18\x17 \x01(\v2\x19.google.protobuf.DurationB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x0emaxGrpcTimeout\x12V\n" +
	"\x13grpc_timeout_offset\x18\x1c \x01(\v2\x19.google.protobuf.DurationB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x11grpcTimeoutOffset\x12Y\n" +
	"\x0fupgrade_configs\x18\x19 \x03(\v20.envoy.config.route.v3.RouteAction.UpgradeConfigR\x0eupgradeConfigs\x12g\n" +
	"\x18internal_redirect_policy\x18\" \x01(\v2-.envoy.config.route.v3.InternalRedirectPolicyR\x16internalRedirectPolicy\x12\x80\x01\n" +
	"\x18internal_redirect_action\x18\x1a \x01(\x0e29.envoy.config.route.v3.RouteAction.InternalRedirectActionB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x16internalRedirectAction\x12_\n" +
	"\x16max_internal_redirects\x18\x1f \x01(\v2\x1c.google.protobuf.UInt32ValueB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x14maxInternalRedirects\x12E\n" +
	"\fhedge_policy\x18\x1b \x01(\v2\".envoy.config.route.v3.HedgePolicyR\vhedgePolicy\x12d\n" +
	"\x13max_stream_duration\x18$ \x01(\v24.envoy.config.route.v3.RouteAction.MaxStreamDurationR\x11maxStreamDuration\x1a\x88\x05\n" +
	"\x13RequestMirrorPolicy\x123\n" +
	"\acluster\x18\x01 \x01(\tB\x19\xf2\x98\xfe\x8f\x05\x13\x12\x11cluster_specifierR\acluster\x12K\n" +
	"\x0ecluster_header\x18\x05 \x01(\tB$\xfaB\br\x06\xc8\x01\x00\xc0\x01\x01\xf2\x98\xfe\x8f\x05\x13\x12\x11cluster_specifierR\rclusterHeader\x12Y\n" +
	"\x10runtime_fraction\x18\x03 \x01(\v2..envoy.config.core.v3.RuntimeFractionalPercentR\x0fruntimeFraction\x12?\n" +
	"\rtrace_sampled\x18\x04 \x01(\v2\x1a.google.protobuf.BoolValueR\ftraceSampled\x12H\n" +
	"!disable_shadow_host_suffix_append\x18\x06 \x01(\bR\x1ddisableShadowHostSuffixAppend\x12|\n" +
	"\x19request_headers_mutations\x18\a \x03(\v25.envoy.config.common.mutation_rules.v3.HeaderMutationB\t\xfaB\x06\x92\x01\x03\x10\xe8\aR\x17requestHeadersMutations\x12=\n" +
	"\x14host_rewrite_literal\x18\b \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02R\x12hostRewriteLiteral:9\x9aň\x1e4\n" +
	"2envoy.api.v2.route.RouteAction.RequestMirrorPolicyJ\x04\b\x02\x10\x03R\vruntime_key\x1a\xd6\v\n" +
	"\n" +
	"HashPolicy\x12N\n" +
	"\x06header\x18\x01 \x01(\v24.envoy.config.route.v3.RouteAction.HashPolicy.HeaderH\x00R\x06header\x12N\n" +
	"\x06cookie\x18\x02 \x01(\v24.envoy.config.route.v3.RouteAction.HashPolicy.CookieH\x00R\x06cookie\x12y\n" +
	"\x15connection_properties\x18\x03 \x01(\v2B.envoy.config.route.v3.RouteAction.HashPolicy.ConnectionPropertiesH\x00R\x14connectionProperties\x12g\n" +
	"\x0fquery_parameter\x18\x05 \x01(\v2<.envoy.config.route.v3.RouteAction.HashPolicy.QueryParameterH\x00R\x0equeryParameter\x12^\n" +
	"\ffilter_state\x18\x06 \x01(\v29.envoy.config.route.v3.RouteAction.HashPolicy.FilterStateH\x00R\vfilterState\x12\x1a\n" +
	"\bterminal\x18\x04 \x01(\bR\bterminal\x1a\xc6\x01\n" +
	"\x06Header\x12.\n" +
	"\vheader_name\x18\x01 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\n" +
	"headerName\x12S\n" +
	"\rregex_rewrite\x18\x02 \x01(\v2..envoy.type.matcher.v3.RegexMatchAndSubstituteR\fregexRewrite:7\x9aň\x1e2\n" +
	"0envoy.api.v2.route.RouteAction.HashPolicy.Header\x1a_\n" +
	"\x0fCookieAttribute\x12%\n" +
	"\x04name\x18\x01 \x01(\tB\x11\xfaB\x0er\f\x10\x01(\x80\x80\x01\xc8\x01\x00\xc0\x01\x01R\x04name\x12%\n" +
	"\x05value\x18\x02 \x01(\tB\x0f\xfaB\fr\n" +
	"(\x80\x80\x01\xc8\x01\x00\xc0\x01\x02R\x05value\x1a\xfe\x01\n" +
	"\x06Cookie\x12\x1b\n" +
	"\x04name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name\x12+\n" +
	"\x03ttl\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x03ttl\x12\x12\n" +
	"\x04path\x18\x03 \x01(\tR\x04path\x12]\n" +
	"\n" +
	"attributes\x18\x04 \x03(\v2=.envoy.config.route.v3.RouteAction.HashPolicy.CookieAttributeR\n" +
	"attributes:7\x9aň\x1e2\n" +
	"0envoy.api.v2.route.RouteAction.HashPolicy.Cookie\x1az\n" +
	"\x14ConnectionProperties\x12\x1b\n" +
	"\tsource_ip\x18\x01 \x01(\bR\bsourceIp:E\x9aň\x1e@\n" +
	">envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties\x1an\n" +
	"\x0eQueryParameter\x12\x1b\n" +
	"\x04name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name:?\x9aň\x1e:\n" +
	"8envoy.api.v2.route.RouteAction.HashPolicy.QueryParameter\x1af\n" +
	"\vFilterState\x12\x19\n" +
	"\x03key\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x03key:<\x9aň\x1e7\n" +
	"5envoy.api.v2.route.RouteAction.HashPolicy.FilterState:0\x9aň\x1e+\n" +
	")envoy.api.v2.route.RouteAction.HashPolicyB\x17\n" +
	"\x10policy_specifier\x12\x03\xf8B\x01\x1a\xa3\x03\n" +
	"\rUpgradeConfig\x120\n" +
	"\fupgrade_type\x18\x01 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x02R\vupgradeType\x124\n" +
	"\aenabled\x18\x02 \x01(\v2\x1a.google.protobuf.BoolValueR\aenabled\x12e\n" +
	"\x0econnect_config\x18\x03 \x01(\v2>.envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfigR\rconnectConfig\x1a\x8d\x01\n" +
	"\rConnectConfig\x12]\n" +
	"\x15proxy_protocol_config\x18\x01 \x01(\v2).envoy.config.core.v3.ProxyProtocolConfigR\x13proxyProtocolConfig\x12\x1d\n" +
	"\n" +
	"allow_post\x18\x02 \x01(\bR\tallowPost:3\x9aň\x1e.\n" +
	",envoy.api.v2.route.RouteAction.UpgradeConfig\x1a\x88\x02\n" +
	"\x11MaxStreamDuration\x12I\n" +
	"\x13max_stream_duration\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x11maxStreamDuration\x12P\n" +
	"\x17grpc_timeout_header_max\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x14grpcTimeoutHeaderMax\x12V\n" +
	"\x1agrpc_timeout_header_offset\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x17grpcTimeoutHeaderOffset\"`\n" +
	"\x1bClusterNotFoundResponseCode\x12\x17\n" +
	"\x13SERVICE_UNAVAILABLE\x10\x00\x12\r\n" +
	"\tNOT_FOUND\x10\x01\x12\x19\n" +
	"\x15INTERNAL_SERVER_ERROR\x10\x02\"^\n" +
	"\x16InternalRedirectAction\x12\"\n" +
	"\x1ePASS_THROUGH_INTERNAL_REDIRECT\x10\x00\x12\x1c\n" +
	"\x18HANDLE_INTERNAL_REDIRECT\x10\x01\x1a\x02\x18\x01:%\x9aň\x1e \n" +
	"\x1eenvoy.api.v2.route.RouteActionB\x18\n" +
	"\x11cluster_specifier\x12\x03\xf8B\x01B\x18\n" +
	"\x16host_rewrite_specifierJ\x04\b\f\x10\rJ\x04\b\x12\x10\x13J\x04\b\x13\x10\x14J\x04\b\x10\x10\x11J\x04\b\x16\x10\x17J\x04\b\x15\x10\x16J\x04\b\n" +
	"\x10\vR\x15request_mirror_policy\"\xf8\x10\n" +
	"\vRetryPolicy\x12\x19\n" +
	"\bretry_on\x18\x01 \x01(\tR\aretryOn\x12R\n" +
	"\vnum_retries\x18\x02 \x01(\v2\x1c.google.protobuf.UInt32ValueB\x13\xf2\x98\xfe\x8f\x05\r\n" +
	"\vmax_retriesR\n" +
	"numRetries\x12A\n" +
	"\x0fper_try_timeout\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\rperTryTimeout\x12J\n" +
	"\x14per_try_idle_timeout\x18\r \x01(\v2\x19.google.protobuf.DurationR\x11perTryIdleTimeout\x12W\n" +
	"\x0eretry_priority\x18\x04 \x01(\v20.envoy.config.route.v3.RetryPolicy.RetryPriorityR\rretryPriority\x12g\n" +
	"\x14retry_host_predicate\x18\x05 \x03(\v25.envoy.config.route.v3.RetryPolicy.RetryHostPredicateR\x12retryHostPredicate\x12d\n" +
	"\x18retry_options_predicates\x18\f \x03(\v2*.envoy.config.core.v3.TypedExtensionConfigR\x16retryOptionsPredicates\x12H\n" +
	"!host_selection_retry_max_attempts\x18\x06 \x01(\x03R\x1dhostSelectionRetryMaxAttempts\x124\n" +
	"\x16retriable_status_codes\x18\a \x03(\rR\x14retriableStatusCodes\x12U\n" +
	"\x0eretry_back_off\x18\b \x01(\v2/.envoy.config.route.v3.RetryPolicy.RetryBackOffR\fretryBackOff\x12x\n" +
	"\x1brate_limited_retry_back_off\x18\v \x01(\v2:.envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOffR\x17rateLimitedRetryBackOff\x12Q\n" +
	"\x11retriable_headers\x18\t \x03(\v2$.envoy.config.route.v3.HeaderMatcherR\x10retriableHeaders\x12`\n" +
	"\x19retriable_request_headers\x18\n" +
	" \x03(\v2$.envoy.config.route.v3.HeaderMatcherR\x17retriableRequestHeaders\x127\n" +
	"\x18refresh_cluster_on_retry\x18\x0e \x01(\bR\x15refreshClusterOnRetry\x1a\xb9\x01\n" +
	"\rRetryPriority\x12\x1b\n" +
	"\x04name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name\x129\n" +
	"\ftyped_config\x18\x03 \x01(\v2\x14.google.protobuf.AnyH\x00R\vtypedConfig:3\x9aň\x1e.\n" +
	",envoy.api.v2.route.RetryPolicy.RetryPriorityB\r\n" +
	"\vconfig_typeJ\x04\b\x02\x10\x03R\x06config\x1a\xc3\x01\n" +
	"\x12RetryHostPredicate\x12\x1b\n" +
	"\x04name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name\x129\n" +
	"\ftyped_config\x18\x03 \x01(\v2\x14.google.protobuf.AnyH\x00R\vtypedConfig:8\x9aň\x1e3\n" +
	"1envoy.api.v2.route.RetryPolicy.RetryHostPredicateB\r\n" +
	"\vconfig_typeJ\x04\b\x02\x10\x03R\x06config\x1a\xd6\x01\n" +
	"\fRetryBackOff\x12J\n" +
	"\rbase_interval\x18\x01 \x01(\v2\x19.google.protobuf.DurationB\n" +
	"\xfaB\a\xaa\x01\x04\b\x01*\x00R\fbaseInterval\x12F\n" +
	"\fmax_interval\x18\x02 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x02*\x00R\vmaxInterval:2\x9aň\x1e-\n" +
	"+envoy.api.v2.route.RetryPolicy.RetryBackOff\x1a\x88\x01\n" +
	"\vResetHeader\x12!\n" +
	"\x04name\x18\x01 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x04name\x12V\n" +
	"\x06format\x18\x02 \x01(\x0e24.envoy.config.route.v3.RetryPolicy.ResetHeaderFormatB\b\xfaB\x05\x82\x01\x02\x10\x01R\x06format\x1a\xc0\x01\n" +
	"\x17RateLimitedRetryBackOff\x12]\n" +
	"\rreset_headers\x18\x01 \x03(\v2..envoy.config.route.v3.RetryPolicy.ResetHeaderB\b\xfaB\x05\x92\x01\x02\b\x01R\fresetHeaders\x12F\n" +
	"\fmax_interval\x18\x02 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x02*\x00R\vmaxInterval\"4\n" +
	"\x11ResetHeaderFormat\x12\v\n" +
	"\aSECONDS\x10\x00\x12\x12\n" +
	"\x0eUNIX_TIMESTAMP\x10\x01:%\x9aň\x1e \n" +
	"\x1eenvoy.api.v2.route.RetryPolicy\"\x9c\x02\n" +
	"\vHedgePolicy\x12P\n" +
	"\x10initial_requests\x18\x01 \x01(\v2\x1c.google.protobuf.UInt32ValueB\a\xfaB\x04*\x02(\x01R\x0finitialRequests\x12\\\n" +
	"\x19additional_request_chance\x18\x02 \x01(\v2 .envoy.type.v3.FractionalPercentR\x17additionalRequestChance\x126\n" +
	"\x18hedge_on_per_try_timeout\x18\x03 \x01(\bR\x14hedgeOnPerTryTimeout:%\x9aň\x1e \n" +
	"\x1eenvoy.api.v2.route.HedgePolicy\"\x86\x06\n" +
	"\x0eRedirectAction\x12'\n" +
	"\x0ehttps_redirect\x18\x04 \x01(\bH\x00R\rhttpsRedirect\x12)\n" +
	"\x0fscheme_redirect\x18\a \x01(\tH\x00R\x0eschemeRedirect\x120\n" +
	"\rhost_redirect\x18\x01 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02R\fhostRedirect\x12#\n" +
	"\rport_redirect\x18\b \x01(\rR\fportRedirect\x122\n" +
	"\rpath_redirect\x18\x02 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02H\x01R\fpathRedirect\x124\n" +
	"\x0eprefix_rewrite\x18\x05 \x01(\tB\v\xfaB\br\x06\xc8\x01\x00\xc0\x01\x02H\x01R\rprefixRewrite\x12U\n" +
	"\rregex_rewrite\x18\t \x01(\v2..envoy.type.matcher.v3.RegexMatchAndSubstituteH\x01R\fregexRewrite\x12#\n" +
	"\fpath_rewrite\x18\n" +
	" \x01(\tH\x01R\vpathRewrite\x12i\n" +
	"\rresponse_code\x18\x03 \x01(\x0e2:.envoy.config.route.v3.RedirectAction.RedirectResponseCodeB\b\xfaB\x05\x82\x01\x02\x10\x01R\fresponseCode\x12\x1f\n" +
	"\vstrip_query\x18\x06 \x01(\bR\n" +
	"stripQuery\"w\n" +
	"\x14RedirectResponseCode\x12\x15\n" +
	"\x11MOVED_PERMANENTLY\x10\x00\x12\t\n" +
	"\x05FOUND\x10\x01\x12\r\n" +
	"\tSEE_OTHER\x10\x02\x12\x16\n" +
	"\x12TEMPORARY_REDIRECT\x10\x03\x12\x16\n" +
	"\x12PERMANENT_REDIRECT\x10\x04:(\x9aň\x1e#\n" +
	"!envoy.api.v2.route.RedirectActionB\x1a\n" +
	"\x18scheme_rewrite_specifierB\x18\n" +
	"\x16path_rewrite_specifier\"\xf2\x01\n" +
	"\x14DirectResponseAction\x12#\n" +
	"\x06status\x18\x01 \x01(\rB\v\xfaB\b*\x06\x10\xd8\x04(\xc8\x01R\x06status\x124\n" +
	"\x04body\x18\x02 \x01(\v2 .envoy.config.core.v3.DataSourceR\x04body\x12O\n" +
	"\vbody_format\x18\x03 \x01(\v2..envoy.config.core.v3.SubstitutionFormatStringR\n" +
	"bodyFormat:.\x9aň\x1e)\n" +
	"'envoy.api.v2.route.DirectResponseAction\"\x15\n" +
	"\x13NonForwardingAction\"\x91\x01\n" +
	"\tDecorator\x12%\n" +
	"\toperation\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\toperation\x128\n" +
	"\tpropagate\x18\x02 \x01(\v2\x1a.google.protobuf.BoolValueR\tpropagate:#\x9aň\x1e\x1e\n" +
	"\x1cenvoy.api.v2.route.Decorator\"\x9f\x03\n" +
	"\aTracing\x12I\n" +
	"\x0fclient_sampling\x18\x01 \x01(\v2 .envoy.type.v3.FractionalPercentR\x0eclientSampling\x12I\n" +
	"\x0frandom_sampling\x18\x02 \x01(\v2 .envoy.type.v3.FractionalPercentR\x0erandomSampling\x12K\n" +
	"\x10overall_sampling\x18\x03 \x01(\v2 .envoy.type.v3.FractionalPercentR\x0foverallSampling\x12A\n" +
	"\vcustom_tags\x18\x04 \x03(\v2 .envoy.type.tracing.v3.CustomTagR\n" +
	"customTags\x12\x1c\n" +
	"\toperation\x18\x05 \x01(\tR\toperation\x12-\n" +
	"\x12upstream_operation\x18\x06 \x01(\tR\x11upstreamOperation:!\x9aň\x1e\x1c\n" +
	"\x1aenvoy.api.v2.route.Tracing\"\xb4\x01\n" +
	"\x0eVirtualCluster\x12>\n" +
	"\aheaders\x18\x04 \x03(\v2$.envoy.config.route.v3.HeaderMatcherR\aheaders\x12\x1b\n" +
	"\x04name\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x04name:(\x9aň\x1e#\n" +
	"!envoy.api.v2.route.VirtualClusterJ\x04\b\x01\x10\x02J\x04\b\x03\x10\x04R\apatternR\x06method\"\xec'\n" +
	"\tRateLimit\x12;\n" +
	"\x05stage\x18\x01 \x01(\v2\x1c.google.protobuf.UInt32ValueB\a\xfaB\x04*\x02\x18\n" +
	"R\x05stage\x12\x1f\n" +
	"\vdisable_key\x18\x02 \x01(\tR\n" +
	"disableKey\x12K\n" +
	"\aactions\x18\x03 \x03(\v2'.envoy.config.route.v3.RateLimit.ActionB\b\xfaB\x05\x92\x01\x02\b\x01R\aactions\x12?\n" +
	"\x05limit\x18\x04 \x01(\v2).envoy.config.route.v3.RateLimit.OverrideR\x05limit\x12L\n" +
	"\vhits_addend\x18\x05 \x01(\v2+.envoy.config.route.v3.RateLimit.HitsAddendR\n" +
	"hitsAddend\x12/\n" +
	"\x14apply_on_stream_done\x18\x06 \x01(\bR\x11applyOnStreamDone\x12_\n" +
	"\x12x_ratelimit_option\x18\a \x01(\x0e21.envoy.config.route.v3.RateLimit.XRateLimitOptionR\x10xRatelimitOption\x1a\xbf\x1e\n" +
	"\x06Action\x12^\n" +
	"\x0esource_cluster\x18\x01 \x01(\v25.envoy.config.route.v3.RateLimit.Action.SourceClusterH\x00R\rsourceCluster\x12m\n" +
	"\x13destination_cluster\x18\x02 \x01(\v2:.envoy.config.route.v3.RateLimit.Action.DestinationClusterH\x00R\x12destinationCluster\x12a\n" +
	"\x0frequest_headers\x18\x03 \x01(\v26.envoy.config.route.v3.RateLimit.Action.RequestHeadersH\x00R\x0erequestHeaders\x12d\n" +
	"\x10query_parameters\x18\f \x01(\v27.envoy.config.route.v3.RateLimit.Action.QueryParametersH\x00R\x0fqueryParameters\x12^\n" +
	"\x0eremote_address\x18\x04 \x01(\v25.envoy.config.route.v3.RateLimit.Action.RemoteAddressH\x00R\rremoteAddress\x12U\n" +
	"\vgeneric_key\x18\x05 \x01(\v22.envoy.config.route.v3.RateLimit.Action.GenericKeyH\x00R\n" +
	"genericKey\x12h\n" +
	"\x12header_value_match\x18\x06 \x01(\v28.envoy.config.route.v3.RateLimit.Action.HeaderValueMatchH\x00R\x10headerValueMatch\x12w\n" +
	"\x10dynamic_metadata\x18\a \x01(\v27.envoy.config.route.v3.RateLimit.Action.DynamicMetaDataB\x11\x92ǆ\xd8\x04\x033.0\xb8\xee\xf2\xd2\x05\x01\x18\x01H\x00R\x0fdynamicMetadata\x12N\n" +
	"\bmetadata\x18\b \x01(\v20.envoy.config.route.v3.RateLimit.Action.MetaDataH\x00R\bmetadata\x12J\n" +
	"\textension\x18\t \x01(\v2*.envoy.config.core.v3.TypedExtensionConfigH\x00R\textension\x12q\n" +
	"\x15masked_remote_address\x18\n" +
	" \x01(\v2;.envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddressH\x00R\x13maskedRemoteAddress\x12\x81\x01\n" +
	"\x1bquery_parameter_value_match\x18\v \x01(\v2@.envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatchH\x00R\x18queryParameterValueMatch\x12n\n" +
	"\x14remote_address_match\x18\r \x01(\v2:.envoy.config.route.v3.RateLimit.Action.RemoteAddressMatchH\x00R\x12remoteAddressMatch\x1aI\n" +
	"\rSourceCluster:8\x9aň\x1e3\n" +
	"1envoy.api.v2.route.RateLimit.Action.SourceCluster\x1aS\n" +
	"\x12DestinationCluster:=\x9aň\x1e8\n" +
	"6envoy.api.v2.route.RateLimit.Action.DestinationCluster\x1a\xd1\x01\n" +
	"\x0eRequestHeaders\x12.\n" +
	"\vheader_name\x18\x01 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\n" +
	"headerName\x12.\n" +
	"\x0edescriptor_key\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\rdescriptorKey\x12$\n" +
	"\x0eskip_if_absent\x18\x03 \x01(\bR\fskipIfAbsent:9\x9aň\x1e4\n" +
	"2envoy.api.v2.route.RateLimit.Action.RequestHeaders\x1a\xa2\x01\n" +
	"\x0fQueryParameters\x129\n" +
	"\x14query_parameter_name\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x12queryParameterName\x12.\n" +
	"\x0edescriptor_key\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\rdescriptorKey\x12$\n" +
	"\x0eskip_if_absent\x18\x03 \x01(\bR\fskipIfAbsent\x1aI\n" +
	"\rRemoteAddress:8\x9aň\x1e3\n" +
	"1envoy.api.v2.route.RateLimit.Action.RemoteAddress\x1a\xbe\x01\n" +
	"\x13MaskedRemoteAddress\x12R\n" +
	"\x12v4_prefix_mask_len\x18\x01 \x01(\v2\x1c.google.protobuf.UInt32ValueB\a\xfaB\x04*\x02\x18 R\x0fv4PrefixMaskLen\x12S\n" +
	"\x12v6_prefix_mask_len\x18\x02 \x01(\v2\x1c.google.protobuf.UInt32ValueB\b\xfaB\x05*\x03\x18\x80\x01R\x0fv6PrefixMaskLen\x1a\xc3\x01\n" +
	"\n" +
	"GenericKey\x122\n" +
	"\x10descriptor_value\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x0fdescriptorValue\x12#\n" +
	"\rdefault_value\x18\x03 \x01(\tR\fdefaultValue\x12%\n" +
	"\x0edescriptor_key\x18\x02 \x01(\tR\rdescriptorKey:5\x9aň\x1e0\n" +
	".envoy.api.v2.route.RateLimit.Action.GenericKey\x1a\xd8\x02\n" +
	"\x10HeaderValueMatch\x122\n" +
	"\x10descriptor_value\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x0fdescriptorValue\x12#\n" +
	"\rdefault_value\x18\x05 \x01(\tR\fdefaultValue\x12%\n" +
	"\x0edescriptor_key\x18\x04 \x01(\tR\rdescriptorKey\x12=\n" +
	"\fexpect_match\x18\x02 \x01(\v2\x1a.google.protobuf.BoolValueR\vexpectMatch\x12H\n" +
	"\aheaders\x18\x03 \x03(\v2$.envoy.config.route.v3.HeaderMatcherB\b\xfaB\x05\x92\x01\x02\b\x01R\aheaders:;\x9aň\x1e6\n" +
	"4envoy.api.v2.route.RateLimit.Action.HeaderValueMatch\x1a\xb8\x01\n" +
	"\x0fDynamicMetaData\x12.\n" +
	"\x0edescriptor_key\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\rdescriptorKey\x12P\n" +
	"\fmetadata_key\x18\x02 \x01(\v2#.envoy.type.metadata.v3.MetadataKeyB\b\xfaB\x05\x8a\x01\x02\x10\x01R\vmetadataKey\x12#\n" +
	"\rdefault_value\x18\x03 \x01(\tR\fdefaultValue\x1a\x89\x03\n" +
	"\bMetaData\x12.\n" +
	"\x0edescriptor_key\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\rdescriptorKey\x12P\n" +
	"\fmetadata_key\x18\x02 \x01(\v2#.envoy.type.metadata.v3.MetadataKeyB\b\xfaB\x05\x8a\x01\x02\x10\x01R\vmetadataKey\x12#\n" +
	"\rdefault_value\x18\x03 \x01(\tR\fdefaultValue\x12Y\n" +
	"\x06source\x18\x04 \x01(\x0e27.envoy.config.route.v3.RateLimit.Action.MetaData.SourceB\b\xfaB\x05\x82\x01\x02\x10\x01R\x06source\x12$\n" +
	"\x0eskip_if_absent\x18\x05 \x01(\bR\fskipIfAbsent\"U\n" +
	"\x06Source\x12\v\n" +
	"\aDYNAMIC\x10\x00\x12\x0f\n" +
	"\vROUTE_ENTRY\x10\x01\x12\x11\n" +
	"\rCLUSTER_ENTRY\x10\x02\x12\x1a\n" +
	"\x16CLUSTER_LOCALITY_ENTRY\x10\x03\x1a\xbc\x02\n" +
	"\x18QueryParameterValueMatch\x122\n" +
	"\x10descriptor_value\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x0fdescriptorValue\x12#\n" +
	"\rdefault_value\x18\x05 \x01(\tR\fdefaultValue\x12%\n" +
	"\x0edescriptor_key\x18\x04 \x01(\tR\rdescriptorKey\x12=\n" +
	"\fexpect_match\x18\x02 \x01(\v2\x1a.google.protobuf.BoolValueR\vexpectMatch\x12a\n" +
	"\x10query_parameters\x18\x03 \x03(\v2,.envoy.config.route.v3.QueryParameterMatcherB\b\xfaB\x05\x92\x01\x02\b\x01R\x0fqueryParameters\x1a\xee\x01\n" +
	"\x12RemoteAddressMatch\x122\n" +
	"\x10descriptor_value\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x0fdescriptorValue\x12%\n" +
	"\x0edescriptor_key\x18\x02 \x01(\tR\rdescriptorKey\x12#\n" +
	"\rdefault_value\x18\x03 \x01(\tR\fdefaultValue\x12X\n" +
	"\x0faddress_matcher\x18\x04 \x01(\v2%.envoy.type.matcher.v3.AddressMatcherB\b\xfaB\x05\x8a\x01\x02\x10\x01R\x0eaddressMatcher:*\x9aň\x1e%\n" +
	"#envoy.api.v2.route.RateLimit.ActionB\x17\n" +
	"\x10action_specifier\x12\x03\xf8B\x01\x1a\xc3\x03\n" +
	"\bOverride\x12f\n" +
	"\x10dynamic_metadata\x18\x01 \x01(\v29.envoy.config.route.v3.RateLimit.Override.DynamicMetadataH\x00R\x0fdynamicMetadata\x12\\\n" +
	"\n" +
	"rate_limit\x18\x02 \x01(\v2;.envoy.config.route.v3.RateLimit.Override.RateLimitOverrideH\x00R\trateLimit\x1ac\n" +
	"\x0fDynamicMetadata\x12P\n" +
	"\fmetadata_key\x18\x01 \x01(\v2#.envoy.type.metadata.v3.MetadataKeyB\b\xfaB\x05\x8a\x01\x02\x10\x01R\vmetadataKey\x1aq\n" +
	"\x11RateLimitOverride\x12*\n" +
	"\x11requests_per_unit\x18\x01 \x01(\rR\x0frequestsPerUnit\x120\n" +
	"\x04unit\x18\x02 \x01(\x0e2\x1c.envoy.type.v3.RateLimitUnitR\x04unitB\x19\n" +
	"\x12override_specifier\x12\x03\xf8B\x01\x1a\xa1\x01\n" +
	"\n" +
	"HitsAddend\x12A\n" +
	"\x06number\x18\x01 \x01(\v2\x1c.google.protobuf.UInt64ValueB\v\xfaB\b2\x06\x18\x80\x94\xeb\xdc\x03R\x06number\x12&\n" +
	"\x06format\x18\x02 \x01(\tB\x0e\xfaB\vr\t:\x01%B\x01%\xd0\x01\x01R\x06format\x12(\n" +
	"\x10is_negative_hits\x18\x03 \x01(\bR\x0eisNegativeHits\"B\n" +
	"\x10XRateLimitOption\x12\x0f\n" +
	"\vUNSPECIFIED\x10\x00\x12\a\n" +
	"\x03OFF\x10\x01\x12\x14\n" +
	"\x10DRAFT_VERSION_03\x10\x02:#\x9aň\x1e\x1e\n" +
	"\x1cenvoy.api.v2.route.RateLimit\"\xe6\x05\n" +
	"\rHeaderMatcher\x12!\n" +
	"\x04name\x18\x01 \x01(\tB\r\xfaB\n" +
	"r\b\x10\x01\xc8\x01\x00\xc0\x01\x01R\x04name\x12.\n" +
	"\vexact_match\x18\x04 \x01(\tB\v\x92ǆ\xd8\x04\x033.0\x18\x01H\x00R\n" +
	"exactMatch\x12\\\n" +
	"\x10safe_regex_match\x18\v \x01(\v2#.envoy.type.matcher.v3.RegexMatcherB\v\x92ǆ\xd8\x04\x033.0\x18\x01H\x00R\x0esafeRegexMatch\x12<\n" +
	"\vrange_match\x18\x06 \x01(\v2\x19.envoy.type.v3.Int64RangeH\x00R\n" +
	"rangeMatch\x12%\n" +
	"\rpresent_match\x18\a \x01(\bH\x00R\fpresentMatch\x127\n" +
	"\fprefix_match\x18\t \x01(\tB\x12\xfaB\x04r\x02\x10\x01\x92ǆ\xd8\x04\x033.0\x18\x01H\x00R\vprefixMatch\x127\n" +
	"\fsuffix_match\x18\n" +
	" \x01(\tB\x12\xfaB\x04r\x02\x10\x01\x92ǆ\xd8\x04\x033.0\x18\x01H\x00R\vsuffixMatch\x12;\n" +
	"\x0econtains_match\x18\f \x01(\tB\x12\xfaB\x04r\x02\x10\x01\x92ǆ\xd8\x04\x033.0\x18\x01H\x00R\rcontainsMatch\x12I\n" +
	"\fstring_match\x18\r \x01(\v2$.envoy.type.matcher.v3.StringMatcherH\x00R\vstringMatch\x12!\n" +
	"\finvert_match\x18\b \x01(\bR\vinvertMatch\x12@\n" +
	"\x1dtreat_missing_header_as_empty\x18\x0e \x01(\bR\x19treatMissingHeaderAsEmpty:'\x9aň\x1e\"\n" +
	" envoy.api.v2.route.HeaderMatcherB\x18\n" +
	"\x16header_match_specifierJ\x04\b\x02\x10\x03J\x04\b\x03\x10\x04J\x04\b\x05\x10\x06R\vregex_match\"\xa1\x02\n" +
	"\x15QueryParameterMatcher\x12\x1e\n" +
	"\x04name\x18\x01 \x01(\tB\n" +
	"\xfaB\ar\x05\x10\x01(\x80\bR\x04name\x12S\n" +
	"\fstring_match\x18\x05 \x01(\v2$.envoy.type.matcher.v3.StringMatcherB\b\xfaB\x05\x8a\x01\x02\x10\x01H\x00R\vstringMatch\x12%\n" +
	"\rpresent_match\x18\x06 \x01(\bH\x00R\fpresentMatch:/\x9aň\x1e*\n" +
	"(envoy.api.v2.route.QueryParameterMatcherB!\n" +
	"\x1fquery_parameter_match_specifierJ\x04\b\x03\x10\x04J\x04\b\x04\x10\x05R\x05valueR\x05regex\"\xa5\x01\n" +
	"\rCookieMatcher\x12\x1e\n" +
	"\x04name\x18\x01 \x01(\tB\n" +
	"\xfaB\ar\x05\x10\x01(\x80\bR\x04name\x12Q\n" +
	"\fstring_match\x18\x02 \x01(\v2$.envoy.type.matcher.v3.StringMatcherB\b\xfaB\x05\x8a\x01\x02\x10\x01R\vstringMatch\x12!\n" +
	"\finvert_match\x18\x03 \x01(\bR\vinvertMatch\"\x86\x03\n" +
	"\x16InternalRedirectPolicy\x12R\n" +
	"\x16max_internal_redirects\x18\x01 \x01(\v2\x1c.google.protobuf.UInt32ValueR\x14maxInternalRedirects\x12@\n" +
	"\x17redirect_response_codes\x18\x02 \x03(\rB\b\xfaB\x05\x92\x01\x02\x10\x05R\x15redirectResponseCodes\x12J\n" +
	"\n" +
	"predicates\x18\x03 \x03(\v2*.envoy.config.core.v3.TypedExtensionConfigR\n" +
	"predicates\x12=\n" +
	"\x1ballow_cross_scheme_redirect\x18\x04 \x01(\bR\x18allowCrossSchemeRedirect\x12K\n" +
	"\x18response_headers_to_copy\x18\x05 \x03(\tB\x12\xfaB\x0f\x92\x01\f\x18\x01\"\br\x06\xc8\x01\x00\xc0\x01\x01R\x15responseHeadersToCopy\"y\n" +
	"\fFilterConfig\x12,\n" +
	"\x06config\x18\x01 \x01(\v2\x14.google.protobuf.AnyR\x06config\x12\x1f\n" +
	"\vis_optional\x18\x02 \x01(\bR\n" +
	"isOptional\x12\x1a\n" +
	"\bdisabled\x18\x03 \x01(\bR\bdisabledB\x8b\x01\xba\x80\xc8\xd1\x06\x02\x10\x02\n" +
	"#io.envoyproxy.envoy.config.route.v3B\x14RouteComponentsProtoP\x01ZDgithub.com/envoyproxy/go-control-plane/envoy/config/route/v3;routev3b\x06proto3"

var (
	file_envoy_config_route_v3_route_components_proto_rawDescOnce sync.Once
	file_envoy_config_route_v3_route_components_proto_rawDescData []byte
)

func file_envoy_config_route_v3_route_components_proto_rawDescGZIP() []byte {
	file_envoy_config_route_v3_route_components_proto_rawDescOnce.Do(func() {
		file_envoy_config_route_v3_route_components_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_envoy_config_route_v3_route_components_proto_rawDesc), len(file_envoy_config_route_v3_route_components_proto_rawDesc)))
	})
	return file_envoy_config_route_v3_route_components_proto_rawDescData
}

var file_envoy_config_route_v3_route_components_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
var file_envoy_config_route_v3_route_components_proto_msgTypes = make([]protoimpl.MessageInfo, 63)
var file_envoy_config_route_v3_route_components_proto_goTypes = []any{
	(VirtualHost_TlsRequirementType)(0),                 // 0: envoy.config.route.v3.VirtualHost.TlsRequirementType
	(RouteAction_ClusterNotFoundResponseCode)(0),        // 1: envoy.config.route.v3.RouteAction.ClusterNotFoundResponseCode
	(RouteAction_InternalRedirectAction)(0),             // 2: envoy.config.route.v3.RouteAction.InternalRedirectAction
	(RetryPolicy_ResetHeaderFormat)(0),                  // 3: envoy.config.route.v3.RetryPolicy.ResetHeaderFormat
	(RedirectAction_RedirectResponseCode)(0),            // 4: envoy.config.route.v3.RedirectAction.RedirectResponseCode
	(RateLimit_XRateLimitOption)(0),                     // 5: envoy.config.route.v3.RateLimit.XRateLimitOption
	(RateLimit_Action_MetaData_Source)(0),               // 6: envoy.config.route.v3.RateLimit.Action.MetaData.Source
	(*VirtualHost)(nil),                                 // 7: envoy.config.route.v3.VirtualHost
	(*FilterAction)(nil),                                // 8: envoy.config.route.v3.FilterAction
	(*RouteList)(nil),                                   // 9: envoy.config.route.v3.RouteList
	(*Route)(nil),                                       // 10: envoy.config.route.v3.Route
	(*WeightedCluster)(nil),                             // 11: envoy.config.route.v3.WeightedCluster
	(*ClusterSpecifierPlugin)(nil),                      // 12: envoy.config.route.v3.ClusterSpecifierPlugin
	(*RouteMatch)(nil),                                  // 13: envoy.config.route.v3.RouteMatch
	(*CorsPolicy)(nil),                                  // 14: envoy.config.route.v3.CorsPolicy
	(*RouteAction)(nil),                                 // 15: envoy.config.route.v3.RouteAction
	(*RetryPolicy)(nil),                                 // 16: envoy.config.route.v3.RetryPolicy
	(*HedgePolicy)(nil),                                 // 17: envoy.config.route.v3.HedgePolicy
	(*RedirectAction)(nil),                              // 18: envoy.config.route.v3.RedirectAction
	(*DirectResponseAction)(nil),                        // 19: envoy.config.route.v3.DirectResponseAction
	(*NonForwardingAction)(nil),                         // 20: envoy.config.route.v3.NonForwardingAction
	(*Decorator)(nil),                                   // 21: envoy.config.route.v3.Decorator
	(*Tracing)(nil),                                     // 22: envoy.config.route.v3.Tracing
	(*VirtualCluster)(nil),                              // 23: envoy.config.route.v3.VirtualCluster
	(*RateLimit)(nil),                                   // 24: envoy.config.route.v3.RateLimit
	(*HeaderMatcher)(nil),                               // 25: envoy.config.route.v3.HeaderMatcher
	(*QueryParameterMatcher)(nil),                       // 26: envoy.config.route.v3.QueryParameterMatcher
	(*CookieMatcher)(nil),                               // 27: envoy.config.route.v3.CookieMatcher
	(*InternalRedirectPolicy)(nil),                      // 28: envoy.config.route.v3.InternalRedirectPolicy
	(*FilterConfig)(nil),                                // 29: envoy.config.route.v3.FilterConfig
	nil,                                                 // 30: envoy.config.route.v3.VirtualHost.TypedPerFilterConfigEntry
	nil,                                                 // 31: envoy.config.route.v3.Route.TypedPerFilterConfigEntry
	(*WeightedCluster_ClusterWeight)(nil),               // 32: envoy.config.route.v3.WeightedCluster.ClusterWeight
	nil,                                                 // 33: envoy.config.route.v3.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry
	(*RouteMatch_GrpcRouteMatchOptions)(nil),            // 34: envoy.config.route.v3.RouteMatch.GrpcRouteMatchOptions
	(*RouteMatch_TlsContextMatchOptions)(nil),           // 35: envoy.config.route.v3.RouteMatch.TlsContextMatchOptions
	(*RouteMatch_ConnectMatcher)(nil),                   // 36: envoy.config.route.v3.RouteMatch.ConnectMatcher
	(*RouteAction_RequestMirrorPolicy)(nil),             // 37: envoy.config.route.v3.RouteAction.RequestMirrorPolicy
	(*RouteAction_HashPolicy)(nil),                      // 38: envoy.config.route.v3.RouteAction.HashPolicy
	(*RouteAction_UpgradeConfig)(nil),                   // 39: envoy.config.route.v3.RouteAction.UpgradeConfig
	(*RouteAction_MaxStreamDuration)(nil),               // 40: envoy.config.route.v3.RouteAction.MaxStreamDuration
	(*RouteAction_HashPolicy_Header)(nil),               // 41: envoy.config.route.v3.RouteAction.HashPolicy.Header
	(*RouteAction_HashPolicy_CookieAttribute)(nil),      // 42: envoy.config.route.v3.RouteAction.HashPolicy.CookieAttribute
	(*RouteAction_HashPolicy_Cookie)(nil),               // 43: envoy.config.route.v3.RouteAction.HashPolicy.Cookie
	(*RouteAction_HashPolicy_ConnectionProperties)(nil), // 44: envoy.config.route.v3.RouteAction.HashPolicy.ConnectionProperties
	(*RouteAction_HashPolicy_QueryParameter)(nil),       // 45: envoy.config.route.v3.RouteAction.HashPolicy.QueryParameter
	(*RouteAction_HashPolicy_FilterState)(nil),          // 46: envoy.config.route.v3.RouteAction.HashPolicy.FilterState
	(*RouteAction_UpgradeConfig_ConnectConfig)(nil),     // 47: envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfig
	(*RetryPolicy_RetryPriority)(nil),                   // 48: envoy.config.route.v3.RetryPolicy.RetryPriority
	(*RetryPolicy_RetryHostPredicate)(nil),              // 49: envoy.config.route.v3.RetryPolicy.RetryHostPredicate
	(*RetryPolicy_RetryBackOff)(nil),                    // 50: envoy.config.route.v3.RetryPolicy.RetryBackOff
	(*RetryPolicy_ResetHeader)(nil),                     // 51: envoy.config.route.v3.RetryPolicy.ResetHeader
	(*RetryPolicy_RateLimitedRetryBackOff)(nil),         // 52: envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff
	(*RateLimit_Action)(nil),                            // 53: envoy.config.route.v3.RateLimit.Action
	(*RateLimit_Override)(nil),                          // 54: envoy.config.route.v3.RateLimit.Override
	(*RateLimit_HitsAddend)(nil),                        // 55: envoy.config.route.v3.RateLimit.HitsAddend
	(*RateLimit_Action_SourceCluster)(nil),              // 56: envoy.config.route.v3.RateLimit.Action.SourceCluster
	(*RateLimit_Action_DestinationCluster)(nil),         // 57: envoy.config.route.v3.RateLimit.Action.DestinationCluster
	(*RateLimit_Action_RequestHeaders)(nil),             // 58: envoy.config.route.v3.RateLimit.Action.RequestHeaders
	(*RateLimit_Action_QueryParameters)(nil),            // 59: envoy.config.route.v3.RateLimit.Action.QueryParameters
	(*RateLimit_Action_RemoteAddress)(nil),              // 60: envoy.config.route.v3.RateLimit.Action.RemoteAddress
	(*RateLimit_Action_MaskedRemoteAddress)(nil),        // 61: envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddress
	(*RateLimit_Action_GenericKey)(nil),                 // 62: envoy.config.route.v3.RateLimit.Action.GenericKey
	(*RateLimit_Action_HeaderValueMatch)(nil),           // 63: envoy.config.route.v3.RateLimit.Action.HeaderValueMatch
	(*RateLimit_Action_DynamicMetaData)(nil),            // 64: envoy.config.route.v3.RateLimit.Action.DynamicMetaData
	(*RateLimit_Action_MetaData)(nil),                   // 65: envoy.config.route.v3.RateLimit.Action.MetaData
	(*RateLimit_Action_QueryParameterValueMatch)(nil),   // 66: envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatch
	(*RateLimit_Action_RemoteAddressMatch)(nil),         // 67: envoy.config.route.v3.RateLimit.Action.RemoteAddressMatch
	(*RateLimit_Override_DynamicMetadata)(nil),          // 68: envoy.config.route.v3.RateLimit.Override.DynamicMetadata
	(*RateLimit_Override_RateLimitOverride)(nil),        // 69: envoy.config.route.v3.RateLimit.Override.RateLimitOverride
	(*v3.Matcher)(nil),                                  // 70: xds.type.matcher.v3.Matcher
	(*v31.HeaderValueOption)(nil),                       // 71: envoy.config.core.v3.HeaderValueOption
	(*anypb.Any)(nil),                                   // 72: google.protobuf.Any
	(*wrapperspb.UInt32Value)(nil),                      // 73: google.protobuf.UInt32Value
	(*wrapperspb.UInt64Value)(nil),                      // 74: google.protobuf.UInt64Value
	(*v31.Metadata)(nil),                                // 75: envoy.config.core.v3.Metadata
	(*wrapperspb.BoolValue)(nil),                        // 76: google.protobuf.BoolValue
	(*v31.TypedExtensionConfig)(nil),                    // 77: envoy.config.core.v3.TypedExtensionConfig
	(*v32.RegexMatcher)(nil),                            // 78: envoy.type.matcher.v3.RegexMatcher
	(*v31.RuntimeFractionalPercent)(nil),                // 79: envoy.config.core.v3.RuntimeFractionalPercent
	(*v32.MetadataMatcher)(nil),                         // 80: envoy.type.matcher.v3.MetadataMatcher
	(*v32.FilterStateMatcher)(nil),                      // 81: envoy.type.matcher.v3.FilterStateMatcher
	(*v32.StringMatcher)(nil),                           // 82: envoy.type.matcher.v3.StringMatcher
	(*v32.RegexMatchAndSubstitute)(nil),                 // 83: envoy.type.matcher.v3.RegexMatchAndSubstitute
	(*durationpb.Duration)(nil),                         // 84: google.protobuf.Duration
	(v31.RoutingPriority)(0),                            // 85: envoy.config.core.v3.RoutingPriority
	(*v33.FractionalPercent)(nil),                       // 86: envoy.type.v3.FractionalPercent
	(*v31.DataSource)(nil),                              // 87: envoy.config.core.v3.DataSource
	(*v31.SubstitutionFormatString)(nil),                // 88: envoy.config.core.v3.SubstitutionFormatString
	(*v34.CustomTag)(nil),                               // 89: envoy.type.tracing.v3.CustomTag
	(*v33.Int64Range)(nil),                              // 90: envoy.type.v3.Int64Range
	(*v35.HeaderMutation)(nil),                          // 91: envoy.config.common.mutation_rules.v3.HeaderMutation
	(*v31.ProxyProtocolConfig)(nil),                     // 92: envoy.config.core.v3.ProxyProtocolConfig
	(*v36.MetadataKey)(nil),                             // 93: envoy.type.metadata.v3.MetadataKey
	(*v32.AddressMatcher)(nil),                          // 94: envoy.type.matcher.v3.AddressMatcher
	(v33.RateLimitUnit)(0),                              // 95: envoy.type.v3.RateLimitUnit
}
var file_envoy_config_route_v3_route_components_proto_depIdxs = []int32{
	10,  // 0: envoy.config.route.v3.VirtualHost.routes:type_name -> envoy.config.route.v3.Route
	70,  // 1: envoy.config.route.v3.VirtualHost.matcher:type_name -> xds.type.matcher.v3.Matcher
	0,   // 2: envoy.config.route.v3.VirtualHost.require_tls:type_name -> envoy.config.route.v3.VirtualHost.TlsRequirementType
	23,  // 3: envoy.config.route.v3.VirtualHost.virtual_clusters:type_name -> envoy.config.route.v3.VirtualCluster
	24,  // 4: envoy.config.route.v3.VirtualHost.rate_limits:type_name -> envoy.config.route.v3.RateLimit
	71,  // 5: envoy.config.route.v3.VirtualHost.request_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	71,  // 6: envoy.config.route.v3.VirtualHost.response_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	14,  // 7: envoy.config.route.v3.VirtualHost.cors:type_name -> envoy.config.route.v3.CorsPolicy
	30,  // 8: envoy.config.route.v3.VirtualHost.typed_per_filter_config:type_name -> envoy.config.route.v3.VirtualHost.TypedPerFilterConfigEntry
	16,  // 9: envoy.config.route.v3.VirtualHost.retry_policy:type_name -> envoy.config.route.v3.RetryPolicy
	72,  // 10: envoy.config.route.v3.VirtualHost.retry_policy_typed_config:type_name -> google.protobuf.Any
	17,  // 11: envoy.config.route.v3.VirtualHost.hedge_policy:type_name -> envoy.config.route.v3.HedgePolicy
	73,  // 12: envoy.config.route.v3.VirtualHost.per_request_buffer_limit_bytes:type_name -> google.protobuf.UInt32Value
	74,  // 13: envoy.config.route.v3.VirtualHost.request_body_buffer_limit:type_name -> google.protobuf.UInt64Value
	37,  // 14: envoy.config.route.v3.VirtualHost.request_mirror_policies:type_name -> envoy.config.route.v3.RouteAction.RequestMirrorPolicy
	75,  // 15: envoy.config.route.v3.VirtualHost.metadata:type_name -> envoy.config.core.v3.Metadata
	72,  // 16: envoy.config.route.v3.FilterAction.action:type_name -> google.protobuf.Any
	10,  // 17: envoy.config.route.v3.RouteList.routes:type_name -> envoy.config.route.v3.Route
	13,  // 18: envoy.config.route.v3.Route.match:type_name -> envoy.config.route.v3.RouteMatch
	15,  // 19: envoy.config.route.v3.Route.route:type_name -> envoy.config.route.v3.RouteAction
	18,  // 20: envoy.config.route.v3.Route.redirect:type_name -> envoy.config.route.v3.RedirectAction
	19,  // 21: envoy.config.route.v3.Route.direct_response:type_name -> envoy.config.route.v3.DirectResponseAction
	8,   // 22: envoy.config.route.v3.Route.filter_action:type_name -> envoy.config.route.v3.FilterAction
	20,  // 23: envoy.config.route.v3.Route.non_forwarding_action:type_name -> envoy.config.route.v3.NonForwardingAction
	75,  // 24: envoy.config.route.v3.Route.metadata:type_name -> envoy.config.core.v3.Metadata
	21,  // 25: envoy.config.route.v3.Route.decorator:type_name -> envoy.config.route.v3.Decorator
	31,  // 26: envoy.config.route.v3.Route.typed_per_filter_config:type_name -> envoy.config.route.v3.Route.TypedPerFilterConfigEntry
	71,  // 27: envoy.config.route.v3.Route.request_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	71,  // 28: envoy.config.route.v3.Route.response_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	22,  // 29: envoy.config.route.v3.Route.tracing:type_name -> envoy.config.route.v3.Tracing
	73,  // 30: envoy.config.route.v3.Route.per_request_buffer_limit_bytes:type_name -> google.protobuf.UInt32Value
	74,  // 31: envoy.config.route.v3.Route.request_body_buffer_limit:type_name -> google.protobuf.UInt64Value
	32,  // 32: envoy.config.route.v3.WeightedCluster.clusters:type_name -> envoy.config.route.v3.WeightedCluster.ClusterWeight
	73,  // 33: envoy.config.route.v3.WeightedCluster.total_weight:type_name -> google.protobuf.UInt32Value
	76,  // 34: envoy.config.route.v3.WeightedCluster.use_hash_policy:type_name -> google.protobuf.BoolValue
	77,  // 35: envoy.config.route.v3.ClusterSpecifierPlugin.extension:type_name -> envoy.config.core.v3.TypedExtensionConfig
	78,  // 36: envoy.config.route.v3.RouteMatch.safe_regex:type_name -> envoy.type.matcher.v3.RegexMatcher
	36,  // 37: envoy.config.route.v3.RouteMatch.connect_matcher:type_name -> envoy.config.route.v3.RouteMatch.ConnectMatcher
	77,  // 38: envoy.config.route.v3.RouteMatch.path_match_policy:type_name -> envoy.config.core.v3.TypedExtensionConfig
	76,  // 39: envoy.config.route.v3.RouteMatch.case_sensitive:type_name -> google.protobuf.BoolValue
	79,  // 40: envoy.config.route.v3.RouteMatch.runtime_fraction:type_name -> envoy.config.core.v3.RuntimeFractionalPercent
	25,  // 41: envoy.config.route.v3.RouteMatch.headers:type_name -> envoy.config.route.v3.HeaderMatcher
	26,  // 42: envoy.config.route.v3.RouteMatch.query_parameters:type_name -> envoy.config.route.v3.QueryParameterMatcher
	27,  // 43: envoy.config.route.v3.RouteMatch.cookies:type_name -> envoy.config.route.v3.CookieMatcher
	34,  // 44: envoy.config.route.v3.RouteMatch.grpc:type_name -> envoy.config.route.v3.RouteMatch.GrpcRouteMatchOptions
	35,  // 45: envoy.config.route.v3.RouteMatch.tls_context:type_name -> envoy.config.route.v3.RouteMatch.TlsContextMatchOptions
	80,  // 46: envoy.config.route.v3.RouteMatch.dynamic_metadata:type_name -> envoy.type.matcher.v3.MetadataMatcher
	81,  // 47: envoy.config.route.v3.RouteMatch.filter_state:type_name -> envoy.type.matcher.v3.FilterStateMatcher
	82,  // 48: envoy.config.route.v3.CorsPolicy.allow_origin_string_match:type_name -> envoy.type.matcher.v3.StringMatcher
	76,  // 49: envoy.config.route.v3.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue
	79,  // 50: envoy.config.route.v3.CorsPolicy.filter_enabled:type_name -> envoy.config.core.v3.RuntimeFractionalPercent
	79,  // 51: envoy.config.route.v3.CorsPolicy.shadow_enabled:type_name -> envoy.config.core.v3.RuntimeFractionalPercent
	76,  // 52: envoy.config.route.v3.CorsPolicy.allow_private_network_access:type_name -> google.protobuf.BoolValue
	76,  // 53: envoy.config.route.v3.CorsPolicy.forward_not_matching_preflights:type_name -> google.protobuf.BoolValue
	11,  // 54: envoy.config.route.v3.RouteAction.weighted_clusters:type_name -> envoy.config.route.v3.WeightedCluster
	12,  // 55: envoy.config.route.v3.RouteAction.inline_cluster_specifier_plugin:type_name -> envoy.config.route.v3.ClusterSpecifierPlugin
	1,   // 56: envoy.config.route.v3.RouteAction.cluster_not_found_response_code:type_name -> envoy.config.route.v3.RouteAction.ClusterNotFoundResponseCode
	75,  // 57: envoy.config.route.v3.RouteAction.metadata_match:type_name -> envoy.config.core.v3.Metadata
	83,  // 58: envoy.config.route.v3.RouteAction.regex_rewrite:type_name -> envoy.type.matcher.v3.RegexMatchAndSubstitute
	77,  // 59: envoy.config.route.v3.RouteAction.path_rewrite_policy:type_name -> envoy.config.core.v3.TypedExtensionConfig
	76,  // 60: envoy.config.route.v3.RouteAction.auto_host_rewrite:type_name -> google.protobuf.BoolValue
	83,  // 61: envoy.config.route.v3.RouteAction.host_rewrite_path_regex:type_name -> envoy.type.matcher.v3.RegexMatchAndSubstitute
	84,  // 62: envoy.config.route.v3.RouteAction.timeout:type_name -> google.protobuf.Duration
	84,  // 63: envoy.config.route.v3.RouteAction.idle_timeout:type_name -> google.protobuf.Duration
	84,  // 64: envoy.config.route.v3.RouteAction.flush_timeout:type_name -> google.protobuf.Duration
	77,  // 65: envoy.config.route.v3.RouteAction.early_data_policy:type_name -> envoy.config.core.v3.TypedExtensionConfig
	16,  // 66: envoy.config.route.v3.RouteAction.retry_policy:type_name -> envoy.config.route.v3.RetryPolicy
	72,  // 67: envoy.config.route.v3.RouteAction.retry_policy_typed_config:type_name -> google.protobuf.Any
	37,  // 68: envoy.config.route.v3.RouteAction.request_mirror_policies:type_name -> envoy.config.route.v3.RouteAction.RequestMirrorPolicy
	85,  // 69: envoy.config.route.v3.RouteAction.priority:type_name -> envoy.config.core.v3.RoutingPriority
	24,  // 70: envoy.config.route.v3.RouteAction.rate_limits:type_name -> envoy.config.route.v3.RateLimit
	76,  // 71: envoy.config.route.v3.RouteAction.include_vh_rate_limits:type_name -> google.protobuf.BoolValue
	38,  // 72: envoy.config.route.v3.RouteAction.hash_policy:type_name -> envoy.config.route.v3.RouteAction.HashPolicy
	14,  // 73: envoy.config.route.v3.RouteAction.cors:type_name -> envoy.config.route.v3.CorsPolicy
	84,  // 74: envoy.config.route.v3.RouteAction.max_grpc_timeout:type_name -> google.protobuf.Duration
	84,  // 75: envoy.config.route.v3.RouteAction.grpc_timeout_offset:type_name -> google.protobuf.Duration
	39,  // 76: envoy.config.route.v3.RouteAction.upgrade_configs:type_name -> envoy.config.route.v3.RouteAction.UpgradeConfig
	28,  // 77: envoy.config.route.v3.RouteAction.internal_redirect_policy:type_name -> envoy.config.route.v3.InternalRedirectPolicy
	2,   // 78: envoy.config.route.v3.RouteAction.internal_redirect_action:type_name -> envoy.config.route.v3.RouteAction.InternalRedirectAction
	73,  // 79: envoy.config.route.v3.RouteAction.max_internal_redirects:type_name -> google.protobuf.UInt32Value
	17,  // 80: envoy.config.route.v3.RouteAction.hedge_policy:type_name -> envoy.config.route.v3.HedgePolicy
	40,  // 81: envoy.config.route.v3.RouteAction.max_stream_duration:type_name -> envoy.config.route.v3.RouteAction.MaxStreamDuration
	73,  // 82: envoy.config.route.v3.RetryPolicy.num_retries:type_name -> google.protobuf.UInt32Value
	84,  // 83: envoy.config.route.v3.RetryPolicy.per_try_timeout:type_name -> google.protobuf.Duration
	84,  // 84: envoy.config.route.v3.RetryPolicy.per_try_idle_timeout:type_name -> google.protobuf.Duration
	48,  // 85: envoy.config.route.v3.RetryPolicy.retry_priority:type_name -> envoy.config.route.v3.RetryPolicy.RetryPriority
	49,  // 86: envoy.config.route.v3.RetryPolicy.retry_host_predicate:type_name -> envoy.config.route.v3.RetryPolicy.RetryHostPredicate
	77,  // 87: envoy.config.route.v3.RetryPolicy.retry_options_predicates:type_name -> envoy.config.core.v3.TypedExtensionConfig
	50,  // 88: envoy.config.route.v3.RetryPolicy.retry_back_off:type_name -> envoy.config.route.v3.RetryPolicy.RetryBackOff
	52,  // 89: envoy.config.route.v3.RetryPolicy.rate_limited_retry_back_off:type_name -> envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff
	25,  // 90: envoy.config.route.v3.RetryPolicy.retriable_headers:type_name -> envoy.config.route.v3.HeaderMatcher
	25,  // 91: envoy.config.route.v3.RetryPolicy.retriable_request_headers:type_name -> envoy.config.route.v3.HeaderMatcher
	73,  // 92: envoy.config.route.v3.HedgePolicy.initial_requests:type_name -> google.protobuf.UInt32Value
	86,  // 93: envoy.config.route.v3.HedgePolicy.additional_request_chance:type_name -> envoy.type.v3.FractionalPercent
	83,  // 94: envoy.config.route.v3.RedirectAction.regex_rewrite:type_name -> envoy.type.matcher.v3.RegexMatchAndSubstitute
	4,   // 95: envoy.config.route.v3.RedirectAction.response_code:type_name -> envoy.config.route.v3.RedirectAction.RedirectResponseCode
	87,  // 96: envoy.config.route.v3.DirectResponseAction.body:type_name -> envoy.config.core.v3.DataSource
	88,  // 97: envoy.config.route.v3.DirectResponseAction.body_format:type_name -> envoy.config.core.v3.SubstitutionFormatString
	76,  // 98: envoy.config.route.v3.Decorator.propagate:type_name -> google.protobuf.BoolValue
	86,  // 99: envoy.config.route.v3.Tracing.client_sampling:type_name -> envoy.type.v3.FractionalPercent
	86,  // 100: envoy.config.route.v3.Tracing.random_sampling:type_name -> envoy.type.v3.FractionalPercent
	86,  // 101: envoy.config.route.v3.Tracing.overall_sampling:type_name -> envoy.type.v3.FractionalPercent
	89,  // 102: envoy.config.route.v3.Tracing.custom_tags:type_name -> envoy.type.tracing.v3.CustomTag
	25,  // 103: envoy.config.route.v3.VirtualCluster.headers:type_name -> envoy.config.route.v3.HeaderMatcher
	73,  // 104: envoy.config.route.v3.RateLimit.stage:type_name -> google.protobuf.UInt32Value
	53,  // 105: envoy.config.route.v3.RateLimit.actions:type_name -> envoy.config.route.v3.RateLimit.Action
	54,  // 106: envoy.config.route.v3.RateLimit.limit:type_name -> envoy.config.route.v3.RateLimit.Override
	55,  // 107: envoy.config.route.v3.RateLimit.hits_addend:type_name -> envoy.config.route.v3.RateLimit.HitsAddend
	5,   // 108: envoy.config.route.v3.RateLimit.x_ratelimit_option:type_name -> envoy.config.route.v3.RateLimit.XRateLimitOption
	78,  // 109: envoy.config.route.v3.HeaderMatcher.safe_regex_match:type_name -> envoy.type.matcher.v3.RegexMatcher
	90,  // 110: envoy.config.route.v3.HeaderMatcher.range_match:type_name -> envoy.type.v3.Int64Range
	82,  // 111: envoy.config.route.v3.HeaderMatcher.string_match:type_name -> envoy.type.matcher.v3.StringMatcher
	82,  // 112: envoy.config.route.v3.QueryParameterMatcher.string_match:type_name -> envoy.type.matcher.v3.StringMatcher
	82,  // 113: envoy.config.route.v3.CookieMatcher.string_match:type_name -> envoy.type.matcher.v3.StringMatcher
	73,  // 114: envoy.config.route.v3.InternalRedirectPolicy.max_internal_redirects:type_name -> google.protobuf.UInt32Value
	77,  // 115: envoy.config.route.v3.InternalRedirectPolicy.predicates:type_name -> envoy.config.core.v3.TypedExtensionConfig
	72,  // 116: envoy.config.route.v3.FilterConfig.config:type_name -> google.protobuf.Any
	72,  // 117: envoy.config.route.v3.VirtualHost.TypedPerFilterConfigEntry.value:type_name -> google.protobuf.Any
	72,  // 118: envoy.config.route.v3.Route.TypedPerFilterConfigEntry.value:type_name -> google.protobuf.Any
	73,  // 119: envoy.config.route.v3.WeightedCluster.ClusterWeight.weight:type_name -> google.protobuf.UInt32Value
	75,  // 120: envoy.config.route.v3.WeightedCluster.ClusterWeight.metadata_match:type_name -> envoy.config.core.v3.Metadata
	71,  // 121: envoy.config.route.v3.WeightedCluster.ClusterWeight.request_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	71,  // 122: envoy.config.route.v3.WeightedCluster.ClusterWeight.response_headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
	33,  // 123: envoy.config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config:type_name -> envoy.config.route.v3.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry
	72,  // 124: envoy.config.route.v3.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry.value:type_name -> google.protobuf.Any
	76,  // 125: envoy.config.route.v3.RouteMatch.TlsContextMatchOptions.presented:type_name -> google.protobuf.BoolValue
	76,  // 126: envoy.config.route.v3.RouteMatch.TlsContextMatchOptions.validated:type_name -> google.protobuf.BoolValue
	79,  // 127: envoy.config.route.v3.RouteAction.RequestMirrorPolicy.runtime_fraction:type_name -> envoy.config.core.v3.RuntimeFractionalPercent
	76,  // 128: envoy.config.route.v3.RouteAction.RequestMirrorPolicy.trace_sampled:type_name -> google.protobuf.BoolValue
	91,  // 129: envoy.config.route.v3.RouteAction.RequestMirrorPolicy.request_headers_mutations:type_name -> envoy.config.common.mutation_rules.v3.HeaderMutation
	41,  // 130: envoy.config.route.v3.RouteAction.HashPolicy.header:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.Header
	43,  // 131: envoy.config.route.v3.RouteAction.HashPolicy.cookie:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.Cookie
	44,  // 132: envoy.config.route.v3.RouteAction.HashPolicy.connection_properties:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.ConnectionProperties
	45,  // 133: envoy.config.route.v3.RouteAction.HashPolicy.query_parameter:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.QueryParameter
	46,  // 134: envoy.config.route.v3.RouteAction.HashPolicy.filter_state:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.FilterState
	76,  // 135: envoy.config.route.v3.RouteAction.UpgradeConfig.enabled:type_name -> google.protobuf.BoolValue
	47,  // 136: envoy.config.route.v3.RouteAction.UpgradeConfig.connect_config:type_name -> envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfig
	84,  // 137: envoy.config.route.v3.RouteAction.MaxStreamDuration.max_stream_duration:type_name -> google.protobuf.Duration
	84,  // 138: envoy.config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_max:type_name -> google.protobuf.Duration
	84,  // 139: envoy.config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_offset:type_name -> google.protobuf.Duration
	83,  // 140: envoy.config.route.v3.RouteAction.HashPolicy.Header.regex_rewrite:type_name -> envoy.type.matcher.v3.RegexMatchAndSubstitute
	84,  // 141: envoy.config.route.v3.RouteAction.HashPolicy.Cookie.ttl:type_name -> google.protobuf.Duration
	42,  // 142: envoy.config.route.v3.RouteAction.HashPolicy.Cookie.attributes:type_name -> envoy.config.route.v3.RouteAction.HashPolicy.CookieAttribute
	92,  // 143: envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfig.proxy_protocol_config:type_name -> envoy.config.core.v3.ProxyProtocolConfig
	72,  // 144: envoy.config.route.v3.RetryPolicy.RetryPriority.typed_config:type_name -> google.protobuf.Any
	72,  // 145: envoy.config.route.v3.RetryPolicy.RetryHostPredicate.typed_config:type_name -> google.protobuf.Any
	84,  // 146: envoy.config.route.v3.RetryPolicy.RetryBackOff.base_interval:type_name -> google.protobuf.Duration
	84,  // 147: envoy.config.route.v3.RetryPolicy.RetryBackOff.max_interval:type_name -> google.protobuf.Duration
	3,   // 148: envoy.config.route.v3.RetryPolicy.ResetHeader.format:type_name -> envoy.config.route.v3.RetryPolicy.ResetHeaderFormat
	51,  // 149: envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff.reset_headers:type_name -> envoy.config.route.v3.RetryPolicy.ResetHeader
	84,  // 150: envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff.max_interval:type_name -> google.protobuf.Duration
	56,  // 151: envoy.config.route.v3.RateLimit.Action.source_cluster:type_name -> envoy.config.route.v3.RateLimit.Action.SourceCluster
	57,  // 152: envoy.config.route.v3.RateLimit.Action.destination_cluster:type_name -> envoy.config.route.v3.RateLimit.Action.DestinationCluster
	58,  // 153: envoy.config.route.v3.RateLimit.Action.request_headers:type_name -> envoy.config.route.v3.RateLimit.Action.RequestHeaders
	59,  // 154: envoy.config.route.v3.RateLimit.Action.query_parameters:type_name -> envoy.config.route.v3.RateLimit.Action.QueryParameters
	60,  // 155: envoy.config.route.v3.RateLimit.Action.remote_address:type_name -> envoy.config.route.v3.RateLimit.Action.RemoteAddress
	62,  // 156: envoy.config.route.v3.RateLimit.Action.generic_key:type_name -> envoy.config.route.v3.RateLimit.Action.GenericKey
	63,  // 157: envoy.config.route.v3.RateLimit.Action.header_value_match:type_name -> envoy.config.route.v3.RateLimit.Action.HeaderValueMatch
	64,  // 158: envoy.config.route.v3.RateLimit.Action.dynamic_metadata:type_name -> envoy.config.route.v3.RateLimit.Action.DynamicMetaData
	65,  // 159: envoy.config.route.v3.RateLimit.Action.metadata:type_name -> envoy.config.route.v3.RateLimit.Action.MetaData
	77,  // 160: envoy.config.route.v3.RateLimit.Action.extension:type_name -> envoy.config.core.v3.TypedExtensionConfig
	61,  // 161: envoy.config.route.v3.RateLimit.Action.masked_remote_address:type_name -> envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddress
	66,  // 162: envoy.config.route.v3.RateLimit.Action.query_parameter_value_match:type_name -> envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatch
	67,  // 163: envoy.config.route.v3.RateLimit.Action.remote_address_match:type_name -> envoy.config.route.v3.RateLimit.Action.RemoteAddressMatch
	68,  // 164: envoy.config.route.v3.RateLimit.Override.dynamic_metadata:type_name -> envoy.config.route.v3.RateLimit.Override.DynamicMetadata
	69,  // 165: envoy.config.route.v3.RateLimit.Override.rate_limit:type_name -> envoy.config.route.v3.RateLimit.Override.RateLimitOverride
	74,  // 166: envoy.config.route.v3.RateLimit.HitsAddend.number:type_name -> google.protobuf.UInt64Value
	73,  // 167: envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddress.v4_prefix_mask_len:type_name -> google.protobuf.UInt32Value
	73,  // 168: envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddress.v6_prefix_mask_len:type_name -> google.protobuf.UInt32Value
	76,  // 169: envoy.config.route.v3.RateLimit.Action.HeaderValueMatch.expect_match:type_name -> google.protobuf.BoolValue
	25,  // 170: envoy.config.route.v3.RateLimit.Action.HeaderValueMatch.headers:type_name -> envoy.config.route.v3.HeaderMatcher
	93,  // 171: envoy.config.route.v3.RateLimit.Action.DynamicMetaData.metadata_key:type_name -> envoy.type.metadata.v3.MetadataKey
	93,  // 172: envoy.config.route.v3.RateLimit.Action.MetaData.metadata_key:type_name -> envoy.type.metadata.v3.MetadataKey
	6,   // 173: envoy.config.route.v3.RateLimit.Action.MetaData.source:type_name -> envoy.config.route.v3.RateLimit.Action.MetaData.Source
	76,  // 174: envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatch.expect_match:type_name -> google.protobuf.BoolValue
	26,  // 175: envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatch.query_parameters:type_name -> envoy.config.route.v3.QueryParameterMatcher
	94,  // 176: envoy.config.route.v3.RateLimit.Action.RemoteAddressMatch.address_matcher:type_name -> envoy.type.matcher.v3.AddressMatcher
	93,  // 177: envoy.config.route.v3.RateLimit.Override.DynamicMetadata.metadata_key:type_name -> envoy.type.metadata.v3.MetadataKey
	95,  // 178: envoy.config.route.v3.RateLimit.Override.RateLimitOverride.unit:type_name -> envoy.type.v3.RateLimitUnit
	179, // [179:179] is the sub-list for method output_type
	179, // [179:179] is the sub-list for method input_type
	179, // [179:179] is the sub-list for extension type_name
	179, // [179:179] is the sub-list for extension extendee
	0,   // [0:179] is the sub-list for field type_name
}

func init() { file_envoy_config_route_v3_route_components_proto_init() }
func file_envoy_config_route_v3_route_components_proto_init() {
	if File_envoy_config_route_v3_route_components_proto != nil {
		return
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[3].OneofWrappers = []any{
		(*Route_Route)(nil),
		(*Route_Redirect)(nil),
		(*Route_DirectResponse)(nil),
		(*Route_FilterAction)(nil),
		(*Route_NonForwardingAction)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[4].OneofWrappers = []any{
		(*WeightedCluster_HeaderName)(nil),
		(*WeightedCluster_UseHashPolicy)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[6].OneofWrappers = []any{
		(*RouteMatch_Prefix)(nil),
		(*RouteMatch_Path)(nil),
		(*RouteMatch_SafeRegex)(nil),
		(*RouteMatch_ConnectMatcher_)(nil),
		(*RouteMatch_PathSeparatedPrefix)(nil),
		(*RouteMatch_PathMatchPolicy)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[7].OneofWrappers = []any{
		(*CorsPolicy_FilterEnabled)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[8].OneofWrappers = []any{
		(*RouteAction_Cluster)(nil),
		(*RouteAction_ClusterHeader)(nil),
		(*RouteAction_WeightedClusters)(nil),
		(*RouteAction_ClusterSpecifierPlugin)(nil),
		(*RouteAction_InlineClusterSpecifierPlugin)(nil),
		(*RouteAction_HostRewriteLiteral)(nil),
		(*RouteAction_AutoHostRewrite)(nil),
		(*RouteAction_HostRewriteHeader)(nil),
		(*RouteAction_HostRewritePathRegex)(nil),
		(*RouteAction_HostRewrite)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[11].OneofWrappers = []any{
		(*RedirectAction_HttpsRedirect)(nil),
		(*RedirectAction_SchemeRedirect)(nil),
		(*RedirectAction_PathRedirect)(nil),
		(*RedirectAction_PrefixRewrite)(nil),
		(*RedirectAction_RegexRewrite)(nil),
		(*RedirectAction_PathRewrite)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[18].OneofWrappers = []any{
		(*HeaderMatcher_ExactMatch)(nil),
		(*HeaderMatcher_SafeRegexMatch)(nil),
		(*HeaderMatcher_RangeMatch)(nil),
		(*HeaderMatcher_PresentMatch)(nil),
		(*HeaderMatcher_PrefixMatch)(nil),
		(*HeaderMatcher_SuffixMatch)(nil),
		(*HeaderMatcher_ContainsMatch)(nil),
		(*HeaderMatcher_StringMatch)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[19].OneofWrappers = []any{
		(*QueryParameterMatcher_StringMatch)(nil),
		(*QueryParameterMatcher_PresentMatch)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[25].OneofWrappers = []any{
		(*WeightedCluster_ClusterWeight_HostRewriteLiteral)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[31].OneofWrappers = []any{
		(*RouteAction_HashPolicy_Header_)(nil),
		(*RouteAction_HashPolicy_Cookie_)(nil),
		(*RouteAction_HashPolicy_ConnectionProperties_)(nil),
		(*RouteAction_HashPolicy_QueryParameter_)(nil),
		(*RouteAction_HashPolicy_FilterState_)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[41].OneofWrappers = []any{
		(*RetryPolicy_RetryPriority_TypedConfig)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[42].OneofWrappers = []any{
		(*RetryPolicy_RetryHostPredicate_TypedConfig)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[46].OneofWrappers = []any{
		(*RateLimit_Action_SourceCluster_)(nil),
		(*RateLimit_Action_DestinationCluster_)(nil),
		(*RateLimit_Action_RequestHeaders_)(nil),
		(*RateLimit_Action_QueryParameters_)(nil),
		(*RateLimit_Action_RemoteAddress_)(nil),
		(*RateLimit_Action_GenericKey_)(nil),
		(*RateLimit_Action_HeaderValueMatch_)(nil),
		(*RateLimit_Action_DynamicMetadata)(nil),
		(*RateLimit_Action_Metadata)(nil),
		(*RateLimit_Action_Extension)(nil),
		(*RateLimit_Action_MaskedRemoteAddress_)(nil),
		(*RateLimit_Action_QueryParameterValueMatch_)(nil),
		(*RateLimit_Action_RemoteAddressMatch_)(nil),
	}
	file_envoy_config_route_v3_route_components_proto_msgTypes[47].OneofWrappers = []any{
		(*RateLimit_Override_DynamicMetadata_)(nil),
		(*RateLimit_Override_RateLimit)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_envoy_config_route_v3_route_components_proto_rawDesc), len(file_envoy_config_route_v3_route_components_proto_rawDesc)),
			NumEnums:      7,
			NumMessages:   63,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_envoy_config_route_v3_route_components_proto_goTypes,
		DependencyIndexes: file_envoy_config_route_v3_route_components_proto_depIdxs,
		EnumInfos:         file_envoy_config_route_v3_route_components_proto_enumTypes,
		MessageInfos:      file_envoy_config_route_v3_route_components_proto_msgTypes,
	}.Build()
	File_envoy_config_route_v3_route_components_proto = out.File
	file_envoy_config_route_v3_route_components_proto_goTypes = nil
	file_envoy_config_route_v3_route_components_proto_depIdxs = nil
}
