// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        v7.35.1
// source: envoy/api/v2/listener.proto

package apiv2

import (
	_ "github.com/cncf/xds/go/udpa/annotations"
	core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core"
	listener "github.com/envoyproxy/go-control-plane/envoy/api/v2/listener"
	v21 "github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2"
	v2 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v2"
	_ "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)
)

type Listener_DrainType int32

const (
	// Drain in response to calling /healthcheck/fail admin endpoint (along with the health check
	// filter), listener removal/modification, and hot restart.
	Listener_DEFAULT Listener_DrainType = 0
	// Drain in response to listener removal/modification and hot restart. This setting does not
	// include /healthcheck/fail. This setting may be desirable if Envoy is hosting both ingress
	// and egress listeners.
	Listener_MODIFY_ONLY Listener_DrainType = 1
)

// Enum value maps for Listener_DrainType.
var (
	Listener_DrainType_name = map[int32]string{
		0: "DEFAULT",
		1: "MODIFY_ONLY",
	}
	Listener_DrainType_value = map[string]int32{
		"DEFAULT":     0,
		"MODIFY_ONLY": 1,
	}
)

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

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

func (Listener_DrainType) Descriptor() protoreflect.EnumDescriptor {
	return file_envoy_api_v2_listener_proto_enumTypes[0].Descriptor()
}

func (Listener_DrainType) Type() protoreflect.EnumType {
	return &file_envoy_api_v2_listener_proto_enumTypes[0]
}

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

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

