Skip to content
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
4cfa9c5
udp: add route proto
zhxie Aug 24, 2021
9891c45
udp: add router
zhxie Aug 25, 2021
367db00
udp: route data to clusters
zhxie Aug 25, 2021
3bd3085
udp: fix format
zhxie Aug 25, 2021
4c1b126
udp: minor type change
zhxie Aug 26, 2021
3f762f7
udp: clean code
zhxie Aug 26, 2021
95e1094
test: add test for routing in UDP proxy
zhxie Aug 26, 2021
b592612
test: add test for route matching of UDP proxy
zhxie Aug 26, 2021
804aedd
test: fix format
zhxie Aug 26, 2021
37def08
udp: deprecate api in favor of router
zhxie Aug 27, 2021
77fb547
test: prioritize router
zhxie Aug 27, 2021
9c71fe4
docs: prioritize router
zhxie Aug 31, 2021
b4cbd8d
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Oct 20, 2021
4a201e7
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Oct 21, 2021
b5086f2
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Oct 25, 2021
42ce9c3
router: add network data inputs
zhxie Oct 26, 2021
0b14da0
udp: migrate to generic matching API
zhxie Oct 26, 2021
744d74b
router: change cidr data input to IP and port
zhxie Oct 27, 2021
cf61bb7
udp: fix no cluster initialized when using generic matching
zhxie Oct 27, 2021
cc24008
example: update UDP proxy example
zhxie Oct 27, 2021
f5fd481
docs: update to generic matching
zhxie Oct 27, 2021
f613a87
docs: fix orphan proto
zhxie Oct 27, 2021
4a2f3f8
test: update to generic matching
zhxie Oct 27, 2021
115b532
test: remove redundant code
zhxie Oct 28, 2021
db04638
udp: fix bug using variable out of scope
zhxie Oct 28, 2021
e9f56d7
router: update network matching data structure
zhxie Oct 28, 2021
786386b
test: add router coverage
zhxie Oct 28, 2021
f615fd5
test: add test for network data inputs
zhxie Oct 28, 2021
854176a
test: fix spelling
zhxie Oct 28, 2021
7cff9bf
test: fix format
zhxie Oct 28, 2021
b0fb7d6
udp: change router method name
zhxie Nov 1, 2021
8cfdf65
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Nov 1, 2021
cfee9b0
udp: remove generated api shadow
zhxie Nov 1, 2021
063cf40
router: remove unused data inputs
zhxie Nov 1, 2021
35b0f5e
udp: fix not throw on invalid data inputs
zhxie Nov 1, 2021
7303e6f
udp: add docs for method
zhxie Nov 1, 2021
8184199
test: mark some tests as deprecated feature test
zhxie Nov 1, 2021
8f3e8e0
udp: revert deprecating cluster syntax
zhxie Nov 2, 2021
ecddff7
test: lower coverage for untested simple method in matching data
zhxie Nov 2, 2021
fae4e72
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Nov 2, 2021
69376a9
docs: add release notes
zhxie Nov 2, 2021
0fc55bf
ci: kick CI
zhxie Nov 2, 2021
e779a36
udp: use full path for include
zhxie Nov 11, 2021
fb2731e
udp: update router abstraction
zhxie Nov 11, 2021
68dc8fb
udp: deprecate cluster API again
zhxie Nov 11, 2021
8de2770
ci: kick CI
zhxie Nov 11, 2021
e9cf799
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Nov 29, 2021
03005e5
udp: fix filter
zhxie Nov 29, 2021
e162cae
tests: prioritize router
zhxie Nov 29, 2021
d62539e
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Dec 1, 2021
e49181a
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Dec 31, 2021
b04a059
api: fix format
zhxie Jan 5, 2022
87d1361
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Jan 10, 2022
bd7b917
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Jan 12, 2022
b00cf9e
nit: add comments and rename methods
zhxie Jan 12, 2022
45165c6
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Feb 14, 2022
5173760
docs: update release notes
zhxie Feb 14, 2022
0e19161
nit: change parameter names
zhxie Feb 14, 2022
8b30f25
docs: update examples
zhxie Feb 14, 2022
d3db96e
examples: update examples
zhxie Feb 14, 2022
b501e34
tests: use single on_no_match
zhxie Feb 14, 2022
bc33bd0
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Feb 25, 2022
2b9fe8d
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Feb 25, 2022
9d1abd2
docs: fix release notes
zhxie Feb 25, 2022
628855d
api: remove duplicate matching data from merging
zhxie Feb 25, 2022
cb3d52c
api: remove duplicate matching data from merging
zhxie Feb 25, 2022
d6911cc
udp: comply with network inputs
zhxie Feb 25, 2022
29e86f8
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Mar 28, 2022
4478d77
udp: replace with network inputs
zhxie Mar 28, 2022
c1dc8b1
test: add UDP router test
zhxie Mar 28, 2022
086ea89
nit: add comment for cluster infos
zhxie Mar 28, 2022
cf77be6
nit: explicitize variable route
zhxie Mar 28, 2022
4830ec7
udp: route with different network inputs
zhxie Mar 28, 2022
5ff8de5
docs: add docs for UDP proxy router
zhxie Mar 28, 2022
43a1b80
docs: fix matcher example
zhxie Mar 28, 2022
2be0b73
docs: fix matcher example
zhxie Mar 28, 2022
03b55aa
udp: remove unused guard
zhxie Mar 29, 2022
549a487
docs: emphasize matcher only
zhxie Mar 29, 2022
a08f1e1
api: clarify deprecation and usage
zhxie Mar 30, 2022
d368ef3
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Mar 30, 2022
9b46d46
mis: post merge conflict
zhxie Mar 30, 2022
79d1748
docs: fix missing label
zhxie Mar 30, 2022
f959f11
docs: add deprecation notes
zhxie Mar 31, 2022
b9ac01e
nit: typo
zhxie Mar 31, 2022
96d1ca1
udp: ensure matching
zhxie Mar 31, 2022
f0eead0
udp: fix cluster removal log
zhxie Mar 31, 2022
a5fc56d
udp: change specifier in route
zhxie Mar 31, 2022
00a84ef
udp: merge path of cluster and matcher
zhxie Mar 31, 2022
eede13d
nit: fix typo
zhxie Apr 1, 2022
0617a91
udp: update signature of route
zhxie Apr 1, 2022
4eeea14
test: fix route
zhxie Apr 1, 2022
dc59d27
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Apr 1, 2022
3f9c62c
Merge remote-tracking branch 'envoyproxy/main' into udp-proxy-router
zhxie Apr 2, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions api/envoy/extensions/filters/udp/udp_proxy/v3/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ licenses(["notice"]) # Apache 2

