async-grpc-xds 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/async/grpc/xds/client_side_weighted_round_robin.rb +53 -0
  4. data/lib/async/grpc/xds/cluster.rb +73 -0
  5. data/lib/async/grpc/xds/control_plane.rb +10 -7
  6. data/lib/async/grpc/xds/discovery_client.rb +5 -2
  7. data/lib/async/grpc/xds/endpoint.rb +102 -0
  8. data/lib/async/grpc/xds/http_health_check.rb +48 -0
  9. data/lib/async/grpc/xds/version.rb +1 -1
  10. data/lib/async/grpc/xds.rb +4 -1
  11. data/lib/envoy/config/common/mutation_rules/v3/mutation_rules_pb.rb +33 -0
  12. data/lib/envoy/config/route/v3/route_components_pb.rb +108 -0
  13. data/lib/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin_pb.rb +30 -0
  14. data/lib/envoy/extensions/load_balancing_policies/common/v3/common_pb.rb +41 -0
  15. data/lib/envoy/type/tracing/v3/custom_tag_pb.rb +31 -0
  16. data/lib/xds/data/orca/v3/orca_load_report_pb.rb +24 -0
  17. data/lib/xds/service/orca/v3/open_rca_service.rb +23 -0
  18. data/lib/xds/service/orca/v3/orca_pb.rb +25 -0
  19. data/proto/envoy/config/common/mutation_rules/v3/mutation_rules.proto +113 -0
  20. data/proto/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.proto +96 -0
  21. data/proto/envoy/extensions/load_balancing_policies/common/v3/common.proto +188 -0
  22. data/proto/envoy/type/tracing/v3/custom_tag.proto +109 -0
  23. data/proto/readme.md +3 -0
  24. data/proto/xds/data/orca/v3/orca_load_report.proto +58 -0
  25. data/proto/xds/service/orca/v3/orca.proto +36 -0
  26. data/readme.md +10 -0
  27. data/releases.md +10 -0
  28. data/xds/test/async/grpc/xds/control_plane.rb +0 -1
  29. data.tar.gz.sig +0 -0
  30. metadata +19 -2
  31. metadata.gz.sig +0 -0
  32. data/lib/async/grpc/xds/resource_builder.rb +0 -177
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 668ae495babdb4aa2afd890a356bf9f7d80f4e1649213af63e5e0804432983ba
4
- data.tar.gz: 3634be8ae4e830a673c5706de0c7ed2f08462de1edcee0c7ffc401f9b1d3b2ab
3
+ metadata.gz: fb5e9b5b4fbb4b738a33f5714254602767c65774e0d3cab49c0c7528042885c5
4
+ data.tar.gz: 7c1fc5b76c954ed6c2a61f6b2f3e154f1287492f9f81438cfccec0788d803beb
5
5
  SHA512:
6
- metadata.gz: 4596e7e891e0a716f3cf8126f1801975114090c52c75d7c288550c4ce40109d51f14c6afb6e729a01d1d6f24ead8da17b2f3b74bcff3157b76c443cd60edebb5
7
- data.tar.gz: 14f57efc4e56588c8ff1819838ae1894ddd33a54b823c8c577c7addf30e0efed2742a4cd11cceefb559e1615d9198065860534b981b14bd7b0b91aae8eb13391
6
+ metadata.gz: ba0e68b3e2b1a7767ae5d3e62646818a746d5553d7a2187511914d2cb8cc37a491fae834865294936c6982abefff76b676b0b8bfb67ad93eca55eb3b9f6245d9
7
+ data.tar.gz: e973bf4dd5bbf1e54efd2c6fba9134960d879a66039e49c0361b47d6bacba1f9e458d0cbcd4c109fe2d134794fef3983c86911332564a3557244b39bb95fbdde
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2026, by Samuel Williams.
5
+
6
+ require "google/protobuf/any_pb"
7
+ require "google/protobuf/duration_pb"
8
+ require "google/protobuf/wrappers_pb"
9
+
10
+ require "envoy/config/cluster/v3/cluster_pb"
11
+ require "envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin_pb"
12
+
13
+ module Async
14
+ module GRPC
15
+ module XDS
16
+ # Builds Envoy's client-side weighted-round-robin policy with out-of-band ORCA reporting.
17
+ module ClientSideWeightedRoundRobin
18
+ # Build the typed load-balancing policy.
19
+ # @parameter port [Integer] The alternative TCP port hosting the ORCA service.
20
+ # @parameter reporting_period [Numeric] The requested ORCA reporting interval in seconds.
21
+ # @returns [Envoy::Config::Cluster::V3::LoadBalancingPolicy] The typed load-balancing policy.
22
+ def self.build(port, reporting_period: 1)
23
+ seconds = reporting_period.to_i
24
+ duration = Google::Protobuf::Duration.new(
25
+ seconds: seconds,
26
+ nanos: ((reporting_period.to_f - seconds) * 1_000_000_000).to_i
27
+ )
28
+ configuration = Envoy::Extensions::LoadBalancingPolicies::ClientSideWeightedRoundRobin::V3::ClientSideWeightedRoundRobin.new(
29
+ enable_oob_load_report: Google::Protobuf::BoolValue.new(value: true),
30
+ oob_reporting_period: duration,
31
+ oob_reporting_config: Envoy::Extensions::LoadBalancingPolicies::Common::V3::OrcaOobReportingConfig.new(
32
+ port_value: Integer(port)
33
+ )
34
+ )
35
+
36
+ Envoy::Config::Cluster::V3::LoadBalancingPolicy.new(
37
+ policies: [
38
+ Envoy::Config::Cluster::V3::LoadBalancingPolicy::Policy.new(
39
+ typed_extension_config: Envoy::Config::Core::V3::TypedExtensionConfig.new(
40
+ name: "envoy.load_balancing_policies.client_side_weighted_round_robin",
41
+ typed_config: Google::Protobuf::Any.new(
42
+ type_url: "type.googleapis.com/#{configuration.class.descriptor.name}",
43
+ value: configuration.to_proto
44
+ )
45
+ )
46
+ )
47
+ ]
48
+ )
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2026, by Samuel Williams.
5
+
6
+ require "google/protobuf/duration_pb"
7
+
8
+ require "envoy/config/cluster/v3/cluster_pb"
9
+ require "envoy/config/core/v3/config_source_pb"
10
+ require "envoy/config/core/v3/protocol_pb"
11
+
12
+ module Async
13
+ module GRPC
14
+ module XDS
15
+ # Builds Envoy cluster resources.
16
+ module Cluster
17
+ extend self
18
+
19
+ TYPE_URL = "type.googleapis.com/envoy.config.cluster.v3.Cluster"
20
+
21
+ # Build an EDS cluster resource.
22
+ # @parameter name [String] The cluster name.
23
+ # @parameter service_name [String] The EDS service name.
24
+ # @parameter load_balancing_policy [Envoy::Config::Cluster::V3::LoadBalancingPolicy | Nil] The typed Envoy load-balancing policy.
25
+ # @parameter health_checks [Array(Envoy::Config::Core::V3::HealthCheck)] The active health checks applied to cluster endpoints.
26
+ # @parameter connect_timeout [Numeric] The upstream connection timeout in seconds.
27
+ # @parameter protocol [Symbol] The canonical upstream protocol, either `:http1` or `:http2`.
28
+ # @returns [Envoy::Config::Cluster::V3::Cluster] The generated cluster resource.
29
+ # @raises [ArgumentError] If the upstream protocol is unsupported.
30
+ def build(name, service_name: name, load_balancing_policy: nil, health_checks: [], connect_timeout: 5, protocol: :http2)
31
+ options = {
32
+ name: name.to_s,
33
+ type: Envoy::Config::Cluster::V3::Cluster::DiscoveryType::EDS,
34
+ eds_cluster_config: Envoy::Config::Cluster::V3::Cluster::EdsClusterConfig.new(
35
+ service_name: service_name.to_s,
36
+ eds_config: Envoy::Config::Core::V3::ConfigSource.new(
37
+ ads: Envoy::Config::Core::V3::AggregatedConfigSource.new
38
+ )
39
+ ),
40
+ connect_timeout: duration(connect_timeout),
41
+ health_checks: health_checks,
42
+ }
43
+
44
+ options[:load_balancing_policy] = load_balancing_policy if load_balancing_policy
45
+
46
+ case protocol
47
+ when :http1
48
+ # Envoy uses HTTP/1 by default.
49
+ when :http2
50
+ options[:http2_protocol_options] = Envoy::Config::Core::V3::Http2ProtocolOptions.new
51
+ else
52
+ raise ArgumentError, "Unsupported upstream protocol: #{protocol.inspect}"
53
+ end
54
+
55
+ Envoy::Config::Cluster::V3::Cluster.new(**options)
56
+ end
57
+
58
+ private
59
+
60
+ # Convert seconds to a protobuf duration.
61
+ # @parameter seconds [Numeric] The duration in seconds.
62
+ # @returns [Google::Protobuf::Duration] The protobuf duration.
63
+ # @private
64
+ def duration(seconds)
65
+ whole_seconds = seconds.to_i
66
+ nanos = ((seconds.to_f - whole_seconds) * 1_000_000_000).to_i
67
+
68
+ Google::Protobuf::Duration.new(seconds: whole_seconds, nanos: nanos)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -10,16 +10,19 @@ require "async/queue"
10
10
 
