diff --git a/api/docs/BUILD b/api/docs/BUILD index 81ed160a906bd..e80f3b3a9c2b4 100644 --- a/api/docs/BUILD +++ b/api/docs/BUILD @@ -70,11 +70,11 @@ proto_library( "//envoy/config/resource_monitor/fixed_heap/v2alpha:fixed_heap", "//envoy/config/resource_monitor/injected_resource/v2alpha:injected_resource", "//envoy/config/trace/v2:trace", - "//envoy/config/transport_socket/capture/v2alpha:capture", + "//envoy/config/transport_socket/tap/v2alpha:tap", "//envoy/data/accesslog/v2:accesslog", "//envoy/data/core/v2alpha:health_check_event", - "//envoy/data/tap/v2alpha:capture", "//envoy/data/tap/v2alpha:http", + "//envoy/data/tap/v2alpha:transport", "//envoy/data/tap/v2alpha:wrapper", "//envoy/service/accesslog/v2:als", "//envoy/service/auth/v2:attribute_context", diff --git a/api/envoy/config/transport_socket/capture/v2alpha/BUILD b/api/envoy/config/transport_socket/tap/v2alpha/BUILD similarity index 78% rename from api/envoy/config/transport_socket/capture/v2alpha/BUILD rename to api/envoy/config/transport_socket/tap/v2alpha/BUILD index bd25da3e6c7ea..a972cb186093e 100644 --- a/api/envoy/config/transport_socket/capture/v2alpha/BUILD +++ b/api/envoy/config/transport_socket/tap/v2alpha/BUILD @@ -3,8 +3,8 @@ load("//bazel:api_build_system.bzl", "api_proto_library_internal") licenses(["notice"]) # Apache 2 api_proto_library_internal( - name = "capture", - srcs = ["capture.proto"], + name = "tap", + srcs = ["tap.proto"], deps = [ "//envoy/api/v2/core:base", ], diff --git a/api/envoy/config/transport_socket/capture/v2alpha/capture.proto b/api/envoy/config/transport_socket/tap/v2alpha/tap.proto similarity index 84% rename from api/envoy/config/transport_socket/capture/v2alpha/capture.proto rename to api/envoy/config/transport_socket/tap/v2alpha/tap.proto index 784905f472bf5..ab1e46985f282 100644 --- a/api/envoy/config/transport_socket/capture/v2alpha/capture.proto +++ b/api/envoy/config/transport_socket/tap/v2alpha/tap.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package envoy.config.transport_socket.capture.v2alpha; -option java_package = "io.envoyproxy.envoy.config.transport_socket.capture.v2alpha"; +package envoy.config.transport_socket.tap.v2alpha; +option java_package = "io.envoyproxy.envoy.config.transport_socket.tap.v2alpha"; option go_package = "v2"; -// [#protodoc-title: Capture] +// [#protodoc-title: Tap] import "envoy/api/v2/core/base.proto"; @@ -33,9 +33,9 @@ message FileSink { Format format = 2; } -// Configuration for capture transport socket. This wraps another transport socket, providing the +// Configuration for tap transport socket. This wraps another transport socket, providing the // ability to interpose and record in plain text any traffic that is surfaced to Envoy. -message Capture { +message Tap { oneof sink_selector { // Trace is to be written to a file sink. FileSink file_sink = 1; diff --git a/api/envoy/data/tap/v2alpha/BUILD b/api/envoy/data/tap/v2alpha/BUILD index 97c4a0b828278..cdc216c2179ef 100644 --- a/api/envoy/data/tap/v2alpha/BUILD +++ b/api/envoy/data/tap/v2alpha/BUILD @@ -3,8 +3,8 @@ load("//bazel:api_build_system.bzl", "api_proto_library_internal") licenses(["notice"]) # Apache 2 api_proto_library_internal( - name = "capture", - srcs = ["capture.proto"], + name = "transport", + srcs = ["transport.proto"], deps = ["//envoy/api/v2/core:address"], ) diff --git a/api/envoy/data/tap/v2alpha/capture.proto b/api/envoy/data/tap/v2alpha/transport.proto similarity index 85% rename from api/envoy/data/tap/v2alpha/capture.proto rename to api/envoy/data/tap/v2alpha/transport.proto index aef84ce14b857..e78a2b9c18e90 100644 --- a/api/envoy/data/tap/v2alpha/capture.proto +++ b/api/envoy/data/tap/v2alpha/transport.proto @@ -1,7 +1,7 @@ syntax = "proto3"; -// [#protodoc-title: Common tap] -// Trace capture format for the capture transport socket extension. This dumps plain text read/write +// [#protodoc-title: Transport tap data] +// Trace format for the tap transport socket extension. This dumps plain text read/write // sequences on a socket. package envoy.data.tap.v2alpha; @@ -23,7 +23,7 @@ message Connection { envoy.api.v2.core.Address remote_address = 3; } -// Event in a capture trace. +// Event in a trace. message Event { // Timestamp for event. google.protobuf.Timestamp timestamp = 1; @@ -47,7 +47,7 @@ message Event { } } -// Sequence of read/write events that constitute a captured trace on a socket. +// Sequence of read/write events that constitute a trace on a socket. // Multiple Trace messages might be emitted for a given connection ID, with the // sink (e.g. file set, network) responsible for later reassembly. message Trace { diff --git a/api/tools/BUILD b/api/tools/BUILD index 7a86e4da6d0d5..239934f503f71 100644 --- a/api/tools/BUILD +++ b/api/tools/BUILD @@ -1,27 +1,27 @@ licenses(["notice"]) # Apache 2 py_binary( - name = "capture2pcap", - srcs = ["capture2pcap.py"], + name = "tap2pcap", + srcs = ["tap2pcap.py"], licenses = ["notice"], # Apache 2 visibility = ["//visibility:public"], deps = [ - "//envoy/data/tap/v2alpha:capture_py", + "//envoy/data/tap/v2alpha:transport_py", ], ) py_test( - name = "capture2pcap_test", - srcs = ["capture2pcap_test.py"], + name = "tap2pcap_test", + srcs = ["tap2pcap_test.py"], data = [ - "data/capture2pcap_h2_ipv4.pb_text", - "data/capture2pcap_h2_ipv4.txt", + "data/tap2pcap_h2_ipv4.pb_text", + "data/tap2pcap_h2_ipv4.txt", ], # Don't run this by default, since we don't want to force local dependency on Wireshark/tshark, # will explicitly invoke in CI. tags = ["manual"], visibility = ["//visibility:public"], - deps = [":capture2pcap"], + deps = [":tap2pcap"], ) py_binary( diff --git a/api/tools/data/capture2pcap_h2_ipv4.pb_text b/api/tools/data/tap2pcap_h2_ipv4.pb_text similarity index 100% rename from api/tools/data/capture2pcap_h2_ipv4.pb_text rename to api/tools/data/tap2pcap_h2_ipv4.pb_text diff --git a/api/tools/data/capture2pcap_h2_ipv4.txt b/api/tools/data/tap2pcap_h2_ipv4.txt similarity index 100% rename from api/tools/data/capture2pcap_h2_ipv4.txt rename to api/tools/data/tap2pcap_h2_ipv4.txt diff --git a/api/tools/capture2pcap.py b/api/tools/tap2pcap.py similarity index 78% rename from api/tools/capture2pcap.py rename to api/tools/tap2pcap.py index fff1c7259b12a..0f61f727aa82a 100644 --- a/api/tools/capture2pcap.py +++ b/api/tools/tap2pcap.py @@ -1,14 +1,14 @@ -"""Tool to convert Envoy capture trace format to PCAP. +"""Tool to convert Envoy tap trace format to PCAP. Uses od and text2pcap (part of Wireshark) utilities to translate the Envoy -capture trace proto format to a PCAP file suitable for consuming in Wireshark +tap trace proto format to a PCAP file suitable for consuming in Wireshark and other tools in the PCAP ecosystem. The TCP stream in the output PCAP is synthesized based on the known IP/port/timestamps that Envoy produces in its -capture files; it is not a literal wire capture. +tap files; it is not a literal wire tap. Usage: -bazel run @envoy_api//tools:capture2pcap +bazel run @envoy_api//tools:tap2pcap Known issues: - IPv6 PCAP generation has malformed TCP packets. This appears to be a text2pcap @@ -28,7 +28,7 @@ from google.protobuf import text_format -from envoy.data.tap.v2alpha import capture_pb2 +from envoy.data.tap.v2alpha import transport_pb2 def DumpEvent(direction, timestamp, data): @@ -43,13 +43,13 @@ def DumpEvent(direction, timestamp, data): return dump.getvalue() -def Capture2Pcap(capture_path, pcap_path): - trace = capture_pb2.Trace() - if capture_path.endswith('.pb_text'): - with open(capture_path, 'r') as f: +def Tap2Pcap(tap_path, pcap_path): + trace = transport_pb2.Trace() + if tap_path.endswith('.pb_text'): + with open(tap_path, 'r') as f: text_format.Merge(f.read(), trace) else: - with open(capture_path, 'r') as f: + with open(tap_path, 'r') as f: trace.ParseFromString(f.read()) local_address = trace.connection.local_address.socket_address.address @@ -82,6 +82,6 @@ def Capture2Pcap(capture_path, pcap_path): if __name__ == '__main__': if len(sys.argv) != 3: - print('Usage: %s ' % sys.argv[0]) + print('Usage: %s ' % sys.argv[0]) sys.exit(1) - Capture2Pcap(sys.argv[1], sys.argv[2]) + Tap2Pcap(sys.argv[1], sys.argv[2]) diff --git a/api/tools/capture2pcap_test.py b/api/tools/tap2pcap_test.py similarity index 61% rename from api/tools/capture2pcap_test.py rename to api/tools/tap2pcap_test.py index 055e0e6e16532..b13bee0fce0fb 100644 --- a/api/tools/capture2pcap_test.py +++ b/api/tools/tap2pcap_test.py @@ -1,22 +1,22 @@ -"""Tests for capture2pcap.""" +"""Tests for tap2pcap.""" from __future__ import print_function import os import subprocess as sp import sys -import capture2pcap +import tap2pcap -# Validate that the captured trace when run through capture2cap | tshark matches -# a golden output file for the tshark dump. Since we run capture2pcap in a +# Validate that the tapped trace when run through tap2cap | tshark matches +# a golden output file for the tshark dump. Since we run tap2pcap in a # subshell with a limited environment, the inferred time zone should be UTC. if __name__ == '__main__': srcdir = os.path.join(os.getenv('TEST_SRCDIR'), 'envoy_api') - capture_path = os.path.join(srcdir, 'tools/data/capture2pcap_h2_ipv4.pb_text') - expected_path = os.path.join(srcdir, 'tools/data/capture2pcap_h2_ipv4.txt') + tap_path = os.path.join(srcdir, 'tools/data/tap2pcap_h2_ipv4.pb_text') + expected_path = os.path.join(srcdir, 'tools/data/tap2pcap_h2_ipv4.txt') pcap_path = os.path.join(os.getenv('TEST_TMPDIR'), 'generated.pcap') - capture2pcap.Capture2Pcap(capture_path, pcap_path) + tap2pcap.Tap2Pcap(tap_path, pcap_path) actual_output = sp.check_output(['tshark', '-r', pcap_path, '-d', 'tcp.port==10000,http2', '-P']) with open(expected_path, 'r') as f: expected_output = f.read() diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 47f6b7cc2b545..42f5ff2e71d6d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -111,19 +111,19 @@ elif [[ "$1" == "bazel.asan" ]]; then echo "Building and testing..." bazel_with_collection test ${BAZEL_TEST_OPTIONS} -c dbg --config=clang-asan @envoy//test/... \ //:echo2_integration_test //:envoy_binary_test - # Also validate that integration test traffic capture (useful when debugging etc.) - # works. This requires that we set CAPTURE_ENV. We do this under bazel.asan to + # Also validate that integration test traffic tapping (useful when debugging etc.) + # works. This requires that we set TAP_PATH. We do this under bazel.asan to # ensure a debug build in CI. - CAPTURE_TMP=/tmp/capture/ - rm -rf "${CAPTURE_TMP}" - mkdir -p "${CAPTURE_TMP}" + TAP_TMP=/tmp/tap/ + rm -rf "${TAP_TMP}" + mkdir -p "${TAP_TMP}" bazel_with_collection test ${BAZEL_TEST_OPTIONS} -c dbg --config=clang-asan \ @envoy//test/integration:ssl_integration_test \ - --test_env=CAPTURE_PATH="${CAPTURE_TMP}/capture" + --test_env=TAP_PATH="${TAP_TMP}/tap" # Verify that some pb_text files have been created. We can't check for pcap, # since tcpdump is not available in general due to CircleCI lack of support # for privileged Docker executors. - ls -l "${CAPTURE_TMP}"/*.pb_text > /dev/null + ls -l "${TAP_TMP}"/tap_*.pb_text > /dev/null exit 0 elif [[ "$1" == "bazel.tsan" ]]; then setup_clang_toolchain @@ -201,7 +201,7 @@ elif [[ "$1" == "bazel.api" ]]; then bazel build ${BAZEL_BUILD_OPTIONS} -c fastbuild @envoy_api//envoy/... echo "Testing API..." bazel_with_collection test ${BAZEL_TEST_OPTIONS} -c fastbuild @envoy_api//test/... @envoy_api//tools/... \ - @envoy_api//tools:capture2pcap_test + @envoy_api//tools:tap2pcap_test exit 0 elif [[ "$1" == "bazel.coverage" ]]; then setup_gcc_toolchain diff --git a/docs/build.sh b/docs/build.sh index 80f5aa122f9cf..cb571952c76b5 100755 --- a/docs/build.sh +++ b/docs/build.sh @@ -116,10 +116,10 @@ PROTO_RST=" /envoy/config/rbac/v2alpha/rbac/envoy/config/rbac/v2alpha/rbac.proto.rst /envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.proto.rst /envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.proto.rst - /envoy/config/transport_socket/capture/v2alpha/capture/envoy/config/transport_socket/capture/v2alpha/capture.proto.rst + /envoy/config/transport_socket/tap/v2alpha/tap/envoy/config/transport_socket/tap/v2alpha/tap.proto.rst /envoy/data/accesslog/v2/accesslog/envoy/data/accesslog/v2/accesslog.proto.rst /envoy/data/core/v2alpha/health_check_event/envoy/data/core/v2alpha/health_check_event.proto.rst - /envoy/data/tap/v2alpha/capture/envoy/data/tap/v2alpha/capture.proto.rst + /envoy/data/tap/v2alpha/transport/envoy/data/tap/v2alpha/transport.proto.rst /envoy/data/tap/v2alpha/http/envoy/data/tap/v2alpha/http.proto.rst /envoy/data/tap/v2alpha/wrapper/envoy/data/tap/v2alpha/wrapper.proto.rst /envoy/service/accesslog/v2/als/envoy/service/accesslog/v2/als.proto.rst diff --git a/docs/root/intro/version_history.rst b/docs/root/intro/version_history.rst index 9eb4ba613b628..4baa66259fa2a 100644 --- a/docs/root/intro/version_history.rst +++ b/docs/root/intro/version_history.rst @@ -342,7 +342,7 @@ Version history header generation. * router: added 'unavailable' to the retriable gRPC status codes that can be specified through :ref:`x-envoy-retry-grpc-on `. -* sockets: added :ref:`capture transport socket extension ` to support +* sockets: added :ref:`tap transport socket extension ` to support recording plain text traffic and PCAP generation. * sockets: added `IP_FREEBIND` socket option support for :ref:`listeners ` and upstream connections via diff --git a/docs/root/operations/operations.rst b/docs/root/operations/operations.rst index ca6b5cdbc425c..98005b9977ba6 100644 --- a/docs/root/operations/operations.rst +++ b/docs/root/operations/operations.rst @@ -12,4 +12,4 @@ Operations and administration stats_overview runtime fs_flags - traffic_capture + traffic_tapping diff --git a/docs/root/operations/traffic_capture.rst b/docs/root/operations/traffic_tapping.rst similarity index 64% rename from docs/root/operations/traffic_capture.rst rename to docs/root/operations/traffic_tapping.rst index 8d662e7252236..1c1a119110e8e 100644 --- a/docs/root/operations/traffic_capture.rst +++ b/docs/root/operations/traffic_tapping.rst @@ -1,36 +1,40 @@ -.. _operations_traffic_capture: +.. _operations_traffic_tapping: -Traffic capture +Traffic tapping =============== -Envoy currently provides an experimental :ref:`transport socket extension -` that can intercept traffic and write to a :ref:`protobuf -capture file `. +Envoy currently provides two experimental extensions that can tap traffic: + + * :ref:`HTTP tap filter `. See the linked filter documentation for more + information. + * :ref:`Tap transport socket extension ` that can intercept + traffic and write to a :ref:`protobuf trace file `. The + remainder of this document describes the configuration of the tap transport socket. + +Tap transport socket configuration +---------------------------------- .. warning:: This feature is experimental and has a known limitation that it will OOM for large traces on a given socket. It can also be disabled in the build if there are security concerns, see https://github.com/envoyproxy/envoy/blob/master/bazel/README.md#disabling-extensions. -Configuration -------------- - -Capture can be configured on :ref:`Listener +Tapping can be configured on :ref:`Listener ` and :ref:`Cluster ` transport sockets, providing the ability to interpose on downstream and upstream L4 connections respectively. -To configure traffic capture, add an `envoy.transport_sockets.capture` transport socket -:ref:`configuration ` to the listener +To configure traffic tapping, add an `envoy.transport_sockets.tap` transport socket +:ref:`configuration ` to the listener or cluster. For a plain text socket this might look like: .. code-block:: yaml transport_socket: - name: envoy.transport_sockets.capture + name: envoy.transport_sockets.tap config: file_sink: - path_prefix: /some/capture/path + path_prefix: /some/tap/path transport_socket: name: raw_buffer @@ -39,10 +43,10 @@ For a TLS socket, this will be: .. code-block:: yaml transport_socket: - name: envoy.transport_sockets.capture + name: envoy.transport_sockets.tap config: file_sink: - path_prefix: /some/capture/path + path_prefix: /some/tap/path transport_socket: name: ssl config: @@ -53,7 +57,7 @@ where the TLS context configuration replaces any existing :ref:`downstream TLS configuration on the listener or cluster, respectively. Each unique socket instance will generate a trace file prefixed with `path_prefix`. E.g. -`/some/capture/path_0.pb`. +`/some/tap/path_0.pb`. PCAP generation --------------- @@ -61,11 +65,11 @@ PCAP generation The generated trace file can be converted to `libpcap format `_, suitable for analysis with tools such as `Wireshark `_ with the -`capture2pcap` utility, e.g.: +`tap2pcap` utility, e.g.: .. code-block:: bash - bazel run @envoy_api//tools:capture2pcap /some/capture/path_0.pb path_0.pcap + bazel run @envoy_api//tools:tap2pcap /some/tap/path_0.pb path_0.pcap tshark -r path_0.pcap -d "tcp.port==10000,http2" -P 1 0.000000 127.0.0.1 → 127.0.0.1 HTTP2 157 Magic, SETTINGS, WINDOW_UPDATE, HEADERS 2 0.013713 127.0.0.1 → 127.0.0.1 HTTP2 91 SETTINGS, SETTINGS, WINDOW_UPDATE diff --git a/source/extensions/common/tap/tap_matcher.h b/source/extensions/common/tap/tap_matcher.h index e01ff292316f3..09a32ed7444da 100644 --- a/source/extensions/common/tap/tap_matcher.h +++ b/source/extensions/common/tap/tap_matcher.h @@ -23,7 +23,7 @@ using MatcherPtr = std::unique_ptr; * - A per-stream/request matching status must be kept in order to compute interim match status. * - In order to make this computationally efficient, the matching tree is kept in a vector, with * all references to other matchers implemented using an index into the vector. The vector is - * effectively a flattened N-ary tree. + * effectively a preorder traversal flattened N-ary tree. * - The previous point allows the creation of a per-stream/request vector of booleans of the same * size as the matcher vector. Then, when match status is updated given new information, the * vector of booleans can be easily updated using the same indexes as in the constant match @@ -46,6 +46,11 @@ class Matcher { * @param response_headers supplies the response headers, if available. * @param statuses supplies the per-stream-request match status vector which must be the same * size as the match tree vector (see above). + * + * TODO(mattklein123): Currently, this performs a recursive updateMatchStatus() call on any + * child match nodes. It's possible that we can short circuit this in certain cases but this + * needs more thinking (e.g., if an OR matcher already has one match and it's not possible for + * a matcher to flip from true to false). */ virtual bool updateMatchStatus(const Http::HeaderMap* request_headers, const Http::HeaderMap* response_headers, diff --git a/source/extensions/extensions_build_config.bzl b/source/extensions/extensions_build_config.bzl index 1c00a1c0440ea..bd3793cc9d16a 100644 --- a/source/extensions/extensions_build_config.bzl +++ b/source/extensions/extensions_build_config.bzl @@ -115,7 +115,7 @@ EXTENSIONS = { # "envoy.transport_sockets.alts": "//source/extensions/transport_sockets/alts:config", - "envoy.transport_sockets.capture": "//source/extensions/transport_sockets/capture:config", + "envoy.transport_sockets.tap": "//source/extensions/transport_sockets/tap:config", # Retry host predicates "envoy.retry_host_predicates.previous_hosts": "//source/extensions/retry/host/previous_hosts:config", @@ -215,5 +215,5 @@ WINDOWS_EXTENSIONS = { # Transport sockets # - #"envoy.transport_sockets.capture": "//source/extensions/transport_sockets/capture:config", + #"envoy.transport_sockets.tap": "//source/extensions/transport_sockets/tap:config", } diff --git a/source/extensions/transport_sockets/capture/BUILD b/source/extensions/transport_sockets/tap/BUILD similarity index 71% rename from source/extensions/transport_sockets/capture/BUILD rename to source/extensions/transport_sockets/tap/BUILD index 12aca228c9a01..263df3e7eed75 100644 --- a/source/extensions/transport_sockets/capture/BUILD +++ b/source/extensions/transport_sockets/tap/BUILD @@ -1,6 +1,6 @@ licenses(["notice"]) # Apache 2 -# Capture wrapper around raw_buffer sockets. +# tap wrapper around a transport socket. load( "//bazel:envoy_build_system.bzl", @@ -11,9 +11,9 @@ load( envoy_package() envoy_cc_library( - name = "capture_lib", - srcs = ["capture.cc"], - hdrs = ["capture.h"], + name = "tap_lib", + srcs = ["tap.cc"], + hdrs = ["tap.h"], deps = [ "//include/envoy/event:timer_interface", "//include/envoy/network:transport_socket_interface", @@ -21,8 +21,8 @@ envoy_cc_library( "//source/common/common:assert_lib", "//source/common/network:utility_lib", "//source/common/protobuf", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", - "@envoy_api//envoy/data/tap/v2alpha:capture_cc", + "@envoy_api//envoy/config/transport_socket/tap/v2alpha:tap_cc", + "@envoy_api//envoy/data/tap/v2alpha:transport_cc", ], ) @@ -31,13 +31,13 @@ envoy_cc_library( srcs = ["config.cc"], hdrs = ["config.h"], deps = [ - ":capture_lib", + ":tap_lib", "//include/envoy/network:transport_socket_interface", "//include/envoy/registry", "//include/envoy/server:transport_socket_config_interface", "//source/common/config:utility_lib", "//source/common/protobuf:utility_lib", "//source/extensions/transport_sockets:well_known_names", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", + "@envoy_api//envoy/config/transport_socket/tap/v2alpha:tap_cc", ], ) diff --git a/source/extensions/transport_sockets/capture/config.cc b/source/extensions/transport_sockets/tap/config.cc similarity index 62% rename from source/extensions/transport_sockets/capture/config.cc rename to source/extensions/transport_sockets/tap/config.cc index 1e251ba6f0692..1d5d027664803 100644 --- a/source/extensions/transport_sockets/capture/config.cc +++ b/source/extensions/transport_sockets/tap/config.cc @@ -1,24 +1,25 @@ -#include "extensions/transport_sockets/capture/config.h" +#include "extensions/transport_sockets/tap/config.h" -#include "envoy/config/transport_socket/capture/v2alpha/capture.pb.h" -#include "envoy/config/transport_socket/capture/v2alpha/capture.pb.validate.h" +#include "envoy/config/transport_socket/tap/v2alpha/tap.pb.h" +#include "envoy/config/transport_socket/tap/v2alpha/tap.pb.validate.h" #include "envoy/registry/registry.h" #include "common/config/utility.h" #include "common/protobuf/utility.h" -#include "extensions/transport_sockets/capture/capture.h" +#include "extensions/transport_sockets/tap/tap.h" namespace Envoy { namespace Extensions { namespace TransportSockets { -namespace Capture { +namespace Tap { -Network::TransportSocketFactoryPtr UpstreamCaptureSocketConfigFactory::createTransportSocketFactory( +Network::TransportSocketFactoryPtr UpstreamTapSocketConfigFactory::createTransportSocketFactory( const Protobuf::Message& message, Server::Configuration::TransportSocketFactoryContext& context) { - const auto& outer_config = MessageUtil::downcastAndValidate< - const envoy::config::transport_socket::capture::v2alpha::Capture&>(message); + const auto& outer_config = + MessageUtil::downcastAndValidate( + message); auto& inner_config_factory = Config::Utility::getAndCheckFactory< Server::Configuration::UpstreamTransportSocketConfigFactory>( outer_config.transport_socket().name()); @@ -26,17 +27,17 @@ Network::TransportSocketFactoryPtr UpstreamCaptureSocketConfigFactory::createTra outer_config.transport_socket(), inner_config_factory); auto inner_transport_factory = inner_config_factory.createTransportSocketFactory(*inner_factory_config, context); - return std::make_unique( + return std::make_unique( outer_config.file_sink().path_prefix(), outer_config.file_sink().format(), std::move(inner_transport_factory), context.dispatcher().timeSystem()); } -Network::TransportSocketFactoryPtr -DownstreamCaptureSocketConfigFactory::createTransportSocketFactory( +Network::TransportSocketFactoryPtr DownstreamTapSocketConfigFactory::createTransportSocketFactory( const Protobuf::Message& message, Server::Configuration::TransportSocketFactoryContext& context, const std::vector& server_names) { - const auto& outer_config = MessageUtil::downcastAndValidate< - const envoy::config::transport_socket::capture::v2alpha::Capture&>(message); + const auto& outer_config = + MessageUtil::downcastAndValidate( + message); auto& inner_config_factory = Config::Utility::getAndCheckFactory< Server::Configuration::DownstreamTransportSocketConfigFactory>( outer_config.transport_socket().name()); @@ -44,24 +45,24 @@ DownstreamCaptureSocketConfigFactory::createTransportSocketFactory( outer_config.transport_socket(), inner_config_factory); auto inner_transport_factory = inner_config_factory.createTransportSocketFactory( *inner_factory_config, context, server_names); - return std::make_unique( + return std::make_unique( outer_config.file_sink().path_prefix(), outer_config.file_sink().format(), std::move(inner_transport_factory), context.dispatcher().timeSystem()); } -ProtobufTypes::MessagePtr CaptureSocketConfigFactory::createEmptyConfigProto() { - return std::make_unique(); +ProtobufTypes::MessagePtr TapSocketConfigFactory::createEmptyConfigProto() { + return std::make_unique(); } -static Registry::RegisterFactory upstream_registered_; -static Registry::RegisterFactory downstream_registered_; -} // namespace Capture +} // namespace Tap } // namespace TransportSockets } // namespace Extensions } // namespace Envoy diff --git a/source/extensions/transport_sockets/capture/config.h b/source/extensions/transport_sockets/tap/config.h similarity index 70% rename from source/extensions/transport_sockets/capture/config.h rename to source/extensions/transport_sockets/tap/config.h index 02b7ae481b740..20bca58dd38ad 100644 --- a/source/extensions/transport_sockets/capture/config.h +++ b/source/extensions/transport_sockets/tap/config.h @@ -7,32 +7,31 @@ namespace Envoy { namespace Extensions { namespace TransportSockets { -namespace Capture { +namespace Tap { /** - * Config registration for the capture wrapper for transport socket factory. + * Config registration for the tap wrapper for transport socket factory. * @see TransportSocketConfigFactory. */ -class CaptureSocketConfigFactory - : public virtual Server::Configuration::TransportSocketConfigFactory { +class TapSocketConfigFactory : public virtual Server::Configuration::TransportSocketConfigFactory { public: - virtual ~CaptureSocketConfigFactory() {} - std::string name() const override { return TransportSocketNames::get().Capture; } + virtual ~TapSocketConfigFactory() {} + std::string name() const override { return TransportSocketNames::get().Tap; } ProtobufTypes::MessagePtr createEmptyConfigProto() override; }; -class UpstreamCaptureSocketConfigFactory +class UpstreamTapSocketConfigFactory : public Server::Configuration::UpstreamTransportSocketConfigFactory, - public CaptureSocketConfigFactory { + public TapSocketConfigFactory { public: Network::TransportSocketFactoryPtr createTransportSocketFactory( const Protobuf::Message& config, Server::Configuration::TransportSocketFactoryContext& context) override; }; -class DownstreamCaptureSocketConfigFactory +class DownstreamTapSocketConfigFactory : public Server::Configuration::DownstreamTransportSocketConfigFactory, - public CaptureSocketConfigFactory { + public TapSocketConfigFactory { public: Network::TransportSocketFactoryPtr createTransportSocketFactory(const Protobuf::Message& config, @@ -40,7 +39,7 @@ class DownstreamCaptureSocketConfigFactory const std::vector& server_names) override; }; -} // namespace Capture +} // namespace Tap } // namespace TransportSockets } // namespace Extensions } // namespace Envoy diff --git a/source/extensions/transport_sockets/capture/capture.cc b/source/extensions/transport_sockets/tap/tap.cc similarity index 69% rename from source/extensions/transport_sockets/capture/capture.cc rename to source/extensions/transport_sockets/tap/tap.cc index fe4688e93ffe5..e6350b54f1209 100644 --- a/source/extensions/transport_sockets/capture/capture.cc +++ b/source/extensions/transport_sockets/tap/tap.cc @@ -1,4 +1,4 @@ -#include "extensions/transport_sockets/capture/capture.h" +#include "extensions/transport_sockets/tap/tap.h" #include "common/buffer/buffer_impl.h" #include "common/common/assert.h" @@ -9,25 +9,24 @@ namespace Envoy { namespace Extensions { namespace TransportSockets { -namespace Capture { +namespace Tap { -CaptureSocket::CaptureSocket( - const std::string& path_prefix, - envoy::config::transport_socket::capture::v2alpha::FileSink::Format format, - Network::TransportSocketPtr&& transport_socket, Event::TimeSystem& time_system) +TapSocket::TapSocket(const std::string& path_prefix, + envoy::config::transport_socket::tap::v2alpha::FileSink::Format format, + Network::TransportSocketPtr&& transport_socket, Event::TimeSystem& time_system) : path_prefix_(path_prefix), format_(format), transport_socket_(std::move(transport_socket)), time_system_(time_system) {} -void CaptureSocket::setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) { +void TapSocket::setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) { callbacks_ = &callbacks; transport_socket_->setTransportSocketCallbacks(callbacks); } -std::string CaptureSocket::protocol() const { return transport_socket_->protocol(); } +std::string TapSocket::protocol() const { return transport_socket_->protocol(); } -bool CaptureSocket::canFlushClose() { return transport_socket_->canFlushClose(); } +bool TapSocket::canFlushClose() { return transport_socket_->canFlushClose(); } -void CaptureSocket::closeSocket(Network::ConnectionEvent event) { +void TapSocket::closeSocket(Network::ConnectionEvent event) { // The caller should have invoked setTransportSocketCallbacks() prior to this. ASSERT(callbacks_ != nullptr); auto* connection = trace_.mutable_connection(); @@ -37,7 +36,7 @@ void CaptureSocket::closeSocket(Network::ConnectionEvent event) { Network::Utility::addressToProtobufAddress(*callbacks_->connection().remoteAddress(), *connection->mutable_remote_address()); const bool text_format = - format_ == envoy::config::transport_socket::capture::v2alpha::FileSink::PROTO_TEXT; + format_ == envoy::config::transport_socket::tap::v2alpha::FileSink::PROTO_TEXT; const std::string path = fmt::format("{}_{}.{}", path_prefix_, callbacks_->connection().id(), text_format ? "pb_text" : "pb"); ENVOY_LOG_MISC(debug, "Writing socket trace for [C{}] to {}", callbacks_->connection().id(), @@ -53,7 +52,7 @@ void CaptureSocket::closeSocket(Network::ConnectionEvent event) { transport_socket_->closeSocket(event); } -Network::IoResult CaptureSocket::doRead(Buffer::Instance& buffer) { +Network::IoResult TapSocket::doRead(Buffer::Instance& buffer) { Network::IoResult result = transport_socket_->doRead(buffer); if (result.bytes_processed_ > 0) { // TODO(htuch): avoid linearizing @@ -70,7 +69,7 @@ Network::IoResult CaptureSocket::doRead(Buffer::Instance& buffer) { return result; } -Network::IoResult CaptureSocket::doWrite(Buffer::Instance& buffer, bool end_stream) { +Network::IoResult TapSocket::doWrite(Buffer::Instance& buffer, bool end_stream) { // TODO(htuch): avoid copy. Buffer::OwnedImpl copy(buffer); Network::IoResult result = transport_socket_->doWrite(buffer, end_stream); @@ -88,29 +87,29 @@ Network::IoResult CaptureSocket::doWrite(Buffer::Instance& buffer, bool end_stre return result; } -void CaptureSocket::onConnected() { transport_socket_->onConnected(); } +void TapSocket::onConnected() { transport_socket_->onConnected(); } -const Ssl::Connection* CaptureSocket::ssl() const { return transport_socket_->ssl(); } +const Ssl::Connection* TapSocket::ssl() const { return transport_socket_->ssl(); } -CaptureSocketFactory::CaptureSocketFactory( +TapSocketFactory::TapSocketFactory( const std::string& path_prefix, - envoy::config::transport_socket::capture::v2alpha::FileSink::Format format, + envoy::config::transport_socket::tap::v2alpha::FileSink::Format format, Network::TransportSocketFactoryPtr&& transport_socket_factory, Event::TimeSystem& time_system) : path_prefix_(path_prefix), format_(format), transport_socket_factory_(std::move(transport_socket_factory)), time_system_(time_system) {} Network::TransportSocketPtr -CaptureSocketFactory::createTransportSocket(Network::TransportSocketOptionsSharedPtr) const { - return std::make_unique(path_prefix_, format_, - transport_socket_factory_->createTransportSocket(nullptr), - time_system_); +TapSocketFactory::createTransportSocket(Network::TransportSocketOptionsSharedPtr) const { + return std::make_unique(path_prefix_, format_, + transport_socket_factory_->createTransportSocket(nullptr), + time_system_); } -bool CaptureSocketFactory::implementsSecureTransport() const { +bool TapSocketFactory::implementsSecureTransport() const { return transport_socket_factory_->implementsSecureTransport(); } -} // namespace Capture +} // namespace Tap } // namespace TransportSockets } // namespace Extensions } // namespace Envoy diff --git a/source/extensions/transport_sockets/capture/capture.h b/source/extensions/transport_sockets/tap/tap.h similarity index 61% rename from source/extensions/transport_sockets/capture/capture.h rename to source/extensions/transport_sockets/tap/tap.h index b1419a1b95a38..a891585b57a08 100644 --- a/source/extensions/transport_sockets/capture/capture.h +++ b/source/extensions/transport_sockets/tap/tap.h @@ -2,21 +2,21 @@ #include -#include "envoy/config/transport_socket/capture/v2alpha/capture.pb.h" -#include "envoy/data/tap/v2alpha/capture.pb.h" +#include "envoy/config/transport_socket/tap/v2alpha/tap.pb.h" +#include "envoy/data/tap/v2alpha/transport.pb.h" #include "envoy/event/timer.h" #include "envoy/network/transport_socket.h" namespace Envoy { namespace Extensions { namespace TransportSockets { -namespace Capture { +namespace Tap { -class CaptureSocket : public Network::TransportSocket { +class TapSocket : public Network::TransportSocket { public: - CaptureSocket(const std::string& path_prefix, - envoy::config::transport_socket::capture::v2alpha::FileSink::Format format, - Network::TransportSocketPtr&& transport_socket, Event::TimeSystem& time_system); + TapSocket(const std::string& path_prefix, + envoy::config::transport_socket::tap::v2alpha::FileSink::Format format, + Network::TransportSocketPtr&& transport_socket, Event::TimeSystem& time_system); // Network::TransportSocket void setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) override; @@ -30,9 +30,9 @@ class CaptureSocket : public Network::TransportSocket { private: const std::string& path_prefix_; - const envoy::config::transport_socket::capture::v2alpha::FileSink::Format format_; + const envoy::config::transport_socket::tap::v2alpha::FileSink::Format format_; // TODO(htuch): Buffering the entire trace until socket close won't scale to - // long lived connections or large transfers. We could emit multiple capture + // long lived connections or large transfers. We could emit multiple tap // files with bounded size, with identical connection ID to allow later // reassembly. envoy::data::tap::v2alpha::Trace trace_; @@ -41,12 +41,12 @@ class CaptureSocket : public Network::TransportSocket { Event::TimeSystem& time_system_; }; -class CaptureSocketFactory : public Network::TransportSocketFactory { +class TapSocketFactory : public Network::TransportSocketFactory { public: - CaptureSocketFactory(const std::string& path_prefix, - envoy::config::transport_socket::capture::v2alpha::FileSink::Format format, - Network::TransportSocketFactoryPtr&& transport_socket_factory, - Event::TimeSystem& time_system); + TapSocketFactory(const std::string& path_prefix, + envoy::config::transport_socket::tap::v2alpha::FileSink::Format format, + Network::TransportSocketFactoryPtr&& transport_socket_factory, + Event::TimeSystem& time_system); // Network::TransportSocketFactory Network::TransportSocketPtr @@ -55,12 +55,12 @@ class CaptureSocketFactory : public Network::TransportSocketFactory { private: const std::string path_prefix_; - const envoy::config::transport_socket::capture::v2alpha::FileSink::Format format_; + const envoy::config::transport_socket::tap::v2alpha::FileSink::Format format_; Network::TransportSocketFactoryPtr transport_socket_factory_; Event::TimeSystem& time_system_; }; -} // namespace Capture +} // namespace Tap } // namespace TransportSockets } // namespace Extensions } // namespace Envoy diff --git a/source/extensions/transport_sockets/well_known_names.h b/source/extensions/transport_sockets/well_known_names.h index f1edb4853e12c..b65060155e1a8 100644 --- a/source/extensions/transport_sockets/well_known_names.h +++ b/source/extensions/transport_sockets/well_known_names.h @@ -15,7 +15,7 @@ namespace TransportSockets { class TransportSocketNameValues { public: const std::string Alts = "envoy.transport_sockets.alts"; - const std::string Capture = "envoy.transport_sockets.capture"; + const std::string Tap = "envoy.transport_sockets.tap"; const std::string RawBuffer = "raw_buffer"; const std::string Tls = "tls"; }; diff --git a/test/config/BUILD b/test/config/BUILD index a00a5f12e6df8..226469a1fdad3 100644 --- a/test/config/BUILD +++ b/test/config/BUILD @@ -31,6 +31,6 @@ envoy_cc_test_library( "//test/test_common:utility_lib", "@envoy_api//envoy/api/v2:eds_cc", "@envoy_api//envoy/config/bootstrap/v2:bootstrap_cc", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", + "@envoy_api//envoy/config/transport_socket/tap/v2alpha:tap_cc", ], ) diff --git a/test/config/utility.cc b/test/config/utility.cc index e8412c92afa6d..fe6a9a5477f5e 100644 --- a/test/config/utility.cc +++ b/test/config/utility.cc @@ -1,7 +1,7 @@ #include "test/config/utility.h" #include "envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.h" -#include "envoy/config/transport_socket/capture/v2alpha/capture.pb.h" +#include "envoy/config/transport_socket/tap/v2alpha/tap.pb.h" #include "envoy/http/codec.h" #include "common/common/assert.h" @@ -148,16 +148,16 @@ void ConfigHelper::finalize(const std::vector& ports) { uint32_t port_idx = 0; bool eds_hosts = false; auto* static_resources = bootstrap_.mutable_static_resources(); - const auto capture_path = TestEnvironment::getOptionalEnvVar("CAPTURE_PATH"); - if (capture_path) { - ENVOY_LOG_MISC(debug, "Test capture path set to {}", capture_path.value()); + const auto tap_path = TestEnvironment::getOptionalEnvVar("TAP_PATH"); + if (tap_path) { + ENVOY_LOG_MISC(debug, "Test tap path set to {}", tap_path.value()); } else { - ENVOY_LOG_MISC(debug, "No capture path set for tests"); + ENVOY_LOG_MISC(debug, "No tap path set for tests"); } for (int i = 0; i < bootstrap_.mutable_static_resources()->listeners_size(); ++i) { auto* listener = static_resources->mutable_listeners(i); for (int j = 0; j < listener->filter_chains_size(); ++j) { - if (capture_path) { + if (tap_path) { auto* filter_chain = listener->mutable_filter_chains(j); const bool has_tls = filter_chain->has_tls_context(); absl::optional tls_config; @@ -166,8 +166,8 @@ void ConfigHelper::finalize(const std::vector& ports) { MessageUtil::jsonConvert(filter_chain->tls_context(), tls_config.value()); filter_chain->clear_tls_context(); } - setCaptureTransportSocket(capture_path.value(), fmt::format("listener_{}_{}", i, j), - *filter_chain->mutable_transport_socket(), tls_config); + setTapTransportSocket(tap_path.value(), fmt::format("listener_{}_{}", i, j), + *filter_chain->mutable_transport_socket(), tls_config); } } } @@ -200,7 +200,7 @@ void ConfigHelper::finalize(const std::vector& ports) { } } - if (capture_path) { + if (tap_path) { const bool has_tls = cluster->has_tls_context(); absl::optional tls_config; if (has_tls) { @@ -208,8 +208,8 @@ void ConfigHelper::finalize(const std::vector& ports) { MessageUtil::jsonConvert(cluster->tls_context(), tls_config.value()); cluster->clear_tls_context(); } - setCaptureTransportSocket(capture_path.value(), fmt::format("cluster_{}", i), - *cluster->mutable_transport_socket(), tls_config); + setTapTransportSocket(tap_path.value(), fmt::format("cluster_{}", i), + *cluster->mutable_transport_socket(), tls_config); } } ASSERT(port_idx == ports.size() || eds_hosts); @@ -228,10 +228,9 @@ void ConfigHelper::finalize(const std::vector& ports) { finalized_ = true; } -void ConfigHelper::setCaptureTransportSocket( - const std::string& capture_path, const std::string& type, - envoy::api::v2::core::TransportSocket& transport_socket, - const absl::optional& tls_config) { +void ConfigHelper::setTapTransportSocket(const std::string& tap_path, const std::string& type, + envoy::api::v2::core::TransportSocket& transport_socket, + const absl::optional& tls_config) { // Determine inner transport socket. envoy::api::v2::core::TransportSocket inner_transport_socket; if (!transport_socket.name().empty()) { @@ -243,18 +242,18 @@ void ConfigHelper::setCaptureTransportSocket( } else { inner_transport_socket.set_name("raw_buffer"); } - // Configure outer capture transport socket. - transport_socket.set_name("envoy.transport_sockets.capture"); - envoy::config::transport_socket::capture::v2alpha::Capture capture_config; - auto* file_sink = capture_config.mutable_file_sink(); + // Configure outer tap transport socket. + transport_socket.set_name("envoy.transport_sockets.tap"); + envoy::config::transport_socket::tap::v2alpha::Tap tap_config; + auto* file_sink = tap_config.mutable_file_sink(); const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info(); const std::string test_id = std::string(test_info->name()) + "_" + std::string(test_info->test_case_name()) + "_" + type; - file_sink->set_path_prefix(capture_path + "_" + absl::StrReplaceAll(test_id, {{"/", "_"}})); - file_sink->set_format(envoy::config::transport_socket::capture::v2alpha::FileSink::PROTO_TEXT); - capture_config.mutable_transport_socket()->MergeFrom(inner_transport_socket); - transport_socket.mutable_typed_config()->PackFrom(capture_config); + file_sink->set_path_prefix(tap_path + "_" + absl::StrReplaceAll(test_id, {{"/", "_"}})); + file_sink->set_format(envoy::config::transport_socket::tap::v2alpha::FileSink::PROTO_TEXT); + tap_config.mutable_transport_socket()->MergeFrom(inner_transport_socket); + transport_socket.mutable_typed_config()->PackFrom(tap_config); } void ConfigHelper::setSourceAddress(const std::string& address_string) { diff --git a/test/config/utility.h b/test/config/utility.h index ba7c09c2ffbe1..48ea249892779 100644 --- a/test/config/utility.h +++ b/test/config/utility.h @@ -154,10 +154,10 @@ class ConfigHelper { // Finds the filter named 'name' from the first filter chain from the first listener. envoy::api::v2::listener::Filter* getFilterFromListener(const std::string& name); - // Configure a capture transport socket for a cluster/filter chain. - void setCaptureTransportSocket(const std::string& capture_path, const std::string& type, - envoy::api::v2::core::TransportSocket& transport_socket, - const absl::optional& tls_config); + // Configure a tap transport socket for a cluster/filter chain. + void setTapTransportSocket(const std::string& tap_path, const std::string& type, + envoy::api::v2::core::TransportSocket& transport_socket, + const absl::optional& tls_config); // The bootstrap proto Envoy will start up with. envoy::config::bootstrap::v2::Bootstrap bootstrap_; diff --git a/test/integration/BUILD b/test/integration/BUILD index 10a96ca726d84..79500f8d09b2a 100644 --- a/test/integration/BUILD +++ b/test/integration/BUILD @@ -53,7 +53,7 @@ py_binary( visibility = ["//visibility:public"], deps = [ ":capture_fuzz_proto_py", - "@envoy_api//envoy/data/tap/v2alpha:capture_py", + "@envoy_api//envoy/data/tap/v2alpha:transport_py", ], ) @@ -307,8 +307,8 @@ envoy_cc_test_library( "//source/common/thread_local:thread_local_lib", "//source/common/upstream:upstream_includes", "//source/common/upstream:upstream_lib", - "//source/extensions/transport_sockets/capture:config", "//source/extensions/transport_sockets/raw_buffer:config", + "//source/extensions/transport_sockets/tap:config", "//source/extensions/transport_sockets/tls:ssl_socket_lib", "//source/server:connection_handler_lib", "//source/server:hot_restart_nop_lib", @@ -504,8 +504,6 @@ envoy_cc_test( "//source/extensions/transport_sockets/tls:context_lib", "//test/mocks/secret:secret_mocks", "//test/test_common:utility_lib", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", - "@envoy_api//envoy/data/tap/v2alpha:capture_cc", ], ) @@ -533,8 +531,6 @@ envoy_cc_test( "//test/mocks/runtime:runtime_mocks", "//test/mocks/secret:secret_mocks", "//test/test_common:utility_lib", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", - "@envoy_api//envoy/data/tap/v2alpha:capture_cc", ], ) @@ -559,8 +555,8 @@ envoy_cc_test( "//source/extensions/transport_sockets/tls:context_lib", "//test/mocks/secret:secret_mocks", "//test/test_common:utility_lib", - "@envoy_api//envoy/config/transport_socket/capture/v2alpha:capture_cc", - "@envoy_api//envoy/data/tap/v2alpha:capture_cc", + "@envoy_api//envoy/config/transport_socket/tap/v2alpha:tap_cc", + "@envoy_api//envoy/data/tap/v2alpha:transport_cc", ], ) diff --git a/test/integration/server.cc b/test/integration/server.cc index 94ae3ee696bbb..f70a691c056a5 100644 --- a/test/integration/server.cc +++ b/test/integration/server.cc @@ -86,9 +86,9 @@ void IntegrationTestServer::start(const Network::Address::IpVersion version, waitUntilListenersReady(); } - // If we are capturing, spin up tcpdump. - const auto capture_path = TestEnvironment::getOptionalEnvVar("CAPTURE_PATH"); - if (capture_path) { + // If we are tapping, spin up tcpdump. + const auto tap_path = TestEnvironment::getOptionalEnvVar("TAP_PATH"); + if (tap_path) { std::vector ports; for (auto listener : server().listenerManager().listeners()) { const auto listen_addr = listener.get().socket().localAddress(); @@ -102,7 +102,7 @@ void IntegrationTestServer::start(const Network::Address::IpVersion version, const std::string test_id = std::string(test_info->name()) + "_" + std::string(test_info->test_case_name()); const std::string pcap_path = - capture_path.value() + "_" + absl::StrReplaceAll(test_id, {{"/", "_"}}) + "_server.pcap"; + tap_path.value() + "_" + absl::StrReplaceAll(test_id, {{"/", "_"}}) + "_server.pcap"; tcp_dump_ = std::make_unique(pcap_path, "lo", ports); } } diff --git a/test/integration/ssl_integration_test.cc b/test/integration/ssl_integration_test.cc index 1e17ad00dbcf4..6f116b16dbee7 100644 --- a/test/integration/ssl_integration_test.cc +++ b/test/integration/ssl_integration_test.cc @@ -3,8 +3,8 @@ #include #include -#include "envoy/config/transport_socket/capture/v2alpha/capture.pb.h" -#include "envoy/data/tap/v2alpha/capture.pb.h" +#include "envoy/config/transport_socket/tap/v2alpha/tap.pb.h" +#include "envoy/data/tap/v2alpha/transport.pb.h" #include "common/event/dispatcher_impl.h" #include "common/network/connection_impl.h" @@ -337,7 +337,7 @@ TEST_P(SslCertficateIntegrationTest, ServerRsaEcdsaClientEcdsaOnly) { checkStats(); } -class SslCaptureIntegrationTest : public SslIntegrationTest { +class SslTapIntegrationTest : public SslIntegrationTest { public: void initialize() override { config_helper_.addConfigModifier([this](envoy::config::bootstrap::v2::Bootstrap& bootstrap) { @@ -347,17 +347,17 @@ class SslCaptureIntegrationTest : public SslIntegrationTest { envoy::api::v2::core::TransportSocket ssl_transport_socket; ssl_transport_socket.set_name("tls"); MessageUtil::jsonConvert(filter_chain->tls_context(), *ssl_transport_socket.mutable_config()); - // Configure outer capture transport socket. + // Configure outer tap transport socket. auto* transport_socket = filter_chain->mutable_transport_socket(); - transport_socket->set_name("envoy.transport_sockets.capture"); - envoy::config::transport_socket::capture::v2alpha::Capture capture_config; - auto* file_sink = capture_config.mutable_file_sink(); + transport_socket->set_name("envoy.transport_sockets.tap"); + envoy::config::transport_socket::tap::v2alpha::Tap tap_config; + auto* file_sink = tap_config.mutable_file_sink(); file_sink->set_path_prefix(path_prefix_); file_sink->set_format( - text_format_ ? envoy::config::transport_socket::capture::v2alpha::FileSink::PROTO_TEXT - : envoy::config::transport_socket::capture::v2alpha::FileSink::PROTO_BINARY); - capture_config.mutable_transport_socket()->MergeFrom(ssl_transport_socket); - MessageUtil::jsonConvert(capture_config, *transport_socket->mutable_config()); + text_format_ ? envoy::config::transport_socket::tap::v2alpha::FileSink::PROTO_TEXT + : envoy::config::transport_socket::tap::v2alpha::FileSink::PROTO_BINARY); + tap_config.mutable_transport_socket()->MergeFrom(ssl_transport_socket); + MessageUtil::jsonConvert(tap_config, *transport_socket->mutable_config()); // Nuke TLS context from legacy location. filter_chain->clear_tls_context(); // Rest of TLS initialization. @@ -371,12 +371,12 @@ class SslCaptureIntegrationTest : public SslIntegrationTest { bool text_format_{}; }; -INSTANTIATE_TEST_CASE_P(IpVersions, SslCaptureIntegrationTest, +INSTANTIATE_TEST_CASE_P(IpVersions, SslTapIntegrationTest, testing::ValuesIn(TestEnvironment::getIpVersionsForTest()), TestUtility::ipTestParamsToString); // Validate two back-to-back requests with binary proto output. -TEST_P(SslCaptureIntegrationTest, TwoRequestsWithBinaryProto) { +TEST_P(SslTapIntegrationTest, TwoRequestsWithBinaryProto) { initialize(); ConnectionCreationFunction creator = [&]() -> Network::ClientConnectionPtr { return makeSslClientConnection({}); @@ -439,7 +439,7 @@ TEST_P(SslCaptureIntegrationTest, TwoRequestsWithBinaryProto) { } // Validate a single request with text proto output. -TEST_P(SslCaptureIntegrationTest, RequestWithTextProto) { +TEST_P(SslTapIntegrationTest, RequestWithTextProto) { text_format_ = true; ConnectionCreationFunction creator = [&]() -> Network::ClientConnectionPtr { return makeSslClientConnection({});