From feb075a6cf97db4e8f01c6a588f57e3a93ebbfa6 Mon Sep 17 00:00:00 2001 From: Matt Klein Date: Fri, 18 Jan 2019 20:13:38 -0700 Subject: [PATCH 1/2] transport capture: rename to tap This is a rename PR only. It renames the capture transport socket and associated tools to the tap transport socket. It also updates some documentation. In a subsequent PR I'm going to refactor the tap transport socket to use the new common tap framework so that the tap transport socket can be configured via admin, the HTTP tap filter can write to a file, the tap transport socket can have matching, etc. Signed-off-by: Matt Klein --- api/docs/BUILD | 4 +- .../{capture => tap}/v2alpha/BUILD | 4 +- .../capture.proto => tap/v2alpha/tap.proto} | 10 ++--- api/envoy/data/tap/v2alpha/BUILD | 4 +- .../{capture.proto => transport.proto} | 8 ++-- api/tools/BUILD | 16 +++---- ..._ipv4.pb_text => tap2pcap_h2_ipv4.pb_text} | 0 ...2pcap_h2_ipv4.txt => tap2pcap_h2_ipv4.txt} | 0 api/tools/{capture2pcap.py => tap2pcap.py} | 24 +++++----- ...{capture2pcap_test.py => tap2pcap_test.py} | 14 +++--- ci/do_ci.sh | 16 +++---- docs/build.sh | 4 +- docs/root/intro/version_history.rst | 2 +- docs/root/operations/operations.rst | 2 +- ...raffic_capture.rst => traffic_tapping.rst} | 40 +++++++++-------- source/extensions/common/tap/tap_matcher.h | 7 ++- source/extensions/extensions_build_config.bzl | 4 +- .../transport_sockets/{capture => tap}/BUILD | 16 +++---- .../{capture => tap}/config.cc | 39 ++++++++-------- .../{capture => tap}/config.h | 21 +++++---- .../{capture/capture.cc => tap/tap.cc} | 45 +++++++++---------- .../{capture/capture.h => tap/tap.h} | 32 ++++++------- .../transport_sockets/well_known_names.h | 2 +- test/config/BUILD | 2 +- test/config/utility.cc | 45 +++++++++---------- test/config/utility.h | 8 ++-- test/integration/BUILD | 12 ++--- test/integration/server.cc | 8 ++-- test/integration/ssl_integration_test.cc | 28 ++++++------ 29 files changed, 210 insertions(+), 207 deletions(-) rename api/envoy/config/transport_socket/{capture => tap}/v2alpha/BUILD (78%) rename api/envoy/config/transport_socket/{capture/v2alpha/capture.proto => tap/v2alpha/tap.proto} (84%) rename api/envoy/data/tap/v2alpha/{capture.proto => transport.proto} (85%) rename api/tools/data/{capture2pcap_h2_ipv4.pb_text => tap2pcap_h2_ipv4.pb_text} (100%) rename api/tools/data/{capture2pcap_h2_ipv4.txt => tap2pcap_h2_ipv4.txt} (100%) rename api/tools/{capture2pcap.py => tap2pcap.py} (78%) rename api/tools/{capture2pcap_test.py => tap2pcap_test.py} (61%) rename docs/root/operations/{traffic_capture.rst => traffic_tapping.rst} (64%) rename source/extensions/transport_sockets/{capture => tap}/BUILD (71%) rename source/extensions/transport_sockets/{capture => tap}/config.cc (62%) rename source/extensions/transport_sockets/{capture => tap}/config.h (70%) rename source/extensions/transport_sockets/{capture/capture.cc => tap/tap.cc} (69%) rename source/extensions/transport_sockets/{capture/capture.h => tap/tap.h} (61%) diff --git a/api/docs/BUILD b/api/docs/BUILD index df855569bb3be..d02ca8cb7c131 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/v2alpha: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..3e6799c404e1c 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}" # 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}"/*.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 bf5fafcf31d42..cd273a3c8f91b 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 d17d96fa9b74f..4da603cdf960d 100644 --- a/docs/root/intro/version_history.rst +++ b/docs/root/intro/version_history.rst @@ -340,7 +340,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({}); From 686829d357a3d9a11ce314eb839d818a006f3a56 Mon Sep 17 00:00:00 2001 From: Matt Klein Date: Wed, 23 Jan 2019 09:31:31 -0700 Subject: [PATCH 2/2] fix Signed-off-by: Matt Klein --- ci/do_ci.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 3e6799c404e1c..42f5ff2e71d6d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -119,11 +119,11 @@ elif [[ "$1" == "bazel.asan" ]]; then mkdir -p "${TAP_TMP}" bazel_with_collection test ${BAZEL_TEST_OPTIONS} -c dbg --config=clang-asan \ @envoy//test/integration:ssl_integration_test \ - --test_env=TAP_PATH="${TAP_TMP}" + --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 "${TAP_TMP}"/*.pb_text > /dev/null + ls -l "${TAP_TMP}"/tap_*.pb_text > /dev/null exit 0 elif [[ "$1" == "bazel.tsan" ]]; then setup_clang_toolchain