11
11
  require "envoy/config/core/v3/base_pb"
12
12
  require "envoy/service/discovery/v3/discovery_pb"
13
+ require "google/protobuf/any_pb"
14
+ require "google/protobuf/well_known_types"
13
15
 
14
- require_relative "resource_builder"
16
+ require_relative "cluster"
17
+ require_relative "endpoint"
15
18
 
16
19
  module Async
17
20
  module GRPC
18
21
  module XDS
19
22
  # Maintains xDS resource snapshots and notifies ADS streams when resources change.
20
23
  class ControlPlane
21
- CLUSTER_TYPE = ResourceBuilder::CLUSTER_TYPE
22
- ENDPOINT_TYPE = ResourceBuilder::ENDPOINT_TYPE
24
+ CLUSTER_TYPE = Cluster::TYPE_URL
25
+ ENDPOINT_TYPE = Endpoint::TYPE_URL
23
26
 
24
27
  # Initialize an empty control plane.
25
28
  # @parameter identifier [String] The identifier reported in discovery responses.
@@ -36,9 +39,9 @@ module Async
36
39
  # Add or replace a cluster resource.
37
40
  # @parameter name [String] The cluster name.
38
41
  # @parameter resource [Envoy::Config::Cluster::V3::Cluster | Nil] An existing cluster resource, or `nil` to build one from `options`.
39
- # @parameter options [Hash] Options forwarded to {ResourceBuilder.cluster}.
42
+ # @parameter options [Hash] Options forwarded to {Cluster.build}.
40
43
  def update_cluster(name, resource = nil, **options)
41
- resource ||= ResourceBuilder.cluster(name, **options)
44
+ resource ||= Cluster.build(name, **options)
42
45
  update_resource(CLUSTER_TYPE, name.to_s, resource)
43
46
  end
44
47
 
@@ -49,7 +52,7 @@ module Async
49
52
  update_resource(
50
53
  ENDPOINT_TYPE,
51
54
  cluster_name.to_s,
52
- ResourceBuilder.cluster_load_assignment(cluster_name, endpoints)
55
+ Endpoint.build(cluster_name, endpoints)
53
56
  )
54
57
  end
55
58
 
@@ -141,7 +144,7 @@ module Async
141
144
 
