-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Extensions: Network filter to forward SNI from the downstream TLS connection to the upstream TLS connection #4334
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
vadimeisenbergibm
wants to merge
116
commits into
envoyproxy:master
from
vadimeisenbergibm:forward_original_sni
Closed
Changes from all commits
Commits
Show all changes
116 commits
Select commit
Hold shift + click to select a range
7166095
add forward_original_sni to upstream TLS Context
vadimeisenbergibm 8e298cc
reorder the fields in UpstreamTlsContext, put forward_original_sni last
vadimeisenbergibm fea6a13
remove TODO related to oneof and clarified the configuration
vadimeisenbergibm 2f39451
add Network::ConnectionSocket::OptionsSharedPtr parameter to createTr…
vadimeisenbergibm 3cc57db
fix format
vadimeisenbergibm f90f771
Add forward-original-sni to context_config
ronensc 1d8578a
Revert "fix format"
vadimeisenbergibm 5e7bed7
Revert "add Network::ConnectionSocket::OptionsSharedPtr parameter to …
vadimeisenbergibm f8b4f60
Revert "Add forward-original-sni to context_config"
vadimeisenbergibm 26eb6fb
add forwardOriginalServerNameIndication() to ClusterInfo
vadimeisenbergibm 7c37d51
add overrideServerNameIndication parameter to SslSocket and Context
vadimeisenbergibm ba9ff7d
add forwardOriginalServerNameIndication() to MockClusterInfo
vadimeisenbergibm 35945a4
add overrideServerNameIndication to TransportSocketFactory::createTra…
vadimeisenbergibm 3f927b1
update MockTransportSocketFactory::createTransportSocket()
vadimeisenbergibm cfcc5ee
fix TsiSocketFactory::createTransportSocket()
vadimeisenbergibm f0c1725
add overrideServerNameIndication to Host::createConnection()
vadimeisenbergibm baced96
remove unused parameter name
vadimeisenbergibm 8f40ece
pass the SNI from the downstream connection to createConnection
vadimeisenbergibm aae6a12
add the SNI to the hash key
vadimeisenbergibm 567552d
add the requested server name to the hash key in tcpConnPool instead …
vadimeisenbergibm 09b8738
add a null pointer check
vadimeisenbergibm 77de8e7
use absl::optional<std::string> instead of string with default
vadimeisenbergibm e7f5948
fix createConnection in test/mocks/upstream/host.h
vadimeisenbergibm f7249b2
fix MockTransportSocketFactory::createTransportSocket()
vadimeisenbergibm 798a655
fix call to createTransportSocket in grpc_client_integration_test_har…
vadimeisenbergibm 97057e9
a bug fix, inversing the result of optional::has_value()
vadimeisenbergibm 9f9fbe8
pass optional instead of its value as a parameter
vadimeisenbergibm 9a2a41e
more cases of passing optional instead of its value as a parameter
vadimeisenbergibm b44433d
another case of passing optional instead of its value as a parameter
vadimeisenbergibm 1ed9359
add overrideServerName parameter to TCP ConnPool::ConnPool
vadimeisenbergibm c1d4228
fix TcpConnPoolImplDestructorTest
vadimeisenbergibm cb4ecb8
add overrideServerName parameter to allocateTcpConnPool()
vadimeisenbergibm 7a0fb8b
fix MOCK_METHOD cardinality for allocateTcpConnPool
vadimeisenbergibm 932d043
remove unnecessary initialization of an optional
vadimeisenbergibm 320e435
add a check that requestedServerName is not empty
vadimeisenbergibm c7a32d0
assign to optional by operator=(), not by value()
vadimeisenbergibm e9fc3a1
Merge branch 'master' into forward_original_sni
vadimeisenbergibm 3da1148
add OriginalRequestedServerName filter state object, and use it the f…
vadimeisenbergibm 8d8b39c
add envoy.filters.network.original_sni
vadimeisenbergibm 325855f
add a check that a parameter is not null
vadimeisenbergibm 740bfd3
remove redundant check
vadimeisenbergibm 45aed66
Merge branch 'master' into forward_original_sni
vadimeisenbergibm 19a6e0d
overrideServerName -> override_server_name
vadimeisenbergibm 7e18f1c
add override_server_name parameter to tcpConnForCluster and tcpConnPo…
vadimeisenbergibm 233bc5f
fix mock method's cardinality
vadimeisenbergibm 5e704fb
fix lambda parameters in test
vadimeisenbergibm af8e96f
Merge branch 'master' into forward_original_sni
vadimeisenbergibm 460e84a
add missing include of absl::optional
vadimeisenbergibm 5bccf5c
fix formatting
vadimeisenbergibm 6d1ff22
fix a call to setData() method
vadimeisenbergibm 365bf98
remove polling filterState for original sni
vadimeisenbergibm d2857ea
Revert "remove polling filterState for original sni"
vadimeisenbergibm 4a11d1f
use using instead of typedef
vadimeisenbergibm 1dbef57
add ON_CALL for const filterState() mock method
vadimeisenbergibm cbf26fa
add missing using for testing::Const
vadimeisenbergibm 616c91b
fix syntax of using directives
vadimeisenbergibm 5d9b559
Revert "add forwardOriginalServerNameIndication() to MockClusterInfo"
vadimeisenbergibm 809c74f
Revert "add forwardOriginalServerNameIndication() to ClusterInfo"
vadimeisenbergibm f41f7c0
Revert "remove TODO related to oneof and clarified the configuration"
vadimeisenbergibm ac4278a
Revert "reorder the fields in UpstreamTlsContext, put forward_origina…
vadimeisenbergibm 9217a85
Revert "add forward_original_sni to upstream TLS Context"
vadimeisenbergibm 7150d92
original_requested_server_name -> forward_requested_server_name
vadimeisenbergibm 74bdc7e
OriginalRequestedServerName -> ForwardRequestedServerName
vadimeisenbergibm d441cda
source/extensions/filters/network/original_sni -> source/extensions/f…
vadimeisenbergibm bfea2ff
OriginalSniNetworkFilter -> ForwardOriginalSniNetworkFilter
vadimeisenbergibm 123f591
use auto variable qualifier
vadimeisenbergibm 5ab3ad2
add test for forward_original_sni network filter
vadimeisenbergibm e4a44c6
fix a typo
vadimeisenbergibm e24ff66
add using declaration for ForwardRequestedServerName
vadimeisenbergibm 4ea35c7
fix additional typo
vadimeisenbergibm 2590146
add initial version of CreateTransportSocketWithOverrideServerName
vadimeisenbergibm 50a5091
fix CreateTransportSocketWithOverrideServerName test
vadimeisenbergibm b53e88a
use get() to extract the pointer from uniq_ptr
vadimeisenbergibm b748e80
use connection to test ssl socket
vadimeisenbergibm 60b04e0
remove checking client_session
vadimeisenbergibm 4e7601a
remove transport_socket temprary variable
vadimeisenbergibm 6fd2102
add check that client_connection is not nullptr
vadimeisenbergibm 53ee9a5
Revert "add check that client_connection is not nullptr"
vadimeisenbergibm c890c3b
Revert "remove transport_socket temprary variable"
vadimeisenbergibm 9e6966a
Revert "remove checking client_session"
vadimeisenbergibm 2667505
Revert "use connection to test ssl socket"
vadimeisenbergibm 13e8101
Revert "use get() to extract the pointer from uniq_ptr"
vadimeisenbergibm 652c050
Revert "fix CreateTransportSocketWithOverrideServerName test"
vadimeisenbergibm b9fd493
Revert "add initial version of CreateTransportSocketWithOverrideServe…
vadimeisenbergibm ce243f4
add override_server_name_parameter to testUtilV2
vadimeisenbergibm 0f7d564
fix erroneous parameters to testUtil
vadimeisenbergibm fa2df04
add OverrideRequestedServerName test
vadimeisenbergibm 4a7c8e6
check the SNI in the client SSL
vadimeisenbergibm a96f40f
optional hasValue() -> has_value()
vadimeisenbergibm 4fd8156
fix a variable name
vadimeisenbergibm 68e15df
fix format
vadimeisenbergibm 4e5648a
remove applying SSL_get_servername on the client
vadimeisenbergibm e560b74
rename ForwardRequestedServerName::Key
vadimeisenbergibm 1613f42
update docs and CODEOWNERS
vadimeisenbergibm 502f9d3
Merge branch 'master' into forward_original_sni
vadimeisenbergibm 548c063
add missing parameter to createTransportSocket()
vadimeisenbergibm c9d3673
add tcp proxy ForwardRequestedServerName
vadimeisenbergibm 45734c0
fix a comment
vadimeisenbergibm 127bce3
set local address for the connection in ForwardRequestedServerName test
vadimeisenbergibm 2e4a8da
use WillOnce(Invoke) to test the override_server_name
vadimeisenbergibm 0c7a948
fix parameters of the lambda in Invoke of ForwardRequestServerName
vadimeisenbergibm f01b818
fix the key of ForwardRequestedServerName
vadimeisenbergibm e63a960
add extracting the requested server name from the server side SSL object
vadimeisenbergibm 7b28148
add OverrideRequestedServerNameWithoutSniInUpstreamTlsContext test
vadimeisenbergibm 0dc8998
fix format
vadimeisenbergibm 46dd604
add passing nonempty value of override_server_name in UnknownCluster …
vadimeisenbergibm 89ce5fc
add DynamicHostRemoveWithTls test
vadimeisenbergibm d44e6f2
tlsContext -> ssl_context according to the json schema
vadimeisenbergibm c2fada8
remove ssl_context from DynamicHostRemoveWithTls
vadimeisenbergibm 25c1aa6
move setting hash key by the override_server_name field out of contai…
vadimeisenbergibm 7bb1793
fix a counter value due to changes
vadimeisenbergibm ca99513
add drained cb for example.com and ibm.com connection pools
vadimeisenbergibm 6b8ea04
fix the number of drained connection pools
vadimeisenbergibm 08602ac
add vadimeisenbergibm to code owners of forward_original_sni extension
vadimeisenbergibm 7ccaf1d
extract override_server_name functionality into a separate PR
vadimeisenbergibm 0f13892
extract override_server_name functionality into a separate PR, leftovers
vadimeisenbergibm File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
docs/root/configuration/network_filters/forward_original_sni.rst
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| .. _config_network_filters_forward_original_sni: | ||
|
|
||
| Forward Original SNI | ||
| ========================= | ||
|
|
||
| The `forward_original_sni` is a network filter that instructs other filters, | ||
| such as `tcp_proxy`, to forward the SNI value from the downstream connection | ||
| to the upstream connection. The filter will do nothing for non-TLS connections or | ||
| for TLS connections without SNI. | ||
|
|
||
| This filter has no configuration. It must be installed before the | ||
| :ref:`tcp_proxy <config_network_filters_tcp_proxy>` filter. | ||
|
|
||
| * :ref:`v2 API reference <envoy_api_field_listener.Filter.name>` | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,3 +20,4 @@ filters. | |
| tcp_proxy_filter | ||
| thrift_proxy_filter | ||
| sni_cluster_filter | ||
| forward_original_sni | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
source/extensions/filters/network/forward_original_sni/BUILD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| licenses(["notice"]) # Apache 2 | ||
|
|
||
| load( | ||
| "//bazel:envoy_build_system.bzl", | ||
| "envoy_cc_library", | ||
| "envoy_package", | ||
| ) | ||
|
|
||
| envoy_package() | ||
|
|
||
| envoy_cc_library( | ||
| name = "forward_original_sni", | ||
| srcs = ["forward_original_sni.cc"], | ||
| hdrs = ["forward_original_sni.h"], | ||
| deps = [ | ||
| "//include/envoy/network:connection_interface", | ||
| "//include/envoy/network:filter_interface", | ||
| "//source/common/stream_info:forward_requested_server_name_lib", | ||
| ], | ||
| ) | ||
|
|
||
| envoy_cc_library( | ||
| name = "config", | ||
| srcs = ["config.cc"], | ||
| hdrs = ["config.h"], | ||
| deps = [ | ||
| ":forward_original_sni", | ||
| "//include/envoy/registry", | ||
| "//include/envoy/server:filter_config_interface", | ||
| "//source/extensions/filters/network:well_known_names", | ||
| ], | ||
| ) |
40 changes: 40 additions & 0 deletions
40
source/extensions/filters/network/forward_original_sni/config.cc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| #include "extensions/filters/network/forward_original_sni/config.h" | ||
|
|
||
| #include "envoy/registry/registry.h" | ||
| #include "envoy/server/filter_config.h" | ||
|
|
||
| #include "extensions/filters/network/forward_original_sni/forward_original_sni.h" | ||
|
|
||
| namespace Envoy { | ||
| namespace Extensions { | ||
| namespace NetworkFilters { | ||
| namespace ForwardOriginalSni { | ||
|
|
||
| Network::FilterFactoryCb ForwardOriginalSniNetworkFilterConfigFactory::createFilterFactory( | ||
| const Json::Object&, Server::Configuration::FactoryContext&) { | ||
| // Only used in v1 filters. | ||
| NOT_IMPLEMENTED_GCOVR_EXCL_LINE; | ||
| } | ||
|
|
||
| Network::FilterFactoryCb ForwardOriginalSniNetworkFilterConfigFactory::createFilterFactoryFromProto( | ||
| const Protobuf::Message&, Server::Configuration::FactoryContext&) { | ||
| return [](Network::FilterManager& filter_manager) -> void { | ||
| filter_manager.addReadFilter(std::make_shared<ForwardOriginalSniFilter>()); | ||
| }; | ||
| } | ||
|
|
||
| ProtobufTypes::MessagePtr ForwardOriginalSniNetworkFilterConfigFactory::createEmptyConfigProto() { | ||
| return std::make_unique<ProtobufWkt::Empty>(); | ||
| } | ||
|
|
||
| /** | ||
| * Static registration for the forward_original_sni filter. @see RegisterFactory. | ||
| */ | ||
| static Registry::RegisterFactory<ForwardOriginalSniNetworkFilterConfigFactory, | ||
| Server::Configuration::NamedNetworkFilterConfigFactory> | ||
| registered_; | ||
|
|
||
| } // namespace ForwardOriginalSni | ||
| } // namespace NetworkFilters | ||
| } // namespace Extensions | ||
| } // namespace Envoy |
31 changes: 31 additions & 0 deletions
31
source/extensions/filters/network/forward_original_sni/config.h
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| #pragma once | ||
|
|
||
| #include "envoy/server/filter_config.h" | ||
|
|
||
| #include "extensions/filters/network/well_known_names.h" | ||
|
|
||
| namespace Envoy { | ||
| namespace Extensions { | ||
| namespace NetworkFilters { | ||
| namespace ForwardOriginalSni { | ||
|
|
||
| /** | ||
| * Config registration for the original_sni filter. @see NamedNetworkFilterConfigFactory. | ||
| */ | ||
| class ForwardOriginalSniNetworkFilterConfigFactory | ||
| : public Server::Configuration::NamedNetworkFilterConfigFactory { | ||
| public: | ||
| // NamedNetworkFilterConfigFactory | ||
| Network::FilterFactoryCb createFilterFactory(const Json::Object&, | ||
| Server::Configuration::FactoryContext&) override; | ||
| Network::FilterFactoryCb | ||
| createFilterFactoryFromProto(const Protobuf::Message&, | ||
| Server::Configuration::FactoryContext&) override; | ||
| ProtobufTypes::MessagePtr createEmptyConfigProto() override; | ||
| std::string name() override { return NetworkFilterNames::get().ForwardOriginalSni; } | ||
| }; | ||
|
|
||
| } // namespace ForwardOriginalSni | ||
| } // namespace NetworkFilters | ||
| } // namespace Extensions | ||
| } // namespace Envoy |
29 changes: 29 additions & 0 deletions
29
source/extensions/filters/network/forward_original_sni/forward_original_sni.cc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| #include "extensions/filters/network/forward_original_sni/forward_original_sni.h" | ||
|
|
||
| #include "envoy/network/connection.h" | ||
|
|
||
| #include "common/stream_info/forward_requested_server_name.h" | ||
|
|
||
| namespace Envoy { | ||
| namespace Extensions { | ||
| namespace NetworkFilters { | ||
| namespace ForwardOriginalSni { | ||
|
|
||
| using ::Envoy::StreamInfo::ForwardRequestedServerName; | ||
|
|
||
| Network::FilterStatus ForwardOriginalSniFilter::onNewConnection() { | ||
| absl::string_view sni = read_callbacks_->connection().requestedServerName(); | ||
|
|
||
| if (!sni.empty()) { | ||
| read_callbacks_->connection().streamInfo().filterState().setData( | ||
| ForwardRequestedServerName::Key, std::make_unique<ForwardRequestedServerName>(sni), | ||
| StreamInfo::FilterState::StateType::ReadOnly); | ||
| } | ||
|
|
||
| return Network::FilterStatus::Continue; | ||
| } | ||
|
|
||
| } // namespace ForwardOriginalSni | ||
| } // namespace NetworkFilters | ||
| } // namespace Extensions | ||
| } // namespace Envoy |
32 changes: 32 additions & 0 deletions
32
source/extensions/filters/network/forward_original_sni/forward_original_sni.h
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| #pragma once | ||
|
|
||
| #include "envoy/network/filter.h" | ||
|
|
||
| namespace Envoy { | ||
| namespace Extensions { | ||
| namespace NetworkFilters { | ||
| namespace ForwardOriginalSni { | ||
|
|
||
| /** | ||
| * Implementation of the original_sni filter that sets the original requested server name from | ||
| * the SNI field in the TLS connection. | ||
| */ | ||
| class ForwardOriginalSniFilter : public Network::ReadFilter { | ||
| public: | ||
| // Network::ReadFilter | ||
| Network::FilterStatus onData(Buffer::Instance&, bool) override { | ||
| return Network::FilterStatus::Continue; | ||
| } | ||
| Network::FilterStatus onNewConnection() override; | ||
| void initializeReadFilterCallbacks(Network::ReadFilterCallbacks& callbacks) override { | ||
| read_callbacks_ = &callbacks; | ||
| } | ||
|
|
||
| private: | ||
| Network::ReadFilterCallbacks* read_callbacks_{}; | ||
| }; | ||
|
|
||
| } // namespace ForwardOriginalSni | ||
| } // namespace NetworkFilters | ||
| } // namespace Extensions | ||
| } // namespace Envoy |
26 changes: 26 additions & 0 deletions
26
test/extensions/filters/network/forward_original_sni/BUILD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| licenses(["notice"]) # Apache 2 | ||
|
|
||
| load( | ||
| "//bazel:envoy_build_system.bzl", | ||
| "envoy_cc_test", | ||
| "envoy_package", | ||
| ) | ||
| load( | ||
| "//test/extensions:extensions_build_system.bzl", | ||
| "envoy_extension_cc_test", | ||
| ) | ||
|
|
||
| envoy_package() | ||
|
|
||
| envoy_extension_cc_test( | ||
| name = "forward_original_sni_test", | ||
| srcs = ["forward_original_sni_test.cc"], | ||
| extension_name = "envoy.filters.network.forward_original_sni", | ||
| deps = [ | ||
| "//source/extensions/filters/network/forward_original_sni", | ||
| "//source/extensions/filters/network/forward_original_sni:config", | ||
| "//test/mocks/network:network_mocks", | ||
| "//test/mocks/server:server_mocks", | ||
| "//test/mocks/stream_info:stream_info_mocks", | ||
| ], | ||
| ) |
78 changes: 78 additions & 0 deletions
78
test/extensions/filters/network/forward_original_sni/forward_original_sni_test.cc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| #include "common/stream_info/forward_requested_server_name.h" | ||
|
|
||
| #include "extensions/filters/network/forward_original_sni/config.h" | ||
| #include "extensions/filters/network/forward_original_sni/forward_original_sni.h" | ||
|
|
||
| #include "test/mocks/network/mocks.h" | ||
| #include "test/mocks/server/mocks.h" | ||
| #include "test/mocks/stream_info/mocks.h" | ||
|
|
||
| #include "gmock/gmock.h" | ||
| #include "gtest/gtest.h" | ||
|
|
||
| using testing::_; | ||
| using testing::Matcher; | ||
| using testing::NiceMock; | ||
| using testing::Return; | ||
| using testing::ReturnRef; | ||
|
|
||
| namespace Envoy { | ||
| namespace Extensions { | ||
| namespace NetworkFilters { | ||
| namespace ForwardOriginalSni { | ||
|
|
||
| using ::Envoy::StreamInfo::ForwardRequestedServerName; | ||
|
|
||
| // Test that a ForwardOriginalSni filter config works. | ||
| TEST(ForwardOriginalSni, ConfigTest) { | ||
| NiceMock<Server::Configuration::MockFactoryContext> context; | ||
| ForwardOriginalSniNetworkFilterConfigFactory factory; | ||
|
|
||
| Network::FilterFactoryCb cb = | ||
| factory.createFilterFactoryFromProto(*factory.createEmptyConfigProto(), context); | ||
| Network::MockConnection connection; | ||
| EXPECT_CALL(connection, addReadFilter(_)); | ||
| cb(connection); | ||
| } | ||
|
|
||
| // Test that forward requested server name is set if SNI is available | ||
| TEST(ForwardOriginalSni, SetForwardRequestedServerNameOnlyIfSniIsPresent) { | ||
| NiceMock<Network::MockReadFilterCallbacks> filter_callbacks; | ||
|
|
||
| NiceMock<StreamInfo::MockStreamInfo> stream_info; | ||
| ON_CALL(filter_callbacks.connection_, streamInfo()).WillByDefault(ReturnRef(stream_info)); | ||
| ON_CALL(Const(filter_callbacks.connection_), streamInfo()).WillByDefault(ReturnRef(stream_info)); | ||
|
|
||
| ForwardOriginalSniFilter filter; | ||
| filter.initializeReadFilterCallbacks(filter_callbacks); | ||
|
|
||
| // no sni | ||
| { | ||
| ON_CALL(filter_callbacks.connection_, requestedServerName()) | ||
| .WillByDefault(Return(EMPTY_STRING)); | ||
| filter.onNewConnection(); | ||
|
|
||
| EXPECT_FALSE(stream_info.filterState().hasData<ForwardRequestedServerName>( | ||
| ForwardRequestedServerName::Key)); | ||
| } | ||
|
|
||
| // with sni | ||
| { | ||
| ON_CALL(filter_callbacks.connection_, requestedServerName()) | ||
| .WillByDefault(Return("www.example.com")); | ||
| filter.onNewConnection(); | ||
|
|
||
| EXPECT_TRUE(stream_info.filterState().hasData<ForwardRequestedServerName>( | ||
| ForwardRequestedServerName::Key)); | ||
|
|
||
| auto forward_requested_server_name = | ||
| stream_info.filterState().getDataReadOnly<ForwardRequestedServerName>( | ||
| ForwardRequestedServerName::Key); | ||
| EXPECT_EQ(forward_requested_server_name.value(), "www.example.com"); | ||
| } | ||
| } | ||
|
|
||
| } // namespace ForwardOriginalSni | ||
| } // namespace NetworkFilters | ||
| } // namespace Extensions | ||
| } // namespace Envoy |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
given this explanation, I think this should be called use_downstream_sni .
The explanation also needs to be tweaked to state that when an inbound connection is using TLS, and the upstream cluster is using mTLS, this option will allow user to automatically set the SNI of upstream cluster to be the same as the downstream SNI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rshriram Agreed,
used_downstream_sniis more clear.Regarding:
So why does the explanation not cover the case you are describing? If we can consider mTLS being a kind of TLS:
a network filter that instructs other filters, such as tcp_proxy, to forward the SNI value from the downstream connection to the upstream connection