// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        v7.35.1
// source: envoy/extensions/filters/http/router/v3/router.proto

package routerv3

import (
	_ "github.com/cncf/xds/go/udpa/annotations"
	_ "github.com/envoyproxy/go-control-plane/envoy/annotations"
	v3 "github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v3"
	v31 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	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)
)

// [#next-free-field: 11]
type Router struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Whether the router generates dynamic cluster statistics. Defaults to
	// true. Can be disabled in high performance scenarios.
	DynamicStats *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=dynamic_stats,json=dynamicStats,proto3" json:"dynamic_stats,omitempty"`
	// Whether to start a child span for egress routed calls. This can be
	// useful in scenarios where other filters (auth, ratelimit, etc.) make
	// outbound calls and have child spans rooted at the same ingress
	// parent. Defaults to false.
	//
	// .. attention::
	//
	//	This field is deprecated by the
	//	:ref:`spawn_upstream_span <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.spawn_upstream_span>`.
	//	Please use that ``spawn_upstream_span`` field to control the span creation.
	//
	// Deprecated: Marked as deprecated in envoy/extensions/filters/http/router/v3/router.proto.
	StartChildSpan bool `protobuf:"varint,2,opt,name=start_child_span,json=startChildSpan,proto3" json:"start_child_span,omitempty"`
	// Configuration for HTTP upstream logs emitted by the router. Upstream logs
	// are configured in the same way as access logs, but each log entry represents
	// an upstream request. Presuming retries are configured, multiple upstream
	// requests may be made for each downstream (inbound) request.
	UpstreamLog []*v3.AccessLog `protobuf:"bytes,3,rep,name=upstream_log,json=upstreamLog,proto3" json:"upstream_log,omitempty"`
	// Additional upstream access log options.
	UpstreamLogOptions *Router_UpstreamAccessLogOptions `protobuf:"bytes,9,opt,name=upstream_log_options,json=upstreamLogOptions,proto3" json:"upstream_log_options,omitempty"`
	// Do not add any additional “x-envoy-“ headers to requests or responses. This
	// only affects the :ref:`router filter generated x-envoy- headers
	// <config_http_filters_router_headers_set>`, other Envoy filters and the HTTP
	// connection manager may continue to set “x-envoy-“ headers.
	SuppressEnvoyHeaders bool `protobuf:"varint,4,opt,name=suppress_envoy_headers,json=suppressEnvoyHeaders,proto3" json:"suppress_envoy_headers,omitempty"`
	// Specifies a list of HTTP headers to strictly validate. Envoy will reject a
	// request and respond with HTTP status 400 if the request contains an invalid
	// value for any of the headers listed in this field. Strict header checking
	// is only supported for the following headers:
	//
	// Value must be a ','-delimited list (i.e. no spaces) of supported retry
	// policy values:
	//
	// * :ref:`config_http_filters_router_x-envoy-retry-grpc-on`
	// * :ref:`config_http_filters_router_x-envoy-retry-on`
	//
	// Value must be an integer:
	//
	// * :ref:`config_http_filters_router_x-envoy-max-retries`
	// * :ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`
	// * :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`
	StrictCheckHeaders []string `protobuf:"bytes,5,rep,name=strict_check_headers,json=strictCheckHeaders,proto3" json:"strict_check_headers,omitempty"`
	// If not set, ingress Envoy will ignore
	// :ref:`config_http_filters_router_x-envoy-expected-rq-timeout-ms` header, populated by egress
	// Envoy, when deriving timeout for upstream cluster.
	RespectExpectedRqTimeout bool `protobuf:"varint,6,opt,name=respect_expected_rq_timeout,json=respectExpectedRqTimeout,proto3" json:"respect_expected_rq_timeout,omitempty"`
	// If set, Envoy will avoid incrementing HTTP failure code stats
	// on gRPC requests. This includes the individual status code value
	// (e.g. upstream_rq_504) and group stats (e.g. upstream_rq_5xx).
	// This field is useful if interested in relying only on the gRPC
	// stats filter to define success and failure metrics for gRPC requests
	// as not all failed gRPC requests charge HTTP status code metrics. See
	// :ref:`gRPC stats filter<config_http_filters_grpc_stats>` documentation
	// for more details.
	SuppressGrpcRequestFailureCodeStats bool `protobuf:"varint,7,opt,name=suppress_grpc_request_failure_code_stats,json=suppressGrpcRequestFailureCodeStats,proto3" json:"suppress_grpc_request_failure_code_stats,omitempty"`
	// Optional HTTP filters for the upstream HTTP filter chain.
	//
	// .. note::
	//
	//	Upstream HTTP filters are currently in alpha.
	//
	// These filters will be applied for all requests that pass through the router.
	// They will also be applied to shadowed requests.
	// Upstream HTTP filters cannot change route or cluster.
	// Upstream HTTP filters specified on the cluster will override these filters.
	//
	// If using upstream HTTP filters, please be aware that local errors sent by
	// upstream HTTP filters will not trigger retries, and local errors sent by
	// upstream HTTP filters will count as a final response if hedging is configured.
	// [#extension-category: envoy.filters.http.upstream]
	UpstreamHttpFilters []*v31.HttpFilter `protobuf:"bytes,8,rep,name=upstream_http_filters,json=upstreamHttpFilters,proto3" json:"upstream_http_filters,omitempty"`
	// If set to true, Envoy will reject “CONNECT“ requests that send data before
	// receiving a “200“ response from the upstream. This early data behavior
	// is common for latency reduction but can cause issues with some upstreams.
	// Defaults to false to allow early data and be compatible with common behavior.
	RejectConnectRequestEarlyData *wrapperspb.BoolValue `protobuf:"bytes,10,opt,name=reject_connect_request_early_data,json=rejectConnectRequestEarlyData,proto3" json:"reject_connect_request_early_data,omitempty"`
	unknownFields                 protoimpl.UnknownFields
	sizeCache                     protoimpl.SizeCache
}

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

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

