Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions envoy/network/connection_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,15 +219,17 @@ class ActiveUdpListenerFactory {
* @param runtime the runtime for this server.
* @param worker_index The index of the worker this listener is being created on.
* @param parent is the owner of the created ActiveListener objects.
* @param listen_socket_ptr is the UDP socket.
* @param dispatcher is used to create actual UDP listener.
* @param config provides information needed to create ActiveUdpListener and
* UdpListener objects.
* @return the ActiveUdpListener created.
*/
virtual ConnectionHandler::ActiveUdpListenerPtr
createActiveUdpListener(Runtime::Loader& runtime, uint32_t worker_index,
UdpConnectionHandler& parent, Event::Dispatcher& dispatcher,
Network::ListenerConfig& config) PURE;
UdpConnectionHandler& parent,
Network::SocketSharedPtr&& listen_socket_ptr,
Event::Dispatcher& dispatcher, Network::ListenerConfig& config) PURE;

/**
* @return true if the UDP passing through listener doesn't form stateful connections.
Expand Down
6 changes: 6 additions & 0 deletions envoy/network/listener.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,16 @@ class ListenerConfig {
virtual FilterChainFactory& filterChainFactory() PURE;

/**
* TODO(soulxu): This will be removed when multiple addresses listener implemented.
* @return ListenSocketFactory& the factory to create listen socket.
*/
virtual ListenSocketFactory& listenSocketFactory() PURE;
Comment thread
soulxu marked this conversation as resolved.

/**
* @return std::vector<ListenSocketFactoryPtr>& the factories to create listen sockets.
*/
virtual std::vector<ListenSocketFactoryPtr>& listenSocketFactories() PURE;