142
145
  Envoy::Service::Discovery::V3::DiscoveryResponse.new(
143
146
  version_info: version,
144
- resources: resources.map{|resource| ResourceBuilder.pack(resource)},
147
+ resources: resources.map{|resource| Google::Protobuf::Any.pack(resource)},
145
148
  type_url: type_url,
146
149
  nonce: "#{type_url}:#{version}:#{SecureRandom.hex(8)}",
147
150
  control_plane: Envoy::Config::Core::V3::ControlPlane.new(identifier: @identifier)
@@ -16,6 +16,9 @@ require "envoy/config/cluster/v3/cluster_pb"
16
16
  require "envoy/config/endpoint/v3/endpoint_pb"
17
17
  require "google/protobuf/any_pb"
18
18
 
19
+ require_relative "cluster"
20
+ require_relative "endpoint"
21
+
19
22
  module Async
20
23
  module GRPC
21
24
  module XDS
@@ -27,8 +30,8 @@ module Async
27
30
  # xDS API type URLs (v3 API)
28
31
  LISTENER_TYPE = "type.googleapis.com/envoy.config.listener.v3.Listener"
29
32
  ROUTE_TYPE = "type.googleapis.com/envoy.config.route.v3.RouteConfiguration"
30
- CLUSTER_TYPE = "type.googleapis.com/envoy.config.cluster.v3.Cluster"
31
- ENDPOINT_TYPE = "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment"
33
+ CLUSTER_TYPE = Cluster::TYPE_URL
34
+ ENDPOINT_TYPE = Endpoint::TYPE_URL
32
35
  SECRET_TYPE = "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret"
33
36
 
34
37
  # Initialize xDS discovery client
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2026, by Samuel Williams.
5
+
6
+ require "envoy/config/core/v3/address_pb"
7
+ require "envoy/config/endpoint/v3/endpoint_pb"
8
+ require "envoy/config/endpoint/v3/endpoint_components_pb"
9
+
10
+ module Async
11
+ module GRPC
12
+ module XDS
13
+ # Builds Envoy endpoint resources.
14
+ module Endpoint
15
+ extend self
16
+
17
+ TYPE_URL = "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment"
18
+
19
+ # Build an EDS cluster load assignment from normalized endpoint state.
20
+ # @parameter cluster_name [String] The cluster name.
21
+ # @parameter endpoints [Array(Hash)] The endpoints, each containing `:addresses` and `:healthy`.
22
+ # @returns [Envoy::Config::Endpoint::V3::ClusterLoadAssignment] The generated endpoint resource.
23
+ def build(cluster_name, endpoints)
24
+ Envoy::Config::Endpoint::V3::ClusterLoadAssignment.new(
25
+ cluster_name: cluster_name.to_s,
26
+ endpoints: [
27
+ Envoy::Config::Endpoint::V3::LocalityLbEndpoints.new(
28
+ lb_endpoints: endpoints.map{|endpoint| load_balancer_endpoint(endpoint)}
29
+ )
30
+ ]
31
+ )
32
+ end
33
+
34
+ private
35
+
36
+ # Build an Envoy load-balancer endpoint from normalized endpoint state.
37
+ # @parameter endpoint [Hash] The endpoint containing `:addresses` and `:healthy`.
38
+ # @returns [Envoy::Config::Endpoint::V3::LbEndpoint] The generated load-balancer endpoint.
39
+ # @raises [KeyError] If required endpoint state is missing.
40
+ # @raises [ArgumentError] If the endpoint has no addresses.
41
+ # @private
42
+ def load_balancer_endpoint(endpoint)
43
+ addresses, healthy = endpoint.fetch_values(:addresses, :healthy)
44
+ raise ArgumentError, "An endpoint requires at least one address!" if addresses.empty?
45
+
46
+ address, *additional_addresses = addresses
47
+
48
+ Envoy::Config::Endpoint::V3::LbEndpoint.new(
49
+ endpoint: Envoy::Config::Endpoint::V3::Endpoint.new(
50
+ address: build_address(address),
51
+ hostname: endpoint[:hostname],
52
+ additional_addresses: additional_addresses.map do |additional_address|
53
+ Envoy::Config::Endpoint::V3::Endpoint::AdditionalAddress.new(
54
+ address: build_address(additional_address)
55
+ )
56
+ end
57
+ ),
58
+ health_status: health_status_value(healthy)
59
+ )
60
+ end
61
+
62
+ # Build an Envoy address from a normalized IP or Unix address.
63
+ # @parameter address [Hash] An IP `:address` and `:port`, or a Unix `:path`.
64
+ # @returns [Envoy::Config::Core::V3::Address] The generated Envoy address.
65
+ # @raises [KeyError] If required IP address state is missing.
66
+ # @private
67
+ def build_address(address)
68
+ if path = address[:path]
69
+ Envoy::Config::Core::V3::Address.new(
70
+ pipe: Envoy::Config::Core::V3::Pipe.new(path: path)
71
+ )
72
+ else
73
+ Envoy::Config::Core::V3::Address.new(
74
+ socket_address: Envoy::Config::Core::V3::SocketAddress.new(
75
+ protocol: Envoy::Config::Core::V3::SocketAddress::Protocol::TCP,
76
+ address: address.fetch(:address),
77
+ port_value: address.fetch(:port)
78
+ )
79
+ )
80
+ end
81
+ end
82
+
83
+ # Convert an endpoint health status to its Envoy enum value.
84
+ # @parameter healthy [Boolean | Symbol | String] The normalized health status.
85
+ # @returns [Integer] The Envoy health-status enum value.
86
+ # @private
87
+ def health_status_value(healthy)
88
+ case healthy
89
+ when :healthy, :HEALTHY, "healthy", "HEALTHY", true
90
+ Envoy::Config::Core::V3::HealthStatus::HEALTHY
91
+ when :unhealthy, :UNHEALTHY, "unhealthy", "UNHEALTHY", false
92
+ Envoy::Config::Core::V3::HealthStatus::UNHEALTHY
93
+ when :degraded, :DEGRADED, "degraded", "DEGRADED"
94
+ Envoy::Config::Core::V3::HealthStatus::DEGRADED
95
+ else
96
+ Envoy::Config::Core::V3::HealthStatus::UNKNOWN
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2026, by Samuel Williams.
5
+
6
+ require "google/protobuf/duration_pb"
7
+ require "google/protobuf/wrappers_pb"
8
+
9
+ require "envoy/config/core/v3/health_check_pb"
10
+
11
+ module Async
12
+ module GRPC
13
+ module XDS
14
+ # Builds Envoy HTTP active health checks.
15
+ module HTTPHealthCheck
16
+ extend self
17
+
18
+ # Build an HTTP active health check.
19
+ # @parameter path [String] The request path used to check each endpoint.
20
+ # @parameter interval [Numeric] The interval between checks in seconds.
21
+ # @parameter timeout [Numeric] The check timeout in seconds.
22
+ # @parameter unhealthy_threshold [Integer] The consecutive failures required to mark an endpoint unhealthy.
23
+ # @parameter healthy_threshold [Integer] The consecutive successes required to mark an endpoint healthy.
24
+ # @returns [Envoy::Config::Core::V3::HealthCheck] The generated health check.
25
+ def build(path, interval: 1, timeout: 1, unhealthy_threshold: 2, healthy_threshold: 1)
26
+ Envoy::Config::Core::V3::HealthCheck.new(
27
+ timeout: duration(timeout),
28
+ interval: duration(interval),
29
+ unhealthy_threshold: Google::Protobuf::UInt32Value.new(value: Integer(unhealthy_threshold)),
30
+ healthy_threshold: Google::Protobuf::UInt32Value.new(value: Integer(healthy_threshold)),
31
+ http_health_check: Envoy::Config::Core::V3::HealthCheck::HttpHealthCheck.new(path: path.to_s)
32
+ )
33
+ end
34
+
35
+ private
36
+
37
+ def duration(value)
38
+ seconds = value.to_i
39
+
40
+ Google::Protobuf::Duration.new(
41
+ seconds: seconds,
42
+ nanos: ((value.to_f - seconds) * 1_000_000_000).to_i
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -9,7 +9,7 @@ module Async
9
9
  module GRPC
10
10
  # @namespace
11
11
  module XDS
12
- VERSION = "0.1.0"
12
+ VERSION = "0.3.0"
13
13
  end
14
14
  end
15
15
  end
@@ -13,7 +13,10 @@ require_relative "xds/health_checker"
13
13
  require_relative "xds/load_balancer"
14
14
  require_relative "xds/context"
15
15
  require_relative "xds/client"
16
- require_relative "xds/resource_builder"
16
+ require_relative "xds/cluster"
17
+ require_relative "xds/endpoint"
18
+ require_relative "xds/http_health_check"
19
+ require_relative "xds/client_side_weighted_round_robin"
17
20
  require_relative "xds/control_plane"
18
21
  require_relative "xds/service"
19
22
  require_relative "xds/server"
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
4
+ # source: envoy/config/common/mutation_rules/v3/mutation_rules.proto
5
+
6
+ require "google/protobuf"
7
+
8
+ require "envoy/config/core/v3/base_pb"
9
+ require "envoy/type/matcher/v3/regex_pb"
10
+ require "envoy/type/matcher/v3/string_pb"
11
+ require "google/protobuf/wrappers_pb"
12
+ require "udpa/annotations/status_pb"
13
+ require "validate/validate_pb"
14
+
15
+
16
+ descriptor_data = "\n:envoy/config/common/mutation_rules/v3/mutation_rules.proto\x12%envoy.config.common.mutation_rules.v3\x1a\x1f\x65nvoy/config/core/v3/base.proto\x1a!envoy/type/matcher/v3/regex.proto\x1a\"envoy/type/matcher/v3/string.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1dudpa/annotations/status.proto\x1a\x17validate/validate.proto\"\x9c\x03\n\x13HeaderMutationRules\x12\x35\n\x11\x61llow_all_routing\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12/\n\x0b\x61llow_envoy\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0f\x64isallow_system\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x30\n\x0c\x64isallow_all\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12=\n\x10\x61llow_expression\x18\x05 \x01(\x0b\x32#.envoy.type.matcher.v3.RegexMatcher\x12@\n\x13\x64isallow_expression\x18\x06 \x01(\x0b\x32#.envoy.type.matcher.v3.RegexMatcher\x12\x35\n\x11\x64isallow_is_error\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xaf\x02\n\x0eHeaderMutation\x12\x1d\n\x06remove\x18\x01 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00H\x00\x12\x39\n\x06\x61ppend\x18\x02 \x01(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionH\x00\x12^\n\x0fremove_on_match\x18\x03 \x01(\x0b\x32\x43.envoy.config.common.mutation_rules.v3.HeaderMutation.RemoveOnMatchH\x00\x1aT\n\rRemoveOnMatch\x12\x43\n\x0bkey_matcher\x18\x01 \x01(\x0b\x32$.envoy.type.matcher.v3.StringMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x42\r\n\x06\x61\x63tion\x12\x03\xf8\x42\x01\x42\xb2\x01\n3io.envoyproxy.envoy.config.common.mutation_rules.v3B\x12MutationRulesProtoP\x01Z]github.com/envoyproxy/go-control-plane/envoy/config/common/mutation_rules/v3;mutation_rulesv3\xba\x80\xc8\xd1\x06\x02\x10\x02\x62\x06proto3"
17
+
18
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
19
+ pool.add_serialized_file(descriptor_data)
20
+
21
+ module Envoy
22
+ module Config
23
+ module Common
24
+ module MutationRules
25
+ module V3
26
+ HeaderMutationRules = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.common.mutation_rules.v3.HeaderMutationRules").msgclass
27
+ HeaderMutation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.common.mutation_rules.v3.HeaderMutation").msgclass
28
+ HeaderMutation::RemoveOnMatch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.common.mutation_rules.v3.HeaderMutation.RemoveOnMatch").msgclass
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
4
+ # source: envoy/config/route/v3/route_components.proto
5
+
6
+ require "google/protobuf"
7
+
8
+ require "envoy/config/common/mutation_rules/v3/mutation_rules_pb"
9
+ require "envoy/config/core/v3/base_pb"
10
+ require "envoy/config/core/v3/extension_pb"
11
+ require "envoy/config/core/v3/proxy_protocol_pb"
12
+ require "envoy/config/core/v3/substitution_format_string_pb"
13
+ require "envoy/type/matcher/v3/filter_state_pb"
14
+ require "envoy/type/matcher/v3/metadata_pb"
15
+ require "envoy/type/matcher/v3/regex_pb"
16
+ require "envoy/type/matcher/v3/string_pb"
17
+ require "envoy/type/metadata/v3/metadata_pb"
18
+ require "envoy/type/tracing/v3/custom_tag_pb"
19
+ require "envoy/type/v3/percent_pb"
20
+ require "envoy/type/v3/range_pb"
21
+ require "google/protobuf/any_pb"
22
+ require "google/protobuf/duration_pb"
23
+ require "google/protobuf/wrappers_pb"
24
+ require "xds/type/matcher/v3/matcher_pb"
25
+ require "envoy/annotations/deprecation_pb"
26
+ require "udpa/annotations/migrate_pb"
27
+ require "udpa/annotations/status_pb"
28
+ require "udpa/annotations/versioning_pb"
29
+ require "validate/validate_pb"
30
+
31
+
32
+ descriptor_data = "\n,envoy/config/route/v3/route_components.proto\x12\x15\x65nvoy.config.route.v3\x1a:envoy/config/common/mutation_rules/v3/mutation_rules.proto\x1a\x1f\x65nvoy/config/core/v3/base.proto\x1a$envoy/config/core/v3/extension.proto\x1a)envoy/config/core/v3/proxy_protocol.proto\x1a\x35\x65nvoy/config/core/v3/substitution_format_string.proto\x1a(envoy/type/matcher/v3/filter_state.proto\x1a$envoy/type/matcher/v3/metadata.proto\x1a!envoy/type/matcher/v3/regex.proto\x1a\"envoy/type/matcher/v3/string.proto\x1a%envoy/type/metadata/v3/metadata.proto\x1a&envoy/type/tracing/v3/custom_tag.proto\x1a\x1b\x65nvoy/type/v3/percent.proto\x1a\x19\x65nvoy/type/v3/range.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a!xds/type/matcher/v3/matcher.proto\x1a#envoy/annotations/deprecation.proto\x1a\x1eudpa/annotations/migrate.proto\x1a\x1dudpa/annotations/status.proto\x1a!udpa/annotations/versioning.proto\x1a\x17validate/validate.proto\"\x81\r\n\x0bVirtualHost\x12\x15\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12#\n\x07\x64omains\x18\x02 \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\x08\x01\"\x08r\x06\xc0\x01\x02\xc8\x01\x00\x12\x45\n\x06routes\x18\x03 \x03(\x0b\x32\x1c.envoy.config.route.v3.RouteB\x17\xf2\x98\xfe\x8f\x05\x11\x12\x0froute_selection\x12\x46\n\x07matcher\x18\x15 \x01(\x0b\x32\x1c.xds.type.matcher.v3.MatcherB\x17\xf2\x98\xfe\x8f\x05\x11\x12\x0froute_selection\x12T\n\x0brequire_tls\x18\x04 \x01(\x0e\x32\x35.envoy.config.route.v3.VirtualHost.TlsRequirementTypeB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x12?\n\x10virtual_clusters\x18\x05 \x03(\x0b\x32%.envoy.config.route.v3.VirtualCluster\x12\x35\n\x0brate_limits\x18\x06 \x03(\x0b\x32 .envoy.config.route.v3.RateLimit\x12R\n\x16request_headers_to_add\x18\x07 \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x35\n\x19request_headers_to_remove\x18\r \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\"\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12S\n\x17response_headers_to_add\x18\n \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x36\n\x1aresponse_headers_to_remove\x18\x0b \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\"\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12<\n\x04\x63ors\x18\x08 \x01(\x0b\x32!.envoy.config.route.v3.CorsPolicyB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12]\n\x17typed_per_filter_config\x18\x0f \x03(\x0b\x32<.envoy.config.route.v3.VirtualHost.TypedPerFilterConfigEntry\x12%\n\x1dinclude_request_attempt_count\x18\x0e \x01(\x08\x12)\n!include_attempt_count_in_response\x18\x13 \x01(\x08\x12\x38\n\x0cretry_policy\x18\x10 \x01(\x0b\x32\".envoy.config.route.v3.RetryPolicy\x12\x37\n\x19retry_policy_typed_config\x18\x14 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x38\n\x0chedge_policy\x18\x11 \x01(\x0b\x32\".envoy.config.route.v3.HedgePolicy\x12\'\n\x1finclude_is_timeout_retry_header\x18\x17 \x01(\x08\x12Q\n\x1eper_request_buffer_limit_bytes\x18\x12 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12I\n\x19request_body_buffer_limit\x18\x19 \x01(\x0b\x32\x1c.google.protobuf.UInt64ValueB\x08\xfa\x42\x05\x8a\x01\x02\x10\x00\x12W\n\x17request_mirror_policies\x18\x16 \x03(\x0b\x32\x36.envoy.config.route.v3.RouteAction.RequestMirrorPolicy\x12\x30\n\x08metadata\x18\x18 \x01(\x0b\x32\x1e.envoy.config.core.v3.Metadata\x1aQ\n\x19TypedPerFilterConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\":\n\x12TlsRequirementType\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rEXTERNAL_ONLY\x10\x01\x12\x07\n\x03\x41LL\x10\x02:%\x9a\xc5\x88\x1e \n\x1e\x65nvoy.api.v2.route.VirtualHostJ\x04\x08\t\x10\nJ\x04\x08\x0c\x10\rR\x11per_filter_config\"\\\n\x0c\x46ilterAction\x12$\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any:&\x9a\xc5\x88\x1e!\n\x1f\x65nvoy.api.v2.route.FilterAction\"9\n\tRouteList\x12,\n\x06routes\x18\x01 \x03(\x0b\x32\x1c.envoy.config.route.v3.Route\"\xe8\t\n\x05Route\x12\x0c\n\x04name\x18\x0e \x01(\t\x12:\n\x05match\x18\x01 \x01(\x0b\x32!.envoy.config.route.v3.RouteMatchB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x33\n\x05route\x18\x02 \x01(\x0b\x32\".envoy.config.route.v3.RouteActionH\x00\x12\x39\n\x08redirect\x18\x03 \x01(\x0b\x32%.envoy.config.route.v3.RedirectActionH\x00\x12\x46\n\x0f\x64irect_response\x18\x07 \x01(\x0b\x32+.envoy.config.route.v3.DirectResponseActionH\x00\x12<\n\rfilter_action\x18\x11 \x01(\x0b\x32#.envoy.config.route.v3.FilterActionH\x00\x12K\n\x15non_forwarding_action\x18\x12 \x01(\x0b\x32*.envoy.config.route.v3.NonForwardingActionH\x00\x12\x30\n\x08metadata\x18\x04 \x01(\x0b\x32\x1e.envoy.config.core.v3.Metadata\x12\x33\n\tdecorator\x18\x05 \x01(\x0b\x32 .envoy.config.route.v3.Decorator\x12W\n\x17typed_per_filter_config\x18\r \x03(\x0b\x32\x36.envoy.config.route.v3.Route.TypedPerFilterConfigEntry\x12R\n\x16request_headers_to_add\x18\t \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x35\n\x19request_headers_to_remove\x18\x0c \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\"\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12S\n\x17response_headers_to_add\x18\n \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x36\n\x1aresponse_headers_to_remove\x18\x0b \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\"\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12/\n\x07tracing\x18\x0f \x01(\x0b\x32\x1e.envoy.config.route.v3.Tracing\x12Q\n\x1eper_request_buffer_limit_bytes\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12\x13\n\x0bstat_prefix\x18\x13 \x01(\t\x12?\n\x19request_body_buffer_limit\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x1aQ\n\x19TypedPerFilterConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01:\x1f\x9a\xc5\x88\x1e\x1a\n\x18\x65nvoy.api.v2.route.RouteB\r\n\x06\x61\x63tion\x12\x03\xf8\x42\x01J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tR\x11per_filter_config\"\xb6\t\n\x0fWeightedCluster\x12P\n\x08\x63lusters\x18\x01 \x03(\x0b\x32\x34.envoy.config.route.v3.WeightedCluster.ClusterWeightB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x12?\n\x0ctotal_weight\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12\x1a\n\x12runtime_key_prefix\x18\x02 \x01(\t\x12\"\n\x0bheader_name\x18\x04 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x01\xc8\x01\x00H\x00\x12\x35\n\x0fuse_hash_policy\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueH\x00\x1a\xd3\x06\n\rClusterWeight\x12\'\n\x04name\x18\x01 \x01(\tB\x19\xf2\x98\xfe\x8f\x05\x13\x12\x11\x63luster_specifier\x12<\n\x0e\x63luster_header\x18\x0c \x01(\tB$\xfa\x42\x08r\x06\xc0\x01\x01\xc8\x01\x00\xf2\x98\xfe\x8f\x05\x13\x12\x11\x63luster_specifier\x12,\n\x06weight\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x36\n\x0emetadata_match\x18\x03 \x01(\x0b\x32\x1e.envoy.config.core.v3.Metadata\x12R\n\x16request_headers_to_add\x18\x04 \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x33\n\x19request_headers_to_remove\x18\t \x03(\tB\x10\xfa\x42\r\x92\x01\n\"\x08r\x06\xc0\x01\x01\xc8\x01\x00\x12S\n\x17response_headers_to_add\x18\x05 \x03(\x0b\x32\'.envoy.config.core.v3.HeaderValueOptionB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12\x34\n\x1aresponse_headers_to_remove\x18\x06 \x03(\tB\x10\xfa\x42\r\x92\x01\n\"\x08r\x06\xc0\x01\x01\xc8\x01\x00\x12o\n\x17typed_per_filter_config\x18\n \x03(\x0b\x32N.envoy.config.route.v3.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry\x12+\n\x14host_rewrite_literal\x18\x0b \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00H\x00\x1aQ\n\x19TypedPerFilterConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01:7\x9a\xc5\x88\x1e\x32\n0envoy.api.v2.route.WeightedCluster.ClusterWeightB\x18\n\x16host_rewrite_specifierJ\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\x11per_filter_config:)\x9a\xc5\x88\x1e$\n\"envoy.api.v2.route.WeightedClusterB\x18\n\x16random_value_specifier\"v\n\x16\x43lusterSpecifierPlugin\x12G\n\textension\x18\x01 \x01(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfigB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x13\n\x0bis_optional\x18\x02 \x01(\x08\"\xfb\t\n\nRouteMatch\x12\x10\n\x06prefix\x18\x01 \x01(\tH\x00\x12\x0e\n\x04path\x18\x02 \x01(\tH\x00\x12\x43\n\nsafe_regex\x18\n \x01(\x0b\x32#.envoy.type.matcher.v3.RegexMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01H\x00\x12K\n\x0f\x63onnect_matcher\x18\x0c \x01(\x0b\x32\x30.envoy.config.route.v3.RouteMatch.ConnectMatcherH\x00\x12\x36\n\x15path_separated_prefix\x18\x0e \x01(\tB\x15\xfa\x42\x12r\x10\x32\x0e^[^?#]+[^?#/]$H\x00\x12G\n\x11path_match_policy\x18\x0f \x01(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfigH\x00\x12\x32\n\x0e\x63\x61se_sensitive\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12H\n\x10runtime_fraction\x18\t \x01(\x0b\x32..envoy.config.core.v3.RuntimeFractionalPercent\x12\x35\n\x07headers\x18\x06 \x03(\x0b\x32$.envoy.config.route.v3.HeaderMatcher\x12\x46\n\x10query_parameters\x18\x07 \x03(\x0b\x32,.envoy.config.route.v3.QueryParameterMatcher\x12\x35\n\x07\x63ookies\x18\x11 \x03(\x0b\x32$.envoy.config.route.v3.CookieMatcher\x12\x45\n\x04grpc\x18\x08 \x01(\x0b\x32\x37.envoy.config.route.v3.RouteMatch.GrpcRouteMatchOptions\x12M\n\x0btls_context\x18\x0b \x01(\x0b\x32\x38.envoy.config.route.v3.RouteMatch.TlsContextMatchOptions\x12@\n\x10\x64ynamic_metadata\x18\r \x03(\x0b\x32&.envoy.type.matcher.v3.MetadataMatcher\x12?\n\x0c\x66ilter_state\x18\x10 \x03(\x0b\x32).envoy.type.matcher.v3.FilterStateMatcher\x1aS\n\x15GrpcRouteMatchOptions::\x9a\xc5\x88\x1e\x35\n3envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions\x1a\xb3\x01\n\x16TlsContextMatchOptions\x12-\n\tpresented\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\tvalidated\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:;\x9a\xc5\x88\x1e\x36\n4envoy.api.v2.route.RouteMatch.TlsContextMatchOptions\x1a\x10\n\x0e\x43onnectMatcher:$\x9a\xc5\x88\x1e\x1f\n\x1d\x65nvoy.api.v2.route.RouteMatchB\x15\n\x0epath_specifier\x12\x03\xf8\x42\x01J\x04\x08\x05\x10\x06J\x04\x08\x03\x10\x04R\x05regex\"\xf4\x04\n\nCorsPolicy\x12G\n\x19\x61llow_origin_string_match\x18\x0b \x03(\x0b\x32$.envoy.type.matcher.v3.StringMatcher\x12\x15\n\rallow_methods\x18\x02 \x01(\t\x12\x15\n\rallow_headers\x18\x03 \x01(\t\x12\x16\n\x0e\x65xpose_headers\x18\x04 \x01(\t\x12\x0f\n\x07max_age\x18\x05 \x01(\t\x12\x35\n\x11\x61llow_credentials\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12H\n\x0e\x66ilter_enabled\x18\t \x01(\x0b\x32..envoy.config.core.v3.RuntimeFractionalPercentH\x00\x12\x46\n\x0eshadow_enabled\x18\n \x01(\x0b\x32..envoy.config.core.v3.RuntimeFractionalPercent\x12@\n\x1c\x61llow_private_network_access\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x43\n\x1f\x66orward_not_matching_preflights\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValue:$\x9a\xc5\x88\x1e\x1f\n\x1d\x65nvoy.api.v2.route.CorsPolicyB\x13\n\x11\x65nabled_specifierJ\x04\x08\x01\x10\x02J\x04\x08\x08\x10\tJ\x04\x08\x07\x10\x08R\x0c\x61llow_originR\x12\x61llow_origin_regexR\x07\x65nabled\"\xb7\'\n\x0bRouteAction\x12\x1a\n\x07\x63luster\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\'\n\x0e\x63luster_header\x18\x02 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00H\x00\x12\x43\n\x11weighted_clusters\x18\x03 \x01(\x0b\x32&.envoy.config.route.v3.WeightedClusterH\x00\x12\"\n\x18\x63luster_specifier_plugin\x18% \x01(\tH\x00\x12X\n\x1finline_cluster_specifier_plugin\x18\' \x01(\x0b\x32-.envoy.config.route.v3.ClusterSpecifierPluginH\x00\x12q\n\x1f\x63luster_not_found_response_code\x18\x14 \x01(\x0e\x32>.envoy.config.route.v3.RouteAction.ClusterNotFoundResponseCodeB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x12\x36\n\x0emetadata_match\x18\x04 \x01(\x0b\x32\x1e.envoy.config.core.v3.Metadata\x12#\n\x0eprefix_rewrite\x18\x05 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00\x12\x45\n\rregex_rewrite\x18 \x01(\x0b\x32..envoy.type.matcher.v3.RegexMatchAndSubstitute\x12G\n\x13path_rewrite_policy\x18) \x01(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfig\x12\x14\n\x0cpath_rewrite\x18- \x01(\t\x12+\n\x14host_rewrite_literal\x18\x06 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00H\x01\x12\x37\n\x11\x61uto_host_rewrite\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueH\x01\x12*\n\x13host_rewrite_header\x18\x1d \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x01\xc8\x01\x00H\x01\x12Q\n\x17host_rewrite_path_regex\x18# \x01(\x0b\x32..envoy.type.matcher.v3.RegexMatchAndSubstituteH\x01\x12\x16\n\x0chost_rewrite\x18, \x01(\tH\x01\x12\x1f\n\x17\x61ppend_x_forwarded_host\x18& \x01(\x08\x12*\n\x07timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12/\n\x0cidle_timeout\x18\x18 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x30\n\rflush_timeout\x18* \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x45\n\x11\x65\x61rly_data_policy\x18( \x01(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfig\x12\x38\n\x0cretry_policy\x18\t \x01(\x0b\x32\".envoy.config.route.v3.RetryPolicy\x12\x37\n\x19retry_policy_typed_config\x18! \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x17request_mirror_policies\x18\x1e \x03(\x0b\x32\x36.envoy.config.route.v3.RouteAction.RequestMirrorPolicy\x12\x41\n\x08priority\x18\x0b \x01(\x0e\x32%.envoy.config.core.v3.RoutingPriorityB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x12\x35\n\x0brate_limits\x18\r \x03(\x0b\x32 .envoy.config.route.v3.RateLimit\x12G\n\x16include_vh_rate_limits\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12\x42\n\x0bhash_policy\x18\x0f \x03(\x0b\x32-.envoy.config.route.v3.RouteAction.HashPolicy\x12<\n\x04\x63ors\x18\x11 \x01(\x0b\x32!.envoy.config.route.v3.CorsPolicyB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12@\n\x10max_grpc_timeout\x18\x17 \x01(\x0b\x32\x19.google.protobuf.DurationB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12\x43\n\x13grpc_timeout_offset\x18\x1c \x01(\x0b\x32\x19.google.protobuf.DurationB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12I\n\x0fupgrade_configs\x18\x19 \x03(\x0b\x32\x30.envoy.config.route.v3.RouteAction.UpgradeConfig\x12O\n\x18internal_redirect_policy\x18\" \x01(\x0b\x32-.envoy.config.route.v3.InternalRedirectPolicy\x12h\n\x18internal_redirect_action\x18\x1a \x01(\x0e\x32\x39.envoy.config.route.v3.RouteAction.InternalRedirectActionB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12I\n\x16max_internal_redirects\x18\x1f \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\x12\x38\n\x0chedge_policy\x18\x1b \x01(\x0b\x32\".envoy.config.route.v3.HedgePolicy\x12Q\n\x13max_stream_duration\x18$ \x01(\x0b\x32\x34.envoy.config.route.v3.RouteAction.MaxStreamDuration\x1a\x85\x04\n\x13RequestMirrorPolicy\x12*\n\x07\x63luster\x18\x01 \x01(\tB\x19\xf2\x98\xfe\x8f\x05\x13\x12\x11\x63luster_specifier\x12<\n\x0e\x63luster_header\x18\x05 \x01(\tB$\xfa\x42\x08r\x06\xc0\x01\x01\xc8\x01\x00\xf2\x98\xfe\x8f\x05\x13\x12\x11\x63luster_specifier\x12H\n\x10runtime_fraction\x18\x03 \x01(\x0b\x32..envoy.config.core.v3.RuntimeFractionalPercent\x12\x31\n\rtrace_sampled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12)\n!disable_shadow_host_suffix_append\x18\x06 \x01(\x08\x12\x63\n\x19request_headers_mutations\x18\x07 \x03(\x0b\x32\x35.envoy.config.common.mutation_rules.v3.HeaderMutationB\t\xfa\x42\x06\x92\x01\x03\x10\xe8\x07\x12)\n\x14host_rewrite_literal\x18\x08 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00:9\x9a\xc5\x88\x1e\x34\n2envoy.api.v2.route.RouteAction.RequestMirrorPolicyJ\x04\x08\x02\x10\x03R\x0bruntime_key\x1a\xb0\n\n\nHashPolicy\x12\x46\n\x06header\x18\x01 \x01(\x0b\x32\x34.envoy.config.route.v3.RouteAction.HashPolicy.HeaderH\x00\x12\x46\n\x06\x63ookie\x18\x02 \x01(\x0b\x32\x34.envoy.config.route.v3.RouteAction.HashPolicy.CookieH\x00\x12\x63\n\x15\x63onnection_properties\x18\x03 \x01(\x0b\x32\x42.envoy.config.route.v3.RouteAction.HashPolicy.ConnectionPropertiesH\x00\x12W\n\x0fquery_parameter\x18\x05 \x01(\x0b\x32<.envoy.config.route.v3.RouteAction.HashPolicy.QueryParameterH\x00\x12Q\n\x0c\x66ilter_state\x18\x06 \x01(\x0b\x32\x39.envoy.config.route.v3.RouteAction.HashPolicy.FilterStateH\x00\x12\x10\n\x08terminal\x18\x04 \x01(\x08\x1a\xac\x01\n\x06Header\x12\"\n\x0bheader_name\x18\x01 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12\x45\n\rregex_rewrite\x18\x02 \x01(\x0b\x32..envoy.type.matcher.v3.RegexMatchAndSubstitute:7\x9a\xc5\x88\x1e\x32\n0envoy.api.v2.route.RouteAction.HashPolicy.Header\x1aR\n\x0f\x43ookieAttribute\x12\x1f\n\x04name\x18\x01 \x01(\tB\x11\xfa\x42\x0er\x0c\x10\x01(\x80\x80\x01\xc0\x01\x01\xc8\x01\x00\x12\x1e\n\x05value\x18\x02 \x01(\tB\x0f\xfa\x42\x0cr\n(\x80\x80\x01\xc0\x01\x02\xc8\x01\x00\x1a\xe1\x01\n\x06\x43ookie\x12\x15\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12&\n\x03ttl\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04path\x18\x03 \x01(\t\x12Q\n\nattributes\x18\x04 \x03(\x0b\x32=.envoy.config.route.v3.RouteAction.HashPolicy.CookieAttribute:7\x9a\xc5\x88\x1e\x32\n0envoy.api.v2.route.RouteAction.HashPolicy.Cookie\x1ap\n\x14\x43onnectionProperties\x12\x11\n\tsource_ip\x18\x01 \x01(\x08:E\x9a\xc5\x88\x1e@\n>envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties\x1ah\n\x0eQueryParameter\x12\x15\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01:?\x9a\xc5\x88\x1e:\n8envoy.api.v2.route.RouteAction.HashPolicy.QueryParameter\x1a\x61\n\x0b\x46ilterState\x12\x14\n\x03key\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01:<\x9a\xc5\x88\x1e\x37\n5envoy.api.v2.route.RouteAction.HashPolicy.FilterState:0\x9a\xc5\x88\x1e+\n)envoy.api.v2.route.RouteAction.HashPolicyB\x17\n\x10policy_specifier\x12\x03\xf8\x42\x01\x1a\xdd\x02\n\rUpgradeConfig\x12#\n\x0cupgrade_type\x18\x01 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x02\xc8\x01\x00\x12+\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12V\n\x0e\x63onnect_config\x18\x03 \x01(\x0b\x32>.envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfig\x1am\n\rConnectConfig\x12H\n\x15proxy_protocol_config\x18\x01 \x01(\x0b\x32).envoy.config.core.v3.ProxyProtocolConfig\x12\x12\n\nallow_post\x18\x02 \x01(\x08:3\x9a\xc5\x88\x1e.\n,envoy.api.v2.route.RouteAction.UpgradeConfig\x1a\xc6\x01\n\x11MaxStreamDuration\x12\x36\n\x13max_stream_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x12:\n\x17grpc_timeout_header_max\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12=\n\x1agrpc_timeout_header_offset\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\"`\n\x1b\x43lusterNotFoundResponseCode\x12\x17\n\x13SERVICE_UNAVAILABLE\x10\x00\x12\r\n\tNOT_FOUND\x10\x01\x12\x19\n\x15INTERNAL_SERVER_ERROR\x10\x02\"^\n\x16InternalRedirectAction\x12\"\n\x1ePASS_THROUGH_INTERNAL_REDIRECT\x10\x00\x12\x1c\n\x18HANDLE_INTERNAL_REDIRECT\x10\x01\x1a\x02\x18\x01:%\x9a\xc5\x88\x1e \n\x1e\x65nvoy.api.v2.route.RouteActionB\x18\n\x11\x63luster_specifier\x12\x03\xf8\x42\x01\x42\x18\n\x16host_rewrite_specifierJ\x04\x08\x0c\x10\rJ\x04\x08\x12\x10\x13J\x04\x08\x13\x10\x14J\x04\x08\x10\x10\x11J\x04\x08\x16\x10\x17J\x04\x08\x15\x10\x16J\x04\x08\n\x10\x0bR\x15request_mirror_policy\"\xdb\r\n\x0bRetryPolicy\x12\x10\n\x08retry_on\x18\x01 \x01(\t\x12\x46\n\x0bnum_retries\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x13\xf2\x98\xfe\x8f\x05\r\n\x0bmax_retries\x12\x32\n\x0fper_try_timeout\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x37\n\x14per_try_idle_timeout\x18\r \x01(\x0b\x32\x19.google.protobuf.Duration\x12H\n\x0eretry_priority\x18\x04 \x01(\x0b\x32\x30.envoy.config.route.v3.RetryPolicy.RetryPriority\x12S\n\x14retry_host_predicate\x18\x05 \x03(\x0b\x32\x35.envoy.config.route.v3.RetryPolicy.RetryHostPredicate\x12L\n\x18retry_options_predicates\x18\x0c \x03(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfig\x12)\n!host_selection_retry_max_attempts\x18\x06 \x01(\x03\x12\x1e\n\x16retriable_status_codes\x18\x07 \x03(\r\x12G\n\x0eretry_back_off\x18\x08 \x01(\x0b\x32/.envoy.config.route.v3.RetryPolicy.RetryBackOff\x12_\n\x1brate_limited_retry_back_off\x18\x0b \x01(\x0b\x32:.envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff\x12?\n\x11retriable_headers\x18\t \x03(\x0b\x32$.envoy.config.route.v3.HeaderMatcher\x12G\n\x19retriable_request_headers\x18\n \x03(\x0b\x32$.envoy.config.route.v3.HeaderMatcher\x1a\xa6\x01\n\rRetryPriority\x12\x15\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12,\n\x0ctyped_config\x18\x03 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00:3\x9a\xc5\x88\x1e.\n,envoy.api.v2.route.RetryPolicy.RetryPriorityB\r\n\x0b\x63onfig_typeJ\x04\x08\x02\x10\x03R\x06\x63onfig\x1a\xb0\x01\n\x12RetryHostPredicate\x12\x15\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12,\n\x0ctyped_config\x18\x03 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00:8\x9a\xc5\x88\x1e\x33\n1envoy.api.v2.route.RetryPolicy.RetryHostPredicateB\r\n\x0b\x63onfig_typeJ\x04\x08\x02\x10\x03R\x06\x63onfig\x1a\xbb\x01\n\x0cRetryBackOff\x12<\n\rbase_interval\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB\n\xfa\x42\x07\xaa\x01\x04\x08\x01*\x00\x12\x39\n\x0cmax_interval\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB\x08\xfa\x42\x05\xaa\x01\x02*\x00:2\x9a\xc5\x88\x1e-\n+envoy.api.v2.route.RetryPolicy.RetryBackOff\x1az\n\x0bResetHeader\x12\x1b\n\x04name\x18\x01 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12N\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x34.envoy.config.route.v3.RetryPolicy.ResetHeaderFormatB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x1a\xa5\x01\n\x17RateLimitedRetryBackOff\x12O\n\rreset_headers\x18\x01 \x03(\x0b\x32..envoy.config.route.v3.RetryPolicy.ResetHeaderB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x12\x39\n\x0cmax_interval\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB\x08\xfa\x42\x05\xaa\x01\x02*\x00\"4\n\x11ResetHeaderFormat\x12\x0b\n\x07SECONDS\x10\x00\x12\x12\n\x0eUNIX_TIMESTAMP\x10\x01:%\x9a\xc5\x88\x1e \n\x1e\x65nvoy.api.v2.route.RetryPolicy\"\xdc\x01\n\x0bHedgePolicy\x12?\n\x10initial_requests\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x07\xfa\x42\x04*\x02(\x01\x12\x43\n\x19\x61\x64\x64itional_request_chance\x18\x02 \x01(\x0b\x32 .envoy.type.v3.FractionalPercent\x12 \n\x18hedge_on_per_try_timeout\x18\x03 \x01(\x08:%\x9a\xc5\x88\x1e \n\x1e\x65nvoy.api.v2.route.HedgePolicy\"\xe1\x04\n\x0eRedirectAction\x12\x18\n\x0ehttps_redirect\x18\x04 \x01(\x08H\x00\x12\x19\n\x0fscheme_redirect\x18\x07 \x01(\tH\x00\x12\"\n\rhost_redirect\x18\x01 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00\x12\x15\n\rport_redirect\x18\x08 \x01(\r\x12$\n\rpath_redirect\x18\x02 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00H\x01\x12%\n\x0eprefix_rewrite\x18\x05 \x01(\tB\x0b\xfa\x42\x08r\x06\xc0\x01\x02\xc8\x01\x00H\x01\x12G\n\rregex_rewrite\x18\t \x01(\x0b\x32..envoy.type.matcher.v3.RegexMatchAndSubstituteH\x01\x12[\n\rresponse_code\x18\x03 \x01(\x0e\x32:.envoy.config.route.v3.RedirectAction.RedirectResponseCodeB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x12\x13\n\x0bstrip_query\x18\x06 \x01(\x08\"w\n\x14RedirectResponseCode\x12\x15\n\x11MOVED_PERMANENTLY\x10\x00\x12\t\n\x05\x46OUND\x10\x01\x12\r\n\tSEE_OTHER\x10\x02\x12\x16\n\x12TEMPORARY_REDIRECT\x10\x03\x12\x16\n\x12PERMANENT_REDIRECT\x10\x04:(\x9a\xc5\x88\x1e#\n!envoy.api.v2.route.RedirectActionB\x1a\n\x18scheme_rewrite_specifierB\x18\n\x16path_rewrite_specifier\"\xd8\x01\n\x14\x44irectResponseAction\x12\x1b\n\x06status\x18\x01 \x01(\rB\x0b\xfa\x42\x08*\x06\x10\xd8\x04(\xc8\x01\x12.\n\x04\x62ody\x18\x02 \x01(\x0b\x32 .envoy.config.core.v3.DataSource\x12\x43\n\x0b\x62ody_format\x18\x03 \x01(\x0b\x32..envoy.config.core.v3.SubstitutionFormatString:.\x9a\xc5\x88\x1e)\n\'envoy.api.v2.route.DirectResponseAction\"\x15\n\x13NonForwardingAction\"{\n\tDecorator\x12\x1a\n\toperation\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12-\n\tpropagate\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:#\x9a\xc5\x88\x1e\x1e\n\x1c\x65nvoy.api.v2.route.Decorator\"\xc4\x02\n\x07Tracing\x12\x39\n\x0f\x63lient_sampling\x18\x01 \x01(\x0b\x32 .envoy.type.v3.FractionalPercent\x12\x39\n\x0frandom_sampling\x18\x02 \x01(\x0b\x32 .envoy.type.v3.FractionalPercent\x12:\n\x10overall_sampling\x18\x03 \x01(\x0b\x32 .envoy.type.v3.FractionalPercent\x12\x35\n\x0b\x63ustom_tags\x18\x04 \x03(\x0b\x32 .envoy.type.tracing.v3.CustomTag\x12\x11\n\toperation\x18\x05 \x01(\t\x12\x1a\n\x12upstream_operation\x18\x06 \x01(\t:!\x9a\xc5\x88\x1e\x1c\n\x1a\x65nvoy.api.v2.route.Tracing\"\xa5\x01\n\x0eVirtualCluster\x12\x35\n\x07headers\x18\x04 \x03(\x0b\x32$.envoy.config.route.v3.HeaderMatcher\x12\x15\n\x04name\x18\x02 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01:(\x9a\xc5\x88\x1e#\n!envoy.api.v2.route.VirtualClusterJ\x04\x08\x01\x10\x02J\x04\x08\x03\x10\x04R\x07patternR\x06method\"\xdf\x1b\n\tRateLimit\x12\x34\n\x05stage\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x07\xfa\x42\x04*\x02\x18\n\x12\x13\n\x0b\x64isable_key\x18\x02 \x01(\t\x12\x42\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\'.envoy.config.route.v3.RateLimit.ActionB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x12\x38\n\x05limit\x18\x04 \x01(\x0b\x32).envoy.config.route.v3.RateLimit.Override\x12@\n\x0bhits_addend\x18\x05 \x01(\x0b\x32+.envoy.config.route.v3.RateLimit.HitsAddend\x12\x1c\n\x14\x61pply_on_stream_done\x18\x06 \x01(\x08\x1a\xc3\x16\n\x06\x41\x63tion\x12O\n\x0esource_cluster\x18\x01 \x01(\x0b\x32\x35.envoy.config.route.v3.RateLimit.Action.SourceClusterH\x00\x12Y\n\x13\x64\x65stination_cluster\x18\x02 \x01(\x0b\x32:.envoy.config.route.v3.RateLimit.Action.DestinationClusterH\x00\x12Q\n\x0frequest_headers\x18\x03 \x01(\x0b\x32\x36.envoy.config.route.v3.RateLimit.Action.RequestHeadersH\x00\x12S\n\x10query_parameters\x18\x0c \x01(\x0b\x32\x37.envoy.config.route.v3.RateLimit.Action.QueryParametersH\x00\x12O\n\x0eremote_address\x18\x04 \x01(\x0b\x32\x35.envoy.config.route.v3.RateLimit.Action.RemoteAddressH\x00\x12I\n\x0bgeneric_key\x18\x05 \x01(\x0b\x32\x32.envoy.config.route.v3.RateLimit.Action.GenericKeyH\x00\x12V\n\x12header_value_match\x18\x06 \x01(\x0b\x32\x38.envoy.config.route.v3.RateLimit.Action.HeaderValueMatchH\x00\x12\x66\n\x10\x64ynamic_metadata\x18\x07 \x01(\x0b\x32\x37.envoy.config.route.v3.RateLimit.Action.DynamicMetaDataB\x11\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0\xb8\xee\xf2\xd2\x05\x01H\x00\x12\x44\n\x08metadata\x18\x08 \x01(\x0b\x32\x30.envoy.config.route.v3.RateLimit.Action.MetaDataH\x00\x12?\n\textension\x18\t \x01(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfigH\x00\x12\\\n\x15masked_remote_address\x18\n \x01(\x0b\x32;.envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddressH\x00\x12g\n\x1bquery_parameter_value_match\x18\x0b \x01(\x0b\x32@.envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatchH\x00\x1aI\n\rSourceCluster:8\x9a\xc5\x88\x1e\x33\n1envoy.api.v2.route.RateLimit.Action.SourceCluster\x1aS\n\x12\x44\x65stinationCluster:=\x9a\xc5\x88\x1e\x38\n6envoy.api.v2.route.RateLimit.Action.DestinationCluster\x1a\xa8\x01\n\x0eRequestHeaders\x12\"\n\x0bheader_name\x18\x01 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12\x1f\n\x0e\x64\x65scriptor_key\x18\x02 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x16\n\x0eskip_if_absent\x18\x03 \x01(\x08:9\x9a\xc5\x88\x1e\x34\n2envoy.api.v2.route.RateLimit.Action.RequestHeaders\x1aq\n\x0fQueryParameters\x12%\n\x14query_parameter_name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x1f\n\x0e\x64\x65scriptor_key\x18\x02 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x16\n\x0eskip_if_absent\x18\x03 \x01(\x08\x1aI\n\rRemoteAddress:8\x9a\xc5\x88\x1e\x33\n1envoy.api.v2.route.RateLimit.Action.RemoteAddress\x1a\x9c\x01\n\x13MaskedRemoteAddress\x12\x41\n\x12v4_prefix_mask_len\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x07\xfa\x42\x04*\x02\x18 \x12\x42\n\x12v6_prefix_mask_len\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x08\xfa\x42\x05*\x03\x18\x80\x01\x1a\x95\x01\n\nGenericKey\x12!\n\x10\x64\x65scriptor_value\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x15\n\rdefault_value\x18\x03 \x01(\t\x12\x16\n\x0e\x64\x65scriptor_key\x18\x02 \x01(\t:5\x9a\xc5\x88\x1e\x30\n.envoy.api.v2.route.RateLimit.Action.GenericKey\x1a\x94\x02\n\x10HeaderValueMatch\x12!\n\x10\x64\x65scriptor_value\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x15\n\rdefault_value\x18\x05 \x01(\t\x12\x16\n\x0e\x64\x65scriptor_key\x18\x04 \x01(\t\x12\x30\n\x0c\x65xpect_match\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12?\n\x07headers\x18\x03 \x03(\x0b\x32$.envoy.config.route.v3.HeaderMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01:;\x9a\xc5\x88\x1e\x36\n4envoy.api.v2.route.RateLimit.Action.HeaderValueMatch\x1a\x8e\x01\n\x0f\x44ynamicMetaData\x12\x1f\n\x0e\x64\x65scriptor_key\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x43\n\x0cmetadata_key\x18\x02 \x01(\x0b\x32#.envoy.type.metadata.v3.MetadataKeyB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x15\n\rdefault_value\x18\x03 \x01(\t\x1a\x9a\x02\n\x08MetaData\x12\x1f\n\x0e\x64\x65scriptor_key\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x43\n\x0cmetadata_key\x18\x02 \x01(\x0b\x32#.envoy.type.metadata.v3.MetadataKeyB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x15\n\rdefault_value\x18\x03 \x01(\t\x12Q\n\x06source\x18\x04 \x01(\x0e\x32\x37.envoy.config.route.v3.RateLimit.Action.MetaData.SourceB\x08\xfa\x42\x05\x82\x01\x02\x10\x01\x12\x16\n\x0eskip_if_absent\x18\x05 \x01(\x08\"&\n\x06Source\x12\x0b\n\x07\x44YNAMIC\x10\x00\x12\x0f\n\x0bROUTE_ENTRY\x10\x01\x1a\xf0\x01\n\x18QueryParameterValueMatch\x12!\n\x10\x64\x65scriptor_value\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01\x12\x15\n\rdefault_value\x18\x05 \x01(\t\x12\x16\n\x0e\x64\x65scriptor_key\x18\x04 \x01(\t\x12\x30\n\x0c\x65xpect_match\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12P\n\x10query_parameters\x18\x03 \x03(\x0b\x32,.envoy.config.route.v3.QueryParameterMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01:*\x9a\xc5\x88\x1e%\n#envoy.api.v2.route.RateLimit.ActionB\x17\n\x10\x61\x63tion_specifier\x12\x03\xf8\x42\x01\x1a\xd4\x01\n\x08Override\x12U\n\x10\x64ynamic_metadata\x18\x01 \x01(\x0b\x32\x39.envoy.config.route.v3.RateLimit.Override.DynamicMetadataH\x00\x1aV\n\x0f\x44ynamicMetadata\x12\x43\n\x0cmetadata_key\x18\x01 \x01(\x0b\x32#.envoy.type.metadata.v3.MetadataKeyB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x42\x19\n\x12override_specifier\x12\x03\xf8\x42\x01\x1ag\n\nHitsAddend\x12\x39\n\x06number\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt64ValueB\x0b\xfa\x42\x08\x32\x06\x18\x80\x94\xeb\xdc\x03\x12\x1e\n\x06\x66ormat\x18\x02 \x01(\tB\x0e\xfa\x42\x0br\t:\x01%B\x01%\xd0\x01\x01:#\x9a\xc5\x88\x1e\x1e\n\x1c\x65nvoy.api.v2.route.RateLimit\"\xcc\x04\n\rHeaderMatcher\x12\x1b\n\x04name\x18\x01 \x01(\tB\r\xfa\x42\nr\x08\x10\x01\xc0\x01\x01\xc8\x01\x00\x12\"\n\x0b\x65xact_match\x18\x04 \x01(\tB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0H\x00\x12L\n\x10safe_regex_match\x18\x0b \x01(\x0b\x32#.envoy.type.matcher.v3.RegexMatcherB\x0b\x18\x01\x92\xc7\x86\xd8\x04\x03\x33.0H\x00\x12\x30\n\x0brange_match\x18\x06 \x01(\x0b\x32\x19.envoy.type.v3.Int64RangeH\x00\x12\x17\n\rpresent_match\x18\x07 \x01(\x08H\x00\x12*\n\x0cprefix_match\x18\t \x01(\tB\x12\x18\x01\xfa\x42\x04r\x02\x10\x01\x92\xc7\x86\xd8\x04\x03\x33.0H\x00\x12*\n\x0csuffix_match\x18\n \x01(\tB\x12\x18\x01\xfa\x42\x04r\x02\x10\x01\x92\xc7\x86\xd8\x04\x03\x33.0H\x00\x12,\n\x0e\x63ontains_match\x18\x0c \x01(\tB\x12\x18\x01\xfa\x42\x04r\x02\x10\x01\x92\xc7\x86\xd8\x04\x03\x33.0H\x00\x12<\n\x0cstring_match\x18\r \x01(\x0b\x32$.envoy.type.matcher.v3.StringMatcherH\x00\x12\x14\n\x0cinvert_match\x18\x08 \x01(\x08\x12%\n\x1dtreat_missing_header_as_empty\x18\x0e \x01(\x08:\'\x9a\xc5\x88\x1e\"\n envoy.api.v2.route.HeaderMatcherB\x18\n\x16header_match_specifierJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06R\x0bregex_match\"\x80\x02\n\x15QueryParameterMatcher\x12\x18\n\x04name\x18\x01 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01(\x80\x08\x12\x46\n\x0cstring_match\x18\x05 \x01(\x0b\x32$.envoy.type.matcher.v3.StringMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01H\x00\x12\x17\n\rpresent_match\x18\x06 \x01(\x08H\x00:/\x9a\xc5\x88\x1e*\n(envoy.api.v2.route.QueryParameterMatcherB!\n\x1fquery_parameter_match_specifierJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05R\x05valueR\x05regex\"\x85\x01\n\rCookieMatcher\x12\x18\n\x04name\x18\x01 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01(\x80\x08\x12\x44\n\x0cstring_match\x18\x02 \x01(\x0b\x32$.envoy.type.matcher.v3.StringMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x14\n\x0cinvert_match\x18\x03 \x01(\x08\"\x9c\x02\n\x16InternalRedirectPolicy\x12<\n\x16max_internal_redirects\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12)\n\x17redirect_response_codes\x18\x02 \x03(\rB\x08\xfa\x42\x05\x92\x01\x02\x10\x05\x12>\n\npredicates\x18\x03 \x03(\x0b\x32*.envoy.config.core.v3.TypedExtensionConfig\x12#\n\x1b\x61llow_cross_scheme_redirect\x18\x04 \x01(\x08\x12\x34\n\x18response_headers_to_copy\x18\x05 \x03(\tB\x12\xfa\x42\x0f\x92\x01\x0c\x18\x01\"\x08r\x06\xc0\x01\x01\xc8\x01\x00\"[\n\x0c\x46ilterConfig\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x13\n\x0bis_optional\x18\x02 \x01(\x08\x12\x10\n\x08\x64isabled\x18\x03 \x01(\x08\x42\x8b\x01\n#io.envoyproxy.envoy.config.route.v3B\x14RouteComponentsProtoP\x01ZDgithub.com/envoyproxy/go-control-plane/envoy/config/route/v3;routev3\xba\x80\xc8\xd1\x06\x02\x10\x02\x62\x06proto3"
33
+
34
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
35
+ pool.add_serialized_file(descriptor_data)
36
+
37
+ module Envoy
38
+ module Config
39
+ module Route
40
+ module V3
41
+ VirtualHost = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.VirtualHost").msgclass
42
+ VirtualHost::TlsRequirementType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.VirtualHost.TlsRequirementType").enummodule
43
+ FilterAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.FilterAction").msgclass
44
+ RouteList = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteList").msgclass
45
+ Route = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.Route").msgclass
46
+ WeightedCluster = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.WeightedCluster").msgclass
47
+ WeightedCluster::ClusterWeight = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.WeightedCluster.ClusterWeight").msgclass
48
+ ClusterSpecifierPlugin = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.ClusterSpecifierPlugin").msgclass
49
+ RouteMatch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteMatch").msgclass
50
+ RouteMatch::GrpcRouteMatchOptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteMatch.GrpcRouteMatchOptions").msgclass
51
+ RouteMatch::TlsContextMatchOptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteMatch.TlsContextMatchOptions").msgclass
52
+ RouteMatch::ConnectMatcher = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteMatch.ConnectMatcher").msgclass
53
+ CorsPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.CorsPolicy").msgclass
54
+ RouteAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction").msgclass
55
+ RouteAction::RequestMirrorPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.RequestMirrorPolicy").msgclass
56
+ RouteAction::HashPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy").msgclass
57
+ RouteAction::HashPolicy::Header = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.Header").msgclass
58
+ RouteAction::HashPolicy::CookieAttribute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.CookieAttribute").msgclass
59
+ RouteAction::HashPolicy::Cookie = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.Cookie").msgclass
60
+ RouteAction::HashPolicy::ConnectionProperties = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.ConnectionProperties").msgclass
61
+ RouteAction::HashPolicy::QueryParameter = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.QueryParameter").msgclass
62
+ RouteAction::HashPolicy::FilterState = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.HashPolicy.FilterState").msgclass
63
+ RouteAction::UpgradeConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.UpgradeConfig").msgclass
64
+ RouteAction::UpgradeConfig::ConnectConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.UpgradeConfig.ConnectConfig").msgclass
65
+ RouteAction::MaxStreamDuration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.MaxStreamDuration").msgclass
66
+ RouteAction::ClusterNotFoundResponseCode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.ClusterNotFoundResponseCode").enummodule
67
+ RouteAction::InternalRedirectAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RouteAction.InternalRedirectAction").enummodule
68
+ RetryPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy").msgclass
69
+ RetryPolicy::RetryPriority = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.RetryPriority").msgclass
70
+ RetryPolicy::RetryHostPredicate = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.RetryHostPredicate").msgclass
71
+ RetryPolicy::RetryBackOff = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.RetryBackOff").msgclass
72
+ RetryPolicy::ResetHeader = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.ResetHeader").msgclass
73
+ RetryPolicy::RateLimitedRetryBackOff = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.RateLimitedRetryBackOff").msgclass
74
+ RetryPolicy::ResetHeaderFormat = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RetryPolicy.ResetHeaderFormat").enummodule
75
+ HedgePolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.HedgePolicy").msgclass
76
+ RedirectAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RedirectAction").msgclass
77
+ RedirectAction::RedirectResponseCode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RedirectAction.RedirectResponseCode").enummodule
78
+ DirectResponseAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.DirectResponseAction").msgclass
79
+ NonForwardingAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.NonForwardingAction").msgclass
80
+ Decorator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.Decorator").msgclass
81
+ Tracing = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.Tracing").msgclass
82
+ VirtualCluster = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.VirtualCluster").msgclass
83
+ RateLimit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit").msgclass
84
+ RateLimit::Action = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action").msgclass
85
+ RateLimit::Action::SourceCluster = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.SourceCluster").msgclass
86
+ RateLimit::Action::DestinationCluster = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.DestinationCluster").msgclass
87
+ RateLimit::Action::RequestHeaders = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.RequestHeaders").msgclass
88
+ RateLimit::Action::QueryParameters = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.QueryParameters").msgclass
89
+ RateLimit::Action::RemoteAddress = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.RemoteAddress").msgclass
90
+ RateLimit::Action::MaskedRemoteAddress = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.MaskedRemoteAddress").msgclass
91
+ RateLimit::Action::GenericKey = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.GenericKey").msgclass
92
+ RateLimit::Action::HeaderValueMatch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.HeaderValueMatch").msgclass
93
+ RateLimit::Action::DynamicMetaData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.DynamicMetaData").msgclass
94
+ RateLimit::Action::MetaData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.MetaData").msgclass
95
+ RateLimit::Action::MetaData::Source = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.MetaData.Source").enummodule
96
+ RateLimit::Action::QueryParameterValueMatch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Action.QueryParameterValueMatch").msgclass
97
+ RateLimit::Override = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Override").msgclass
98
+ RateLimit::Override::DynamicMetadata = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.Override.DynamicMetadata").msgclass
99
+ RateLimit::HitsAddend = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.RateLimit.HitsAddend").msgclass
100
+ HeaderMatcher = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.HeaderMatcher").msgclass
101
+ QueryParameterMatcher = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.QueryParameterMatcher").msgclass
102
+ CookieMatcher = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.CookieMatcher").msgclass
103
+ InternalRedirectPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.InternalRedirectPolicy").msgclass
104
+ FilterConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("envoy.config.route.v3.FilterConfig").msgclass
105
+ end
106
+ end
107
+ end
108
+ end