mirror of
https://github.com/alibaba/higress.git
synced 2026-06-08 20:27:31 +08:00
Support scopedRDS (#764)
This commit is contained in:
483
envoy/1.20/patches/envoy/20240104-enhance-srds.patch
Normal file
483
envoy/1.20/patches/envoy/20240104-enhance-srds.patch
Normal file
@@ -0,0 +1,483 @@
|
|||||||
|
diff -Naur envoy/api/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto envoy-new/api/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto
|
||||||
|
--- envoy/api/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto 2024-01-04 21:07:40.000000000 +0800
|
||||||
|
+++ envoy-new/api/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -888,11 +888,31 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ message HostValueExtractor {
|
||||||
|
+ option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
+ "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder."
|
||||||
|
+ "FragmentBuilder.HostValueExtractor";
|
||||||
|
+
|
||||||
|
+ // The maximum number of host superset recomputes. If not specified, defaults to 100.
|
||||||
|
+ google.protobuf.UInt32Value max_recompute_num = 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ message LocalPortValueExtractor {
|
||||||
|
+ option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
+ "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder."
|
||||||
|
+ "FragmentBuilder.LocalPortValueExtractor";
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
oneof type {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Specifies how a header field's value should be extracted.
|
||||||
|
HeaderValueExtractor header_value_extractor = 1;
|
||||||
|
+
|
||||||
|
+ HostValueExtractor host_value_extractor = 101;
|
||||||
|
+
|
||||||
|
+ LocalPortValueExtractor local_port_value_extractor = 102;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -Naur envoy/envoy/router/scopes.h envoy-new/envoy/router/scopes.h
|
||||||
|
--- envoy/envoy/router/scopes.h 2024-01-04 21:07:38.000000000 +0800
|
||||||
|
+++ envoy-new/envoy/router/scopes.h 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -92,7 +92,12 @@
|
||||||
|
* @param headers the request headers to match the scoped routing configuration against.
|
||||||
|
* @return ConfigConstSharedPtr the router's Config matching the request headers.
|
||||||
|
*/
|
||||||
|
+#if defined ALIMESH
|
||||||
|
+ virtual ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info) const PURE;
|
||||||
|
+#else
|
||||||
|
virtual ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap& headers) const PURE;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on the incoming HTTP request headers, returns the hash value of its scope key.
|
||||||
|
@@ -100,6 +105,12 @@
|
||||||
|
* @return unique_ptr of the scope key computed from header.
|
||||||
|
*/
|
||||||
|
virtual ScopeKeyPtr computeScopeKey(const Http::HeaderMap&) const { return {}; }
|
||||||
|
+
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ virtual ScopeKeyPtr computeScopeKey(const Http::HeaderMap&, const StreamInfo::StreamInfo&) const {
|
||||||
|
+ return {};
|
||||||
|
+ };
|
||||||
|
+#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
using ScopedConfigConstSharedPtr = std::shared_ptr<const ScopedConfig>;
|
||||||
|
diff -Naur envoy/source/common/http/conn_manager_impl.cc envoy-new/source/common/http/conn_manager_impl.cc
|
||||||
|
--- envoy/source/common/http/conn_manager_impl.cc 2024-01-04 21:07:41.000000000 +0800
|
||||||
|
+++ envoy-new/source/common/http/conn_manager_impl.cc 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -577,8 +577,13 @@
|
||||||
|
requestVhdsUpdate(host_header, thread_local_dispatcher, std::move(route_config_updated_cb));
|
||||||
|
return;
|
||||||
|
} else if (parent_.snapped_scoped_routes_config_ != nullptr) {
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ Router::ScopeKeyPtr scope_key = parent_.snapped_scoped_routes_config_->computeScopeKey(
|
||||||
|
+ *parent_.request_headers_, parent_.connection()->streamInfo());
|
||||||
|
+#else
|
||||||
|
Router::ScopeKeyPtr scope_key =
|
||||||
|
parent_.snapped_scoped_routes_config_->computeScopeKey(*parent_.request_headers_);
|
||||||
|
+#endif
|
||||||
|
// If scope_key is not null, the scope exists but RouteConfiguration is not initialized.
|
||||||
|
if (scope_key != nullptr) {
|
||||||
|
requestSrdsUpdate(std::move(scope_key), thread_local_dispatcher,
|
||||||
|
@@ -1197,7 +1202,13 @@
|
||||||
|
void ConnectionManagerImpl::ActiveStream::snapScopedRouteConfig() {
|
||||||
|
// NOTE: if a RDS subscription hasn't got a RouteConfiguration back, a Router::NullConfigImpl is
|
||||||
|
// returned, in that case we let it pass.
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ snapped_route_config_ =
|
||||||
|
+ snapped_scoped_routes_config_->getRouteConfig(*request_headers_, connection()->streamInfo());
|
||||||
|
+#else
|
||||||
|
snapped_route_config_ = snapped_scoped_routes_config_->getRouteConfig(*request_headers_);
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
if (snapped_route_config_ == nullptr) {
|
||||||
|
ENVOY_STREAM_LOG(trace, "can't find SRDS scope.", *this);
|
||||||
|
// TODO(stevenzzzz): Consider to pass an error message to router filter, so that it can
|
||||||
|
diff -Naur envoy/source/common/router/scoped_config_impl.cc envoy-new/source/common/router/scoped_config_impl.cc
|
||||||
|
--- envoy/source/common/router/scoped_config_impl.cc 2024-01-04 21:07:36.000000000 +0800
|
||||||
|
+++ envoy-new/source/common/router/scoped_config_impl.cc 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -6,6 +6,160 @@
|
||||||
|
namespace Envoy {
|
||||||
|
namespace Router {
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+namespace {
|
||||||
|
+
|
||||||
|
+std::string maskFirstDNSLabel(absl::string_view host) {
|
||||||
|
+ if (host == "*") {
|
||||||
|
+ return std::string(host);
|
||||||
|
+ }
|
||||||
|
+ if (host.size() < 2) {
|
||||||
|
+ return "*";
|
||||||
|
+ }
|
||||||
|
+ size_t start_pos = (host[0] == '*' && host[1] == '.') ? 2 : 0;
|
||||||
|
+ size_t dot_pos = host.find('.', start_pos);
|
||||||
|
+ if (dot_pos != absl::string_view::npos) {
|
||||||
|
+ return absl::StrCat("*", absl::string_view(host.data() + dot_pos, host.size() - dot_pos));
|
||||||
|
+ }
|
||||||
|
+ return "*";
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+} // namespace
|
||||||
|
+
|
||||||
|
+LocalPortValueExtractorImpl::LocalPortValueExtractorImpl(
|
||||||
|
+ ScopedRoutes::ScopeKeyBuilder::FragmentBuilder&& config)
|
||||||
|
+ : FragmentBuilderBase(std::move(config)) {
|
||||||
|
+ ASSERT(config_.type_case() ==
|
||||||
|
+ ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::kLocalPortValueExtractor,
|
||||||
|
+ "local_port_value_extractor is not set.");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+std::unique_ptr<ScopeKeyFragmentBase> LocalPortValueExtractorImpl::computeFragment(
|
||||||
|
+ const Http::HeaderMap&, const StreamInfo::StreamInfo& info, ReComputeCbPtr&) const {
|
||||||
|
+ auto port = info.downstreamAddressProvider().localAddress()->ip()->port();
|
||||||
|
+ return std::make_unique<StringKeyFragment>(std::to_string(long(port)));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+HostValueExtractorImpl::HostValueExtractorImpl(
|
||||||
|
+ ScopedRoutes::ScopeKeyBuilder::FragmentBuilder&& config)
|
||||||
|
+ : FragmentBuilderBase(std::move(config)),
|
||||||
|
+ host_value_extractor_config_(config_.host_value_extractor()),
|
||||||
|
+ max_recompute_num_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(
|
||||||
|
+ host_value_extractor_config_, max_recompute_num, DefaultMaxRecomputeNum)) {
|
||||||
|
+ ASSERT(config_.type_case() == ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::kHostValueExtractor,
|
||||||
|
+ "host_value_extractor is not set.");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+HostValueExtractorImpl::reComputeHelper(const std::string& host, ReComputeCbPtr& next_recompute,
|
||||||
|
+ uint32_t recompute_seq) const {
|
||||||
|
+ if (recompute_seq == max_recompute_num_) {
|
||||||
|
+ ENVOY_LOG_MISC(warn,
|
||||||
|
+ "recompute host fragment failed, maximum number of recalculations exceeded");
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ if (host == "*") {
|
||||||
|
+ *next_recompute = nullptr;
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ auto masked_host = maskFirstDNSLabel(host);
|
||||||
|
+ *next_recompute = [this, masked_host, recompute_seq,
|
||||||
|
+ next_recompute]() mutable -> std::unique_ptr<ScopeKeyFragmentBase> {
|
||||||
|
+ return reComputeHelper(masked_host, next_recompute, recompute_seq + 1);
|
||||||
|
+ };
|
||||||
|
+ return std::make_unique<StringKeyFragment>(masked_host);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+HostValueExtractorImpl::computeFragment(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo&,
|
||||||
|
+ ReComputeCbPtr& recompute) const {
|
||||||
|
+ auto fragment = computeFragment(headers);
|
||||||
|
+ auto host = static_cast<const Http::RequestHeaderMap&>(headers).getHostValue();
|
||||||
|
+ *recompute = [this, host, recompute]() mutable -> std::unique_ptr<ScopeKeyFragmentBase> {
|
||||||
|
+ return reComputeHelper(std::string(host), recompute, 0);
|
||||||
|
+ };
|
||||||
|
+ return fragment;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+HostValueExtractorImpl::computeFragment(const Http::HeaderMap& headers) const {
|
||||||
|
+ return std::make_unique<StringKeyFragment>(
|
||||||
|
+ static_cast<const Http::RequestHeaderMap&>(headers).getHostValue());
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+HeaderValueExtractorImpl::computeFragment(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo&, ReComputeCbPtr&) const {
|
||||||
|
+ return computeFragment(headers);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+ScopeKeyPtr ScopeKeyBuilderImpl::computeScopeKey(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info,
|
||||||
|
+ std::function<ScopeKeyPtr()>& recompute) const {
|
||||||
|
+ ScopeKey key;
|
||||||
|
+ bool recomputeable = false;
|
||||||
|
+ auto recompute_cbs = std::make_shared<std::vector<ReComputeCbPtr>>();
|
||||||
|
+ for (const auto& builder : fragment_builders_) {
|
||||||
|
+ // returns nullopt if a null fragment is found.
|
||||||
|
+ ReComputeCbPtr recompute_fragment_cb = std::make_shared<ReComputeCb>();
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> fragment =
|
||||||
|
+ builder->computeFragment(headers, info, recompute_fragment_cb);
|
||||||
|
+ if (fragment == nullptr) {
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ if (*recompute_fragment_cb == nullptr) {
|
||||||
|
+ auto key_fragment = static_cast<StringKeyFragment*>(fragment.get());
|
||||||
|
+ auto copied_fragment = std::make_shared<StringKeyFragment>(*key_fragment);
|
||||||
|
+ auto recompute_cb =
|
||||||
|
+ std::make_shared<ReComputeCb>([copied_fragment]() -> std::unique_ptr<StringKeyFragment> {
|
||||||
|
+ return std::make_unique<StringKeyFragment>(*copied_fragment);
|
||||||
|
+ });
|
||||||
|
+ recompute_cbs->push_back(recompute_cb);
|
||||||
|
+ } else {
|
||||||
|
+ recomputeable = true;
|
||||||
|
+ recompute_cbs->push_back(recompute_fragment_cb);
|
||||||
|
+ }
|
||||||
|
+ key.addFragment(std::move(fragment));
|
||||||
|
+ }
|
||||||
|
+ if (recomputeable) {
|
||||||
|
+ recompute = [&recompute, recompute_cbs]() mutable -> ScopeKeyPtr {
|
||||||
|
+ ScopeKey new_key;
|
||||||
|
+ for (auto& cb : *recompute_cbs) {
|
||||||
|
+ auto new_fragment = (*cb)();
|
||||||
|
+ if (new_fragment == nullptr) {
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ if (*cb == nullptr) {
|
||||||
|
+ recompute = nullptr;
|
||||||
|
+ }
|
||||||
|
+ new_key.addFragment(std::move(new_fragment));
|
||||||
|
+ }
|
||||||
|
+ return std::make_unique<ScopeKey>(std::move(new_key));
|
||||||
|
+ };
|
||||||
|
+ }
|
||||||
|
+ return std::make_unique<ScopeKey>(std::move(key));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+ScopeKeyPtr ScopedConfigImpl::computeScopeKey(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info) const {
|
||||||
|
+ std::function<Router::ScopeKeyPtr()> recompute;
|
||||||
|
+ ScopeKeyPtr scope_key = scope_key_builder_.computeScopeKey(headers, info, recompute);
|
||||||
|
+ if (scope_key == nullptr) {
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ decltype(scoped_route_info_by_key_.begin()) iter;
|
||||||
|
+ do {
|
||||||
|
+ iter = scoped_route_info_by_key_.find(scope_key->hash());
|
||||||
|
+ if (iter != scoped_route_info_by_key_.end()) {
|
||||||
|
+ return scope_key;
|
||||||
|
+ }
|
||||||
|
+ } while (recompute != nullptr && (scope_key = recompute()));
|
||||||
|
+ return nullptr;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
bool ScopeKey::operator!=(const ScopeKey& other) const { return !(*this == other); }
|
||||||
|
|
||||||
|
bool ScopeKey::operator==(const ScopeKey& other) const {
|
||||||
|
@@ -95,6 +249,16 @@
|
||||||
|
: ScopeKeyBuilderBase(std::move(config)) {
|
||||||
|
for (const auto& fragment_builder : config_.fragments()) {
|
||||||
|
switch (fragment_builder.type_case()) {
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ case ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::kHostValueExtractor:
|
||||||
|
+ fragment_builders_.emplace_back(std::make_unique<HostValueExtractorImpl>(
|
||||||
|
+ ScopedRoutes::ScopeKeyBuilder::FragmentBuilder(fragment_builder)));
|
||||||
|
+ break;
|
||||||
|
+ case ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::kLocalPortValueExtractor:
|
||||||
|
+ fragment_builders_.emplace_back(std::make_unique<LocalPortValueExtractorImpl>(
|
||||||
|
+ ScopedRoutes::ScopeKeyBuilder::FragmentBuilder(fragment_builder)));
|
||||||
|
+ break;
|
||||||
|
+#endif
|
||||||
|
case ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::kHeaderValueExtractor:
|
||||||
|
fragment_builders_.emplace_back(std::make_unique<HeaderValueExtractorImpl>(
|
||||||
|
ScopedRoutes::ScopeKeyBuilder::FragmentBuilder(fragment_builder)));
|
||||||
|
@@ -143,6 +307,22 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
Router::ConfigConstSharedPtr
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ScopedConfigImpl::getRouteConfig(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info) const {
|
||||||
|
+ std::function<ScopeKeyPtr()> recompute;
|
||||||
|
+ ScopeKeyPtr scope_key = scope_key_builder_.computeScopeKey(headers, info, recompute);
|
||||||
|
+ if (scope_key == nullptr) {
|
||||||
|
+ return nullptr;
|
||||||
|
+ }
|
||||||
|
+ decltype(scoped_route_info_by_key_.begin()) iter;
|
||||||
|
+ do {
|
||||||
|
+ iter = scoped_route_info_by_key_.find(scope_key->hash());
|
||||||
|
+ if (iter != scoped_route_info_by_key_.end()) {
|
||||||
|
+ return iter->second->routeConfig();
|
||||||
|
+ }
|
||||||
|
+ } while (recompute != nullptr && (scope_key = recompute()));
|
||||||
|
+#else
|
||||||
|
ScopedConfigImpl::getRouteConfig(const Http::HeaderMap& headers) const {
|
||||||
|
ScopeKeyPtr scope_key = scope_key_builder_.computeScopeKey(headers);
|
||||||
|
if (scope_key == nullptr) {
|
||||||
|
@@ -152,6 +332,7 @@
|
||||||
|
if (iter != scoped_route_info_by_key_.end()) {
|
||||||
|
return iter->second->routeConfig();
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -Naur envoy/source/common/router/scoped_config_impl.h envoy-new/source/common/router/scoped_config_impl.h
|
||||||
|
--- envoy/source/common/router/scoped_config_impl.h 2024-01-04 21:07:36.000000000 +0800
|
||||||
|
+++ envoy-new/source/common/router/scoped_config_impl.h 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -22,6 +22,11 @@
|
||||||
|
|
||||||
|
using envoy::extensions::filters::network::http_connection_manager::v3::ScopedRoutes;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+using ReComputeCb = std::function<std::unique_ptr<ScopeKeyFragmentBase>()>;
|
||||||
|
+using ReComputeCbPtr = std::shared_ptr<ReComputeCb>;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Base class for fragment builders.
|
||||||
|
*/
|
||||||
|
@@ -36,6 +41,12 @@
|
||||||
|
virtual std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
computeFragment(const Http::HeaderMap& headers) const PURE;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ virtual std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+ computeFragment(const Http::HeaderMap& headers, const StreamInfo::StreamInfo& info,
|
||||||
|
+ ReComputeCbPtr& recompute) const PURE;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
protected:
|
||||||
|
const ScopedRoutes::ScopeKeyBuilder::FragmentBuilder config_;
|
||||||
|
};
|
||||||
|
@@ -47,11 +58,54 @@
|
||||||
|
std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
computeFragment(const Http::HeaderMap& headers) const override;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> computeFragment(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info,
|
||||||
|
+ ReComputeCbPtr& recompute) const override;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
const ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::HeaderValueExtractor&
|
||||||
|
header_value_extractor_config_;
|
||||||
|
};
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+class HostValueExtractorImpl : public FragmentBuilderBase {
|
||||||
|
+public:
|
||||||
|
+ explicit HostValueExtractorImpl(ScopedRoutes::ScopeKeyBuilder::FragmentBuilder&& config);
|
||||||
|
+
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase>
|
||||||
|
+ computeFragment(const Http::HeaderMap& headers) const override;
|
||||||
|
+
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> computeFragment(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info,
|
||||||
|
+ ReComputeCbPtr& recompute) const override;
|
||||||
|
+
|
||||||
|
+private:
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> reComputeHelper(const std::string& host,
|
||||||
|
+ ReComputeCbPtr& next_recompute,
|
||||||
|
+ uint32_t recompute_seq) const;
|
||||||
|
+
|
||||||
|
+ static constexpr uint32_t DefaultMaxRecomputeNum = 100;
|
||||||
|
+
|
||||||
|
+ const ScopedRoutes::ScopeKeyBuilder::FragmentBuilder::HostValueExtractor&
|
||||||
|
+ host_value_extractor_config_;
|
||||||
|
+ const uint32_t max_recompute_num_;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+class LocalPortValueExtractorImpl : public FragmentBuilderBase {
|
||||||
|
+public:
|
||||||
|
+ explicit LocalPortValueExtractorImpl(ScopedRoutes::ScopeKeyBuilder::FragmentBuilder&& config);
|
||||||
|
+
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> computeFragment(const Http::HeaderMap&) const override {
|
||||||
|
+ return nullptr;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ std::unique_ptr<ScopeKeyFragmentBase> computeFragment(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info,
|
||||||
|
+ ReComputeCbPtr& recompute) const override;
|
||||||
|
+};
|
||||||
|
+#endif
|
||||||
|
/**
|
||||||
|
* Base class for ScopeKeyBuilder implementations.
|
||||||
|
*/
|
||||||
|
@@ -64,6 +118,12 @@
|
||||||
|
// Computes scope key for given headers, returns nullptr if a key can't be computed.
|
||||||
|
virtual ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers) const PURE;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ virtual ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info,
|
||||||
|
+ std::function<ScopeKeyPtr()>& recompute) const PURE;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
protected:
|
||||||
|
const ScopedRoutes::ScopeKeyBuilder config_;
|
||||||
|
};
|
||||||
|
@@ -74,6 +134,11 @@
|
||||||
|
|
||||||
|
ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers) const override;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers, const StreamInfo::StreamInfo& info,
|
||||||
|
+ std::function<ScopeKeyPtr()>& recompute) const override;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
std::vector<std::unique_ptr<FragmentBuilderBase>> fragment_builders_;
|
||||||
|
};
|
||||||
|
@@ -118,10 +183,20 @@
|
||||||
|
void removeRoutingScopes(const std::vector<std::string>& scope_names);
|
||||||
|
|
||||||
|
// Envoy::Router::ScopedConfig
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ Router::ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info) const override;
|
||||||
|
+#else
|
||||||
|
Router::ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap& headers) const override;
|
||||||
|
+#endif
|
||||||
|
// The return value is not null only if the scope corresponding to the header exists.
|
||||||
|
ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers) const override;
|
||||||
|
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ ScopeKeyPtr computeScopeKey(const Http::HeaderMap& headers,
|
||||||
|
+ const StreamInfo::StreamInfo& info) const override;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
ScopeKeyBuilderImpl scope_key_builder_;
|
||||||
|
// From scope name to cached ScopedRouteInfo.
|
||||||
|
@@ -135,9 +210,16 @@
|
||||||
|
*/
|
||||||
|
class NullScopedConfigImpl : public ScopedConfig {
|
||||||
|
public:
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+ Router::ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap&,
|
||||||
|
+ const StreamInfo::StreamInfo&) const override {
|
||||||
|
+ return std::make_shared<const NullConfigImpl>();
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
Router::ConfigConstSharedPtr getRouteConfig(const Http::HeaderMap&) const override {
|
||||||
|
return std::make_shared<const NullConfigImpl>();
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Router
|
||||||
|
diff -Naur envoy/source/extensions/filters/http/on_demand/on_demand_update.cc envoy-new/source/extensions/filters/http/on_demand/on_demand_update.cc
|
||||||
|
--- envoy/source/extensions/filters/http/on_demand/on_demand_update.cc 2024-01-04 21:07:33.000000000 +0800
|
||||||
|
+++ envoy-new/source/extensions/filters/http/on_demand/on_demand_update.cc 2024-01-04 21:09:13.000000000 +0800
|
||||||
|
@@ -50,7 +50,11 @@
|
||||||
|
// This is the callback which is called when an update requested in requestRouteConfigUpdate()
|
||||||
|
// has been propagated to workers, at which point the request processing is restarted from the
|
||||||
|
// beginning.
|
||||||
|
+#if defined(ALIMESH)
|
||||||
|
+void OnDemandRouteUpdate::onRouteConfigUpdateCompletion(bool) {
|
||||||
|
+#else
|
||||||
|
void OnDemandRouteUpdate::onRouteConfigUpdateCompletion(bool route_exists) {
|
||||||
|
+#endif
|
||||||
|
filter_iteration_state_ = Http::FilterHeadersStatus::Continue;
|
||||||
|
|
||||||
|
// Don't call continueDecoding in the middle of decodeHeaders()
|
||||||
|
@@ -58,12 +62,14 @@
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if !defined(ALIMESH)
|
||||||
|
if (route_exists && // route can be resolved after an on-demand
|
||||||
|
// VHDS update
|
||||||
|
!callbacks_->decodingBuffer() && // Redirects with body not yet supported.
|
||||||
|
callbacks_->recreateStream(/*headers=*/nullptr)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
// route cannot be resolved after an on-demand VHDS update or
|
||||||
|
// recreating stream failed, continue the filter-chain
|
||||||
931
envoy/1.20/patches/go-control-plane/20240104-enhance-srds.patch
Normal file
931
envoy/1.20/patches/go-control-plane/20240104-enhance-srds.patch
Normal file
@@ -0,0 +1,931 @@
|
|||||||
|
diff -Naur go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.go go-control-plane-new/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.go
|
||||||
|
--- go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.go 2024-01-04 21:07:22.000000000 +0800
|
||||||
|
+++ go-control-plane-new/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.go 2024-01-04 21:02:10.000000000 +0800
|
||||||
|
@@ -2286,6 +2286,8 @@
|
||||||
|
|
||||||
|
// Types that are assignable to Type:
|
||||||
|
// *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_
|
||||||
|
+ // *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_
|
||||||
|
+ // *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_
|
||||||
|
Type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type `protobuf_oneof:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2335,6 +2337,20 @@
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetHostValueExtractor() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor {
|
||||||
|
+ if x, ok := x.GetType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_); ok {
|
||||||
|
+ return x.HostValueExtractor
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetLocalPortValueExtractor() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor {
|
||||||
|
+ if x, ok := x.GetType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_); ok {
|
||||||
|
+ return x.LocalPortValueExtractor
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type interface {
|
||||||
|
isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type()
|
||||||
|
}
|
||||||
|
@@ -2344,9 +2360,23 @@
|
||||||
|
HeaderValueExtractor *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor `protobuf:"bytes,1,opt,name=header_value_extractor,json=headerValueExtractor,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_ struct {
|
||||||
|
+ HostValueExtractor *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor `protobuf:"bytes,101,opt,name=host_value_extractor,json=hostValueExtractor,proto3,oneof"`
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_ struct {
|
||||||
|
+ LocalPortValueExtractor *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor `protobuf:"bytes,102,opt,name=local_port_value_extractor,json=localPortValueExtractor,proto3,oneof"`
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() {
|
||||||
|
}
|
||||||
|
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() {
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() {
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// Specifies how the value of a header should be extracted.
|
||||||
|
// The following example maps the structure of a header to the fields in this message.
|
||||||
|
//
|
||||||
|
@@ -2475,6 +2505,92 @@
|
||||||
|
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() {
|
||||||
|
}
|
||||||
|
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor struct {
|
||||||
|
+ state protoimpl.MessageState
|
||||||
|
+ sizeCache protoimpl.SizeCache
|
||||||
|
+ unknownFields protoimpl.UnknownFields
|
||||||
|
+
|
||||||
|
+ // The maximum number of host superset recomputes. If not specified, defaults to 100.
|
||||||
|
+ MaxRecomputeNum *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_recompute_num,json=maxRecomputeNum,proto3" json:"max_recompute_num,omitempty"`
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) Reset() {
|
||||||
|
+ *x = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor{}
|
||||||
|
+ if protoimpl.UnsafeEnabled {
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[18]
|
||||||
|
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
+ ms.StoreMessageInfo(mi)
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) String() string {
|
||||||
|
+ return protoimpl.X.MessageStringOf(x)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) ProtoMessage() {}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) ProtoReflect() protoreflect.Message {
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[18]
|
||||||
|
+ if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
+ if ms.LoadMessageInfo() == nil {
|
||||||
|
+ ms.StoreMessageInfo(mi)
|
||||||
|
+ }
|
||||||
|
+ return ms
|
||||||
|
+ }
|
||||||
|
+ return mi.MessageOf(x)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Deprecated: Use ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor.ProtoReflect.Descriptor instead.
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) Descriptor() ([]byte, []int) {
|
||||||
|
+ return file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_rawDescGZIP(), []int{5, 0, 0, 1}
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) GetMaxRecomputeNum() *wrappers.UInt32Value {
|
||||||
|
+ if x != nil {
|
||||||
|
+ return x.MaxRecomputeNum
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor struct {
|
||||||
|
+ state protoimpl.MessageState
|
||||||
|
+ sizeCache protoimpl.SizeCache
|
||||||
|
+ unknownFields protoimpl.UnknownFields
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) Reset() {
|
||||||
|
+ *x = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor{}
|
||||||
|
+ if protoimpl.UnsafeEnabled {
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[19]
|
||||||
|
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
+ ms.StoreMessageInfo(mi)
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) String() string {
|
||||||
|
+ return protoimpl.X.MessageStringOf(x)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) ProtoMessage() {}
|
||||||
|
+
|
||||||
|
+func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) ProtoReflect() protoreflect.Message {
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[19]
|
||||||
|
+ if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
+ if ms.LoadMessageInfo() == nil {
|
||||||
|
+ ms.StoreMessageInfo(mi)
|
||||||
|
+ }
|
||||||
|
+ return ms
|
||||||
|
+ }
|
||||||
|
+ return mi.MessageOf(x)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Deprecated: Use ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor.ProtoReflect.Descriptor instead.
|
||||||
|
+func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) Descriptor() ([]byte, []int) {
|
||||||
|
+ return file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_rawDescGZIP(), []int{5, 0, 0, 2}
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// Specifies a header field's key value pair to match on.
|
||||||
|
type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
@@ -2494,7 +2610,7 @@
|
||||||
|
func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Reset() {
|
||||||
|
*x = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
- mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[18]
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[20]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
@@ -2507,7 +2623,7 @@
|
||||||
|
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) ProtoReflect() protoreflect.Message {
|
||||||
|
- mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[18]
|
||||||
|
+ mi := &file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[20]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@@ -3079,7 +3195,7 @@
|
||||||
|
0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
|
||||||
|
0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52,
|
||||||
|
0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||||
|
- 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xe9, 0x0e, 0x0a, 0x0c, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||||
|
+ 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xe1, 0x14, 0x0a, 0x0c, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||||
|
0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
||||||
|
0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04,
|
||||||
|
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x11, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x6b,
|
||||||
|
@@ -3114,7 +3230,7 @@
|
||||||
|
0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||||
|
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||||
|
0x64, 0x52, 0x64, 0x73, 0x48, 0x00, 0x52, 0x09, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x64,
|
||||||
|
- 0x73, 0x1a, 0xd9, 0x09, 0x0a, 0x0f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75,
|
||||||
|
+ 0x73, 0x1a, 0xd1, 0x0f, 0x0a, 0x0f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75,
|
||||||
|
0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x91, 0x01, 0x0a, 0x09, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
|
||||||
|
0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x69, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
|
||||||
|
0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c,
|
||||||
|
@@ -3124,7 +3240,7 @@
|
||||||
|
0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69,
|
||||||
|
0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69,
|
||||||
|
0x6c, 0x64, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09,
|
||||||
|
- 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0xd5, 0x07, 0x0a, 0x0f, 0x46, 0x72,
|
||||||
|
+ 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0xcd, 0x0d, 0x0a, 0x0f, 0x46, 0x72,
|
||||||
|
0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0xb6, 0x01,
|
||||||
|
0x0a, 0x16, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65,
|
||||||
|
0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x7e,
|
||||||
|
@@ -3137,131 +3253,178 @@
|
||||||
|
0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
|
||||||
|
0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00,
|
||||||
|
0x52, 0x14, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74,
|
||||||
|
- 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x8f, 0x05, 0x0a, 0x14, 0x48, 0x65, 0x61, 0x64, 0x65,
|
||||||
|
- 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12,
|
||||||
|
- 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa,
|
||||||
|
- 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11,
|
||||||
|
- 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f,
|
||||||
|
- 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
|
- 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64,
|
||||||
|
- 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65,
|
||||||
|
- 0x78, 0x12, 0xa5, 0x01, 0x0a, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,
|
||||||
|
- 0x01, 0x28, 0x0b, 0x32, 0x88, 0x01, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74,
|
||||||
|
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e,
|
||||||
|
+ 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0xb0, 0x01, 0x0a, 0x14, 0x68, 0x6f, 0x73, 0x74, 0x5f,
|
||||||
|
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18,
|
||||||
|
+ 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x7c, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78,
|
||||||
|
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73,
|
||||||
|
+ 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f,
|
||||||
|
+ 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
|
||||||
|
+ 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73,
|
||||||
|
+ 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
|
||||||
|
+ 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
|
||||||
|
+ 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63,
|
||||||
|
+ 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||||
|
+ 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0xc1, 0x01, 0x0a, 0x1a, 0x6c, 0x6f,
|
||||||
|
+ 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65,
|
||||||
|
+ 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x81,
|
||||||
|
+ 0x01, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||||
|
+ 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
|
||||||
|
+ 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
||||||
|
+ 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63,
|
||||||
|
+ 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||||
|
+ 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d,
|
||||||
|
+ 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c,
|
||||||
|
+ 0x50, 0x6f, 0x72, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74,
|
||||||
|
+ 0x6f, 0x72, 0x48, 0x00, 0x52, 0x17, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x56,
|
||||||
|
+ 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x8f, 0x05,
|
||||||
|
+ 0x0a, 0x14, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74,
|
||||||
|
+ 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
|
||||||
|
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e,
|
||||||
|
+ 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73,
|
||||||
|
+ 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10,
|
||||||
|
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72,
|
||||||
|
+ 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48,
|
||||||
|
+ 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0xa5, 0x01, 0x0a, 0x07, 0x65, 0x6c, 0x65,
|
||||||
|
+ 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x88, 0x01, 0x2e, 0x65, 0x6e,
|
||||||
|
+ 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66,
|
||||||
|
+ 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68,
|
||||||
|
+ 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d,
|
||||||
|
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64,
|
||||||
|
+ 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42,
|
||||||
|
+ 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42,
|
||||||
|
+ 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c,
|
||||||
|
+ 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x76, 0x45, 0x6c,
|
||||||
|
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
|
+ 0x1a, 0xdb, 0x01, 0x0a, 0x09, 0x4b, 0x76, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25,
|
||||||
|
+ 0x0a, 0x09, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
|
+ 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x65, 0x70, 0x61,
|
||||||
|
+ 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01,
|
||||||
|
+ 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79,
|
||||||
|
+ 0x3a, 0x8b, 0x01, 0x9a, 0xc5, 0x88, 0x1e, 0x85, 0x01, 0x0a, 0x82, 0x01, 0x65, 0x6e, 0x76, 0x6f,
|
||||||
|
+ 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e,
|
||||||
|
0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e,
|
||||||
|
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e,
|
||||||
|
- 0x76, 0x33, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e,
|
||||||
|
+ 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e,
|
||||||
|
0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e,
|
||||||
|
0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e,
|
||||||
|
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61,
|
||||||
|
- 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x76, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00,
|
||||||
|
- 0x52, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0xdb, 0x01, 0x0a, 0x09, 0x4b, 0x76,
|
||||||
|
- 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x09, 0x73, 0x65, 0x70, 0x61, 0x72,
|
||||||
|
- 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
|
||||||
|
- 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x19,
|
||||||
|
- 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04,
|
||||||
|
- 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x3a, 0x8b, 0x01, 0x9a, 0xc5, 0x88, 0x1e,
|
||||||
|
- 0x85, 0x01, 0x0a, 0x82, 0x01, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||||
|
+ 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x76, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x7f,
|
||||||
|
+ 0x9a, 0xc5, 0x88, 0x1e, 0x7a, 0x0a, 0x78, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e,
|
||||||
|
+ 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
|
||||||
|
+ 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
||||||
|
+ 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63,
|
||||||
|
+ 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||||
|
+ 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d,
|
||||||
|
+ 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65,
|
||||||
|
+ 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x42,
|
||||||
|
+ 0x0e, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x1a,
|
||||||
|
+ 0xdd, 0x01, 0x0a, 0x12, 0x48, 0x6f, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74,
|
||||||
|
+ 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65,
|
||||||
|
+ 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
|
+ 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
|
+ 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
|
||||||
|
+ 0x0f, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x4e, 0x75, 0x6d,
|
||||||
|
+ 0x3a, 0x7d, 0x9a, 0xc5, 0x88, 0x1e, 0x78, 0x0a, 0x76, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
|
||||||
|
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74,
|
||||||
|
+ 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
|
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
|
||||||
|
+ 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f,
|
||||||
|
+ 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61,
|
||||||
|
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x6f, 0x73,
|
||||||
|
+ 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x1a,
|
||||||
|
+ 0x9e, 0x01, 0x0a, 0x17, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x61, 0x6c,
|
||||||
|
+ 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x3a, 0x82, 0x01, 0x9a, 0xc5,
|
||||||
|
+ 0x88, 0x1e, 0x7d, 0x0a, 0x7b, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||||
|
0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
|
||||||
|
0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70,
|
||||||
|
0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65,
|
||||||
|
0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
|
||||||
|
- 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56,
|
||||||
|
- 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x76,
|
||||||
|
- 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x7f, 0x9a, 0xc5, 0x88, 0x1e, 0x7a, 0x0a, 0x78,
|
||||||
|
- 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c,
|
||||||
|
- 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70,
|
||||||
|
- 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61,
|
||||||
|
- 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75,
|
||||||
|
- 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c,
|
||||||
|
- 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c,
|
||||||
|
- 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45,
|
||||||
|
- 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x72,
|
||||||
|
- 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x6a, 0x9a, 0xc5, 0x88, 0x1e, 0x65, 0x0a,
|
||||||
|
- 0x63, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69,
|
||||||
|
- 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74,
|
||||||
|
- 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e,
|
||||||
|
- 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f,
|
||||||
|
- 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69,
|
||||||
|
- 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69,
|
||||||
|
- 0x6c, 0x64, 0x65, 0x72, 0x42, 0x0b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x03, 0xf8, 0x42,
|
||||||
|
- 0x01, 0x3a, 0x5a, 0x9a, 0xc5, 0x88, 0x1e, 0x55, 0x0a, 0x53, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
|
||||||
|
- 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65,
|
||||||
|
- 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
|
||||||
|
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32,
|
||||||
|
- 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63,
|
||||||
|
- 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x4a, 0x9a,
|
||||||
|
- 0xc5, 0x88, 0x1e, 0x45, 0x0a, 0x43, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
|
||||||
|
- 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
|
||||||
|
- 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
- 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f,
|
||||||
|
- 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x42, 0x17, 0x0a, 0x10, 0x63, 0x6f, 0x6e,
|
||||||
|
- 0x66, 0x69, 0x67, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x03, 0xf8,
|
||||||
|
- 0x42, 0x01, 0x22, 0xf1, 0x01, 0x0a, 0x09, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73,
|
||||||
|
- 0x12, 0x65, 0x0a, 0x18, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x63,
|
||||||
|
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
- 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||||
|
- 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||||
|
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01,
|
||||||
|
- 0x52, 0x15, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
||||||
|
- 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x72, 0x64, 0x73, 0x5f,
|
||||||
|
- 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f,
|
||||||
|
- 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73,
|
||||||
|
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x47, 0x9a,
|
||||||
|
- 0xc5, 0x88, 0x1e, 0x42, 0x0a, 0x40, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
|
||||||
|
- 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
|
||||||
|
- 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
- 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f,
|
||||||
|
- 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x0a, 0x48, 0x74, 0x74, 0x70, 0x46,
|
||||||
|
- 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
||||||
|
- 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61,
|
||||||
|
- 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
|
||||||
|
- 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
|
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00,
|
||||||
|
- 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x58, 0x0a,
|
||||||
|
- 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72,
|
||||||
|
- 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
|
||||||
|
- 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x45,
|
||||||
|
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f,
|
||||||
|
- 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69,
|
||||||
|
- 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6f, 0x70,
|
||||||
|
- 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73,
|
||||||
|
- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3a, 0x48, 0x9a, 0xc5, 0x88, 0x1e, 0x43, 0x0a,
|
||||||
|
- 0x41, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69,
|
||||||
|
- 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74,
|
||||||
|
- 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e,
|
||||||
|
- 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x46, 0x69, 0x6c, 0x74,
|
||||||
|
- 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70,
|
||||||
|
- 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x06, 0x63,
|
||||||
|
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
|
- 0x74, 0x49, 0x44, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c,
|
||||||
|
- 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
- 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x43,
|
||||||
|
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x50, 0x9a, 0xc5, 0x88, 0x1e, 0x4b, 0x0a, 0x49, 0x65, 0x6e,
|
||||||
|
+ 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f,
|
||||||
|
+ 0x72, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72,
|
||||||
|
+ 0x3a, 0x6a, 0x9a, 0xc5, 0x88, 0x1e, 0x65, 0x0a, 0x63, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
|
||||||
|
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74,
|
||||||
|
+ 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
|
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
|
||||||
|
+ 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f,
|
||||||
|
+ 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x46, 0x72, 0x61,
|
||||||
|
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x42, 0x0b, 0x0a, 0x04,
|
||||||
|
+ 0x74, 0x79, 0x70, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x3a, 0x5a, 0x9a, 0xc5, 0x88, 0x1e, 0x55,
|
||||||
|
+ 0x0a, 0x53, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66,
|
||||||
|
+ 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74,
|
||||||
|
+ 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61,
|
||||||
|
+ 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52,
|
||||||
|
+ 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x75,
|
||||||
|
+ 0x69, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x4a, 0x9a, 0xc5, 0x88, 0x1e, 0x45, 0x0a, 0x43, 0x65, 0x6e,
|
||||||
|
0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65,
|
||||||
|
0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63,
|
||||||
|
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
|
||||||
|
- 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x45, 0x78,
|
||||||
|
- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8e, 0x01, 0x0a, 0x20, 0x45, 0x6e, 0x76, 0x6f,
|
||||||
|
- 0x79, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
|
||||||
|
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x6a, 0x0a, 0x06,
|
||||||
|
- 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x65,
|
||||||
|
- 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
|
||||||
|
- 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e,
|
||||||
|
- 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||||
|
- 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x43,
|
||||||
|
- 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
|
||||||
|
- 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x71, 0x0a, 0x49, 0x69, 0x6f, 0x2e, 0x65,
|
||||||
|
- 0x6e, 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
|
||||||
|
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65,
|
||||||
|
- 0x72, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f,
|
||||||
|
- 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67,
|
||||||
|
- 0x65, 0x72, 0x2e, 0x76, 0x33, 0x42, 0x1a, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
|
||||||
|
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74,
|
||||||
|
- 0x6f, 0x50, 0x01, 0xba, 0x80, 0xc8, 0xd1, 0x06, 0x02, 0x10, 0x02, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||||
|
- 0x74, 0x6f, 0x33,
|
||||||
|
+ 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||||
|
+ 0x73, 0x42, 0x17, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x70, 0x65, 0x63,
|
||||||
|
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xf1, 0x01, 0x0a, 0x09, 0x53,
|
||||||
|
+ 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x12, 0x65, 0x0a, 0x18, 0x73, 0x63, 0x6f, 0x70,
|
||||||
|
+ 0x65, 0x64, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x6f,
|
||||||
|
+ 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76,
|
||||||
|
+ 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76,
|
||||||
|
+ 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x08,
|
||||||
|
+ 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x15, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64,
|
||||||
|
+ 0x52, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
|
||||||
|
+ 0x34, 0x0a, 0x16, 0x73, 0x72, 0x64, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||||
|
+ 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
|
+ 0x14, 0x73, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4c, 0x6f,
|
||||||
|
+ 0x63, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x47, 0x9a, 0xc5, 0x88, 0x1e, 0x42, 0x0a, 0x40, 0x65, 0x6e,
|
||||||
|
+ 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65,
|
||||||
|
+ 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63,
|
||||||
|
+ 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
|
||||||
|
+ 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x22, 0xcc,
|
||||||
|
+ 0x02, 0x0a, 0x0a, 0x48, 0x74, 0x74, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a,
|
||||||
|
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04,
|
||||||
|
+ 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x74, 0x79,
|
||||||
|
+ 0x70, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
+ 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||||
|
+ 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x43,
|
||||||
|
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x58, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
|
||||||
|
+ 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
|
+ 0x2b, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63,
|
||||||
|
+ 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
+ 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f,
|
||||||
|
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12,
|
||||||
|
+ 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x06,
|
||||||
|
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
|
||||||
|
+ 0x3a, 0x48, 0x9a, 0xc5, 0x88, 0x1e, 0x43, 0x0a, 0x41, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
|
||||||
|
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74,
|
||||||
|
+ 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
|
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
|
||||||
|
+ 0x48, 0x74, 0x74, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f,
|
||||||
|
+ 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a,
|
||||||
|
+ 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x9f, 0x01,
|
||||||
|
+ 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x45, 0x78, 0x74, 0x65, 0x6e,
|
||||||
|
+ 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x63, 0x6f,
|
||||||
|
+ 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f,
|
||||||
|
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79,
|
||||||
|
+ 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x50, 0x9a,
|
||||||
|
+ 0xc5, 0x88, 0x1e, 0x4b, 0x0a, 0x49, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
|
||||||
|
+ 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
|
||||||
|
+ 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
+ 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x71,
|
||||||
|
+ 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22,
|
||||||
|
+ 0x8e, 0x01, 0x0a, 0x20, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x48,
|
||||||
|
+ 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e,
|
||||||
|
+ 0x61, 0x67, 0x65, 0x72, 0x12, 0x6a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01,
|
||||||
|
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74,
|
||||||
|
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e,
|
||||||
|
+ 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e,
|
||||||
|
+ 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e,
|
||||||
|
+ 0x76, 0x33, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
+ 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||||
|
+ 0x42, 0x71, 0x0a, 0x49, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78,
|
||||||
|
+ 0x79, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||||
|
+ 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
|
||||||
|
+ 0x72, 0x6b, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
||||||
|
+ 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x42, 0x1a, 0x48,
|
||||||
|
+ 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e,
|
||||||
|
+ 0x61, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0xba, 0x80, 0xc8, 0xd1, 0x06,
|
||||||
|
+ 0x02, 0x10, 0x02, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
@@ -3277,7 +3440,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
|
||||||
|
-var file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
|
||||||
|
+var file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
|
||||||
|
var file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_goTypes = []interface{}{
|
||||||
|
(HttpConnectionManager_CodecType)(0), // 0: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.CodecType
|
||||||
|
(HttpConnectionManager_ServerHeaderTransformation)(0), // 1: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.ServerHeaderTransformation
|
||||||
|
@@ -3302,102 +3465,107 @@
|
||||||
|
(*ScopedRoutes_ScopeKeyBuilder)(nil), // 20: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder
|
||||||
|
(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder)(nil), // 21: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder
|
||||||
|
(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor)(nil), // 22: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor
|
||||||
|
- (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement)(nil), // 23: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement
|
||||||
|
- (*v32.RouteConfiguration)(nil), // 24: envoy.config.route.v3.RouteConfiguration
|
||||||
|
- (*wrappers.BoolValue)(nil), // 25: google.protobuf.BoolValue
|
||||||
|
- (*v3.HttpProtocolOptions)(nil), // 26: envoy.config.core.v3.HttpProtocolOptions
|
||||||
|
- (*v3.Http1ProtocolOptions)(nil), // 27: envoy.config.core.v3.Http1ProtocolOptions
|
||||||
|
- (*v3.Http2ProtocolOptions)(nil), // 28: envoy.config.core.v3.Http2ProtocolOptions
|
||||||
|
- (*v3.Http3ProtocolOptions)(nil), // 29: envoy.config.core.v3.Http3ProtocolOptions
|
||||||
|
- (*v3.SchemeHeaderTransformation)(nil), // 30: envoy.config.core.v3.SchemeHeaderTransformation
|
||||||
|
- (*wrappers.UInt32Value)(nil), // 31: google.protobuf.UInt32Value
|
||||||
|
- (*duration.Duration)(nil), // 32: google.protobuf.Duration
|
||||||
|
- (*v31.AccessLog)(nil), // 33: envoy.config.accesslog.v3.AccessLog
|
||||||
|
- (*v3.TypedExtensionConfig)(nil), // 34: envoy.config.core.v3.TypedExtensionConfig
|
||||||
|
- (*v3.SubstitutionFormatString)(nil), // 35: envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
- (*v31.AccessLogFilter)(nil), // 36: envoy.config.accesslog.v3.AccessLogFilter
|
||||||
|
- (*v3.DataSource)(nil), // 37: envoy.config.core.v3.DataSource
|
||||||
|
- (*v3.HeaderValueOption)(nil), // 38: envoy.config.core.v3.HeaderValueOption
|
||||||
|
- (*v3.ConfigSource)(nil), // 39: envoy.config.core.v3.ConfigSource
|
||||||
|
- (*v32.ScopedRouteConfiguration)(nil), // 40: envoy.config.route.v3.ScopedRouteConfiguration
|
||||||
|
- (*any.Any)(nil), // 41: google.protobuf.Any
|
||||||
|
- (*v3.ExtensionConfigSource)(nil), // 42: envoy.config.core.v3.ExtensionConfigSource
|
||||||
|
- (*v33.Percent)(nil), // 43: envoy.type.v3.Percent
|
||||||
|
- (*v34.CustomTag)(nil), // 44: envoy.type.tracing.v3.CustomTag
|
||||||
|
- (*v35.Tracing_Http)(nil), // 45: envoy.config.trace.v3.Tracing.Http
|
||||||
|
- (*v36.PathTransformation)(nil), // 46: envoy.type.http.v3.PathTransformation
|
||||||
|
+ (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor)(nil), // 23: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HostValueExtractor
|
||||||
|
+ (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor)(nil), // 24: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.LocalPortValueExtractor
|
||||||
|
+ (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement)(nil), // 25: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement
|
||||||
|
+ (*v32.RouteConfiguration)(nil), // 26: envoy.config.route.v3.RouteConfiguration
|
||||||
|
+ (*wrappers.BoolValue)(nil), // 27: google.protobuf.BoolValue
|
||||||
|
+ (*v3.HttpProtocolOptions)(nil), // 28: envoy.config.core.v3.HttpProtocolOptions
|
||||||
|
+ (*v3.Http1ProtocolOptions)(nil), // 29: envoy.config.core.v3.Http1ProtocolOptions
|
||||||
|
+ (*v3.Http2ProtocolOptions)(nil), // 30: envoy.config.core.v3.Http2ProtocolOptions
|
||||||
|
+ (*v3.Http3ProtocolOptions)(nil), // 31: envoy.config.core.v3.Http3ProtocolOptions
|
||||||
|
+ (*v3.SchemeHeaderTransformation)(nil), // 32: envoy.config.core.v3.SchemeHeaderTransformation
|
||||||
|
+ (*wrappers.UInt32Value)(nil), // 33: google.protobuf.UInt32Value
|
||||||
|
+ (*duration.Duration)(nil), // 34: google.protobuf.Duration
|
||||||
|
+ (*v31.AccessLog)(nil), // 35: envoy.config.accesslog.v3.AccessLog
|
||||||
|
+ (*v3.TypedExtensionConfig)(nil), // 36: envoy.config.core.v3.TypedExtensionConfig
|
||||||
|
+ (*v3.SubstitutionFormatString)(nil), // 37: envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
+ (*v31.AccessLogFilter)(nil), // 38: envoy.config.accesslog.v3.AccessLogFilter
|
||||||
|
+ (*v3.DataSource)(nil), // 39: envoy.config.core.v3.DataSource
|
||||||
|
+ (*v3.HeaderValueOption)(nil), // 40: envoy.config.core.v3.HeaderValueOption
|
||||||
|
+ (*v3.ConfigSource)(nil), // 41: envoy.config.core.v3.ConfigSource
|
||||||
|
+ (*v32.ScopedRouteConfiguration)(nil), // 42: envoy.config.route.v3.ScopedRouteConfiguration
|
||||||
|
+ (*any.Any)(nil), // 43: google.protobuf.Any
|
||||||
|
+ (*v3.ExtensionConfigSource)(nil), // 44: envoy.config.core.v3.ExtensionConfigSource
|
||||||
|
+ (*v33.Percent)(nil), // 45: envoy.type.v3.Percent
|
||||||
|
+ (*v34.CustomTag)(nil), // 46: envoy.type.tracing.v3.CustomTag
|
||||||
|
+ (*v35.Tracing_Http)(nil), // 47: envoy.config.trace.v3.Tracing.Http
|
||||||
|
+ (*v36.PathTransformation)(nil), // 48: envoy.type.http.v3.PathTransformation
|
||||||
|
}
|
||||||
|
var file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_depIdxs = []int32{
|
||||||
|
0, // 0: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.codec_type:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.CodecType
|
||||||
|
8, // 1: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.rds:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.Rds
|
||||||
|
- 24, // 2: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.route_config:type_name -> envoy.config.route.v3.RouteConfiguration
|
||||||
|
+ 26, // 2: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.route_config:type_name -> envoy.config.route.v3.RouteConfiguration
|
||||||
|
10, // 3: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.scoped_routes:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes
|
||||||
|
12, // 4: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http_filters:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
|
||||||
|
- 25, // 5: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.add_user_agent:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 27, // 5: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.add_user_agent:type_name -> google.protobuf.BoolValue
|
||||||
|
15, // 6: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.tracing:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing
|
||||||
|
- 26, // 7: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.common_http_protocol_options:type_name -> envoy.config.core.v3.HttpProtocolOptions
|
||||||
|
- 27, // 8: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http_protocol_options:type_name -> envoy.config.core.v3.Http1ProtocolOptions
|
||||||
|
- 28, // 9: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http2_protocol_options:type_name -> envoy.config.core.v3.Http2ProtocolOptions
|
||||||
|
- 29, // 10: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http3_protocol_options:type_name -> envoy.config.core.v3.Http3ProtocolOptions
|
||||||
|
+ 28, // 7: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.common_http_protocol_options:type_name -> envoy.config.core.v3.HttpProtocolOptions
|
||||||
|
+ 29, // 8: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http_protocol_options:type_name -> envoy.config.core.v3.Http1ProtocolOptions
|
||||||
|
+ 30, // 9: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http2_protocol_options:type_name -> envoy.config.core.v3.Http2ProtocolOptions
|
||||||
|
+ 31, // 10: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.http3_protocol_options:type_name -> envoy.config.core.v3.Http3ProtocolOptions
|
||||||
|
1, // 11: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.server_header_transformation:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.ServerHeaderTransformation
|
||||||
|
- 30, // 12: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.scheme_header_transformation:type_name -> envoy.config.core.v3.SchemeHeaderTransformation
|
||||||
|
- 31, // 13: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.max_request_headers_kb:type_name -> google.protobuf.UInt32Value
|
||||||
|
- 32, // 14: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_idle_timeout:type_name -> google.protobuf.Duration
|
||||||
|
- 32, // 15: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.request_timeout:type_name -> google.protobuf.Duration
|
||||||
|
- 32, // 16: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.request_headers_timeout:type_name -> google.protobuf.Duration
|
||||||
|
- 32, // 17: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.drain_timeout:type_name -> google.protobuf.Duration
|
||||||
|
- 32, // 18: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.delayed_close_timeout:type_name -> google.protobuf.Duration
|
||||||
|
- 33, // 19: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.access_log:type_name -> envoy.config.accesslog.v3.AccessLog
|
||||||
|
- 25, // 20: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address:type_name -> google.protobuf.BoolValue
|
||||||
|
- 34, // 21: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.original_ip_detection_extensions:type_name -> envoy.config.core.v3.TypedExtensionConfig
|
||||||
|
+ 32, // 12: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.scheme_header_transformation:type_name -> envoy.config.core.v3.SchemeHeaderTransformation
|
||||||
|
+ 33, // 13: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.max_request_headers_kb:type_name -> google.protobuf.UInt32Value
|
||||||
|
+ 34, // 14: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_idle_timeout:type_name -> google.protobuf.Duration
|
||||||
|
+ 34, // 15: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.request_timeout:type_name -> google.protobuf.Duration
|
||||||
|
+ 34, // 16: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.request_headers_timeout:type_name -> google.protobuf.Duration
|
||||||
|
+ 34, // 17: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.drain_timeout:type_name -> google.protobuf.Duration
|
||||||
|
+ 34, // 18: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.delayed_close_timeout:type_name -> google.protobuf.Duration
|
||||||
|
+ 35, // 19: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.access_log:type_name -> envoy.config.accesslog.v3.AccessLog
|
||||||
|
+ 27, // 20: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 36, // 21: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.original_ip_detection_extensions:type_name -> envoy.config.core.v3.TypedExtensionConfig
|
||||||
|
16, // 22: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.internal_address_config:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.InternalAddressConfig
|
||||||
|
- 25, // 23: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.generate_request_id:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 27, // 23: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.generate_request_id:type_name -> google.protobuf.BoolValue
|
||||||
|
2, // 24: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.forward_client_cert_details:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.ForwardClientCertDetails
|
||||||
|
17, // 25: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.set_current_client_cert_details:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.SetCurrentClientCertDetails
|
||||||
|
18, // 26: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.upgrade_configs:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.UpgradeConfig
|
||||||
|
- 25, // 27: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.normalize_path:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 27, // 27: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.normalize_path:type_name -> google.protobuf.BoolValue
|
||||||
|
3, // 28: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.path_with_escaped_slashes_action:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathWithEscapedSlashesAction
|
||||||
|
13, // 29: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.request_id_extension:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.RequestIDExtension
|
||||||
|
6, // 30: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.local_reply_config:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.LocalReplyConfig
|
||||||
|
- 25, // 31: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 27, // 31: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message:type_name -> google.protobuf.BoolValue
|
||||||
|
19, // 32: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.path_normalization_options:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions
|
||||||
|
7, // 33: envoy.extensions.filters.network.http_connection_manager.v3.LocalReplyConfig.mappers:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper
|
||||||
|
- 35, // 34: envoy.extensions.filters.network.http_connection_manager.v3.LocalReplyConfig.body_format:type_name -> envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
- 36, // 35: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.filter:type_name -> envoy.config.accesslog.v3.AccessLogFilter
|
||||||
|
- 31, // 36: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.status_code:type_name -> google.protobuf.UInt32Value
|
||||||
|
- 37, // 37: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.body:type_name -> envoy.config.core.v3.DataSource
|
||||||
|
- 35, // 38: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.body_format_override:type_name -> envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
- 38, // 39: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
|
||||||
|
- 39, // 40: envoy.extensions.filters.network.http_connection_manager.v3.Rds.config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
- 40, // 41: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRouteConfigurationsList.scoped_route_configurations:type_name -> envoy.config.route.v3.ScopedRouteConfiguration
|
||||||
|
+ 37, // 34: envoy.extensions.filters.network.http_connection_manager.v3.LocalReplyConfig.body_format:type_name -> envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
+ 38, // 35: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.filter:type_name -> envoy.config.accesslog.v3.AccessLogFilter
|
||||||
|
+ 33, // 36: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.status_code:type_name -> google.protobuf.UInt32Value
|
||||||
|
+ 39, // 37: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.body:type_name -> envoy.config.core.v3.DataSource
|
||||||
|
+ 37, // 38: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.body_format_override:type_name -> envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
+ 40, // 39: envoy.extensions.filters.network.http_connection_manager.v3.ResponseMapper.headers_to_add:type_name -> envoy.config.core.v3.HeaderValueOption
|
||||||
|
+ 41, // 40: envoy.extensions.filters.network.http_connection_manager.v3.Rds.config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
+ 42, // 41: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRouteConfigurationsList.scoped_route_configurations:type_name -> envoy.config.route.v3.ScopedRouteConfiguration
|
||||||
|
20, // 42: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.scope_key_builder:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder
|
||||||
|
- 39, // 43: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.rds_config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
+ 41, // 43: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.rds_config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
9, // 44: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.scoped_route_configurations_list:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRouteConfigurationsList
|
||||||
|
11, // 45: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.scoped_rds:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRds
|
||||||
|
- 39, // 46: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRds.scoped_rds_config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
- 41, // 47: envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter.typed_config:type_name -> google.protobuf.Any
|
||||||
|
- 42, // 48: envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter.config_discovery:type_name -> envoy.config.core.v3.ExtensionConfigSource
|
||||||
|
- 41, // 49: envoy.extensions.filters.network.http_connection_manager.v3.RequestIDExtension.typed_config:type_name -> google.protobuf.Any
|
||||||
|
+ 41, // 46: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRds.scoped_rds_config_source:type_name -> envoy.config.core.v3.ConfigSource
|
||||||
|
+ 43, // 47: envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter.typed_config:type_name -> google.protobuf.Any
|
||||||
|
+ 44, // 48: envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter.config_discovery:type_name -> envoy.config.core.v3.ExtensionConfigSource
|
||||||
|
+ 43, // 49: envoy.extensions.filters.network.http_connection_manager.v3.RequestIDExtension.typed_config:type_name -> google.protobuf.Any
|
||||||
|
5, // 50: envoy.extensions.filters.network.http_connection_manager.v3.EnvoyMobileHttpConnectionManager.config:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
|
||||||
|
- 43, // 51: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.client_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
- 43, // 52: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.random_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
- 43, // 53: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.overall_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
- 31, // 54: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.max_path_tag_length:type_name -> google.protobuf.UInt32Value
|
||||||
|
- 44, // 55: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.custom_tags:type_name -> envoy.type.tracing.v3.CustomTag
|
||||||
|
- 45, // 56: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.provider:type_name -> envoy.config.trace.v3.Tracing.Http
|
||||||
|
- 25, // 57: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.SetCurrentClientCertDetails.subject:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 45, // 51: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.client_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
+ 45, // 52: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.random_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
+ 45, // 53: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.overall_sampling:type_name -> envoy.type.v3.Percent
|
||||||
|
+ 33, // 54: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.max_path_tag_length:type_name -> google.protobuf.UInt32Value
|
||||||
|
+ 46, // 55: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.custom_tags:type_name -> envoy.type.tracing.v3.CustomTag
|
||||||
|
+ 47, // 56: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing.provider:type_name -> envoy.config.trace.v3.Tracing.Http
|
||||||
|
+ 27, // 57: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.SetCurrentClientCertDetails.subject:type_name -> google.protobuf.BoolValue
|
||||||
|
12, // 58: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.UpgradeConfig.filters:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
|
||||||
|
- 25, // 59: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.UpgradeConfig.enabled:type_name -> google.protobuf.BoolValue
|
||||||
|
- 46, // 60: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions.forwarding_transformation:type_name -> envoy.type.http.v3.PathTransformation
|
||||||
|
- 46, // 61: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions.http_filter_transformation:type_name -> envoy.type.http.v3.PathTransformation
|
||||||
|
+ 27, // 59: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.UpgradeConfig.enabled:type_name -> google.protobuf.BoolValue
|
||||||
|
+ 48, // 60: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions.forwarding_transformation:type_name -> envoy.type.http.v3.PathTransformation
|
||||||
|
+ 48, // 61: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions.http_filter_transformation:type_name -> envoy.type.http.v3.PathTransformation
|
||||||
|
21, // 62: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.fragments:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder
|
||||||
|
22, // 63: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.header_value_extractor:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor
|
||||||
|
- 23, // 64: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.element:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement
|
||||||
|
- 65, // [65:65] is the sub-list for method output_type
|
||||||
|
- 65, // [65:65] is the sub-list for method input_type
|
||||||
|
- 65, // [65:65] is the sub-list for extension type_name
|
||||||
|
- 65, // [65:65] is the sub-list for extension extendee
|
||||||
|
- 0, // [0:65] is the sub-list for field type_name
|
||||||
|
+ 23, // 64: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.host_value_extractor:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HostValueExtractor
|
||||||
|
+ 24, // 65: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.local_port_value_extractor:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.LocalPortValueExtractor
|
||||||
|
+ 25, // 66: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.element:type_name -> envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement
|
||||||
|
+ 33, // 67: envoy.extensions.filters.network.http_connection_manager.v3.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HostValueExtractor.max_recompute_num:type_name -> google.protobuf.UInt32Value
|
||||||
|
+ 68, // [68:68] is the sub-list for method output_type
|
||||||
|
+ 68, // [68:68] is the sub-list for method input_type
|
||||||
|
+ 68, // [68:68] is the sub-list for extension type_name
|
||||||
|
+ 68, // [68:68] is the sub-list for extension extendee
|
||||||
|
+ 0, // [0:68] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
@@ -3625,6 +3793,30 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
+ switch v := v.(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor); i {
|
||||||
|
+ case 0:
|
||||||
|
+ return &v.state
|
||||||
|
+ case 1:
|
||||||
|
+ return &v.sizeCache
|
||||||
|
+ case 2:
|
||||||
|
+ return &v.unknownFields
|
||||||
|
+ default:
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
+ switch v := v.(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor); i {
|
||||||
|
+ case 0:
|
||||||
|
+ return &v.state
|
||||||
|
+ case 1:
|
||||||
|
+ return &v.sizeCache
|
||||||
|
+ case 2:
|
||||||
|
+ return &v.unknownFields
|
||||||
|
+ default:
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
@@ -3653,6 +3845,8 @@
|
||||||
|
}
|
||||||
|
file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[16].OneofWrappers = []interface{}{
|
||||||
|
(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_)(nil),
|
||||||
|
+ (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_)(nil),
|
||||||
|
+ (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_)(nil),
|
||||||
|
}
|
||||||
|
file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_msgTypes[17].OneofWrappers = []interface{}{
|
||||||
|
(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index)(nil),
|
||||||
|
@@ -3664,7 +3858,7 @@
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_rawDesc,
|
||||||
|
NumEnums: 5,
|
||||||
|
- NumMessages: 19,
|
||||||
|
+ NumMessages: 21,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
diff -Naur go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.validate.go go-control-plane-new/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.validate.go
|
||||||
|
--- go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.validate.go 2024-01-04 21:07:22.000000000 +0800
|
||||||
|
+++ go-control-plane-new/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.validate.go 2024-01-04 21:02:10.000000000 +0800
|
||||||
|
@@ -1986,6 +1986,30 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ case *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_:
|
||||||
|
+
|
||||||
|
+ if v, ok := interface{}(m.GetHostValueExtractor()).(interface{ Validate() error }); ok {
|
||||||
|
+ if err := v.Validate(); err != nil {
|
||||||
|
+ return ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{
|
||||||
|
+ field: "HostValueExtractor",
|
||||||
|
+ reason: "embedded message failed validation",
|
||||||
|
+ cause: err,
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_:
|
||||||
|
+
|
||||||
|
+ if v, ok := interface{}(m.GetLocalPortValueExtractor()).(interface{ Validate() error }); ok {
|
||||||
|
+ if err := v.Validate(); err != nil {
|
||||||
|
+ return ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{
|
||||||
|
+ field: "LocalPortValueExtractor",
|
||||||
|
+ reason: "embedded message failed validation",
|
||||||
|
+ cause: err,
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
default:
|
||||||
|
return ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{
|
||||||
|
field: "Type",
|
||||||
|
@@ -2162,6 +2186,172 @@
|
||||||
|
} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError{}
|
||||||
|
|
||||||
|
// Validate checks the field values on
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor with the
|
||||||
|
+// rules defined in the proto definition for this message. If any rules are
|
||||||
|
+// violated, an error is returned.
|
||||||
|
+func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor) Validate() error {
|
||||||
|
+ if m == nil {
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if v, ok := interface{}(m.GetMaxRecomputeNum()).(interface{ Validate() error }); ok {
|
||||||
|
+ if err := v.Validate(); err != nil {
|
||||||
|
+ return ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError{
|
||||||
|
+ field: "MaxRecomputeNum",
|
||||||
|
+ reason: "embedded message failed validation",
|
||||||
|
+ cause: err,
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError
|
||||||
|
+// is the validation error returned by
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor.Validate if
|
||||||
|
+// the designated constraints aren't met.
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError struct {
|
||||||
|
+ field string
|
||||||
|
+ reason string
|
||||||
|
+ cause error
|
||||||
|
+ key bool
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Field function returns field value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) Field() string {
|
||||||
|
+ return e.field
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Reason function returns reason value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) Reason() string {
|
||||||
|
+ return e.reason
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Cause function returns cause value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) Cause() error {
|
||||||
|
+ return e.cause
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Key function returns key value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) Key() bool {
|
||||||
|
+ return e.key
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// ErrorName returns error name.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) ErrorName() string {
|
||||||
|
+ return "ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError"
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Error satisfies the builtin error interface
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError) Error() string {
|
||||||
|
+ cause := ""
|
||||||
|
+ if e.cause != nil {
|
||||||
|
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ key := ""
|
||||||
|
+ if e.key {
|
||||||
|
+ key = "key for "
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return fmt.Sprintf(
|
||||||
|
+ "invalid %sScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor.%s: %s%s",
|
||||||
|
+ key,
|
||||||
|
+ e.field,
|
||||||
|
+ e.reason,
|
||||||
|
+ cause)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+var _ error = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError{}
|
||||||
|
+
|
||||||
|
+var _ interface {
|
||||||
|
+ Field() string
|
||||||
|
+ Reason() string
|
||||||
|
+ Key() bool
|
||||||
|
+ Cause() error
|
||||||
|
+ ErrorName() string
|
||||||
|
+} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractorValidationError{}
|
||||||
|
+
|
||||||
|
+// Validate checks the field values on
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor with
|
||||||
|
+// the rules defined in the proto definition for this message. If any rules
|
||||||
|
+// are violated, an error is returned.
|
||||||
|
+func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor) Validate() error {
|
||||||
|
+ if m == nil {
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError
|
||||||
|
+// is the validation error returned by
|
||||||
|
+// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor.Validate
|
||||||
|
+// if the designated constraints aren't met.
|
||||||
|
+type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError struct {
|
||||||
|
+ field string
|
||||||
|
+ reason string
|
||||||
|
+ cause error
|
||||||
|
+ key bool
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Field function returns field value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) Field() string {
|
||||||
|
+ return e.field
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Reason function returns reason value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) Reason() string {
|
||||||
|
+ return e.reason
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Cause function returns cause value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) Cause() error {
|
||||||
|
+ return e.cause
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Key function returns key value.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) Key() bool {
|
||||||
|
+ return e.key
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// ErrorName returns error name.
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) ErrorName() string {
|
||||||
|
+ return "ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError"
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// Error satisfies the builtin error interface
|
||||||
|
+func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError) Error() string {
|
||||||
|
+ cause := ""
|
||||||
|
+ if e.cause != nil {
|
||||||
|
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ key := ""
|
||||||
|
+ if e.key {
|
||||||
|
+ key = "key for "
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return fmt.Sprintf(
|
||||||
|
+ "invalid %sScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor.%s: %s%s",
|
||||||
|
+ key,
|
||||||
|
+ e.field,
|
||||||
|
+ e.reason,
|
||||||
|
+ cause)
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+var _ error = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError{}
|
||||||
|
+
|
||||||
|
+var _ interface {
|
||||||
|
+ Field() string
|
||||||
|
+ Reason() string
|
||||||
|
+ Key() bool
|
||||||
|
+ Cause() error
|
||||||
|
+ ErrorName() string
|
||||||
|
+} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractorValidationError{}
|
||||||
|
+
|
||||||
|
+// Validate checks the field values on
|
||||||
|
// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement
|
||||||
|
// with the rules defined in the proto definition for this message. If any
|
||||||
|
// rules are violated, an error is returned.
|
||||||
633
istio/1.12/patches/istio/20240104-enhance-srds.patch
Normal file
633
istio/1.12/patches/istio/20240104-enhance-srds.patch
Normal file
@@ -0,0 +1,633 @@
|
|||||||
|
diff -Naur istio/pilot/pkg/features/pilot.go istio-new/pilot/pkg/features/pilot.go
|
||||||
|
--- istio/pilot/pkg/features/pilot.go 2024-01-05 17:58:08.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/features/pilot.go 2024-01-04 21:20:00.000000000 +0800
|
||||||
|
@@ -569,6 +569,12 @@
|
||||||
|
// Added by ingress
|
||||||
|
CustomCACertConfigMapName = env.RegisterStringVar("CUSTOM_CA_CERT_NAME", "",
|
||||||
|
"Defines the configmap's name of istio's root ca certificate").Get()
|
||||||
|
+ HostRDSMergeSubset = env.RegisterBoolVar("HOST_RDS_MERGE_SUBSET", true,
|
||||||
|
+ "If enabled, if host A is a subset of B, then we merge B's routes into A's hostRDS").Get()
|
||||||
|
+ EnableScopedRDS = env.RegisterBoolVar("ENBALE_SCOPED_RDS", true,
|
||||||
|
+ "If enabled, each host in virtualservice will have an independent RDS, which is used with SRDS").Get()
|
||||||
|
+ OnDemandRDS = env.RegisterBoolVar("ON_DEMAND_RDS", false,
|
||||||
|
+ "If enabled, the on demand filter will be added to the HCM filters").Get()
|
||||||
|
// End added by ingress
|
||||||
|
)
|
||||||
|
|
||||||
|
diff -Naur istio/pilot/pkg/networking/core/configgen.go istio-new/pilot/pkg/networking/core/configgen.go
|
||||||
|
--- istio/pilot/pkg/networking/core/configgen.go 2024-01-05 17:58:02.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/networking/core/configgen.go 2024-01-04 21:20:00.000000000 +0800
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
import (
|
||||||
|
core "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
|
||||||
|
listener "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
|
||||||
|
+ route "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
|
||||||
|
discovery "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
|
||||||
|
|
||||||
|
meshconfig "istio.io/api/mesh/v1alpha1"
|
||||||
|
@@ -44,6 +45,10 @@
|
||||||
|
// BuildHTTPRoutes returns the list of HTTP routes for the given proxy. This is the RDS output
|
||||||
|
BuildHTTPRoutes(node *model.Proxy, req *model.PushRequest, routeNames []string) ([]*discovery.Resource, model.XdsLogDetails)
|
||||||
|
|
||||||
|
+ // Added by ingress
|
||||||
|
+ BuildScopedRoutes(node *model.Proxy, push *model.PushContext) []*route.ScopedRouteConfiguration
|
||||||
|
+ // End added by ingress
|
||||||
|
+
|
||||||
|
// BuildNameTable returns list of hostnames and the associated IPs
|
||||||
|
BuildNameTable(node *model.Proxy, push *model.PushContext) *dnsProto.NameTable
|
||||||
|
|
||||||
|
diff -Naur istio/pilot/pkg/networking/core/v1alpha3/gateway.go istio-new/pilot/pkg/networking/core/v1alpha3/gateway.go
|
||||||
|
--- istio/pilot/pkg/networking/core/v1alpha3/gateway.go 2024-01-05 17:58:07.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/networking/core/v1alpha3/gateway.go 2024-01-05 11:19:54.000000000 +0800
|
||||||
|
@@ -41,7 +41,9 @@
|
||||||
|
"istio.io/istio/pilot/pkg/networking/plugin"
|
||||||
|
"istio.io/istio/pilot/pkg/networking/util"
|
||||||
|
authn_model "istio.io/istio/pilot/pkg/security/model"
|
||||||
|
+ "istio.io/istio/pilot/pkg/util/sets"
|
||||||
|
"istio.io/istio/pkg/config"
|
||||||
|
+ "istio.io/istio/pkg/config/constants"
|
||||||
|
"istio.io/istio/pkg/config/gateway"
|
||||||
|
"istio.io/istio/pkg/config/host"
|
||||||
|
"istio.io/istio/pkg/config/protocol"
|
||||||
|
@@ -104,10 +106,15 @@
|
||||||
|
// We can also have QUIC on a given port along with HTTPS/TLS on a given port. It does not
|
||||||
|
// cause port-conflict as they use different transport protocols
|
||||||
|
opts := &buildListenerOpts{
|
||||||
|
- push: builder.push,
|
||||||
|
- proxy: builder.node,
|
||||||
|
- bind: bind,
|
||||||
|
- port: &model.Port{Port: int(port.Number)},
|
||||||
|
+ push: builder.push,
|
||||||
|
+ proxy: builder.node,
|
||||||
|
+ bind: bind,
|
||||||
|
+ port: &model.Port{
|
||||||
|
+ Port: int(port.Number),
|
||||||
|
+ // Added by ingress
|
||||||
|
+ Protocol: protocol.Parse(port.Protocol),
|
||||||
|
+ // End added by ingress
|
||||||
|
+ },
|
||||||
|
bindToPort: true,
|
||||||
|
class: istionetworking.ListenerClassGateway,
|
||||||
|
transport: transport,
|
||||||
|
@@ -340,6 +347,269 @@
|
||||||
|
return nameToServiceMap
|
||||||
|
}
|
||||||
|
|
||||||
|
+// Added by ingress
|
||||||
|
+func (configgen *ConfigGeneratorImpl) BuildScopedRoutes(node *model.Proxy, push *model.PushContext) []*route.ScopedRouteConfiguration {
|
||||||
|
+ if node.MergedGateway == nil {
|
||||||
|
+ log.Warnf("buildScopedRoutes: no gateways for router %v", node.ID)
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+ merged := node.MergedGateway
|
||||||
|
+ var out []*route.ScopedRouteConfiguration
|
||||||
|
+ gatewayVirtualServices := make(map[string][]config.Config)
|
||||||
|
+ serverIterator := func(listenerPort int, mergedServers map[model.ServerPort]*model.MergedServers) sets.Set {
|
||||||
|
+ hostSet := sets.NewSet()
|
||||||
|
+ for port, servers := range mergedServers {
|
||||||
|
+ if port.Number != uint32(listenerPort) {
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ for _, server := range servers.Servers {
|
||||||
|
+ gatewayName := merged.GatewayNameForServer[server]
|
||||||
|
+
|
||||||
|
+ var virtualServices []config.Config
|
||||||
|
+ var exists bool
|
||||||
|
+
|
||||||
|
+ if virtualServices, exists = gatewayVirtualServices[gatewayName]; !exists {
|
||||||
|
+ virtualServices = push.VirtualServicesForGateway(node, gatewayName)
|
||||||
|
+ gatewayVirtualServices[gatewayName] = virtualServices
|
||||||
|
+ }
|
||||||
|
+ for _, virtualService := range virtualServices {
|
||||||
|
+ for _, host := range virtualService.Spec.(*networking.VirtualService).Hosts {
|
||||||
|
+ hostSet.Insert(host)
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return hostSet
|
||||||
|
+ }
|
||||||
|
+ buildPortHostScopedRoute := func(listenerPort model.ServerPort) {
|
||||||
|
+ p := protocol.Parse(listenerPort.Protocol)
|
||||||
|
+ if !p.IsHTTP() && p != protocol.HTTPS {
|
||||||
|
+ return
|
||||||
|
+ }
|
||||||
|
+ port := strconv.Itoa(int(listenerPort.Number))
|
||||||
|
+ hostSet := serverIterator(int(listenerPort.Number), merged.MergedServers).
|
||||||
|
+ Union(serverIterator(int(listenerPort.Number), merged.MergedQUICTransportServers))
|
||||||
|
+ for host, _ := range hostSet {
|
||||||
|
+ portKey := &route.ScopedRouteConfiguration_Key_Fragment{
|
||||||
|
+ Type: &route.ScopedRouteConfiguration_Key_Fragment_StringKey{
|
||||||
|
+ StringKey: port,
|
||||||
|
+ },
|
||||||
|
+ }
|
||||||
|
+ hostKey := &route.ScopedRouteConfiguration_Key_Fragment{
|
||||||
|
+ Type: &route.ScopedRouteConfiguration_Key_Fragment_StringKey{
|
||||||
|
+ StringKey: host,
|
||||||
|
+ },
|
||||||
|
+ }
|
||||||
|
+ name := strings.Join([]string{port, host}, ".")
|
||||||
|
+ out = append(out, &route.ScopedRouteConfiguration{
|
||||||
|
+ OnDemand: features.OnDemandRDS,
|
||||||
|
+ Name: name,
|
||||||
|
+ RouteConfigurationName: constants.HigressHostRDSNamePrefix + name,
|
||||||
|
+ Key: &route.ScopedRouteConfiguration_Key{
|
||||||
|
+ Fragments: []*route.ScopedRouteConfiguration_Key_Fragment{portKey, hostKey},
|
||||||
|
+ },
|
||||||
|
+ })
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ for _, port := range merged.ServerPorts {
|
||||||
|
+ buildPortHostScopedRoute(port)
|
||||||
|
+ }
|
||||||
|
+ return out
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+type virtualServiceContext struct {
|
||||||
|
+ virtualService config.Config
|
||||||
|
+ server *networking.Server
|
||||||
|
+ gatewayName string
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (configgen *ConfigGeneratorImpl) buildHostRDSConfig(node *model.Proxy, push *model.PushContext,
|
||||||
|
+ routeName string) *route.RouteConfiguration {
|
||||||
|
+ var (
|
||||||
|
+ hostRDSPort string
|
||||||
|
+ hostRDSHost string
|
||||||
|
+ )
|
||||||
|
+ portAndHost := strings.SplitN(strings.TrimPrefix(routeName, constants.HigressHostRDSNamePrefix), ".", 2)
|
||||||
|
+ if len(portAndHost) != 2 {
|
||||||
|
+ log.Errorf("Invalid route %s when using Higress hostRDS", routeName)
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+ hostRDSPort = portAndHost[0]
|
||||||
|
+ hostRDSHost = portAndHost[1]
|
||||||
|
+ merged := node.MergedGateway
|
||||||
|
+ log.Debugf("buildGatewayRoutes: gateways after merging: %v", merged)
|
||||||
|
+ rdsPort, err := strconv.Atoi(hostRDSPort)
|
||||||
|
+ if err != nil {
|
||||||
|
+ log.Errorf("Invalid port %s of route %s when using Higress hostRDS", hostRDSPort, routeName)
|
||||||
|
+ return nil
|
||||||
|
+ }
|
||||||
|
+ listenerPort := uint32(rdsPort)
|
||||||
|
+ globalHTTPFilters := mseingress.ExtractGlobalHTTPFilters(node, push)
|
||||||
|
+
|
||||||
|
+ isH3DiscoveryNeeded := false
|
||||||
|
+
|
||||||
|
+ // When this is true, we add alt-svc header to the response to tell the client
|
||||||
|
+ // that HTTP/3 over QUIC is available on the same port for this host. This is
|
||||||
|
+ // very important for discovering HTTP/3 services
|
||||||
|
+ for port, servers := range merged.MergedQUICTransportServers {
|
||||||
|
+ if port.Number == listenerPort && len(servers.Servers) > 0 {
|
||||||
|
+ isH3DiscoveryNeeded = true
|
||||||
|
+ break
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ gatewayRoutes := make(map[string]map[string][]*route.Route)
|
||||||
|
+ gatewayVirtualServices := make(map[string][]config.Config)
|
||||||
|
+ var selectedVirtualServices []virtualServiceContext
|
||||||
|
+ var vHost *route.VirtualHost
|
||||||
|
+ serverIterator := func(mergedServers map[model.ServerPort]*model.MergedServers) {
|
||||||
|
+ for port, servers := range mergedServers {
|
||||||
|
+ if port.Number != listenerPort {
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ for _, server := range servers.Servers {
|
||||||
|
+ gatewayName := merged.GatewayNameForServer[server]
|
||||||
|
+
|
||||||
|
+ var virtualServices []config.Config
|
||||||
|
+ var exists bool
|
||||||
|
+
|
||||||
|
+ if virtualServices, exists = gatewayVirtualServices[gatewayName]; !exists {
|
||||||
|
+ virtualServices = push.VirtualServicesForGateway(node, gatewayName)
|
||||||
|
+ gatewayVirtualServices[gatewayName] = virtualServices
|
||||||
|
+ }
|
||||||
|
+ for _, virtualService := range virtualServices {
|
||||||
|
+ hostMatch := false
|
||||||
|
+ var selectHost string
|
||||||
|
+ virtualServiceHosts := host.NewNames(virtualService.Spec.(*networking.VirtualService).Hosts)
|
||||||
|
+ for _, hostname := range virtualServiceHosts {
|
||||||
|
+ // exact match
|
||||||
|
+ if hostname == host.Name(hostRDSHost) {
|
||||||
|
+ hostMatch = true
|
||||||
|
+ selectHost = hostRDSHost
|
||||||
|
+ break
|
||||||
|
+ }
|
||||||
|
+ if features.HostRDSMergeSubset {
|
||||||
|
+ // subset match
|
||||||
|
+ if host.Name(hostRDSHost).SubsetOf(hostname) {
|
||||||
|
+ hostMatch = true
|
||||||
|
+ selectHost = string(hostname)
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if !hostMatch {
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ copiedVS := virtualService.DeepCopy()
|
||||||
|
+ copiedVS.Spec.(*networking.VirtualService).Hosts = []string{selectHost}
|
||||||
|
+ selectedVirtualServices = append(selectedVirtualServices, virtualServiceContext{
|
||||||
|
+ virtualService: copiedVS,
|
||||||
|
+ server: server,
|
||||||
|
+ gatewayName: gatewayName,
|
||||||
|
+ })
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ serverIterator(merged.MergedServers)
|
||||||
|
+ serverIterator(merged.MergedQUICTransportServers)
|
||||||
|
+ // Sort by subset
|
||||||
|
+ // before: ["*.abc.com", "*.com", "www.abc.com"]
|
||||||
|
+ // after: ["www.abc.com", "*.abc.com", "*.com"]
|
||||||
|
+ sort.SliceStable(selectedVirtualServices, func(i, j int) bool {
|
||||||
|
+ return host.Name(selectedVirtualServices[i].virtualService.Spec.(*networking.VirtualService).Hosts[0]).SubsetOf(
|
||||||
|
+ host.Name(selectedVirtualServices[j].virtualService.Spec.(*networking.VirtualService).Hosts[0]))
|
||||||
|
+ })
|
||||||
|
+ port := int(listenerPort)
|
||||||
|
+ for _, ctx := range selectedVirtualServices {
|
||||||
|
+ virtualService := ctx.virtualService
|
||||||
|
+ server := ctx.server
|
||||||
|
+ gatewayName := ctx.gatewayName
|
||||||
|
+ // Make sure we can obtain services which are visible to this virtualService as much as possible.
|
||||||
|
+ nameToServiceMap := buildNameToServiceMapForHTTPRoutes(node, push, virtualService)
|
||||||
|
+
|
||||||
|
+ var routes []*route.Route
|
||||||
|
+ var exists bool
|
||||||
|
+ var err error
|
||||||
|
+ if _, exists = gatewayRoutes[gatewayName]; !exists {
|
||||||
|
+ gatewayRoutes[gatewayName] = make(map[string][]*route.Route)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ vskey := virtualService.Name + "/" + virtualService.Namespace
|
||||||
|
+
|
||||||
|
+ if routes, exists = gatewayRoutes[gatewayName][vskey]; !exists {
|
||||||
|
+ hashByDestination := istio_route.GetConsistentHashForVirtualService(push, node, virtualService, nameToServiceMap)
|
||||||
|
+ routes, err = istio_route.BuildHTTPRoutesForVirtualServiceWithHTTPFilters(node, virtualService, nameToServiceMap,
|
||||||
|
+ hashByDestination, port, map[string]bool{gatewayName: true}, isH3DiscoveryNeeded, push.Mesh, globalHTTPFilters)
|
||||||
|
+ if err != nil {
|
||||||
|
+ log.Debugf("%s omitting routes for virtual service %v/%v due to error: %v", node.ID, virtualService.Namespace, virtualService.Name, err)
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ gatewayRoutes[gatewayName][vskey] = routes
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if vHost != nil {
|
||||||
|
+ vHost.Routes = append(vHost.Routes, routes...)
|
||||||
|
+ if server.Tls != nil && server.Tls.HttpsRedirect {
|
||||||
|
+ vHost.RequireTls = route.VirtualHost_ALL
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ vHost = &route.VirtualHost{
|
||||||
|
+ Name: util.DomainName(hostRDSHost, port),
|
||||||
|
+ Domains: buildGatewayVirtualHostDomains(hostRDSHost, port),
|
||||||
|
+ Routes: routes,
|
||||||
|
+ IncludeRequestAttemptCount: true,
|
||||||
|
+ TypedPerFilterConfig: mseingress.ConstructTypedPerFilterConfigForVHost(globalHTTPFilters, virtualService),
|
||||||
|
+ }
|
||||||
|
+ if server.Tls != nil && server.Tls.HttpsRedirect {
|
||||||
|
+ vHost.RequireTls = route.VirtualHost_ALL
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // check all hostname if is not exist with HttpsRedirect set to true
|
||||||
|
+ // create VirtualHost to redirect
|
||||||
|
+ for _, hostname := range server.Hosts {
|
||||||
|
+ if !server.GetTls().GetHttpsRedirect() {
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ if vHost != nil && host.Name(hostname) == host.Name(hostRDSHost) {
|
||||||
|
+ vHost.RequireTls = route.VirtualHost_ALL
|
||||||
|
+ continue
|
||||||
|
+ }
|
||||||
|
+ vHost = &route.VirtualHost{
|
||||||
|
+ Name: util.DomainName(hostname, port),
|
||||||
|
+ Domains: buildGatewayVirtualHostDomains(hostname, port),
|
||||||
|
+ IncludeRequestAttemptCount: true,
|
||||||
|
+ RequireTls: route.VirtualHost_ALL,
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ }
|
||||||
|
+ var virtualHosts []*route.VirtualHost
|
||||||
|
+ if vHost == nil {
|
||||||
|
+ log.Warnf("constructed http route config for route %s on port %d with no vhosts; Setting up a default 404 vhost", routeName, port)
|
||||||
|
+ virtualHosts = []*route.VirtualHost{{
|
||||||
|
+ Name: util.DomainName("blackhole", port),
|
||||||
|
+ Domains: []string{"*"},
|
||||||
|
+ // Empty route list will cause Envoy to 404 NR any requests
|
||||||
|
+ Routes: []*route.Route{},
|
||||||
|
+ }}
|
||||||
|
+ } else {
|
||||||
|
+ vHost.Routes = istio_route.CombineVHostRoutes(vHost.Routes)
|
||||||
|
+ virtualHosts = append(virtualHosts, vHost)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ routeCfg := &route.RouteConfiguration{
|
||||||
|
+ // Retain the routeName as its used by EnvoyFilter patching logic
|
||||||
|
+ Name: routeName,
|
||||||
|
+ VirtualHosts: virtualHosts,
|
||||||
|
+ ValidateClusters: proto.BoolFalse,
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return routeCfg
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// End added by ingress
|
||||||
|
+
|
||||||
|
func (configgen *ConfigGeneratorImpl) buildGatewayHTTPRouteConfig(node *model.Proxy, push *model.PushContext,
|
||||||
|
routeName string) *route.RouteConfiguration {
|
||||||
|
if node.MergedGateway == nil {
|
||||||
|
@@ -351,6 +621,12 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Added by ingress
|
||||||
|
+ if strings.HasPrefix(routeName, constants.HigressHostRDSNamePrefix) {
|
||||||
|
+ return configgen.buildHostRDSConfig(node, push, routeName)
|
||||||
|
+ }
|
||||||
|
+ // End added by ingress
|
||||||
|
+
|
||||||
|
merged := node.MergedGateway
|
||||||
|
log.Debugf("buildGatewayRoutes: gateways after merging: %v", merged)
|
||||||
|
|
||||||
|
@@ -670,7 +946,9 @@
|
||||||
|
// TLS mode | Mesh-wide SDS | Ingress SDS | Resulting Configuration
|
||||||
|
// SIMPLE/MUTUAL | ENABLED | ENABLED | support SDS at ingress gateway to terminate SSL communication outside the mesh
|
||||||
|
// ISTIO_MUTUAL | ENABLED | DISABLED | support SDS at gateway to terminate workload mTLS, with internal workloads
|
||||||
|
-// | for egress or with another trusted cluster for ingress)
|
||||||
|
+//
|
||||||
|
+// | for egress or with another trusted cluster for ingress)
|
||||||
|
+//
|
||||||
|
// ISTIO_MUTUAL | DISABLED | DISABLED | use file-mounted secret paths to terminate workload mTLS from gateway
|
||||||
|
//
|
||||||
|
// Note that ISTIO_MUTUAL TLS mode and ingressSds should not be used simultaneously on the same ingress gateway.
|
||||||
|
diff -Naur istio/pilot/pkg/networking/core/v1alpha3/listener.go istio-new/pilot/pkg/networking/core/v1alpha3/listener.go
|
||||||
|
--- istio/pilot/pkg/networking/core/v1alpha3/listener.go 2024-01-05 17:58:07.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/networking/core/v1alpha3/listener.go 2024-01-05 17:31:10.000000000 +0800
|
||||||
|
@@ -1279,8 +1279,48 @@
|
||||||
|
|
||||||
|
notimeout := durationpb.New(0 * time.Second)
|
||||||
|
connectionManager.StreamIdleTimeout = notimeout
|
||||||
|
-
|
||||||
|
- if httpOpts.rds != "" {
|
||||||
|
+ // Added by ingress
|
||||||
|
+ enableSRDS := false
|
||||||
|
+ if features.EnableScopedRDS &&
|
||||||
|
+ (listenerOpts.port.Protocol.IsHTTP() || (listenerOpts.port.Protocol == protocol.HTTPS)) {
|
||||||
|
+ enableSRDS = true
|
||||||
|
+ portFragment := &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder{
|
||||||
|
+ Type: &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor_{
|
||||||
|
+ LocalPortValueExtractor: &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_LocalPortValueExtractor{},
|
||||||
|
+ }}
|
||||||
|
+ hostFragment := &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder{
|
||||||
|
+ Type: &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor_{
|
||||||
|
+ HostValueExtractor: &hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HostValueExtractor{},
|
||||||
|
+ }}
|
||||||
|
+ scopedRoutes := &hcm.HttpConnectionManager_ScopedRoutes{
|
||||||
|
+ ScopedRoutes: &hcm.ScopedRoutes{
|
||||||
|
+ Name: constants.DefaultScopedRouteName,
|
||||||
|
+ ScopeKeyBuilder: &hcm.ScopedRoutes_ScopeKeyBuilder{
|
||||||
|
+ Fragments: []*hcm.ScopedRoutes_ScopeKeyBuilder_FragmentBuilder{portFragment, hostFragment},
|
||||||
|
+ },
|
||||||
|
+ RdsConfigSource: &core.ConfigSource{
|
||||||
|
+ ConfigSourceSpecifier: &core.ConfigSource_Ads{
|
||||||
|
+ Ads: &core.AggregatedConfigSource{},
|
||||||
|
+ },
|
||||||
|
+ InitialFetchTimeout: durationpb.New(0),
|
||||||
|
+ ResourceApiVersion: core.ApiVersion_V3,
|
||||||
|
+ },
|
||||||
|
+ ConfigSpecifier: &hcm.ScopedRoutes_ScopedRds{
|
||||||
|
+ ScopedRds: &hcm.ScopedRds{
|
||||||
|
+ ScopedRdsConfigSource: &core.ConfigSource{
|
||||||
|
+ ConfigSourceSpecifier: &core.ConfigSource_Ads{
|
||||||
|
+ Ads: &core.AggregatedConfigSource{},
|
||||||
|
+ },
|
||||||
|
+ InitialFetchTimeout: durationpb.New(0),
|
||||||
|
+ ResourceApiVersion: core.ApiVersion_V3,
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ }
|
||||||
|
+ connectionManager.RouteSpecifier = scopedRoutes
|
||||||
|
+ } else if httpOpts.rds != "" {
|
||||||
|
+ // End added by ingress
|
||||||
|
rds := &hcm.HttpConnectionManager_Rds{
|
||||||
|
Rds: &hcm.Rds{
|
||||||
|
ConfigSource: &core.ConfigSource{
|
||||||
|
@@ -1304,8 +1344,15 @@
|
||||||
|
|
||||||
|
filters := make([]*hcm.HttpFilter, len(httpFilters))
|
||||||
|
copy(filters, httpFilters)
|
||||||
|
- // Make sure cors filter always in the first.
|
||||||
|
- filters = append([]*hcm.HttpFilter{xdsfilters.Cors}, filters...)
|
||||||
|
+ // Added by ingress
|
||||||
|
+ // Now only support onDemandRDS when enable SRDS
|
||||||
|
+ if features.OnDemandRDS && enableSRDS {
|
||||||
|
+ filters = append([]*hcm.HttpFilter{xdsfilters.OnDemand, xdsfilters.Cors}, filters...)
|
||||||
|
+ } else {
|
||||||
|
+ // End added by ingress
|
||||||
|
+ // Make sure cors filter always in the first.
|
||||||
|
+ filters = append([]*hcm.HttpFilter{xdsfilters.Cors}, filters...)
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if features.MetadataExchange {
|
||||||
|
filters = append(filters, xdsfilters.HTTPMx)
|
||||||
|
diff -Naur istio/pilot/pkg/xds/ads.go istio-new/pilot/pkg/xds/ads.go
|
||||||
|
--- istio/pilot/pkg/xds/ads.go 2024-01-05 17:58:08.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/xds/ads.go 2024-01-05 17:31:44.000000000 +0800
|
||||||
|
@@ -797,15 +797,18 @@
|
||||||
|
|
||||||
|
// PushOrder defines the order that updates will be pushed in. Any types not listed here will be pushed in random
|
||||||
|
// order after the types listed here
|
||||||
|
-var PushOrder = []string{v3.ClusterType, v3.EndpointType, v3.ListenerType, v3.RouteType, v3.SecretType}
|
||||||
|
+var PushOrder = []string{v3.ClusterType, v3.EndpointType, v3.ListenerType, v3.ScopedRouteType, v3.RouteType, v3.SecretType}
|
||||||
|
|
||||||
|
// KnownOrderedTypeUrls has typeUrls for which we know the order of push.
|
||||||
|
var KnownOrderedTypeUrls = map[string]struct{}{
|
||||||
|
v3.ClusterType: {},
|
||||||
|
v3.EndpointType: {},
|
||||||
|
v3.ListenerType: {},
|
||||||
|
- v3.RouteType: {},
|
||||||
|
- v3.SecretType: {},
|
||||||
|
+ // Added by ingress
|
||||||
|
+ v3.ScopedRouteType: {},
|
||||||
|
+ // End added by ingress
|
||||||
|
+ v3.RouteType: {},
|
||||||
|
+ v3.SecretType: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
// orderWatchedResources orders the resources in accordance with known push order.
|
||||||
|
diff -Naur istio/pilot/pkg/xds/discovery.go istio-new/pilot/pkg/xds/discovery.go
|
||||||
|
--- istio/pilot/pkg/xds/discovery.go 2024-01-05 17:58:07.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/xds/discovery.go 2024-01-04 21:20:00.000000000 +0800
|
||||||
|
@@ -589,6 +589,9 @@
|
||||||
|
s.Generators[v3.ClusterType] = &CdsGenerator{Server: s}
|
||||||
|
s.Generators[v3.ListenerType] = &LdsGenerator{Server: s}
|
||||||
|
s.Generators[v3.RouteType] = &RdsGenerator{Server: s}
|
||||||
|
+ // Added by ingress
|
||||||
|
+ s.Generators[v3.ScopedRouteType] = &SrdsGenerator{Server: s}
|
||||||
|
+ // End added by ingress
|
||||||
|
s.Generators[v3.EndpointType] = edsGen
|
||||||
|
s.Generators[v3.NameTableType] = &NdsGenerator{Server: s}
|
||||||
|
s.Generators[v3.ExtensionConfigurationType] = &EcdsGenerator{Server: s}
|
||||||
|
diff -Naur istio/pilot/pkg/xds/filters/filters.go istio-new/pilot/pkg/xds/filters/filters.go
|
||||||
|
--- istio/pilot/pkg/xds/filters/filters.go 2024-01-05 17:58:03.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/xds/filters/filters.go 2024-01-04 21:20:00.000000000 +0800
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
fault "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/fault/v3"
|
||||||
|
grpcstats "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/grpc_stats/v3"
|
||||||
|
grpcweb "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/grpc_web/v3"
|
||||||
|
+ ondemand "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/on_demand/v3"
|
||||||
|
router "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/router/v3"
|
||||||
|
httpwasm "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/wasm/v3"
|
||||||
|
httpinspector "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/listener/http_inspector/v3"
|
||||||
|
@@ -54,6 +55,14 @@
|
||||||
|
// Define static filters to be reused across the codebase. This avoids duplicate marshaling/unmarshaling
|
||||||
|
// This should not be used for filters that will be mutated
|
||||||
|
var (
|
||||||
|
+ // Added by ingress
|
||||||
|
+ OnDemand = &hcm.HttpFilter{
|
||||||
|
+ Name: "envoy.filters.http.on_demand.v3.OnDemand",
|
||||||
|
+ ConfigType: &hcm.HttpFilter_TypedConfig{
|
||||||
|
+ TypedConfig: util.MessageToAny(&ondemand.OnDemand{}),
|
||||||
|
+ },
|
||||||
|
+ }
|
||||||
|
+ // End added by ingress
|
||||||
|
Cors = &hcm.HttpFilter{
|
||||||
|
Name: wellknown.CORS,
|
||||||
|
ConfigType: &hcm.HttpFilter_TypedConfig{
|
||||||
|
diff -Naur istio/pilot/pkg/xds/srds.go istio-new/pilot/pkg/xds/srds.go
|
||||||
|
--- istio/pilot/pkg/xds/srds.go 1970-01-01 08:00:00.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/xds/srds.go 2024-01-05 13:45:49.000000000 +0800
|
||||||
|
@@ -0,0 +1,79 @@
|
||||||
|
+// Copyright Istio Authors
|
||||||
|
+//
|
||||||
|
+// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+// you may not use this file except in compliance with the License.
|
||||||
|
+// You may obtain a copy of the License at
|
||||||
|
+//
|
||||||
|
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+//
|
||||||
|
+// Unless required by applicable law or agreed to in writing, software
|
||||||
|
+// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+// See the License for the specific language governing permissions and
|
||||||
|
+// limitations under the License.
|
||||||
|
+
|
||||||
|
+package xds
|
||||||
|
+
|
||||||
|
+import (
|
||||||
|
+ discovery "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
|
||||||
|
+ "istio.io/istio/pilot/pkg/features"
|
||||||
|
+ "istio.io/istio/pilot/pkg/model"
|
||||||
|
+ "istio.io/istio/pilot/pkg/networking/util"
|
||||||
|
+ "istio.io/istio/pkg/config"
|
||||||
|
+ "istio.io/istio/pkg/config/schema/gvk"
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
+type SrdsGenerator struct {
|
||||||
|
+ Server *DiscoveryServer
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+var _ model.XdsResourceGenerator = &SrdsGenerator{}
|
||||||
|
+
|
||||||
|
+// Map of all configs that do not impact SRDS
|
||||||
|
+var skippedSrdsConfigs = map[config.GroupVersionKind]struct{}{
|
||||||
|
+ gvk.WorkloadEntry: {},
|
||||||
|
+ gvk.WorkloadGroup: {},
|
||||||
|
+ gvk.RequestAuthentication: {},
|
||||||
|
+ gvk.PeerAuthentication: {},
|
||||||
|
+ gvk.Secret: {},
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func srdsNeedsPush(req *model.PushRequest) bool {
|
||||||
|
+ if !features.EnableScopedRDS {
|
||||||
|
+ return false
|
||||||
|
+ }
|
||||||
|
+ if req == nil {
|
||||||
|
+ return true
|
||||||
|
+ }
|
||||||
|
+ if !req.Full {
|
||||||
|
+ // SRDS only handles full push
|
||||||
|
+ return false
|
||||||
|
+ }
|
||||||
|
+ // If none set, we will always push
|
||||||
|
+ if len(req.ConfigsUpdated) == 0 {
|
||||||
|
+ return true
|
||||||
|
+ }
|
||||||
|
+ for config := range req.ConfigsUpdated {
|
||||||
|
+ if _, f := skippedSrdsConfigs[config.Kind]; !f {
|
||||||
|
+ return true
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return false
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func (s SrdsGenerator) Generate(proxy *model.Proxy, push *model.PushContext, w *model.WatchedResource,
|
||||||
|
+ req *model.PushRequest) (model.Resources, model.XdsLogDetails, error) {
|
||||||
|
+ if !srdsNeedsPush(req) {
|
||||||
|
+ return nil, model.DefaultXdsLogDetails, nil
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ scopedRoutes := s.Server.ConfigGenerator.BuildScopedRoutes(proxy, push)
|
||||||
|
+ resources := model.Resources{}
|
||||||
|
+ for _, sr := range scopedRoutes {
|
||||||
|
+ resources = append(resources, &discovery.Resource{
|
||||||
|
+ Name: sr.Name,
|
||||||
|
+ Resource: util.MessageToAny(sr),
|
||||||
|
+ })
|
||||||
|
+ }
|
||||||
|
+ return resources, model.DefaultXdsLogDetails, nil
|
||||||
|
+}
|
||||||
|
diff -Naur istio/pilot/pkg/xds/v3/model.go istio-new/pilot/pkg/xds/v3/model.go
|
||||||
|
--- istio/pilot/pkg/xds/v3/model.go 2024-01-05 17:58:03.000000000 +0800
|
||||||
|
+++ istio-new/pilot/pkg/xds/v3/model.go 2024-01-05 16:55:49.000000000 +0800
|
||||||
|
@@ -31,6 +31,10 @@
|
||||||
|
SecretType = resource.SecretType
|
||||||
|
ExtensionConfigurationType = resource.ExtensionConfigType
|
||||||
|
|
||||||
|
+ // Added by ingress
|
||||||
|
+ ScopedRouteType = apiTypePrefix + "envoy.config.route.v3.ScopedRouteConfiguration"
|
||||||
|
+ // End added by ingress
|
||||||
|
+
|
||||||
|
NameTableType = apiTypePrefix + "istio.networking.nds.v1.NameTable"
|
||||||
|
HealthInfoType = apiTypePrefix + "istio.v1.HealthInformation"
|
||||||
|
ProxyConfigType = apiTypePrefix + "istio.mesh.v1alpha1.ProxyConfig"
|
||||||
|
@@ -61,6 +65,10 @@
|
||||||
|
return "PCDS"
|
||||||
|
case ExtensionConfigurationType:
|
||||||
|
return "ECDS"
|
||||||
|
+ // Added by ingress
|
||||||
|
+ case ScopedRouteType:
|
||||||
|
+ return "SRDS"
|
||||||
|
+ // End added by ingress
|
||||||
|
default:
|
||||||
|
return typeURL
|
||||||
|
}
|
||||||
|
@@ -87,6 +95,10 @@
|
||||||
|
return "ecds"
|
||||||
|
case BootstrapType:
|
||||||
|
return "bds"
|
||||||
|
+ // Added by ingress
|
||||||
|
+ case ScopedRouteType:
|
||||||
|
+ return "srds"
|
||||||
|
+ // End added by ingress
|
||||||
|
default:
|
||||||
|
return typeURL
|
||||||
|
}
|
||||||
|
diff -Naur istio/pkg/config/constants/constants.go istio-new/pkg/config/constants/constants.go
|
||||||
|
--- istio/pkg/config/constants/constants.go 2024-01-05 17:58:08.000000000 +0800
|
||||||
|
+++ istio-new/pkg/config/constants/constants.go 2024-01-04 21:20:00.000000000 +0800
|
||||||
|
@@ -143,4 +143,9 @@
|
||||||
|
// CertProviderNone does not create any certificates for the control plane. It is assumed that some external
|
||||||
|
// load balancer, such as an Istio Gateway, is terminating the TLS.
|
||||||
|
CertProviderNone = "none"
|
||||||
|
+
|
||||||
|
+ // Added by ingress
|
||||||
|
+ HigressHostRDSNamePrefix = "higress-rds-"
|
||||||
|
+ DefaultScopedRouteName = "scoped-route"
|
||||||
|
+ // End added by ingress
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user