api_proto_package(
deps = [
"//envoy/annotations:pkg",
"//envoy/config/core/v3:pkg",
"@com_github_cncf_udpa//udpa/annotations:pkg",
"@com_github_cncf_udpa//xds/annotations/v3:pkg",
"@com_github_cncf_udpa//xds/type/matcher/v3:pkg",
],
)
19 changes: 19 additions & 0 deletions api/envoy/extensions/filters/udp/udp_proxy/v3/route.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
syntax = "proto3";

package envoy.extensions.filters.udp.udp_proxy.v3;

import "udpa/annotations/status.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.extensions.filters.udp.udp_proxy.v3";
option java_outer_classname = "RouteProto";
option java_multiple_files = true;
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: UDP proxy route configuration]
// UDP proxy :ref:`configuration overview <config_udp_listener_filters_udp_proxy>`.

message Route {
// Indicates the upstream cluster to which the request should be routed.
string cluster = 1 [(validate.rules).string = {min_len: 1}];
}
16 changes: 14 additions & 2 deletions api/envoy/extensions/filters/udp/udp_proxy/v3/udp_proxy.proto
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ import "envoy/config/core/v3/udp_socket_config.proto";

import "google/protobuf/duration.proto";

import "xds/annotations/v3/status.proto";
import "xds/type/matcher/v3/matcher.proto";