func (*Router) ProtoMessage() {}

func (x *Router) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_extensions_filters_http_router_v3_router_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 Router.ProtoReflect.Descriptor instead.
func (*Router) Descriptor() ([]byte, []int) {
	return file_envoy_extensions_filters_http_router_v3_router_proto_rawDescGZIP(), []int{0}
}

func (x *Router) GetDynamicStats() *wrapperspb.BoolValue {
	if x != nil {
		return x.DynamicStats
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/extensions/filters/http/router/v3/router.proto.
func (x *Router) GetStartChildSpan() bool {
	if x != nil {
		return x.StartChildSpan
	}
	return false
}

func (x *Router) GetUpstreamLog() []*v3.AccessLog {
	if x != nil {
		return x.UpstreamLog
	}
	return nil
}

func (x *Router) GetUpstreamLogOptions() *Router_UpstreamAccessLogOptions {
	if x != nil {
		return x.UpstreamLogOptions
	}
	return nil
}

func (x *Router) GetSuppressEnvoyHeaders() bool {
	if x != nil {
		return x.SuppressEnvoyHeaders
	}
	return false
}

func (x *Router) GetStrictCheckHeaders() []string {
	if x != nil {
		return x.StrictCheckHeaders
	}
	return nil
}

func (x *Router) GetRespectExpectedRqTimeout() bool {
	if x != nil {
		return x.RespectExpectedRqTimeout
	}
	return false
}

func (x *Router) GetSuppressGrpcRequestFailureCodeStats() bool {
	if x != nil {
		return x.SuppressGrpcRequestFailureCodeStats
	}
	return false
}

func (x *Router) GetUpstreamHttpFilters() []*v31.HttpFilter {
	if x != nil {
		return x.UpstreamHttpFilters
	}
	return nil
}

func (x *Router) GetRejectConnectRequestEarlyData() *wrapperspb.BoolValue {
	if x != nil {
		return x.RejectConnectRequestEarlyData
	}
	return nil
}

type Router_UpstreamAccessLogOptions struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// If set to true, an upstream access log will be recorded when an upstream stream is
	// associated to an http request. Note: Each HTTP request received for an already established
	// connection will result in an upstream access log record. This includes, for example,
	// consecutive HTTP requests over the same connection or a request that is retried.
	// In case a retry is applied, an upstream access log will be recorded for each retry.
	FlushUpstreamLogOnUpstreamStream bool `protobuf:"varint,1,opt,name=flush_upstream_log_on_upstream_stream,json=flushUpstreamLogOnUpstreamStream,proto3" json:"flush_upstream_log_on_upstream_stream,omitempty"`
	// The interval to flush the upstream access logs. By default, the router will flush an upstream
	// access log on stream close, when the HTTP request is complete. If this field is set, the router
	// will flush access logs periodically at the specified interval. This is especially useful in the
	// case of long-lived requests, such as CONNECT and Websockets.
	// The interval must be at least 1 millisecond.
	UpstreamLogFlushInterval *durationpb.Duration `protobuf:"bytes,2,opt,name=upstream_log_flush_interval,json=upstreamLogFlushInterval,proto3" json:"upstream_log_flush_interval,omitempty"`
	unknownFields            protoimpl.UnknownFields
	sizeCache                protoimpl.SizeCache
}

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

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

func (*Router_UpstreamAccessLogOptions) ProtoMessage() {}

func (x *Router_UpstreamAccessLogOptions) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_extensions_filters_http_router_v3_router_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 Router_UpstreamAccessLogOptions.ProtoReflect.Descriptor instead.
func (*Router_UpstreamAccessLogOptions) Descriptor() ([]byte, []int) {
	return file_envoy_extensions_filters_http_router_v3_router_proto_rawDescGZIP(), []int{0, 0}
}

func (x *Router_UpstreamAccessLogOptions) GetFlushUpstreamLogOnUpstreamStream() bool {
	if x != nil {
		return x.FlushUpstreamLogOnUpstreamStream
	}
	return false
}

func (x *Router_UpstreamAccessLogOptions) GetUpstreamLogFlushInterval() *durationpb.Duration {
	if x != nil {
		return x.UpstreamLogFlushInterval
	}
	return nil
}

var File_envoy_extensions_filters_http_router_v3_router_proto protoreflect.FileDescriptor

const file_envoy_extensions_filters_http_router_v3_router_proto_rawDesc = "" +
	"\n" +
	"4envoy/extensions/filters/http/router/v3/router.proto\x12'envoy.extensions.filters.http.router.v3\x1a)envoy/config/accesslog/v3/accesslog.proto\x1aYenvoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a#envoy/annotations/deprecation.proto\x1a\x1dudpa/annotations/status.proto\x1a!udpa/annotations/versioning.proto\x1a\x17validate/validate.proto\"\xc6\t\n" +
	"\x06Router\x12?\n" +
	"\rdynamic_stats\x18\x01 \x01(\v2\x1a.google.protobuf.BoolValueR\fdynamicStats\x125\n" +
	"\x10start_child_span\x18\x02 \x01(\bB\v\x92ǆ\xd8\x04\x033.0\x18\x01R\x0estartChildSpan\x12G\n" +
	"\fupstream_log\x18\x03 \x03(\v2$.envoy.config.accesslog.v3.AccessLogR\vupstreamLog\x12z\n" +
	"\x14upstream_log_options\x18\t \x01(\v2H.envoy.extensions.filters.http.router.v3.Router.UpstreamAccessLogOptionsR\x12upstreamLogOptions\x124\n" +
	"\x16suppress_envoy_headers\x18\x04 \x01(\bR\x14suppressEnvoyHeaders\x12\xc7\x01\n" +
	"\x14strict_check_headers\x18\x05 \x03(\tB\x94\x01\xfaB\x90\x01\x92\x01\x8c\x01\"\x89\x01r\x86\x01R\x1ex-envoy-upstream-rq-timeout-msR&x-envoy-upstream-rq-per-try-timeout-msR\x13x-envoy-max-retriesR\x15x-envoy-retry-grpc-onR\x10x-envoy-retry-onR\x12strictCheckHeaders\x12=\n" +
	"\x1brespect_expected_rq_timeout\x18\x06 \x01(\bR\x18respectExpectedRqTimeout\x12U\n" +
	"(suppress_grpc_request_failure_code_stats\x18\a \x01(\bR#suppressGrpcRequestFailureCodeStats\x12{\n" +
	"\x15upstream_http_filters\x18\b \x03(\v2G.envoy.extensions.filters.network.http_connection_manager.v3.HttpFilterR\x13upstreamHttpFilters\x12d\n" +
	"!reject_connect_request_early_data\x18\n" +
	" \x01(\v2\x1a.google.protobuf.BoolValueR\x1drejectConnectRequestEarlyData\x1a\xd3\x01\n" +
	"\x18UpstreamAccessLogOptions\x12O\n" +
	"%flush_upstream_log_on_upstream_stream\x18\x01 \x01(\bR flushUpstreamLogOnUpstreamStream\x12f\n" +
	"\x1bupstream_log_flush_interval\x18\x02 \x01(\v2\x19.google.protobuf.DurationB\f\xfaB\t\xaa\x01\x062\x04\x10\xc0\x84=R\x18upstreamLogFlushInterval:0\x9aň\x1e+\n" +
	")envoy.config.filter.http.router.v2.RouterB\xa7\x01\xba\x80\xc8\xd1\x06\x02\x10\x02\n" +
	"5io.envoyproxy.envoy.extensions.filters.http.router.v3B\vRouterProtoP\x01ZWgithub.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/router/v3;routerv3b\x06proto3"

var (
	file_envoy_extensions_filters_http_router_v3_router_proto_rawDescOnce sync.Once
	file_envoy_extensions_filters_http_router_v3_router_proto_rawDescData []byte
)

func file_envoy_extensions_filters_http_router_v3_router_proto_rawDescGZIP() []byte {
	file_envoy_extensions_filters_http_router_v3_router_proto_rawDescOnce.Do(func() {
		file_envoy_extensions_filters_http_router_v3_router_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_envoy_extensions_filters_http_router_v3_router_proto_rawDesc), len(file_envoy_extensions_filters_http_router_v3_router_proto_rawDesc)))
	})
	return file_envoy_extensions_filters_http_router_v3_router_proto_rawDescData
}