// [#next-free-field: 23]
type Listener struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The unique name by which this listener is known. If no name is provided,
	// Envoy will allocate an internal UUID for the listener. If the listener is to be dynamically
	// updated or removed via :ref:`LDS <config_listeners_lds>` a unique name must be provided.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The address that the listener should listen on. In general, the address must be unique, though
	// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
	// Linux as the actual port will be allocated by the OS.
	Address *core.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
	// A list of filter chains to consider for this listener. The
	// :ref:`FilterChain <envoy_api_msg_listener.FilterChain>` with the most specific
	// :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` criteria is used on a
	// connection.
	//
	// Example using SNI for filter chain selection can be found in the
	// :ref:`FAQ entry <faq_how_to_setup_sni>`.
	FilterChains []*listener.FilterChain `protobuf:"bytes,3,rep,name=filter_chains,json=filterChains,proto3" json:"filter_chains,omitempty"`
	// If a connection is redirected using *iptables*, the port on which the proxy
	// receives it might be different from the original destination address. When this flag is set to
	// true, the listener hands off redirected connections to the listener associated with the
	// original destination address. If there is no listener associated with the original destination
	// address, the connection is handled by the listener that receives it. Defaults to false.
	//
	// .. attention::
	//
	//	This field is deprecated. Use :ref:`an original_dst <config_listener_filters_original_dst>`
	//	:ref:`listener filter <envoy_api_field_Listener.listener_filters>` instead.
	//
	//	Note that hand off to another listener is *NOT* performed without this flag. Once
	//	:ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` is implemented this flag
	//	will be removed, as filter chain matching can be used to select a filter chain based on the
	//	restored destination address.
	//
	// Deprecated: Marked as deprecated in envoy/api/v2/listener.proto.
	UseOriginalDst *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=use_original_dst,json=useOriginalDst,proto3" json:"use_original_dst,omitempty"`
	// Soft limit on size of the listener’s new connection read and write buffers.
	// If unspecified, an implementation defined default is applied (1MiB).
	PerConnectionBufferLimitBytes *wrapperspb.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"`
	// Listener metadata.
	Metadata *core.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// [#not-implemented-hide:]
	DeprecatedV1 *Listener_DeprecatedV1 `protobuf:"bytes,7,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"`
	// The type of draining to perform at a listener-wide level.
	DrainType Listener_DrainType `protobuf:"varint,8,opt,name=drain_type,json=drainType,proto3,enum=envoy.api.v2.Listener_DrainType" json:"drain_type,omitempty"`
	// Listener filters have the opportunity to manipulate and augment the connection metadata that
	// is used in connection filter chain matching, for example. These filters are run before any in
	// :ref:`filter_chains <envoy_api_field_Listener.filter_chains>`. Order matters as the
	// filters are processed sequentially right after a socket has been accepted by the listener, and
	// before a connection is created.
	// UDP Listener filters can be specified when the protocol in the listener socket address in
	// :ref:`protocol <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP
	// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`.
	// UDP listeners currently support a single filter.
	ListenerFilters []*listener.ListenerFilter `protobuf:"bytes,9,rep,name=listener_filters,json=listenerFilters,proto3" json:"listener_filters,omitempty"`
	// The timeout to wait for all listener filters to complete operation. If the timeout is reached,
	// the accepted socket is closed without a connection being created unless
	// `continue_on_listener_filters_timeout` is set to true. Specify 0 to disable the
	// timeout. If not specified, a default timeout of 15s is used.
	ListenerFiltersTimeout *durationpb.Duration `protobuf:"bytes,15,opt,name=listener_filters_timeout,json=listenerFiltersTimeout,proto3" json:"listener_filters_timeout,omitempty"`
	// Whether a connection should be created when listener filters timeout. Default is false.
	//
	// .. attention::
	//
	//	Some listener filters, such as :ref:`Proxy Protocol filter
	//	<config_listener_filters_proxy_protocol>`, should not be used with this option. It will cause
	//	unexpected behavior when a connection is created.
	ContinueOnListenerFiltersTimeout bool `protobuf:"varint,17,opt,name=continue_on_listener_filters_timeout,json=continueOnListenerFiltersTimeout,proto3" json:"continue_on_listener_filters_timeout,omitempty"`
	// Whether the listener should be set as a transparent socket.
	// When this flag is set to true, connections can be redirected to the listener using an
	// *iptables* *TPROXY* target, in which case the original source and destination addresses and
	// ports are preserved on accepted connections. This flag should be used in combination with
	// :ref:`an original_dst <config_listener_filters_original_dst>` :ref:`listener filter
	// <envoy_api_field_Listener.listener_filters>` to mark the connections' local addresses as
	// "restored." This can be used to hand off each redirected connection to another listener
	// associated with the connection's destination address. Direct connections to the socket without
	// using *TPROXY* cannot be distinguished from connections redirected using *TPROXY* and are
	// therefore treated as if they were redirected.
	// When this flag is set to false, the listener's socket is explicitly reset as non-transparent.
	// Setting this flag requires Envoy to run with the *CAP_NET_ADMIN* capability.
	// When this flag is not set (default), the socket is not modified, i.e. the transparent option
	// is neither set nor reset.
	Transparent *wrapperspb.BoolValue `protobuf:"bytes,10,opt,name=transparent,proto3" json:"transparent,omitempty"`
	// Whether the listener should set the *IP_FREEBIND* socket option. When this
	// flag is set to true, listeners can be bound to an IP address that is not
	// configured on the system running Envoy. When this flag is set to false, the
	// option *IP_FREEBIND* is disabled on the socket. When this flag is not set
	// (default), the socket is not modified, i.e. the option is neither enabled
	// nor disabled.
	Freebind *wrapperspb.BoolValue `protobuf:"bytes,11,opt,name=freebind,proto3" json:"freebind,omitempty"`
	// Additional socket options that may not be present in Envoy source code or
	// precompiled binaries.
	SocketOptions []*core.SocketOption `protobuf:"bytes,13,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"`
	// Whether the listener should accept TCP Fast Open (TFO) connections.
	// When this flag is set to a value greater than 0, the option TCP_FASTOPEN is enabled on
	// the socket, with a queue length of the specified size
	// (see `details in RFC7413 <https://tools.ietf.org/html/rfc7413#section-5.1>`_).
	// When this flag is set to 0, the option TCP_FASTOPEN is disabled on the socket.
	// When this flag is not set (default), the socket is not modified,
	// i.e. the option is neither enabled nor disabled.
	//
	// On Linux, the net.ipv4.tcp_fastopen kernel parameter must include flag 0x2 to enable
	// TCP_FASTOPEN.
	// See `ip-sysctl.txt <https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt>`_.
	//
	// On macOS, only values of 0, 1, and unset are valid; other values may result in an error.
	// To set the queue length on macOS, set the net.inet.tcp.fastopen_backlog kernel parameter.
	TcpFastOpenQueueLength *wrapperspb.UInt32Value `protobuf:"bytes,12,opt,name=tcp_fast_open_queue_length,json=tcpFastOpenQueueLength,proto3" json:"tcp_fast_open_queue_length,omitempty"`
	// Specifies the intended direction of the traffic relative to the local Envoy.
	// This property is required on Windows for listeners using the original destination filter,
	// see :ref:`Original Destination <config_listener_filters_original_dst>`.
	TrafficDirection core.TrafficDirection `protobuf:"varint,16,opt,name=traffic_direction,json=trafficDirection,proto3,enum=envoy.api.v2.core.TrafficDirection" json:"traffic_direction,omitempty"`
	// If the protocol in the listener socket address in :ref:`protocol
	// <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP
	// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`, this field specifies the actual udp
	// listener to create, i.e. :ref:`udp_listener_name
	// <envoy_api_field_listener.UdpListenerConfig.udp_listener_name>` = "raw_udp_listener" for
	// creating a packet-oriented UDP listener. If not present, treat it as "raw_udp_listener".
	UdpListenerConfig *listener.UdpListenerConfig `protobuf:"bytes,18,opt,name=udp_listener_config,json=udpListenerConfig,proto3" json:"udp_listener_config,omitempty"`
	// Used to represent an API listener, which is used in non-proxy clients. The type of API
	// exposed to the non-proxy application depends on the type of API listener.
	// When this field is set, no other field except for :ref:`name<envoy_api_field_Listener.name>`
	// should be set.
	//
	// .. note::
	//
	//	Currently only one ApiListener can be installed; and it can only be done via bootstrap config,
	//	not LDS.
	//
	// [#next-major-version: In the v3 API, instead of this messy approach where the socket
	// listener fields are directly in the top-level Listener message and the API listener types
	// are in the ApiListener message, the socket listener messages should be in their own message,
	// and the top-level Listener should essentially be a oneof that selects between the
	// socket listener and the various types of API listener. That way, a given Listener message
	// can structurally only contain the fields of the relevant type.]
	ApiListener *v2.ApiListener `protobuf:"bytes,19,opt,name=api_listener,json=apiListener,proto3" json:"api_listener,omitempty"`
	// The listener's connection balancer configuration, currently only applicable to TCP listeners.
	// If no configuration is specified, Envoy will not attempt to balance active connections between
	// worker threads.
	ConnectionBalanceConfig *Listener_ConnectionBalanceConfig `protobuf:"bytes,20,opt,name=connection_balance_config,json=connectionBalanceConfig,proto3" json:"connection_balance_config,omitempty"`
	// When this flag is set to true, listeners set the *SO_REUSEPORT* socket option and
	// create one socket for each worker thread. This makes inbound connections
	// distribute among worker threads roughly evenly in cases where there are a high number
	// of connections. When this flag is set to false, all worker threads share one socket.
	//
	// Before Linux v4.19-rc1, new TCP connections may be rejected during hot restart
	// (see `3rd paragraph in 'soreuseport' commit message
	// <https://github.com/torvalds/linux/commit/c617f398edd4db2b8567a28e89>`_).
	// This issue was fixed by `tcp: Avoid TCP syncookie rejected by SO_REUSEPORT socket
	// <https://github.com/torvalds/linux/commit/40a1227ea845a37ab197dd1caffb60b047fa36b1>`_.
	ReusePort bool `protobuf:"varint,21,opt,name=reuse_port,json=reusePort,proto3" json:"reuse_port,omitempty"`
	// Configuration for :ref:`access logs <arch_overview_access_logs>`
	// emitted by this listener.
	AccessLog     []*v21.AccessLog `protobuf:"bytes,22,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Listener) ProtoMessage() {}

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

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

func (x *Listener) GetAddress() *core.Address {
	if x != nil {
		return x.Address
	}
	return nil
}

func (x *Listener) GetFilterChains() []*listener.FilterChain {
	if x != nil {
		return x.FilterChains
	}
	return nil
}

// Deprecated: Marked as deprecated in envoy/api/v2/listener.proto.
func (x *Listener) GetUseOriginalDst() *wrapperspb.BoolValue {
	if x != nil {
		return x.UseOriginalDst
	}
	return nil
}

func (x *Listener) GetPerConnectionBufferLimitBytes() *wrapperspb.UInt32Value {
	if x != nil {
		return x.PerConnectionBufferLimitBytes
	}
	return nil
}

func (x *Listener) GetMetadata() *core.Metadata {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *Listener) GetDeprecatedV1() *Listener_DeprecatedV1 {
	if x != nil {
		return x.DeprecatedV1
	}
	return nil
}

func (x *Listener) GetDrainType() Listener_DrainType {
	if x != nil {
		return x.DrainType
	}
	return Listener_DEFAULT
}

func (x *Listener) GetListenerFilters() []*listener.ListenerFilter {
	if x != nil {
		return x.ListenerFilters
	}
	return nil
}

func (x *Listener) GetListenerFiltersTimeout() *durationpb.Duration {
	if x != nil {
		return x.ListenerFiltersTimeout
	}
	return nil
}

func (x *Listener) GetContinueOnListenerFiltersTimeout() bool {
	if x != nil {
		return x.ContinueOnListenerFiltersTimeout
	}
	return false
}

func (x *Listener) GetTransparent() *wrapperspb.BoolValue {
	if x != nil {
		return x.Transparent
	}
	return nil
}

func (x *Listener) GetFreebind() *wrapperspb.BoolValue {
	if x != nil {
		return x.Freebind
	}
	return nil
}

func (x *Listener) GetSocketOptions() []*core.SocketOption {
	if x != nil {
		return x.SocketOptions
	}
	return nil
}

func (x *Listener) GetTcpFastOpenQueueLength() *wrapperspb.UInt32Value {
	if x != nil {
		return x.TcpFastOpenQueueLength
	}
	return nil
}

func (x *Listener) GetTrafficDirection() core.TrafficDirection {
	if x != nil {
		return x.TrafficDirection
	}
	return core.TrafficDirection(0)
}

func (x *Listener) GetUdpListenerConfig() *listener.UdpListenerConfig {
	if x != nil {
		return x.UdpListenerConfig
	}
	return nil
}

func (x *Listener) GetApiListener() *v2.ApiListener {
	if x != nil {
		return x.ApiListener
	}
	return nil
}

func (x *Listener) GetConnectionBalanceConfig() *Listener_ConnectionBalanceConfig {
	if x != nil {
		return x.ConnectionBalanceConfig
	}
	return nil
}

func (x *Listener) GetReusePort() bool {
	if x != nil {
		return x.ReusePort
	}
	return false
}

func (x *Listener) GetAccessLog() []*v21.AccessLog {
	if x != nil {
		return x.AccessLog
	}
	return nil
}

// [#not-implemented-hide:]
type Listener_DeprecatedV1 struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Whether the listener should bind to the port. A listener that doesn't
	// bind can only receive connections redirected from other listeners that
	// set use_original_dst parameter to true. Default is true.
	//
	// This is deprecated in v2, all Listeners will bind to their port. An
	// additional filter chain must be created for every original destination
	// port this listener may redirect to in v2, with the original port
	// specified in the FilterChainMatch destination_port field.
	//
	// [#comment:TODO(PiotrSikora): Remove this once verified that we no longer need it.]
	BindToPort    *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=bind_to_port,json=bindToPort,proto3" json:"bind_to_port,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Listener_DeprecatedV1) ProtoMessage() {}

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

func (x *Listener_DeprecatedV1) GetBindToPort() *wrapperspb.BoolValue {
	if x != nil {
		return x.BindToPort
	}
	return nil
}

// Configuration for listener connection balancing.
type Listener_ConnectionBalanceConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to BalanceType:
	//
	//	*Listener_ConnectionBalanceConfig_ExactBalance_
	BalanceType   isListener_ConnectionBalanceConfig_BalanceType `protobuf_oneof:"balance_type"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Listener_ConnectionBalanceConfig) ProtoMessage() {}

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

