Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
42591c4
Listener ECDS: Adding FilterConfigProviderManagerImpl class implemant…
yanjunxiang-google Mar 28, 2022
c97c715
fixing format error
yanjunxiang-google Mar 28, 2022
c473f29
switching to use tls_inspector listener filter in the test
yanjunxiang-google Mar 29, 2022
9b50205
addressing comments
yanjunxiang-google Mar 29, 2022
7829692
fixing test code
yanjunxiang-google Mar 30, 2022
5df2374
Merge branch 'main' of https://github.com/envoyproxy/envoy into ecds_…
yanjunxiang-google Apr 1, 2022
e7a217b
adding UDP listener filter support also refactoring ECDS tests
yanjunxiang-google Apr 3, 2022
39f434b
fixing format
yanjunxiang-google Apr 3, 2022
fe77b12
removing unused validate.proto
yanjunxiang-google Apr 3, 2022
4fd9312
fixing CI error
yanjunxiang-google Apr 3, 2022
cea0a65
abstract the FilterConfigProviderManagerImpl class
yanjunxiang-google Apr 7, 2022
817c9dd
fixing CI error
yanjunxiang-google Apr 8, 2022
4266bea
using string_view reference instead of enum as non-typed template pa…
yanjunxiang-google Apr 8, 2022
35cca65
address comments: adding typed test
yanjunxiang-google Apr 13, 2022
026f16e
fix CI error
yanjunxiang-google Apr 13, 2022
ca4c8a7
fixing CI GCC anonymous namespace error
yanjunxiang-google Apr 13, 2022
46e45c7
fixing clang tidy issue
yanjunxiang-google Apr 13, 2022
56fb733
addressing comments, moving statPrefix out of the template parameters
yanjunxiang-google Apr 14, 2022
1a8dd74
addressing comments
yanjunxiang-google Apr 14, 2022
99a590a
clean up test code
yanjunxiang-google Apr 21, 2022
7dfbd75
fix format
yanjunxiang-google Apr 21, 2022
8931395
addressing comments
yanjunxiang-google Apr 24, 2022
743de2a
adding a TODO comments
yanjunxiang-google Apr 24, 2022
ad043b8
fixing CI error
yanjunxiang-google Apr 24, 2022
105153a
reduce duplicated code
yanjunxiang-google Apr 24, 2022
eeff8c0
addressing comments
yanjunxiang-google Apr 25, 2022
2de5f43
addressing comments
yanjunxiang-google Apr 25, 2022
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
4 changes: 2 additions & 2 deletions envoy/filter/config_provider_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ using DynamicFilterConfigProviderPtr = std::unique_ptr<DynamicFilterConfigProvid
* The FilterConfigProviderManager exposes the ability to get an FilterConfigProvider
* for both static and dynamic filter config providers.
*/
template <class FactoryCb> class FilterConfigProviderManager {
template <class FactoryCb, class FactoryCtx> class FilterConfigProviderManager {
public:
virtual ~FilterConfigProviderManager() = default;

Expand All @@ -40,7 +40,7 @@ template <class FactoryCb> class FilterConfigProviderManager {
*/
virtual DynamicFilterConfigProviderPtr<FactoryCb> createDynamicFilterConfigProvider(
const envoy::config::core::v3::ExtensionConfigSource& config_source,
const std::string& filter_config_name, Server::Configuration::FactoryContext& factory_context,
const std::string& filter_config_name, FactoryCtx& factory_context,
const std::string& stat_prefix, bool last_filter_in_filter_chain,
const std::string& filter_chain_type) PURE;

Expand Down
95 changes: 83 additions & 12 deletions source/common/filter/config_discovery_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ namespace Envoy {
namespace Filter {

constexpr absl::string_view HttpStatPrefix = "http_filter.";
constexpr absl::string_view TcpListenerStatPrefix = "tcp_listener_filter.";
constexpr absl::string_view UdpListenerStatPrefix = "udp_listener_filter.";
Comment thread
yanjunxiang-google marked this conversation as resolved.
Outdated

namespace {
void validateTypeUrlHelper(const std::string& type_url,
Expand Down Expand Up @@ -232,18 +234,7 @@ void FilterConfigProviderManagerImplBase::applyLastOrDefaultConfig(
}
}

std::tuple<ProtobufTypes::MessagePtr, std::string> HttpFilterConfigProviderManagerImpl::getMessage(
const envoy::config::core::v3::TypedExtensionConfig& filter_config,
Server::Configuration::ServerFactoryContext& factory_context) const {
auto& factory =
Config::Utility::getAndCheckFactory<Server::Configuration::NamedHttpFilterConfigFactory>(
filter_config);
ProtobufTypes::MessagePtr message = Config::Utility::translateAnyToFactoryConfig(
filter_config.typed_config(),
factory_context.messageValidationContext().dynamicValidationVisitor(), factory);
return {std::move(message), factory.name()};
}

// HTTP filter
absl::string_view HttpFilterConfigProviderManagerImpl::statPrefix() const { return HttpStatPrefix; }

ProtobufTypes::MessagePtr HttpFilterConfigProviderManagerImpl::getDefaultConfig(
Expand All @@ -269,5 +260,85 @@ ProtobufTypes::MessagePtr HttpFilterConfigProviderManagerImpl::getDefaultConfig(
return message;
}

std::unique_ptr<DynamicFilterConfigProviderImpl<Http::FilterFactoryCb>>
HttpFilterConfigProviderManagerImpl::createFilterConfigProviderImpl(
FilterConfigSubscriptionSharedPtr& subscription,
const absl::flat_hash_set<std::string>& require_type_urls,
Server::Configuration::FactoryContext& factory_context,
ProtobufTypes::MessagePtr&& default_config, bool last_filter_in_filter_chain,
const std::string& filter_chain_type, absl::string_view stat_prefix) {
return std::make_unique<HttpDynamicFilterConfigProviderImpl>(
subscription, require_type_urls, factory_context, std::move(default_config),
last_filter_in_filter_chain, filter_chain_type, stat_prefix);
}

// TCP listener filter
absl::string_view TcpListenerFilterConfigProviderManagerImpl::statPrefix() const {
return TcpListenerStatPrefix;
}

ProtobufTypes::MessagePtr TcpListenerFilterConfigProviderManagerImpl::getDefaultConfig(
const ProtobufWkt::Any& proto_config, const std::string& filter_config_name,
Server::Configuration::ListenerFactoryContext& factory_context, bool, const std::string&,
const absl::flat_hash_set<std::string>& require_type_urls) const {
auto* default_factory =
Config::Utility::getFactoryByType<Server::Configuration::NamedListenerFilterConfigFactory>(
proto_config);
if (default_factory == nullptr) {
throw EnvoyException(fmt::format("Error: cannot find filter factory {} for default filter "
"configuration with type URL {}.",
filter_config_name, proto_config.type_url()));
}
validateTypeUrlHelper(Config::Utility::getFactoryType(proto_config), require_type_urls);
return Config::Utility::translateAnyToFactoryConfig(
proto_config, factory_context.messageValidationVisitor(), *default_factory);
}

std::unique_ptr<DynamicFilterConfigProviderImpl<Network::ListenerFilterFactoryCb>>
TcpListenerFilterConfigProviderManagerImpl::createFilterConfigProviderImpl(
FilterConfigSubscriptionSharedPtr& subscription,
const absl::flat_hash_set<std::string>& require_type_urls,
Server::Configuration::ListenerFactoryContext& factory_context,
Comment thread
yanjunxiang-google marked this conversation as resolved.
Outdated
ProtobufTypes::MessagePtr&& default_config, bool last_filter_in_filter_chain,
const std::string& filter_chain_type, absl::string_view stat_prefix) {
return std::make_unique<TcpListenerDynamicFilterConfigProviderImpl>(
subscription, require_type_urls, factory_context, std::move(default_config),
last_filter_in_filter_chain, filter_chain_type, stat_prefix);
}

// UDP listener filter
absl::string_view UdpListenerFilterConfigProviderManagerImpl::statPrefix() const {
return UdpListenerStatPrefix;
}

ProtobufTypes::MessagePtr UdpListenerFilterConfigProviderManagerImpl::getDefaultConfig(
const ProtobufWkt::Any& proto_config, const std::string& filter_config_name,
Server::Configuration::ListenerFactoryContext& factory_context, bool, const std::string&,
const absl::flat_hash_set<std::string>& require_type_urls) const {
auto* default_factory =
Config::Utility::getFactoryByType<Server::Configuration::NamedUdpListenerFilterConfigFactory>(
proto_config);
if (default_factory == nullptr) {
throw EnvoyException(fmt::format("Error: cannot find filter factory {} for default filter "
"configuration with type URL {}.",
filter_config_name, proto_config.type_url()));
}
validateTypeUrlHelper(Config::Utility::getFactoryType(proto_config), require_type_urls);
return Config::Utility::translateAnyToFactoryConfig(
proto_config, factory_context.messageValidationVisitor(), *default_factory);
}

std::unique_ptr<DynamicFilterConfigProviderImpl<Network::UdpListenerFilterFactoryCb>>
UdpListenerFilterConfigProviderManagerImpl::createFilterConfigProviderImpl(
FilterConfigSubscriptionSharedPtr& subscription,
const absl::flat_hash_set<std::string>& require_type_urls,
Server::Configuration::ListenerFactoryContext& factory_context,
ProtobufTypes::MessagePtr&& default_config, bool last_filter_in_filter_chain,
const std::string& filter_chain_type, absl::string_view stat_prefix) {
return std::make_unique<UdpListenerDynamicFilterConfigProviderImpl>(
subscription, require_type_urls, factory_context, std::move(default_config),
last_filter_in_filter_chain, filter_chain_type, stat_prefix);
}

} // namespace Filter
} // namespace Envoy
Loading