grpc 1.37.0 → 1.45.0
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 +501 -260
- data/etc/roots.pem +335 -326
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -1
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +43 -0
- data/include/grpc/event_engine/event_engine.h +399 -0
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
- data/include/grpc/event_engine/memory_allocator.h +226 -0
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/fork.h +1 -1
- data/include/grpc/grpc.h +65 -22
- data/include/grpc/grpc_posix.h +22 -18
- data/include/grpc/grpc_security.h +358 -191
- data/include/grpc/grpc_security_constants.h +17 -14
- data/include/grpc/impl/codegen/atm.h +5 -3
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
- data/include/grpc/impl/codegen/atm_windows.h +2 -0
- data/include/grpc/impl/codegen/byte_buffer.h +2 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/fork.h +2 -0
- data/include/grpc/impl/codegen/gpr_slice.h +2 -0
- data/include/grpc/impl/codegen/gpr_types.h +2 -0
- data/include/grpc/impl/codegen/grpc_types.h +61 -28
- data/include/grpc/impl/codegen/log.h +2 -0
- data/include/grpc/impl/codegen/port_platform.h +83 -22
- data/include/grpc/impl/codegen/propagation_bits.h +2 -0
- data/include/grpc/impl/codegen/slice.h +6 -1
- data/include/grpc/impl/codegen/status.h +2 -0
- data/include/grpc/impl/codegen/sync.h +8 -5
- data/include/grpc/impl/codegen/sync_abseil.h +2 -0
- data/include/grpc/impl/codegen/sync_custom.h +2 -0
- data/include/grpc/impl/codegen/sync_generic.h +3 -0
- data/include/grpc/impl/codegen/sync_posix.h +4 -2
- data/include/grpc/impl/codegen/sync_windows.h +2 -0
- data/include/grpc/module.modulemap +14 -14
- data/include/grpc/slice.h +1 -12
- data/include/grpc/status.h +1 -1
- data/include/grpc/support/atm.h +1 -1
- data/include/grpc/support/atm_gcc_atomic.h +1 -1
- data/include/grpc/support/atm_gcc_sync.h +1 -1
- data/include/grpc/support/atm_windows.h +1 -1
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/port_platform.h +1 -1
- data/include/grpc/support/sync.h +1 -1
- data/include/grpc/support/sync_abseil.h +1 -1
- data/include/grpc/support/sync_custom.h +1 -1
- data/include/grpc/support/sync_generic.h +1 -1
- data/include/grpc/support/sync_posix.h +1 -1
- data/include/grpc/support/sync_windows.h +1 -1
- data/include/grpc/support/time.h +2 -2
- data/src/core/ext/filters/census/grpc_context.cc +1 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +24 -27
- data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +17 -12
- data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +1231 -3574
- data/src/core/ext/filters/client_channel/client_channel.h +563 -56
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -22
- data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +22 -10
- data/src/core/ext/filters/client_channel/connector.h +20 -20
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +15 -17
- data/src/core/ext/filters/client_channel/dynamic_filters.h +5 -5
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -16
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +72 -68
- data/src/core/ext/filters/client_channel/health/health_check_client.h +38 -36
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +54 -55
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +300 -201
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +17 -18
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +86 -61
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -68
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +785 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2551 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +77 -78
- 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 +37 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +112 -167
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +188 -111
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +46 -65
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +198 -312
- data/src/core/ext/filters/client_channel/lb_policy.cc +17 -30
- data/src/core/ext/filters/client_channel/lb_policy.h +170 -137
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -11
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +292 -149
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +23 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +24 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -69
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +168 -281
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +39 -26
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +138 -120
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +42 -47
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -6
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +102 -79
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +41 -40
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +547 -468
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -253
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +34 -57
- data/src/core/ext/filters/client_channel/retry_filter.cc +2640 -0
- data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
- data/src/core/ext/filters/client_channel/retry_service_config.cc +314 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +102 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -59
- data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +56 -41
- data/src/core/ext/filters/client_channel/subchannel.cc +143 -207
- data/src/core/ext/filters/client_channel/subchannel.h +43 -62
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +109 -348
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +41 -43
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +105 -102
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +21 -31
- data/src/core/ext/filters/fault_injection/service_config_parser.h +11 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +108 -183
- data/src/core/ext/filters/http/client_authority_filter.cc +36 -95
- data/src/core/ext/filters/http/client_authority_filter.h +23 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +52 -73
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +67 -157
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +43 -56
- data/src/core/ext/filters/http/server/http_server_filter.cc +115 -207
- data/src/core/ext/filters/max_age/max_age_filter.cc +75 -69
- data/src/core/ext/filters/message_size/message_size_filter.cc +63 -69
- data/src/core/ext/filters/message_size/message_size_filter.h +11 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +271 -0
- data/src/core/{lib/transport/authority_override.h → ext/filters/server_config_selector/server_config_selector_filter.h} +8 -13
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +251 -19
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +339 -138
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +386 -463
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -4
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -6
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +66 -47
- data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -21
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -20
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -15
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +49 -17
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +16 -13
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +520 -749
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +811 -1193
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +101 -83
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +51 -74
- data/src/core/ext/transport/chttp2/transport/parsing.cc +157 -293
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +113 -164
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +186 -215
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +244 -210
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +932 -575
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +20 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +40 -19
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -117
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +513 -317
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -188
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +954 -530
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +44 -29
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +137 -81
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +328 -250
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1266 -657
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +41 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +136 -80
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +73 -54
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +265 -159
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +41 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +238 -153
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +894 -471
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +63 -46
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +210 -130
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +33 -19
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +32 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +88 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +144 -118
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +529 -329
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +112 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +425 -259
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +44 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +212 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +932 -266
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +47 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +28 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +53 -35
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -36
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +133 -85
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -39
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +325 -107
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +244 -144
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +36 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +97 -69
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +400 -226
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +99 -78
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +340 -213
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +199 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -11
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +86 -49
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -62
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +294 -185
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +93 -60
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +349 -181
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +127 -100
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +307 -185
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +59 -27
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +195 -88
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +648 -559
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2460 -1505
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +127 -64
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +69 -40
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +18 -5
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +37 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +46 -29
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +156 -92
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +52 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +175 -107
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +69 -41
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +272 -200
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1095 -552
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +108 -52
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +448 -171
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +42 -27
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +115 -71
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +103 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +341 -213
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +92 -73
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +335 -218
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -18
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +87 -54
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +85 -40
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +303 -104
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +228 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +81 -46
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +42 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +33 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +33 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +105 -61
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +79 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +70 -43
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +94 -58
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +206 -124
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +191 -115
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +65 -34
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +100 -52
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +39 -19
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +114 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +9 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +151 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +439 -281
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +153 -127
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +483 -298
- data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
- data/src/core/ext/upb-generated/google/api/http.upb.h +137 -89
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +40 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +367 -277
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1252 -764
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +36 -18
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +100 -64
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +36 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +269 -149
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +44 -26
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +276 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +68 -42
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +132 -108
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +458 -285
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -13
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +72 -39
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +64 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +321 -197
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +175 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +132 -63
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +41 -18
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +9 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +41 -18
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +40 -19
- data/src/core/ext/upb-generated/validate/validate.upb.c +396 -295
- data/src/core/ext/upb-generated/validate/validate.upb.h +1395 -768
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +230 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +19 -6
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -19
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +32 -18
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +77 -46
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +27 -13
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +39 -25
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +24 -11
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +47 -27
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +35 -21
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +87 -54
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +24 -11
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +51 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +144 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +95 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +22 -12
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +69 -98
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +349 -339
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +57 -52
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +488 -484
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +18 -20
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +224 -229
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +79 -64
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +23 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +76 -89
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +267 -200
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +59 -34
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +40 -38
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +157 -155
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +147 -153
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -36
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +40 -47
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +30 -25
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +79 -71
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +12 -7
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +717 -773
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +162 -157
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +27 -30
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +26 -24
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +455 -429
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +62 -52
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -138
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +194 -200
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +120 -97
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +18 -13
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +45 -48
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +9 -14
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +189 -216
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +18 -22
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +32 -38
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +20 -26
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +23 -27
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +39 -45
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +25 -29
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
- data/src/core/ext/xds/certificate_provider_store.h +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +4 -4
- data/src/core/ext/xds/upb_utils.h +67 -0
- data/src/core/ext/xds/xds_api.cc +232 -3313
- data/src/core/ext/xds/xds_api.h +70 -550
- data/src/core/ext/xds/xds_bootstrap.cc +315 -300
- data/src/core/ext/xds/xds_bootstrap.h +54 -33
- data/src/core/ext/xds/xds_certificate_provider.cc +7 -7
- data/src/core/ext/xds/xds_certificate_provider.h +6 -6
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
- data/src/core/ext/xds/xds_client.cc +1093 -957
- data/src/core/ext/xds/xds_client.h +143 -168
- data/src/core/ext/xds/xds_client_stats.cc +31 -30
- data/src/core/ext/xds/xds_client_stats.h +15 -13
- data/src/core/ext/xds/xds_cluster.cc +453 -0
- data/src/core/ext/xds/xds_cluster.h +108 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +95 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +10 -9
- data/src/core/ext/xds/xds_http_fault_filter.h +6 -5
- data/src/core/ext/xds/xds_http_filters.cc +15 -7
- data/src/core/ext/xds/xds_http_filters.h +7 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1039 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/{lib/transport/authority_override.cc → ext/xds/xds_resource_type.cc} +10 -17
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +985 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +250 -0
- data/src/core/ext/xds/xds_routing.h +101 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1083 -296
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +43 -25
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +12 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +34 -41
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +5 -15
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +9 -38
- data/src/core/lib/backoff/backoff.h +11 -11
- data/src/core/lib/channel/call_finalization.h +86 -0
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_args.cc +87 -9
- data/src/core/lib/channel/channel_args.h +13 -1
- data/src/core/lib/channel/channel_args_preconditioning.cc +48 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack.cc +25 -15
- data/src/core/lib/channel/channel_stack.h +53 -16
- data/src/core/lib/channel/channel_stack_builder.cc +68 -262
- data/src/core/lib/channel/channel_stack_builder.h +95 -155
- data/src/core/lib/channel/channel_trace.cc +8 -10
- data/src/core/lib/channel/channel_trace.h +2 -1
- data/src/core/lib/channel/channelz.cc +65 -52
- data/src/core/lib/channel/channelz.h +32 -29
- data/src/core/lib/channel/channelz_registry.cc +8 -7
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +14 -10
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/channel/context.h +14 -0
- data/src/core/lib/channel/handshaker.cc +10 -8
- data/src/core/lib/channel/handshaker.h +7 -8
- data/src/core/lib/channel/handshaker_factory.h +10 -2
- data/src/core/lib/channel/handshaker_registry.cc +15 -70
- data/src/core/lib/channel/handshaker_registry.h +29 -12
- data/src/core/lib/channel/promise_based_filter.cc +669 -0
- data/src/core/lib/channel/promise_based_filter.h +423 -0
- data/src/core/lib/channel/status_util.h +6 -2
- data/src/core/lib/compression/compression.cc +22 -114
- data/src/core/lib/compression/compression_internal.cc +145 -207
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +13 -13
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/config/core_configuration.cc +104 -0
- data/src/core/lib/config/core_configuration.h +196 -0
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +15 -14
- data/src/core/lib/debug/stats_data.h +1 -0
- data/src/core/lib/debug/trace.cc +1 -0
- data/src/core/lib/debug/trace.h +4 -3
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +42 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
- data/src/core/lib/event_engine/event_engine.cc +52 -0
- data/src/core/lib/event_engine/event_engine_factory.h +36 -0
- data/src/core/lib/event_engine/memory_allocator.cc +66 -0
- data/src/core/lib/event_engine/resolved_address.cc +39 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/alloc.cc +4 -3
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/env_linux.cc +1 -2
- data/src/core/lib/gpr/env_posix.cc +2 -3
- data/src/core/lib/gpr/log.cc +3 -3
- data/src/core/lib/gpr/log_android.cc +3 -2
- data/src/core/lib/gpr/log_linux.cc +7 -4
- data/src/core/lib/gpr/log_posix.cc +6 -3
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/string.h +2 -2
- data/src/core/lib/gpr/sync.cc +2 -2
- data/src/core/lib/gpr/sync_abseil.cc +7 -6
- data/src/core/lib/gpr/sync_posix.cc +4 -3
- data/src/core/lib/gpr/time.cc +5 -3
- data/src/core/lib/gpr/time_windows.cc +3 -2
- data/src/core/lib/gpr/tls.h +125 -40
- data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
- data/src/core/lib/gpr/useful.h +97 -32
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/atomic_utils.h +47 -0
- data/src/core/lib/gprpp/bitset.h +195 -0
- data/src/core/lib/gprpp/capture.h +76 -0
- data/src/core/lib/gprpp/chunked_vector.h +253 -0
- data/src/core/lib/gprpp/construct_destruct.h +39 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/debug_location.h +2 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
- data/src/core/lib/gprpp/fork.cc +14 -12
- data/src/core/lib/gprpp/fork.h +4 -4
- data/src/core/lib/gprpp/global_config.h +1 -2
- data/src/core/lib/gprpp/global_config_env.cc +14 -14
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/global_config_generic.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +11 -9
- data/src/core/lib/gprpp/memory.h +9 -3
- data/src/core/lib/gprpp/mpscq.cc +7 -7
- data/src/core/lib/gprpp/mpscq.h +6 -5
- data/src/core/lib/gprpp/orphanable.h +7 -7
- data/src/core/lib/gprpp/ref_counted.h +47 -33
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.cc +419 -0
- data/src/core/lib/gprpp/status_helper.h +181 -0
- data/src/core/lib/gprpp/sync.h +5 -31
- data/src/core/lib/gprpp/table.h +434 -0
- data/src/core/lib/gprpp/thd_posix.cc +5 -5
- data/src/core/lib/gprpp/thd_windows.cc +4 -11
- data/src/core/lib/gprpp/time.cc +186 -0
- data/src/core/lib/gprpp/time.h +292 -0
- data/src/core/lib/gprpp/time_util.cc +2 -2
- data/src/core/lib/gprpp/time_util.h +2 -2
- data/src/core/lib/http/format_request.cc +28 -23
- data/src/core/lib/http/format_request.h +8 -6
- data/src/core/lib/http/httpcli.cc +299 -209
- data/src/core/lib/http/httpcli.h +183 -85
- data/src/core/lib/http/httpcli_security_connector.cc +71 -81
- data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
- data/src/core/lib/http/parser.cc +18 -18
- data/src/core/lib/http/parser.h +6 -5
- data/src/core/lib/iomgr/buffer_list.cc +16 -17
- data/src/core/lib/iomgr/buffer_list.h +22 -24
- data/src/core/lib/iomgr/call_combiner.cc +55 -23
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -4
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +33 -12
- data/src/core/lib/iomgr/combiner.cc +46 -36
- data/src/core/lib/iomgr/combiner.h +3 -2
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +1 -5
- data/src/core/lib/iomgr/endpoint.h +3 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +25 -54
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair.h +1 -0
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -9
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +270 -99
- data/src/core/lib/iomgr/error.h +277 -113
- data/src/core/lib/iomgr/error_cfstream.cc +10 -4
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +6 -1
- data/src/core/lib/iomgr/ev_apple.cc +10 -9
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +42 -48
- data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -81
- data/src/core/lib/iomgr/ev_poll_posix.cc +73 -73
- data/src/core/lib/iomgr/ev_posix.cc +12 -12
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
- data/src/core/lib/iomgr/event_engine/closure.h +42 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +172 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +85 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +47 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +37 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +133 -0
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +296 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
- data/src/core/lib/iomgr/exec_ctx.cc +29 -102
- data/src/core/lib/iomgr/exec_ctx.h +32 -57
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
- data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
- data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
- data/src/core/lib/iomgr/executor/threadpool.h +4 -3
- data/src/core/lib/iomgr/executor.cc +37 -46
- data/src/core/lib/iomgr/executor.h +3 -3
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
- data/src/core/lib/iomgr/iocp_windows.cc +10 -9
- data/src/core/lib/iomgr/iocp_windows.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +5 -3
- data/src/core/lib/iomgr/iomgr.h +3 -3
- data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
- data/src/core/lib/iomgr/iomgr_internal.h +6 -5
- data/src/core/lib/iomgr/iomgr_posix.cc +5 -3
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -14
- data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
- data/src/core/lib/iomgr/load_file.cc +6 -6
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +23 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/polling_entity.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.h +6 -0
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
- data/src/core/lib/iomgr/pollset_windows.cc +6 -6
- data/src/core/lib/iomgr/port.h +8 -14
- data/src/core/lib/iomgr/python_util.h +3 -2
- data/src/core/lib/iomgr/resolve_address.cc +10 -24
- data/src/core/lib/iomgr/resolve_address.h +48 -43
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +91 -79
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +102 -85
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/sockaddr.h +2 -1
- data/src/core/lib/iomgr/{socket_utils_uv.cc → sockaddr_utils_posix.cc} +21 -8
- data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +17 -4
- data/src/core/lib/iomgr/socket_mutator.h +27 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +28 -44
- data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
- data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.h +5 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +12 -28
- data/src/core/lib/iomgr/tcp_client_posix.cc +38 -45
- data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +15 -15
- data/src/core/lib/iomgr/tcp_posix.cc +129 -159
- data/src/core/lib/iomgr/tcp_posix.h +17 -12
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +16 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +44 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +34 -29
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +23 -20
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +32 -35
- data/src/core/lib/iomgr/tcp_windows.cc +35 -52
- data/src/core/lib/iomgr/tcp_windows.h +3 -3
- data/src/core/lib/iomgr/timer.cc +3 -2
- data/src/core/lib/iomgr/timer.h +17 -8
- data/src/core/lib/iomgr/timer_generic.cc +116 -127
- data/src/core/lib/iomgr/timer_generic.h +1 -0
- data/src/core/lib/iomgr/timer_heap.cc +2 -3
- data/src/core/lib/iomgr/timer_manager.cc +16 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -18
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.cc +120 -44
- data/src/core/lib/iomgr/work_serializer.h +33 -5
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +97 -58
- data/src/core/lib/json/json_util.cc +71 -3
- data/src/core/lib/json/json_util.h +66 -116
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/matchers/matchers.cc +47 -59
- data/src/core/lib/matchers/matchers.h +30 -30
- data/src/core/lib/profiling/basic_timers.cc +8 -6
- data/src/core/lib/profiling/stap_timers.cc +2 -2
- data/src/core/lib/promise/activity.cc +121 -0
- data/src/core/lib/promise/activity.h +540 -0
- data/src/core/lib/promise/arena_promise.h +188 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +496 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +49 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +134 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +66 -0
- data/src/core/lib/promise/promise.h +95 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +89 -0
- data/src/core/lib/promise/sleep.cc +74 -0
- data/src/core/lib/promise/sleep.h +66 -0
- data/src/core/lib/promise/try_seq.h +157 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -29
- data/src/core/lib/resolver/resolver_registry.cc +156 -0
- data/src/core/lib/resolver/resolver_registry.h +113 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +2 -2
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +40 -0
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +18 -14
- data/src/core/lib/{gprpp → resource_quota}/arena.h +37 -16
- data/src/core/lib/resource_quota/memory_quota.cc +478 -0
- data/src/core/lib/resource_quota/memory_quota.h +457 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +212 -0
- data/src/core/lib/security/authorization/evaluate_args.h +92 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +171 -0
- data/src/core/lib/security/context/security_context.cc +15 -10
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
- data/src/core/lib/security/credentials/call_creds_util.h +42 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -84
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
- data/src/core/lib/security/credentials/credentials.cc +11 -10
- data/src/core/lib/security/credentials/credentials.h +75 -59
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +78 -72
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +15 -13
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -4
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +127 -80
- data/src/core/lib/security/credentials/external/external_account_credentials.h +15 -17
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -5
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +43 -26
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -18
- data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +85 -30
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +21 -28
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
- data/src/core/lib/security/credentials/jwt/json_token.cc +7 -9
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +52 -51
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +23 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +66 -59
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
- data/src/core/lib/security/credentials/local/local_credentials.h +6 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +166 -193
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +54 -34
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +97 -157
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -14
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +11 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +19 -15
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +80 -25
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +20 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +35 -85
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -85
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +31 -36
- data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -18
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -25
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -16
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +32 -24
- data/src/core/lib/security/security_connector/security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/security_connector.h +24 -24
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -22
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +67 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +17 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +409 -272
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +118 -79
- data/src/core/lib/security/transport/auth_filters.h +38 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +88 -353
- data/src/core/lib/security/transport/secure_endpoint.cc +8 -18
- data/src/core/lib/security/transport/secure_endpoint.h +1 -0
- data/src/core/lib/security/transport/security_handshaker.cc +138 -90
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +58 -48
- data/src/core/lib/security/transport/tsi_error.cc +5 -6
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +8 -10
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/service_config/service_config.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_call_data.h +17 -31
- data/src/core/{ext/filters/client_channel/service_config.cc → lib/service_config/service_config_impl.cc} +31 -27
- data/src/core/{ext/filters/client_channel/service_config.h → lib/service_config/service_config_impl.h} +22 -23
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +35 -31
- data/src/core/lib/service_config/service_config_parser.h +106 -0
- data/src/core/lib/slice/percent_encoding.cc +84 -97
- data/src/core/lib/slice/percent_encoding.h +23 -28
- data/src/core/lib/slice/slice.cc +81 -191
- data/src/core/lib/slice/slice.h +384 -0
- data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
- data/src/core/lib/slice/slice_buffer.cc +10 -7
- data/src/core/lib/slice/slice_internal.h +15 -276
- data/src/core/lib/slice/slice_refcount.cc +35 -0
- data/src/core/lib/slice/slice_refcount.h +46 -0
- data/src/core/lib/slice/slice_refcount_base.h +61 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/surface/api_trace.cc +2 -1
- data/src/core/lib/surface/api_trace.h +1 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/lib/surface/builtins.h +26 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
- data/src/core/lib/surface/call.cc +316 -521
- data/src/core/lib/surface/call.h +14 -9
- data/src/core/lib/surface/call_details.cc +2 -2
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/channel.cc +75 -107
- data/src/core/lib/surface/channel.h +17 -24
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/channel_stack_type.cc +2 -1
- data/src/core/lib/surface/completion_queue.cc +136 -145
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +3 -3
- data/src/core/lib/surface/completion_queue_factory.h +1 -0
- data/src/core/lib/surface/event_string.cc +1 -0
- data/src/core/lib/surface/init.cc +82 -60
- data/src/core/lib/surface/init.h +10 -4
- data/src/core/lib/surface/lame_client.cc +50 -35
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/metadata_array.cc +2 -2
- data/src/core/lib/surface/server.cc +100 -128
- data/src/core/lib/surface/server.h +58 -53
- data/src/core/lib/surface/validate_metadata.cc +55 -24
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +11 -12
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +9 -5
- data/src/core/lib/transport/byte_stream.h +9 -8
- data/src/core/lib/transport/connectivity_state.cc +9 -6
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.cc +68 -29
- data/src/core/lib/transport/error_utils.h +13 -6
- data/src/core/lib/transport/metadata_batch.h +1348 -163
- data/src/core/lib/transport/parsed_metadata.cc +37 -0
- data/src/core/lib/transport/parsed_metadata.h +401 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/status_conversion.cc +2 -2
- data/src/core/lib/transport/status_conversion.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +204 -67
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.cc +15 -35
- data/src/core/lib/transport/transport.h +94 -8
- data/src/core/lib/transport/transport_impl.h +13 -0
- data/src/core/lib/transport/transport_op_string.cc +13 -35
- data/src/core/lib/uri/uri_parser.cc +237 -63
- data/src/core/lib/uri/uri_parser.h +39 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +75 -102
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
- data/src/core/tsi/alts/crypt/gsec.h +5 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +36 -31
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -19
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +42 -87
- data/src/core/tsi/local_transport_security.h +1 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -53
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +186 -38
- data/src/core/tsi/ssl_transport_security.h +45 -11
- data/src/core/tsi/transport_security.cc +15 -3
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_grpc.h +1 -0
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +22 -10
- data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
- data/src/ruby/ext/grpc/rb_call.c +5 -5
- data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
- data/src/ruby/ext/grpc/rb_channel.c +15 -10
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
- data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
- data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
- data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
- data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
- data/src/ruby/ext/grpc/rb_grpc.c +5 -4
- data/src/ruby/ext/grpc/rb_grpc.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -34
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +56 -53
- data/src/ruby/ext/grpc/rb_server.c +13 -9
- data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +104 -94
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -35
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +102 -44
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +25 -36
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +70 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -7
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +110 -100
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -103
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +39 -79
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +21 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +374 -243
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +27 -13
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +15 -17
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +11 -7
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +16 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +145 -45
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +47 -3
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +6 -13
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +27 -28
- data/third_party/abseil-cpp/absl/status/status.h +98 -33
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +34 -24
- data/third_party/abseil-cpp/absl/strings/charconv.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +619 -570
- data/third_party/abseil-cpp/absl/strings/cord.h +346 -101
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +478 -31
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +22 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +18 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +20 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +76 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +38 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
- data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -66
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +82 -65
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +93 -60
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +696 -662
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +67 -54
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +64 -44
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +19 -9
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -40
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +60 -49
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +91 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +57 -281
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +292 -200
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +6 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +26 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +6 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +23 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +2 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +397 -311
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +15 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +32 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +12 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +8 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +23 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +80 -38
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1517 -495
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +57 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +55 -104
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +386 -104
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +41 -48
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1160 -331
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +54 -17
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
- data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +660 -747
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +90 -43
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +307 -201
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +173 -36
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +474 -156
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +56 -110
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +129 -96
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +10 -15
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +146 -110
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +241 -132
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
- data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
- data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
- data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
- data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
- data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
- data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
- data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_android.c +444 -0
- data/third_party/cares/cares/src/lib/ares_android.h +27 -0
- data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
- data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
- data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
- data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
- data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
- data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
- data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
- data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
- data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
- data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
- data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
- data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
- data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
- data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
- data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
- data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
- data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
- data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
- data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
- data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
- data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
- data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
- data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
- data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
- data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
- data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
- data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
- data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
- data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
- data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
- data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
- data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
- data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
- data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
- data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
- data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
- data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
- data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
- data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
- data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
- data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
- data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
- data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
- data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
- data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
- data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
- data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
- data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
- data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
- data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
- data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
- data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
- data/third_party/cares/cares/src/lib/config-dos.h +115 -0
- data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
- data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
- data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
- data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
- data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- data/third_party/upb/third_party/utf8_range/naive.c +92 -0
- data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
- data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
- data/third_party/upb/upb/decode.c +758 -351
- data/third_party/upb/upb/decode.h +66 -12
- data/third_party/upb/upb/decode_fast.c +596 -581
- data/third_party/upb/upb/decode_fast.h +40 -13
- data/third_party/upb/upb/decode_internal.h +211 -0
- data/third_party/upb/upb/def.c +2089 -1069
- data/third_party/upb/upb/def.h +341 -256
- data/third_party/upb/upb/def.hpp +160 -161
- data/third_party/upb/upb/encode.c +285 -165
- data/third_party/upb/upb/encode.h +38 -13
- data/third_party/upb/upb/msg.c +276 -102
- data/third_party/upb/upb/msg.h +84 -582
- data/third_party/upb/upb/msg_internal.h +818 -0
- data/third_party/upb/upb/port_def.inc +85 -24
- data/third_party/upb/upb/port_undef.inc +38 -1
- data/third_party/upb/upb/reflection.c +312 -240
- data/third_party/upb/upb/reflection.h +119 -67
- data/third_party/upb/upb/reflection.hpp +37 -0
- data/third_party/upb/upb/table.c +398 -193
- data/third_party/upb/upb/table_internal.h +383 -0
- data/third_party/upb/upb/text_encode.c +141 -90
- data/third_party/upb/upb/text_encode.h +31 -5
- data/third_party/upb/upb/upb.c +164 -66
- data/third_party/upb/upb/upb.h +145 -139
- data/third_party/upb/upb/upb.hpp +50 -23
- data/third_party/upb/upb/upb_internal.h +68 -0
- data/third_party/xxhash/xxhash.h +679 -542
- metadata +597 -254
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -84
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
- data/src/core/ext/filters/client_channel/service_config_parser.h +0 -92
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -125
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -90
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -213
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -55
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -76
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -130
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -77
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/compression/algorithm_metadata.h +0 -61
- data/src/core/lib/compression/compression_args.cc +0 -135
- data/src/core/lib/compression/compression_args.h +0 -56
- data/src/core/lib/compression/stream_compression.cc +0 -80
- data/src/core/lib/compression/stream_compression.h +0 -116
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -90
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/gpr/arena.h +0 -47
- data/src/core/lib/gpr/tls_gcc.h +0 -52
- data/src/core/lib/gpr/tls_msvc.h +0 -54
- data/src/core/lib/gpr/tls_pthread.h +0 -56
- data/src/core/lib/gpr/tls_stdcpp.h +0 -48
- data/src/core/lib/gprpp/atomic.h +0 -104
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/iomgr/pollset_custom.cc +0 -106
- data/src/core/lib/iomgr/pollset_custom.h +0 -35
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/pollset_uv.cc +0 -93
- data/src/core/lib/iomgr/pollset_uv.h +0 -32
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
- data/src/core/lib/iomgr/resource_quota.cc +0 -1016
- data/src/core/lib/iomgr/resource_quota.h +0 -177
- data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -161
- data/src/core/lib/iomgr/tcp_custom.cc +0 -391
- data/src/core/lib/iomgr/tcp_custom.h +0 -84
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -483
- data/src/core/lib/iomgr/tcp_uv.cc +0 -419
- data/src/core/lib/iomgr/timer_custom.cc +0 -95
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/iomgr/timer_uv.cc +0 -66
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
- data/src/core/lib/slice/slice_intern.cc +0 -373
- data/src/core/lib/slice/slice_utils.h +0 -200
- data/src/core/lib/surface/init_secure.cc +0 -81
- data/src/core/lib/transport/metadata.cc +0 -693
- data/src/core/lib/transport/metadata.h +0 -446
- data/src/core/lib/transport/metadata_batch.cc +0 -419
- data/src/core/lib/transport/static_metadata.cc +0 -1249
- data/src/core/lib/transport/static_metadata.h +0 -604
- data/src/core/lib/transport/status_metadata.cc +0 -62
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
- data/third_party/cares/cares/ares_getopt.c +0 -122
- data/third_party/cares/cares/ares_getopt.h +0 -53
- data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
- data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
- data/third_party/upb/upb/decode.int.h +0 -163
- data/third_party/upb/upb/table.int.h +0 -475
- data/third_party/upb/upb/upb.int.h +0 -29
data/src/core/ext/xds/xds_api.cc
CHANGED
@@ -1,86 +1,42 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
21
|
-
#include
|
22
|
-
|
23
|
-
#include <
|
24
|
-
#include <cstdlib>
|
19
|
+
#include "src/core/ext/xds/xds_api.h"
|
20
|
+
|
21
|
+
#include <set>
|
25
22
|
#include <string>
|
23
|
+
#include <vector>
|
26
24
|
|
27
25
|
#include "absl/strings/str_cat.h"
|
28
|
-
#include "absl/strings/str_format.h"
|
29
|
-
#include "absl/strings/str_join.h"
|
30
|
-
#include "absl/strings/str_split.h"
|
31
26
|
#include "envoy/admin/v3/config_dump.upb.h"
|
32
|
-
#include "envoy/config/cluster/v3/circuit_breaker.upb.h"
|
33
|
-
#include "envoy/config/cluster/v3/cluster.upb.h"
|
34
|
-
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
35
|
-
#include "envoy/config/core/v3/address.upb.h"
|
36
27
|
#include "envoy/config/core/v3/base.upb.h"
|
37
|
-
#include "envoy/config/core/v3/base.upbdefs.h"
|
38
|
-
#include "envoy/config/core/v3/config_source.upb.h"
|
39
|
-
#include "envoy/config/core/v3/health_check.upb.h"
|
40
|
-
#include "envoy/config/core/v3/protocol.upb.h"
|
41
|
-
#include "envoy/config/endpoint/v3/endpoint.upb.h"
|
42
|
-
#include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
|
43
|
-
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
44
28
|
#include "envoy/config/endpoint/v3/load_report.upb.h"
|
45
|
-
#include "envoy/config/listener/v3/api_listener.upb.h"
|
46
|
-
#include "envoy/config/listener/v3/listener.upb.h"
|
47
|
-
#include "envoy/config/listener/v3/listener.upbdefs.h"
|
48
|
-
#include "envoy/config/listener/v3/listener_components.upb.h"
|
49
|
-
#include "envoy/config/route/v3/route.upb.h"
|
50
|
-
#include "envoy/config/route/v3/route.upbdefs.h"
|
51
|
-
#include "envoy/config/route/v3/route_components.upb.h"
|
52
|
-
#include "envoy/config/route/v3/route_components.upbdefs.h"
|
53
|
-
#include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
|
54
|
-
#include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
|
55
|
-
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
|
56
|
-
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
|
57
|
-
#include "envoy/extensions/transport_sockets/tls/v3/common.upb.h"
|
58
|
-
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
59
|
-
#include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
|
60
|
-
#include "envoy/service/cluster/v3/cds.upb.h"
|
61
|
-
#include "envoy/service/cluster/v3/cds.upbdefs.h"
|
62
29
|
#include "envoy/service/discovery/v3/discovery.upb.h"
|
63
30
|
#include "envoy/service/discovery/v3/discovery.upbdefs.h"
|
64
|
-
#include "envoy/service/endpoint/v3/eds.upb.h"
|
65
|
-
#include "envoy/service/endpoint/v3/eds.upbdefs.h"
|
66
|
-
#include "envoy/service/listener/v3/lds.upb.h"
|
67
31
|
#include "envoy/service/load_stats/v3/lrs.upb.h"
|
68
32
|
#include "envoy/service/load_stats/v3/lrs.upbdefs.h"
|
69
|
-
#include "envoy/service/route/v3/rds.upb.h"
|
70
|
-
#include "envoy/service/route/v3/rds.upbdefs.h"
|
71
33
|
#include "envoy/service/status/v3/csds.upb.h"
|
72
34
|
#include "envoy/service/status/v3/csds.upbdefs.h"
|
73
|
-
#include "envoy/type/matcher/v3/regex.upb.h"
|
74
|
-
#include "envoy/type/matcher/v3/string.upb.h"
|
75
|
-
#include "envoy/type/v3/percent.upb.h"
|
76
|
-
#include "envoy/type/v3/range.upb.h"
|
77
35
|
#include "google/protobuf/any.upb.h"
|
78
|
-
#include "google/protobuf/duration.upb.h"
|
79
36
|
#include "google/protobuf/struct.upb.h"
|
80
37
|
#include "google/protobuf/timestamp.upb.h"
|
81
38
|
#include "google/protobuf/wrappers.upb.h"
|
82
39
|
#include "google/rpc/status.upb.h"
|
83
|
-
#include "udpa/type/v1/typed_struct.upb.h"
|
84
40
|
#include "upb/text_encode.h"
|
85
41
|
#include "upb/upb.h"
|
86
42
|
#include "upb/upb.hpp"
|
@@ -89,793 +45,68 @@
|
|
89
45
|
#include <grpc/support/alloc.h>
|
90
46
|
#include <grpc/support/string_util.h>
|
91
47
|
|
92
|
-
#include "src/core/ext/xds/
|
48
|
+
#include "src/core/ext/xds/upb_utils.h"
|
49
|
+
#include "src/core/ext/xds/xds_common_types.h"
|
50
|
+
#include "src/core/ext/xds/xds_resource_type.h"
|
51
|
+
#include "src/core/ext/xds/xds_routing.h"
|
52
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
53
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
93
54
|
#include "src/core/lib/gpr/env.h"
|
94
55
|
#include "src/core/lib/gpr/string.h"
|
95
|
-
#include "src/core/lib/gpr/useful.h"
|
96
56
|
#include "src/core/lib/gprpp/host_port.h"
|
97
57
|
#include "src/core/lib/iomgr/error.h"
|
98
58
|
#include "src/core/lib/iomgr/sockaddr.h"
|
99
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
100
59
|
#include "src/core/lib/iomgr/socket_utils.h"
|
101
|
-
#include "src/core/lib/slice/
|
60
|
+
#include "src/core/lib/slice/slice_internal.h"
|
61
|
+
#include "src/core/lib/uri/uri_parser.h"
|
102
62
|
|
103
63
|
namespace grpc_core {
|
104
64
|
|
105
|
-
//
|
106
|
-
//
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_ENABLE_RING_HASH");
|
123
|
-
bool parsed_value;
|
124
|
-
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
125
|
-
gpr_free(value);
|
126
|
-
return parse_succeeded && parsed_value;
|
127
|
-
}
|
128
|
-
|
129
|
-
// TODO(yashykt): Check to see if xDS security is enabled. This will be
|
130
|
-
// removed once this feature is fully integration-tested and enabled by
|
131
|
-
// default.
|
132
|
-
bool XdsSecurityEnabled() {
|
133
|
-
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT");
|
134
|
-
bool parsed_value;
|
135
|
-
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
136
|
-
gpr_free(value);
|
137
|
-
return parse_succeeded && parsed_value;
|
138
|
-
}
|
139
|
-
|
140
|
-
//
|
141
|
-
// XdsApi::Route::HashPolicy
|
142
|
-
//
|
143
|
-
|
144
|
-
XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
|
145
|
-
: type(other.type),
|
146
|
-
header_name(other.header_name),
|
147
|
-
regex_substitution(other.regex_substitution) {
|
148
|
-
if (other.regex != nullptr) {
|
149
|
-
regex =
|
150
|
-
absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
151
|
-
}
|
152
|
-
}
|
153
|
-
|
154
|
-
XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
155
|
-
const HashPolicy& other) {
|
156
|
-
type = other.type;
|
157
|
-
header_name = other.header_name;
|
158
|
-
if (other.regex != nullptr) {
|
159
|
-
regex =
|
160
|
-
absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
161
|
-
}
|
162
|
-
regex_substitution = other.regex_substitution;
|
163
|
-
return *this;
|
164
|
-
}
|
165
|
-
|
166
|
-
XdsApi::Route::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
167
|
-
: type(other.type),
|
168
|
-
header_name(std::move(other.header_name)),
|
169
|
-
regex(std::move(other.regex)),
|
170
|
-
regex_substitution(std::move(other.regex_substitution)) {}
|
171
|
-
|
172
|
-
XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
173
|
-
HashPolicy&& other) noexcept {
|
174
|
-
type = other.type;
|
175
|
-
header_name = std::move(other.header_name);
|
176
|
-
regex = std::move(other.regex);
|
177
|
-
regex_substitution = std::move(other.regex_substitution);
|
178
|
-
return *this;
|
179
|
-
}
|
180
|
-
|
181
|
-
bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
|
182
|
-
const HashPolicy& other) const {
|
183
|
-
if (type != other.type) return false;
|
184
|
-
if (type == Type::HEADER) {
|
185
|
-
if (regex == nullptr) {
|
186
|
-
if (other.regex != nullptr) return false;
|
187
|
-
} else {
|
188
|
-
if (other.regex == nullptr) return false;
|
189
|
-
return header_name == other.header_name &&
|
190
|
-
regex->pattern() == other.regex->pattern() &&
|
191
|
-
regex_substitution == other.regex_substitution;
|
192
|
-
}
|
193
|
-
}
|
194
|
-
return true;
|
195
|
-
}
|
196
|
-
|
197
|
-
std::string XdsApi::Route::HashPolicy::ToString() const {
|
198
|
-
std::vector<std::string> contents;
|
199
|
-
switch (type) {
|
200
|
-
case Type::HEADER:
|
201
|
-
contents.push_back("type=HEADER");
|
202
|
-
break;
|
203
|
-
case Type::CHANNEL_ID:
|
204
|
-
contents.push_back("type=CHANNEL_ID");
|
205
|
-
break;
|
206
|
-
}
|
207
|
-
contents.push_back(
|
208
|
-
absl::StrFormat("terminal=%s", terminal ? "true" : "false"));
|
209
|
-
if (type == Type::HEADER) {
|
210
|
-
contents.push_back(absl::StrFormat(
|
211
|
-
"Header %s:/%s/%s", header_name,
|
212
|
-
(regex == nullptr) ? "" : regex->pattern(), regex_substitution));
|
213
|
-
}
|
214
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
215
|
-
}
|
216
|
-
|
217
|
-
//
|
218
|
-
// XdsApi::Route
|
219
|
-
//
|
220
|
-
|
221
|
-
std::string XdsApi::Route::Matchers::ToString() const {
|
222
|
-
std::vector<std::string> contents;
|
223
|
-
contents.push_back(
|
224
|
-
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
225
|
-
for (const HeaderMatcher& header_matcher : header_matchers) {
|
226
|
-
contents.push_back(header_matcher.ToString());
|
227
|
-
}
|
228
|
-
if (fraction_per_million.has_value()) {
|
229
|
-
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
230
|
-
fraction_per_million.value()));
|
231
|
-
}
|
232
|
-
return absl::StrJoin(contents, "\n");
|
233
|
-
}
|
234
|
-
|
235
|
-
std::string XdsApi::Route::ClusterWeight::ToString() const {
|
236
|
-
std::vector<std::string> contents;
|
237
|
-
contents.push_back(absl::StrCat("cluster=", name));
|
238
|
-
contents.push_back(absl::StrCat("weight=", weight));
|
239
|
-
if (!typed_per_filter_config.empty()) {
|
240
|
-
std::vector<std::string> parts;
|
241
|
-
for (const auto& p : typed_per_filter_config) {
|
242
|
-
const std::string& key = p.first;
|
243
|
-
const auto& config = p.second;
|
244
|
-
parts.push_back(absl::StrCat(key, "=", config.ToString()));
|
245
|
-
}
|
246
|
-
contents.push_back(absl::StrCat("typed_per_filter_config={",
|
247
|
-
absl::StrJoin(parts, ", "), "}"));
|
248
|
-
}
|
249
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
250
|
-
}
|
251
|
-
|
252
|
-
std::string XdsApi::Route::ToString() const {
|
253
|
-
std::vector<std::string> contents;
|
254
|
-
contents.push_back(matchers.ToString());
|
255
|
-
for (const HashPolicy& hash_policy : hash_policies) {
|
256
|
-
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
257
|
-
}
|
258
|
-
if (!cluster_name.empty()) {
|
259
|
-
contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
|
260
|
-
}
|
261
|
-
for (const ClusterWeight& cluster_weight : weighted_clusters) {
|
262
|
-
contents.push_back(cluster_weight.ToString());
|
263
|
-
}
|
264
|
-
if (max_stream_duration.has_value()) {
|
265
|
-
contents.push_back(max_stream_duration->ToString());
|
266
|
-
}
|
267
|
-
if (!typed_per_filter_config.empty()) {
|
268
|
-
contents.push_back("typed_per_filter_config={");
|
269
|
-
for (const auto& p : typed_per_filter_config) {
|
270
|
-
const std::string& name = p.first;
|
271
|
-
const auto& config = p.second;
|
272
|
-
contents.push_back(absl::StrCat(" ", name, "=", config.ToString()));
|
273
|
-
}
|
274
|
-
contents.push_back("}");
|
275
|
-
}
|
276
|
-
return absl::StrJoin(contents, "\n");
|
277
|
-
}
|
278
|
-
|
279
|
-
//
|
280
|
-
// XdsApi::RdsUpdate
|
281
|
-
//
|
282
|
-
|
283
|
-
std::string XdsApi::RdsUpdate::ToString() const {
|
284
|
-
std::vector<std::string> vhosts;
|
285
|
-
for (const VirtualHost& vhost : virtual_hosts) {
|
286
|
-
vhosts.push_back(
|
287
|
-
absl::StrCat("vhost={\n"
|
288
|
-
" domains=[",
|
289
|
-
absl::StrJoin(vhost.domains, ", "),
|
290
|
-
"]\n"
|
291
|
-
" routes=[\n"));
|
292
|
-
for (const XdsApi::Route& route : vhost.routes) {
|
293
|
-
vhosts.push_back(" {\n");
|
294
|
-
vhosts.push_back(route.ToString());
|
295
|
-
vhosts.push_back("\n }\n");
|
296
|
-
}
|
297
|
-
vhosts.push_back(" ]\n");
|
298
|
-
vhosts.push_back(" typed_per_filter_config={\n");
|
299
|
-
for (const auto& p : vhost.typed_per_filter_config) {
|
300
|
-
const std::string& name = p.first;
|
301
|
-
const auto& config = p.second;
|
302
|
-
vhosts.push_back(
|
303
|
-
absl::StrCat(" ", name, "=", config.ToString(), "\n"));
|
304
|
-
}
|
305
|
-
vhosts.push_back(" }\n");
|
306
|
-
vhosts.push_back("]\n");
|
307
|
-
}
|
308
|
-
return absl::StrJoin(vhosts, "");
|
309
|
-
}
|
310
|
-
|
311
|
-
namespace {
|
312
|
-
|
313
|
-
// Better match type has smaller value.
|
314
|
-
enum MatchType {
|
315
|
-
EXACT_MATCH,
|
316
|
-
SUFFIX_MATCH,
|
317
|
-
PREFIX_MATCH,
|
318
|
-
UNIVERSE_MATCH,
|
319
|
-
INVALID_MATCH,
|
320
|
-
};
|
321
|
-
|
322
|
-
// Returns true if match succeeds.
|
323
|
-
bool DomainMatch(MatchType match_type, const std::string& domain_pattern_in,
|
324
|
-
const std::string& expected_host_name_in) {
|
325
|
-
// Normalize the args to lower-case. Domain matching is case-insensitive.
|
326
|
-
std::string domain_pattern = domain_pattern_in;
|
327
|
-
std::string expected_host_name = expected_host_name_in;
|
328
|
-
std::transform(domain_pattern.begin(), domain_pattern.end(),
|
329
|
-
domain_pattern.begin(),
|
330
|
-
[](unsigned char c) { return std::tolower(c); });
|
331
|
-
std::transform(expected_host_name.begin(), expected_host_name.end(),
|
332
|
-
expected_host_name.begin(),
|
333
|
-
[](unsigned char c) { return std::tolower(c); });
|
334
|
-
if (match_type == EXACT_MATCH) {
|
335
|
-
return domain_pattern == expected_host_name;
|
336
|
-
} else if (match_type == SUFFIX_MATCH) {
|
337
|
-
// Asterisk must match at least one char.
|
338
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
339
|
-
absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
|
340
|
-
absl::string_view host_suffix(expected_host_name.c_str() +
|
341
|
-
expected_host_name.size() -
|
342
|
-
pattern_suffix.size());
|
343
|
-
return pattern_suffix == host_suffix;
|
344
|
-
} else if (match_type == PREFIX_MATCH) {
|
345
|
-
// Asterisk must match at least one char.
|
346
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
347
|
-
absl::string_view pattern_prefix(domain_pattern.c_str(),
|
348
|
-
domain_pattern.size() - 1);
|
349
|
-
absl::string_view host_prefix(expected_host_name.c_str(),
|
350
|
-
pattern_prefix.size());
|
351
|
-
return pattern_prefix == host_prefix;
|
352
|
-
} else {
|
353
|
-
return match_type == UNIVERSE_MATCH;
|
354
|
-
}
|
355
|
-
}
|
356
|
-
|
357
|
-
MatchType DomainPatternMatchType(const std::string& domain_pattern) {
|
358
|
-
if (domain_pattern.empty()) return INVALID_MATCH;
|
359
|
-
if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
|
360
|
-
if (domain_pattern == "*") return UNIVERSE_MATCH;
|
361
|
-
if (domain_pattern[0] == '*') return SUFFIX_MATCH;
|
362
|
-
if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
|
363
|
-
return INVALID_MATCH;
|
364
|
-
}
|
365
|
-
|
366
|
-
} // namespace
|
367
|
-
|
368
|
-
XdsApi::RdsUpdate::VirtualHost* XdsApi::RdsUpdate::FindVirtualHostForDomain(
|
369
|
-
const std::string& domain) {
|
370
|
-
// Find the best matched virtual host.
|
371
|
-
// The search order for 4 groups of domain patterns:
|
372
|
-
// 1. Exact match.
|
373
|
-
// 2. Suffix match (e.g., "*ABC").
|
374
|
-
// 3. Prefix match (e.g., "ABC*").
|
375
|
-
// 4. Universe match (i.e., "*").
|
376
|
-
// Within each group, longest match wins.
|
377
|
-
// If the same best matched domain pattern appears in multiple virtual hosts,
|
378
|
-
// the first matched virtual host wins.
|
379
|
-
VirtualHost* target_vhost = nullptr;
|
380
|
-
MatchType best_match_type = INVALID_MATCH;
|
381
|
-
size_t longest_match = 0;
|
382
|
-
// Check each domain pattern in each virtual host to determine the best
|
383
|
-
// matched virtual host.
|
384
|
-
for (VirtualHost& vhost : virtual_hosts) {
|
385
|
-
for (const std::string& domain_pattern : vhost.domains) {
|
386
|
-
// Check the match type first. Skip the pattern if it's not better than
|
387
|
-
// current match.
|
388
|
-
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
389
|
-
// This should be caught by RouteConfigParse().
|
390
|
-
GPR_ASSERT(match_type != INVALID_MATCH);
|
391
|
-
if (match_type > best_match_type) continue;
|
392
|
-
if (match_type == best_match_type &&
|
393
|
-
domain_pattern.size() <= longest_match) {
|
394
|
-
continue;
|
395
|
-
}
|
396
|
-
// Skip if match fails.
|
397
|
-
if (!DomainMatch(match_type, domain_pattern, domain)) continue;
|
398
|
-
// Choose this match.
|
399
|
-
target_vhost = &vhost;
|
400
|
-
best_match_type = match_type;
|
401
|
-
longest_match = domain_pattern.size();
|
402
|
-
if (best_match_type == EXACT_MATCH) break;
|
403
|
-
}
|
404
|
-
if (best_match_type == EXACT_MATCH) break;
|
405
|
-
}
|
406
|
-
return target_vhost;
|
407
|
-
}
|
408
|
-
|
409
|
-
//
|
410
|
-
// XdsApi::CommonTlsContext::CertificateValidationContext
|
411
|
-
//
|
412
|
-
|
413
|
-
std::string XdsApi::CommonTlsContext::CertificateValidationContext::ToString()
|
414
|
-
const {
|
415
|
-
std::vector<std::string> contents;
|
416
|
-
for (const auto& match : match_subject_alt_names) {
|
417
|
-
contents.push_back(match.ToString());
|
418
|
-
}
|
419
|
-
return absl::StrFormat("{match_subject_alt_names=[%s]}",
|
420
|
-
absl::StrJoin(contents, ", "));
|
421
|
-
}
|
422
|
-
|
423
|
-
bool XdsApi::CommonTlsContext::CertificateValidationContext::Empty() const {
|
424
|
-
return match_subject_alt_names.empty();
|
425
|
-
}
|
426
|
-
|
427
|
-
//
|
428
|
-
// XdsApi::CommonTlsContext::CertificateValidationContext
|
429
|
-
//
|
430
|
-
|
431
|
-
std::string XdsApi::CommonTlsContext::CertificateProviderInstance::ToString()
|
432
|
-
const {
|
433
|
-
absl::InlinedVector<std::string, 2> contents;
|
434
|
-
if (!instance_name.empty()) {
|
435
|
-
contents.push_back(absl::StrFormat("instance_name=%s", instance_name));
|
436
|
-
}
|
437
|
-
if (!certificate_name.empty()) {
|
438
|
-
contents.push_back(
|
439
|
-
absl::StrFormat("certificate_name=%s", certificate_name));
|
440
|
-
}
|
441
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
442
|
-
}
|
443
|
-
|
444
|
-
bool XdsApi::CommonTlsContext::CertificateProviderInstance::Empty() const {
|
445
|
-
return instance_name.empty() && certificate_name.empty();
|
446
|
-
}
|
447
|
-
|
448
|
-
//
|
449
|
-
// XdsApi::CommonTlsContext::CombinedCertificateValidationContext
|
450
|
-
//
|
451
|
-
|
452
|
-
std::string
|
453
|
-
XdsApi::CommonTlsContext::CombinedCertificateValidationContext::ToString()
|
454
|
-
const {
|
455
|
-
absl::InlinedVector<std::string, 2> contents;
|
456
|
-
if (!default_validation_context.Empty()) {
|
457
|
-
contents.push_back(absl::StrFormat("default_validation_context=%s",
|
458
|
-
default_validation_context.ToString()));
|
459
|
-
}
|
460
|
-
if (!validation_context_certificate_provider_instance.Empty()) {
|
461
|
-
contents.push_back(absl::StrFormat(
|
462
|
-
"validation_context_certificate_provider_instance=%s",
|
463
|
-
validation_context_certificate_provider_instance.ToString()));
|
464
|
-
}
|
465
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
466
|
-
}
|
467
|
-
|
468
|
-
bool XdsApi::CommonTlsContext::CombinedCertificateValidationContext::Empty()
|
469
|
-
const {
|
470
|
-
return default_validation_context.Empty() &&
|
471
|
-
validation_context_certificate_provider_instance.Empty();
|
472
|
-
}
|
473
|
-
|
474
|
-
//
|
475
|
-
// XdsApi::CommonTlsContext
|
476
|
-
//
|
477
|
-
|
478
|
-
std::string XdsApi::CommonTlsContext::ToString() const {
|
479
|
-
absl::InlinedVector<std::string, 2> contents;
|
480
|
-
if (!tls_certificate_certificate_provider_instance.Empty()) {
|
481
|
-
contents.push_back(absl::StrFormat(
|
482
|
-
"tls_certificate_certificate_provider_instance=%s",
|
483
|
-
tls_certificate_certificate_provider_instance.ToString()));
|
484
|
-
}
|
485
|
-
if (!combined_validation_context.Empty()) {
|
486
|
-
contents.push_back(absl::StrFormat("combined_validation_context=%s",
|
487
|
-
combined_validation_context.ToString()));
|
488
|
-
}
|
489
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
490
|
-
}
|
491
|
-
|
492
|
-
bool XdsApi::CommonTlsContext::Empty() const {
|
493
|
-
return tls_certificate_certificate_provider_instance.Empty() &&
|
494
|
-
combined_validation_context.Empty();
|
495
|
-
}
|
496
|
-
|
497
|
-
//
|
498
|
-
// XdsApi::DownstreamTlsContext
|
499
|
-
//
|
500
|
-
|
501
|
-
std::string XdsApi::DownstreamTlsContext::ToString() const {
|
502
|
-
return absl::StrFormat("common_tls_context=%s, require_client_certificate=%s",
|
503
|
-
common_tls_context.ToString(),
|
504
|
-
require_client_certificate ? "true" : "false");
|
505
|
-
}
|
506
|
-
|
507
|
-
bool XdsApi::DownstreamTlsContext::Empty() const {
|
508
|
-
return common_tls_context.Empty();
|
509
|
-
}
|
510
|
-
|
511
|
-
//
|
512
|
-
// XdsApi::LdsUpdate::HttpConnectionManager
|
513
|
-
//
|
514
|
-
|
515
|
-
std::string XdsApi::LdsUpdate::HttpConnectionManager::ToString() const {
|
516
|
-
absl::InlinedVector<std::string, 4> contents;
|
517
|
-
contents.push_back(absl::StrFormat(
|
518
|
-
"route_config_name=%s",
|
519
|
-
!route_config_name.empty() ? route_config_name.c_str() : "<inlined>"));
|
520
|
-
contents.push_back(absl::StrFormat("http_max_stream_duration=%s",
|
521
|
-
http_max_stream_duration.ToString()));
|
522
|
-
if (rds_update.has_value()) {
|
523
|
-
contents.push_back(
|
524
|
-
absl::StrFormat("rds_update=%s", rds_update->ToString()));
|
525
|
-
}
|
526
|
-
if (!http_filters.empty()) {
|
527
|
-
std::vector<std::string> filter_strings;
|
528
|
-
for (const auto& http_filter : http_filters) {
|
529
|
-
filter_strings.push_back(http_filter.ToString());
|
530
|
-
}
|
531
|
-
contents.push_back(absl::StrCat("http_filters=[",
|
532
|
-
absl::StrJoin(filter_strings, ", "), "]"));
|
533
|
-
}
|
534
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
535
|
-
}
|
536
|
-
|
537
|
-
//
|
538
|
-
// XdsApi::LdsUpdate::HttpFilter
|
539
|
-
//
|
540
|
-
|
541
|
-
std::string XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter::ToString()
|
542
|
-
const {
|
543
|
-
return absl::StrCat("{name=", name, ", config=", config.ToString(), "}");
|
544
|
-
}
|
545
|
-
|
546
|
-
//
|
547
|
-
// XdsApi::LdsUpdate::FilterChainData
|
548
|
-
//
|
549
|
-
|
550
|
-
std::string XdsApi::LdsUpdate::FilterChainData::ToString() const {
|
551
|
-
return absl::StrCat(
|
552
|
-
"{downstream_tls_context=", downstream_tls_context.ToString(),
|
553
|
-
" http_connection_manager=", http_connection_manager.ToString(), "}");
|
554
|
-
}
|
555
|
-
|
556
|
-
//
|
557
|
-
// XdsApi::LdsUpdate::FilterChainMap::CidrRange
|
558
|
-
//
|
559
|
-
|
560
|
-
std::string XdsApi::LdsUpdate::FilterChainMap::CidrRange::ToString() const {
|
561
|
-
return absl::StrCat(
|
562
|
-
"{address_prefix=", grpc_sockaddr_to_string(&address, false),
|
563
|
-
", prefix_len=", prefix_len, "}");
|
564
|
-
}
|
565
|
-
|
566
|
-
//
|
567
|
-
// FilterChain
|
568
|
-
//
|
569
|
-
|
570
|
-
struct FilterChain {
|
571
|
-
struct FilterChainMatch {
|
572
|
-
uint32_t destination_port = 0;
|
573
|
-
std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_ranges;
|
574
|
-
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType source_type =
|
575
|
-
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::kAny;
|
576
|
-
std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange>
|
577
|
-
source_prefix_ranges;
|
578
|
-
std::vector<uint32_t> source_ports;
|
579
|
-
std::vector<std::string> server_names;
|
580
|
-
std::string transport_protocol;
|
581
|
-
std::vector<std::string> application_protocols;
|
582
|
-
|
583
|
-
std::string ToString() const;
|
584
|
-
} filter_chain_match;
|
585
|
-
|
586
|
-
std::shared_ptr<XdsApi::LdsUpdate::FilterChainData> filter_chain_data;
|
587
|
-
};
|
588
|
-
|
589
|
-
std::string FilterChain::FilterChainMatch::ToString() const {
|
590
|
-
absl::InlinedVector<std::string, 8> contents;
|
591
|
-
if (destination_port != 0) {
|
592
|
-
contents.push_back(absl::StrCat("destination_port=", destination_port));
|
593
|
-
}
|
594
|
-
if (!prefix_ranges.empty()) {
|
595
|
-
std::vector<std::string> prefix_ranges_content;
|
596
|
-
for (const auto& range : prefix_ranges) {
|
597
|
-
prefix_ranges_content.push_back(range.ToString());
|
598
|
-
}
|
599
|
-
contents.push_back(absl::StrCat(
|
600
|
-
"prefix_ranges={", absl::StrJoin(prefix_ranges_content, ", "), "}"));
|
601
|
-
}
|
602
|
-
if (source_type == XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
|
603
|
-
kSameIpOrLoopback) {
|
604
|
-
contents.push_back("source_type=SAME_IP_OR_LOOPBACK");
|
605
|
-
} else if (source_type == XdsApi::LdsUpdate::FilterChainMap::
|
606
|
-
ConnectionSourceType::kExternal) {
|
607
|
-
contents.push_back("source_type=EXTERNAL");
|
608
|
-
}
|
609
|
-
if (!source_prefix_ranges.empty()) {
|
610
|
-
std::vector<std::string> source_prefix_ranges_content;
|
611
|
-
for (const auto& range : source_prefix_ranges) {
|
612
|
-
source_prefix_ranges_content.push_back(range.ToString());
|
613
|
-
}
|
614
|
-
contents.push_back(
|
615
|
-
absl::StrCat("source_prefix_ranges={",
|
616
|
-
absl::StrJoin(source_prefix_ranges_content, ", "), "}"));
|
617
|
-
}
|
618
|
-
if (!source_ports.empty()) {
|
619
|
-
contents.push_back(
|
620
|
-
absl::StrCat("source_ports={", absl::StrJoin(source_ports, ", "), "}"));
|
621
|
-
}
|
622
|
-
if (!server_names.empty()) {
|
623
|
-
contents.push_back(
|
624
|
-
absl::StrCat("server_names={", absl::StrJoin(server_names, ", "), "}"));
|
625
|
-
}
|
626
|
-
if (!transport_protocol.empty()) {
|
627
|
-
contents.push_back(absl::StrCat("transport_protocol=", transport_protocol));
|
628
|
-
}
|
629
|
-
if (!application_protocols.empty()) {
|
630
|
-
contents.push_back(absl::StrCat("application_protocols={",
|
631
|
-
absl::StrJoin(application_protocols, ", "),
|
632
|
-
"}"));
|
633
|
-
}
|
634
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
635
|
-
}
|
636
|
-
|
637
|
-
//
|
638
|
-
// XdsApi::LdsUpdate::FilterChainMap
|
639
|
-
//
|
640
|
-
|
641
|
-
std::string XdsApi::LdsUpdate::FilterChainMap::ToString() const {
|
642
|
-
std::vector<std::string> contents;
|
643
|
-
for (const auto& destination_ip : destination_ip_vector) {
|
644
|
-
for (int source_type = 0; source_type < 3; ++source_type) {
|
645
|
-
for (const auto& source_ip :
|
646
|
-
destination_ip.source_types_array[source_type]) {
|
647
|
-
for (const auto& source_port_pair : source_ip.ports_map) {
|
648
|
-
FilterChain::FilterChainMatch filter_chain_match;
|
649
|
-
if (destination_ip.prefix_range.has_value()) {
|
650
|
-
filter_chain_match.prefix_ranges.push_back(
|
651
|
-
*destination_ip.prefix_range);
|
652
|
-
}
|
653
|
-
filter_chain_match.source_type = static_cast<
|
654
|
-
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
|
655
|
-
source_type);
|
656
|
-
if (source_ip.prefix_range.has_value()) {
|
657
|
-
filter_chain_match.source_prefix_ranges.push_back(
|
658
|
-
*source_ip.prefix_range);
|
659
|
-
}
|
660
|
-
if (source_port_pair.first != 0) {
|
661
|
-
filter_chain_match.source_ports.push_back(source_port_pair.first);
|
662
|
-
}
|
663
|
-
contents.push_back(absl::StrCat(
|
664
|
-
"{filter_chain_match=", filter_chain_match.ToString(),
|
665
|
-
", filter_chain=", source_port_pair.second.data->ToString(),
|
666
|
-
"}"));
|
667
|
-
}
|
668
|
-
}
|
669
|
-
}
|
670
|
-
}
|
671
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
672
|
-
}
|
673
|
-
|
674
|
-
//
|
675
|
-
// XdsApi::LdsUpdate
|
676
|
-
//
|
677
|
-
|
678
|
-
std::string XdsApi::LdsUpdate::ToString() const {
|
679
|
-
absl::InlinedVector<std::string, 4> contents;
|
680
|
-
if (type == ListenerType::kTcpListener) {
|
681
|
-
contents.push_back(absl::StrCat("address=", address));
|
682
|
-
contents.push_back(
|
683
|
-
absl::StrCat("filter_chain_map=", filter_chain_map.ToString()));
|
684
|
-
if (default_filter_chain.has_value()) {
|
685
|
-
contents.push_back(absl::StrCat("default_filter_chain=",
|
686
|
-
default_filter_chain->ToString()));
|
687
|
-
}
|
688
|
-
} else if (type == ListenerType::kHttpApiListener) {
|
689
|
-
contents.push_back(absl::StrFormat("http_connection_manager=%s",
|
690
|
-
http_connection_manager.ToString()));
|
691
|
-
}
|
692
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
693
|
-
}
|
694
|
-
|
695
|
-
//
|
696
|
-
// XdsApi::CdsUpdate
|
697
|
-
//
|
698
|
-
|
699
|
-
std::string XdsApi::CdsUpdate::ToString() const {
|
700
|
-
absl::InlinedVector<std::string, 4> contents;
|
701
|
-
if (!eds_service_name.empty()) {
|
702
|
-
contents.push_back(
|
703
|
-
absl::StrFormat("eds_service_name=%s", eds_service_name));
|
704
|
-
}
|
705
|
-
if (!common_tls_context.Empty()) {
|
706
|
-
contents.push_back(absl::StrFormat("common_tls_context=%s",
|
707
|
-
common_tls_context.ToString()));
|
708
|
-
}
|
709
|
-
if (lrs_load_reporting_server_name.has_value()) {
|
710
|
-
contents.push_back(absl::StrFormat("lrs_load_reporting_server_name=%s",
|
711
|
-
lrs_load_reporting_server_name.value()));
|
712
|
-
}
|
713
|
-
contents.push_back(
|
714
|
-
absl::StrFormat("max_concurrent_requests=%d", max_concurrent_requests));
|
715
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
716
|
-
}
|
717
|
-
|
718
|
-
//
|
719
|
-
// XdsApi::EdsUpdate
|
720
|
-
//
|
721
|
-
|
722
|
-
std::string XdsApi::EdsUpdate::Priority::Locality::ToString() const {
|
723
|
-
std::vector<std::string> endpoint_strings;
|
724
|
-
for (const ServerAddress& endpoint : endpoints) {
|
725
|
-
endpoint_strings.emplace_back(endpoint.ToString());
|
726
|
-
}
|
727
|
-
return absl::StrCat("{name=", name->AsHumanReadableString(),
|
728
|
-
", lb_weight=", lb_weight, ", endpoints=[",
|
729
|
-
absl::StrJoin(endpoint_strings, ", "), "]}");
|
730
|
-
}
|
731
|
-
|
732
|
-
bool XdsApi::EdsUpdate::Priority::operator==(const Priority& other) const {
|
733
|
-
if (localities.size() != other.localities.size()) return false;
|
734
|
-
auto it1 = localities.begin();
|
735
|
-
auto it2 = other.localities.begin();
|
736
|
-
while (it1 != localities.end()) {
|
737
|
-
if (*it1->first != *it2->first) return false;
|
738
|
-
if (it1->second != it2->second) return false;
|
739
|
-
++it1;
|
740
|
-
++it2;
|
741
|
-
}
|
742
|
-
return true;
|
743
|
-
}
|
744
|
-
|
745
|
-
std::string XdsApi::EdsUpdate::Priority::ToString() const {
|
746
|
-
std::vector<std::string> locality_strings;
|
747
|
-
for (const auto& p : localities) {
|
748
|
-
locality_strings.emplace_back(p.second.ToString());
|
749
|
-
}
|
750
|
-
return absl::StrCat("[", absl::StrJoin(locality_strings, ", "), "]");
|
751
|
-
}
|
752
|
-
|
753
|
-
bool XdsApi::EdsUpdate::DropConfig::ShouldDrop(
|
754
|
-
const std::string** category_name) const {
|
755
|
-
for (size_t i = 0; i < drop_category_list_.size(); ++i) {
|
756
|
-
const auto& drop_category = drop_category_list_[i];
|
757
|
-
// Generate a random number in [0, 1000000).
|
758
|
-
const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
|
759
|
-
if (random < drop_category.parts_per_million) {
|
760
|
-
*category_name = &drop_category.name;
|
761
|
-
return true;
|
762
|
-
}
|
763
|
-
}
|
764
|
-
return false;
|
765
|
-
}
|
766
|
-
|
767
|
-
std::string XdsApi::EdsUpdate::DropConfig::ToString() const {
|
768
|
-
std::vector<std::string> category_strings;
|
769
|
-
for (const DropCategory& category : drop_category_list_) {
|
770
|
-
category_strings.emplace_back(
|
771
|
-
absl::StrCat(category.name, "=", category.parts_per_million));
|
772
|
-
}
|
773
|
-
return absl::StrCat("{[", absl::StrJoin(category_strings, ", "),
|
774
|
-
"], drop_all=", drop_all_, "}");
|
775
|
-
}
|
776
|
-
|
777
|
-
std::string XdsApi::EdsUpdate::ToString() const {
|
778
|
-
std::vector<std::string> priority_strings;
|
779
|
-
for (size_t i = 0; i < priorities.size(); ++i) {
|
780
|
-
const Priority& priority = priorities[i];
|
781
|
-
priority_strings.emplace_back(
|
782
|
-
absl::StrCat("priority ", i, ": ", priority.ToString()));
|
783
|
-
}
|
784
|
-
return absl::StrCat("priorities=[", absl::StrJoin(priority_strings, ", "),
|
785
|
-
"], drop_config=", drop_config->ToString());
|
786
|
-
}
|
787
|
-
|
788
|
-
//
|
789
|
-
// XdsApi
|
790
|
-
//
|
791
|
-
|
792
|
-
const char* XdsApi::kLdsTypeUrl =
|
793
|
-
"type.googleapis.com/envoy.config.listener.v3.Listener";
|
794
|
-
const char* XdsApi::kRdsTypeUrl =
|
795
|
-
"type.googleapis.com/envoy.config.route.v3.RouteConfiguration";
|
796
|
-
const char* XdsApi::kCdsTypeUrl =
|
797
|
-
"type.googleapis.com/envoy.config.cluster.v3.Cluster";
|
798
|
-
const char* XdsApi::kEdsTypeUrl =
|
799
|
-
"type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment";
|
800
|
-
|
801
|
-
namespace {
|
802
|
-
|
803
|
-
const char* kLdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
|
804
|
-
const char* kRdsV2TypeUrl =
|
805
|
-
"type.googleapis.com/envoy.api.v2.RouteConfiguration";
|
806
|
-
const char* kCdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
|
807
|
-
const char* kEdsV2TypeUrl =
|
808
|
-
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
809
|
-
|
810
|
-
bool IsLds(absl::string_view type_url, bool* is_v2 = nullptr) {
|
811
|
-
if (type_url == XdsApi::kLdsTypeUrl) return true;
|
812
|
-
if (type_url == kLdsV2TypeUrl) {
|
813
|
-
if (is_v2 != nullptr) *is_v2 = true;
|
814
|
-
return true;
|
815
|
-
}
|
816
|
-
return false;
|
817
|
-
}
|
818
|
-
|
819
|
-
bool IsRds(absl::string_view type_url) {
|
820
|
-
return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
|
821
|
-
}
|
822
|
-
|
823
|
-
bool IsCds(absl::string_view type_url) {
|
824
|
-
return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
|
825
|
-
}
|
826
|
-
|
827
|
-
bool IsEds(absl::string_view type_url) {
|
828
|
-
return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
|
829
|
-
}
|
830
|
-
|
831
|
-
} // namespace
|
65
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
|
66
|
+
// will be appended to the user agent name reported to the xDS server.
|
67
|
+
#ifdef GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
68
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING \
|
69
|
+
" " GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
70
|
+
#else
|
71
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING ""
|
72
|
+
#endif
|
73
|
+
|
74
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="...", that string
|
75
|
+
// will be appended to the user agent version reported to the xDS server.
|
76
|
+
#ifdef GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
77
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING \
|
78
|
+
" " GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
79
|
+
#else
|
80
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING ""
|
81
|
+
#endif
|
832
82
|
|
833
83
|
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
834
|
-
const XdsBootstrap::Node* node
|
84
|
+
const XdsBootstrap::Node* node,
|
85
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
86
|
+
certificate_provider_definition_map,
|
87
|
+
upb::SymbolTable* symtab)
|
835
88
|
: client_(client),
|
836
89
|
tracer_(tracer),
|
837
90
|
node_(node),
|
91
|
+
certificate_provider_definition_map_(certificate_provider_definition_map),
|
92
|
+
symtab_(symtab),
|
838
93
|
build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
|
839
|
-
grpc_version_string()
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab_.ptr());
|
849
|
-
envoy_config_cluster_v3_Cluster_getmsgdef(symtab_.ptr());
|
850
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab_.ptr());
|
851
|
-
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
|
852
|
-
symtab_.ptr());
|
853
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
854
|
-
symtab_.ptr());
|
855
|
-
// Load HTTP filter proto messages into the upb symtab.
|
856
|
-
XdsHttpFilterRegistry::PopulateSymtab(symtab_.ptr());
|
857
|
-
}
|
94
|
+
grpc_version_string(),
|
95
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
96
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)),
|
97
|
+
user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING,
|
98
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING)),
|
99
|
+
user_agent_version_(
|
100
|
+
absl::StrCat("C-core ", grpc_version_string(),
|
101
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
102
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)) {}
|
858
103
|
|
859
104
|
namespace {
|
860
105
|
|
861
|
-
|
862
|
-
XdsClient* client;
|
863
|
-
TraceFlag* tracer;
|
864
|
-
upb_symtab* symtab;
|
865
|
-
upb_arena* arena;
|
866
|
-
bool use_v3;
|
867
|
-
};
|
868
|
-
|
869
|
-
// Works for both std::string and absl::string_view.
|
870
|
-
template <typename T>
|
871
|
-
inline upb_strview StdStringToUpbString(const T& str) {
|
872
|
-
return upb_strview_make(str.data(), str.size());
|
873
|
-
}
|
874
|
-
|
875
|
-
void PopulateMetadataValue(const EncodingContext& context,
|
106
|
+
void PopulateMetadataValue(const XdsEncodingContext& context,
|
876
107
|
google_protobuf_Value* value_pb, const Json& value);
|
877
108
|
|
878
|
-
void PopulateListValue(const
|
109
|
+
void PopulateListValue(const XdsEncodingContext& context,
|
879
110
|
google_protobuf_ListValue* list_value,
|
880
111
|
const Json::Array& values) {
|
881
112
|
for (const auto& value : values) {
|
@@ -885,7 +116,7 @@ void PopulateListValue(const EncodingContext& context,
|
|
885
116
|
}
|
886
117
|
}
|
887
118
|
|
888
|
-
void PopulateMetadata(const
|
119
|
+
void PopulateMetadata(const XdsEncodingContext& context,
|
889
120
|
google_protobuf_Struct* metadata_pb,
|
890
121
|
const Json::Object& metadata) {
|
891
122
|
for (const auto& p : metadata) {
|
@@ -896,7 +127,7 @@ void PopulateMetadata(const EncodingContext& context,
|
|
896
127
|
}
|
897
128
|
}
|
898
129
|
|
899
|
-
void PopulateMetadataValue(const
|
130
|
+
void PopulateMetadataValue(const XdsEncodingContext& context,
|
900
131
|
google_protobuf_Value* value_pb, const Json& value) {
|
901
132
|
switch (value.type()) {
|
902
133
|
case Json::Type::JSON_NULL:
|
@@ -952,22 +183,23 @@ std::string EncodeStringField(uint32_t field_number, const std::string& str) {
|
|
952
183
|
EncodeVarint(str.size()) + str;
|
953
184
|
}
|
954
185
|
|
955
|
-
void PopulateBuildVersion(const
|
186
|
+
void PopulateBuildVersion(const XdsEncodingContext& context,
|
956
187
|
envoy_config_core_v3_Node* node_msg,
|
957
188
|
const std::string& build_version) {
|
958
189
|
std::string encoded_build_version = EncodeStringField(5, build_version);
|
959
|
-
// TODO(roth): This should use
|
190
|
+
// TODO(roth): This should use upb_Message_AddUnknown(), but that API is
|
960
191
|
// broken in the current version of upb, so we're using the internal
|
961
192
|
// API for now. Change this once we upgrade to a version of upb that
|
962
193
|
// fixes this bug.
|
963
|
-
|
964
|
-
|
194
|
+
_upb_Message_AddUnknown(node_msg, encoded_build_version.data(),
|
195
|
+
encoded_build_version.size(), context.arena);
|
965
196
|
}
|
966
197
|
|
967
|
-
void PopulateNode(const
|
198
|
+
void PopulateNode(const XdsEncodingContext& context,
|
968
199
|
const XdsBootstrap::Node* node,
|
969
200
|
const std::string& build_version,
|
970
201
|
const std::string& user_agent_name,
|
202
|
+
const std::string& user_agent_version,
|
971
203
|
envoy_config_core_v3_Node* node_msg) {
|
972
204
|
if (node != nullptr) {
|
973
205
|
if (!node->id.empty()) {
|
@@ -1007,36 +239,29 @@ void PopulateNode(const EncodingContext& context,
|
|
1007
239
|
envoy_config_core_v3_Node_set_user_agent_name(
|
1008
240
|
node_msg, StdStringToUpbString(user_agent_name));
|
1009
241
|
envoy_config_core_v3_Node_set_user_agent_version(
|
1010
|
-
node_msg,
|
242
|
+
node_msg, StdStringToUpbString(user_agent_version));
|
1011
243
|
envoy_config_core_v3_Node_add_client_features(
|
1012
|
-
node_msg,
|
244
|
+
node_msg,
|
245
|
+
upb_StringView_FromString("envoy.lb.does_not_support_overprovisioning"),
|
1013
246
|
context.arena);
|
1014
247
|
}
|
1015
248
|
|
1016
|
-
inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
|
1017
|
-
return absl::string_view(str.data, str.size);
|
1018
|
-
}
|
1019
|
-
|
1020
|
-
inline std::string UpbStringToStdString(const upb_strview& str) {
|
1021
|
-
return std::string(str.data, str.size);
|
1022
|
-
}
|
1023
|
-
|
1024
249
|
void MaybeLogDiscoveryRequest(
|
1025
|
-
const
|
250
|
+
const XdsEncodingContext& context,
|
1026
251
|
const envoy_service_discovery_v3_DiscoveryRequest* request) {
|
1027
252
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1028
253
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1029
|
-
const
|
254
|
+
const upb_MessageDef* msg_type =
|
1030
255
|
envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(context.symtab);
|
1031
256
|
char buf[10240];
|
1032
|
-
|
257
|
+
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf));
|
1033
258
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s",
|
1034
259
|
context.client, buf);
|
1035
260
|
}
|
1036
261
|
}
|
1037
262
|
|
1038
263
|
grpc_slice SerializeDiscoveryRequest(
|
1039
|
-
const
|
264
|
+
const XdsEncodingContext& context,
|
1040
265
|
envoy_service_discovery_v3_DiscoveryRequest* request) {
|
1041
266
|
size_t output_length;
|
1042
267
|
char* output = envoy_service_discovery_v3_DiscoveryRequest_serialize(
|
@@ -1044,43 +269,28 @@ grpc_slice SerializeDiscoveryRequest(
|
|
1044
269
|
return grpc_slice_from_copied_buffer(output, output_length);
|
1045
270
|
}
|
1046
271
|
|
1047
|
-
absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
1048
|
-
const std::string& type_url) {
|
1049
|
-
if (!use_v3) {
|
1050
|
-
if (type_url == XdsApi::kLdsTypeUrl) {
|
1051
|
-
return kLdsV2TypeUrl;
|
1052
|
-
}
|
1053
|
-
if (type_url == XdsApi::kRdsTypeUrl) {
|
1054
|
-
return kRdsV2TypeUrl;
|
1055
|
-
}
|
1056
|
-
if (type_url == XdsApi::kCdsTypeUrl) {
|
1057
|
-
return kCdsV2TypeUrl;
|
1058
|
-
}
|
1059
|
-
if (type_url == XdsApi::kEdsTypeUrl) {
|
1060
|
-
return kEdsV2TypeUrl;
|
1061
|
-
}
|
1062
|
-
}
|
1063
|
-
return type_url;
|
1064
|
-
}
|
1065
|
-
|
1066
272
|
} // namespace
|
1067
273
|
|
1068
274
|
grpc_slice XdsApi::CreateAdsRequest(
|
1069
|
-
const XdsBootstrap::XdsServer& server,
|
1070
|
-
|
1071
|
-
const std::
|
275
|
+
const XdsBootstrap::XdsServer& server, absl::string_view type_url,
|
276
|
+
absl::string_view version, absl::string_view nonce,
|
277
|
+
const std::vector<std::string>& resource_names, grpc_error_handle error,
|
1072
278
|
bool populate_node) {
|
1073
279
|
upb::Arena arena;
|
1074
|
-
const
|
1075
|
-
|
280
|
+
const XdsEncodingContext context = {client_,
|
281
|
+
server,
|
282
|
+
tracer_,
|
283
|
+
symtab_->ptr(),
|
284
|
+
arena.ptr(),
|
285
|
+
server.ShouldUseV3(),
|
286
|
+
certificate_provider_definition_map_};
|
1076
287
|
// Create a request.
|
1077
288
|
envoy_service_discovery_v3_DiscoveryRequest* request =
|
1078
289
|
envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr());
|
1079
290
|
// Set type_url.
|
1080
|
-
|
1081
|
-
TypeUrlExternalToInternal(server.ShouldUseV3(), type_url);
|
291
|
+
std::string type_url_str = absl::StrCat("type.googleapis.com/", type_url);
|
1082
292
|
envoy_service_discovery_v3_DiscoveryRequest_set_type_url(
|
1083
|
-
request, StdStringToUpbString(
|
293
|
+
request, StdStringToUpbString(type_url_str));
|
1084
294
|
// Set version_info.
|
1085
295
|
if (!version.empty()) {
|
1086
296
|
envoy_service_discovery_v3_DiscoveryRequest_set_version_info(
|
@@ -1092,6 +302,7 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1092
302
|
request, StdStringToUpbString(nonce));
|
1093
303
|
}
|
1094
304
|
// Set error_detail if it's a NACK.
|
305
|
+
std::string error_string_storage;
|
1095
306
|
if (error != GRPC_ERROR_NONE) {
|
1096
307
|
google_rpc_Status* error_detail =
|
1097
308
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_error_detail(
|
@@ -1102,8 +313,9 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1102
313
|
// generate them in the parsing code, and then use that here.
|
1103
314
|
google_rpc_Status_set_code(error_detail, GRPC_STATUS_INVALID_ARGUMENT);
|
1104
315
|
// Error description comes from the error that was passed in.
|
1105
|
-
|
1106
|
-
|
316
|
+
error_string_storage = grpc_error_std_string(error);
|
317
|
+
upb_StringView error_description =
|
318
|
+
StdStringToUpbString(error_string_storage);
|
1107
319
|
google_rpc_Status_set_message(error_detail, error_description);
|
1108
320
|
GRPC_ERROR_UNREF(error);
|
1109
321
|
}
|
@@ -1112,10 +324,11 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1112
324
|
envoy_config_core_v3_Node* node_msg =
|
1113
325
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_node(request,
|
1114
326
|
arena.ptr());
|
1115
|
-
PopulateNode(context, node_, build_version_, user_agent_name_,
|
327
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
328
|
+
user_agent_version_, node_msg);
|
1116
329
|
}
|
1117
330
|
// Add resource_names.
|
1118
|
-
for (const
|
331
|
+
for (const std::string& resource_name : resource_names) {
|
1119
332
|
envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
|
1120
333
|
request, StdStringToUpbString(resource_name), arena.ptr());
|
1121
334
|
}
|
@@ -1126,2213 +339,89 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1126
339
|
namespace {
|
1127
340
|
|
1128
341
|
void MaybeLogDiscoveryResponse(
|
1129
|
-
const
|
342
|
+
const XdsEncodingContext& context,
|
1130
343
|
const envoy_service_discovery_v3_DiscoveryResponse* response) {
|
1131
344
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1132
345
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1133
|
-
const
|
346
|
+
const upb_MessageDef* msg_type =
|
1134
347
|
envoy_service_discovery_v3_DiscoveryResponse_getmsgdef(context.symtab);
|
1135
348
|
char buf[10240];
|
1136
|
-
|
349
|
+
upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf));
|
1137
350
|
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", context.client,
|
1138
351
|
buf);
|
1139
352
|
}
|
1140
353
|
}
|
1141
354
|
|
1142
|
-
|
1143
|
-
const EncodingContext& context,
|
1144
|
-
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
1145
|
-
http_connection_manager_config) {
|
1146
|
-
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1147
|
-
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1148
|
-
const upb_msgdef* msg_type =
|
1149
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
1150
|
-
context.symtab);
|
1151
|
-
char buf[10240];
|
1152
|
-
upb_text_encode(http_connection_manager_config, msg_type, nullptr, 0, buf,
|
1153
|
-
sizeof(buf));
|
1154
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] HttpConnectionManager: %s",
|
1155
|
-
context.client, buf);
|
1156
|
-
}
|
1157
|
-
}
|
1158
|
-
|
1159
|
-
void MaybeLogRouteConfiguration(
|
1160
|
-
const EncodingContext& context,
|
1161
|
-
const envoy_config_route_v3_RouteConfiguration* route_config) {
|
1162
|
-
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1163
|
-
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1164
|
-
const upb_msgdef* msg_type =
|
1165
|
-
envoy_config_route_v3_RouteConfiguration_getmsgdef(context.symtab);
|
1166
|
-
char buf[10240];
|
1167
|
-
upb_text_encode(route_config, msg_type, nullptr, 0, buf, sizeof(buf));
|
1168
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", context.client,
|
1169
|
-
buf);
|
1170
|
-
}
|
1171
|
-
}
|
355
|
+
} // namespace
|
1172
356
|
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1177
|
-
const upb_msgdef* msg_type =
|
1178
|
-
envoy_config_cluster_v3_Cluster_getmsgdef(context.symtab);
|
1179
|
-
char buf[10240];
|
1180
|
-
upb_text_encode(cluster, msg_type, nullptr, 0, buf, sizeof(buf));
|
1181
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", context.client, buf);
|
1182
|
-
}
|
1183
|
-
}
|
1184
|
-
|
1185
|
-
void MaybeLogClusterLoadAssignment(
|
1186
|
-
const EncodingContext& context,
|
1187
|
-
const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
|
1188
|
-
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1189
|
-
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1190
|
-
const upb_msgdef* msg_type =
|
1191
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
|
1192
|
-
context.symtab);
|
1193
|
-
char buf[10240];
|
1194
|
-
upb_text_encode(cla, msg_type, nullptr, 0, buf, sizeof(buf));
|
1195
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
|
1196
|
-
context.client, buf);
|
1197
|
-
}
|
1198
|
-
}
|
1199
|
-
|
1200
|
-
grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
1201
|
-
XdsApi::Route* route, bool* ignore_route) {
|
1202
|
-
auto* case_sensitive_ptr =
|
1203
|
-
envoy_config_route_v3_RouteMatch_case_sensitive(match);
|
1204
|
-
bool case_sensitive = true;
|
1205
|
-
if (case_sensitive_ptr != nullptr) {
|
1206
|
-
case_sensitive = google_protobuf_BoolValue_value(case_sensitive_ptr);
|
1207
|
-
}
|
1208
|
-
StringMatcher::Type type;
|
1209
|
-
std::string match_string;
|
1210
|
-
if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
|
1211
|
-
absl::string_view prefix =
|
1212
|
-
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
|
1213
|
-
// Empty prefix "" is accepted.
|
1214
|
-
if (!prefix.empty()) {
|
1215
|
-
// Prefix "/" is accepted.
|
1216
|
-
if (prefix[0] != '/') {
|
1217
|
-
// Prefix which does not start with a / will never match anything, so
|
1218
|
-
// ignore this route.
|
1219
|
-
*ignore_route = true;
|
1220
|
-
return GRPC_ERROR_NONE;
|
1221
|
-
}
|
1222
|
-
std::vector<absl::string_view> prefix_elements =
|
1223
|
-
absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
|
1224
|
-
if (prefix_elements.size() > 2) {
|
1225
|
-
// Prefix cannot have more than 2 slashes.
|
1226
|
-
*ignore_route = true;
|
1227
|
-
return GRPC_ERROR_NONE;
|
1228
|
-
} else if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
|
1229
|
-
// Prefix contains empty string between the 2 slashes
|
1230
|
-
*ignore_route = true;
|
1231
|
-
return GRPC_ERROR_NONE;
|
1232
|
-
}
|
1233
|
-
}
|
1234
|
-
type = StringMatcher::Type::PREFIX;
|
1235
|
-
match_string = std::string(prefix);
|
1236
|
-
} else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
|
1237
|
-
absl::string_view path =
|
1238
|
-
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
|
1239
|
-
if (path.empty()) {
|
1240
|
-
// Path that is empty will never match anything, so ignore this route.
|
1241
|
-
*ignore_route = true;
|
1242
|
-
return GRPC_ERROR_NONE;
|
1243
|
-
}
|
1244
|
-
if (path[0] != '/') {
|
1245
|
-
// Path which does not start with a / will never match anything, so
|
1246
|
-
// ignore this route.
|
1247
|
-
*ignore_route = true;
|
1248
|
-
return GRPC_ERROR_NONE;
|
1249
|
-
}
|
1250
|
-
std::vector<absl::string_view> path_elements =
|
1251
|
-
absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
|
1252
|
-
if (path_elements.size() != 2) {
|
1253
|
-
// Path not in the required format of /service/method will never match
|
1254
|
-
// anything, so ignore this route.
|
1255
|
-
*ignore_route = true;
|
1256
|
-
return GRPC_ERROR_NONE;
|
1257
|
-
} else if (path_elements[0].empty()) {
|
1258
|
-
// Path contains empty service name will never match anything, so ignore
|
1259
|
-
// this route.
|
1260
|
-
*ignore_route = true;
|
1261
|
-
return GRPC_ERROR_NONE;
|
1262
|
-
} else if (path_elements[1].empty()) {
|
1263
|
-
// Path contains empty method name will never match anything, so ignore
|
1264
|
-
// this route.
|
1265
|
-
*ignore_route = true;
|
1266
|
-
return GRPC_ERROR_NONE;
|
1267
|
-
}
|
1268
|
-
type = StringMatcher::Type::EXACT;
|
1269
|
-
match_string = std::string(path);
|
1270
|
-
} else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
|
1271
|
-
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1272
|
-
envoy_config_route_v3_RouteMatch_safe_regex(match);
|
1273
|
-
GPR_ASSERT(regex_matcher != nullptr);
|
1274
|
-
type = StringMatcher::Type::SAFE_REGEX;
|
1275
|
-
match_string = UpbStringToStdString(
|
1276
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1277
|
-
} else {
|
1278
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1279
|
-
"Invalid route path specifier specified.");
|
1280
|
-
}
|
1281
|
-
absl::StatusOr<StringMatcher> string_matcher =
|
1282
|
-
StringMatcher::Create(type, match_string, case_sensitive);
|
1283
|
-
if (!string_matcher.ok()) {
|
1284
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1285
|
-
absl::StrCat("path matcher: ", string_matcher.status().message())
|
1286
|
-
.c_str());
|
1287
|
-
;
|
1288
|
-
}
|
1289
|
-
route->matchers.path_matcher = std::move(string_matcher.value());
|
1290
|
-
return GRPC_ERROR_NONE;
|
1291
|
-
}
|
1292
|
-
|
1293
|
-
grpc_error* RouteHeaderMatchersParse(
|
1294
|
-
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
1295
|
-
size_t size;
|
1296
|
-
const envoy_config_route_v3_HeaderMatcher* const* headers =
|
1297
|
-
envoy_config_route_v3_RouteMatch_headers(match, &size);
|
1298
|
-
for (size_t i = 0; i < size; ++i) {
|
1299
|
-
const envoy_config_route_v3_HeaderMatcher* header = headers[i];
|
1300
|
-
const std::string name =
|
1301
|
-
UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
|
1302
|
-
HeaderMatcher::Type type;
|
1303
|
-
std::string match_string;
|
1304
|
-
int64_t range_start = 0;
|
1305
|
-
int64_t range_end = 0;
|
1306
|
-
bool present_match = false;
|
1307
|
-
if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
|
1308
|
-
type = HeaderMatcher::Type::EXACT;
|
1309
|
-
match_string = UpbStringToStdString(
|
1310
|
-
envoy_config_route_v3_HeaderMatcher_exact_match(header));
|
1311
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
|
1312
|
-
header)) {
|
1313
|
-
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1314
|
-
envoy_config_route_v3_HeaderMatcher_safe_regex_match(header);
|
1315
|
-
GPR_ASSERT(regex_matcher != nullptr);
|
1316
|
-
type = HeaderMatcher::Type::SAFE_REGEX;
|
1317
|
-
match_string = UpbStringToStdString(
|
1318
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1319
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
|
1320
|
-
type = HeaderMatcher::Type::RANGE;
|
1321
|
-
const envoy_type_v3_Int64Range* range_matcher =
|
1322
|
-
envoy_config_route_v3_HeaderMatcher_range_match(header);
|
1323
|
-
range_start = envoy_type_v3_Int64Range_start(range_matcher);
|
1324
|
-
range_end = envoy_type_v3_Int64Range_end(range_matcher);
|
1325
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
1326
|
-
type = HeaderMatcher::Type::PRESENT;
|
1327
|
-
present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
|
1328
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
1329
|
-
type = HeaderMatcher::Type::PREFIX;
|
1330
|
-
match_string = UpbStringToStdString(
|
1331
|
-
envoy_config_route_v3_HeaderMatcher_prefix_match(header));
|
1332
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
1333
|
-
type = HeaderMatcher::Type::SUFFIX;
|
1334
|
-
match_string = UpbStringToStdString(
|
1335
|
-
envoy_config_route_v3_HeaderMatcher_suffix_match(header));
|
1336
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
1337
|
-
type = HeaderMatcher::Type::CONTAINS;
|
1338
|
-
match_string = UpbStringToStdString(
|
1339
|
-
envoy_config_route_v3_HeaderMatcher_contains_match(header));
|
1340
|
-
} else {
|
1341
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1342
|
-
"Invalid route header matcher specified.");
|
1343
|
-
}
|
1344
|
-
bool invert_match =
|
1345
|
-
envoy_config_route_v3_HeaderMatcher_invert_match(header);
|
1346
|
-
absl::StatusOr<HeaderMatcher> header_matcher =
|
1347
|
-
HeaderMatcher::Create(name, type, match_string, range_start, range_end,
|
1348
|
-
present_match, invert_match);
|
1349
|
-
if (!header_matcher.ok()) {
|
1350
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1351
|
-
absl::StrCat("header matcher: ", header_matcher.status().message())
|
1352
|
-
.c_str());
|
1353
|
-
}
|
1354
|
-
route->matchers.header_matchers.emplace_back(
|
1355
|
-
std::move(header_matcher.value()));
|
1356
|
-
}
|
1357
|
-
return GRPC_ERROR_NONE;
|
1358
|
-
}
|
1359
|
-
|
1360
|
-
grpc_error* RouteRuntimeFractionParse(
|
1361
|
-
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
1362
|
-
const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
|
1363
|
-
envoy_config_route_v3_RouteMatch_runtime_fraction(match);
|
1364
|
-
if (runtime_fraction != nullptr) {
|
1365
|
-
const envoy_type_v3_FractionalPercent* fraction =
|
1366
|
-
envoy_config_core_v3_RuntimeFractionalPercent_default_value(
|
1367
|
-
runtime_fraction);
|
1368
|
-
if (fraction != nullptr) {
|
1369
|
-
uint32_t numerator = envoy_type_v3_FractionalPercent_numerator(fraction);
|
1370
|
-
const auto denominator =
|
1371
|
-
static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
|
1372
|
-
envoy_type_v3_FractionalPercent_denominator(fraction));
|
1373
|
-
// Normalize to million.
|
1374
|
-
switch (denominator) {
|
1375
|
-
case envoy_type_v3_FractionalPercent_HUNDRED:
|
1376
|
-
numerator *= 10000;
|
1377
|
-
break;
|
1378
|
-
case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
|
1379
|
-
numerator *= 100;
|
1380
|
-
break;
|
1381
|
-
case envoy_type_v3_FractionalPercent_MILLION:
|
1382
|
-
break;
|
1383
|
-
default:
|
1384
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1385
|
-
"Unknown denominator type");
|
1386
|
-
}
|
1387
|
-
route->matchers.fraction_per_million = numerator;
|
1388
|
-
}
|
1389
|
-
}
|
1390
|
-
return GRPC_ERROR_NONE;
|
1391
|
-
}
|
1392
|
-
|
1393
|
-
grpc_error* ExtractHttpFilterTypeName(const EncodingContext& context,
|
1394
|
-
const google_protobuf_Any* any,
|
1395
|
-
absl::string_view* filter_type) {
|
1396
|
-
*filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1397
|
-
if (*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
|
1398
|
-
upb_strview any_value = google_protobuf_Any_value(any);
|
1399
|
-
const auto* typed_struct = udpa_type_v1_TypedStruct_parse(
|
1400
|
-
any_value.data, any_value.size, context.arena);
|
1401
|
-
if (typed_struct == nullptr) {
|
1402
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1403
|
-
"could not parse TypedStruct from filter config");
|
1404
|
-
}
|
1405
|
-
*filter_type =
|
1406
|
-
UpbStringToAbsl(udpa_type_v1_TypedStruct_type_url(typed_struct));
|
1407
|
-
}
|
1408
|
-
*filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
|
1409
|
-
return GRPC_ERROR_NONE;
|
1410
|
-
}
|
1411
|
-
|
1412
|
-
template <typename ParentType, typename EntryType>
|
1413
|
-
grpc_error* ParseTypedPerFilterConfig(
|
1414
|
-
const EncodingContext& context, const ParentType* parent,
|
1415
|
-
const EntryType* (*entry_func)(const ParentType*, size_t*),
|
1416
|
-
upb_strview (*key_func)(const EntryType*),
|
1417
|
-
const google_protobuf_Any* (*value_func)(const EntryType*),
|
1418
|
-
XdsApi::TypedPerFilterConfig* typed_per_filter_config) {
|
1419
|
-
size_t filter_it = UPB_MAP_BEGIN;
|
1420
|
-
while (true) {
|
1421
|
-
const auto* filter_entry = entry_func(parent, &filter_it);
|
1422
|
-
if (filter_entry == nullptr) break;
|
1423
|
-
absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
|
1424
|
-
if (key.empty()) {
|
1425
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("empty filter name in map");
|
1426
|
-
}
|
1427
|
-
const google_protobuf_Any* any = value_func(filter_entry);
|
1428
|
-
GPR_ASSERT(any != nullptr);
|
1429
|
-
absl::string_view filter_type =
|
1430
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1431
|
-
if (filter_type.empty()) {
|
1432
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1433
|
-
absl::StrCat("no filter config specified for filter name ", key)
|
1434
|
-
.c_str());
|
1435
|
-
}
|
1436
|
-
bool is_optional = false;
|
1437
|
-
if (filter_type ==
|
1438
|
-
"type.googleapis.com/envoy.config.route.v3.FilterConfig") {
|
1439
|
-
upb_strview any_value = google_protobuf_Any_value(any);
|
1440
|
-
const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
|
1441
|
-
any_value.data, any_value.size, context.arena);
|
1442
|
-
if (filter_config == nullptr) {
|
1443
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1444
|
-
absl::StrCat("could not parse FilterConfig wrapper for ", key)
|
1445
|
-
.c_str());
|
1446
|
-
}
|
1447
|
-
is_optional =
|
1448
|
-
envoy_config_route_v3_FilterConfig_is_optional(filter_config);
|
1449
|
-
any = envoy_config_route_v3_FilterConfig_config(filter_config);
|
1450
|
-
if (any == nullptr) {
|
1451
|
-
if (is_optional) continue;
|
1452
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1453
|
-
absl::StrCat("no filter config specified for filter name ", key)
|
1454
|
-
.c_str());
|
1455
|
-
}
|
1456
|
-
}
|
1457
|
-
grpc_error* error = ExtractHttpFilterTypeName(context, any, &filter_type);
|
1458
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1459
|
-
const XdsHttpFilterImpl* filter_impl =
|
1460
|
-
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
1461
|
-
if (filter_impl == nullptr) {
|
1462
|
-
if (is_optional) continue;
|
1463
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1464
|
-
absl::StrCat("no filter registered for config type ", filter_type)
|
1465
|
-
.c_str());
|
1466
|
-
}
|
1467
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
1468
|
-
filter_impl->GenerateFilterConfigOverride(
|
1469
|
-
google_protobuf_Any_value(any), context.arena);
|
1470
|
-
if (!filter_config.ok()) {
|
1471
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1472
|
-
absl::StrCat("filter config for type ", filter_type,
|
1473
|
-
" failed to parse: ", filter_config.status().ToString())
|
1474
|
-
.c_str());
|
1475
|
-
}
|
1476
|
-
(*typed_per_filter_config)[std::string(key)] = std::move(*filter_config);
|
1477
|
-
}
|
1478
|
-
return GRPC_ERROR_NONE;
|
1479
|
-
}
|
1480
|
-
|
1481
|
-
grpc_error* RouteActionParse(const EncodingContext& context,
|
1482
|
-
const envoy_config_route_v3_Route* route_msg,
|
1483
|
-
XdsApi::Route* route, bool* ignore_route) {
|
1484
|
-
if (!envoy_config_route_v3_Route_has_route(route_msg)) {
|
1485
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1486
|
-
"No RouteAction found in route.");
|
1487
|
-
}
|
1488
|
-
const envoy_config_route_v3_RouteAction* route_action =
|
1489
|
-
envoy_config_route_v3_Route_route(route_msg);
|
1490
|
-
// Get the cluster or weighted_clusters in the RouteAction.
|
1491
|
-
if (envoy_config_route_v3_RouteAction_has_cluster(route_action)) {
|
1492
|
-
route->cluster_name = UpbStringToStdString(
|
1493
|
-
envoy_config_route_v3_RouteAction_cluster(route_action));
|
1494
|
-
if (route->cluster_name.empty()) {
|
1495
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1496
|
-
"RouteAction cluster contains empty cluster name.");
|
1497
|
-
}
|
1498
|
-
} else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
|
1499
|
-
route_action)) {
|
1500
|
-
const envoy_config_route_v3_WeightedCluster* weighted_cluster =
|
1501
|
-
envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
|
1502
|
-
uint32_t total_weight = 100;
|
1503
|
-
const google_protobuf_UInt32Value* weight =
|
1504
|
-
envoy_config_route_v3_WeightedCluster_total_weight(weighted_cluster);
|
1505
|
-
if (weight != nullptr) {
|
1506
|
-
total_weight = google_protobuf_UInt32Value_value(weight);
|
1507
|
-
}
|
1508
|
-
size_t clusters_size;
|
1509
|
-
const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
|
1510
|
-
envoy_config_route_v3_WeightedCluster_clusters(weighted_cluster,
|
1511
|
-
&clusters_size);
|
1512
|
-
uint32_t sum_of_weights = 0;
|
1513
|
-
for (size_t j = 0; j < clusters_size; ++j) {
|
1514
|
-
const envoy_config_route_v3_WeightedCluster_ClusterWeight*
|
1515
|
-
cluster_weight = clusters[j];
|
1516
|
-
XdsApi::Route::ClusterWeight cluster;
|
1517
|
-
cluster.name = UpbStringToStdString(
|
1518
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
1519
|
-
cluster_weight));
|
1520
|
-
if (cluster.name.empty()) {
|
1521
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1522
|
-
"RouteAction weighted_cluster cluster contains empty cluster "
|
1523
|
-
"name.");
|
1524
|
-
}
|
1525
|
-
const google_protobuf_UInt32Value* weight =
|
1526
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
|
1527
|
-
cluster_weight);
|
1528
|
-
if (weight == nullptr) {
|
1529
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1530
|
-
"RouteAction weighted_cluster cluster missing weight");
|
1531
|
-
}
|
1532
|
-
cluster.weight = google_protobuf_UInt32Value_value(weight);
|
1533
|
-
if (cluster.weight == 0) continue;
|
1534
|
-
sum_of_weights += cluster.weight;
|
1535
|
-
if (context.use_v3) {
|
1536
|
-
grpc_error* error = ParseTypedPerFilterConfig<
|
1537
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
1538
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
1539
|
-
context, cluster_weight,
|
1540
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
|
1541
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
|
1542
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
|
1543
|
-
&cluster.typed_per_filter_config);
|
1544
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1545
|
-
}
|
1546
|
-
route->weighted_clusters.emplace_back(std::move(cluster));
|
1547
|
-
}
|
1548
|
-
if (total_weight != sum_of_weights) {
|
1549
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1550
|
-
"RouteAction weighted_cluster has incorrect total weight");
|
1551
|
-
}
|
1552
|
-
if (route->weighted_clusters.empty()) {
|
1553
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1554
|
-
"RouteAction weighted_cluster has no valid clusters specified.");
|
1555
|
-
}
|
1556
|
-
} else {
|
1557
|
-
// No cluster or weighted_clusters found in RouteAction, ignore this route.
|
1558
|
-
*ignore_route = true;
|
1559
|
-
}
|
1560
|
-
if (!*ignore_route) {
|
1561
|
-
const envoy_config_route_v3_RouteAction_MaxStreamDuration*
|
1562
|
-
max_stream_duration =
|
1563
|
-
envoy_config_route_v3_RouteAction_max_stream_duration(route_action);
|
1564
|
-
if (max_stream_duration != nullptr) {
|
1565
|
-
const google_protobuf_Duration* duration =
|
1566
|
-
envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
|
1567
|
-
max_stream_duration);
|
1568
|
-
if (duration == nullptr) {
|
1569
|
-
duration =
|
1570
|
-
envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
|
1571
|
-
max_stream_duration);
|
1572
|
-
}
|
1573
|
-
if (duration != nullptr) {
|
1574
|
-
XdsApi::Duration duration_in_route;
|
1575
|
-
duration_in_route.seconds = google_protobuf_Duration_seconds(duration);
|
1576
|
-
duration_in_route.nanos = google_protobuf_Duration_nanos(duration);
|
1577
|
-
route->max_stream_duration = duration_in_route;
|
1578
|
-
}
|
1579
|
-
}
|
1580
|
-
}
|
1581
|
-
// Get HashPolicy from RouteAction
|
1582
|
-
if (XdsRingHashEnabled()) {
|
1583
|
-
size_t size = 0;
|
1584
|
-
const envoy_config_route_v3_RouteAction_HashPolicy* const* hash_policies =
|
1585
|
-
envoy_config_route_v3_RouteAction_hash_policy(route_action, &size);
|
1586
|
-
for (size_t i = 0; i < size; ++i) {
|
1587
|
-
const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
|
1588
|
-
hash_policies[i];
|
1589
|
-
XdsApi::Route::HashPolicy policy;
|
1590
|
-
policy.terminal =
|
1591
|
-
envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
|
1592
|
-
const envoy_config_route_v3_RouteAction_HashPolicy_Header* header;
|
1593
|
-
const envoy_config_route_v3_RouteAction_HashPolicy_FilterState*
|
1594
|
-
filter_state;
|
1595
|
-
if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
|
1596
|
-
hash_policy)) != nullptr) {
|
1597
|
-
policy.type = XdsApi::Route::HashPolicy::Type::HEADER;
|
1598
|
-
policy.header_name = UpbStringToStdString(
|
1599
|
-
envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
|
1600
|
-
header));
|
1601
|
-
const struct envoy_type_matcher_v3_RegexMatchAndSubstitute*
|
1602
|
-
regex_rewrite =
|
1603
|
-
envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
|
1604
|
-
header);
|
1605
|
-
if (regex_rewrite == nullptr) {
|
1606
|
-
gpr_log(
|
1607
|
-
GPR_DEBUG,
|
1608
|
-
"RouteAction HashPolicy contains policy specifier Header with "
|
1609
|
-
"RegexMatchAndSubstitution but Regex is missing");
|
1610
|
-
continue;
|
1611
|
-
}
|
1612
|
-
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1613
|
-
envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
|
1614
|
-
regex_rewrite);
|
1615
|
-
if (regex_matcher == nullptr) {
|
1616
|
-
gpr_log(
|
1617
|
-
GPR_DEBUG,
|
1618
|
-
"RouteAction HashPolicy contains policy specifier Header with "
|
1619
|
-
"RegexMatchAndSubstitution but RegexMatcher pattern is "
|
1620
|
-
"missing");
|
1621
|
-
continue;
|
1622
|
-
}
|
1623
|
-
RE2::Options options;
|
1624
|
-
policy.regex = absl::make_unique<RE2>(
|
1625
|
-
UpbStringToStdString(
|
1626
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
|
1627
|
-
options);
|
1628
|
-
if (!policy.regex->ok()) {
|
1629
|
-
gpr_log(
|
1630
|
-
GPR_DEBUG,
|
1631
|
-
"RouteAction HashPolicy contains policy specifier Header with "
|
1632
|
-
"RegexMatchAndSubstitution but RegexMatcher pattern does not "
|
1633
|
-
"compile");
|
1634
|
-
continue;
|
1635
|
-
}
|
1636
|
-
policy.regex_substitution = UpbStringToStdString(
|
1637
|
-
envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
|
1638
|
-
regex_rewrite));
|
1639
|
-
} else if ((filter_state =
|
1640
|
-
envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
|
1641
|
-
hash_policy)) != nullptr) {
|
1642
|
-
std::string key = UpbStringToStdString(
|
1643
|
-
envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
|
1644
|
-
filter_state));
|
1645
|
-
if (key == "io.grpc.channel_id") {
|
1646
|
-
policy.type = XdsApi::Route::HashPolicy::Type::CHANNEL_ID;
|
1647
|
-
} else {
|
1648
|
-
gpr_log(GPR_DEBUG,
|
1649
|
-
"RouteAction HashPolicy contains policy specifier "
|
1650
|
-
"FilterState but "
|
1651
|
-
"key is not io.grpc.channel_id.");
|
1652
|
-
continue;
|
1653
|
-
}
|
1654
|
-
} else {
|
1655
|
-
gpr_log(
|
1656
|
-
GPR_DEBUG,
|
1657
|
-
"RouteAction HashPolicy contains unsupported policy specifier.");
|
1658
|
-
continue;
|
1659
|
-
}
|
1660
|
-
route->hash_policies.emplace_back(std::move(policy));
|
1661
|
-
}
|
1662
|
-
}
|
1663
|
-
return GRPC_ERROR_NONE;
|
1664
|
-
}
|
1665
|
-
|
1666
|
-
grpc_error* RouteConfigParse(
|
1667
|
-
const EncodingContext& context,
|
1668
|
-
const envoy_config_route_v3_RouteConfiguration* route_config,
|
1669
|
-
XdsApi::RdsUpdate* rds_update) {
|
1670
|
-
MaybeLogRouteConfiguration(context, route_config);
|
1671
|
-
// Get the virtual hosts.
|
1672
|
-
size_t num_virtual_hosts;
|
1673
|
-
const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
|
1674
|
-
envoy_config_route_v3_RouteConfiguration_virtual_hosts(
|
1675
|
-
route_config, &num_virtual_hosts);
|
1676
|
-
for (size_t i = 0; i < num_virtual_hosts; ++i) {
|
1677
|
-
rds_update->virtual_hosts.emplace_back();
|
1678
|
-
XdsApi::RdsUpdate::VirtualHost& vhost = rds_update->virtual_hosts.back();
|
1679
|
-
// Parse domains.
|
1680
|
-
size_t domain_size;
|
1681
|
-
upb_strview const* domains = envoy_config_route_v3_VirtualHost_domains(
|
1682
|
-
virtual_hosts[i], &domain_size);
|
1683
|
-
for (size_t j = 0; j < domain_size; ++j) {
|
1684
|
-
std::string domain_pattern = UpbStringToStdString(domains[j]);
|
1685
|
-
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
1686
|
-
if (match_type == INVALID_MATCH) {
|
1687
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1688
|
-
absl::StrCat("Invalid domain pattern \"", domain_pattern, "\".")
|
1689
|
-
.c_str());
|
1690
|
-
}
|
1691
|
-
vhost.domains.emplace_back(std::move(domain_pattern));
|
1692
|
-
}
|
1693
|
-
if (vhost.domains.empty()) {
|
1694
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
|
1695
|
-
}
|
1696
|
-
// Parse typed_per_filter_config.
|
1697
|
-
if (context.use_v3) {
|
1698
|
-
grpc_error* error = ParseTypedPerFilterConfig<
|
1699
|
-
envoy_config_route_v3_VirtualHost,
|
1700
|
-
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
|
1701
|
-
context, virtual_hosts[i],
|
1702
|
-
envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
|
1703
|
-
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
|
1704
|
-
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
|
1705
|
-
&vhost.typed_per_filter_config);
|
1706
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1707
|
-
}
|
1708
|
-
// Parse routes.
|
1709
|
-
size_t num_routes;
|
1710
|
-
const envoy_config_route_v3_Route* const* routes =
|
1711
|
-
envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
|
1712
|
-
if (num_routes < 1) {
|
1713
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1714
|
-
"No route found in the virtual host.");
|
1715
|
-
}
|
1716
|
-
// Loop over the whole list of routes
|
1717
|
-
for (size_t j = 0; j < num_routes; ++j) {
|
1718
|
-
const envoy_config_route_v3_RouteMatch* match =
|
1719
|
-
envoy_config_route_v3_Route_match(routes[j]);
|
1720
|
-
if (match == nullptr) {
|
1721
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Match can't be null.");
|
1722
|
-
}
|
1723
|
-
size_t query_parameters_size;
|
1724
|
-
static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
|
1725
|
-
match, &query_parameters_size));
|
1726
|
-
if (query_parameters_size > 0) {
|
1727
|
-
continue;
|
1728
|
-
}
|
1729
|
-
XdsApi::Route route;
|
1730
|
-
bool ignore_route = false;
|
1731
|
-
grpc_error* error = RoutePathMatchParse(match, &route, &ignore_route);
|
1732
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1733
|
-
if (ignore_route) continue;
|
1734
|
-
error = RouteHeaderMatchersParse(match, &route);
|
1735
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1736
|
-
error = RouteRuntimeFractionParse(match, &route);
|
1737
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1738
|
-
error = RouteActionParse(context, routes[j], &route, &ignore_route);
|
1739
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1740
|
-
if (ignore_route) continue;
|
1741
|
-
if (context.use_v3) {
|
1742
|
-
grpc_error* error = ParseTypedPerFilterConfig<
|
1743
|
-
envoy_config_route_v3_Route,
|
1744
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
1745
|
-
context, routes[j],
|
1746
|
-
envoy_config_route_v3_Route_typed_per_filter_config_next,
|
1747
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
|
1748
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value,
|
1749
|
-
&route.typed_per_filter_config);
|
1750
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1751
|
-
}
|
1752
|
-
vhost.routes.emplace_back(std::move(route));
|
1753
|
-
}
|
1754
|
-
if (vhost.routes.empty()) {
|
1755
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
|
1756
|
-
}
|
1757
|
-
}
|
1758
|
-
return GRPC_ERROR_NONE;
|
1759
|
-
}
|
1760
|
-
|
1761
|
-
XdsApi::CommonTlsContext::CertificateProviderInstance
|
1762
|
-
CertificateProviderInstanceParse(
|
1763
|
-
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance*
|
1764
|
-
certificate_provider_instance_proto) {
|
1765
|
-
return {
|
1766
|
-
UpbStringToStdString(
|
1767
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_instance_name(
|
1768
|
-
certificate_provider_instance_proto)),
|
1769
|
-
UpbStringToStdString(
|
1770
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_certificate_name(
|
1771
|
-
certificate_provider_instance_proto))};
|
1772
|
-
}
|
1773
|
-
|
1774
|
-
grpc_error* CommonTlsContextParse(
|
1775
|
-
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
|
1776
|
-
common_tls_context_proto,
|
1777
|
-
XdsApi::CommonTlsContext* common_tls_context) GRPC_MUST_USE_RESULT;
|
1778
|
-
grpc_error* CommonTlsContextParse(
|
1779
|
-
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
|
1780
|
-
common_tls_context_proto,
|
1781
|
-
XdsApi::CommonTlsContext* common_tls_context) {
|
1782
|
-
auto* combined_validation_context =
|
1783
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_combined_validation_context(
|
1784
|
-
common_tls_context_proto);
|
1785
|
-
if (combined_validation_context != nullptr) {
|
1786
|
-
auto* default_validation_context =
|
1787
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_default_validation_context(
|
1788
|
-
combined_validation_context);
|
1789
|
-
if (default_validation_context != nullptr) {
|
1790
|
-
size_t len = 0;
|
1791
|
-
auto* subject_alt_names_matchers =
|
1792
|
-
envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_match_subject_alt_names(
|
1793
|
-
default_validation_context, &len);
|
1794
|
-
for (size_t i = 0; i < len; ++i) {
|
1795
|
-
StringMatcher::Type type;
|
1796
|
-
std::string matcher;
|
1797
|
-
if (envoy_type_matcher_v3_StringMatcher_has_exact(
|
1798
|
-
subject_alt_names_matchers[i])) {
|
1799
|
-
type = StringMatcher::Type::EXACT;
|
1800
|
-
matcher =
|
1801
|
-
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_exact(
|
1802
|
-
subject_alt_names_matchers[i]));
|
1803
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(
|
1804
|
-
subject_alt_names_matchers[i])) {
|
1805
|
-
type = StringMatcher::Type::PREFIX;
|
1806
|
-
matcher =
|
1807
|
-
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_prefix(
|
1808
|
-
subject_alt_names_matchers[i]));
|
1809
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(
|
1810
|
-
subject_alt_names_matchers[i])) {
|
1811
|
-
type = StringMatcher::Type::SUFFIX;
|
1812
|
-
matcher =
|
1813
|
-
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_suffix(
|
1814
|
-
subject_alt_names_matchers[i]));
|
1815
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(
|
1816
|
-
subject_alt_names_matchers[i])) {
|
1817
|
-
type = StringMatcher::Type::CONTAINS;
|
1818
|
-
matcher =
|
1819
|
-
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_contains(
|
1820
|
-
subject_alt_names_matchers[i]));
|
1821
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(
|
1822
|
-
subject_alt_names_matchers[i])) {
|
1823
|
-
type = StringMatcher::Type::SAFE_REGEX;
|
1824
|
-
auto* regex_matcher = envoy_type_matcher_v3_StringMatcher_safe_regex(
|
1825
|
-
subject_alt_names_matchers[i]);
|
1826
|
-
matcher = UpbStringToStdString(
|
1827
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1828
|
-
} else {
|
1829
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1830
|
-
"Invalid StringMatcher specified");
|
1831
|
-
}
|
1832
|
-
bool ignore_case = envoy_type_matcher_v3_StringMatcher_ignore_case(
|
1833
|
-
subject_alt_names_matchers[i]);
|
1834
|
-
absl::StatusOr<StringMatcher> string_matcher =
|
1835
|
-
StringMatcher::Create(type, matcher,
|
1836
|
-
/*case_sensitive=*/!ignore_case);
|
1837
|
-
if (!string_matcher.ok()) {
|
1838
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1839
|
-
absl::StrCat("string matcher: ",
|
1840
|
-
string_matcher.status().message())
|
1841
|
-
.c_str());
|
1842
|
-
}
|
1843
|
-
if (type == StringMatcher::Type::SAFE_REGEX && ignore_case) {
|
1844
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1845
|
-
"StringMatcher: ignore_case has no effect for SAFE_REGEX.");
|
1846
|
-
}
|
1847
|
-
common_tls_context->combined_validation_context
|
1848
|
-
.default_validation_context.match_subject_alt_names.push_back(
|
1849
|
-
std::move(string_matcher.value()));
|
1850
|
-
}
|
1851
|
-
}
|
1852
|
-
auto* validation_context_certificate_provider_instance =
|
1853
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_validation_context_certificate_provider_instance(
|
1854
|
-
combined_validation_context);
|
1855
|
-
if (validation_context_certificate_provider_instance != nullptr) {
|
1856
|
-
common_tls_context->combined_validation_context
|
1857
|
-
.validation_context_certificate_provider_instance =
|
1858
|
-
CertificateProviderInstanceParse(
|
1859
|
-
validation_context_certificate_provider_instance);
|
1860
|
-
}
|
1861
|
-
}
|
1862
|
-
auto* tls_certificate_certificate_provider_instance =
|
1863
|
-
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_certificate_provider_instance(
|
1864
|
-
common_tls_context_proto);
|
1865
|
-
if (tls_certificate_certificate_provider_instance != nullptr) {
|
1866
|
-
common_tls_context->tls_certificate_certificate_provider_instance =
|
1867
|
-
CertificateProviderInstanceParse(
|
1868
|
-
tls_certificate_certificate_provider_instance);
|
1869
|
-
}
|
1870
|
-
return GRPC_ERROR_NONE;
|
1871
|
-
}
|
1872
|
-
|
1873
|
-
grpc_error* HttpConnectionManagerParse(
|
1874
|
-
bool is_client, const EncodingContext& context,
|
1875
|
-
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
1876
|
-
http_connection_manager_proto,
|
1877
|
-
bool is_v2,
|
1878
|
-
XdsApi::LdsUpdate::HttpConnectionManager* http_connection_manager) {
|
1879
|
-
MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
|
1880
|
-
// Obtain max_stream_duration from Http Protocol Options.
|
1881
|
-
const envoy_config_core_v3_HttpProtocolOptions* options =
|
1882
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_common_http_protocol_options(
|
1883
|
-
http_connection_manager_proto);
|
1884
|
-
if (options != nullptr) {
|
1885
|
-
const google_protobuf_Duration* duration =
|
1886
|
-
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
1887
|
-
if (duration != nullptr) {
|
1888
|
-
http_connection_manager->http_max_stream_duration.seconds =
|
1889
|
-
google_protobuf_Duration_seconds(duration);
|
1890
|
-
http_connection_manager->http_max_stream_duration.nanos =
|
1891
|
-
google_protobuf_Duration_nanos(duration);
|
1892
|
-
}
|
1893
|
-
}
|
1894
|
-
// Parse filters.
|
1895
|
-
if (!is_v2) {
|
1896
|
-
size_t num_filters = 0;
|
1897
|
-
const auto* http_filters =
|
1898
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_http_filters(
|
1899
|
-
http_connection_manager_proto, &num_filters);
|
1900
|
-
std::set<absl::string_view> names_seen;
|
1901
|
-
for (size_t i = 0; i < num_filters; ++i) {
|
1902
|
-
const auto* http_filter = http_filters[i];
|
1903
|
-
absl::string_view name = UpbStringToAbsl(
|
1904
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
|
1905
|
-
http_filter));
|
1906
|
-
if (name.empty()) {
|
1907
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1908
|
-
absl::StrCat("empty filter name at index ", i).c_str());
|
1909
|
-
}
|
1910
|
-
if (names_seen.find(name) != names_seen.end()) {
|
1911
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1912
|
-
absl::StrCat("duplicate HTTP filter name: ", name).c_str());
|
1913
|
-
}
|
1914
|
-
names_seen.insert(name);
|
1915
|
-
const bool is_optional =
|
1916
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_is_optional(
|
1917
|
-
http_filter);
|
1918
|
-
const google_protobuf_Any* any =
|
1919
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
|
1920
|
-
http_filter);
|
1921
|
-
if (any == nullptr) {
|
1922
|
-
if (is_optional) continue;
|
1923
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1924
|
-
absl::StrCat("no filter config specified for filter name ", name)
|
1925
|
-
.c_str());
|
1926
|
-
}
|
1927
|
-
absl::string_view filter_type;
|
1928
|
-
grpc_error* error = ExtractHttpFilterTypeName(context, any, &filter_type);
|
1929
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1930
|
-
const XdsHttpFilterImpl* filter_impl =
|
1931
|
-
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
1932
|
-
if (filter_impl == nullptr) {
|
1933
|
-
if (is_optional) continue;
|
1934
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1935
|
-
absl::StrCat("no filter registered for config type ", filter_type)
|
1936
|
-
.c_str());
|
1937
|
-
}
|
1938
|
-
if ((is_client && !filter_impl->IsSupportedOnClients()) ||
|
1939
|
-
(!is_client && !filter_impl->IsSupportedOnServers())) {
|
1940
|
-
if (is_optional) continue;
|
1941
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1942
|
-
absl::StrFormat("Filter %s is not supported on %s", filter_type,
|
1943
|
-
is_client ? "clients" : "servers")
|
1944
|
-
.c_str());
|
1945
|
-
}
|
1946
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
1947
|
-
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
1948
|
-
context.arena);
|
1949
|
-
if (!filter_config.ok()) {
|
1950
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1951
|
-
absl::StrCat(
|
1952
|
-
"filter config for type ", filter_type,
|
1953
|
-
" failed to parse: ", filter_config.status().ToString())
|
1954
|
-
.c_str());
|
1955
|
-
}
|
1956
|
-
http_connection_manager->http_filters.emplace_back(
|
1957
|
-
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
1958
|
-
std::string(name), std::move(*filter_config)});
|
1959
|
-
}
|
1960
|
-
} else {
|
1961
|
-
// If using a v2 config, we just hard-code a list containing only the
|
1962
|
-
// router filter without actually looking at the config. This ensures
|
1963
|
-
// that the right thing happens in the xds resolver without having
|
1964
|
-
// to expose whether the resource we received was v2 or v3.
|
1965
|
-
http_connection_manager->http_filters.emplace_back(
|
1966
|
-
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
1967
|
-
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
1968
|
-
}
|
1969
|
-
if (is_client) {
|
1970
|
-
// Found inlined route_config. Parse it to find the cluster_name.
|
1971
|
-
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
1972
|
-
http_connection_manager_proto)) {
|
1973
|
-
const envoy_config_route_v3_RouteConfiguration* route_config =
|
1974
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
1975
|
-
http_connection_manager_proto);
|
1976
|
-
XdsApi::RdsUpdate rds_update;
|
1977
|
-
grpc_error* error = RouteConfigParse(context, route_config, &rds_update);
|
1978
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1979
|
-
http_connection_manager->rds_update = std::move(rds_update);
|
1980
|
-
return GRPC_ERROR_NONE;
|
1981
|
-
}
|
1982
|
-
// Validate that RDS must be used to get the route_config dynamically.
|
1983
|
-
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
1984
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
1985
|
-
http_connection_manager_proto);
|
1986
|
-
if (rds == nullptr) {
|
1987
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1988
|
-
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
1989
|
-
}
|
1990
|
-
// Check that the ConfigSource specifies ADS.
|
1991
|
-
const envoy_config_core_v3_ConfigSource* config_source =
|
1992
|
-
envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
|
1993
|
-
rds);
|
1994
|
-
if (config_source == nullptr) {
|
1995
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1996
|
-
"HttpConnectionManager missing config_source for RDS.");
|
1997
|
-
}
|
1998
|
-
if (!envoy_config_core_v3_ConfigSource_has_ads(config_source)) {
|
1999
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2000
|
-
"HttpConnectionManager ConfigSource for RDS does not specify ADS.");
|
2001
|
-
}
|
2002
|
-
// Get the route_config_name.
|
2003
|
-
http_connection_manager->route_config_name = UpbStringToStdString(
|
2004
|
-
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
2005
|
-
rds));
|
2006
|
-
}
|
2007
|
-
return GRPC_ERROR_NONE;
|
2008
|
-
}
|
2009
|
-
|
2010
|
-
grpc_error* LdsResponseParseClient(
|
2011
|
-
const EncodingContext& context,
|
2012
|
-
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
|
2013
|
-
XdsApi::LdsUpdate* lds_update) {
|
2014
|
-
lds_update->type = XdsApi::LdsUpdate::ListenerType::kHttpApiListener;
|
2015
|
-
const upb_strview encoded_api_listener = google_protobuf_Any_value(
|
2016
|
-
envoy_config_listener_v3_ApiListener_api_listener(api_listener));
|
2017
|
-
const auto* http_connection_manager =
|
2018
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
2019
|
-
encoded_api_listener.data, encoded_api_listener.size, context.arena);
|
2020
|
-
if (http_connection_manager == nullptr) {
|
2021
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2022
|
-
"Could not parse HttpConnectionManager config from ApiListener");
|
2023
|
-
}
|
2024
|
-
return HttpConnectionManagerParse(true /* is_client */, context,
|
2025
|
-
http_connection_manager, is_v2,
|
2026
|
-
&lds_update->http_connection_manager);
|
2027
|
-
}
|
2028
|
-
|
2029
|
-
grpc_error* DownstreamTlsContextParse(
|
2030
|
-
const EncodingContext& context,
|
2031
|
-
const envoy_config_core_v3_TransportSocket* transport_socket,
|
2032
|
-
XdsApi::DownstreamTlsContext* downstream_tls_context) {
|
2033
|
-
absl::string_view name = UpbStringToAbsl(
|
2034
|
-
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
2035
|
-
if (name == "envoy.transport_sockets.tls") {
|
2036
|
-
auto* typed_config =
|
2037
|
-
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
2038
|
-
if (typed_config != nullptr) {
|
2039
|
-
const upb_strview encoded_downstream_tls_context =
|
2040
|
-
google_protobuf_Any_value(typed_config);
|
2041
|
-
auto* downstream_tls_context_proto =
|
2042
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
2043
|
-
encoded_downstream_tls_context.data,
|
2044
|
-
encoded_downstream_tls_context.size, context.arena);
|
2045
|
-
if (downstream_tls_context_proto == nullptr) {
|
2046
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2047
|
-
"Can't decode downstream tls context.");
|
2048
|
-
}
|
2049
|
-
auto* common_tls_context =
|
2050
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
2051
|
-
downstream_tls_context_proto);
|
2052
|
-
if (common_tls_context != nullptr) {
|
2053
|
-
grpc_error* error = CommonTlsContextParse(
|
2054
|
-
common_tls_context, &downstream_tls_context->common_tls_context);
|
2055
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2056
|
-
}
|
2057
|
-
auto* require_client_certificate =
|
2058
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
2059
|
-
downstream_tls_context_proto);
|
2060
|
-
if (require_client_certificate != nullptr) {
|
2061
|
-
downstream_tls_context->require_client_certificate =
|
2062
|
-
google_protobuf_BoolValue_value(require_client_certificate);
|
2063
|
-
}
|
2064
|
-
}
|
2065
|
-
if (downstream_tls_context->common_tls_context
|
2066
|
-
.tls_certificate_certificate_provider_instance.instance_name
|
2067
|
-
.empty()) {
|
2068
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2069
|
-
"TLS configuration provided but no "
|
2070
|
-
"tls_certificate_certificate_provider_instance found.");
|
2071
|
-
}
|
2072
|
-
}
|
2073
|
-
return GRPC_ERROR_NONE;
|
2074
|
-
}
|
2075
|
-
|
2076
|
-
grpc_error* CidrRangeParse(
|
2077
|
-
const envoy_config_core_v3_CidrRange* cidr_range_proto,
|
2078
|
-
XdsApi::LdsUpdate::FilterChainMap::CidrRange* cidr_range) {
|
2079
|
-
std::string address_prefix = UpbStringToStdString(
|
2080
|
-
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
2081
|
-
grpc_error* error = grpc_string_to_sockaddr_new(&cidr_range->address,
|
2082
|
-
address_prefix.c_str(), 0);
|
2083
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2084
|
-
cidr_range->prefix_len = 0;
|
2085
|
-
auto* prefix_len_proto =
|
2086
|
-
envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
|
2087
|
-
if (prefix_len_proto != nullptr) {
|
2088
|
-
cidr_range->prefix_len = std::min(
|
2089
|
-
google_protobuf_UInt32Value_value(prefix_len_proto),
|
2090
|
-
(reinterpret_cast<const grpc_sockaddr*>(cidr_range->address.addr))
|
2091
|
-
->sa_family == GRPC_AF_INET
|
2092
|
-
? uint32_t(32)
|
2093
|
-
: uint32_t(128));
|
2094
|
-
}
|
2095
|
-
// Normalize the network address by masking it with prefix_len
|
2096
|
-
grpc_sockaddr_mask_bits(&cidr_range->address, cidr_range->prefix_len);
|
2097
|
-
return GRPC_ERROR_NONE;
|
2098
|
-
}
|
2099
|
-
|
2100
|
-
grpc_error* FilterChainMatchParse(
|
2101
|
-
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
|
2102
|
-
FilterChain::FilterChainMatch* filter_chain_match) {
|
2103
|
-
auto* destination_port =
|
2104
|
-
envoy_config_listener_v3_FilterChainMatch_destination_port(
|
2105
|
-
filter_chain_match_proto);
|
2106
|
-
if (destination_port != nullptr) {
|
2107
|
-
filter_chain_match->destination_port =
|
2108
|
-
google_protobuf_UInt32Value_value(destination_port);
|
2109
|
-
}
|
2110
|
-
size_t size = 0;
|
2111
|
-
auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
|
2112
|
-
filter_chain_match_proto, &size);
|
2113
|
-
filter_chain_match->prefix_ranges.reserve(size);
|
2114
|
-
for (size_t i = 0; i < size; i++) {
|
2115
|
-
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2116
|
-
grpc_error* error = CidrRangeParse(prefix_ranges[i], &cidr_range);
|
2117
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2118
|
-
filter_chain_match->prefix_ranges.push_back(cidr_range);
|
2119
|
-
}
|
2120
|
-
filter_chain_match->source_type =
|
2121
|
-
static_cast<XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
|
2122
|
-
envoy_config_listener_v3_FilterChainMatch_source_type(
|
2123
|
-
filter_chain_match_proto));
|
2124
|
-
auto* source_prefix_ranges =
|
2125
|
-
envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
|
2126
|
-
filter_chain_match_proto, &size);
|
2127
|
-
filter_chain_match->source_prefix_ranges.reserve(size);
|
2128
|
-
for (size_t i = 0; i < size; i++) {
|
2129
|
-
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2130
|
-
grpc_error* error = CidrRangeParse(source_prefix_ranges[i], &cidr_range);
|
2131
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2132
|
-
filter_chain_match->source_prefix_ranges.push_back(cidr_range);
|
2133
|
-
}
|
2134
|
-
auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
|
2135
|
-
filter_chain_match_proto, &size);
|
2136
|
-
filter_chain_match->source_ports.reserve(size);
|
2137
|
-
for (size_t i = 0; i < size; i++) {
|
2138
|
-
filter_chain_match->source_ports.push_back(source_ports[i]);
|
2139
|
-
}
|
2140
|
-
auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
|
2141
|
-
filter_chain_match_proto, &size);
|
2142
|
-
for (size_t i = 0; i < size; i++) {
|
2143
|
-
filter_chain_match->server_names.push_back(
|
2144
|
-
UpbStringToStdString(server_names[i]));
|
2145
|
-
}
|
2146
|
-
filter_chain_match->transport_protocol = UpbStringToStdString(
|
2147
|
-
envoy_config_listener_v3_FilterChainMatch_transport_protocol(
|
2148
|
-
filter_chain_match_proto));
|
2149
|
-
auto* application_protocols =
|
2150
|
-
envoy_config_listener_v3_FilterChainMatch_application_protocols(
|
2151
|
-
filter_chain_match_proto, &size);
|
2152
|
-
for (size_t i = 0; i < size; i++) {
|
2153
|
-
filter_chain_match->application_protocols.push_back(
|
2154
|
-
UpbStringToStdString(application_protocols[i]));
|
2155
|
-
}
|
2156
|
-
return GRPC_ERROR_NONE;
|
2157
|
-
}
|
2158
|
-
|
2159
|
-
grpc_error* FilterChainParse(
|
2160
|
-
const EncodingContext& context,
|
2161
|
-
const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
|
2162
|
-
FilterChain* filter_chain) {
|
2163
|
-
grpc_error* error = GRPC_ERROR_NONE;
|
2164
|
-
auto* filter_chain_match =
|
2165
|
-
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
2166
|
-
filter_chain_proto);
|
2167
|
-
if (filter_chain_match != nullptr) {
|
2168
|
-
error = FilterChainMatchParse(filter_chain_match,
|
2169
|
-
&filter_chain->filter_chain_match);
|
2170
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2171
|
-
}
|
2172
|
-
// Parse the filters list. Currently we only support HttpConnectionManager.
|
2173
|
-
size_t size = 0;
|
2174
|
-
auto* filters =
|
2175
|
-
envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
|
2176
|
-
if (size != 1) {
|
2177
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2178
|
-
"FilterChain should have exactly one filter: HttpConnectionManager; no "
|
2179
|
-
"other filter is supported at the moment");
|
2180
|
-
}
|
2181
|
-
auto* typed_config = envoy_config_listener_v3_Filter_typed_config(filters[0]);
|
2182
|
-
if (typed_config == nullptr) {
|
2183
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2184
|
-
"No typed_config found in filter.");
|
2185
|
-
}
|
2186
|
-
absl::string_view type_url =
|
2187
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
|
2188
|
-
if (type_url !=
|
2189
|
-
"type.googleapis.com/"
|
2190
|
-
"envoy.extensions.filters.network.http_connection_manager.v3."
|
2191
|
-
"HttpConnectionManager") {
|
2192
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2193
|
-
absl::StrCat("Unsupported filter type ", type_url).c_str());
|
2194
|
-
}
|
2195
|
-
const upb_strview encoded_http_connection_manager =
|
2196
|
-
google_protobuf_Any_value(typed_config);
|
2197
|
-
const auto* http_connection_manager =
|
2198
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
2199
|
-
encoded_http_connection_manager.data,
|
2200
|
-
encoded_http_connection_manager.size, context.arena);
|
2201
|
-
if (http_connection_manager == nullptr) {
|
2202
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2203
|
-
"Could not parse HttpConnectionManager config from filter "
|
2204
|
-
"typed_config");
|
2205
|
-
}
|
2206
|
-
filter_chain->filter_chain_data =
|
2207
|
-
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2208
|
-
error = HttpConnectionManagerParse(
|
2209
|
-
false /* is_client */, context, http_connection_manager, is_v2,
|
2210
|
-
&filter_chain->filter_chain_data->http_connection_manager);
|
2211
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2212
|
-
// Get the DownstreamTlsContext for the filter chain
|
2213
|
-
if (XdsSecurityEnabled()) {
|
2214
|
-
auto* transport_socket =
|
2215
|
-
envoy_config_listener_v3_FilterChain_transport_socket(
|
2216
|
-
filter_chain_proto);
|
2217
|
-
if (transport_socket != nullptr) {
|
2218
|
-
error = DownstreamTlsContextParse(
|
2219
|
-
context, transport_socket,
|
2220
|
-
&filter_chain->filter_chain_data->downstream_tls_context);
|
2221
|
-
}
|
2222
|
-
}
|
2223
|
-
return error;
|
2224
|
-
}
|
2225
|
-
|
2226
|
-
grpc_error* AddressParse(const envoy_config_core_v3_Address* address_proto,
|
2227
|
-
std::string* address) {
|
2228
|
-
const auto* socket_address =
|
2229
|
-
envoy_config_core_v3_Address_socket_address(address_proto);
|
2230
|
-
if (socket_address == nullptr) {
|
2231
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2232
|
-
"Address does not have socket_address");
|
2233
|
-
}
|
2234
|
-
if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
|
2235
|
-
envoy_config_core_v3_SocketAddress_TCP) {
|
2236
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2237
|
-
"SocketAddress protocol is not TCP");
|
2238
|
-
}
|
2239
|
-
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
2240
|
-
if (port > 65535) {
|
2241
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port");
|
2242
|
-
}
|
2243
|
-
*address = JoinHostPort(
|
2244
|
-
UpbStringToAbsl(
|
2245
|
-
envoy_config_core_v3_SocketAddress_address(socket_address)),
|
2246
|
-
port);
|
2247
|
-
return GRPC_ERROR_NONE;
|
2248
|
-
}
|
2249
|
-
|
2250
|
-
// An intermediate map for filter chains that we create to validate the list of
|
2251
|
-
// filter chains received from the control plane and to finally create
|
2252
|
-
// XdsApi::LdsUpdate::FilterChainMap
|
2253
|
-
struct InternalFilterChainMap {
|
2254
|
-
using SourceIpMap =
|
2255
|
-
std::map<std::string, XdsApi::LdsUpdate::FilterChainMap::SourceIp>;
|
2256
|
-
using ConnectionSourceTypesArray = std::array<SourceIpMap, 3>;
|
2257
|
-
struct DestinationIp {
|
2258
|
-
absl::optional<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_range;
|
2259
|
-
bool transport_protocol_raw_buffer_provided = false;
|
2260
|
-
ConnectionSourceTypesArray source_types_array;
|
2261
|
-
};
|
2262
|
-
using DestinationIpMap = std::map<std::string, DestinationIp>;
|
2263
|
-
DestinationIpMap destination_ip_map;
|
2264
|
-
};
|
2265
|
-
|
2266
|
-
grpc_error* AddFilterChainDataForSourcePort(
|
2267
|
-
const FilterChain& filter_chain,
|
2268
|
-
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map,
|
2269
|
-
uint32_t port) {
|
2270
|
-
auto insert_result = ports_map->emplace(
|
2271
|
-
port, XdsApi::LdsUpdate::FilterChainMap::FilterChainDataSharedPtr{
|
2272
|
-
filter_chain.filter_chain_data});
|
2273
|
-
if (!insert_result.second) {
|
2274
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2275
|
-
absl::StrCat(
|
2276
|
-
"Duplicate matching rules detected when adding filter chain: ",
|
2277
|
-
filter_chain.filter_chain_match.ToString())
|
2278
|
-
.c_str());
|
2279
|
-
}
|
2280
|
-
return GRPC_ERROR_NONE;
|
2281
|
-
}
|
2282
|
-
|
2283
|
-
grpc_error* AddFilterChainDataForSourcePorts(
|
2284
|
-
const FilterChain& filter_chain,
|
2285
|
-
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map) {
|
2286
|
-
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
2287
|
-
return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
|
2288
|
-
} else {
|
2289
|
-
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
2290
|
-
grpc_error* error =
|
2291
|
-
AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
|
2292
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2293
|
-
}
|
2294
|
-
}
|
2295
|
-
return GRPC_ERROR_NONE;
|
2296
|
-
}
|
2297
|
-
|
2298
|
-
grpc_error* AddFilterChainDataForSourceIpRange(
|
2299
|
-
const FilterChain& filter_chain,
|
2300
|
-
InternalFilterChainMap::SourceIpMap* source_ip_map) {
|
2301
|
-
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
2302
|
-
auto insert_result = source_ip_map->emplace(
|
2303
|
-
"", XdsApi::LdsUpdate::FilterChainMap::SourceIp());
|
2304
|
-
return AddFilterChainDataForSourcePorts(
|
2305
|
-
filter_chain, &insert_result.first->second.ports_map);
|
2306
|
-
} else {
|
2307
|
-
for (const auto& prefix_range :
|
2308
|
-
filter_chain.filter_chain_match.source_prefix_ranges) {
|
2309
|
-
auto insert_result = source_ip_map->emplace(
|
2310
|
-
absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
|
2311
|
-
"/", prefix_range.prefix_len),
|
2312
|
-
XdsApi::LdsUpdate::FilterChainMap::SourceIp());
|
2313
|
-
if (insert_result.second) {
|
2314
|
-
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2315
|
-
}
|
2316
|
-
grpc_error* error = AddFilterChainDataForSourcePorts(
|
2317
|
-
filter_chain, &insert_result.first->second.ports_map);
|
2318
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2319
|
-
}
|
2320
|
-
}
|
2321
|
-
return GRPC_ERROR_NONE;
|
2322
|
-
}
|
2323
|
-
|
2324
|
-
grpc_error* AddFilterChainDataForSourceType(
|
2325
|
-
const FilterChain& filter_chain,
|
2326
|
-
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2327
|
-
GPR_ASSERT(static_cast<unsigned int>(
|
2328
|
-
filter_chain.filter_chain_match.source_type) < 3);
|
2329
|
-
return AddFilterChainDataForSourceIpRange(
|
2330
|
-
filter_chain, &destination_ip->source_types_array[static_cast<int>(
|
2331
|
-
filter_chain.filter_chain_match.source_type)]);
|
2332
|
-
}
|
2333
|
-
|
2334
|
-
grpc_error* AddFilterChainDataForApplicationProtocols(
|
2335
|
-
const FilterChain& filter_chain,
|
2336
|
-
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2337
|
-
// Only allow filter chains that do not mention application protocols
|
2338
|
-
if (!filter_chain.filter_chain_match.application_protocols.empty()) {
|
2339
|
-
return GRPC_ERROR_NONE;
|
2340
|
-
}
|
2341
|
-
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
2342
|
-
}
|
2343
|
-
|
2344
|
-
grpc_error* AddFilterChainDataForTransportProtocol(
|
2345
|
-
const FilterChain& filter_chain,
|
2346
|
-
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2347
|
-
const std::string& transport_protocol =
|
2348
|
-
filter_chain.filter_chain_match.transport_protocol;
|
2349
|
-
// Only allow filter chains with no transport protocol or "raw_buffer"
|
2350
|
-
if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
|
2351
|
-
return GRPC_ERROR_NONE;
|
2352
|
-
}
|
2353
|
-
// If for this configuration, we've already seen filter chains that mention
|
2354
|
-
// the transport protocol as "raw_buffer", we will never match filter chains
|
2355
|
-
// that do not mention it.
|
2356
|
-
if (destination_ip->transport_protocol_raw_buffer_provided &&
|
2357
|
-
transport_protocol.empty()) {
|
2358
|
-
return GRPC_ERROR_NONE;
|
2359
|
-
}
|
2360
|
-
if (!transport_protocol.empty() &&
|
2361
|
-
!destination_ip->transport_protocol_raw_buffer_provided) {
|
2362
|
-
destination_ip->transport_protocol_raw_buffer_provided = true;
|
2363
|
-
// Clear out the previous entries if any since those entries did not mention
|
2364
|
-
// "raw_buffer"
|
2365
|
-
destination_ip->source_types_array =
|
2366
|
-
InternalFilterChainMap::ConnectionSourceTypesArray();
|
2367
|
-
}
|
2368
|
-
return AddFilterChainDataForApplicationProtocols(filter_chain,
|
2369
|
-
destination_ip);
|
2370
|
-
}
|
2371
|
-
|
2372
|
-
grpc_error* AddFilterChainDataForServerNames(
|
2373
|
-
const FilterChain& filter_chain,
|
2374
|
-
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2375
|
-
// Don't continue adding filter chains with server names mentioned
|
2376
|
-
if (!filter_chain.filter_chain_match.server_names.empty()) {
|
2377
|
-
return GRPC_ERROR_NONE;
|
2378
|
-
}
|
2379
|
-
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
2380
|
-
}
|
2381
|
-
|
2382
|
-
grpc_error* AddFilterChainDataForDestinationIpRange(
|
2383
|
-
const FilterChain& filter_chain,
|
2384
|
-
InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
|
2385
|
-
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
2386
|
-
auto insert_result = destination_ip_map->emplace(
|
2387
|
-
"", InternalFilterChainMap::DestinationIp());
|
2388
|
-
return AddFilterChainDataForServerNames(filter_chain,
|
2389
|
-
&insert_result.first->second);
|
2390
|
-
} else {
|
2391
|
-
for (const auto& prefix_range :
|
2392
|
-
filter_chain.filter_chain_match.prefix_ranges) {
|
2393
|
-
auto insert_result = destination_ip_map->emplace(
|
2394
|
-
absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
|
2395
|
-
"/", prefix_range.prefix_len),
|
2396
|
-
InternalFilterChainMap::DestinationIp());
|
2397
|
-
if (insert_result.second) {
|
2398
|
-
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2399
|
-
}
|
2400
|
-
grpc_error* error = AddFilterChainDataForServerNames(
|
2401
|
-
filter_chain, &insert_result.first->second);
|
2402
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2403
|
-
}
|
2404
|
-
}
|
2405
|
-
return GRPC_ERROR_NONE;
|
2406
|
-
}
|
2407
|
-
|
2408
|
-
XdsApi::LdsUpdate::FilterChainMap BuildFromInternalFilterChainMap(
|
2409
|
-
InternalFilterChainMap* internal_filter_chain_map) {
|
2410
|
-
XdsApi::LdsUpdate::FilterChainMap filter_chain_map;
|
2411
|
-
for (auto& destination_ip_pair :
|
2412
|
-
internal_filter_chain_map->destination_ip_map) {
|
2413
|
-
XdsApi::LdsUpdate::FilterChainMap::DestinationIp destination_ip;
|
2414
|
-
destination_ip.prefix_range = destination_ip_pair.second.prefix_range;
|
2415
|
-
for (int i = 0; i < 3; i++) {
|
2416
|
-
auto& source_ip_map = destination_ip_pair.second.source_types_array[i];
|
2417
|
-
for (auto& source_ip_pair : source_ip_map) {
|
2418
|
-
destination_ip.source_types_array[i].push_back(
|
2419
|
-
std::move(source_ip_pair.second));
|
2420
|
-
}
|
2421
|
-
}
|
2422
|
-
filter_chain_map.destination_ip_vector.push_back(std::move(destination_ip));
|
2423
|
-
}
|
2424
|
-
return filter_chain_map;
|
2425
|
-
}
|
2426
|
-
|
2427
|
-
grpc_error* BuildFilterChainMap(
|
2428
|
-
const std::vector<FilterChain>& filter_chains,
|
2429
|
-
XdsApi::LdsUpdate::FilterChainMap* filter_chain_map) {
|
2430
|
-
InternalFilterChainMap internal_filter_chain_map;
|
2431
|
-
for (const auto& filter_chain : filter_chains) {
|
2432
|
-
// Discard filter chain entries that specify destination port
|
2433
|
-
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
2434
|
-
grpc_error* error = AddFilterChainDataForDestinationIpRange(
|
2435
|
-
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
2436
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2437
|
-
}
|
2438
|
-
*filter_chain_map =
|
2439
|
-
BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
2440
|
-
return GRPC_ERROR_NONE;
|
2441
|
-
}
|
2442
|
-
|
2443
|
-
grpc_error* LdsResponseParseServer(
|
2444
|
-
const EncodingContext& context,
|
2445
|
-
const envoy_config_listener_v3_Listener* listener, bool is_v2,
|
2446
|
-
XdsApi::LdsUpdate* lds_update) {
|
2447
|
-
lds_update->type = XdsApi::LdsUpdate::ListenerType::kTcpListener;
|
2448
|
-
grpc_error* error =
|
2449
|
-
AddressParse(envoy_config_listener_v3_Listener_address(listener),
|
2450
|
-
&lds_update->address);
|
2451
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2452
|
-
const auto* use_original_dst =
|
2453
|
-
envoy_config_listener_v3_Listener_use_original_dst(listener);
|
2454
|
-
if (use_original_dst != nullptr) {
|
2455
|
-
if (google_protobuf_BoolValue_value(use_original_dst)) {
|
2456
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2457
|
-
"Field \'use_original_dst\' is not supported.");
|
2458
|
-
}
|
2459
|
-
}
|
2460
|
-
size_t size = 0;
|
2461
|
-
auto* filter_chains =
|
2462
|
-
envoy_config_listener_v3_Listener_filter_chains(listener, &size);
|
2463
|
-
std::vector<FilterChain> parsed_filter_chains;
|
2464
|
-
parsed_filter_chains.reserve(size);
|
2465
|
-
for (size_t i = 0; i < size; i++) {
|
2466
|
-
FilterChain filter_chain;
|
2467
|
-
error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
|
2468
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2469
|
-
parsed_filter_chains.push_back(std::move(filter_chain));
|
2470
|
-
}
|
2471
|
-
error =
|
2472
|
-
BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
|
2473
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2474
|
-
auto* default_filter_chain =
|
2475
|
-
envoy_config_listener_v3_Listener_default_filter_chain(listener);
|
2476
|
-
if (default_filter_chain != nullptr) {
|
2477
|
-
FilterChain filter_chain;
|
2478
|
-
error =
|
2479
|
-
FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
|
2480
|
-
if (error != GRPC_ERROR_NONE) return error;
|
2481
|
-
if (filter_chain.filter_chain_data != nullptr) {
|
2482
|
-
lds_update->default_filter_chain =
|
2483
|
-
std::move(*filter_chain.filter_chain_data);
|
2484
|
-
}
|
2485
|
-
}
|
2486
|
-
if (size == 0 && default_filter_chain == nullptr) {
|
2487
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No filter chain provided.");
|
2488
|
-
}
|
2489
|
-
return GRPC_ERROR_NONE;
|
2490
|
-
}
|
2491
|
-
|
2492
|
-
grpc_error* LdsResponseParse(
|
2493
|
-
const EncodingContext& context,
|
2494
|
-
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2495
|
-
const std::set<absl::string_view>& expected_listener_names,
|
2496
|
-
XdsApi::LdsUpdateMap* lds_update_map,
|
2497
|
-
std::set<std::string>* resource_names_failed) {
|
2498
|
-
std::vector<grpc_error*> errors;
|
2499
|
-
// Get the resources from the response.
|
2500
|
-
size_t size;
|
2501
|
-
const google_protobuf_Any* const* resources =
|
2502
|
-
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
2503
|
-
for (size_t i = 0; i < size; ++i) {
|
2504
|
-
// Check the type_url of the resource.
|
2505
|
-
absl::string_view type_url =
|
2506
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
2507
|
-
bool is_v2 = false;
|
2508
|
-
if (!IsLds(type_url, &is_v2)) {
|
2509
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2510
|
-
absl::StrCat("resource index ", i, ": Resource is not LDS.")
|
2511
|
-
.c_str()));
|
2512
|
-
continue;
|
2513
|
-
}
|
2514
|
-
// Decode the listener.
|
2515
|
-
const upb_strview encoded_listener =
|
2516
|
-
google_protobuf_Any_value(resources[i]);
|
2517
|
-
const envoy_config_listener_v3_Listener* listener =
|
2518
|
-
envoy_config_listener_v3_Listener_parse(
|
2519
|
-
encoded_listener.data, encoded_listener.size, context.arena);
|
2520
|
-
if (listener == nullptr) {
|
2521
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2522
|
-
absl::StrCat("resource index ", i, ": Can't decode listener.")
|
2523
|
-
.c_str()));
|
2524
|
-
continue;
|
2525
|
-
}
|
2526
|
-
// Check listener name. Ignore unexpected listeners.
|
2527
|
-
std::string listener_name =
|
2528
|
-
UpbStringToStdString(envoy_config_listener_v3_Listener_name(listener));
|
2529
|
-
if (expected_listener_names.find(listener_name) ==
|
2530
|
-
expected_listener_names.end()) {
|
2531
|
-
continue;
|
2532
|
-
}
|
2533
|
-
// Fail if listener name is duplicated.
|
2534
|
-
if (lds_update_map->find(listener_name) != lds_update_map->end()) {
|
2535
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2536
|
-
absl::StrCat("duplicate listener name \"", listener_name, "\"")
|
2537
|
-
.c_str()));
|
2538
|
-
resource_names_failed->insert(listener_name);
|
2539
|
-
continue;
|
2540
|
-
}
|
2541
|
-
// Serialize into JSON and store it in the LdsUpdateMap
|
2542
|
-
XdsApi::LdsResourceData& lds_resource_data =
|
2543
|
-
(*lds_update_map)[listener_name];
|
2544
|
-
XdsApi::LdsUpdate& lds_update = lds_resource_data.resource;
|
2545
|
-
lds_resource_data.serialized_proto = UpbStringToStdString(encoded_listener);
|
2546
|
-
// Check whether it's a client or server listener.
|
2547
|
-
const envoy_config_listener_v3_ApiListener* api_listener =
|
2548
|
-
envoy_config_listener_v3_Listener_api_listener(listener);
|
2549
|
-
const envoy_config_core_v3_Address* address =
|
2550
|
-
envoy_config_listener_v3_Listener_address(listener);
|
2551
|
-
if (api_listener != nullptr && address != nullptr) {
|
2552
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2553
|
-
absl::StrCat(listener_name,
|
2554
|
-
": Listener has both address and ApiListener")
|
2555
|
-
.c_str()));
|
2556
|
-
resource_names_failed->insert(listener_name);
|
2557
|
-
continue;
|
2558
|
-
}
|
2559
|
-
if (api_listener == nullptr && address == nullptr) {
|
2560
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2561
|
-
absl::StrCat(listener_name,
|
2562
|
-
": Listener has neither address nor ApiListener")
|
2563
|
-
.c_str()));
|
2564
|
-
resource_names_failed->insert(listener_name);
|
2565
|
-
continue;
|
2566
|
-
}
|
2567
|
-
grpc_error* error = GRPC_ERROR_NONE;
|
2568
|
-
if (api_listener != nullptr) {
|
2569
|
-
error = LdsResponseParseClient(context, api_listener, is_v2, &lds_update);
|
2570
|
-
} else {
|
2571
|
-
error = LdsResponseParseServer(context, listener, is_v2, &lds_update);
|
2572
|
-
}
|
2573
|
-
if (error != GRPC_ERROR_NONE) {
|
2574
|
-
errors.push_back(grpc_error_add_child(
|
2575
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2576
|
-
absl::StrCat(listener_name, ": validation error").c_str()),
|
2577
|
-
error));
|
2578
|
-
resource_names_failed->insert(listener_name);
|
2579
|
-
}
|
2580
|
-
}
|
2581
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing LDS response", &errors);
|
2582
|
-
}
|
2583
|
-
|
2584
|
-
grpc_error* RdsResponseParse(
|
2585
|
-
const EncodingContext& context,
|
2586
|
-
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2587
|
-
const std::set<absl::string_view>& expected_route_configuration_names,
|
2588
|
-
XdsApi::RdsUpdateMap* rds_update_map,
|
2589
|
-
std::set<std::string>* resource_names_failed) {
|
2590
|
-
std::vector<grpc_error*> errors;
|
2591
|
-
// Get the resources from the response.
|
2592
|
-
size_t size;
|
2593
|
-
const google_protobuf_Any* const* resources =
|
2594
|
-
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
2595
|
-
for (size_t i = 0; i < size; ++i) {
|
2596
|
-
// Check the type_url of the resource.
|
2597
|
-
absl::string_view type_url =
|
2598
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
2599
|
-
if (!IsRds(type_url)) {
|
2600
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2601
|
-
absl::StrCat("resource index ", i, ": Resource is not RDS.")
|
2602
|
-
.c_str()));
|
2603
|
-
continue;
|
2604
|
-
}
|
2605
|
-
// Decode the route_config.
|
2606
|
-
const upb_strview encoded_route_config =
|
2607
|
-
google_protobuf_Any_value(resources[i]);
|
2608
|
-
const envoy_config_route_v3_RouteConfiguration* route_config =
|
2609
|
-
envoy_config_route_v3_RouteConfiguration_parse(
|
2610
|
-
encoded_route_config.data, encoded_route_config.size,
|
2611
|
-
context.arena);
|
2612
|
-
if (route_config == nullptr) {
|
2613
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2614
|
-
absl::StrCat("resource index ", i, ": Can't decode route_config.")
|
2615
|
-
.c_str()));
|
2616
|
-
continue;
|
2617
|
-
}
|
2618
|
-
// Check route_config_name. Ignore unexpected route_config.
|
2619
|
-
std::string route_config_name = UpbStringToStdString(
|
2620
|
-
envoy_config_route_v3_RouteConfiguration_name(route_config));
|
2621
|
-
if (expected_route_configuration_names.find(route_config_name) ==
|
2622
|
-
expected_route_configuration_names.end()) {
|
2623
|
-
continue;
|
2624
|
-
}
|
2625
|
-
// Fail if route config name is duplicated.
|
2626
|
-
if (rds_update_map->find(route_config_name) != rds_update_map->end()) {
|
2627
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2628
|
-
absl::StrCat("duplicate route config name \"", route_config_name,
|
2629
|
-
"\"")
|
2630
|
-
.c_str()));
|
2631
|
-
resource_names_failed->insert(route_config_name);
|
2632
|
-
continue;
|
2633
|
-
}
|
2634
|
-
// Serialize into JSON and store it in the RdsUpdateMap
|
2635
|
-
XdsApi::RdsResourceData& rds_resource_data =
|
2636
|
-
(*rds_update_map)[route_config_name];
|
2637
|
-
XdsApi::RdsUpdate& rds_update = rds_resource_data.resource;
|
2638
|
-
rds_resource_data.serialized_proto =
|
2639
|
-
UpbStringToStdString(encoded_route_config);
|
2640
|
-
// Parse the route_config.
|
2641
|
-
grpc_error* error = RouteConfigParse(context, route_config, &rds_update);
|
2642
|
-
if (error != GRPC_ERROR_NONE) {
|
2643
|
-
errors.push_back(grpc_error_add_child(
|
2644
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2645
|
-
absl::StrCat(route_config_name, ": validation error").c_str()),
|
2646
|
-
error));
|
2647
|
-
resource_names_failed->insert(route_config_name);
|
2648
|
-
}
|
2649
|
-
}
|
2650
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing RDS response", &errors);
|
2651
|
-
}
|
2652
|
-
|
2653
|
-
grpc_error* CdsResponseParse(
|
2654
|
-
const EncodingContext& context,
|
2655
|
-
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
2656
|
-
const std::set<absl::string_view>& expected_cluster_names,
|
2657
|
-
XdsApi::CdsUpdateMap* cds_update_map,
|
2658
|
-
std::set<std::string>* resource_names_failed) {
|
2659
|
-
std::vector<grpc_error*> errors;
|
2660
|
-
// Get the resources from the response.
|
2661
|
-
size_t size;
|
2662
|
-
const google_protobuf_Any* const* resources =
|
2663
|
-
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
2664
|
-
// Parse all the resources in the CDS response.
|
2665
|
-
for (size_t i = 0; i < size; ++i) {
|
2666
|
-
// Check the type_url of the resource.
|
2667
|
-
absl::string_view type_url =
|
2668
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
2669
|
-
if (!IsCds(type_url)) {
|
2670
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2671
|
-
absl::StrCat("resource index ", i, ": Resource is not CDS.")
|
2672
|
-
.c_str()));
|
2673
|
-
continue;
|
2674
|
-
}
|
2675
|
-
// Decode the cluster.
|
2676
|
-
const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
|
2677
|
-
const envoy_config_cluster_v3_Cluster* cluster =
|
2678
|
-
envoy_config_cluster_v3_Cluster_parse(
|
2679
|
-
encoded_cluster.data, encoded_cluster.size, context.arena);
|
2680
|
-
if (cluster == nullptr) {
|
2681
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2682
|
-
absl::StrCat("resource index ", i, ": Can't decode cluster.")
|
2683
|
-
.c_str()));
|
2684
|
-
continue;
|
2685
|
-
}
|
2686
|
-
MaybeLogCluster(context, cluster);
|
2687
|
-
// Ignore unexpected cluster names.
|
2688
|
-
std::string cluster_name =
|
2689
|
-
UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(cluster));
|
2690
|
-
if (expected_cluster_names.find(cluster_name) ==
|
2691
|
-
expected_cluster_names.end()) {
|
2692
|
-
continue;
|
2693
|
-
}
|
2694
|
-
// Fail on duplicate resources.
|
2695
|
-
if (cds_update_map->find(cluster_name) != cds_update_map->end()) {
|
2696
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2697
|
-
absl::StrCat("duplicate resource name \"", cluster_name, "\"")
|
2698
|
-
.c_str()));
|
2699
|
-
resource_names_failed->insert(cluster_name);
|
2700
|
-
continue;
|
2701
|
-
}
|
2702
|
-
// Serialize into JSON and store it in the CdsUpdateMap
|
2703
|
-
XdsApi::CdsResourceData& cds_resource_data =
|
2704
|
-
(*cds_update_map)[cluster_name];
|
2705
|
-
XdsApi::CdsUpdate& cds_update = cds_resource_data.resource;
|
2706
|
-
cds_resource_data.serialized_proto = UpbStringToStdString(encoded_cluster);
|
2707
|
-
// Check the cluster_discovery_type.
|
2708
|
-
if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
|
2709
|
-
!envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
2710
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2711
|
-
absl::StrCat(cluster_name, ": DiscoveryType not found.").c_str()));
|
2712
|
-
resource_names_failed->insert(cluster_name);
|
2713
|
-
continue;
|
2714
|
-
}
|
2715
|
-
if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
2716
|
-
envoy_config_cluster_v3_Cluster_EDS) {
|
2717
|
-
cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::EDS;
|
2718
|
-
// Check the EDS config source.
|
2719
|
-
const envoy_config_cluster_v3_Cluster_EdsClusterConfig*
|
2720
|
-
eds_cluster_config =
|
2721
|
-
envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
|
2722
|
-
const envoy_config_core_v3_ConfigSource* eds_config =
|
2723
|
-
envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
|
2724
|
-
eds_cluster_config);
|
2725
|
-
if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
|
2726
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2727
|
-
absl::StrCat(cluster_name, ": EDS ConfigSource is not ADS.")
|
2728
|
-
.c_str()));
|
2729
|
-
resource_names_failed->insert(cluster_name);
|
2730
|
-
continue;
|
2731
|
-
}
|
2732
|
-
// Record EDS service_name (if any).
|
2733
|
-
upb_strview service_name =
|
2734
|
-
envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
|
2735
|
-
eds_cluster_config);
|
2736
|
-
if (service_name.size != 0) {
|
2737
|
-
cds_update.eds_service_name = UpbStringToStdString(service_name);
|
2738
|
-
}
|
2739
|
-
} else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
|
2740
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2741
|
-
absl::StrCat(cluster_name, ": DiscoveryType is not valid.").c_str()));
|
2742
|
-
resource_names_failed->insert(cluster_name);
|
2743
|
-
continue;
|
2744
|
-
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
2745
|
-
envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
|
2746
|
-
cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS;
|
2747
|
-
} else {
|
2748
|
-
if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
2749
|
-
const envoy_config_cluster_v3_Cluster_CustomClusterType*
|
2750
|
-
custom_cluster_type =
|
2751
|
-
envoy_config_cluster_v3_Cluster_cluster_type(cluster);
|
2752
|
-
upb_strview type_name =
|
2753
|
-
envoy_config_cluster_v3_Cluster_CustomClusterType_name(
|
2754
|
-
custom_cluster_type);
|
2755
|
-
if (UpbStringToAbsl(type_name) == "envoy.clusters.aggregate") {
|
2756
|
-
cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::AGGREGATE;
|
2757
|
-
// Retrieve aggregate clusters.
|
2758
|
-
const google_protobuf_Any* typed_config =
|
2759
|
-
envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
|
2760
|
-
custom_cluster_type);
|
2761
|
-
const upb_strview aggregate_cluster_config_upb_strview =
|
2762
|
-
google_protobuf_Any_value(typed_config);
|
2763
|
-
const envoy_extensions_clusters_aggregate_v3_ClusterConfig*
|
2764
|
-
aggregate_cluster_config =
|
2765
|
-
envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
|
2766
|
-
aggregate_cluster_config_upb_strview.data,
|
2767
|
-
aggregate_cluster_config_upb_strview.size, context.arena);
|
2768
|
-
if (aggregate_cluster_config == nullptr) {
|
2769
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2770
|
-
absl::StrCat(cluster_name, ": Can't parse aggregate cluster.")
|
2771
|
-
.c_str()));
|
2772
|
-
resource_names_failed->insert(cluster_name);
|
2773
|
-
continue;
|
2774
|
-
}
|
2775
|
-
size_t size;
|
2776
|
-
const upb_strview* clusters =
|
2777
|
-
envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
|
2778
|
-
aggregate_cluster_config, &size);
|
2779
|
-
for (size_t i = 0; i < size; ++i) {
|
2780
|
-
const upb_strview cluster = clusters[i];
|
2781
|
-
cds_update.prioritized_cluster_names.emplace_back(
|
2782
|
-
UpbStringToStdString(cluster));
|
2783
|
-
}
|
2784
|
-
} else {
|
2785
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2786
|
-
absl::StrCat(cluster_name, ": DiscoveryType is not valid.")
|
2787
|
-
.c_str()));
|
2788
|
-
resource_names_failed->insert(cluster_name);
|
2789
|
-
continue;
|
2790
|
-
}
|
2791
|
-
} else {
|
2792
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2793
|
-
absl::StrCat(cluster_name, ": DiscoveryType is not valid.")
|
2794
|
-
.c_str()));
|
2795
|
-
resource_names_failed->insert(cluster_name);
|
2796
|
-
continue;
|
2797
|
-
}
|
2798
|
-
}
|
2799
|
-
// Check the LB policy.
|
2800
|
-
if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
2801
|
-
envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
|
2802
|
-
cds_update.lb_policy = "ROUND_ROBIN";
|
2803
|
-
} else if (XdsRingHashEnabled() &&
|
2804
|
-
envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
2805
|
-
envoy_config_cluster_v3_Cluster_RING_HASH) {
|
2806
|
-
cds_update.lb_policy = "RING_HASH";
|
2807
|
-
// Record ring hash lb config
|
2808
|
-
auto* ring_hash_config =
|
2809
|
-
envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
|
2810
|
-
if (ring_hash_config == nullptr) {
|
2811
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2812
|
-
absl::StrCat(cluster_name,
|
2813
|
-
": ring hash lb config required but not present.")
|
2814
|
-
.c_str()));
|
2815
|
-
resource_names_failed->insert(cluster_name);
|
2816
|
-
continue;
|
2817
|
-
}
|
2818
|
-
const google_protobuf_UInt64Value* max_ring_size =
|
2819
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
|
2820
|
-
ring_hash_config);
|
2821
|
-
if (max_ring_size != nullptr) {
|
2822
|
-
cds_update.max_ring_size =
|
2823
|
-
google_protobuf_UInt64Value_value(max_ring_size);
|
2824
|
-
if (cds_update.max_ring_size > 8388608 ||
|
2825
|
-
cds_update.max_ring_size == 0) {
|
2826
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2827
|
-
absl::StrCat(
|
2828
|
-
cluster_name,
|
2829
|
-
": max_ring_size is not in the range of 1 to 8388608.")
|
2830
|
-
.c_str()));
|
2831
|
-
resource_names_failed->insert(cluster_name);
|
2832
|
-
continue;
|
2833
|
-
}
|
2834
|
-
}
|
2835
|
-
const google_protobuf_UInt64Value* min_ring_size =
|
2836
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
|
2837
|
-
ring_hash_config);
|
2838
|
-
if (min_ring_size != nullptr) {
|
2839
|
-
cds_update.min_ring_size =
|
2840
|
-
google_protobuf_UInt64Value_value(min_ring_size);
|
2841
|
-
if (cds_update.min_ring_size > 8388608 ||
|
2842
|
-
cds_update.min_ring_size == 0) {
|
2843
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2844
|
-
absl::StrCat(
|
2845
|
-
cluster_name,
|
2846
|
-
": min_ring_size is not in the range of 1 to 8388608.")
|
2847
|
-
.c_str()));
|
2848
|
-
resource_names_failed->insert(cluster_name);
|
2849
|
-
continue;
|
2850
|
-
}
|
2851
|
-
if (cds_update.min_ring_size > cds_update.max_ring_size) {
|
2852
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2853
|
-
absl::StrCat(
|
2854
|
-
cluster_name,
|
2855
|
-
": min_ring_size cannot be greater than max_ring_size.")
|
2856
|
-
.c_str()));
|
2857
|
-
resource_names_failed->insert(cluster_name);
|
2858
|
-
continue;
|
2859
|
-
}
|
2860
|
-
}
|
2861
|
-
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
2862
|
-
ring_hash_config) ==
|
2863
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
2864
|
-
cds_update.hash_function = XdsApi::CdsUpdate::HashFunction::XX_HASH;
|
2865
|
-
} else if (
|
2866
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
2867
|
-
ring_hash_config) ==
|
2868
|
-
envoy_config_cluster_v3_Cluster_RingHashLbConfig_MURMUR_HASH_2) {
|
2869
|
-
cds_update.hash_function =
|
2870
|
-
XdsApi::CdsUpdate::HashFunction::MURMUR_HASH_2;
|
2871
|
-
} else {
|
2872
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2873
|
-
absl::StrCat(cluster_name,
|
2874
|
-
": ring hash lb config has invalid hash function.")
|
2875
|
-
.c_str()));
|
2876
|
-
resource_names_failed->insert(cluster_name);
|
2877
|
-
continue;
|
2878
|
-
}
|
2879
|
-
} else {
|
2880
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2881
|
-
absl::StrCat(cluster_name, ": LB policy is not supported.").c_str()));
|
2882
|
-
resource_names_failed->insert(cluster_name);
|
2883
|
-
continue;
|
2884
|
-
}
|
2885
|
-
if (XdsSecurityEnabled()) {
|
2886
|
-
// Record Upstream tls context
|
2887
|
-
auto* transport_socket =
|
2888
|
-
envoy_config_cluster_v3_Cluster_transport_socket(cluster);
|
2889
|
-
if (transport_socket != nullptr) {
|
2890
|
-
absl::string_view name = UpbStringToAbsl(
|
2891
|
-
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
2892
|
-
if (name == "envoy.transport_sockets.tls") {
|
2893
|
-
auto* typed_config =
|
2894
|
-
envoy_config_core_v3_TransportSocket_typed_config(
|
2895
|
-
transport_socket);
|
2896
|
-
if (typed_config != nullptr) {
|
2897
|
-
const upb_strview encoded_upstream_tls_context =
|
2898
|
-
google_protobuf_Any_value(typed_config);
|
2899
|
-
auto* upstream_tls_context =
|
2900
|
-
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
|
2901
|
-
encoded_upstream_tls_context.data,
|
2902
|
-
encoded_upstream_tls_context.size, context.arena);
|
2903
|
-
if (upstream_tls_context == nullptr) {
|
2904
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2905
|
-
absl::StrCat(cluster_name,
|
2906
|
-
": Can't decode upstream tls context.")
|
2907
|
-
.c_str()));
|
2908
|
-
resource_names_failed->insert(cluster_name);
|
2909
|
-
continue;
|
2910
|
-
}
|
2911
|
-
auto* common_tls_context =
|
2912
|
-
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
2913
|
-
upstream_tls_context);
|
2914
|
-
if (common_tls_context != nullptr) {
|
2915
|
-
grpc_error* error = CommonTlsContextParse(
|
2916
|
-
common_tls_context, &cds_update.common_tls_context);
|
2917
|
-
if (error != GRPC_ERROR_NONE) {
|
2918
|
-
errors.push_back(grpc_error_add_child(
|
2919
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2920
|
-
absl::StrCat(cluster_name, ": error in TLS context")
|
2921
|
-
.c_str()),
|
2922
|
-
error));
|
2923
|
-
resource_names_failed->insert(cluster_name);
|
2924
|
-
continue;
|
2925
|
-
}
|
2926
|
-
}
|
2927
|
-
}
|
2928
|
-
if (cds_update.common_tls_context.combined_validation_context
|
2929
|
-
.validation_context_certificate_provider_instance
|
2930
|
-
.instance_name.empty()) {
|
2931
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2932
|
-
absl::StrCat(cluster_name,
|
2933
|
-
"TLS configuration provided but no "
|
2934
|
-
"validation_context_certificate_provider_instance "
|
2935
|
-
"found.")
|
2936
|
-
.c_str()));
|
2937
|
-
resource_names_failed->insert(cluster_name);
|
2938
|
-
continue;
|
2939
|
-
}
|
2940
|
-
}
|
2941
|
-
}
|
2942
|
-
}
|
2943
|
-
// Record LRS server name (if any).
|
2944
|
-
const envoy_config_core_v3_ConfigSource* lrs_server =
|
2945
|
-
envoy_config_cluster_v3_Cluster_lrs_server(cluster);
|
2946
|
-
if (lrs_server != nullptr) {
|
2947
|
-
if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
|
2948
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
2949
|
-
absl::StrCat(cluster_name, ": LRS ConfigSource is not self.")
|
2950
|
-
.c_str()));
|
2951
|
-
resource_names_failed->insert(cluster_name);
|
2952
|
-
continue;
|
2953
|
-
}
|
2954
|
-
cds_update.lrs_load_reporting_server_name.emplace("");
|
2955
|
-
}
|
2956
|
-
// The Cluster resource encodes the circuit breaking parameters in a list of
|
2957
|
-
// Thresholds messages, where each message specifies the parameters for a
|
2958
|
-
// particular RoutingPriority. we will look only at the first entry in the
|
2959
|
-
// list for priority DEFAULT and default to 1024 if not found.
|
2960
|
-
if (envoy_config_cluster_v3_Cluster_has_circuit_breakers(cluster)) {
|
2961
|
-
const envoy_config_cluster_v3_CircuitBreakers* circuit_breakers =
|
2962
|
-
envoy_config_cluster_v3_Cluster_circuit_breakers(cluster);
|
2963
|
-
size_t num_thresholds;
|
2964
|
-
const envoy_config_cluster_v3_CircuitBreakers_Thresholds* const*
|
2965
|
-
thresholds = envoy_config_cluster_v3_CircuitBreakers_thresholds(
|
2966
|
-
circuit_breakers, &num_thresholds);
|
2967
|
-
for (size_t i = 0; i < num_thresholds; ++i) {
|
2968
|
-
const auto* threshold = thresholds[i];
|
2969
|
-
if (envoy_config_cluster_v3_CircuitBreakers_Thresholds_priority(
|
2970
|
-
threshold) == envoy_config_core_v3_DEFAULT) {
|
2971
|
-
const google_protobuf_UInt32Value* max_requests =
|
2972
|
-
envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
|
2973
|
-
threshold);
|
2974
|
-
if (max_requests != nullptr) {
|
2975
|
-
cds_update.max_concurrent_requests =
|
2976
|
-
google_protobuf_UInt32Value_value(max_requests);
|
2977
|
-
}
|
2978
|
-
break;
|
2979
|
-
}
|
2980
|
-
}
|
2981
|
-
}
|
2982
|
-
}
|
2983
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS response", &errors);
|
2984
|
-
}
|
2985
|
-
|
2986
|
-
grpc_error* ServerAddressParseAndAppend(
|
2987
|
-
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
|
2988
|
-
ServerAddressList* list) {
|
2989
|
-
// If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
|
2990
|
-
const int32_t health_status =
|
2991
|
-
envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
|
2992
|
-
if (health_status != envoy_config_core_v3_UNKNOWN &&
|
2993
|
-
health_status != envoy_config_core_v3_HEALTHY) {
|
2994
|
-
return GRPC_ERROR_NONE;
|
2995
|
-
}
|
2996
|
-
// Find the ip:port.
|
2997
|
-
const envoy_config_endpoint_v3_Endpoint* endpoint =
|
2998
|
-
envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
|
2999
|
-
const envoy_config_core_v3_Address* address =
|
3000
|
-
envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
3001
|
-
const envoy_config_core_v3_SocketAddress* socket_address =
|
3002
|
-
envoy_config_core_v3_Address_socket_address(address);
|
3003
|
-
std::string address_str = UpbStringToStdString(
|
3004
|
-
envoy_config_core_v3_SocketAddress_address(socket_address));
|
3005
|
-
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
3006
|
-
if (GPR_UNLIKELY(port >> 16) != 0) {
|
3007
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
|
3008
|
-
}
|
3009
|
-
// Populate grpc_resolved_address.
|
3010
|
-
grpc_resolved_address addr;
|
3011
|
-
grpc_error* error =
|
3012
|
-
grpc_string_to_sockaddr_new(&addr, address_str.c_str(), port);
|
3013
|
-
if (error != GRPC_ERROR_NONE) return error;
|
3014
|
-
// Append the address to the list.
|
3015
|
-
list->emplace_back(addr, nullptr);
|
3016
|
-
return GRPC_ERROR_NONE;
|
3017
|
-
}
|
3018
|
-
|
3019
|
-
grpc_error* LocalityParse(
|
3020
|
-
const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
|
3021
|
-
XdsApi::EdsUpdate::Priority::Locality* output_locality, size_t* priority) {
|
3022
|
-
// Parse LB weight.
|
3023
|
-
const google_protobuf_UInt32Value* lb_weight =
|
3024
|
-
envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
|
3025
|
-
locality_lb_endpoints);
|
3026
|
-
// If LB weight is not specified, it means this locality is assigned no load.
|
3027
|
-
// TODO(juanlishen): When we support CDS to configure the inter-locality
|
3028
|
-
// policy, we should change the LB weight handling.
|
3029
|
-
output_locality->lb_weight =
|
3030
|
-
lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
|
3031
|
-
if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
|
3032
|
-
// Parse locality name.
|
3033
|
-
const envoy_config_core_v3_Locality* locality =
|
3034
|
-
envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
|
3035
|
-
locality_lb_endpoints);
|
3036
|
-
if (locality == nullptr) {
|
3037
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty locality.");
|
3038
|
-
}
|
3039
|
-
std::string region =
|
3040
|
-
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
3041
|
-
std::string zone =
|
3042
|
-
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
3043
|
-
std::string sub_zone =
|
3044
|
-
UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
|
3045
|
-
output_locality->name = MakeRefCounted<XdsLocalityName>(
|
3046
|
-
std::move(region), std::move(zone), std::move(sub_zone));
|
3047
|
-
// Parse the addresses.
|
3048
|
-
size_t size;
|
3049
|
-
const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
|
3050
|
-
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
3051
|
-
locality_lb_endpoints, &size);
|
3052
|
-
for (size_t i = 0; i < size; ++i) {
|
3053
|
-
grpc_error* error = ServerAddressParseAndAppend(
|
3054
|
-
lb_endpoints[i], &output_locality->endpoints);
|
3055
|
-
if (error != GRPC_ERROR_NONE) return error;
|
3056
|
-
}
|
3057
|
-
// Parse the priority.
|
3058
|
-
*priority = envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
|
3059
|
-
locality_lb_endpoints);
|
3060
|
-
return GRPC_ERROR_NONE;
|
3061
|
-
}
|
3062
|
-
|
3063
|
-
grpc_error* DropParseAndAppend(
|
3064
|
-
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
|
3065
|
-
drop_overload,
|
3066
|
-
XdsApi::EdsUpdate::DropConfig* drop_config) {
|
3067
|
-
// Get the category.
|
3068
|
-
std::string category = UpbStringToStdString(
|
3069
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
|
3070
|
-
drop_overload));
|
3071
|
-
if (category.empty()) {
|
3072
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
|
3073
|
-
}
|
3074
|
-
// Get the drop rate (per million).
|
3075
|
-
const envoy_type_v3_FractionalPercent* drop_percentage =
|
3076
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
|
3077
|
-
drop_overload);
|
3078
|
-
uint32_t numerator =
|
3079
|
-
envoy_type_v3_FractionalPercent_numerator(drop_percentage);
|
3080
|
-
const auto denominator =
|
3081
|
-
static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
|
3082
|
-
envoy_type_v3_FractionalPercent_denominator(drop_percentage));
|
3083
|
-
// Normalize to million.
|
3084
|
-
switch (denominator) {
|
3085
|
-
case envoy_type_v3_FractionalPercent_HUNDRED:
|
3086
|
-
numerator *= 10000;
|
3087
|
-
break;
|
3088
|
-
case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
|
3089
|
-
numerator *= 100;
|
3090
|
-
break;
|
3091
|
-
case envoy_type_v3_FractionalPercent_MILLION:
|
3092
|
-
break;
|
3093
|
-
default:
|
3094
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
|
3095
|
-
}
|
3096
|
-
// Cap numerator to 1000000.
|
3097
|
-
numerator = GPR_MIN(numerator, 1000000);
|
3098
|
-
drop_config->AddCategory(std::move(category), numerator);
|
3099
|
-
return GRPC_ERROR_NONE;
|
3100
|
-
}
|
3101
|
-
|
3102
|
-
grpc_error* EdsResponseParse(
|
3103
|
-
const EncodingContext& context,
|
3104
|
-
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
3105
|
-
const std::set<absl::string_view>& expected_eds_service_names,
|
3106
|
-
XdsApi::EdsUpdateMap* eds_update_map,
|
3107
|
-
std::set<std::string>* resource_names_failed) {
|
3108
|
-
std::vector<grpc_error*> errors;
|
3109
|
-
// Get the resources from the response.
|
3110
|
-
size_t size;
|
3111
|
-
const google_protobuf_Any* const* resources =
|
3112
|
-
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
3113
|
-
for (size_t i = 0; i < size; ++i) {
|
3114
|
-
// Check the type_url of the resource.
|
3115
|
-
absl::string_view type_url =
|
3116
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
3117
|
-
if (!IsEds(type_url)) {
|
3118
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3119
|
-
absl::StrCat("resource index ", i, ": Resource is not EDS.")
|
3120
|
-
.c_str()));
|
3121
|
-
continue;
|
3122
|
-
}
|
3123
|
-
// Get the cluster_load_assignment.
|
3124
|
-
upb_strview encoded_cluster_load_assignment =
|
3125
|
-
google_protobuf_Any_value(resources[i]);
|
3126
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment* cluster_load_assignment =
|
3127
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
|
3128
|
-
encoded_cluster_load_assignment.data,
|
3129
|
-
encoded_cluster_load_assignment.size, context.arena);
|
3130
|
-
if (cluster_load_assignment == nullptr) {
|
3131
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3132
|
-
absl::StrCat("resource index ", i,
|
3133
|
-
": Can't parse cluster_load_assignment.")
|
3134
|
-
.c_str()));
|
3135
|
-
continue;
|
3136
|
-
}
|
3137
|
-
MaybeLogClusterLoadAssignment(context, cluster_load_assignment);
|
3138
|
-
// Check the EDS service name. Ignore unexpected names.
|
3139
|
-
std::string eds_service_name = UpbStringToStdString(
|
3140
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(
|
3141
|
-
cluster_load_assignment));
|
3142
|
-
if (expected_eds_service_names.find(eds_service_name) ==
|
3143
|
-
expected_eds_service_names.end()) {
|
3144
|
-
continue;
|
3145
|
-
}
|
3146
|
-
// Fail on duplicate resources.
|
3147
|
-
if (eds_update_map->find(eds_service_name) != eds_update_map->end()) {
|
3148
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3149
|
-
absl::StrCat("duplicate resource name \"", eds_service_name, "\"")
|
3150
|
-
.c_str()));
|
3151
|
-
resource_names_failed->insert(eds_service_name);
|
3152
|
-
continue;
|
3153
|
-
}
|
3154
|
-
// Serialize into JSON and store it in the EdsUpdateMap
|
3155
|
-
XdsApi::EdsResourceData& eds_resource_data =
|
3156
|
-
(*eds_update_map)[eds_service_name];
|
3157
|
-
XdsApi::EdsUpdate& eds_update = eds_resource_data.resource;
|
3158
|
-
eds_resource_data.serialized_proto =
|
3159
|
-
UpbStringToStdString(encoded_cluster_load_assignment);
|
3160
|
-
// Get the endpoints.
|
3161
|
-
size_t locality_size;
|
3162
|
-
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
3163
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
3164
|
-
cluster_load_assignment, &locality_size);
|
3165
|
-
grpc_error* error = GRPC_ERROR_NONE;
|
3166
|
-
for (size_t j = 0; j < locality_size; ++j) {
|
3167
|
-
size_t priority;
|
3168
|
-
XdsApi::EdsUpdate::Priority::Locality locality;
|
3169
|
-
error = LocalityParse(endpoints[j], &locality, &priority);
|
3170
|
-
if (error != GRPC_ERROR_NONE) break;
|
3171
|
-
// Filter out locality with weight 0.
|
3172
|
-
if (locality.lb_weight == 0) continue;
|
3173
|
-
// Make sure prorities is big enough. Note that they might not
|
3174
|
-
// arrive in priority order.
|
3175
|
-
while (eds_update.priorities.size() < priority + 1) {
|
3176
|
-
eds_update.priorities.emplace_back();
|
3177
|
-
}
|
3178
|
-
eds_update.priorities[priority].localities.emplace(locality.name.get(),
|
3179
|
-
std::move(locality));
|
3180
|
-
}
|
3181
|
-
if (error != GRPC_ERROR_NONE) {
|
3182
|
-
errors.push_back(grpc_error_add_child(
|
3183
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3184
|
-
absl::StrCat(eds_service_name, ": locality validation error")
|
3185
|
-
.c_str()),
|
3186
|
-
error));
|
3187
|
-
resource_names_failed->insert(eds_service_name);
|
3188
|
-
continue;
|
3189
|
-
}
|
3190
|
-
for (const auto& priority : eds_update.priorities) {
|
3191
|
-
if (priority.localities.empty()) {
|
3192
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3193
|
-
absl::StrCat(eds_service_name, ": sparse priority list").c_str()));
|
3194
|
-
resource_names_failed->insert(eds_service_name);
|
3195
|
-
continue;
|
3196
|
-
}
|
3197
|
-
}
|
3198
|
-
// Get the drop config.
|
3199
|
-
eds_update.drop_config = MakeRefCounted<XdsApi::EdsUpdate::DropConfig>();
|
3200
|
-
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
|
3201
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
|
3202
|
-
cluster_load_assignment);
|
3203
|
-
if (policy != nullptr) {
|
3204
|
-
size_t drop_size;
|
3205
|
-
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
|
3206
|
-
drop_overload =
|
3207
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
|
3208
|
-
policy, &drop_size);
|
3209
|
-
for (size_t j = 0; j < drop_size; ++j) {
|
3210
|
-
error =
|
3211
|
-
DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
|
3212
|
-
if (error != GRPC_ERROR_NONE) break;
|
3213
|
-
}
|
3214
|
-
if (error != GRPC_ERROR_NONE) {
|
3215
|
-
errors.push_back(grpc_error_add_child(
|
3216
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
3217
|
-
absl::StrCat(eds_service_name, ": drop config validation error")
|
3218
|
-
.c_str()),
|
3219
|
-
error));
|
3220
|
-
resource_names_failed->insert(eds_service_name);
|
3221
|
-
continue;
|
3222
|
-
}
|
3223
|
-
}
|
3224
|
-
}
|
3225
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS response", &errors);
|
3226
|
-
}
|
3227
|
-
|
3228
|
-
std::string TypeUrlInternalToExternal(absl::string_view type_url) {
|
3229
|
-
if (type_url == kLdsV2TypeUrl) {
|
3230
|
-
return XdsApi::kLdsTypeUrl;
|
3231
|
-
} else if (type_url == kRdsV2TypeUrl) {
|
3232
|
-
return XdsApi::kRdsTypeUrl;
|
3233
|
-
} else if (type_url == kCdsV2TypeUrl) {
|
3234
|
-
return XdsApi::kCdsTypeUrl;
|
3235
|
-
} else if (type_url == kEdsV2TypeUrl) {
|
3236
|
-
return XdsApi::kEdsTypeUrl;
|
3237
|
-
}
|
3238
|
-
return std::string(type_url);
|
3239
|
-
}
|
3240
|
-
|
3241
|
-
template <typename UpdateMap>
|
3242
|
-
void MoveUpdatesToFailedSet(UpdateMap* update_map,
|
3243
|
-
std::set<std::string>* resource_names_failed) {
|
3244
|
-
for (const auto& p : *update_map) {
|
3245
|
-
resource_names_failed->insert(p.first);
|
3246
|
-
}
|
3247
|
-
update_map->clear();
|
3248
|
-
}
|
3249
|
-
|
3250
|
-
} // namespace
|
3251
|
-
|
3252
|
-
XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
3253
|
-
const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
|
3254
|
-
const std::set<absl::string_view>& expected_listener_names,
|
3255
|
-
const std::set<absl::string_view>& expected_route_configuration_names,
|
3256
|
-
const std::set<absl::string_view>& expected_cluster_names,
|
3257
|
-
const std::set<absl::string_view>& expected_eds_service_names) {
|
3258
|
-
AdsParseResult result;
|
357
|
+
absl::Status XdsApi::ParseAdsResponse(const XdsBootstrap::XdsServer& server,
|
358
|
+
const grpc_slice& encoded_response,
|
359
|
+
AdsResponseParserInterface* parser) {
|
3259
360
|
upb::Arena arena;
|
3260
|
-
const
|
3261
|
-
|
361
|
+
const XdsEncodingContext context = {client_,
|
362
|
+
server,
|
363
|
+
tracer_,
|
364
|
+
symtab_->ptr(),
|
365
|
+
arena.ptr(),
|
366
|
+
server.ShouldUseV3(),
|
367
|
+
certificate_provider_definition_map_};
|
3262
368
|
// Decode the response.
|
3263
369
|
const envoy_service_discovery_v3_DiscoveryResponse* response =
|
3264
370
|
envoy_service_discovery_v3_DiscoveryResponse_parse(
|
3265
371
|
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
|
3266
372
|
GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
|
3267
|
-
// If decoding fails,
|
373
|
+
// If decoding fails, report a fatal error and return.
|
3268
374
|
if (response == nullptr) {
|
3269
|
-
|
3270
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode DiscoveryResponse.");
|
3271
|
-
return result;
|
375
|
+
return absl::InvalidArgumentError("Can't decode DiscoveryResponse.");
|
3272
376
|
}
|
3273
377
|
MaybeLogDiscoveryResponse(context, response);
|
3274
|
-
//
|
3275
|
-
|
3276
|
-
|
3277
|
-
|
378
|
+
// Report the type_url, version, nonce, and number of resources to the parser.
|
379
|
+
AdsResponseParserInterface::AdsResponseFields fields;
|
380
|
+
fields.type_url = std::string(absl::StripPrefix(
|
381
|
+
UpbStringToAbsl(
|
382
|
+
envoy_service_discovery_v3_DiscoveryResponse_type_url(response)),
|
383
|
+
"type.googleapis.com/"));
|
384
|
+
fields.version = UpbStringToStdString(
|
3278
385
|
envoy_service_discovery_v3_DiscoveryResponse_version_info(response));
|
3279
|
-
|
386
|
+
fields.nonce = UpbStringToStdString(
|
3280
387
|
envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
|
3281
|
-
|
3282
|
-
|
3283
|
-
|
3284
|
-
|
3285
|
-
|
3286
|
-
|
3287
|
-
|
3288
|
-
|
3289
|
-
|
3290
|
-
|
3291
|
-
|
3292
|
-
|
3293
|
-
|
3294
|
-
|
3295
|
-
|
3296
|
-
|
3297
|
-
|
3298
|
-
} else if (IsCds(result.type_url)) {
|
3299
|
-
result.parse_error =
|
3300
|
-
CdsResponseParse(context, response, expected_cluster_names,
|
3301
|
-
&result.cds_update_map, &result.resource_names_failed);
|
3302
|
-
if (result.parse_error != GRPC_ERROR_NONE) {
|
3303
|
-
MoveUpdatesToFailedSet(&result.cds_update_map,
|
3304
|
-
&result.resource_names_failed);
|
3305
|
-
}
|
3306
|
-
} else if (IsEds(result.type_url)) {
|
3307
|
-
result.parse_error =
|
3308
|
-
EdsResponseParse(context, response, expected_eds_service_names,
|
3309
|
-
&result.eds_update_map, &result.resource_names_failed);
|
3310
|
-
if (result.parse_error != GRPC_ERROR_NONE) {
|
3311
|
-
MoveUpdatesToFailedSet(&result.eds_update_map,
|
3312
|
-
&result.resource_names_failed);
|
3313
|
-
}
|
3314
|
-
}
|
3315
|
-
return result;
|
388
|
+
size_t num_resources;
|
389
|
+
const google_protobuf_Any* const* resources =
|
390
|
+
envoy_service_discovery_v3_DiscoveryResponse_resources(response,
|
391
|
+
&num_resources);
|
392
|
+
fields.num_resources = num_resources;
|
393
|
+
absl::Status status = parser->ProcessAdsResponseFields(std::move(fields));
|
394
|
+
if (!status.ok()) return status;
|
395
|
+
// Process each resource.
|
396
|
+
for (size_t i = 0; i < num_resources; ++i) {
|
397
|
+
absl::string_view type_url = absl::StripPrefix(
|
398
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i])),
|
399
|
+
"type.googleapis.com/");
|
400
|
+
absl::string_view serialized_resource =
|
401
|
+
UpbStringToAbsl(google_protobuf_Any_value(resources[i]));
|
402
|
+
parser->ParseResource(context, i, type_url, serialized_resource);
|
403
|
+
}
|
404
|
+
return absl::OkStatus();
|
3316
405
|
}
|
3317
406
|
|
3318
407
|
namespace {
|
3319
408
|
|
3320
409
|
void MaybeLogLrsRequest(
|
3321
|
-
const
|
410
|
+
const XdsEncodingContext& context,
|
3322
411
|
const envoy_service_load_stats_v3_LoadStatsRequest* request) {
|
3323
412
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
3324
413
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
3325
|
-
const
|
414
|
+
const upb_MessageDef* msg_type =
|
3326
415
|
envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef(context.symtab);
|
3327
416
|
char buf[10240];
|
3328
|
-
|
417
|
+
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf));
|
3329
418
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s",
|
3330
419
|
context.client, buf);
|
3331
420
|
}
|
3332
421
|
}
|
3333
422
|
|
3334
423
|
grpc_slice SerializeLrsRequest(
|
3335
|
-
const
|
424
|
+
const XdsEncodingContext& context,
|
3336
425
|
const envoy_service_load_stats_v3_LoadStatsRequest* request) {
|
3337
426
|
size_t output_length;
|
3338
427
|
char* output = envoy_service_load_stats_v3_LoadStatsRequest_serialize(
|
@@ -3345,8 +434,13 @@ grpc_slice SerializeLrsRequest(
|
|
3345
434
|
grpc_slice XdsApi::CreateLrsInitialRequest(
|
3346
435
|
const XdsBootstrap::XdsServer& server) {
|
3347
436
|
upb::Arena arena;
|
3348
|
-
const
|
3349
|
-
|
437
|
+
const XdsEncodingContext context = {client_,
|
438
|
+
server,
|
439
|
+
tracer_,
|
440
|
+
symtab_->ptr(),
|
441
|
+
arena.ptr(),
|
442
|
+
server.ShouldUseV3(),
|
443
|
+
certificate_provider_definition_map_};
|
3350
444
|
// Create a request.
|
3351
445
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
3352
446
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -3354,9 +448,11 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
|
|
3354
448
|
envoy_config_core_v3_Node* node_msg =
|
3355
449
|
envoy_service_load_stats_v3_LoadStatsRequest_mutable_node(request,
|
3356
450
|
arena.ptr());
|
3357
|
-
PopulateNode(context, node_, build_version_, user_agent_name_,
|
451
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
452
|
+
user_agent_version_, node_msg);
|
3358
453
|
envoy_config_core_v3_Node_add_client_features(
|
3359
|
-
node_msg,
|
454
|
+
node_msg,
|
455
|
+
upb_StringView_FromString("envoy.lrs.supports_send_all_clusters"),
|
3360
456
|
arena.ptr());
|
3361
457
|
MaybeLogLrsRequest(context, request);
|
3362
458
|
return SerializeLrsRequest(context, request);
|
@@ -3365,7 +461,7 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
|
|
3365
461
|
namespace {
|
3366
462
|
|
3367
463
|
void LocalityStatsPopulate(
|
3368
|
-
const
|
464
|
+
const XdsEncodingContext& context,
|
3369
465
|
envoy_config_endpoint_v3_UpstreamLocalityStats* output,
|
3370
466
|
const XdsLocalityName& locality_name,
|
3371
467
|
const XdsClusterLocalityStats::Snapshot& snapshot) {
|
@@ -3415,8 +511,16 @@ void LocalityStatsPopulate(
|
|
3415
511
|
grpc_slice XdsApi::CreateLrsRequest(
|
3416
512
|
ClusterLoadReportMap cluster_load_report_map) {
|
3417
513
|
upb::Arena arena;
|
3418
|
-
|
3419
|
-
|
514
|
+
// The xDS server info is not actually needed here, so we seed it with an
|
515
|
+
// empty value.
|
516
|
+
XdsBootstrap::XdsServer empty_server;
|
517
|
+
const XdsEncodingContext context = {client_,
|
518
|
+
empty_server,
|
519
|
+
tracer_,
|
520
|
+
symtab_->ptr(),
|
521
|
+
arena.ptr(),
|
522
|
+
false,
|
523
|
+
certificate_provider_definition_map_};
|
3420
524
|
// Create a request.
|
3421
525
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
3422
526
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -3464,8 +568,7 @@ grpc_slice XdsApi::CreateLrsRequest(
|
|
3464
568
|
envoy_config_endpoint_v3_ClusterStats_set_total_dropped_requests(
|
3465
569
|
cluster_stats, total_dropped_requests);
|
3466
570
|
// Set real load report interval.
|
3467
|
-
gpr_timespec timespec =
|
3468
|
-
grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
|
571
|
+
gpr_timespec timespec = load_report.load_report_interval.as_timespec();
|
3469
572
|
google_protobuf_Duration* load_report_interval =
|
3470
573
|
envoy_config_endpoint_v3_ClusterStats_mutable_load_report_interval(
|
3471
574
|
cluster_stats, arena.ptr());
|
@@ -3476,10 +579,10 @@ grpc_slice XdsApi::CreateLrsRequest(
|
|
3476
579
|
return SerializeLrsRequest(context, request);
|
3477
580
|
}
|
3478
581
|
|
3479
|
-
|
3480
|
-
|
3481
|
-
|
3482
|
-
|
582
|
+
grpc_error_handle XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
583
|
+
bool* send_all_clusters,
|
584
|
+
std::set<std::string>* cluster_names,
|
585
|
+
Duration* load_reporting_interval) {
|
3483
586
|
upb::Arena arena;
|
3484
587
|
// Decode the response.
|
3485
588
|
const envoy_service_load_stats_v3_LoadStatsResponse* decoded_response =
|
@@ -3497,7 +600,7 @@ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
|
3497
600
|
} else {
|
3498
601
|
// Store the cluster names.
|
3499
602
|
size_t size;
|
3500
|
-
const
|
603
|
+
const upb_StringView* clusters =
|
3501
604
|
envoy_service_load_stats_v3_LoadStatsResponse_clusters(decoded_response,
|
3502
605
|
&size);
|
3503
606
|
for (size_t i = 0; i < size; ++i) {
|
@@ -3508,237 +611,24 @@ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
|
3508
611
|
const google_protobuf_Duration* load_reporting_interval_duration =
|
3509
612
|
envoy_service_load_stats_v3_LoadStatsResponse_load_reporting_interval(
|
3510
613
|
decoded_response);
|
3511
|
-
|
614
|
+
*load_reporting_interval = Duration::FromSecondsAndNanoseconds(
|
3512
615
|
google_protobuf_Duration_seconds(load_reporting_interval_duration),
|
3513
|
-
google_protobuf_Duration_nanos(load_reporting_interval_duration)
|
3514
|
-
GPR_TIMESPAN};
|
3515
|
-
*load_reporting_interval = gpr_time_to_millis(timespec);
|
616
|
+
google_protobuf_Duration_nanos(load_reporting_interval_duration));
|
3516
617
|
return GRPC_ERROR_NONE;
|
3517
618
|
}
|
3518
619
|
|
3519
620
|
namespace {
|
3520
|
-
|
3521
|
-
|
621
|
+
|
622
|
+
google_protobuf_Timestamp* EncodeTimestamp(const XdsEncodingContext& context,
|
623
|
+
Timestamp value) {
|
3522
624
|
google_protobuf_Timestamp* timestamp =
|
3523
625
|
google_protobuf_Timestamp_new(context.arena);
|
3524
|
-
gpr_timespec timespec =
|
626
|
+
gpr_timespec timespec = value.as_timespec(GPR_CLOCK_REALTIME);
|
3525
627
|
google_protobuf_Timestamp_set_seconds(timestamp, timespec.tv_sec);
|
3526
628
|
google_protobuf_Timestamp_set_nanos(timestamp, timespec.tv_nsec);
|
3527
629
|
return timestamp;
|
3528
630
|
}
|
3529
631
|
|
3530
|
-
envoy_admin_v3_UpdateFailureState* CreateUpdateFailureStateUpb(
|
3531
|
-
const EncodingContext& context,
|
3532
|
-
const XdsApi::ResourceMetadata* resource_metadata) {
|
3533
|
-
auto* update_failure_state =
|
3534
|
-
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
3535
|
-
envoy_admin_v3_UpdateFailureState_set_details(
|
3536
|
-
update_failure_state,
|
3537
|
-
StdStringToUpbString(resource_metadata->failed_details));
|
3538
|
-
envoy_admin_v3_UpdateFailureState_set_version_info(
|
3539
|
-
update_failure_state,
|
3540
|
-
StdStringToUpbString(resource_metadata->failed_version));
|
3541
|
-
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
3542
|
-
update_failure_state,
|
3543
|
-
GrpcMillisToTimestamp(context, resource_metadata->failed_update_time));
|
3544
|
-
return update_failure_state;
|
3545
|
-
}
|
3546
|
-
|
3547
|
-
void DumpLdsConfig(const EncodingContext& context,
|
3548
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3549
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3550
|
-
upb_strview kLdsTypeUrlUpb = upb_strview_makez(XdsApi::kLdsTypeUrl);
|
3551
|
-
auto* listener_config_dump =
|
3552
|
-
envoy_service_status_v3_PerXdsConfig_mutable_listener_config(
|
3553
|
-
per_xds_config, context.arena);
|
3554
|
-
envoy_admin_v3_ListenersConfigDump_set_version_info(
|
3555
|
-
listener_config_dump,
|
3556
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3557
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3558
|
-
absl::string_view name = p.first;
|
3559
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3560
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3561
|
-
auto* dynamic_listener =
|
3562
|
-
envoy_admin_v3_ListenersConfigDump_add_dynamic_listeners(
|
3563
|
-
listener_config_dump, context.arena);
|
3564
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_name(
|
3565
|
-
dynamic_listener, name_upb);
|
3566
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_client_status(
|
3567
|
-
dynamic_listener, meta->client_status);
|
3568
|
-
if (!meta->serialized_proto.empty()) {
|
3569
|
-
// Set in-effective listeners
|
3570
|
-
auto* dynamic_listener_state =
|
3571
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_mutable_active_state(
|
3572
|
-
dynamic_listener, context.arena);
|
3573
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_version_info(
|
3574
|
-
dynamic_listener_state, StdStringToUpbString(meta->version));
|
3575
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_last_updated(
|
3576
|
-
dynamic_listener_state,
|
3577
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3578
|
-
auto* listener_any =
|
3579
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_mutable_listener(
|
3580
|
-
dynamic_listener_state, context.arena);
|
3581
|
-
google_protobuf_Any_set_type_url(listener_any, kLdsTypeUrlUpb);
|
3582
|
-
google_protobuf_Any_set_value(
|
3583
|
-
listener_any, StdStringToUpbString(meta->serialized_proto));
|
3584
|
-
}
|
3585
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3586
|
-
// Set error_state if NACKED
|
3587
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_error_state(
|
3588
|
-
dynamic_listener, CreateUpdateFailureStateUpb(context, meta));
|
3589
|
-
}
|
3590
|
-
}
|
3591
|
-
}
|
3592
|
-
|
3593
|
-
void DumpRdsConfig(const EncodingContext& context,
|
3594
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3595
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3596
|
-
upb_strview kRdsTypeUrlUpb = upb_strview_makez(XdsApi::kRdsTypeUrl);
|
3597
|
-
auto* route_config_dump =
|
3598
|
-
envoy_service_status_v3_PerXdsConfig_mutable_route_config(per_xds_config,
|
3599
|
-
context.arena);
|
3600
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3601
|
-
absl::string_view name = p.first;
|
3602
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3603
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3604
|
-
auto* dynamic_route_config =
|
3605
|
-
envoy_admin_v3_RoutesConfigDump_add_dynamic_route_configs(
|
3606
|
-
route_config_dump, context.arena);
|
3607
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_client_status(
|
3608
|
-
dynamic_route_config, meta->client_status);
|
3609
|
-
auto* route_config_any =
|
3610
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_mutable_route_config(
|
3611
|
-
dynamic_route_config, context.arena);
|
3612
|
-
if (!meta->serialized_proto.empty()) {
|
3613
|
-
// Set in-effective route configs
|
3614
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_version_info(
|
3615
|
-
dynamic_route_config, StdStringToUpbString(meta->version));
|
3616
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_last_updated(
|
3617
|
-
dynamic_route_config,
|
3618
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3619
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3620
|
-
google_protobuf_Any_set_value(
|
3621
|
-
route_config_any, StdStringToUpbString(meta->serialized_proto));
|
3622
|
-
} else {
|
3623
|
-
// If there isn't a working route config, we still need to print the
|
3624
|
-
// name.
|
3625
|
-
auto* route_config =
|
3626
|
-
envoy_config_route_v3_RouteConfiguration_new(context.arena);
|
3627
|
-
envoy_config_route_v3_RouteConfiguration_set_name(route_config, name_upb);
|
3628
|
-
size_t length;
|
3629
|
-
char* bytes = envoy_config_route_v3_RouteConfiguration_serialize(
|
3630
|
-
route_config, context.arena, &length);
|
3631
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3632
|
-
google_protobuf_Any_set_value(route_config_any,
|
3633
|
-
upb_strview_make(bytes, length));
|
3634
|
-
}
|
3635
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3636
|
-
// Set error_state if NACKED
|
3637
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_error_state(
|
3638
|
-
dynamic_route_config, CreateUpdateFailureStateUpb(context, meta));
|
3639
|
-
}
|
3640
|
-
}
|
3641
|
-
}
|
3642
|
-
|
3643
|
-
void DumpCdsConfig(const EncodingContext& context,
|
3644
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3645
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3646
|
-
upb_strview kCdsTypeUrlUpb = upb_strview_makez(XdsApi::kCdsTypeUrl);
|
3647
|
-
auto* cluster_config_dump =
|
3648
|
-
envoy_service_status_v3_PerXdsConfig_mutable_cluster_config(
|
3649
|
-
per_xds_config, context.arena);
|
3650
|
-
envoy_admin_v3_ClustersConfigDump_set_version_info(
|
3651
|
-
cluster_config_dump,
|
3652
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3653
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3654
|
-
absl::string_view name = p.first;
|
3655
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3656
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3657
|
-
auto* dynamic_cluster =
|
3658
|
-
envoy_admin_v3_ClustersConfigDump_add_dynamic_active_clusters(
|
3659
|
-
cluster_config_dump, context.arena);
|
3660
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_client_status(
|
3661
|
-
dynamic_cluster, meta->client_status);
|
3662
|
-
auto* cluster_any =
|
3663
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_mutable_cluster(
|
3664
|
-
dynamic_cluster, context.arena);
|
3665
|
-
if (!meta->serialized_proto.empty()) {
|
3666
|
-
// Set in-effective clusters
|
3667
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_version_info(
|
3668
|
-
dynamic_cluster, StdStringToUpbString(meta->version));
|
3669
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_last_updated(
|
3670
|
-
dynamic_cluster, GrpcMillisToTimestamp(context, meta->update_time));
|
3671
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3672
|
-
google_protobuf_Any_set_value(
|
3673
|
-
cluster_any, StdStringToUpbString(meta->serialized_proto));
|
3674
|
-
} else {
|
3675
|
-
// If there isn't a working cluster, we still need to print the name.
|
3676
|
-
auto* cluster = envoy_config_cluster_v3_Cluster_new(context.arena);
|
3677
|
-
envoy_config_cluster_v3_Cluster_set_name(cluster, name_upb);
|
3678
|
-
size_t length;
|
3679
|
-
char* bytes = envoy_config_cluster_v3_Cluster_serialize(
|
3680
|
-
cluster, context.arena, &length);
|
3681
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3682
|
-
google_protobuf_Any_set_value(cluster_any,
|
3683
|
-
upb_strview_make(bytes, length));
|
3684
|
-
}
|
3685
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3686
|
-
// Set error_state if NACKED
|
3687
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_error_state(
|
3688
|
-
dynamic_cluster, CreateUpdateFailureStateUpb(context, meta));
|
3689
|
-
}
|
3690
|
-
}
|
3691
|
-
}
|
3692
|
-
|
3693
|
-
void DumpEdsConfig(const EncodingContext& context,
|
3694
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3695
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3696
|
-
upb_strview kEdsTypeUrlUpb = upb_strview_makez(XdsApi::kEdsTypeUrl);
|
3697
|
-
auto* endpoint_config_dump =
|
3698
|
-
envoy_service_status_v3_PerXdsConfig_mutable_endpoint_config(
|
3699
|
-
per_xds_config, context.arena);
|
3700
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3701
|
-
absl::string_view name = p.first;
|
3702
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3703
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3704
|
-
auto* dynamic_endpoint =
|
3705
|
-
envoy_admin_v3_EndpointsConfigDump_add_dynamic_endpoint_configs(
|
3706
|
-
endpoint_config_dump, context.arena);
|
3707
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_client_status(
|
3708
|
-
dynamic_endpoint, meta->client_status);
|
3709
|
-
auto* endpoint_any =
|
3710
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_mutable_endpoint_config(
|
3711
|
-
dynamic_endpoint, context.arena);
|
3712
|
-
if (!meta->serialized_proto.empty()) {
|
3713
|
-
// Set in-effective endpoints
|
3714
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_version_info(
|
3715
|
-
dynamic_endpoint, StdStringToUpbString(meta->version));
|
3716
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_last_updated(
|
3717
|
-
dynamic_endpoint, GrpcMillisToTimestamp(context, meta->update_time));
|
3718
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3719
|
-
google_protobuf_Any_set_value(
|
3720
|
-
endpoint_any, StdStringToUpbString(meta->serialized_proto));
|
3721
|
-
} else {
|
3722
|
-
// If there isn't a working endpoint, we still need to print the name.
|
3723
|
-
auto* cluster_load_assignment =
|
3724
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_new(context.arena);
|
3725
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_set_cluster_name(
|
3726
|
-
cluster_load_assignment, name_upb);
|
3727
|
-
size_t length;
|
3728
|
-
char* bytes = envoy_config_endpoint_v3_ClusterLoadAssignment_serialize(
|
3729
|
-
cluster_load_assignment, context.arena, &length);
|
3730
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3731
|
-
google_protobuf_Any_set_value(endpoint_any,
|
3732
|
-
upb_strview_make(bytes, length));
|
3733
|
-
}
|
3734
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3735
|
-
// Set error_state if NACKED
|
3736
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_error_state(
|
3737
|
-
dynamic_endpoint, CreateUpdateFailureStateUpb(context, meta));
|
3738
|
-
}
|
3739
|
-
}
|
3740
|
-
}
|
3741
|
-
|
3742
632
|
} // namespace
|
3743
633
|
|
3744
634
|
std::string XdsApi::AssembleClientConfig(
|
@@ -3749,36 +639,65 @@ std::string XdsApi::AssembleClientConfig(
|
|
3749
639
|
// Fill-in the node information
|
3750
640
|
auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config,
|
3751
641
|
arena.ptr());
|
3752
|
-
|
3753
|
-
|
3754
|
-
|
3755
|
-
|
3756
|
-
|
642
|
+
// The xDS server info is not actually needed here, so we seed it with an
|
643
|
+
// empty value.
|
644
|
+
XdsBootstrap::XdsServer empty_server;
|
645
|
+
const XdsEncodingContext context = {client_,
|
646
|
+
empty_server,
|
647
|
+
tracer_,
|
648
|
+
symtab_->ptr(),
|
649
|
+
arena.ptr(),
|
650
|
+
true,
|
651
|
+
certificate_provider_definition_map_};
|
652
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
653
|
+
user_agent_version_, node);
|
654
|
+
// Dump each resource.
|
655
|
+
std::vector<std::string> type_url_storage;
|
656
|
+
for (const auto& p : resource_type_metadata_map) {
|
3757
657
|
absl::string_view type_url = p.first;
|
3758
|
-
const
|
3759
|
-
|
3760
|
-
|
3761
|
-
|
3762
|
-
|
3763
|
-
|
3764
|
-
|
3765
|
-
|
3766
|
-
|
3767
|
-
|
3768
|
-
|
3769
|
-
|
3770
|
-
|
3771
|
-
|
3772
|
-
|
3773
|
-
|
3774
|
-
|
3775
|
-
|
3776
|
-
|
3777
|
-
|
3778
|
-
|
3779
|
-
|
3780
|
-
|
3781
|
-
|
658
|
+
const ResourceMetadataMap& resource_metadata_map = p.second;
|
659
|
+
type_url_storage.emplace_back(
|
660
|
+
absl::StrCat("type.googleapis.com/", type_url));
|
661
|
+
for (const auto& q : resource_metadata_map) {
|
662
|
+
absl::string_view resource_name = q.first;
|
663
|
+
const ResourceMetadata& metadata = *q.second;
|
664
|
+
auto* entry =
|
665
|
+
envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
|
666
|
+
client_config, context.arena);
|
667
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
|
668
|
+
entry, StdStringToUpbString(type_url_storage.back()));
|
669
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
|
670
|
+
entry, StdStringToUpbString(resource_name));
|
671
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
|
672
|
+
entry, metadata.client_status);
|
673
|
+
if (!metadata.serialized_proto.empty()) {
|
674
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_version_info(
|
675
|
+
entry, StdStringToUpbString(metadata.version));
|
676
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_last_updated(
|
677
|
+
entry, EncodeTimestamp(context, metadata.update_time));
|
678
|
+
auto* any_field =
|
679
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
|
680
|
+
entry, context.arena);
|
681
|
+
google_protobuf_Any_set_type_url(
|
682
|
+
any_field, StdStringToUpbString(type_url_storage.back()));
|
683
|
+
google_protobuf_Any_set_value(
|
684
|
+
any_field, StdStringToUpbString(metadata.serialized_proto));
|
685
|
+
}
|
686
|
+
if (metadata.client_status == XdsApi::ResourceMetadata::NACKED) {
|
687
|
+
auto* update_failure_state =
|
688
|
+
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
689
|
+
envoy_admin_v3_UpdateFailureState_set_details(
|
690
|
+
update_failure_state,
|
691
|
+
StdStringToUpbString(metadata.failed_details));
|
692
|
+
envoy_admin_v3_UpdateFailureState_set_version_info(
|
693
|
+
update_failure_state,
|
694
|
+
StdStringToUpbString(metadata.failed_version));
|
695
|
+
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
696
|
+
update_failure_state,
|
697
|
+
EncodeTimestamp(context, metadata.failed_update_time));
|
698
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
|
699
|
+
entry, update_failure_state);
|
700
|
+
}
|
3782
701
|
}
|
3783
702
|
}
|
3784
703
|
// Serialize the upb message to bytes
|