grpc 1.48.0 → 1.49.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +104 -41
- data/include/grpc/event_engine/event_engine.h +19 -16
- data/include/grpc/impl/codegen/grpc_types.h +3 -8
- data/include/grpc/impl/codegen/port_platform.h +0 -8
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +117 -200
- data/src/core/ext/filters/client_channel/client_channel.h +15 -8
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +12 -4
- data/src/core/ext/filters/client_channel/connector.h +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
- data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -124
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
- data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
- data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
- data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
- data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
- data/src/core/ext/filters/client_channel/subchannel.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
- data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
- data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/client_authority_filter.h +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
- data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/xds/upb_utils.h +0 -21
- data/src/core/ext/xds/xds_api.cc +53 -86
- data/src/core/ext/xds/xds_api.h +19 -28
- data/src/core/ext/xds/xds_bootstrap.cc +39 -52
- data/src/core/ext/xds/xds_bootstrap.h +28 -8
- data/src/core/ext/xds/xds_certificate_provider.h +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
- data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
- data/src/core/ext/xds/xds_client.cc +555 -1214
- data/src/core/ext/xds/xds_client.h +16 -44
- data/src/core/ext/xds/xds_client_grpc.cc +291 -0
- data/src/core/ext/xds/xds_client_grpc.h +102 -0
- data/src/core/ext/xds/xds_cluster.cc +92 -103
- data/src/core/ext/xds/xds_cluster.h +6 -5
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
- data/src/core/ext/xds/xds_common_types.cc +134 -110
- data/src/core/ext/xds/xds_common_types.h +6 -7
- data/src/core/ext/xds/xds_endpoint.cc +80 -80
- data/src/core/ext/xds/xds_endpoint.h +4 -4
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
- data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
- data/src/core/ext/xds/xds_listener.cc +329 -299
- data/src/core/ext/xds/xds_listener.h +4 -4
- data/src/core/ext/xds/xds_resource_type.h +13 -2
- data/src/core/ext/xds/xds_route_config.cc +180 -177
- data/src/core/ext/xds/xds_route_config.h +31 -17
- data/src/core/ext/xds/xds_routing.cc +3 -6
- data/src/core/ext/xds/xds_routing.h +7 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +19 -17
- data/src/core/lib/address_utils/parse_address.h +8 -5
- data/src/core/lib/avl/avl.h +47 -25
- data/src/core/lib/channel/call_tracer.h +1 -1
- data/src/core/lib/channel/channel_args.cc +88 -19
- data/src/core/lib/channel/channel_args.h +113 -62
- data/src/core/lib/channel/channel_stack.cc +0 -1
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_stack_builder.h +2 -2
- data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
- data/src/core/lib/channel/channelz.cc +27 -37
- data/src/core/lib/channel/channelz.h +9 -0
- data/src/core/lib/channel/promise_based_filter.h +0 -1
- data/src/core/lib/config/core_configuration.h +48 -35
- data/src/core/lib/debug/stats.cc +12 -15
- data/src/core/lib/debug/stats.h +11 -3
- data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
- data/src/core/lib/event_engine/forkable.cc +98 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/poller.h +54 -0
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
- data/src/core/lib/event_engine/promise.h +11 -2
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
- data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
- data/src/core/lib/event_engine/utils.cc +49 -0
- data/src/core/lib/event_engine/utils.h +40 -0
- data/src/core/lib/event_engine/windows/iocp.cc +149 -0
- data/src/core/lib/event_engine/windows/iocp.h +68 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/gpr/time.cc +11 -9
- data/src/core/lib/gpr/useful.h +29 -0
- data/src/core/lib/gprpp/bitset.h +3 -13
- data/src/core/lib/gprpp/debug_location.h +39 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
- data/src/core/lib/gprpp/status_helper.cc +1 -0
- data/src/core/lib/gprpp/table.h +0 -1
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
- data/src/core/lib/http/httpcli.cc +12 -24
- data/src/core/lib/http/httpcli_security_connector.cc +11 -11
- data/src/core/lib/iomgr/call_combiner.cc +0 -26
- data/src/core/lib/iomgr/closure.h +0 -9
- data/src/core/lib/iomgr/combiner.cc +0 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/error.cc +0 -773
- data/src/core/lib/iomgr/error.h +0 -145
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
- data/src/core/lib/iomgr/exec_ctx.cc +0 -12
- data/src/core/lib/iomgr/executor.cc +0 -10
- data/src/core/lib/iomgr/executor.h +0 -3
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/resolve_address.h +29 -6
- data/src/core/lib/iomgr/resolve_address_posix.cc +38 -8
- data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +40 -10
- data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_posix.cc +118 -6
- data/src/core/lib/iomgr/timer_generic.cc +6 -8
- data/src/core/lib/json/json.h +19 -22
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +233 -0
- data/src/core/lib/json/json_object_loader.h +618 -0
- data/src/core/lib/json/json_reader.cc +86 -62
- data/src/core/lib/json/json_util.cc +8 -36
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
- data/src/core/lib/promise/activity.h +56 -8
- data/src/core/lib/promise/arena_promise.h +84 -81
- data/src/core/lib/promise/context.h +0 -1
- data/src/core/lib/promise/detail/basic_seq.h +43 -23
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/map.h +0 -1
- data/src/core/lib/promise/seq.h +25 -4
- data/src/core/lib/promise/sleep.cc +38 -42
- data/src/core/lib/promise/sleep.h +27 -24
- data/src/core/lib/promise/try_seq.h +26 -6
- data/src/core/lib/resolver/resolver.cc +0 -47
- data/src/core/lib/resolver/resolver.h +2 -12
- data/src/core/lib/resolver/resolver_factory.h +2 -3
- data/src/core/lib/resolver/resolver_registry.cc +1 -1
- data/src/core/lib/resolver/resolver_registry.h +2 -3
- data/src/core/lib/resolver/server_address.cc +11 -15
- data/src/core/lib/resolver/server_address.h +4 -8
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +21 -1
- data/src/core/lib/resource_quota/arena.h +24 -2
- data/src/core/lib/resource_quota/memory_quota.cc +157 -17
- data/src/core/lib/resource_quota/memory_quota.h +98 -17
- data/src/core/lib/resource_quota/periodic_update.cc +79 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +13 -10
- data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
- data/src/core/lib/security/credentials/credentials.h +16 -12
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
- data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
- data/src/core/lib/security/transport/auth_filters.h +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
- data/src/core/lib/security/transport/security_handshaker.cc +32 -44
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/service_config/service_config.h +11 -0
- data/src/core/lib/service_config/service_config_impl.cc +98 -97
- data/src/core/lib/service_config/service_config_impl.h +11 -13
- data/src/core/lib/service_config/service_config_parser.cc +26 -27
- data/src/core/lib/service_config/service_config_parser.h +10 -22
- data/src/core/lib/slice/percent_encoding.cc +4 -13
- data/src/core/lib/slice/slice.cc +10 -4
- data/src/core/lib/surface/call.cc +8 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/completion_queue.cc +0 -2
- data/src/core/lib/surface/completion_queue.h +0 -3
- data/src/core/lib/surface/init.cc +2 -6
- data/src/core/lib/surface/lame_client.cc +2 -3
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +7 -12
- data/src/core/lib/surface/server.h +7 -7
- data/src/core/lib/surface/validate_metadata.cc +4 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +0 -1
- data/src/core/lib/transport/connectivity_state.h +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -36
- data/src/core/lib/transport/handshaker.cc +7 -9
- data/src/core/lib/transport/handshaker.h +4 -5
- data/src/core/lib/transport/handshaker_factory.h +2 -3
- data/src/core/lib/transport/handshaker_registry.cc +2 -1
- data/src/core/lib/transport/handshaker_registry.h +2 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +52 -7
- data/src/core/lib/transport/parsed_metadata.h +0 -1
- data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
- data/src/core/lib/transport/transport.h +0 -7
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/fake_transport_security.cc +53 -30
- data/src/core/tsi/local_transport_security.cc +9 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
- data/src/core/tsi/ssl_transport_security.cc +47 -23
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_interface.h +17 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- metadata +90 -38
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -21,7 +21,6 @@
|
|
21
21
|
#include <stdint.h>
|
22
22
|
|
23
23
|
#include <set>
|
24
|
-
#include <type_traits>
|
25
24
|
#include <utility>
|
26
25
|
|
27
26
|
#include "absl/memory/memory.h"
|
@@ -49,6 +48,7 @@
|
|
49
48
|
|
50
49
|
#include <grpc/support/log.h>
|
51
50
|
|
51
|
+
#include "src/core/ext/xds/upb_utils.h"
|
52
52
|
#include "src/core/ext/xds/xds_common_types.h"
|
53
53
|
#include "src/core/ext/xds/xds_resource_type.h"
|
54
54
|
#include "src/core/lib/address_utils/parse_address.h"
|
@@ -59,7 +59,6 @@
|
|
59
59
|
#include "src/core/lib/iomgr/error.h"
|
60
60
|
#include "src/core/lib/iomgr/sockaddr.h"
|
61
61
|
#include "src/core/lib/json/json.h"
|
62
|
-
#include "src/core/lib/transport/error_utils.h"
|
63
62
|
|
64
63
|
namespace grpc_core {
|
65
64
|
|
@@ -270,7 +269,7 @@ std::string XdsListenerResource::ToString() const {
|
|
270
269
|
namespace {
|
271
270
|
|
272
271
|
void MaybeLogHttpConnectionManager(
|
273
|
-
const
|
272
|
+
const XdsResourceType::DecodeContext& context,
|
274
273
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
275
274
|
http_connection_manager_config) {
|
276
275
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
@@ -286,25 +285,25 @@ void MaybeLogHttpConnectionManager(
|
|
286
285
|
}
|
287
286
|
}
|
288
287
|
|
289
|
-
|
290
|
-
|
288
|
+
absl::StatusOr<XdsListenerResource::HttpConnectionManager>
|
289
|
+
HttpConnectionManagerParse(
|
290
|
+
bool is_client, const XdsResourceType::DecodeContext& context,
|
291
291
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
292
292
|
http_connection_manager_proto,
|
293
|
-
bool is_v2
|
294
|
-
XdsListenerResource::HttpConnectionManager* http_connection_manager) {
|
293
|
+
bool is_v2) {
|
295
294
|
MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
|
295
|
+
std::vector<std::string> errors;
|
296
|
+
XdsListenerResource::HttpConnectionManager http_connection_manager;
|
296
297
|
// NACK a non-zero `xff_num_trusted_hops` and a `non-empty
|
297
298
|
// original_ip_detection_extensions` as mentioned in
|
298
299
|
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
|
299
300
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_xff_num_trusted_hops(
|
300
301
|
http_connection_manager_proto) != 0) {
|
301
|
-
|
302
|
-
"'xff_num_trusted_hops' must be zero");
|
302
|
+
errors.emplace_back("'xff_num_trusted_hops' must be zero");
|
303
303
|
}
|
304
304
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_original_ip_detection_extensions(
|
305
305
|
http_connection_manager_proto)) {
|
306
|
-
|
307
|
-
"'original_ip_detection_extensions' must be empty");
|
306
|
+
errors.emplace_back("'original_ip_detection_extensions' must be empty");
|
308
307
|
}
|
309
308
|
// Obtain max_stream_duration from Http Protocol Options.
|
310
309
|
const envoy_config_core_v3_HttpProtocolOptions* options =
|
@@ -314,7 +313,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
314
313
|
const google_protobuf_Duration* duration =
|
315
314
|
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
316
315
|
if (duration != nullptr) {
|
317
|
-
http_connection_manager
|
316
|
+
http_connection_manager.http_max_stream_duration =
|
318
317
|
ParseDuration(duration);
|
319
318
|
}
|
320
319
|
}
|
@@ -331,12 +330,12 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
331
330
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
|
332
331
|
http_filter));
|
333
332
|
if (name.empty()) {
|
334
|
-
|
335
|
-
|
333
|
+
errors.emplace_back(absl::StrCat("empty filter name at index ", i));
|
334
|
+
continue;
|
336
335
|
}
|
337
336
|
if (names_seen.find(name) != names_seen.end()) {
|
338
|
-
|
339
|
-
|
337
|
+
errors.emplace_back(absl::StrCat("duplicate HTTP filter name: ", name));
|
338
|
+
continue;
|
340
339
|
}
|
341
340
|
names_seen.insert(name);
|
342
341
|
const bool is_optional =
|
@@ -346,56 +345,64 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
346
345
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
|
347
346
|
http_filter);
|
348
347
|
if (any == nullptr) {
|
349
|
-
if (is_optional)
|
350
|
-
|
351
|
-
|
348
|
+
if (!is_optional) {
|
349
|
+
errors.emplace_back(absl::StrCat(
|
350
|
+
"no filter config specified for filter name ", name));
|
351
|
+
}
|
352
|
+
continue;
|
352
353
|
}
|
353
354
|
auto filter_type = ExtractExtensionTypeName(context, any);
|
354
355
|
if (!filter_type.ok()) {
|
355
|
-
|
356
|
+
errors.emplace_back(absl::StrCat("filter name ", name, ": ",
|
357
|
+
filter_type.status().message()));
|
358
|
+
continue;
|
356
359
|
}
|
357
360
|
const XdsHttpFilterImpl* filter_impl =
|
358
361
|
XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
|
359
362
|
if (filter_impl == nullptr) {
|
360
|
-
if (is_optional)
|
361
|
-
|
362
|
-
|
363
|
+
if (!is_optional) {
|
364
|
+
errors.emplace_back(absl::StrCat(
|
365
|
+
"no filter registered for config type ", filter_type->type));
|
366
|
+
}
|
367
|
+
continue;
|
363
368
|
}
|
364
369
|
if ((is_client && !filter_impl->IsSupportedOnClients()) ||
|
365
370
|
(!is_client && !filter_impl->IsSupportedOnServers())) {
|
366
|
-
if (is_optional)
|
367
|
-
|
368
|
-
|
369
|
-
|
371
|
+
if (!is_optional) {
|
372
|
+
errors.emplace_back(absl::StrFormat(
|
373
|
+
"Filter %s is not supported on %s", filter_type->type,
|
374
|
+
is_client ? "clients" : "servers"));
|
375
|
+
}
|
376
|
+
continue;
|
370
377
|
}
|
371
378
|
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
372
379
|
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
373
380
|
context.arena);
|
374
381
|
if (!filter_config.ok()) {
|
375
|
-
|
382
|
+
errors.emplace_back(absl::StrCat(
|
376
383
|
"filter config for type ", filter_type->type,
|
377
384
|
" failed to parse: ", StatusToString(filter_config.status())));
|
385
|
+
continue;
|
378
386
|
}
|
379
|
-
http_connection_manager
|
387
|
+
http_connection_manager.http_filters.emplace_back(
|
380
388
|
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
381
389
|
std::string(name), std::move(*filter_config)});
|
382
390
|
}
|
383
|
-
if (http_connection_manager
|
384
|
-
|
385
|
-
"Expected at least one HTTP filter");
|
391
|
+
if (http_connection_manager.http_filters.empty()) {
|
392
|
+
errors.emplace_back("Expected at least one HTTP filter");
|
386
393
|
}
|
387
394
|
// Make sure that the last filter is terminal and non-last filters are
|
388
395
|
// non-terminal. Note that this check is being performed in a separate loop
|
389
396
|
// to take care of the case where there are two terminal filters in the list
|
390
397
|
// out of which only one gets added in the final list.
|
391
|
-
for (const auto& http_filter : http_connection_manager
|
398
|
+
for (const auto& http_filter : http_connection_manager.http_filters) {
|
392
399
|
const XdsHttpFilterImpl* filter_impl =
|
393
400
|
XdsHttpFilterRegistry::GetFilterForType(
|
394
401
|
http_filter.config.config_proto_type_name);
|
395
|
-
if (&http_filter != &http_connection_manager
|
402
|
+
if (&http_filter != &http_connection_manager.http_filters.back()) {
|
396
403
|
// Filters before the last filter must not be terminal.
|
397
404
|
if (filter_impl->IsTerminalFilter()) {
|
398
|
-
|
405
|
+
errors.emplace_back(
|
399
406
|
absl::StrCat("terminal filter for config type ",
|
400
407
|
http_filter.config.config_proto_type_name,
|
401
408
|
" must be the last filter in the chain"));
|
@@ -403,7 +410,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
403
410
|
} else {
|
404
411
|
// The last filter must be terminal.
|
405
412
|
if (!filter_impl->IsTerminalFilter()) {
|
406
|
-
|
413
|
+
errors.emplace_back(
|
407
414
|
absl::StrCat("non-terminal filter for config type ",
|
408
415
|
http_filter.config.config_proto_type_name,
|
409
416
|
" is the last filter in the chain"));
|
@@ -415,7 +422,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
415
422
|
// router filter without actually looking at the config. This ensures
|
416
423
|
// that the right thing happens in the xds resolver without having
|
417
424
|
// to expose whether the resource we received was v2 or v3.
|
418
|
-
http_connection_manager
|
425
|
+
http_connection_manager.http_filters.emplace_back(
|
419
426
|
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
420
427
|
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
421
428
|
}
|
@@ -429,252 +436,281 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
429
436
|
const envoy_config_route_v3_RouteConfiguration* route_config =
|
430
437
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
431
438
|
http_connection_manager_proto);
|
432
|
-
XdsRouteConfigResource
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
}
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
439
|
+
auto rds_update = XdsRouteConfigResource::Parse(context, route_config);
|
440
|
+
if (!rds_update.ok()) {
|
441
|
+
errors.emplace_back(rds_update.status().message());
|
442
|
+
} else {
|
443
|
+
http_connection_manager.rds_update = std::move(*rds_update);
|
444
|
+
}
|
445
|
+
} else {
|
446
|
+
// Validate that RDS must be used to get the route_config dynamically.
|
447
|
+
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
448
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
449
|
+
http_connection_manager_proto);
|
450
|
+
if (rds == nullptr) {
|
451
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
452
|
+
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
453
|
+
}
|
454
|
+
// Check that the ConfigSource specifies ADS.
|
455
|
+
const envoy_config_core_v3_ConfigSource* config_source =
|
456
|
+
envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
|
457
|
+
rds);
|
458
|
+
if (config_source == nullptr) {
|
459
|
+
errors.emplace_back(
|
460
|
+
"HttpConnectionManager missing config_source for RDS.");
|
461
|
+
} else if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
|
462
|
+
!envoy_config_core_v3_ConfigSource_has_self(config_source)) {
|
463
|
+
errors.emplace_back(
|
464
|
+
"HttpConnectionManager ConfigSource for RDS does not specify ADS "
|
465
|
+
"or SELF.");
|
466
|
+
} else {
|
467
|
+
// Get the route_config_name.
|
468
|
+
http_connection_manager.route_config_name = UpbStringToStdString(
|
469
|
+
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
470
|
+
rds));
|
471
|
+
}
|
460
472
|
}
|
461
|
-
// Get the route_config_name.
|
462
|
-
http_connection_manager->route_config_name = UpbStringToStdString(
|
463
|
-
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
464
|
-
rds));
|
465
473
|
}
|
466
|
-
|
474
|
+
// Return result.
|
475
|
+
if (!errors.empty()) {
|
476
|
+
return absl::InvalidArgumentError(
|
477
|
+
absl::StrCat("Errors parsing HttpConnectionManager config: [",
|
478
|
+
absl::StrJoin(errors, "; "), "]"));
|
479
|
+
}
|
480
|
+
return http_connection_manager;
|
467
481
|
}
|
468
482
|
|
469
|
-
|
470
|
-
const
|
471
|
-
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2
|
472
|
-
XdsListenerResource* lds_update) {
|
473
|
-
lds_update->type = XdsListenerResource::ListenerType::kHttpApiListener;
|
483
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
|
484
|
+
const XdsResourceType::DecodeContext& context,
|
485
|
+
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2) {
|
474
486
|
const upb_StringView encoded_api_listener = google_protobuf_Any_value(
|
475
487
|
envoy_config_listener_v3_ApiListener_api_listener(api_listener));
|
476
488
|
const auto* http_connection_manager =
|
477
489
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
478
490
|
encoded_api_listener.data, encoded_api_listener.size, context.arena);
|
479
491
|
if (http_connection_manager == nullptr) {
|
480
|
-
return
|
492
|
+
return absl::InvalidArgumentError(
|
481
493
|
"Could not parse HttpConnectionManager config from ApiListener");
|
482
494
|
}
|
483
|
-
|
484
|
-
|
485
|
-
|
495
|
+
auto hcm = HttpConnectionManagerParse(true /* is_client */, context,
|
496
|
+
http_connection_manager, is_v2);
|
497
|
+
if (!hcm.ok()) return hcm.status();
|
498
|
+
XdsListenerResource lds_update;
|
499
|
+
lds_update.type = XdsListenerResource::ListenerType::kHttpApiListener;
|
500
|
+
lds_update.http_connection_manager = std::move(*hcm);
|
501
|
+
return lds_update;
|
486
502
|
}
|
487
503
|
|
488
|
-
|
489
|
-
|
490
|
-
const
|
491
|
-
|
504
|
+
absl::StatusOr<XdsListenerResource::DownstreamTlsContext>
|
505
|
+
DownstreamTlsContextParse(
|
506
|
+
const XdsResourceType::DecodeContext& context,
|
507
|
+
const envoy_config_core_v3_TransportSocket* transport_socket) {
|
492
508
|
absl::string_view name = UpbStringToAbsl(
|
493
509
|
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
494
510
|
if (name != "envoy.transport_sockets.tls") {
|
495
|
-
return
|
511
|
+
return absl::InvalidArgumentError(
|
496
512
|
absl::StrCat("Unrecognized transport socket: ", name));
|
497
513
|
}
|
514
|
+
std::vector<std::string> errors;
|
515
|
+
XdsListenerResource::DownstreamTlsContext downstream_tls_context;
|
498
516
|
auto* typed_config =
|
499
517
|
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
auto* require_client_certificate =
|
522
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
523
|
-
downstream_tls_context_proto);
|
524
|
-
if (require_client_certificate != nullptr) {
|
525
|
-
downstream_tls_context->require_client_certificate =
|
526
|
-
google_protobuf_BoolValue_value(require_client_certificate);
|
527
|
-
}
|
528
|
-
auto* require_sni =
|
529
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
|
530
|
-
downstream_tls_context_proto);
|
531
|
-
if (require_sni != nullptr &&
|
532
|
-
google_protobuf_BoolValue_value(require_sni)) {
|
533
|
-
errors.push_back(
|
534
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("require_sni: unsupported"));
|
535
|
-
}
|
536
|
-
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
537
|
-
downstream_tls_context_proto) !=
|
538
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
539
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
540
|
-
"ocsp_staple_policy: Only LENIENT_STAPLING supported"));
|
518
|
+
if (typed_config == nullptr) {
|
519
|
+
return absl::InvalidArgumentError("transport socket typed config unset");
|
520
|
+
}
|
521
|
+
const upb_StringView encoded_downstream_tls_context =
|
522
|
+
google_protobuf_Any_value(typed_config);
|
523
|
+
auto* downstream_tls_context_proto =
|
524
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
525
|
+
encoded_downstream_tls_context.data,
|
526
|
+
encoded_downstream_tls_context.size, context.arena);
|
527
|
+
if (downstream_tls_context_proto == nullptr) {
|
528
|
+
return absl::InvalidArgumentError("Can't decode downstream tls context.");
|
529
|
+
}
|
530
|
+
auto* common_tls_context =
|
531
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
532
|
+
downstream_tls_context_proto);
|
533
|
+
if (common_tls_context != nullptr) {
|
534
|
+
auto common_context = CommonTlsContext::Parse(context, common_tls_context);
|
535
|
+
if (!common_context.ok()) {
|
536
|
+
errors.emplace_back(common_context.status().message());
|
537
|
+
} else {
|
538
|
+
downstream_tls_context.common_tls_context = std::move(*common_context);
|
541
539
|
}
|
542
540
|
}
|
543
|
-
|
541
|
+
auto* require_client_certificate =
|
542
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
543
|
+
downstream_tls_context_proto);
|
544
|
+
if (require_client_certificate != nullptr) {
|
545
|
+
downstream_tls_context.require_client_certificate =
|
546
|
+
google_protobuf_BoolValue_value(require_client_certificate);
|
547
|
+
}
|
548
|
+
auto* require_sni =
|
549
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
|
550
|
+
downstream_tls_context_proto);
|
551
|
+
if (require_sni != nullptr && google_protobuf_BoolValue_value(require_sni)) {
|
552
|
+
errors.emplace_back("require_sni: unsupported");
|
553
|
+
}
|
554
|
+
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
555
|
+
downstream_tls_context_proto) !=
|
556
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
557
|
+
errors.emplace_back("ocsp_staple_policy: Only LENIENT_STAPLING supported");
|
558
|
+
}
|
559
|
+
|
560
|
+
if (downstream_tls_context.common_tls_context
|
544
561
|
.tls_certificate_provider_instance.instance_name.empty()) {
|
545
|
-
errors.
|
562
|
+
errors.emplace_back(
|
546
563
|
"TLS configuration provided but no "
|
547
|
-
"tls_certificate_provider_instance found.")
|
564
|
+
"tls_certificate_provider_instance found.");
|
548
565
|
}
|
549
|
-
if (downstream_tls_context
|
550
|
-
downstream_tls_context
|
566
|
+
if (downstream_tls_context.require_client_certificate &&
|
567
|
+
downstream_tls_context.common_tls_context.certificate_validation_context
|
551
568
|
.ca_certificate_provider_instance.instance_name.empty()) {
|
552
|
-
errors.
|
569
|
+
errors.emplace_back(
|
553
570
|
"TLS configuration requires client certificates but no certificate "
|
554
|
-
"provider instance specified for validation.")
|
571
|
+
"provider instance specified for validation.");
|
555
572
|
}
|
556
|
-
if (!downstream_tls_context
|
573
|
+
if (!downstream_tls_context.common_tls_context.certificate_validation_context
|
557
574
|
.match_subject_alt_names.empty()) {
|
558
|
-
errors.
|
559
|
-
|
575
|
+
errors.emplace_back("match_subject_alt_names not supported on servers");
|
576
|
+
}
|
577
|
+
// Return result.
|
578
|
+
if (!errors.empty()) {
|
579
|
+
return absl::InvalidArgumentError(
|
580
|
+
absl::StrCat("Errors parsing DownstreamTlsContext: [",
|
581
|
+
absl::StrJoin(errors, "; "), "]"));
|
560
582
|
}
|
561
|
-
return
|
562
|
-
&errors);
|
583
|
+
return downstream_tls_context;
|
563
584
|
}
|
564
585
|
|
565
|
-
|
566
|
-
const envoy_config_core_v3_CidrRange* cidr_range_proto
|
567
|
-
|
586
|
+
absl::StatusOr<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
|
587
|
+
const envoy_config_core_v3_CidrRange* cidr_range_proto) {
|
588
|
+
XdsListenerResource::FilterChainMap::CidrRange cidr_range;
|
568
589
|
std::string address_prefix = UpbStringToStdString(
|
569
590
|
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
cidr_range
|
591
|
+
auto address = StringToSockaddr(address_prefix, /*port=*/0);
|
592
|
+
if (!address.ok()) return address.status();
|
593
|
+
cidr_range.address = *address;
|
594
|
+
cidr_range.prefix_len = 0;
|
574
595
|
auto* prefix_len_proto =
|
575
596
|
envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
|
576
597
|
if (prefix_len_proto != nullptr) {
|
577
|
-
cidr_range
|
598
|
+
cidr_range.prefix_len = std::min(
|
578
599
|
google_protobuf_UInt32Value_value(prefix_len_proto),
|
579
|
-
(reinterpret_cast<const grpc_sockaddr*>(cidr_range
|
600
|
+
(reinterpret_cast<const grpc_sockaddr*>(cidr_range.address.addr))
|
580
601
|
->sa_family == GRPC_AF_INET
|
581
602
|
? uint32_t(32)
|
582
603
|
: uint32_t(128));
|
583
604
|
}
|
584
605
|
// Normalize the network address by masking it with prefix_len
|
585
|
-
grpc_sockaddr_mask_bits(&cidr_range
|
586
|
-
return
|
606
|
+
grpc_sockaddr_mask_bits(&cidr_range.address, cidr_range.prefix_len);
|
607
|
+
return cidr_range;
|
587
608
|
}
|
588
609
|
|
589
|
-
|
590
|
-
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto
|
591
|
-
|
610
|
+
absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
|
611
|
+
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto) {
|
612
|
+
std::vector<std::string> errors;
|
613
|
+
FilterChain::FilterChainMatch filter_chain_match;
|
592
614
|
auto* destination_port =
|
593
615
|
envoy_config_listener_v3_FilterChainMatch_destination_port(
|
594
616
|
filter_chain_match_proto);
|
595
617
|
if (destination_port != nullptr) {
|
596
|
-
filter_chain_match
|
618
|
+
filter_chain_match.destination_port =
|
597
619
|
google_protobuf_UInt32Value_value(destination_port);
|
598
620
|
}
|
599
621
|
size_t size = 0;
|
600
622
|
auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
|
601
623
|
filter_chain_match_proto, &size);
|
602
|
-
filter_chain_match
|
624
|
+
filter_chain_match.prefix_ranges.reserve(size);
|
603
625
|
for (size_t i = 0; i < size; i++) {
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
626
|
+
auto cidr_range = CidrRangeParse(prefix_ranges[i]);
|
627
|
+
if (!cidr_range.ok()) {
|
628
|
+
errors.emplace_back(absl::StrCat("prefix range ", i, ": ",
|
629
|
+
cidr_range.status().message()));
|
630
|
+
continue;
|
631
|
+
}
|
632
|
+
filter_chain_match.prefix_ranges.push_back(*cidr_range);
|
608
633
|
}
|
609
|
-
filter_chain_match
|
634
|
+
filter_chain_match.source_type =
|
610
635
|
static_cast<XdsListenerResource::FilterChainMap::ConnectionSourceType>(
|
611
636
|
envoy_config_listener_v3_FilterChainMatch_source_type(
|
612
637
|
filter_chain_match_proto));
|
613
638
|
auto* source_prefix_ranges =
|
614
639
|
envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
|
615
640
|
filter_chain_match_proto, &size);
|
616
|
-
filter_chain_match
|
641
|
+
filter_chain_match.source_prefix_ranges.reserve(size);
|
617
642
|
for (size_t i = 0; i < size; i++) {
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
643
|
+
auto cidr_range = CidrRangeParse(source_prefix_ranges[i]);
|
644
|
+
if (!cidr_range.ok()) {
|
645
|
+
errors.emplace_back(absl::StrCat("source prefix range ", i, ": ",
|
646
|
+
cidr_range.status().message()));
|
647
|
+
continue;
|
648
|
+
}
|
649
|
+
filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
|
623
650
|
}
|
624
651
|
auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
|
625
652
|
filter_chain_match_proto, &size);
|
626
|
-
filter_chain_match
|
653
|
+
filter_chain_match.source_ports.reserve(size);
|
627
654
|
for (size_t i = 0; i < size; i++) {
|
628
|
-
filter_chain_match
|
655
|
+
filter_chain_match.source_ports.push_back(source_ports[i]);
|
629
656
|
}
|
630
657
|
auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
|
631
658
|
filter_chain_match_proto, &size);
|
632
659
|
for (size_t i = 0; i < size; i++) {
|
633
|
-
filter_chain_match
|
660
|
+
filter_chain_match.server_names.push_back(
|
634
661
|
UpbStringToStdString(server_names[i]));
|
635
662
|
}
|
636
|
-
filter_chain_match
|
663
|
+
filter_chain_match.transport_protocol = UpbStringToStdString(
|
637
664
|
envoy_config_listener_v3_FilterChainMatch_transport_protocol(
|
638
665
|
filter_chain_match_proto));
|
639
666
|
auto* application_protocols =
|
640
667
|
envoy_config_listener_v3_FilterChainMatch_application_protocols(
|
641
668
|
filter_chain_match_proto, &size);
|
642
669
|
for (size_t i = 0; i < size; i++) {
|
643
|
-
filter_chain_match
|
670
|
+
filter_chain_match.application_protocols.push_back(
|
644
671
|
UpbStringToStdString(application_protocols[i]));
|
645
672
|
}
|
646
|
-
|
673
|
+
// Return result.
|
674
|
+
if (!errors.empty()) {
|
675
|
+
return absl::InvalidArgumentError(
|
676
|
+
absl::StrCat("errors parsing filter chain match: [",
|
677
|
+
absl::StrJoin(errors, "; "), "]"));
|
678
|
+
}
|
679
|
+
return filter_chain_match;
|
647
680
|
}
|
648
681
|
|
649
|
-
|
650
|
-
const
|
651
|
-
const envoy_config_listener_v3_FilterChain* filter_chain_proto,
|
652
|
-
|
653
|
-
|
682
|
+
absl::StatusOr<FilterChain> FilterChainParse(
|
683
|
+
const XdsResourceType::DecodeContext& context,
|
684
|
+
const envoy_config_listener_v3_FilterChain* filter_chain_proto,
|
685
|
+
bool is_v2) {
|
686
|
+
FilterChain filter_chain;
|
687
|
+
std::vector<std::string> errors;
|
654
688
|
auto* filter_chain_match =
|
655
689
|
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
656
690
|
filter_chain_proto);
|
657
691
|
if (filter_chain_match != nullptr) {
|
658
|
-
|
659
|
-
|
660
|
-
|
692
|
+
auto match = FilterChainMatchParse(filter_chain_match);
|
693
|
+
if (!match.ok()) {
|
694
|
+
errors.emplace_back(match.status().message());
|
695
|
+
} else {
|
696
|
+
filter_chain.filter_chain_match = std::move(*match);
|
697
|
+
}
|
661
698
|
}
|
662
|
-
filter_chain
|
699
|
+
filter_chain.filter_chain_data =
|
663
700
|
std::make_shared<XdsListenerResource::FilterChainData>();
|
664
701
|
// Parse the filters list. Currently we only support HttpConnectionManager.
|
665
702
|
size_t size = 0;
|
666
703
|
auto* filters =
|
667
704
|
envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
|
668
705
|
if (size != 1) {
|
669
|
-
errors.push_back(
|
706
|
+
errors.push_back(
|
670
707
|
"FilterChain should have exactly one filter: HttpConnectionManager; no "
|
671
|
-
"other filter is supported at the moment")
|
708
|
+
"other filter is supported at the moment");
|
672
709
|
} else {
|
673
710
|
auto* typed_config =
|
674
711
|
envoy_config_listener_v3_Filter_typed_config(filters[0]);
|
675
712
|
if (typed_config == nullptr) {
|
676
|
-
errors.
|
677
|
-
"No typed_config found in filter."));
|
713
|
+
errors.emplace_back("No typed_config found in filter.");
|
678
714
|
} else {
|
679
715
|
absl::string_view type_url =
|
680
716
|
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
|
@@ -682,8 +718,7 @@ grpc_error_handle FilterChainParse(
|
|
682
718
|
"type.googleapis.com/"
|
683
719
|
"envoy.extensions.filters.network.http_connection_manager.v3."
|
684
720
|
"HttpConnectionManager") {
|
685
|
-
errors.
|
686
|
-
absl::StrCat("Unsupported filter type ", type_url)));
|
721
|
+
errors.emplace_back(absl::StrCat("Unsupported filter type ", type_url));
|
687
722
|
} else {
|
688
723
|
const upb_StringView encoded_http_connection_manager =
|
689
724
|
google_protobuf_Any_value(typed_config);
|
@@ -692,14 +727,18 @@ grpc_error_handle FilterChainParse(
|
|
692
727
|
encoded_http_connection_manager.data,
|
693
728
|
encoded_http_connection_manager.size, context.arena);
|
694
729
|
if (http_connection_manager == nullptr) {
|
695
|
-
errors.
|
730
|
+
errors.emplace_back(
|
696
731
|
"Could not parse HttpConnectionManager config from filter "
|
697
|
-
"typed_config")
|
732
|
+
"typed_config");
|
698
733
|
} else {
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
734
|
+
auto hcm = HttpConnectionManagerParse(
|
735
|
+
/*is_client=*/false, context, http_connection_manager, is_v2);
|
736
|
+
if (!hcm.ok()) {
|
737
|
+
errors.emplace_back(hcm.status().message());
|
738
|
+
} else {
|
739
|
+
filter_chain.filter_chain_data->http_connection_manager =
|
740
|
+
std::move(*hcm);
|
741
|
+
}
|
703
742
|
}
|
704
743
|
}
|
705
744
|
}
|
@@ -707,36 +746,42 @@ grpc_error_handle FilterChainParse(
|
|
707
746
|
auto* transport_socket =
|
708
747
|
envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
|
709
748
|
if (transport_socket != nullptr) {
|
710
|
-
|
711
|
-
context, transport_socket
|
712
|
-
|
713
|
-
|
749
|
+
auto downstream_context =
|
750
|
+
DownstreamTlsContextParse(context, transport_socket);
|
751
|
+
if (!downstream_context.ok()) {
|
752
|
+
errors.emplace_back(downstream_context.status().message());
|
753
|
+
} else {
|
754
|
+
filter_chain.filter_chain_data->downstream_tls_context =
|
755
|
+
std::move(*downstream_context);
|
756
|
+
}
|
757
|
+
}
|
758
|
+
// Return result.
|
759
|
+
if (!errors.empty()) {
|
760
|
+
return absl::InvalidArgumentError(absl::StrCat(
|
761
|
+
"Errors parsing FilterChain: [", absl::StrJoin(errors, "; "), "]"));
|
714
762
|
}
|
715
|
-
return
|
763
|
+
return filter_chain;
|
716
764
|
}
|
717
765
|
|
718
|
-
|
719
|
-
const envoy_config_core_v3_Address* address_proto
|
766
|
+
absl::StatusOr<std::string> AddressParse(
|
767
|
+
const envoy_config_core_v3_Address* address_proto) {
|
720
768
|
const auto* socket_address =
|
721
769
|
envoy_config_core_v3_Address_socket_address(address_proto);
|
722
770
|
if (socket_address == nullptr) {
|
723
|
-
return
|
724
|
-
"Address does not have socket_address");
|
771
|
+
return absl::InvalidArgumentError("Address does not have socket_address");
|
725
772
|
}
|
726
773
|
if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
|
727
774
|
envoy_config_core_v3_SocketAddress_TCP) {
|
728
|
-
return
|
729
|
-
"SocketAddress protocol is not TCP");
|
775
|
+
return absl::InvalidArgumentError("SocketAddress protocol is not TCP");
|
730
776
|
}
|
731
777
|
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
732
778
|
if (port > 65535) {
|
733
|
-
return
|
779
|
+
return absl::InvalidArgumentError("Invalid port");
|
734
780
|
}
|
735
|
-
|
781
|
+
return JoinHostPort(
|
736
782
|
UpbStringToAbsl(
|
737
783
|
envoy_config_core_v3_SocketAddress_address(socket_address)),
|
738
784
|
port);
|
739
|
-
return GRPC_ERROR_NONE;
|
740
785
|
}
|
741
786
|
|
742
787
|
// An intermediate map for filter chains that we create to validate the list of
|
@@ -755,37 +800,36 @@ struct InternalFilterChainMap {
|
|
755
800
|
DestinationIpMap destination_ip_map;
|
756
801
|
};
|
757
802
|
|
758
|
-
|
759
|
-
const FilterChain& filter_chain,
|
760
|
-
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map
|
761
|
-
uint32_t port) {
|
803
|
+
absl::Status AddFilterChainDataForSourcePort(
|
804
|
+
const FilterChain& filter_chain, uint32_t port,
|
805
|
+
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
|
762
806
|
auto insert_result = ports_map->emplace(
|
763
807
|
port, XdsListenerResource::FilterChainMap::FilterChainDataSharedPtr{
|
764
808
|
filter_chain.filter_chain_data});
|
765
809
|
if (!insert_result.second) {
|
766
|
-
return
|
810
|
+
return absl::InvalidArgumentError(absl::StrCat(
|
767
811
|
"Duplicate matching rules detected when adding filter chain: ",
|
768
812
|
filter_chain.filter_chain_match.ToString()));
|
769
813
|
}
|
770
|
-
return
|
814
|
+
return absl::OkStatus();
|
771
815
|
}
|
772
816
|
|
773
|
-
|
817
|
+
absl::Status AddFilterChainDataForSourcePorts(
|
774
818
|
const FilterChain& filter_chain,
|
775
819
|
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
|
776
820
|
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
777
|
-
return AddFilterChainDataForSourcePort(filter_chain,
|
821
|
+
return AddFilterChainDataForSourcePort(filter_chain, 0, ports_map);
|
778
822
|
} else {
|
779
823
|
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
780
|
-
|
781
|
-
AddFilterChainDataForSourcePort(filter_chain,
|
782
|
-
if (!
|
824
|
+
absl::Status status =
|
825
|
+
AddFilterChainDataForSourcePort(filter_chain, port, ports_map);
|
826
|
+
if (!status.ok()) return status;
|
783
827
|
}
|
784
828
|
}
|
785
|
-
return
|
829
|
+
return absl::OkStatus();
|
786
830
|
}
|
787
831
|
|
788
|
-
|
832
|
+
absl::Status AddFilterChainDataForSourceIpRange(
|
789
833
|
const FilterChain& filter_chain,
|
790
834
|
InternalFilterChainMap::SourceIpMap* source_ip_map) {
|
791
835
|
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
@@ -797,24 +841,22 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
|
|
797
841
|
for (const auto& prefix_range :
|
798
842
|
filter_chain.filter_chain_match.source_prefix_ranges) {
|
799
843
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
800
|
-
if (!addr_str.ok())
|
801
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
|
802
|
-
}
|
844
|
+
if (!addr_str.ok()) return addr_str.status();
|
803
845
|
auto insert_result = source_ip_map->emplace(
|
804
846
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
805
847
|
XdsListenerResource::FilterChainMap::SourceIp());
|
806
848
|
if (insert_result.second) {
|
807
849
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
808
850
|
}
|
809
|
-
|
851
|
+
absl::Status status = AddFilterChainDataForSourcePorts(
|
810
852
|
filter_chain, &insert_result.first->second.ports_map);
|
811
|
-
if (!
|
853
|
+
if (!status.ok()) return status;
|
812
854
|
}
|
813
855
|
}
|
814
|
-
return
|
856
|
+
return absl::OkStatus();
|
815
857
|
}
|
816
858
|
|
817
|
-
|
859
|
+
absl::Status AddFilterChainDataForSourceType(
|
818
860
|
const FilterChain& filter_chain,
|
819
861
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
820
862
|
GPR_ASSERT(static_cast<unsigned int>(
|
@@ -824,31 +866,31 @@ grpc_error_handle AddFilterChainDataForSourceType(
|
|
824
866
|
filter_chain.filter_chain_match.source_type)]);
|
825
867
|
}
|
826
868
|
|
827
|
-
|
869
|
+
absl::Status AddFilterChainDataForApplicationProtocols(
|
828
870
|
const FilterChain& filter_chain,
|
829
871
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
830
872
|
// Only allow filter chains that do not mention application protocols
|
831
873
|
if (!filter_chain.filter_chain_match.application_protocols.empty()) {
|
832
|
-
return
|
874
|
+
return absl::OkStatus();
|
833
875
|
}
|
834
876
|
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
835
877
|
}
|
836
878
|
|
837
|
-
|
879
|
+
absl::Status AddFilterChainDataForTransportProtocol(
|
838
880
|
const FilterChain& filter_chain,
|
839
881
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
840
882
|
const std::string& transport_protocol =
|
841
883
|
filter_chain.filter_chain_match.transport_protocol;
|
842
884
|
// Only allow filter chains with no transport protocol or "raw_buffer"
|
843
885
|
if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
|
844
|
-
return
|
886
|
+
return absl::OkStatus();
|
845
887
|
}
|
846
888
|
// If for this configuration, we've already seen filter chains that mention
|
847
889
|
// the transport protocol as "raw_buffer", we will never match filter chains
|
848
890
|
// that do not mention it.
|
849
891
|
if (destination_ip->transport_protocol_raw_buffer_provided &&
|
850
892
|
transport_protocol.empty()) {
|
851
|
-
return
|
893
|
+
return absl::OkStatus();
|
852
894
|
}
|
853
895
|
if (!transport_protocol.empty() &&
|
854
896
|
!destination_ip->transport_protocol_raw_buffer_provided) {
|
@@ -862,17 +904,17 @@ grpc_error_handle AddFilterChainDataForTransportProtocol(
|
|
862
904
|
destination_ip);
|
863
905
|
}
|
864
906
|
|
865
|
-
|
907
|
+
absl::Status AddFilterChainDataForServerNames(
|
866
908
|
const FilterChain& filter_chain,
|
867
909
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
868
910
|
// Don't continue adding filter chains with server names mentioned
|
869
911
|
if (!filter_chain.filter_chain_match.server_names.empty()) {
|
870
|
-
return
|
912
|
+
return absl::OkStatus();
|
871
913
|
}
|
872
914
|
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
873
915
|
}
|
874
916
|
|
875
|
-
|
917
|
+
absl::Status AddFilterChainDataForDestinationIpRange(
|
876
918
|
const FilterChain& filter_chain,
|
877
919
|
InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
|
878
920
|
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
@@ -884,21 +926,19 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
|
|
884
926
|
for (const auto& prefix_range :
|
885
927
|
filter_chain.filter_chain_match.prefix_ranges) {
|
886
928
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
887
|
-
if (!addr_str.ok())
|
888
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
|
889
|
-
}
|
929
|
+
if (!addr_str.ok()) return addr_str.status();
|
890
930
|
auto insert_result = destination_ip_map->emplace(
|
891
931
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
892
932
|
InternalFilterChainMap::DestinationIp());
|
893
933
|
if (insert_result.second) {
|
894
934
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
895
935
|
}
|
896
|
-
|
936
|
+
absl::Status status = AddFilterChainDataForServerNames(
|
897
937
|
filter_chain, &insert_result.first->second);
|
898
|
-
if (!
|
938
|
+
if (!status.ok()) return status;
|
899
939
|
}
|
900
940
|
}
|
901
|
-
return
|
941
|
+
return absl::OkStatus();
|
902
942
|
}
|
903
943
|
|
904
944
|
XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
@@ -920,36 +960,33 @@ XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
|
920
960
|
return filter_chain_map;
|
921
961
|
}
|
922
962
|
|
923
|
-
|
924
|
-
const std::vector<FilterChain>& filter_chains
|
925
|
-
XdsListenerResource::FilterChainMap* filter_chain_map) {
|
963
|
+
absl::StatusOr<XdsListenerResource::FilterChainMap> BuildFilterChainMap(
|
964
|
+
const std::vector<FilterChain>& filter_chains) {
|
926
965
|
InternalFilterChainMap internal_filter_chain_map;
|
927
966
|
for (const auto& filter_chain : filter_chains) {
|
928
967
|
// Discard filter chain entries that specify destination port
|
929
968
|
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
930
|
-
|
969
|
+
absl::Status status = AddFilterChainDataForDestinationIpRange(
|
931
970
|
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
932
|
-
if (!
|
971
|
+
if (!status.ok()) return status;
|
933
972
|
}
|
934
|
-
|
935
|
-
BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
936
|
-
return GRPC_ERROR_NONE;
|
973
|
+
return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
937
974
|
}
|
938
975
|
|
939
|
-
|
940
|
-
const
|
941
|
-
const envoy_config_listener_v3_Listener* listener, bool is_v2
|
942
|
-
|
943
|
-
lds_update
|
944
|
-
|
945
|
-
AddressParse(envoy_config_listener_v3_Listener_address(listener)
|
946
|
-
|
947
|
-
|
976
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
|
977
|
+
const XdsResourceType::DecodeContext& context,
|
978
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2) {
|
979
|
+
XdsListenerResource lds_update;
|
980
|
+
lds_update.type = XdsListenerResource::ListenerType::kTcpListener;
|
981
|
+
auto address =
|
982
|
+
AddressParse(envoy_config_listener_v3_Listener_address(listener));
|
983
|
+
if (!address.ok()) return address.status();
|
984
|
+
lds_update.address = std::move(*address);
|
948
985
|
const auto* use_original_dst =
|
949
986
|
envoy_config_listener_v3_Listener_use_original_dst(listener);
|
950
987
|
if (use_original_dst != nullptr) {
|
951
988
|
if (google_protobuf_BoolValue_value(use_original_dst)) {
|
952
|
-
return
|
989
|
+
return absl::InvalidArgumentError(
|
953
990
|
"Field \'use_original_dst\' is not supported.");
|
954
991
|
}
|
955
992
|
}
|
@@ -959,36 +996,32 @@ grpc_error_handle LdsResourceParseServer(
|
|
959
996
|
std::vector<FilterChain> parsed_filter_chains;
|
960
997
|
parsed_filter_chains.reserve(size);
|
961
998
|
for (size_t i = 0; i < size; i++) {
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
if (!GRPC_ERROR_IS_NONE(error)) return error;
|
999
|
+
auto filter_chain = FilterChainParse(context, filter_chains[i], is_v2);
|
1000
|
+
if (!filter_chain.ok()) return filter_chain.status();
|
1001
|
+
parsed_filter_chains.push_back(std::move(*filter_chain));
|
1002
|
+
}
|
1003
|
+
auto filter_chain_map = BuildFilterChainMap(parsed_filter_chains);
|
1004
|
+
if (!filter_chain_map.ok()) return filter_chain_map.status();
|
1005
|
+
lds_update.filter_chain_map = std::move(*filter_chain_map);
|
970
1006
|
auto* default_filter_chain =
|
971
1007
|
envoy_config_listener_v3_Listener_default_filter_chain(listener);
|
972
1008
|
if (default_filter_chain != nullptr) {
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
lds_update->default_filter_chain =
|
979
|
-
std::move(*filter_chain.filter_chain_data);
|
1009
|
+
auto filter_chain = FilterChainParse(context, default_filter_chain, is_v2);
|
1010
|
+
if (!filter_chain.ok()) return filter_chain.status();
|
1011
|
+
if (filter_chain->filter_chain_data != nullptr) {
|
1012
|
+
lds_update.default_filter_chain =
|
1013
|
+
std::move(*filter_chain->filter_chain_data);
|
980
1014
|
}
|
981
1015
|
}
|
982
1016
|
if (size == 0 && default_filter_chain == nullptr) {
|
983
|
-
return
|
1017
|
+
return absl::InvalidArgumentError("No filter chain provided.");
|
984
1018
|
}
|
985
|
-
return
|
1019
|
+
return lds_update;
|
986
1020
|
}
|
987
1021
|
|
988
|
-
|
989
|
-
const
|
990
|
-
const envoy_config_listener_v3_Listener* listener, bool is_v2
|
991
|
-
XdsListenerResource* lds_update) {
|
1022
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParse(
|
1023
|
+
const XdsResourceType::DecodeContext& context,
|
1024
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2) {
|
992
1025
|
// Check whether it's a client or server listener.
|
993
1026
|
const envoy_config_listener_v3_ApiListener* api_listener =
|
994
1027
|
envoy_config_listener_v3_Listener_api_listener(listener);
|
@@ -997,24 +1030,22 @@ grpc_error_handle LdsResourceParse(
|
|
997
1030
|
// TODO(roth): Re-enable the following check once
|
998
1031
|
// github.com/istio/istio/issues/38914 is resolved.
|
999
1032
|
// if (api_listener != nullptr && address != nullptr) {
|
1000
|
-
// return
|
1033
|
+
// return absl::InvalidArgumentError(
|
1001
1034
|
// "Listener has both address and ApiListener");
|
1002
1035
|
// }
|
1003
1036
|
if (api_listener == nullptr && address == nullptr) {
|
1004
|
-
return
|
1037
|
+
return absl::InvalidArgumentError(
|
1005
1038
|
"Listener has neither address nor ApiListener");
|
1006
1039
|
}
|
1007
|
-
//
|
1008
|
-
|
1040
|
+
// If api_listener is present, it's for a client; otherwise, it's
|
1041
|
+
// for a server.
|
1009
1042
|
if (api_listener != nullptr) {
|
1010
|
-
|
1011
|
-
} else {
|
1012
|
-
error = LdsResourceParseServer(context, listener, is_v2, lds_update);
|
1043
|
+
return LdsResourceParseClient(context, api_listener, is_v2);
|
1013
1044
|
}
|
1014
|
-
return
|
1045
|
+
return LdsResourceParseServer(context, listener, is_v2);
|
1015
1046
|
}
|
1016
1047
|
|
1017
|
-
void MaybeLogListener(const
|
1048
|
+
void MaybeLogListener(const XdsResourceType::DecodeContext& context,
|
1018
1049
|
const envoy_config_listener_v3_Listener* listener) {
|
1019
1050
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1020
1051
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
@@ -1029,8 +1060,8 @@ void MaybeLogListener(const XdsEncodingContext& context,
|
|
1029
1060
|
} // namespace
|
1030
1061
|
|
1031
1062
|
absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
|
1032
|
-
const
|
1033
|
-
bool is_v2) const {
|
1063
|
+
const XdsResourceType::DecodeContext& context,
|
1064
|
+
absl::string_view serialized_resource, bool is_v2) const {
|
1034
1065
|
// Parse serialized proto.
|
1035
1066
|
auto* resource = envoy_config_listener_v3_Listener_parse(
|
1036
1067
|
serialized_resource.data(), serialized_resource.size(), context.arena);
|
@@ -1042,24 +1073,23 @@ absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
|
|
1042
1073
|
DecodeResult result;
|
1043
1074
|
result.name =
|
1044
1075
|
UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
|
1045
|
-
auto
|
1046
|
-
|
1047
|
-
LdsResourceParse(context, resource, is_v2, &listener_data->resource);
|
1048
|
-
if (!GRPC_ERROR_IS_NONE(error)) {
|
1049
|
-
std::string error_str = grpc_error_std_string(error);
|
1050
|
-
GRPC_ERROR_UNREF(error);
|
1076
|
+
auto listener = LdsResourceParse(context, resource, is_v2);
|
1077
|
+
if (!listener.ok()) {
|
1051
1078
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1052
1079
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid Listener %s: %s",
|
1053
|
-
context.client, result.name.c_str(),
|
1080
|
+
context.client, result.name.c_str(),
|
1081
|
+
listener.status().ToString().c_str());
|
1054
1082
|
}
|
1055
|
-
result.resource =
|
1083
|
+
result.resource = listener.status();
|
1056
1084
|
} else {
|
1057
1085
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1058
1086
|
gpr_log(GPR_INFO, "[xds_client %p] parsed Listener %s: %s",
|
1059
1087
|
context.client, result.name.c_str(),
|
1060
|
-
|
1088
|
+
listener->ToString().c_str());
|
1061
1089
|
}
|
1062
|
-
|
1090
|
+
auto resource = absl::make_unique<ResourceDataSubclass>();
|
1091
|
+
resource->resource = std::move(*listener);
|
1092
|
+
result.resource = std::move(resource);
|
1063
1093
|
}
|
1064
1094
|
return std::move(result);
|
1065
1095
|
}
|