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

package reverse_connectionv3

import (
	_ "github.com/cncf/xds/go/udpa/annotations"
	_ "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"
	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)
)

// Configuration for a cluster of type REVERSE_CONNECTION.
type ReverseConnectionClusterConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Time interval after which Envoy removes unused dynamic hosts created for reverse connections.
	// Hosts that are not referenced by any connection pool are deleted during cleanup.
	//
	// If unset, Envoy uses a default of 60s.
	CleanupInterval *durationpb.Duration `protobuf:"bytes,1,opt,name=cleanup_interval,json=cleanupInterval,proto3" json:"cleanup_interval,omitempty"`
	// Host identifier format string.
	//
	// This format string is evaluated against the downstream request context to compute
	// the host identifier for selecting the reverse connection endpoint. The format string
	// supports Envoy's standard formatter syntax, including:
	//
	// * “%REQ(header-name)%“: Extract request header value.
	// * “%DYNAMIC_METADATA(namespace:key)%“: Extract dynamic metadata value.
	// * “%CEL(expression)%“: Evaluate CEL expression.
	// * “%DOWNSTREAM_REMOTE_ADDRESS%“: Downstream connection address.
	// * “%DOWNSTREAM_LOCAL_ADDRESS%“: Downstream local address.
	// * Plain text and combinations of the above.
	//
	// Examples:
	//
	// * “%REQ(x-remote-node-id)%“: Use the value of the “x-remote-node-id“ header.
	// * “%REQ(host):EXTRACT_FIRST_PART%“: Extract the first part of the Host header before a dot.
	// * “%CEL(request.headers['x-node-id'] | orValue('default'))%“: Use CEL with fallback.
	// * “node-%REQ(x-tenant-id)%-%REQ(x-region)%“: Combine multiple values.
	//
	// If the format string evaluates to an empty value, the request will not be routed.
	HostIdFormat string `protobuf:"bytes,2,opt,name=host_id_format,json=hostIdFormat,proto3" json:"host_id_format,omitempty"`
	// Tenant identifier format string for tenant-aware isolation.
	//
	// This format string is evaluated against the downstream request context to compute
	// the tenant identifier when tenant isolation is enabled. The format string supports
	// the same Envoy formatter syntax as “host_id_format“.
	//
	// **REQUIRED** when tenant isolation is enabled (via “enable_tenant_isolation“ in the
	// reverse tunnel filter configuration).
	//
	// When tenant isolation is enabled and this field is set, the tenant identifier must be
	// derivable from the request context (i.e., the formatter must evaluate to a non-empty
	// value). If the tenant identifier cannot be inferred, host selection will fail and the
	// request will not be routed.
	//
	// Examples:
	//
	// * “%REQ(x-tenant-id)%“: Extract tenant ID from request header.
	// * “%DYNAMIC_METADATA(envoy.filters.network.reverse_tunnel:tenant_id)%“: Use metadata from reverse tunnel filter.
	// * “%CEL(request.headers['x-tenant-id'] | orValue('default'))%“: Use CEL with fallback.
	//
	// The delimiter used for concatenation is internal and not configurable. Users should
	// ensure that tenant identifiers and host identifiers do not contain the delimiter character
	// (“:“) to avoid ambiguity.
	TenantIdFormat string `protobuf:"bytes,3,opt,name=tenant_id_format,json=tenantIdFormat,proto3" json:"tenant_id_format,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

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

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

func (*ReverseConnectionClusterConfig) ProtoMessage() {}

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

func (x *ReverseConnectionClusterConfig) GetCleanupInterval() *durationpb.Duration {
	if x != nil {
		return x.CleanupInterval
	}
	return nil
}

func (x *ReverseConnectionClusterConfig) GetHostIdFormat() string {
	if x != nil {
		return x.HostIdFormat
	}
	return ""
}

func (x *ReverseConnectionClusterConfig) GetTenantIdFormat() string {
	if x != nil {
		return x.TenantIdFormat
	}
	return ""
}

var File_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto protoreflect.FileDescriptor

const file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDesc = "" +
	"\n" +
	"Henvoy/extensions/clusters/reverse_connection/v3/reverse_connection.proto\x12/envoy.extensions.clusters.reverse_connection.v3\x1a\x1egoogle/protobuf/duration.proto\x1a\x1dudpa/annotations/status.proto\x1a\x17validate/validate.proto\"\xd6\x01\n" +
	"\x1eReverseConnectionClusterConfig\x12N\n" +
	"\x10cleanup_interval\x18\x01 \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x02*\x00R\x0fcleanupInterval\x12-\n" +
	"\x0ehost_id_format\x18\x02 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\fhostIdFormat\x125\n" +
	"\x10tenant_id_format\x18\x03 \x01(\tB\v\xfaB\br\x06\x18\x80\b\xd0\x01\x01R\x0etenantIdFormatB\xce\x01\xba\x80\xc8\xd1\x06\x02\x10\x02\n" +
	"=io.envoyproxy.envoy.extensions.clusters.reverse_connection.v3B\x16ReverseConnectionProtoP\x01Zkgithub.com/envoyproxy/go-control-plane/envoy/extensions/clusters/reverse_connection/v3;reverse_connectionv3b\x06proto3"

var (
	file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescOnce sync.Once
	file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescData []byte
)

func file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescGZIP() []byte {
	file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescOnce.Do(func() {
		file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDesc), len(file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDesc)))
	})
	return file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDescData
}

var file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_goTypes = []any{
	(*ReverseConnectionClusterConfig)(nil), // 0: envoy.extensions.clusters.reverse_connection.v3.ReverseConnectionClusterConfig
	(*durationpb.Duration)(nil),            // 1: google.protobuf.Duration
}
var file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_depIdxs = []int32{
	1, // 0: envoy.extensions.clusters.reverse_connection.v3.ReverseConnectionClusterConfig.cleanup_interval:type_name -> google.protobuf.Duration
	1, // [1:1] is the sub-list for method output_type
	1, // [1:1] is the sub-list for method input_type
	1, // [1:1] is the sub-list for extension type_name
	1, // [1:1] is the sub-list for extension extendee
	0, // [0:1] is the sub-list for field type_name
}

func init() { file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_init() }
func file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_init() {
	if File_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_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_clusters_reverse_connection_v3_reverse_connection_proto_rawDesc), len(file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   1,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_goTypes,
		DependencyIndexes: file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_depIdxs,
		MessageInfos:      file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_msgTypes,
	}.Build()
	File_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto = out.File
	file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_goTypes = nil
	file_envoy_extensions_clusters_reverse_connection_v3_reverse_connection_proto_depIdxs = nil
}