import "envoy/annotations/deprecation.proto";
import "udpa/annotations/status.proto";
import "udpa/annotations/versioning.proto";
import "validate/validate.proto";
Expand All @@ -20,7 +24,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
// [#extension: envoy.filters.udp_listener.udp_proxy]

// Configuration for the UDP proxy filter.
// [#next-free-field: 7]
// [#next-free-field: 8]
message UdpProxyConfig {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.filter.udp.udp_proxy.v2alpha.UdpProxyConfig";
Expand Down Expand Up @@ -50,7 +54,15 @@ message UdpProxyConfig {
option (validate.required) = true;

// The upstream cluster to connect to.
Comment thread
mattklein123 marked this conversation as resolved.
string cluster = 2 [(validate.rules).string = {min_len: 1}];
string cluster = 2 [
deprecated = true,
(validate.rules).string = {min_len: 1},
(envoy.annotations.deprecated_at_minor_version) = "3.0"
];
Comment thread
mattklein123 marked this conversation as resolved.

// The match tree to use when resolving route actions for incoming requests.
Comment thread
mattklein123 marked this conversation as resolved.
xds.type.matcher.v3.Matcher matcher = 7
[(xds.annotations.v3.field_status).work_in_progress = true];
}

// The idle timeout for sessions. Idle is defined as no datagrams between received or sent by
Expand Down
17 changes: 17 additions & 0 deletions api/envoy/type/matcher/v3/network_inputs.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
syntax = "proto3";

package envoy.type.matcher.v3;

import "udpa/annotations/status.proto";

option java_package = "io.envoyproxy.envoy.type.matcher.v3";
option java_outer_classname = "NetworkInputsProto";
option java_multiple_files = true;
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Common Network Inputs]

// Match input indicates that matching should be done on a specific source IP.
// [#comment:TODO(snowp): Link to unified matching docs.]
message SourceIpMatchInput {
}
1 change: 1 addition & 0 deletions docs/root/api-v3/types/types.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ Types
../type/matcher/v3/struct.proto
../type/matcher/v3/value.proto
../type/matcher/v3/http_inputs.proto
../type/matcher/v3/network_inputs.proto
../type/metadata/v3/metadata.proto
../type/tracing/v3/custom_tag.proto
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,26 @@ static_resources:
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.UdpProxyConfig
stat_prefix: service
cluster: service_udp
matcher:
Comment thread
mattklein123 marked this conversation as resolved.
matcher_tree:
input:
name: source-ip
typed_config:
'@type': type.googleapis.com/envoy.type.matcher.v3.SourceIpMatchInput
exact_match_map:
map:
"127.0.0.1":
action:
name: route
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.Route
cluster: service_udp
on_no_match:
action:
name: route
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.Route
cluster: service_udp
upstream_socket_config:
max_rx_datagram_size: 9000
clusters:
Expand Down
1 change: 1 addition & 0 deletions docs/root/version_history/current.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ New Features
* thrift_proxy: support subset lb when using request or route metadata.
* transport_socket: added :ref:`envoy.transport_sockets.tcp_stats <envoy_v3_api_msg_extensions.transport_sockets.tcp_stats.v3.Config>` which generates additional statistics gathered from the OS TCP stack.
* udp: add support for multiple listener filters.
* udp_proxy: added :ref:`matcher <envoy_v3_api_field_extensions.filters.udp.udp_proxy.v3.UdpProxyConfig.matcher>` to support matching and routing to different clusters.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a note in deprecated below for the deprecated field.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, added.

* upstream: added the ability to :ref:`configure max connection duration <envoy_v3_api_field_config.core.v3.HttpProtocolOptions.max_connection_duration>` for upstream clusters.
* vcl_socket_interface: added VCL socket interface extension for fd.io VPP integration to :ref:`contrib images <install_contrib>`. This can be enabled via :ref:`VCL <envoy_v3_api_msg_extensions.vcl.v3alpha.VclSocketInterface>` configuration.
* xds: re-introduced unified delta and sotw xDS multiplexers that share most of the implementation. Added a new runtime config ``envoy.reloadable_features.unified_mux`` (disabled by default) that when enabled, switches xDS to use unified multiplexers.
Expand Down
10 changes: 10 additions & 0 deletions envoy/network/filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <memory>