func (x *Listener_ConnectionBalanceConfig) GetBalanceType() isListener_ConnectionBalanceConfig_BalanceType {
	if x != nil {
		return x.BalanceType
	}
	return nil
}

func (x *Listener_ConnectionBalanceConfig) GetExactBalance() *Listener_ConnectionBalanceConfig_ExactBalance {
	if x != nil {
		if x, ok := x.BalanceType.(*Listener_ConnectionBalanceConfig_ExactBalance_); ok {
			return x.ExactBalance
		}
	}
	return nil
}

type isListener_ConnectionBalanceConfig_BalanceType interface {
	isListener_ConnectionBalanceConfig_BalanceType()
}

type Listener_ConnectionBalanceConfig_ExactBalance_ struct {
	// If specified, the listener will use the exact connection balancer.
	ExactBalance *Listener_ConnectionBalanceConfig_ExactBalance `protobuf:"bytes,1,opt,name=exact_balance,json=exactBalance,proto3,oneof"`
}

func (*Listener_ConnectionBalanceConfig_ExactBalance_) isListener_ConnectionBalanceConfig_BalanceType() {
}

// A connection balancer implementation that does exact balancing. This means that a lock is
// held during balancing so that connection counts are nearly exactly balanced between worker
// threads. This is "nearly" exact in the sense that a connection might close in parallel thus
// making the counts incorrect, but this should be rectified on the next accept. This balancer
// sacrifices accept throughput for accuracy and should be used when there are a small number of
// connections that rarely cycle (e.g., service mesh gRPC egress).
type Listener_ConnectionBalanceConfig_ExactBalance struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Listener_ConnectionBalanceConfig_ExactBalance) ProtoMessage() {}

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

