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
1 change: 1 addition & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ extensions/filters/http/oauth2 @derekargueta @snowp
/*/extensions/clusters/logical_dns/ @UNOWNED @UNOWNED
/*/extensions/clusters/common/ @UNOWNED @UNOWNED
/*/extensions/clusters/eds/ @UNOWNED @UNOWNED
/*/source/extensions/listener_managers/listener_manager @UNOWNED @UNOWNED

# URL Pattern Match and Rewrite Library
/*/extensions/path/uri_template_lib @alyssawilk @yanjunxiang-google
Expand Down
10 changes: 10 additions & 0 deletions source/common/config/well_known_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,5 +173,15 @@ class TagNameValues {

using TagNames = ConstSingleton<TagNameValues>;

// This class holds extension points which will always be built into Envoy in
// server mode, but may be excluded from Envoy Mobile.
class ServerBuiltInExtensionValues {
public:
// Extension point for the default listener.
const std::string DEFAULT_LISTENER = "envoy.listener_manager_impl.default";
};

using ServerExtensionValues = ConstSingleton<ServerBuiltInExtensionValues>;

} // namespace Config
} // namespace Envoy
3 changes: 3 additions & 0 deletions source/exe/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ envoy_cc_library(
name = "envoy_main_common_lib",
deps = [
":main_common_lib",
# This is compiled as an extension so Envoy Mobile doesn't have to link it in.
# Envoy requires it.
"//source/extensions/listener_managers/listener_manager:listener_manager_lib",
"//source/common/version:version_linkstamp",
],
)
Expand Down
2 changes: 1 addition & 1 deletion source/extensions/bootstrap/internal_listener/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ envoy_cc_extension(
deps = [
":thread_local_registry",
"//envoy/server:bootstrap_extension_config_interface",
"//source/server:listener_manager_lib",
"//source/extensions/listener_managers/listener_manager:listener_manager_lib",
"@envoy_api//envoy/extensions/bootstrap/internal_listener/v3:pkg_cc_proto",
],
alwayslink = 1,
Expand Down
83 changes: 83 additions & 0 deletions source/extensions/listener_managers/listener_manager/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_extension",
"envoy_extension_package",
"envoy_select_enable_http3",
)

licenses(["notice"]) # Apache 2

envoy_extension_package()

envoy_cc_extension(
name = "listener_manager_lib",
srcs = [
"listener_impl.cc",
"listener_manager_impl.cc",
],
hdrs = [
"listener_impl.h",
"listener_manager_impl.h",
],
# any changes to this should be reviewed by mobile maintainers
# to ensure that listener code doesn't leak back into Envoy Mobile.
extra_visibility = [
"//source/server/admin:__subpackages__",
"//source/server/config_validation:__subpackages__",
"//test:__subpackages__",
],
deps = [
"//source/server:listener_manager_factory_lib",
"//source/server:api_listener_lib",
"//source/server:active_raw_udp_listener_config",
"//source/server:configuration_lib",
"//source/server:drain_manager_lib",
"//source/server:filter_chain_manager_lib",
"//source/server:lds_api_lib",
"//source/server:transport_socket_config_lib",
"//envoy/access_log:access_log_interface",
"//envoy/config:typed_metadata_interface",
"//envoy/network:connection_interface",
"//envoy/network:listener_interface",
"//envoy/server:api_listener_interface",
"//envoy/server:filter_config_interface",
"//envoy/server:listener_manager_interface",
"//envoy/server:transport_socket_config_interface",
"//envoy/server:worker_interface",
"//source/common/access_log:access_log_lib",
"//source/common/common:basic_resource_lib",
"//source/common/common:empty_string",
"//source/common/config:utility_lib",
"//source/common/config:metadata_lib",
"//source/common/http:conn_manager_lib",
"//source/common/init:manager_lib",
"//source/common/init:target_lib",
"//source/common/network:connection_balancer_lib",
"//source/common/network:filter_matcher_lib",
"//source/common/network:listen_socket_lib",
"//source/common/network:listener_lib",
"//source/common/network:resolver_lib",
"//source/common/network:socket_option_factory_lib",
"//source/common/network:udp_packet_writer_handler_lib",
"//source/common/network:utility_lib",
"//source/common/protobuf:utility_lib",
"//source/common/stream_info:stream_info_lib",
"//source/common/quic:quic_stat_names_lib",
"//source/extensions/filters/network/http_connection_manager:config",
"//source/extensions/upstreams/http/generic:config",
"//source/extensions/udp_packet_writer/default:config",
"@envoy_api//envoy/admin/v3:pkg_cc_proto",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
"@envoy_api//envoy/config/listener/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/filters/listener/proxy_protocol/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/transport_sockets/raw_buffer/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/udp_packet_writer/v3:pkg_cc_proto",
] + envoy_select_enable_http3([
"//source/common/quic:active_quic_listener_lib",
"//source/common/quic:client_connection_factory_lib",
"//source/common/quic:quic_factory_lib",
"//source/common/quic:quic_transport_socket_factory_lib",
"//source/common/quic:udp_gso_batch_writer_lib",
"//source/extensions/udp_packet_writer/gso:config",
]),
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "source/server/listener_impl.h"
#include "source/extensions/listener_managers/listener_manager/listener_impl.h"

#include <functional>

Expand Down Expand Up @@ -27,11 +27,11 @@
#include "source/common/network/utility.h"
#include "source/common/protobuf/utility.h"
#include "source/common/runtime/runtime_features.h"
#include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h"
#include "source/server/active_raw_udp_listener_config.h"
#include "source/server/configuration_impl.h"
#include "source/server/drain_manager_impl.h"
#include "source/server/filter_chain_manager_impl.h"
#include "source/server/listener_manager_impl.h"
#include "source/server/transport_socket_config_impl.h"

#ifdef ENVOY_ENABLE_QUIC
Expand Down Expand Up @@ -301,9 +301,7 @@ Stats::Scope& ListenerFactoryContextBaseImpl::listenerScope() { return *listener
bool ListenerFactoryContextBaseImpl::isQuicListener() const { return is_quic_; }
Network::DrainDecision& ListenerFactoryContextBaseImpl::drainDecision() { return *this; }
Server::DrainManager& ListenerFactoryContextBaseImpl::drainManager() { return *drain_manager_; }

// Must be overridden
Init::Manager& ListenerFactoryContextBaseImpl::initManager() { PANIC("not implemented"); }
Init::Manager& ListenerFactoryContextBaseImpl::initManager() { return server_.initManager(); }

ListenerImpl::ListenerImpl(const envoy::config::listener::v3::Listener& config,
const std::string& version_info, ListenerManagerImpl& parent,
Expand Down Expand Up @@ -774,11 +772,10 @@ void ListenerImpl::buildConnectionBalancer(const Network::Address::Instance& add
// Not in place listener update.
if (config_.has_connection_balance_config()) {
switch (config_.connection_balance_config().balance_type_case()) {
case envoy::config::listener::v3::Listener_ConnectionBalanceConfig::kExactBalance: {
case envoy::config::listener::v3::Listener_ConnectionBalanceConfig::kExactBalance:
connection_balancers_.emplace(address.asString(),
std::make_shared<Network::ExactConnectionBalancerImpl>());
break;
}
case envoy::config::listener::v3::Listener_ConnectionBalanceConfig::kExtendBalance: {
const std::string connection_balance_library_type{TypeUtil::typeUrlToDescriptorFullName(
config_.connection_balance_config().extend_balance().typed_config().type_url())};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "source/server/listener_manager_impl.h"
#include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h"

#include <algorithm>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
#include "envoy/server/worker.h"
#include "envoy/stats/scope.h"

#include "source/common/config/well_known_names.h"
#include "source/common/filter/config_discovery_impl.h"
#include "source/common/quic/quic_stat_names.h"
#include "source/extensions/listener_managers/listener_manager/listener_impl.h"
#include "source/server/filter_chain_factory_context_callback.h"
#include "source/server/filter_chain_manager_impl.h"
#include "source/server/lds_api.h"
#include "source/server/listener_impl.h"
#include "source/server/listener_manager_factory.h"

namespace Envoy {
Expand Down Expand Up @@ -363,7 +364,9 @@ class DefaultListenerManagerFactoryImpl : public ListenerManagerFactory {
return std::make_unique<ListenerManagerImpl>(server, std::move(factory), worker_factory,
enable_dispatcher_stats, quic_stat_names);
}
std::string name() const override { return "envoy.listener_manager_impl.default"; }
std::string name() const override {
return Config::ServerExtensionValues::get().DEFAULT_LISTENER;
}
};

} // namespace Server
Expand Down
50 changes: 7 additions & 43 deletions source/server/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ load(
"envoy_cc_library",
"envoy_package",
"envoy_proto_library",
"envoy_select_enable_http3",
"envoy_select_hot_restart",
)

Expand Down Expand Up @@ -324,7 +323,6 @@ envoy_cc_library(
hdrs = envoy_select_hot_restart(["hot_restarting_parent.h"]),
deps = [
":hot_restarting_base",
":listener_manager_lib",
"//source/common/memory:stats_lib",
"//source/common/stats:stat_merger_lib",
"//source/common/stats:symbol_table_lib",
Expand Down Expand Up @@ -437,74 +435,39 @@ envoy_cc_library(
],
)

# TODO(junr03): actually separate this lib from the listener and api listener lib.
# this can be done if the parent_ in the listener and the api listener becomes the ListenerManager interface.
# the issue right now is that the listener's reach into the listener manager's server_ instance variable.
envoy_cc_library(
name = "listener_manager_lib",
name = "api_listener_lib",
srcs = [
"api_listener_impl.cc",
"listener_impl.cc",
"listener_manager_impl.cc",
],
hdrs = [
"api_listener_impl.h",
"listener_impl.h",
"listener_manager_impl.h",
],
deps = [
":listener_manager_factory_lib",
"active_raw_udp_listener_config",
":configuration_lib",
":drain_manager_lib",
":filter_chain_manager_lib",
":lds_api_lib",
":transport_socket_config_lib",
"//envoy/access_log:access_log_interface",
"//envoy/config:typed_metadata_interface",
"//envoy/network:connection_interface",
"//envoy/network:listener_interface",
"//envoy/server:api_listener_interface",
"//envoy/server:filter_config_interface",
"//envoy/server:instance_interface",
"//envoy/server:listener_manager_interface",
"//envoy/server:transport_socket_config_interface",
"//envoy/server:worker_interface",
"//source/common/access_log:access_log_lib",
"//source/common/common:basic_resource_lib",
"//source/common/common:empty_string",
"//source/common/config:utility_lib",
"//source/common/config:metadata_lib",
"//source/common/http:conn_manager_lib",
"//source/common/config:utility_lib",
"//source/common/init:manager_lib",
"//source/common/init:target_lib",
"//source/common/network:connection_balancer_lib",
"//source/common/network:filter_matcher_lib",
"//source/common/network:listen_socket_lib",
"//source/common/network:listener_lib",
"//source/common/network:resolver_lib",
"//source/common/network:socket_option_factory_lib",
"//source/common/network:udp_packet_writer_handler_lib",
"//source/common/network:utility_lib",
"//source/common/protobuf:utility_lib",
"//source/common/stream_info:stream_info_lib",
"//source/common/quic:quic_stat_names_lib",
"//source/extensions/filters/network/http_connection_manager:config",
"//source/extensions/upstreams/http/generic:config",
"//source/extensions/udp_packet_writer/default:config",
"@envoy_api//envoy/admin/v3:pkg_cc_proto",
"//source/extensions/upstreams/http/generic:config",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
"@envoy_api//envoy/config/listener/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/filters/listener/proxy_protocol/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/transport_sockets/raw_buffer/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/udp_packet_writer/v3:pkg_cc_proto",
] + envoy_select_enable_http3([
"//source/common/quic:active_quic_listener_lib",
"//source/common/quic:client_connection_factory_lib",
"//source/common/quic:quic_factory_lib",
"//source/common/quic:quic_transport_socket_factory_lib",
"//source/common/quic:udp_gso_batch_writer_lib",
"//source/extensions/udp_packet_writer/gso:config",
]),
],
alwayslink = True,
)

Expand Down Expand Up @@ -586,11 +549,12 @@ envoy_cc_library(
],
deps = [
":active_raw_udp_listener_config",
":api_listener_lib",
":configuration_lib",
":connection_handler_lib",
":guarddog_lib",
":listener_hooks_lib",
":listener_manager_lib",
":listener_manager_factory_lib",
":regex_engine_lib",
":ssl_context_manager_lib",
":worker_lib",
Expand Down
2 changes: 1 addition & 1 deletion source/server/admin/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ envoy_cc_library(
"//source/common/router:scoped_config_lib",
"//source/common/stats:isolated_store_lib",
"//source/extensions/access_loggers/common:file_access_log_lib",
"//source/extensions/listener_managers/listener_manager:listener_manager_lib",
"//source/extensions/request_id/uuid:config",
"//source/server:listener_manager_lib",
],
)

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 @@ -32,9 +32,9 @@
#include "source/common/protobuf/protobuf.h"
#include "source/common/protobuf/utility.h"
#include "source/common/router/config_impl.h"
#include "source/extensions/listener_managers/listener_manager/listener_impl.h"
#include "source/extensions/request_id/uuid/config.h"
#include "source/server/admin/utils.h"
#include "source/server/listener_impl.h"

#include "absl/strings/str_join.h"
#include "absl/strings/str_replace.h"
Expand Down
1 change: 1 addition & 0 deletions source/server/config_validation/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ envoy_cc_library(
"//source/common/stats:stats_lib",
"//source/common/thread_local:thread_local_lib",
"//source/common/version:version_lib",
"//source/extensions/listener_managers/listener_manager:listener_manager_lib",
"//source/server:configuration_lib",
"//source/server:server_lib",
"//source/server/admin:admin_lib",
Expand Down
9 changes: 6 additions & 3 deletions source/server/config_validation/server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "source/common/common/utility.h"
#include "source/common/config/utility.h"
#include "source/common/config/well_known_names.h"
#include "source/common/event/real_time_system.h"
#include "source/common/local_info/local_info_impl.h"
#include "source/common/protobuf/utility.h"
Expand Down Expand Up @@ -102,9 +103,11 @@ void ValidationInstance::initialize(const Options& options,
Configuration::InitialImpl initial_config(bootstrap_);
initial_config.initAdminAccessLog(bootstrap_, *this);
admin_ = std::make_unique<Server::ValidationAdmin>(initial_config.admin().address());
listener_manager_ = std::make_unique<ListenerManagerImpl>(
*this, std::make_unique<ValidationListenerComponentFactory>(*this), *this, false,
quic_stat_names_);
listener_manager_ =
Config::Utility::getAndCheckFactoryByName<ListenerManagerFactory>(
Config::ServerExtensionValues::get().DEFAULT_LISTENER)
.createListenerManager(*this, std::make_unique<ValidationListenerComponentFactory>(*this),
*this, false, quic_stat_names_);
thread_local_.registerThread(*dispatcher_, true);

Runtime::LoaderPtr runtime_ptr = component_factory.createRuntime(*this, initial_config);
Expand Down
6 changes: 4 additions & 2 deletions source/server/config_validation/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@
#include "source/common/runtime/runtime_impl.h"
#include "source/common/secret/secret_manager_impl.h"
#include "source/common/thread_local/thread_local_impl.h"

// TODO(alyssawilk) address
#include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h"
#include "source/server/config_validation/admin.h"
#include "source/server/config_validation/api.h"
#include "source/server/config_validation/cluster_manager.h"
#include "source/server/config_validation/dns.h"
#include "source/server/listener_manager_impl.h"
#include "source/server/server.h"

#include "absl/types/optional.h"
Expand Down Expand Up @@ -235,7 +237,7 @@ class ValidationInstance final : Logger::Loggable<Logger::Id::main>,
LocalInfo::LocalInfoPtr local_info_;
AccessLog::AccessLogManagerImpl access_log_manager_;
std::unique_ptr<Upstream::ValidationClusterManagerFactory> cluster_manager_factory_;
std::unique_ptr<ListenerManagerImpl> listener_manager_;
std::unique_ptr<ListenerManager> listener_manager_;
std::unique_ptr<OverloadManager> overload_manager_;
MutexTracer* mutex_tracer_;
Grpc::ContextImpl grpc_context_;
Expand Down
1 change: 0 additions & 1 deletion source/server/hot_restarting_parent.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#include "source/common/stats/stat_merger.h"
#include "source/common/stats/symbol_table.h"
#include "source/common/stats/utility.h"
#include "source/server/listener_impl.h"

namespace Envoy {
namespace Server {
Expand Down
Loading