#include "envoy/buffer/buffer.h"
#include "envoy/network/address.h"
#include "envoy/network/listen_socket.h"
#include "envoy/network/transport_socket.h"
#include "envoy/stream_info/stream_info.h"
Expand Down Expand Up @@ -209,6 +210,15 @@ using ReadFilterSharedPtr = std::shared_ptr<ReadFilter>;
class Filter : public WriteFilter, public ReadFilter {};
using FilterSharedPtr = std::shared_ptr<Filter>;

class NetworkMatchingData {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: A short class comment would be nice (as would a commend on the sourceIp method, though the name is already quite readable)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

public:
static absl::string_view name() { return "network"; }

virtual ~NetworkMatchingData() = default;

virtual OptRef<const Address::Ip> sourceIp() const PURE;
};

/**
* Interface for adding individual network filters to a manager.
*/
Expand Down
21 changes: 20 additions & 1 deletion examples/udp/envoy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,26 @@ static_resources:
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.UdpProxyConfig
stat_prefix: service
cluster: service_udp
matcher:
matcher_tree:
input:
name: source-ip
typed_config:
'@type': type.googleapis.com/envoy.type.matcher.v3.SourceIpMatchInput
exact_match_map:
map:
"127.0.0.1":
action:
name: route
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.Route
cluster: service_udp
on_no_match:
action:
name: route
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.udp.udp_proxy.v3.Route
cluster: service_udp

clusters:
- name: service_udp
Expand Down
29 changes: 29 additions & 0 deletions source/common/network/matching/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_package",
)

licenses(["notice"]) # Apache 2

envoy_package()

envoy_cc_library(
name = "data_impl_lib",
hdrs = ["data_impl.h"],
deps = [
"//envoy/network:filter_interface",
],
)

envoy_cc_library(
name = "inputs_lib",
srcs = ["inputs.cc"],
hdrs = ["inputs.h"],
deps = [
":data_impl_lib",
"//envoy/matcher:matcher_interface",
"//envoy/server:factory_context_interface",
"@envoy_api//envoy/type/matcher/v3:pkg_cc_proto",
],
)
25 changes: 25 additions & 0 deletions source/common/network/matching/data_impl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include "envoy/network/filter.h"

namespace Envoy {
namespace Network {
namespace Matching {
/**
* Implementation of NetworkMatchingData, providing network specific data to
* the match tree.
*/
class NetworkMatchingDataImpl : public NetworkMatchingData {
public:
static absl::string_view name() { return "network"; }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious about this static name() method. It both this class and the parent it returns the same value. Of course since it's static, it's not called polymorphically. How is it used?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, this method refers to the HttpMatchingDataImpl.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is this method used, though? Where is it called?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure how is the name() in these MatchingData used. Do you have any idea? @snowp


NetworkMatchingDataImpl(const Address::Ip* source) : source_(source) {}

OptRef<const Address::Ip> sourceIp() const override { return makeOptRefFromPtr(source_); }

private:
const Address::Ip* const source_{};
};
} // namespace Matching
} // namespace Network
} // namespace Envoy
11 changes: 11 additions & 0 deletions source/common/network/matching/inputs.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include "source/common/network/matching/inputs.h"

#include "envoy/registry/registry.h"

namespace Envoy {
namespace Network {
namespace Matching {
REGISTER_FACTORY(SourceIpDataInputFactory, Matcher::DataInputFactory<NetworkMatchingData>);
} // namespace Matching
} // namespace Network
} // namespace Envoy
74 changes: 74 additions & 0 deletions source/common/network/matching/inputs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#pragma once

#include <string>

#include "envoy/matcher/matcher.h"
#include "envoy/network/filter.h"
#include "envoy/server/factory_context.h"
#include "envoy/type/matcher/v3/network_inputs.pb.h"
#include "envoy/type/matcher/v3/network_inputs.pb.validate.h"