var File_envoy_api_v2_listener_proto protoreflect.FileDescriptor

const file_envoy_api_v2_listener_proto_rawDesc = "" +
	"\n" +
	"\x1benvoy/api/v2/listener.proto\x12\fenvoy.api.v2\x1a\x1fenvoy/api/v2/core/address.proto\x1a\x1cenvoy/api/v2/core/base.proto\x1a%envoy/api/v2/core/socket_option.proto\x1a/envoy/api/v2/listener/listener_components.proto\x1a/envoy/api/v2/listener/udp_listener_config.proto\x1a0envoy/config/filter/accesslog/v2/accesslog.proto\x1a+envoy/config/listener/v2/api_listener.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1eudpa/annotations/migrate.proto\x1a\x1dudpa/annotations/status.proto\x1a\x17validate/validate.proto\"\x9d\x0e\n" +
	"\bListener\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12>\n" +
	"\aaddress\x18\x02 \x01(\v2\x1a.envoy.api.v2.core.AddressB\b\xfaB\x05\x8a\x01\x02\x10\x01R\aaddress\x12G\n" +
	"\rfilter_chains\x18\x03 \x03(\v2\".envoy.api.v2.listener.FilterChainR\ffilterChains\x12H\n" +
	"\x10use_original_dst\x18\x04 \x01(\v2\x1a.google.protobuf.BoolValueB\x02\x18\x01R\x0euseOriginalDst\x12f\n" +
	"!per_connection_buffer_limit_bytes\x18\x05 \x01(\v2\x1c.google.protobuf.UInt32ValueR\x1dperConnectionBufferLimitBytes\x127\n" +
	"\bmetadata\x18\x06 \x01(\v2\x1b.envoy.api.v2.core.MetadataR\bmetadata\x12H\n" +
	"\rdeprecated_v1\x18\a \x01(\v2#.envoy.api.v2.Listener.DeprecatedV1R\fdeprecatedV1\x12?\n" +
	"\n" +
	"drain_type\x18\b \x01(\x0e2 .envoy.api.v2.Listener.DrainTypeR\tdrainType\x12P\n" +
	"\x10listener_filters\x18\t \x03(\v2%.envoy.api.v2.listener.ListenerFilterR\x0flistenerFilters\x12S\n" +
	"\x18listener_filters_timeout\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x16listenerFiltersTimeout\x12N\n" +
	"$continue_on_listener_filters_timeout\x18\x11 \x01(\bR continueOnListenerFiltersTimeout\x12<\n" +
	"\vtransparent\x18\n" +
	" \x01(\v2\x1a.google.protobuf.BoolValueR\vtransparent\x126\n" +
	"\bfreebind\x18\v \x01(\v2\x1a.google.protobuf.BoolValueR\bfreebind\x12F\n" +
	"\x0esocket_options\x18\r \x03(\v2\x1f.envoy.api.v2.core.SocketOptionR\rsocketOptions\x12X\n" +
	"\x1atcp_fast_open_queue_length\x18\f \x01(\v2\x1c.google.protobuf.UInt32ValueR\x16tcpFastOpenQueueLength\x12P\n" +
	"\x11traffic_direction\x18\x10 \x01(\x0e2#.envoy.api.v2.core.TrafficDirectionR\x10trafficDirection\x12X\n" +
	"\x13udp_listener_config\x18\x12 \x01(\v2(.envoy.api.v2.listener.UdpListenerConfigR\x11udpListenerConfig\x12H\n" +
	"\fapi_listener\x18\x13 \x01(\v2%.envoy.config.listener.v2.ApiListenerR\vapiListener\x12j\n" +
	"\x19connection_balance_config\x18\x14 \x01(\v2..envoy.api.v2.Listener.ConnectionBalanceConfigR\x17connectionBalanceConfig\x12\x1d\n" +
	"\n" +
	"reuse_port\x18\x15 \x01(\bR\treusePort\x12J\n" +
	"\n" +
	"access_log\x18\x16 \x03(\v2+.envoy.config.filter.accesslog.v2.AccessLogR\taccessLog\x1aL\n" +
	"\fDeprecatedV1\x12<\n" +
	"\fbind_to_port\x18\x01 \x01(\v2\x1a.google.protobuf.BoolValueR\n" +
	"bindToPort\x1a\xa2\x01\n" +
	"\x17ConnectionBalanceConfig\x12b\n" +
	"\rexact_balance\x18\x01 \x01(\v2;.envoy.api.v2.Listener.ConnectionBalanceConfig.ExactBalanceH\x00R\fexactBalance\x1a\x0e\n" +
	"\fExactBalanceB\x13\n" +
	"\fbalance_type\x12\x03\xf8B\x01\")\n" +
	"\tDrainType\x12\v\n" +
	"\aDEFAULT\x10\x00\x12\x0f\n" +
	"\vMODIFY_ONLY\x10\x01J\x04\b\x0e\x10\x0fB\x90\x01\xf2\x98\xfe\x8f\x05\x1a\x12\x18envoy.config.listener.v3\xba\x80\xc8\xd1\x06\x02\x10\x01\n" +
	"\x1aio.envoyproxy.envoy.api.v2B\rListenerProtoP\x01Z9github.com/envoyproxy/go-control-plane/envoy/api/v2;apiv2b\x06proto3"