var file_envoy_extensions_filters_http_router_v3_router_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_envoy_extensions_filters_http_router_v3_router_proto_goTypes = []any{
	(*Router)(nil),                          // 0: envoy.extensions.filters.http.router.v3.Router
	(*Router_UpstreamAccessLogOptions)(nil), // 1: envoy.extensions.filters.http.router.v3.Router.UpstreamAccessLogOptions
	(*wrapperspb.BoolValue)(nil),            // 2: google.protobuf.BoolValue
	(*v3.AccessLog)(nil),                    // 3: envoy.config.accesslog.v3.AccessLog
	(*v31.HttpFilter)(nil),                  // 4: envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
	(*durationpb.Duration)(nil),             // 5: google.protobuf.Duration
}
var file_envoy_extensions_filters_http_router_v3_router_proto_depIdxs = []int32{
	2, // 0: envoy.extensions.filters.http.router.v3.Router.dynamic_stats:type_name -> google.protobuf.BoolValue
	3, // 1: envoy.extensions.filters.http.router.v3.Router.upstream_log:type_name -> envoy.config.accesslog.v3.AccessLog
	1, // 2: envoy.extensions.filters.http.router.v3.Router.upstream_log_options:type_name -> envoy.extensions.filters.http.router.v3.Router.UpstreamAccessLogOptions
	4, // 3: envoy.extensions.filters.http.router.v3.Router.upstream_http_filters:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
	2, // 4: envoy.extensions.filters.http.router.v3.Router.reject_connect_request_early_data:type_name -> google.protobuf.BoolValue
	5, // 5: envoy.extensions.filters.http.router.v3.Router.UpstreamAccessLogOptions.upstream_log_flush_interval:type_name -> google.protobuf.Duration
	6, // [6:6] is the sub-list for method output_type
	6, // [6:6] is the sub-list for method input_type
	6, // [6:6] is the sub-list for extension type_name
	6, // [6:6] is the sub-list for extension extendee
	0, // [0:6] is the sub-list for field type_name
}

func init() { file_envoy_extensions_filters_http_router_v3_router_proto_init() }
func file_envoy_extensions_filters_http_router_v3_router_proto_init() {
	if File_envoy_extensions_filters_http_router_v3_router_proto != nil {
		return
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_envoy_extensions_filters_http_router_v3_router_proto_rawDesc), len(file_envoy_extensions_filters_http_router_v3_router_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   2,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_envoy_extensions_filters_http_router_v3_router_proto_goTypes,
		DependencyIndexes: file_envoy_extensions_filters_http_router_v3_router_proto_depIdxs,
		MessageInfos:      file_envoy_extensions_filters_http_router_v3_router_proto_msgTypes,
	}.Build()
	File_envoy_extensions_filters_http_router_v3_router_proto = out.File
	file_envoy_extensions_filters_http_router_v3_router_proto_goTypes = nil
	file_envoy_extensions_filters_http_router_v3_router_proto_depIdxs = nil
}