/**
* @return bool specifies whether the listener should actually listen on the port.
* A listener that doesn't listen on a port can only receive connections
Expand Down
23 changes: 5 additions & 18 deletions source/common/quic/active_quic_listener.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,7 @@ bool ActiveQuicListenerFactory::disable_kernel_bpf_packet_routing_for_test_ = fa
ActiveQuicListener::ActiveQuicListener(
Runtime::Loader& runtime, uint32_t worker_index, uint32_t concurrency,
Event::Dispatcher& dispatcher, Network::UdpConnectionHandler& parent,
Network::ListenerConfig& listener_config, const quic::QuicConfig& quic_config,
bool kernel_worker_routing, const envoy::config::core::v3::RuntimeFeatureFlag& enabled,
QuicStatNames& quic_stat_names, uint32_t packets_received_to_connection_count_ratio,
EnvoyQuicCryptoServerStreamFactoryInterface& crypto_server_stream_factory,
EnvoyQuicProofSourceFactoryInterface& proof_source_factory)
: ActiveQuicListener(runtime, worker_index, concurrency, dispatcher, parent,
listener_config.listenSocketFactory().getListenSocket(worker_index),
listener_config, quic_config, kernel_worker_routing, enabled,
quic_stat_names, packets_received_to_connection_count_ratio,
crypto_server_stream_factory, proof_source_factory) {}

ActiveQuicListener::ActiveQuicListener(
Runtime::Loader& runtime, uint32_t worker_index, uint32_t concurrency,
Event::Dispatcher& dispatcher, Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr listen_socket, Network::ListenerConfig& listener_config,
Network::SocketSharedPtr&& listen_socket, Network::ListenerConfig& listener_config,
const quic::QuicConfig& quic_config, bool kernel_worker_routing,
const envoy::config::core::v3::RuntimeFeatureFlag& enabled, QuicStatNames& quic_stat_names,
uint32_t packets_to_read_to_connection_count_ratio,
Expand Down Expand Up @@ -338,11 +324,12 @@ ActiveQuicListenerFactory::ActiveQuicListenerFactory(

Network::ConnectionHandler::ActiveUdpListenerPtr ActiveQuicListenerFactory::createActiveUdpListener(
Runtime::Loader& runtime, uint32_t worker_index, Network::UdpConnectionHandler& parent,
Event::Dispatcher& disptacher, Network::ListenerConfig& config) {
Network::SocketSharedPtr&& listen_socket_ptr, Event::Dispatcher& disptacher,
Network::ListenerConfig& config) {
ASSERT(crypto_server_stream_factory_.has_value());
return std::make_unique<ActiveQuicListener>(
runtime, worker_index, concurrency_, disptacher, parent, config, quic_config_,
kernel_worker_routing_, enabled_, quic_stat_names_,
runtime, worker_index, concurrency_, disptacher, parent, std::move(listen_socket_ptr), config,
quic_config_, kernel_worker_routing_, enabled_, quic_stat_names_,
packets_to_read_to_connection_count_ratio_, crypto_server_stream_factory_.value(),
proof_source_factory_.value());
}
Expand Down
17 changes: 4 additions & 13 deletions source/common/quic/active_quic_listener.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,7 @@ class ActiveQuicListener : public Envoy::Server::ActiveUdpListenerBase,

ActiveQuicListener(Runtime::Loader& runtime, uint32_t worker_index, uint32_t concurrency,
Event::Dispatcher& dispatcher, Network::UdpConnectionHandler& parent,
Network::ListenerConfig& listener_config, const quic::QuicConfig& quic_config,
bool kernel_worker_routing,
const envoy::config::core::v3::RuntimeFeatureFlag& enabled,
QuicStatNames& quic_stat_names,
uint32_t packets_to_read_to_connection_count_ratio,
EnvoyQuicCryptoServerStreamFactoryInterface& crypto_server_stream_factory,
EnvoyQuicProofSourceFactoryInterface& proof_source_factory);

ActiveQuicListener(Runtime::Loader& runtime, uint32_t worker_index, uint32_t concurrency,
Event::Dispatcher& dispatcher, Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr listen_socket,
Network::SocketSharedPtr&& listen_socket,
Network::ListenerConfig& listener_config, const quic::QuicConfig& quic_config,
bool kernel_worker_routing,
const envoy::config::core::v3::RuntimeFeatureFlag& enabled,
Expand Down Expand Up @@ -108,8 +98,9 @@ class ActiveQuicListenerFactory : public Network::ActiveUdpListenerFactory,
// Network::ActiveUdpListenerFactory.
Network::ConnectionHandler::ActiveUdpListenerPtr
createActiveUdpListener(Runtime::Loader& runtime, uint32_t worker_index,
Network::UdpConnectionHandler& parent, Event::Dispatcher& disptacher,
Network::ListenerConfig& config) override;
Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr&& listen_socket_ptr,
Event::Dispatcher& disptacher, Network::ListenerConfig& config) override;
bool isTransportConnectionless() const override { return false; }
const Network::Socket::OptionsSharedPtr& socketOptions() const override { return options_; }

Expand Down
5 changes: 3 additions & 2 deletions source/server/active_raw_udp_listener_config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ ActiveRawUdpListenerFactory::ActiveRawUdpListenerFactory(uint32_t concurrency)
Network::ConnectionHandler::ActiveUdpListenerPtr
ActiveRawUdpListenerFactory::createActiveUdpListener(Runtime::Loader&, uint32_t worker_index,
Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr&& listen_socket_ptr,
Event::Dispatcher& dispatcher,
Network::ListenerConfig& config) {
return std::make_unique<ActiveRawUdpListener>(worker_index, concurrency_, parent, dispatcher,
config);
return std::make_unique<ActiveRawUdpListener>(worker_index, concurrency_, parent,
std::move(listen_socket_ptr), dispatcher, config);
}

} // namespace Server
Expand Down
5 changes: 3 additions & 2 deletions source/server/active_raw_udp_listener_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ class ActiveRawUdpListenerFactory : public Network::ActiveUdpListenerFactory {

Network::ConnectionHandler::ActiveUdpListenerPtr
createActiveUdpListener(Runtime::Loader&, uint32_t worker_index,
Network::UdpConnectionHandler& parent, Event::Dispatcher& disptacher,
Network::ListenerConfig& config) override;
Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr&& listen_socket_ptr,
Event::Dispatcher& disptacher, Network::ListenerConfig& config) override;
bool isTransportConnectionless() const override { return true; }
const Network::Socket::OptionsSharedPtr& socketOptions() const override { return options_; }

Expand Down
13 changes: 6 additions & 7 deletions source/server/active_tcp_listener.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,12 @@ namespace Server {

ActiveTcpListener::ActiveTcpListener(Network::TcpConnectionHandler& parent,
Network::ListenerConfig& config, Runtime::Loader& runtime,
uint32_t worker_index)
: OwnedActiveStreamListenerBase(parent, parent.dispatcher(),
parent.dispatcher().createListener(
config.listenSocketFactory().getListenSocket(worker_index),
*this, runtime, config.bindToPort(),
config.ignoreGlobalConnLimit()),
config),
Network::SocketSharedPtr&& socket)
: OwnedActiveStreamListenerBase(
parent, parent.dispatcher(),
parent.dispatcher().createListener(std::move(socket), *this, runtime, config.bindToPort(),
config.ignoreGlobalConnLimit()),
config),
tcp_conn_handler_(parent) {
config.connectionBalancer().registerHandler(*this);
}
Expand Down
2 changes: 1 addition & 1 deletion source/server/active_tcp_listener.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ActiveTcpListener final : public Network::TcpListenerCallbacks,
public Network::BalancedConnectionHandler {
public:
ActiveTcpListener(Network::TcpConnectionHandler& parent, Network::ListenerConfig& config,
Runtime::Loader& runtime, uint32_t worker_index);
Runtime::Loader& runtime, Network::SocketSharedPtr&& socket);
ActiveTcpListener(Network::TcpConnectionHandler& parent, Network::ListenerPtr&& listener,
Network::ListenerConfig& config, Runtime::Loader& runtime);
~ActiveTcpListener() override;
Expand Down
8 changes: 0 additions & 8 deletions source/server/active_udp_listener.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,6 @@ void ActiveUdpListenerBase::onData(Network::UdpRecvData&& data) {
}
}

ActiveRawUdpListener::ActiveRawUdpListener(uint32_t worker_index, uint32_t concurrency,
Network::UdpConnectionHandler& parent,
Event::Dispatcher& dispatcher,
Network::ListenerConfig& config)
: ActiveRawUdpListener(worker_index, concurrency, parent,
config.listenSocketFactory().getListenSocket(worker_index), dispatcher,
config) {}

ActiveRawUdpListener::ActiveRawUdpListener(uint32_t worker_index, uint32_t concurrency,
Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr listen_socket_ptr,
Expand Down
3 changes: 0 additions & 3 deletions source/server/active_udp_listener.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,6 @@ class ActiveRawUdpListener : public ActiveUdpListenerBase,
public Network::UdpReadFilterCallbacks,
Logger::Loggable<Logger::Id::conn_handler> {
public:
ActiveRawUdpListener(uint32_t worker_index, uint32_t concurrency,
Network::UdpConnectionHandler& parent, Event::Dispatcher& dispatcher,
Network::ListenerConfig& config);
ActiveRawUdpListener(uint32_t worker_index, uint32_t concurrency,
Network::UdpConnectionHandler& parent,
Network::SocketSharedPtr listen_socket_ptr, Event::Dispatcher& dispatcher,
Expand Down
2 changes: 1 addition & 1 deletion source/server/admin/admin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ void AdminImpl::startHttpListener(const std::list<AccessLog::InstanceSharedPtr>&
socket_ = std::make_shared<Network::TcpListenSocket>(address, socket_options, true);
RELEASE_ASSERT(0 == socket_->ioHandle().listen(ENVOY_TCP_BACKLOG_SIZE).return_value_,
"listen() failed on admin listener");
socket_factory_ = std::make_unique<AdminListenSocketFactory>(socket_);
socket_factories_.emplace_back(std::make_unique<AdminListenSocketFactory>(socket_));
listener_ = std::make_unique<AdminListener>(*this, std::move(listener_scope));
ENVOY_LOG(info, "admin address: {}",
socket().connectionInfoProvider().localAddress()->asString());
Expand Down
8 changes: 6 additions & 2 deletions source/server/admin/admin.h
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,11 @@ class AdminImpl : public Admin,
Network::FilterChainManager& filterChainManager() override { return parent_; }
Network::FilterChainFactory& filterChainFactory() override { return parent_; }
Network::ListenSocketFactory& listenSocketFactory() override {
return *parent_.socket_factory_;
ASSERT(parent_.socket_factories_.size() == 1);
return *parent_.socket_factories_[0];
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we have an assert here that the number of socket factories is 1?

Copy link
Copy Markdown
Member Author

@soulxu soulxu Jun 17, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, let me add one

}
std::vector<Network::ListenSocketFactoryPtr>& listenSocketFactories() override {
return parent_.socket_factories_;
}
bool bindToPort() override { return true; }
bool handOffRestoredDestinationConnections() const override { return false; }
Expand Down Expand Up @@ -495,7 +499,7 @@ class AdminImpl : public Admin,
ConfigTrackerImpl config_tracker_;
const Network::FilterChainSharedPtr admin_filter_chain_;
Network::SocketSharedPtr socket_;
Network::ListenSocketFactoryPtr socket_factory_;
std::vector<Network::ListenSocketFactoryPtr> socket_factories_;
AdminListenerPtr listener_;
const AdminInternalAddressConfig internal_address_config_;
const LocalReply::LocalReplyPtr local_reply_;
Expand Down
Loading