var (
	file_envoy_api_v2_listener_proto_rawDescOnce sync.Once
	file_envoy_api_v2_listener_proto_rawDescData []byte
)

func file_envoy_api_v2_listener_proto_rawDescGZIP() []byte {
	file_envoy_api_v2_listener_proto_rawDescOnce.Do(func() {
		file_envoy_api_v2_listener_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_envoy_api_v2_listener_proto_rawDesc), len(file_envoy_api_v2_listener_proto_rawDesc)))
	})
	return file_envoy_api_v2_listener_proto_rawDescData
}

var file_envoy_api_v2_listener_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_envoy_api_v2_listener_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_envoy_api_v2_listener_proto_goTypes = []any{
	(Listener_DrainType)(0),                               // 0: envoy.api.v2.Listener.DrainType
	(*Listener)(nil),                                      // 1: envoy.api.v2.Listener
	(*Listener_DeprecatedV1)(nil),                         // 2: envoy.api.v2.Listener.DeprecatedV1
	(*Listener_ConnectionBalanceConfig)(nil),              // 3: envoy.api.v2.Listener.ConnectionBalanceConfig
	(*Listener_ConnectionBalanceConfig_ExactBalance)(nil), // 4: envoy.api.v2.Listener.ConnectionBalanceConfig.ExactBalance
	(*core.Address)(nil),                                  // 5: envoy.api.v2.core.Address
	(*listener.FilterChain)(nil),                          // 6: envoy.api.v2.listener.FilterChain
	(*wrapperspb.BoolValue)(nil),                          // 7: google.protobuf.BoolValue
	(*wrapperspb.UInt32Value)(nil),                        // 8: google.protobuf.UInt32Value
	(*core.Metadata)(nil),                                 // 9: envoy.api.v2.core.Metadata
	(*listener.ListenerFilter)(nil),                       // 10: envoy.api.v2.listener.ListenerFilter
	(*durationpb.Duration)(nil),                           // 11: google.protobuf.Duration
	(*core.SocketOption)(nil),                             // 12: envoy.api.v2.core.SocketOption
	(core.TrafficDirection)(0),                            // 13: envoy.api.v2.core.TrafficDirection
	(*listener.UdpListenerConfig)(nil),                    // 14: envoy.api.v2.listener.UdpListenerConfig
	(*v2.ApiListener)(nil),                                // 15: envoy.config.listener.v2.ApiListener
	(*v21.AccessLog)(nil),                                 // 16: envoy.config.filter.accesslog.v2.AccessLog
}
var file_envoy_api_v2_listener_proto_depIdxs = []int32{
	5,  // 0: envoy.api.v2.Listener.address:type_name -> envoy.api.v2.core.Address
	6,  // 1: envoy.api.v2.Listener.filter_chains:type_name -> envoy.api.v2.listener.FilterChain
	7,  // 2: envoy.api.v2.Listener.use_original_dst:type_name -> google.protobuf.BoolValue
	8,  // 3: envoy.api.v2.Listener.per_connection_buffer_limit_bytes:type_name -> google.protobuf.UInt32Value
	9,  // 4: envoy.api.v2.Listener.metadata:type_name -> envoy.api.v2.core.Metadata
	2,  // 5: envoy.api.v2.Listener.deprecated_v1:type_name -> envoy.api.v2.Listener.DeprecatedV1
	0,  // 6: envoy.api.v2.Listener.drain_type:type_name -> envoy.api.v2.Listener.DrainType
	10, // 7: envoy.api.v2.Listener.listener_filters:type_name -> envoy.api.v2.listener.ListenerFilter
	11, // 8: envoy.api.v2.Listener.listener_filters_timeout:type_name -> google.protobuf.Duration
	7,  // 9: envoy.api.v2.Listener.transparent:type_name -> google.protobuf.BoolValue
	7,  // 10: envoy.api.v2.Listener.freebind:type_name -> google.protobuf.BoolValue
	12, // 11: envoy.api.v2.Listener.socket_options:type_name -> envoy.api.v2.core.SocketOption
	8,  // 12: envoy.api.v2.Listener.tcp_fast_open_queue_length:type_name -> google.protobuf.UInt32Value
	13, // 13: envoy.api.v2.Listener.traffic_direction:type_name -> envoy.api.v2.core.TrafficDirection
	14, // 14: envoy.api.v2.Listener.udp_listener_config:type_name -> envoy.api.v2.listener.UdpListenerConfig
	15, // 15: envoy.api.v2.Listener.api_listener:type_name -> envoy.config.listener.v2.ApiListener
	3,  // 16: envoy.api.v2.Listener.connection_balance_config:type_name -> envoy.api.v2.Listener.ConnectionBalanceConfig
	16, // 17: envoy.api.v2.Listener.access_log:type_name -> envoy.config.filter.accesslog.v2.AccessLog
	7,  // 18: envoy.api.v2.Listener.DeprecatedV1.bind_to_port:type_name -> google.protobuf.BoolValue
	4,  // 19: envoy.api.v2.Listener.ConnectionBalanceConfig.exact_balance:type_name -> envoy.api.v2.Listener.ConnectionBalanceConfig.ExactBalance
	20, // [20:20] is the sub-list for method output_type
	20, // [20:20] is the sub-list for method input_type
	20, // [20:20] is the sub-list for extension type_name
	20, // [20:20] is the sub-list for extension extendee
	0,  // [0:20] is the sub-list for field type_name
}

func init() { file_envoy_api_v2_listener_proto_init() }
func file_envoy_api_v2_listener_proto_init() {
	if File_envoy_api_v2_listener_proto != nil {
		return
	}
	file_envoy_api_v2_listener_proto_msgTypes[2].OneofWrappers = []any{
		(*Listener_ConnectionBalanceConfig_ExactBalance_)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_envoy_api_v2_listener_proto_rawDesc), len(file_envoy_api_v2_listener_proto_rawDesc)),
			NumEnums:      1,
			NumMessages:   4,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_envoy_api_v2_listener_proto_goTypes,
		DependencyIndexes: file_envoy_api_v2_listener_proto_depIdxs,
		EnumInfos:         file_envoy_api_v2_listener_proto_enumTypes,
		MessageInfos:      file_envoy_api_v2_listener_proto_msgTypes,
	}.Build()
	File_envoy_api_v2_listener_proto = out.File
	file_envoy_api_v2_listener_proto_goTypes = nil
	file_envoy_api_v2_listener_proto_depIdxs = nil
}