namespace Envoy {
namespace Network {
namespace Matching {
/**
* Common base class for all the IP DataInputs.
*/
class IpDataInputBase : public Matcher::DataInput<NetworkMatchingData> {
public:
explicit IpDataInputBase() = default;

virtual OptRef<const Address::Ip> select(const NetworkMatchingData& data) const PURE;

Matcher::DataInputGetResult get(const NetworkMatchingData& data) const override {
const auto ip = select(data);

if (!ip.has_value()) {
return {Matcher::DataInputGetResult::DataAvailability::NotAvailable, absl::nullopt};
}

return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, ip->addressAsString()};
}
};

/**
* Common base class for all the IP DataInputsFactory.
*/
template <class DataInputType, class ProtoType>
class IpDataInputFactoryBase : public Matcher::DataInputFactory<NetworkMatchingData> {
public:
explicit IpDataInputFactoryBase(const std::string& name) : name_(name) {}

std::string name() const override { return name_; }

Matcher::DataInputFactoryCb<NetworkMatchingData>
createDataInputFactoryCb(const Protobuf::Message&, ProtobufMessage::ValidationVisitor&) override {
return [] { return std::make_unique<DataInputType>(); };
}
ProtobufTypes::MessagePtr createEmptyConfigProto() override {
return std::make_unique<ProtoType>();
}

private:
const std::string name_;
};

class SourceIpDataInput : public IpDataInputBase {
public:
explicit SourceIpDataInput() = default;

OptRef<const Address::Ip> select(const NetworkMatchingData& data) const override {
return data.sourceIp();
}
};

class SourceIpDataInputFactory
: public IpDataInputFactoryBase<SourceIpDataInput,
envoy::type::matcher::v3::SourceIpMatchInput> {
public:
SourceIpDataInputFactory() : IpDataInputFactoryBase("source-ip") {}
};

} // namespace Matching
} // namespace Network
} // namespace Envoy
2 changes: 2 additions & 0 deletions source/extensions/filters/udp/udp_proxy/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ envoy_cc_library(
"//envoy/network:listener_interface",
"//envoy/upstream:cluster_manager_interface",
"//source/common/api:os_sys_calls_lib",
"//source/common/common:empty_string",
"//source/common/network:socket_lib",
"//source/common/network:socket_option_factory_lib",
"//source/common/network:utility_lib",
"//source/common/upstream:load_balancer_lib",
"//source/extensions/filters/udp/udp_proxy/router:router_lib",
"@envoy_api//envoy/extensions/filters/udp/udp_proxy/v3:pkg_cc_proto",
],
)
Expand Down
1 change: 1 addition & 0 deletions source/extensions/filters/udp/udp_proxy/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class UdpProxyFilterConfigFactory
Server::Configuration::ListenerFactoryContext& context) override {
auto shared_config = std::make_shared<UdpProxyFilterConfig>(
context.clusterManager(), context.timeSource(), context.scope(),
context.getServerFactoryContext(),
MessageUtil::downcastAndValidate<
const envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig&>(
config, context.messageValidationVisitor()));
Expand Down
29 changes: 29 additions & 0 deletions source/extensions/filters/udp/udp_proxy/router/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_library",
"envoy_extension_package",
)

licenses(["notice"]) # Apache 2

envoy_extension_package()

envoy_cc_library(
name = "router_interface",
hdrs = ["router.h"],
)

envoy_cc_library(
name = "router_lib",
srcs = ["router_impl.cc"],
hdrs = ["router_impl.h"],
deps = [
":router_interface",
"//source/common/common:empty_string",
"//source/common/matcher:matcher_lib",
"//source/common/matcher:validation_visitor_lib",
"//source/common/network/matching:inputs_lib",
"@envoy_api//envoy/extensions/filters/udp/udp_proxy/v3:pkg_cc_proto",
"@envoy_api//envoy/type/matcher/v3:pkg_cc_proto",
],
)
Loading