grpc 1.34.0 → 1.42.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 +978 -2868
- data/etc/roots.pem +592 -899
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -1
- data/include/grpc/compression.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 +375 -0
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/fork.h +1 -1
- data/include/grpc/grpc.h +49 -4
- data/include/grpc/grpc_posix.h +5 -2
- data/include/grpc/grpc_security.h +127 -14
- data/include/grpc/grpc_security_constants.h +16 -0
- 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 +6 -0
- data/include/grpc/impl/codegen/byte_buffer.h +3 -1
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -0
- 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 +49 -25
- data/include/grpc/impl/codegen/log.h +2 -2
- data/include/grpc/impl/codegen/port_platform.h +81 -22
- data/include/grpc/impl/codegen/propagation_bits.h +2 -0
- data/include/grpc/impl/codegen/slice.h +2 -0
- 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 +6 -0
- data/include/grpc/module.modulemap +14 -14
- data/include/grpc/slice.h +1 -1
- data/include/grpc/slice_buffer.h +3 -3
- 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 +4 -4
- 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 +9 -9
- data/src/core/ext/filters/census/grpc_context.cc +1 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +20 -24
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
- 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 +2009 -3145
- data/src/core/ext/filters/client_channel/client_channel.h +559 -60
- 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 +18 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +33 -9
- data/src/core/ext/filters/client_channel/connector.h +19 -19
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -11
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +53 -50
- data/src/core/ext/filters/client_channel/health/health_check_client.h +35 -33
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +37 -34
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.cc +36 -20
- 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 -21
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +246 -166
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- 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_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +37 -30
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +53 -55
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +16 -18
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +385 -135
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +57 -71
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +43 -64
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1362 -0
- data/src/core/ext/filters/client_channel/lb_policy.cc +6 -17
- data/src/core/ext/filters/client_channel/lb_policy.h +93 -93
- 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/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +76 -88
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -33
- 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 +10 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +26 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +473 -74
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +27 -2
- 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 +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +45 -35
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +43 -46
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +22 -35
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +466 -254
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +4 -15
- data/src/core/ext/filters/client_channel/resolver_factory.h +8 -6
- data/src/core/ext/filters/client_channel/resolver_registry.cc +43 -44
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -252
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +25 -54
- data/src/core/ext/filters/client_channel/retry_filter.cc +2573 -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 +316 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +20 -49
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
- data/src/core/ext/filters/client_channel/server_address.cc +10 -1
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +54 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +179 -329
- data/src/core/ext/filters/client_channel/subchannel.h +101 -158
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -10
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +47 -223
- 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 +33 -34
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +503 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +181 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +77 -69
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -68
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -35
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +29 -30
- data/src/core/ext/filters/http/server/http_server_filter.cc +104 -95
- data/src/core/ext/filters/max_age/max_age_filter.cc +71 -68
- data/src/core/ext/filters/message_size/message_size_filter.cc +43 -41
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +17 -16
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +11 -10
- data/src/core/ext/{filters/client_channel → service_config}/service_config_call_data.h +23 -19
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +9 -9
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +15 -10
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +37 -23
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +42 -35
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +32 -16
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +51 -62
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +664 -236
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -5
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +25 -11
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +61 -22
- 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 +264 -223
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +5 -6
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +59 -40
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +28 -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 +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -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 +9 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -19
- 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 +311 -665
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +240 -70
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +865 -1172
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +100 -81
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
- data/src/core/{lib/transport/authority_override.h → ext/transport/chttp2/transport/hpack_utils.h} +8 -12
- data/src/core/ext/transport/chttp2/transport/internal.h +40 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +156 -286
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
- 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 +69 -54
- data/src/core/ext/transport/inproc/inproc_transport.cc +204 -160
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1591 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +48 -49
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +245 -56
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1554 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +66 -21
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +178 -142
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +795 -314
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +21 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +25 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +70 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +29 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +138 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +23 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +147 -75
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +522 -96
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +27 -27
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +116 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +63 -63
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +228 -63
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +57 -56
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +244 -98
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +25 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +125 -57
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +533 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +3 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +17 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +15 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +56 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +16 -17
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +81 -40
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +56 -22
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +223 -34
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +137 -72
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +19 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +48 -38
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +276 -103
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +51 -45
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +203 -62
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +55 -22
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +153 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +550 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +51 -44
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +165 -43
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +35 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +148 -40
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +339 -279
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1466 -543
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +48 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +6 -7
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +32 -6
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +298 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +303 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +123 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +151 -112
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +693 -244
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +52 -32
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +231 -59
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +15 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +51 -28
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +45 -44
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +178 -74
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +58 -51
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +221 -135
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +2 -5
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +2 -5
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +9 -10
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +46 -19
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +2 -4
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +468 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +44 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +96 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +51 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +10 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +31 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +41 -4
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +96 -11
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +19 -19
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +77 -14
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +30 -5
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +41 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +2 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +62 -62
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +227 -84
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +86 -69
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +256 -72
- data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
- data/src/core/ext/upb-generated/google/api/http.upb.h +47 -10
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +154 -154
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +645 -320
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +44 -7
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +119 -10
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +18 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +19 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +63 -63
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +220 -87
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +36 -9
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +28 -3
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +146 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +41 -4
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +15 -2
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +2 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +17 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +15 -2
- data/src/core/ext/upb-generated/validate/validate.upb.c +243 -227
- data/src/core/ext/upb-generated/validate/validate.upb.h +626 -253
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +66 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +155 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +90 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +100 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +178 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +91 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -170
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +467 -429
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +12 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +156 -109
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +25 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +89 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +156 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +240 -168
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -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/substitution_format_string.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -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 +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +90 -63
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -122
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +136 -120
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -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 +31 -26
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -51
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +748 -681
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +435 -379
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +121 -91
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +182 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -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/metadata.upbdefs.c +14 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +100 -100
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -157
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -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 +2 -2
- data/src/core/ext/xds/certificate_provider_store.cc +10 -7
- data/src/core/ext/xds/certificate_provider_store.h +15 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +28 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -6
- data/src/core/ext/xds/xds_api.cc +2654 -808
- data/src/core/ext/xds/xds_api.h +460 -154
- data/src/core/ext/xds/xds_bootstrap.cc +139 -188
- data/src/core/ext/xds/xds_bootstrap.h +34 -18
- data/src/core/ext/xds/xds_certificate_provider.cc +237 -72
- data/src/core/ext/xds/xds_certificate_provider.h +104 -27
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +985 -429
- data/src/core/ext/xds/xds_client.h +100 -51
- data/src/core/ext/xds/xds_client_stats.cc +18 -16
- data/src/core/ext/xds/xds_client_stats.h +12 -11
- data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
- data/src/core/ext/xds/xds_http_filters.cc +116 -0
- data/src/core/ext/xds/xds_http_filters.h +133 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +544 -0
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +72 -68
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +20 -16
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +131 -15
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +37 -7
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_args.cc +34 -15
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack.cc +27 -12
- data/src/core/lib/channel/channel_stack.h +18 -10
- data/src/core/lib/channel/channel_stack_builder.cc +6 -16
- data/src/core/lib/channel/channel_stack_builder.h +1 -9
- data/src/core/lib/channel/channel_trace.cc +5 -4
- data/src/core/lib/channel/channel_trace.h +3 -2
- data/src/core/lib/channel/channelz.cc +162 -63
- data/src/core/lib/channel/channelz.h +62 -31
- data/src/core/lib/channel/channelz_registry.cc +22 -7
- data/src/core/lib/channel/channelz_registry.h +1 -2
- data/src/core/lib/channel/connected_channel.cc +6 -7
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/channel/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +13 -53
- data/src/core/lib/channel/handshaker.h +7 -25
- 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/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +11 -2
- data/src/core/lib/compression/algorithm_metadata.h +1 -0
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +11 -7
- data/src/core/lib/compression/compression_internal.cc +4 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +2 -2
- data/src/core/lib/compression/stream_compression.cc +2 -1
- data/src/core/lib/compression/stream_compression.h +3 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.cc +2 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/config/core_configuration.cc +96 -0
- data/src/core/lib/config/core_configuration.h +146 -0
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats.h +4 -3
- data/src/core/lib/debug/stats_data.cc +15 -14
- data/src/core/lib/debug/stats_data.h +14 -13
- data/src/core/lib/debug/trace.cc +1 -0
- data/src/core/lib/debug/trace.h +2 -1
- data/src/core/lib/event_engine/endpoint_config.cc +45 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -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 +7 -5
- 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 +61 -19
- data/src/core/lib/gpr/log_android.cc +3 -2
- data/src/core/lib/gpr/log_linux.cc +10 -5
- data/src/core/lib/gpr/log_posix.cc +9 -4
- data/src/core/lib/gpr/log_windows.cc +3 -1
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +24 -23
- data/src/core/lib/gpr/string.h +7 -8
- data/src/core/lib/gpr/sync.cc +6 -6
- data/src/core/lib/gpr/sync_abseil.cc +10 -12
- data/src/core/lib/gpr/sync_posix.cc +3 -3
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gpr/time.cc +15 -14
- data/src/core/lib/gpr/time_windows.cc +3 -2
- data/src/core/lib/gpr/tls.h +119 -40
- data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/arena.cc +2 -1
- data/src/core/lib/gprpp/arena.h +18 -7
- data/src/core/lib/gprpp/atomic_utils.h +47 -0
- data/src/core/lib/gprpp/bitset.h +188 -0
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +39 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +28 -29
- 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 +7 -7
- data/src/core/lib/gprpp/global_config_generic.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +9 -6
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/memory.h +9 -3
- data/src/core/lib/gprpp/mpscq.cc +9 -9
- data/src/core/lib/gprpp/mpscq.h +6 -5
- data/src/core/lib/gprpp/orphanable.h +6 -6
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +48 -34
- data/src/core/lib/gprpp/ref_counted_ptr.h +11 -1
- data/src/core/lib/gprpp/status_helper.cc +427 -0
- data/src/core/lib/gprpp/status_helper.h +194 -0
- data/src/core/lib/gprpp/sync.h +106 -43
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/thd_posix.cc +11 -6
- data/src/core/lib/gprpp/thd_windows.cc +7 -12
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/format_request.cc +1 -0
- data/src/core/lib/http/format_request.h +1 -0
- data/src/core/lib/http/httpcli.cc +203 -185
- data/src/core/lib/http/httpcli.h +5 -3
- data/src/core/lib/http/httpcli_security_connector.cc +19 -18
- data/src/core/lib/http/parser.cc +19 -20
- data/src/core/lib/http/parser.h +5 -4
- data/src/core/lib/iomgr/buffer_list.cc +10 -11
- data/src/core/lib/iomgr/buffer_list.h +6 -8
- data/src/core/lib/iomgr/call_combiner.cc +46 -21
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +6 -6
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +25 -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 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +27 -39
- data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
- 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 +15 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
- data/src/core/lib/iomgr/error.cc +277 -105
- data/src/core/lib/iomgr/error.h +280 -114
- 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 +7 -2
- data/src/core/lib/iomgr/ev_apple.cc +16 -13
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +53 -53
- data/src/core/lib/iomgr/ev_epollex_linux.cc +81 -81
- data/src/core/lib/iomgr/ev_poll_posix.cc +70 -68
- data/src/core/lib/iomgr/ev_posix.cc +13 -13
- 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 +173 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +104 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +42 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +88 -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 +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +114 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +293 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
- data/src/core/lib/iomgr/exec_ctx.cc +14 -11
- data/src/core/lib/iomgr/exec_ctx.h +21 -28
- 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 +5 -4
- data/src/core/lib/iomgr/executor.cc +19 -33
- data/src/core/lib/iomgr/executor.h +3 -3
- 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 +1 -0
- data/src/core/lib/iomgr/iomgr.cc +6 -4
- data/src/core/lib/iomgr/iomgr.h +3 -3
- data/src/core/lib/iomgr/iomgr_custom.cc +3 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -2
- 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 +3 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -3
- 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 +38 -15
- data/src/core/lib/iomgr/lockfree_event.h +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +2 -2
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +10 -11
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_set_custom.cc +2 -3
- data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -10
- data/src/core/lib/iomgr/python_util.h +4 -3
- data/src/core/lib/iomgr/resolve_address.cc +14 -9
- data/src/core/lib/iomgr/resolve_address.h +12 -10
- data/src/core/lib/iomgr/resolve_address_custom.cc +14 -13
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +10 -12
- data/src/core/lib/iomgr/resource_quota.cc +152 -62
- data/src/core/lib/iomgr/resource_quota.h +66 -17
- data/src/core/lib/iomgr/sockaddr.h +2 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +20 -6
- data/src/core/lib/iomgr/socket_mutator.h +27 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -27
- 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 +5 -3
- data/src/core/lib/iomgr/tcp_client.h +4 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -26
- data/src/core/lib/iomgr/tcp_client_custom.cc +19 -27
- data/src/core/lib/iomgr/tcp_client_posix.cc +56 -47
- data/src/core/lib/iomgr/tcp_client_posix.h +8 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +23 -14
- data/src/core/lib/iomgr/tcp_custom.cc +46 -55
- data/src/core/lib/iomgr/tcp_custom.h +15 -13
- data/src/core/lib/iomgr/tcp_posix.cc +119 -145
- data/src/core/lib/iomgr/tcp_posix.h +19 -12
- data/src/core/lib/iomgr/tcp_server.cc +9 -7
- data/src/core/lib/iomgr/tcp_server.h +18 -14
- data/src/core/lib/iomgr/tcp_server_custom.cc +63 -73
- data/src/core/lib/iomgr/tcp_server_posix.cc +49 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +22 -20
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +11 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +40 -36
- data/src/core/lib/iomgr/tcp_windows.cc +21 -40
- data/src/core/lib/iomgr/tcp_windows.h +4 -3
- data/src/core/lib/iomgr/timer.cc +1 -0
- data/src/core/lib/iomgr/timer.h +7 -3
- data/src/core/lib/iomgr/timer_custom.cc +7 -6
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +32 -62
- 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 +4 -4
- data/src/core/lib/iomgr/unix_sockets_posix.cc +21 -24
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
- 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 +4 -4
- data/src/core/lib/iomgr/work_serializer.h +18 -2
- data/src/core/lib/json/json.h +11 -1
- data/src/core/lib/json/json_reader.cc +14 -23
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +65 -115
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/matchers/matchers.cc +327 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/profiling/basic_timers.cc +8 -6
- data/src/core/lib/profiling/stap_timers.cc +2 -2
- data/src/core/lib/security/authorization/authorization_engine.h +13 -53
- 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 +126 -66
- data/src/core/lib/security/authorization/evaluate_args.h +47 -15
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +171 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
- data/src/core/lib/security/context/security_context.cc +15 -11
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- 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/composite/composite_credentials.cc +9 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.cc +16 -14
- data/src/core/lib/security/credentials/credentials.h +11 -5
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +404 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +81 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +20 -14
- data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +270 -54
- data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -12
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +26 -26
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- 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 +92 -31
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -7
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +34 -17
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +13 -5
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +15 -22
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +57 -66
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +11 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +10 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -10
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +12 -15
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +20 -21
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +382 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +5 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +2 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +3 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +20 -12
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +50 -17
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +35 -8
- 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 +4 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -10
- data/src/core/lib/security/security_connector/security_connector.cc +12 -6
- data/src/core/lib/security/security_connector/security_connector.h +10 -5
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +41 -14
- data/src/core/lib/security/security_connector/ssl_utils.h +16 -23
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +156 -113
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +67 -52
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +27 -21
- data/src/core/lib/security/transport/secure_endpoint.cc +10 -20
- data/src/core/lib/security/transport/secure_endpoint.h +1 -0
- data/src/core/lib/security/transport/security_handshaker.cc +158 -90
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +20 -16
- 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/slice/percent_encoding.cc +73 -30
- data/src/core/lib/slice/percent_encoding.h +29 -28
- data/src/core/lib/slice/slice.cc +14 -21
- data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
- data/src/core/lib/slice/slice_buffer.cc +6 -7
- data/src/core/lib/slice/slice_intern.cc +19 -27
- data/src/core/lib/slice/slice_internal.h +4 -246
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -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/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- 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 +198 -186
- data/src/core/lib/surface/call.h +10 -5
- data/src/core/lib/surface/call_details.cc +10 -10
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/channel.cc +57 -51
- data/src/core/lib/surface/channel.h +19 -14
- 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 +140 -145
- data/src/core/lib/surface/completion_queue.h +18 -17
- 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 +18 -65
- data/src/core/lib/surface/init.h +10 -2
- data/src/core/lib/surface/init_secure.cc +36 -14
- data/src/core/lib/surface/lame_client.cc +62 -61
- data/src/core/lib/surface/lame_client.h +5 -0
- data/src/core/lib/surface/metadata_array.cc +2 -2
- data/src/core/lib/surface/server.cc +167 -116
- data/src/core/lib/surface/server.h +140 -40
- 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 +1 -1
- data/src/core/lib/transport/byte_stream.cc +5 -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 +8 -6
- data/src/core/lib/transport/error_utils.cc +64 -27
- data/src/core/lib/transport/error_utils.h +13 -7
- data/src/core/lib/transport/metadata.cc +47 -22
- data/src/core/lib/transport/metadata.h +15 -12
- data/src/core/lib/transport/metadata_batch.cc +41 -339
- data/src/core/lib/transport/metadata_batch.h +932 -68
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +715 -847
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +5 -3
- data/src/core/lib/transport/transport.cc +8 -8
- data/src/core/lib/transport/transport.h +12 -10
- data/src/core/lib/transport/transport_op_string.cc +46 -26
- data/src/core/lib/uri/uri_parser.cc +131 -249
- data/src/core/lib/uri/uri_parser.h +57 -21
- data/src/core/plugin_registry/grpc_plugin_registry.cc +101 -44
- data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
- data/src/core/tsi/alts/crypt/gsec.cc +5 -4
- 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 +18 -17
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +27 -33
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +57 -51
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- 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_iovec_record_protocol.cc +8 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
- data/src/core/tsi/fake_transport_security.cc +31 -12
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
- 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 +115 -77
- data/src/core/tsi/ssl_transport_security.h +12 -14
- data/src/core/tsi/transport_security.cc +21 -9
- 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 +27 -1
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +21 -8
- 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 +19 -8
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
- data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
- data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
- data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
- data/src/ruby/ext/grpc/rb_grpc.c +9 -4
- data/src/ruby/ext/grpc/rb_grpc.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +50 -14
- data/src/ruby/ext/grpc/rb_server.c +19 -6
- data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
- data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- 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/messages_pb.rb +35 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +23 -5
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- 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/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 +14 -5
- 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 +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -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 +54 -48
- 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 +1 -3
- 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 -2
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- 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 +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- 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 +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- 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 +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- 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/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
- data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- 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 +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- 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 +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- 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 +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- 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 +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- 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/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -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 +1 -65
- 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 +79 -62
- 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/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- 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 +756 -724
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +55 -50
- 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_enum.c +2 -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_int.c +5 -5
- 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 +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- 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 +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
- 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 +16 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +196 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +35 -86
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +326 -281
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
- 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 +11 -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/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
- 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_chacha20poly1305.c +6 -81
- 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 +101 -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/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -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/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- 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/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
- 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 +15 -4
- 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 +32 -16
- 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/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- 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 +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
- 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 +104 -93
- 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 +30 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
- 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 +65 -41
- 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 +161 -9
- 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 +400 -325
- 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 +28 -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 +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
- 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/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -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/stack/stack.c +7 -13
- 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/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 +345 -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 +20 -5
- 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 +4 -31
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +12 -9
- 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 +17 -24
- 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 +26 -23
- 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 +61 -23
- 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 +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +15 -13
- 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_pkey.c +2 -2
- 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 +50 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +23 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +28 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +26 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -12
- 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 +7 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +27 -36
- 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 +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
- 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 +69 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1026 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -176
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +63 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +23 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +38 -51
- 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 +33 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +104 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +406 -108
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +48 -36
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1425 -377
- 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 +188 -49
- 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} +847 -622
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +92 -44
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +314 -217
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +177 -35
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +491 -152
- 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 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- 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 +60 -112
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +136 -104
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- 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 +160 -91
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +269 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- 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/upb/decode.c +354 -204
- data/third_party/upb/upb/decode.h +50 -3
- data/third_party/upb/upb/decode_fast.c +1053 -0
- data/third_party/upb/upb/decode_fast.h +153 -0
- data/third_party/upb/upb/decode_internal.h +193 -0
- data/third_party/upb/upb/def.c +609 -610
- data/third_party/upb/upb/def.h +57 -50
- data/third_party/upb/upb/def.hpp +66 -123
- data/third_party/upb/upb/encode.c +267 -176
- data/third_party/upb/upb/encode.h +56 -4
- data/third_party/upb/upb/msg.c +304 -84
- data/third_party/upb/upb/msg.h +76 -441
- data/third_party/upb/upb/msg_internal.h +687 -0
- data/third_party/upb/upb/port_def.inc +156 -82
- data/third_party/upb/upb/port_undef.inc +41 -8
- data/third_party/upb/upb/reflection.c +64 -55
- data/third_party/upb/upb/reflection.h +36 -8
- data/third_party/upb/upb/reflection.hpp +37 -0
- data/third_party/upb/upb/table.c +238 -276
- data/third_party/upb/upb/{table.int.h → table_internal.h} +66 -181
- data/third_party/upb/upb/text_encode.c +77 -26
- data/third_party/upb/upb/text_encode.h +30 -1
- data/third_party/upb/upb/upb.c +75 -47
- data/third_party/upb/upb/upb.h +72 -13
- data/third_party/upb/upb/upb.hpp +28 -4
- data/third_party/upb/upb/upb_internal.h +58 -0
- data/third_party/xxhash/xxhash.h +5325 -0
- metadata +287 -137
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
- 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_fallback.cc +0 -68
- 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/resolving_lb_policy.cc +0 -355
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
- 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/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/udpa/core/v1/authority.upb.c +0 -28
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
- 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 -117
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
- 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/gprpp/map.h +0 -53
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- 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_uv.cc +0 -93
- data/src/core/lib/iomgr/pollset_uv.h +0 -32
- data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
- data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
- data/src/core/lib/iomgr/tcp_uv.cc +0 -419
- data/src/core/lib/iomgr/timer_uv.cc +0 -66
- data/src/core/lib/iomgr/udp_server.cc +0 -748
- data/src/core/lib/iomgr/udp_server.h +0 -104
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/src/core/lib/transport/authority_override.cc +0 -38
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -237
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
- data/third_party/upb/upb/port.c +0 -26
data/src/core/ext/xds/xds_api.cc
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
+
#include "src/core/ext/xds/xds_api.h"
|
22
|
+
|
21
23
|
#include <algorithm>
|
22
24
|
#include <cctype>
|
23
25
|
#include <cstdint>
|
@@ -28,26 +30,13 @@
|
|
28
30
|
#include "absl/strings/str_format.h"
|
29
31
|
#include "absl/strings/str_join.h"
|
30
32
|
#include "absl/strings/str_split.h"
|
31
|
-
|
32
|
-
#include "upb/upb.hpp"
|
33
|
-
|
34
|
-
#include <grpc/impl/codegen/log.h>
|
35
|
-
#include <grpc/support/alloc.h>
|
36
|
-
#include <grpc/support/string_util.h>
|
37
|
-
|
38
|
-
#include "src/core/ext/xds/xds_api.h"
|
39
|
-
#include "src/core/lib/gpr/env.h"
|
40
|
-
#include "src/core/lib/gpr/string.h"
|
41
|
-
#include "src/core/lib/gpr/useful.h"
|
42
|
-
#include "src/core/lib/iomgr/error.h"
|
43
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
44
|
-
#include "src/core/lib/slice/slice_utils.h"
|
45
|
-
|
33
|
+
#include "envoy/admin/v3/config_dump.upb.h"
|
46
34
|
#include "envoy/config/cluster/v3/circuit_breaker.upb.h"
|
47
35
|
#include "envoy/config/cluster/v3/cluster.upb.h"
|
48
36
|
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
49
37
|
#include "envoy/config/core/v3/address.upb.h"
|
50
38
|
#include "envoy/config/core/v3/base.upb.h"
|
39
|
+
#include "envoy/config/core/v3/base.upbdefs.h"
|
51
40
|
#include "envoy/config/core/v3/config_source.upb.h"
|
52
41
|
#include "envoy/config/core/v3/health_check.upb.h"
|
53
42
|
#include "envoy/config/core/v3/protocol.upb.h"
|
@@ -57,12 +46,19 @@
|
|
57
46
|
#include "envoy/config/endpoint/v3/load_report.upb.h"
|
58
47
|
#include "envoy/config/listener/v3/api_listener.upb.h"
|
59
48
|
#include "envoy/config/listener/v3/listener.upb.h"
|
49
|
+
#include "envoy/config/listener/v3/listener.upbdefs.h"
|
50
|
+
#include "envoy/config/listener/v3/listener_components.upb.h"
|
60
51
|
#include "envoy/config/route/v3/route.upb.h"
|
61
52
|
#include "envoy/config/route/v3/route.upbdefs.h"
|
62
53
|
#include "envoy/config/route/v3/route_components.upb.h"
|
54
|
+
#include "envoy/config/route/v3/route_components.upbdefs.h"
|
55
|
+
#include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
|
56
|
+
#include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
|
63
57
|
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
|
58
|
+
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
|
64
59
|
#include "envoy/extensions/transport_sockets/tls/v3/common.upb.h"
|
65
60
|
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
61
|
+
#include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
|
66
62
|
#include "envoy/service/cluster/v3/cds.upb.h"
|
67
63
|
#include "envoy/service/cluster/v3/cds.upbdefs.h"
|
68
64
|
#include "envoy/service/discovery/v3/discovery.upb.h"
|
@@ -74,6 +70,8 @@
|
|
74
70
|
#include "envoy/service/load_stats/v3/lrs.upbdefs.h"
|
75
71
|
#include "envoy/service/route/v3/rds.upb.h"
|
76
72
|
#include "envoy/service/route/v3/rds.upbdefs.h"
|
73
|
+
#include "envoy/service/status/v3/csds.upb.h"
|
74
|
+
#include "envoy/service/status/v3/csds.upbdefs.h"
|
77
75
|
#include "envoy/type/matcher/v3/regex.upb.h"
|
78
76
|
#include "envoy/type/matcher/v3/string.upb.h"
|
79
77
|
#include "envoy/type/v3/percent.upb.h"
|
@@ -81,29 +79,46 @@
|
|
81
79
|
#include "google/protobuf/any.upb.h"
|
82
80
|
#include "google/protobuf/duration.upb.h"
|
83
81
|
#include "google/protobuf/struct.upb.h"
|
82
|
+
#include "google/protobuf/timestamp.upb.h"
|
84
83
|
#include "google/protobuf/wrappers.upb.h"
|
85
84
|
#include "google/rpc/status.upb.h"
|
86
85
|
#include "upb/text_encode.h"
|
87
86
|
#include "upb/upb.h"
|
87
|
+
#include "upb/upb.hpp"
|
88
|
+
#include "xds/type/v3/typed_struct.upb.h"
|
89
|
+
|
90
|
+
#include <grpc/impl/codegen/log.h>
|
91
|
+
#include <grpc/support/alloc.h>
|
92
|
+
#include <grpc/support/string_util.h>
|
93
|
+
|
94
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
95
|
+
#include "src/core/lib/gpr/env.h"
|
96
|
+
#include "src/core/lib/gpr/string.h"
|
97
|
+
#include "src/core/lib/gprpp/host_port.h"
|
98
|
+
#include "src/core/lib/iomgr/error.h"
|
99
|
+
#include "src/core/lib/iomgr/sockaddr.h"
|
100
|
+
#include "src/core/lib/iomgr/socket_utils.h"
|
101
|
+
#include "src/core/lib/slice/slice_utils.h"
|
102
|
+
#include "src/core/lib/uri/uri_parser.h"
|
88
103
|
|
89
104
|
namespace grpc_core {
|
90
105
|
|
91
|
-
// TODO
|
92
|
-
//
|
106
|
+
// TODO(donnadionne): Check to see if cluster types aggregate_cluster and
|
107
|
+
// logical_dns are enabled, this will be
|
108
|
+
// removed once the cluster types are fully integration-tested and enabled by
|
93
109
|
// default.
|
94
|
-
bool
|
95
|
-
char* value = gpr_getenv(
|
110
|
+
bool XdsAggregateAndLogicalDnsClusterEnabled() {
|
111
|
+
char* value = gpr_getenv(
|
112
|
+
"GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER");
|
96
113
|
bool parsed_value;
|
97
114
|
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
98
115
|
gpr_free(value);
|
99
116
|
return parse_succeeded && parsed_value;
|
100
117
|
}
|
101
118
|
|
102
|
-
// TODO(yashykt):
|
103
|
-
|
104
|
-
|
105
|
-
bool XdsSecurityEnabled() {
|
106
|
-
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT");
|
119
|
+
// TODO(yashykt): Remove once RBAC is no longer experimental
|
120
|
+
bool XdsRbacEnabled() {
|
121
|
+
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_RBAC");
|
107
122
|
bool parsed_value;
|
108
123
|
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
109
124
|
gpr_free(value);
|
@@ -111,186 +126,153 @@ bool XdsSecurityEnabled() {
|
|
111
126
|
}
|
112
127
|
|
113
128
|
//
|
114
|
-
// XdsApi::
|
129
|
+
// XdsApi::RetryPolicy
|
115
130
|
//
|
116
131
|
|
117
|
-
XdsApi::
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
} else {
|
125
|
-
string_matcher = other.string_matcher;
|
126
|
-
}
|
132
|
+
std::string XdsApi::RetryPolicy::RetryBackOff::ToString() const {
|
133
|
+
std::vector<std::string> contents;
|
134
|
+
contents.push_back(
|
135
|
+
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
136
|
+
contents.push_back(
|
137
|
+
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
138
|
+
return absl::StrJoin(contents, ",");
|
127
139
|
}
|
128
140
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
RE2::Options options;
|
135
|
-
options.set_case_sensitive(case_sensitive);
|
136
|
-
regex_matcher =
|
137
|
-
absl::make_unique<RE2>(other.regex_matcher->pattern(), options);
|
138
|
-
} else {
|
139
|
-
string_matcher = other.string_matcher;
|
140
|
-
}
|
141
|
-
return *this;
|
141
|
+
std::string XdsApi::RetryPolicy::ToString() const {
|
142
|
+
std::vector<std::string> contents;
|
143
|
+
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
144
|
+
contents.push_back(retry_back_off.ToString());
|
145
|
+
return absl::StrCat("{", absl::StrJoin(contents, ","), "}");
|
142
146
|
}
|
143
147
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
if (case_sensitive != other.case_sensitive) return false;
|
148
|
-
if (type == PathMatcherType::REGEX) {
|
149
|
-
// Should never be null.
|
150
|
-
if (regex_matcher == nullptr || other.regex_matcher == nullptr) {
|
151
|
-
return false;
|
152
|
-
}
|
153
|
-
return regex_matcher->pattern() == other.regex_matcher->pattern();
|
154
|
-
}
|
155
|
-
return string_matcher == other.string_matcher;
|
156
|
-
}
|
148
|
+
//
|
149
|
+
// XdsApi::Route::Matchers
|
150
|
+
//
|
157
151
|
|
158
|
-
std::string XdsApi::Route::Matchers::
|
159
|
-
std::string
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
path_type_string = "regex match";
|
169
|
-
break;
|
170
|
-
default:
|
171
|
-
break;
|
152
|
+
std::string XdsApi::Route::Matchers::ToString() const {
|
153
|
+
std::vector<std::string> contents;
|
154
|
+
contents.push_back(
|
155
|
+
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
156
|
+
for (const HeaderMatcher& header_matcher : header_matchers) {
|
157
|
+
contents.push_back(header_matcher.ToString());
|
158
|
+
}
|
159
|
+
if (fraction_per_million.has_value()) {
|
160
|
+
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
161
|
+
fraction_per_million.value()));
|
172
162
|
}
|
173
|
-
return absl::
|
174
|
-
type == PathMatcherType::REGEX
|
175
|
-
? regex_matcher->pattern()
|
176
|
-
: string_matcher,
|
177
|
-
case_sensitive ? "" : "[case_sensitive=false]");
|
163
|
+
return absl::StrJoin(contents, "\n");
|
178
164
|
}
|
179
165
|
|
180
166
|
//
|
181
|
-
// XdsApi::Route::
|
167
|
+
// XdsApi::Route::RouteAction::HashPolicy
|
182
168
|
//
|
183
169
|
|
184
|
-
XdsApi::Route::
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
case HeaderMatcherType::RANGE:
|
192
|
-
range_start = other.range_start;
|
193
|
-
range_end = other.range_end;
|
194
|
-
break;
|
195
|
-
case HeaderMatcherType::PRESENT:
|
196
|
-
present_match = other.present_match;
|
197
|
-
break;
|
198
|
-
default:
|
199
|
-
string_matcher = other.string_matcher;
|
170
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(const HashPolicy& other)
|
171
|
+
: type(other.type),
|
172
|
+
header_name(other.header_name),
|
173
|
+
regex_substitution(other.regex_substitution) {
|
174
|
+
if (other.regex != nullptr) {
|
175
|
+
regex =
|
176
|
+
absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
200
177
|
}
|
201
178
|
}
|
202
179
|
|
203
|
-
XdsApi::Route::
|
204
|
-
operator=(const
|
205
|
-
name = other.name;
|
180
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
181
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(const HashPolicy& other) {
|
206
182
|
type = other.type;
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
break;
|
212
|
-
case HeaderMatcherType::RANGE:
|
213
|
-
range_start = other.range_start;
|
214
|
-
range_end = other.range_end;
|
215
|
-
break;
|
216
|
-
case HeaderMatcherType::PRESENT:
|
217
|
-
present_match = other.present_match;
|
218
|
-
break;
|
219
|
-
default:
|
220
|
-
string_matcher = other.string_matcher;
|
183
|
+
header_name = other.header_name;
|
184
|
+
if (other.regex != nullptr) {
|
185
|
+
regex =
|
186
|
+
absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
|
221
187
|
}
|
188
|
+
regex_substitution = other.regex_substitution;
|
189
|
+
return *this;
|
190
|
+
}
|
191
|
+
|
192
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
193
|
+
: type(other.type),
|
194
|
+
header_name(std::move(other.header_name)),
|
195
|
+
regex(std::move(other.regex)),
|
196
|
+
regex_substitution(std::move(other.regex_substitution)) {}
|
197
|
+
|
198
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
199
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(HashPolicy&& other) noexcept {
|
200
|
+
type = other.type;
|
201
|
+
header_name = std::move(other.header_name);
|
202
|
+
regex = std::move(other.regex);
|
203
|
+
regex_substitution = std::move(other.regex_substitution);
|
222
204
|
return *this;
|
223
205
|
}
|
224
206
|
|
225
|
-
bool XdsApi::Route::
|
226
|
-
const
|
227
|
-
if (name != other.name) return false;
|
207
|
+
bool XdsApi::Route::RouteAction::HashPolicy::HashPolicy::operator==(
|
208
|
+
const HashPolicy& other) const {
|
228
209
|
if (type != other.type) return false;
|
229
|
-
if (
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
return
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
return string_matcher != other.string_matcher;
|
210
|
+
if (type == Type::HEADER) {
|
211
|
+
if (regex == nullptr) {
|
212
|
+
if (other.regex != nullptr) return false;
|
213
|
+
} else {
|
214
|
+
if (other.regex == nullptr) return false;
|
215
|
+
return header_name == other.header_name &&
|
216
|
+
regex->pattern() == other.regex->pattern() &&
|
217
|
+
regex_substitution == other.regex_substitution;
|
218
|
+
}
|
239
219
|
}
|
220
|
+
return true;
|
240
221
|
}
|
241
222
|
|
242
|
-
std::string XdsApi::Route::
|
223
|
+
std::string XdsApi::Route::RouteAction::HashPolicy::ToString() const {
|
224
|
+
std::vector<std::string> contents;
|
243
225
|
switch (type) {
|
244
|
-
case
|
245
|
-
|
246
|
-
|
247
|
-
case
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
invert_match ? " not" : "", name,
|
258
|
-
present_match ? "true" : "false");
|
259
|
-
case HeaderMatcherType::PREFIX:
|
260
|
-
return absl::StrFormat("Header prefix match:%s %s:%s",
|
261
|
-
invert_match ? " not" : "", name, string_matcher);
|
262
|
-
case HeaderMatcherType::SUFFIX:
|
263
|
-
return absl::StrFormat("Header suffix match:%s %s:%s",
|
264
|
-
invert_match ? " not" : "", name, string_matcher);
|
265
|
-
default:
|
266
|
-
return "";
|
226
|
+
case Type::HEADER:
|
227
|
+
contents.push_back("type=HEADER");
|
228
|
+
break;
|
229
|
+
case Type::CHANNEL_ID:
|
230
|
+
contents.push_back("type=CHANNEL_ID");
|
231
|
+
break;
|
232
|
+
}
|
233
|
+
contents.push_back(
|
234
|
+
absl::StrFormat("terminal=%s", terminal ? "true" : "false"));
|
235
|
+
if (type == Type::HEADER) {
|
236
|
+
contents.push_back(absl::StrFormat(
|
237
|
+
"Header %s:/%s/%s", header_name,
|
238
|
+
(regex == nullptr) ? "" : regex->pattern(), regex_substitution));
|
267
239
|
}
|
240
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
268
241
|
}
|
269
242
|
|
270
243
|
//
|
271
|
-
// XdsApi::Route
|
244
|
+
// XdsApi::Route::RouteAction::ClusterWeight
|
272
245
|
//
|
273
246
|
|
274
|
-
std::string XdsApi::Route::
|
247
|
+
std::string XdsApi::Route::RouteAction::ClusterWeight::ToString() const {
|
275
248
|
std::vector<std::string> contents;
|
276
|
-
contents.push_back(
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
249
|
+
contents.push_back(absl::StrCat("cluster=", name));
|
250
|
+
contents.push_back(absl::StrCat("weight=", weight));
|
251
|
+
if (!typed_per_filter_config.empty()) {
|
252
|
+
std::vector<std::string> parts;
|
253
|
+
for (const auto& p : typed_per_filter_config) {
|
254
|
+
const std::string& key = p.first;
|
255
|
+
const auto& config = p.second;
|
256
|
+
parts.push_back(absl::StrCat(key, "=", config.ToString()));
|
257
|
+
}
|
258
|
+
contents.push_back(absl::StrCat("typed_per_filter_config={",
|
259
|
+
absl::StrJoin(parts, ", "), "}"));
|
283
260
|
}
|
284
|
-
return absl::StrJoin(contents, "
|
261
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
285
262
|
}
|
286
263
|
|
287
|
-
|
288
|
-
|
289
|
-
|
264
|
+
//
|
265
|
+
// XdsApi::Route::RouteAction
|
266
|
+
//
|
290
267
|
|
291
|
-
std::string XdsApi::Route::ToString() const {
|
268
|
+
std::string XdsApi::Route::RouteAction::ToString() const {
|
292
269
|
std::vector<std::string> contents;
|
293
|
-
|
270
|
+
for (const HashPolicy& hash_policy : hash_policies) {
|
271
|
+
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
272
|
+
}
|
273
|
+
if (retry_policy.has_value()) {
|
274
|
+
contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
|
275
|
+
}
|
294
276
|
if (!cluster_name.empty()) {
|
295
277
|
contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
|
296
278
|
}
|
@@ -300,6 +282,34 @@ std::string XdsApi::Route::ToString() const {
|
|
300
282
|
if (max_stream_duration.has_value()) {
|
301
283
|
contents.push_back(max_stream_duration->ToString());
|
302
284
|
}
|
285
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
286
|
+
}
|
287
|
+
|
288
|
+
//
|
289
|
+
// XdsApi::Route
|
290
|
+
//
|
291
|
+
|
292
|
+
std::string XdsApi::Route::ToString() const {
|
293
|
+
std::vector<std::string> contents;
|
294
|
+
contents.push_back(matchers.ToString());
|
295
|
+
auto* route_action = absl::get_if<XdsApi::Route::RouteAction>(&action);
|
296
|
+
if (route_action != nullptr) {
|
297
|
+
contents.push_back(absl::StrCat("route=", route_action->ToString()));
|
298
|
+
} else if (absl::holds_alternative<XdsApi::Route::NonForwardingAction>(
|
299
|
+
action)) {
|
300
|
+
contents.push_back("non_forwarding_action={}");
|
301
|
+
} else {
|
302
|
+
contents.push_back("unknown_action={}");
|
303
|
+
}
|
304
|
+
if (!typed_per_filter_config.empty()) {
|
305
|
+
contents.push_back("typed_per_filter_config={");
|
306
|
+
for (const auto& p : typed_per_filter_config) {
|
307
|
+
const std::string& name = p.first;
|
308
|
+
const auto& config = p.second;
|
309
|
+
contents.push_back(absl::StrCat(" ", name, "=", config.ToString()));
|
310
|
+
}
|
311
|
+
contents.push_back("}");
|
312
|
+
}
|
303
313
|
return absl::StrJoin(contents, "\n");
|
304
314
|
}
|
305
315
|
|
@@ -322,6 +332,14 @@ std::string XdsApi::RdsUpdate::ToString() const {
|
|
322
332
|
vhosts.push_back("\n }\n");
|
323
333
|
}
|
324
334
|
vhosts.push_back(" ]\n");
|
335
|
+
vhosts.push_back(" typed_per_filter_config={\n");
|
336
|
+
for (const auto& p : vhost.typed_per_filter_config) {
|
337
|
+
const std::string& name = p.first;
|
338
|
+
const auto& config = p.second;
|
339
|
+
vhosts.push_back(
|
340
|
+
absl::StrCat(" ", name, "=", config.ToString(), "\n"));
|
341
|
+
}
|
342
|
+
vhosts.push_back(" }\n");
|
325
343
|
vhosts.push_back("]\n");
|
326
344
|
}
|
327
345
|
return absl::StrJoin(vhosts, "");
|
@@ -426,41 +444,307 @@ XdsApi::RdsUpdate::VirtualHost* XdsApi::RdsUpdate::FindVirtualHostForDomain(
|
|
426
444
|
}
|
427
445
|
|
428
446
|
//
|
429
|
-
// XdsApi::
|
447
|
+
// XdsApi::CommonTlsContext::CertificateValidationContext
|
430
448
|
//
|
431
449
|
|
432
|
-
XdsApi::
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
break;
|
438
|
-
default:
|
439
|
-
string_matcher = other.string_matcher;
|
450
|
+
std::string XdsApi::CommonTlsContext::CertificateValidationContext::ToString()
|
451
|
+
const {
|
452
|
+
std::vector<std::string> contents;
|
453
|
+
for (const auto& match : match_subject_alt_names) {
|
454
|
+
contents.push_back(match.ToString());
|
440
455
|
}
|
456
|
+
return absl::StrFormat("{match_subject_alt_names=[%s]}",
|
457
|
+
absl::StrJoin(contents, ", "));
|
441
458
|
}
|
442
459
|
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
460
|
+
bool XdsApi::CommonTlsContext::CertificateValidationContext::Empty() const {
|
461
|
+
return match_subject_alt_names.empty();
|
462
|
+
}
|
463
|
+
|
464
|
+
//
|
465
|
+
// XdsApi::CommonTlsContext::CertificateProviderPluginInstance
|
466
|
+
//
|
467
|
+
|
468
|
+
std::string
|
469
|
+
XdsApi::CommonTlsContext::CertificateProviderPluginInstance::ToString() const {
|
470
|
+
absl::InlinedVector<std::string, 2> contents;
|
471
|
+
if (!instance_name.empty()) {
|
472
|
+
contents.push_back(absl::StrFormat("instance_name=%s", instance_name));
|
452
473
|
}
|
453
|
-
|
474
|
+
if (!certificate_name.empty()) {
|
475
|
+
contents.push_back(
|
476
|
+
absl::StrFormat("certificate_name=%s", certificate_name));
|
477
|
+
}
|
478
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
454
479
|
}
|
455
480
|
|
456
|
-
bool XdsApi::
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
481
|
+
bool XdsApi::CommonTlsContext::CertificateProviderPluginInstance::Empty()
|
482
|
+
const {
|
483
|
+
return instance_name.empty() && certificate_name.empty();
|
484
|
+
}
|
485
|
+
|
486
|
+
//
|
487
|
+
// XdsApi::CommonTlsContext
|
488
|
+
//
|
489
|
+
|
490
|
+
std::string XdsApi::CommonTlsContext::ToString() const {
|
491
|
+
absl::InlinedVector<std::string, 2> contents;
|
492
|
+
if (!tls_certificate_provider_instance.Empty()) {
|
493
|
+
contents.push_back(
|
494
|
+
absl::StrFormat("tls_certificate_provider_instance=%s",
|
495
|
+
tls_certificate_provider_instance.ToString()));
|
496
|
+
}
|
497
|
+
if (!certificate_validation_context.Empty()) {
|
498
|
+
contents.push_back(
|
499
|
+
absl::StrFormat("certificate_validation_context=%s",
|
500
|
+
certificate_validation_context.ToString()));
|
501
|
+
}
|
502
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
503
|
+
}
|
504
|
+
|
505
|
+
bool XdsApi::CommonTlsContext::Empty() const {
|
506
|
+
return tls_certificate_provider_instance.Empty() &&
|
507
|
+
certificate_validation_context.Empty();
|
508
|
+
}
|
509
|
+
|
510
|
+
//
|
511
|
+
// XdsApi::DownstreamTlsContext
|
512
|
+
//
|
513
|
+
|
514
|
+
std::string XdsApi::DownstreamTlsContext::ToString() const {
|
515
|
+
return absl::StrFormat("common_tls_context=%s, require_client_certificate=%s",
|
516
|
+
common_tls_context.ToString(),
|
517
|
+
require_client_certificate ? "true" : "false");
|
518
|
+
}
|
519
|
+
|
520
|
+
bool XdsApi::DownstreamTlsContext::Empty() const {
|
521
|
+
return common_tls_context.Empty();
|
522
|
+
}
|
523
|
+
|
524
|
+
//
|
525
|
+
// XdsApi::LdsUpdate::HttpConnectionManager
|
526
|
+
//
|
527
|
+
|
528
|
+
std::string XdsApi::LdsUpdate::HttpConnectionManager::ToString() const {
|
529
|
+
absl::InlinedVector<std::string, 4> contents;
|
530
|
+
contents.push_back(absl::StrFormat(
|
531
|
+
"route_config_name=%s",
|
532
|
+
!route_config_name.empty() ? route_config_name.c_str() : "<inlined>"));
|
533
|
+
contents.push_back(absl::StrFormat("http_max_stream_duration=%s",
|
534
|
+
http_max_stream_duration.ToString()));
|
535
|
+
if (rds_update.has_value()) {
|
536
|
+
contents.push_back(
|
537
|
+
absl::StrFormat("rds_update=%s", rds_update->ToString()));
|
538
|
+
}
|
539
|
+
if (!http_filters.empty()) {
|
540
|
+
std::vector<std::string> filter_strings;
|
541
|
+
for (const auto& http_filter : http_filters) {
|
542
|
+
filter_strings.push_back(http_filter.ToString());
|
543
|
+
}
|
544
|
+
contents.push_back(absl::StrCat("http_filters=[",
|
545
|
+
absl::StrJoin(filter_strings, ", "), "]"));
|
546
|
+
}
|
547
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
548
|
+
}
|
549
|
+
|
550
|
+
//
|
551
|
+
// XdsApi::LdsUpdate::HttpFilter
|
552
|
+
//
|
553
|
+
|
554
|
+
std::string XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter::ToString()
|
555
|
+
const {
|
556
|
+
return absl::StrCat("{name=", name, ", config=", config.ToString(), "}");
|
557
|
+
}
|
558
|
+
|
559
|
+
//
|
560
|
+
// XdsApi::LdsUpdate::FilterChainData
|
561
|
+
//
|
562
|
+
|
563
|
+
std::string XdsApi::LdsUpdate::FilterChainData::ToString() const {
|
564
|
+
return absl::StrCat(
|
565
|
+
"{downstream_tls_context=", downstream_tls_context.ToString(),
|
566
|
+
" http_connection_manager=", http_connection_manager.ToString(), "}");
|
567
|
+
}
|
568
|
+
|
569
|
+
//
|
570
|
+
// XdsApi::LdsUpdate::FilterChainMap::CidrRange
|
571
|
+
//
|
572
|
+
|
573
|
+
std::string XdsApi::LdsUpdate::FilterChainMap::CidrRange::ToString() const {
|
574
|
+
return absl::StrCat(
|
575
|
+
"{address_prefix=", grpc_sockaddr_to_string(&address, false),
|
576
|
+
", prefix_len=", prefix_len, "}");
|
577
|
+
}
|
578
|
+
|
579
|
+
//
|
580
|
+
// FilterChain
|
581
|
+
//
|
582
|
+
|
583
|
+
struct FilterChain {
|
584
|
+
struct FilterChainMatch {
|
585
|
+
uint32_t destination_port = 0;
|
586
|
+
std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_ranges;
|
587
|
+
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType source_type =
|
588
|
+
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::kAny;
|
589
|
+
std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange>
|
590
|
+
source_prefix_ranges;
|
591
|
+
std::vector<uint32_t> source_ports;
|
592
|
+
std::vector<std::string> server_names;
|
593
|
+
std::string transport_protocol;
|
594
|
+
std::vector<std::string> application_protocols;
|
595
|
+
|
596
|
+
std::string ToString() const;
|
597
|
+
} filter_chain_match;
|
598
|
+
|
599
|
+
std::shared_ptr<XdsApi::LdsUpdate::FilterChainData> filter_chain_data;
|
600
|
+
};
|
601
|
+
|
602
|
+
std::string FilterChain::FilterChainMatch::ToString() const {
|
603
|
+
absl::InlinedVector<std::string, 8> contents;
|
604
|
+
if (destination_port != 0) {
|
605
|
+
contents.push_back(absl::StrCat("destination_port=", destination_port));
|
606
|
+
}
|
607
|
+
if (!prefix_ranges.empty()) {
|
608
|
+
std::vector<std::string> prefix_ranges_content;
|
609
|
+
for (const auto& range : prefix_ranges) {
|
610
|
+
prefix_ranges_content.push_back(range.ToString());
|
611
|
+
}
|
612
|
+
contents.push_back(absl::StrCat(
|
613
|
+
"prefix_ranges={", absl::StrJoin(prefix_ranges_content, ", "), "}"));
|
614
|
+
}
|
615
|
+
if (source_type == XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
|
616
|
+
kSameIpOrLoopback) {
|
617
|
+
contents.push_back("source_type=SAME_IP_OR_LOOPBACK");
|
618
|
+
} else if (source_type == XdsApi::LdsUpdate::FilterChainMap::
|
619
|
+
ConnectionSourceType::kExternal) {
|
620
|
+
contents.push_back("source_type=EXTERNAL");
|
621
|
+
}
|
622
|
+
if (!source_prefix_ranges.empty()) {
|
623
|
+
std::vector<std::string> source_prefix_ranges_content;
|
624
|
+
for (const auto& range : source_prefix_ranges) {
|
625
|
+
source_prefix_ranges_content.push_back(range.ToString());
|
626
|
+
}
|
627
|
+
contents.push_back(
|
628
|
+
absl::StrCat("source_prefix_ranges={",
|
629
|
+
absl::StrJoin(source_prefix_ranges_content, ", "), "}"));
|
630
|
+
}
|
631
|
+
if (!source_ports.empty()) {
|
632
|
+
contents.push_back(
|
633
|
+
absl::StrCat("source_ports={", absl::StrJoin(source_ports, ", "), "}"));
|
634
|
+
}
|
635
|
+
if (!server_names.empty()) {
|
636
|
+
contents.push_back(
|
637
|
+
absl::StrCat("server_names={", absl::StrJoin(server_names, ", "), "}"));
|
638
|
+
}
|
639
|
+
if (!transport_protocol.empty()) {
|
640
|
+
contents.push_back(absl::StrCat("transport_protocol=", transport_protocol));
|
641
|
+
}
|
642
|
+
if (!application_protocols.empty()) {
|
643
|
+
contents.push_back(absl::StrCat("application_protocols={",
|
644
|
+
absl::StrJoin(application_protocols, ", "),
|
645
|
+
"}"));
|
646
|
+
}
|
647
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
648
|
+
}
|
649
|
+
|
650
|
+
//
|
651
|
+
// XdsApi::LdsUpdate::FilterChainMap
|
652
|
+
//
|
653
|
+
|
654
|
+
std::string XdsApi::LdsUpdate::FilterChainMap::ToString() const {
|
655
|
+
std::vector<std::string> contents;
|
656
|
+
for (const auto& destination_ip : destination_ip_vector) {
|
657
|
+
for (int source_type = 0; source_type < 3; ++source_type) {
|
658
|
+
for (const auto& source_ip :
|
659
|
+
destination_ip.source_types_array[source_type]) {
|
660
|
+
for (const auto& source_port_pair : source_ip.ports_map) {
|
661
|
+
FilterChain::FilterChainMatch filter_chain_match;
|
662
|
+
if (destination_ip.prefix_range.has_value()) {
|
663
|
+
filter_chain_match.prefix_ranges.push_back(
|
664
|
+
*destination_ip.prefix_range);
|
665
|
+
}
|
666
|
+
filter_chain_match.source_type = static_cast<
|
667
|
+
XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
|
668
|
+
source_type);
|
669
|
+
if (source_ip.prefix_range.has_value()) {
|
670
|
+
filter_chain_match.source_prefix_ranges.push_back(
|
671
|
+
*source_ip.prefix_range);
|
672
|
+
}
|
673
|
+
if (source_port_pair.first != 0) {
|
674
|
+
filter_chain_match.source_ports.push_back(source_port_pair.first);
|
675
|
+
}
|
676
|
+
contents.push_back(absl::StrCat(
|
677
|
+
"{filter_chain_match=", filter_chain_match.ToString(),
|
678
|
+
", filter_chain=", source_port_pair.second.data->ToString(),
|
679
|
+
"}"));
|
680
|
+
}
|
681
|
+
}
|
682
|
+
}
|
683
|
+
}
|
684
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
685
|
+
}
|
686
|
+
|
687
|
+
//
|
688
|
+
// XdsApi::LdsUpdate
|
689
|
+
//
|
690
|
+
|
691
|
+
std::string XdsApi::LdsUpdate::ToString() const {
|
692
|
+
absl::InlinedVector<std::string, 4> contents;
|
693
|
+
if (type == ListenerType::kTcpListener) {
|
694
|
+
contents.push_back(absl::StrCat("address=", address));
|
695
|
+
contents.push_back(
|
696
|
+
absl::StrCat("filter_chain_map=", filter_chain_map.ToString()));
|
697
|
+
if (default_filter_chain.has_value()) {
|
698
|
+
contents.push_back(absl::StrCat("default_filter_chain=",
|
699
|
+
default_filter_chain->ToString()));
|
700
|
+
}
|
701
|
+
} else if (type == ListenerType::kHttpApiListener) {
|
702
|
+
contents.push_back(absl::StrFormat("http_connection_manager=%s",
|
703
|
+
http_connection_manager.ToString()));
|
704
|
+
}
|
705
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
706
|
+
}
|
707
|
+
|
708
|
+
//
|
709
|
+
// XdsApi::CdsUpdate
|
710
|
+
//
|
711
|
+
|
712
|
+
std::string XdsApi::CdsUpdate::ToString() const {
|
713
|
+
absl::InlinedVector<std::string, 8> contents;
|
714
|
+
switch (cluster_type) {
|
715
|
+
case EDS:
|
716
|
+
contents.push_back("cluster_type=EDS");
|
717
|
+
if (!eds_service_name.empty()) {
|
718
|
+
contents.push_back(
|
719
|
+
absl::StrFormat("eds_service_name=%s", eds_service_name));
|
720
|
+
}
|
721
|
+
break;
|
722
|
+
case LOGICAL_DNS:
|
723
|
+
contents.push_back("cluster_type=LOGICAL_DNS");
|
724
|
+
contents.push_back(absl::StrFormat("dns_hostname=%s", dns_hostname));
|
725
|
+
break;
|
726
|
+
case AGGREGATE:
|
727
|
+
contents.push_back("cluster_type=AGGREGATE");
|
728
|
+
contents.push_back(
|
729
|
+
absl::StrFormat("prioritized_cluster_names=[%s]",
|
730
|
+
absl::StrJoin(prioritized_cluster_names, ", ")));
|
463
731
|
}
|
732
|
+
if (!common_tls_context.Empty()) {
|
733
|
+
contents.push_back(absl::StrFormat("common_tls_context=%s",
|
734
|
+
common_tls_context.ToString()));
|
735
|
+
}
|
736
|
+
if (lrs_load_reporting_server_name.has_value()) {
|
737
|
+
contents.push_back(absl::StrFormat("lrs_load_reporting_server_name=%s",
|
738
|
+
lrs_load_reporting_server_name.value()));
|
739
|
+
}
|
740
|
+
contents.push_back(absl::StrCat("lb_policy=", lb_policy));
|
741
|
+
if (lb_policy == "RING_HASH") {
|
742
|
+
contents.push_back(absl::StrCat("min_ring_size=", min_ring_size));
|
743
|
+
contents.push_back(absl::StrCat("max_ring_size=", max_ring_size));
|
744
|
+
}
|
745
|
+
contents.push_back(
|
746
|
+
absl::StrFormat("max_concurrent_requests=%d", max_concurrent_requests));
|
747
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
464
748
|
}
|
465
749
|
|
466
750
|
//
|
@@ -555,64 +839,190 @@ const char* kCdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
|
|
555
839
|
const char* kEdsV2TypeUrl =
|
556
840
|
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
557
841
|
|
558
|
-
bool
|
559
|
-
|
842
|
+
bool IsLdsInternal(absl::string_view type_url, bool* is_v2 = nullptr) {
|
843
|
+
if (type_url == XdsApi::kLdsTypeUrl) return true;
|
844
|
+
if (type_url == kLdsV2TypeUrl) {
|
845
|
+
if (is_v2 != nullptr) *is_v2 = true;
|
846
|
+
return true;
|
847
|
+
}
|
848
|
+
return false;
|
560
849
|
}
|
561
850
|
|
562
|
-
bool
|
851
|
+
bool IsRdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
563
852
|
return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
|
564
853
|
}
|
565
854
|
|
566
|
-
bool
|
855
|
+
bool IsCdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
567
856
|
return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
|
568
857
|
}
|
569
858
|
|
570
|
-
bool
|
859
|
+
bool IsEdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
571
860
|
return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
|
572
861
|
}
|
573
862
|
|
863
|
+
absl::StatusOr<XdsApi::ResourceName> ParseResourceNameInternal(
|
864
|
+
absl::string_view name,
|
865
|
+
std::function<bool(absl::string_view, bool*)> is_expected_type) {
|
866
|
+
// Old-style names use the empty string for authority.
|
867
|
+
// ID is prefixed with "old:" to indicate that it's an old-style name.
|
868
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
869
|
+
return XdsApi::ResourceName{"", absl::StrCat("old:", name)};
|
870
|
+
}
|
871
|
+
// New style name. Parse URI.
|
872
|
+
auto uri = URI::Parse(name);
|
873
|
+
if (!uri.ok()) return uri.status();
|
874
|
+
// Split the resource type off of the path to get the id.
|
875
|
+
std::pair<absl::string_view, absl::string_view> path_parts =
|
876
|
+
absl::StrSplit(uri->path(), absl::MaxSplits('/', 1));
|
877
|
+
if (!is_expected_type(path_parts.first, nullptr)) {
|
878
|
+
return absl::InvalidArgumentError(
|
879
|
+
"xdstp URI path must indicate valid xDS resource type");
|
880
|
+
}
|
881
|
+
std::vector<std::pair<absl::string_view, absl::string_view>> query_parameters(
|
882
|
+
uri->query_parameter_map().begin(), uri->query_parameter_map().end());
|
883
|
+
std::sort(query_parameters.begin(), query_parameters.end());
|
884
|
+
return XdsApi::ResourceName{
|
885
|
+
uri->authority(),
|
886
|
+
absl::StrCat(
|
887
|
+
"xdstp:", path_parts.second, (query_parameters.empty() ? "?" : ""),
|
888
|
+
absl::StrJoin(query_parameters, "&", absl::PairFormatter("=")))};
|
889
|
+
}
|
890
|
+
|
574
891
|
} // namespace
|
575
892
|
|
893
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
|
894
|
+
// will be appended to the user agent name reported to the xDS server.
|
895
|
+
#ifdef GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
896
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING \
|
897
|
+
" " GRPC_XDS_USER_AGENT_NAME_SUFFIX
|
898
|
+
#else
|
899
|
+
#define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING ""
|
900
|
+
#endif
|
901
|
+
|
902
|
+
// If gRPC is built with -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="...", that string
|
903
|
+
// will be appended to the user agent version reported to the xDS server.
|
904
|
+
#ifdef GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
905
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING \
|
906
|
+
" " GRPC_XDS_USER_AGENT_VERSION_SUFFIX
|
907
|
+
#else
|
908
|
+
#define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING ""
|
909
|
+
#endif
|
910
|
+
|
576
911
|
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
577
|
-
const XdsBootstrap::Node* node
|
912
|
+
const XdsBootstrap::Node* node,
|
913
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
914
|
+
certificate_provider_definition_map)
|
578
915
|
: client_(client),
|
579
916
|
tracer_(tracer),
|
580
917
|
node_(node),
|
918
|
+
certificate_provider_definition_map_(certificate_provider_definition_map),
|
581
919
|
build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
|
582
|
-
grpc_version_string()
|
583
|
-
|
920
|
+
grpc_version_string(),
|
921
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
922
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)),
|
923
|
+
user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING,
|
924
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING)),
|
925
|
+
user_agent_version_(
|
926
|
+
absl::StrCat("C-core ", grpc_version_string(),
|
927
|
+
GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
|
928
|
+
GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)) {
|
929
|
+
// Populate upb symtab with xDS proto messages that we want to print
|
930
|
+
// properly in logs.
|
931
|
+
// Note: This won't actually work properly until upb adds support for
|
932
|
+
// Any fields in textproto printing (internal b/178821188).
|
933
|
+
envoy_config_listener_v3_Listener_getmsgdef(symtab_.ptr());
|
934
|
+
envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab_.ptr());
|
935
|
+
envoy_config_cluster_v3_Cluster_getmsgdef(symtab_.ptr());
|
936
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab_.ptr());
|
937
|
+
envoy_config_cluster_v3_Cluster_getmsgdef(symtab_.ptr());
|
938
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab_.ptr());
|
939
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
|
940
|
+
symtab_.ptr());
|
941
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
942
|
+
symtab_.ptr());
|
943
|
+
// Load HTTP filter proto messages into the upb symtab.
|
944
|
+
XdsHttpFilterRegistry::PopulateSymtab(symtab_.ptr());
|
945
|
+
}
|
946
|
+
|
947
|
+
bool XdsApi::IsLds(absl::string_view type_url) {
|
948
|
+
return IsLdsInternal(type_url);
|
949
|
+
}
|
950
|
+
|
951
|
+
bool XdsApi::IsRds(absl::string_view type_url) {
|
952
|
+
return IsRdsInternal(type_url);
|
953
|
+
}
|
954
|
+
|
955
|
+
bool XdsApi::IsCds(absl::string_view type_url) {
|
956
|
+
return IsCdsInternal(type_url);
|
957
|
+
}
|
958
|
+
|
959
|
+
bool XdsApi::IsEds(absl::string_view type_url) {
|
960
|
+
return IsEdsInternal(type_url);
|
961
|
+
}
|
962
|
+
|
963
|
+
absl::StatusOr<XdsApi::ResourceName> XdsApi::ParseResourceName(
|
964
|
+
absl::string_view name, bool (*is_expected_type)(absl::string_view)) {
|
965
|
+
return ParseResourceNameInternal(
|
966
|
+
name, [is_expected_type](absl::string_view type, bool*) {
|
967
|
+
return is_expected_type(type);
|
968
|
+
});
|
969
|
+
}
|
970
|
+
|
971
|
+
std::string XdsApi::ConstructFullResourceName(absl::string_view authority,
|
972
|
+
absl::string_view resource_type,
|
973
|
+
absl::string_view name) {
|
974
|
+
if (absl::StartsWith(name, "xdstp:")) {
|
975
|
+
return absl::StrCat("xdstp://", authority, "/", resource_type,
|
976
|
+
absl::StripPrefix(name, "xdstp:"));
|
977
|
+
} else {
|
978
|
+
return std::string(absl::StripPrefix(name, "old:"));
|
979
|
+
}
|
980
|
+
}
|
584
981
|
|
585
982
|
namespace {
|
586
983
|
|
984
|
+
struct EncodingContext {
|
985
|
+
XdsClient* client; // Used only for logging. Unsafe for dereferencing.
|
986
|
+
TraceFlag* tracer;
|
987
|
+
upb_symtab* symtab;
|
988
|
+
upb_arena* arena;
|
989
|
+
bool use_v3;
|
990
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
991
|
+
certificate_provider_definition_map;
|
992
|
+
};
|
993
|
+
|
587
994
|
// Works for both std::string and absl::string_view.
|
588
995
|
template <typename T>
|
589
996
|
inline upb_strview StdStringToUpbString(const T& str) {
|
590
997
|
return upb_strview_make(str.data(), str.size());
|
591
998
|
}
|
592
999
|
|
593
|
-
void PopulateMetadataValue(
|
594
|
-
const Json& value);
|
1000
|
+
void PopulateMetadataValue(const EncodingContext& context,
|
1001
|
+
google_protobuf_Value* value_pb, const Json& value);
|
595
1002
|
|
596
|
-
void PopulateListValue(
|
1003
|
+
void PopulateListValue(const EncodingContext& context,
|
1004
|
+
google_protobuf_ListValue* list_value,
|
597
1005
|
const Json::Array& values) {
|
598
1006
|
for (const auto& value : values) {
|
599
|
-
auto* value_pb =
|
600
|
-
|
1007
|
+
auto* value_pb =
|
1008
|
+
google_protobuf_ListValue_add_values(list_value, context.arena);
|
1009
|
+
PopulateMetadataValue(context, value_pb, value);
|
601
1010
|
}
|
602
1011
|
}
|
603
1012
|
|
604
|
-
void PopulateMetadata(
|
1013
|
+
void PopulateMetadata(const EncodingContext& context,
|
1014
|
+
google_protobuf_Struct* metadata_pb,
|
605
1015
|
const Json::Object& metadata) {
|
606
1016
|
for (const auto& p : metadata) {
|
607
|
-
google_protobuf_Value* value = google_protobuf_Value_new(arena);
|
608
|
-
PopulateMetadataValue(
|
1017
|
+
google_protobuf_Value* value = google_protobuf_Value_new(context.arena);
|
1018
|
+
PopulateMetadataValue(context, value, p.second);
|
609
1019
|
google_protobuf_Struct_fields_set(
|
610
|
-
metadata_pb, StdStringToUpbString(p.first), value, arena);
|
1020
|
+
metadata_pb, StdStringToUpbString(p.first), value, context.arena);
|
611
1021
|
}
|
612
1022
|
}
|
613
1023
|
|
614
|
-
void PopulateMetadataValue(
|
615
|
-
const Json& value) {
|
1024
|
+
void PopulateMetadataValue(const EncodingContext& context,
|
1025
|
+
google_protobuf_Value* value_pb, const Json& value) {
|
616
1026
|
switch (value.type()) {
|
617
1027
|
case Json::Type::JSON_NULL:
|
618
1028
|
google_protobuf_Value_set_null_value(value_pb, 0);
|
@@ -633,14 +1043,14 @@ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
|
|
633
1043
|
break;
|
634
1044
|
case Json::Type::OBJECT: {
|
635
1045
|
google_protobuf_Struct* struct_value =
|
636
|
-
google_protobuf_Value_mutable_struct_value(value_pb, arena);
|
637
|
-
PopulateMetadata(
|
1046
|
+
google_protobuf_Value_mutable_struct_value(value_pb, context.arena);
|
1047
|
+
PopulateMetadata(context, struct_value, value.object_value());
|
638
1048
|
break;
|
639
1049
|
}
|
640
1050
|
case Json::Type::ARRAY: {
|
641
1051
|
google_protobuf_ListValue* list_value =
|
642
|
-
google_protobuf_Value_mutable_list_value(value_pb, arena);
|
643
|
-
PopulateListValue(
|
1052
|
+
google_protobuf_Value_mutable_list_value(value_pb, context.arena);
|
1053
|
+
PopulateListValue(context, list_value, value.array_value());
|
644
1054
|
break;
|
645
1055
|
}
|
646
1056
|
}
|
@@ -667,7 +1077,8 @@ std::string EncodeStringField(uint32_t field_number, const std::string& str) {
|
|
667
1077
|
EncodeVarint(str.size()) + str;
|
668
1078
|
}
|
669
1079
|
|
670
|
-
void PopulateBuildVersion(
|
1080
|
+
void PopulateBuildVersion(const EncodingContext& context,
|
1081
|
+
envoy_config_core_v3_Node* node_msg,
|
671
1082
|
const std::string& build_version) {
|
672
1083
|
std::string encoded_build_version = EncodeStringField(5, build_version);
|
673
1084
|
// TODO(roth): This should use upb_msg_addunknown(), but that API is
|
@@ -675,12 +1086,14 @@ void PopulateBuildVersion(upb_arena* arena, envoy_config_core_v3_Node* node_msg,
|
|
675
1086
|
// API for now. Change this once we upgrade to a version of upb that
|
676
1087
|
// fixes this bug.
|
677
1088
|
_upb_msg_addunknown(node_msg, encoded_build_version.data(),
|
678
|
-
encoded_build_version.size(), arena);
|
1089
|
+
encoded_build_version.size(), context.arena);
|
679
1090
|
}
|
680
1091
|
|
681
|
-
void PopulateNode(
|
1092
|
+
void PopulateNode(const EncodingContext& context,
|
1093
|
+
const XdsBootstrap::Node* node,
|
682
1094
|
const std::string& build_version,
|
683
1095
|
const std::string& user_agent_name,
|
1096
|
+
const std::string& user_agent_version,
|
684
1097
|
envoy_config_core_v3_Node* node_msg) {
|
685
1098
|
if (node != nullptr) {
|
686
1099
|
if (!node->id.empty()) {
|
@@ -693,13 +1106,13 @@ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node, bool use_v3,
|
|
693
1106
|
}
|
694
1107
|
if (!node->metadata.object_value().empty()) {
|
695
1108
|
google_protobuf_Struct* metadata =
|
696
|
-
envoy_config_core_v3_Node_mutable_metadata(node_msg, arena);
|
697
|
-
PopulateMetadata(
|
1109
|
+
envoy_config_core_v3_Node_mutable_metadata(node_msg, context.arena);
|
1110
|
+
PopulateMetadata(context, metadata, node->metadata.object_value());
|
698
1111
|
}
|
699
1112
|
if (!node->locality_region.empty() || !node->locality_zone.empty() ||
|
700
|
-
!node->
|
1113
|
+
!node->locality_sub_zone.empty()) {
|
701
1114
|
envoy_config_core_v3_Locality* locality =
|
702
|
-
envoy_config_core_v3_Node_mutable_locality(node_msg, arena);
|
1115
|
+
envoy_config_core_v3_Node_mutable_locality(node_msg, context.arena);
|
703
1116
|
if (!node->locality_region.empty()) {
|
704
1117
|
envoy_config_core_v3_Locality_set_region(
|
705
1118
|
locality, StdStringToUpbString(node->locality_region));
|
@@ -708,22 +1121,22 @@ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node, bool use_v3,
|
|
708
1121
|
envoy_config_core_v3_Locality_set_zone(
|
709
1122
|
locality, StdStringToUpbString(node->locality_zone));
|
710
1123
|
}
|
711
|
-
if (!node->
|
1124
|
+
if (!node->locality_sub_zone.empty()) {
|
712
1125
|
envoy_config_core_v3_Locality_set_sub_zone(
|
713
|
-
locality, StdStringToUpbString(node->
|
1126
|
+
locality, StdStringToUpbString(node->locality_sub_zone));
|
714
1127
|
}
|
715
1128
|
}
|
716
1129
|
}
|
717
|
-
if (!use_v3) {
|
718
|
-
PopulateBuildVersion(
|
1130
|
+
if (!context.use_v3) {
|
1131
|
+
PopulateBuildVersion(context, node_msg, build_version);
|
719
1132
|
}
|
720
1133
|
envoy_config_core_v3_Node_set_user_agent_name(
|
721
1134
|
node_msg, StdStringToUpbString(user_agent_name));
|
722
1135
|
envoy_config_core_v3_Node_set_user_agent_version(
|
723
|
-
node_msg,
|
1136
|
+
node_msg, StdStringToUpbString(user_agent_version));
|
724
1137
|
envoy_config_core_v3_Node_add_client_features(
|
725
1138
|
node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
|
726
|
-
arena);
|
1139
|
+
context.arena);
|
727
1140
|
}
|
728
1141
|
|
729
1142
|
inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
|
@@ -735,24 +1148,25 @@ inline std::string UpbStringToStdString(const upb_strview& str) {
|
|
735
1148
|
}
|
736
1149
|
|
737
1150
|
void MaybeLogDiscoveryRequest(
|
738
|
-
|
1151
|
+
const EncodingContext& context,
|
739
1152
|
const envoy_service_discovery_v3_DiscoveryRequest* request) {
|
740
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1153
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
741
1154
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
742
1155
|
const upb_msgdef* msg_type =
|
743
|
-
envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(symtab);
|
1156
|
+
envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(context.symtab);
|
744
1157
|
char buf[10240];
|
745
1158
|
upb_text_encode(request, msg_type, nullptr, 0, buf, sizeof(buf));
|
746
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s",
|
747
|
-
buf);
|
1159
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s",
|
1160
|
+
context.client, buf);
|
748
1161
|
}
|
749
1162
|
}
|
750
1163
|
|
751
1164
|
grpc_slice SerializeDiscoveryRequest(
|
752
|
-
|
1165
|
+
const EncodingContext& context,
|
1166
|
+
envoy_service_discovery_v3_DiscoveryRequest* request) {
|
753
1167
|
size_t output_length;
|
754
1168
|
char* output = envoy_service_discovery_v3_DiscoveryRequest_serialize(
|
755
|
-
request, arena, &output_length);
|
1169
|
+
request, context.arena, &output_length);
|
756
1170
|
return grpc_slice_from_copied_buffer(output, output_length);
|
757
1171
|
}
|
758
1172
|
|
@@ -779,10 +1193,17 @@ absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
|
779
1193
|
|
780
1194
|
grpc_slice XdsApi::CreateAdsRequest(
|
781
1195
|
const XdsBootstrap::XdsServer& server, const std::string& type_url,
|
782
|
-
const std::
|
783
|
-
|
784
|
-
|
1196
|
+
const std::map<absl::string_view /*authority*/,
|
1197
|
+
std::set<absl::string_view /*name*/>>& resource_names,
|
1198
|
+
const std::string& version, const std::string& nonce,
|
1199
|
+
grpc_error_handle error, bool populate_node) {
|
785
1200
|
upb::Arena arena;
|
1201
|
+
const EncodingContext context = {client_,
|
1202
|
+
tracer_,
|
1203
|
+
symtab_.ptr(),
|
1204
|
+
arena.ptr(),
|
1205
|
+
server.ShouldUseV3(),
|
1206
|
+
certificate_provider_definition_map_};
|
786
1207
|
// Create a request.
|
787
1208
|
envoy_service_discovery_v3_DiscoveryRequest* request =
|
788
1209
|
envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr());
|
@@ -802,6 +1223,7 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
802
1223
|
request, StdStringToUpbString(nonce));
|
803
1224
|
}
|
804
1225
|
// Set error_detail if it's a NACK.
|
1226
|
+
std::string error_string_storage;
|
805
1227
|
if (error != GRPC_ERROR_NONE) {
|
806
1228
|
google_rpc_Status* error_detail =
|
807
1229
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_error_detail(
|
@@ -812,12 +1234,9 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
812
1234
|
// generate them in the parsing code, and then use that here.
|
813
1235
|
google_rpc_Status_set_code(error_detail, GRPC_STATUS_INVALID_ARGUMENT);
|
814
1236
|
// Error description comes from the error that was passed in.
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
upb_strview error_description_strview =
|
819
|
-
StdStringToUpbString(StringViewFromSlice(error_description_slice));
|
820
|
-
google_rpc_Status_set_message(error_detail, error_description_strview);
|
1237
|
+
error_string_storage = grpc_error_std_string(error);
|
1238
|
+
upb_strview error_description = StdStringToUpbString(error_string_storage);
|
1239
|
+
google_rpc_Status_set_message(error_detail, error_description);
|
821
1240
|
GRPC_ERROR_UNREF(error);
|
822
1241
|
}
|
823
1242
|
// Populate node.
|
@@ -825,79 +1244,132 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
825
1244
|
envoy_config_core_v3_Node* node_msg =
|
826
1245
|
envoy_service_discovery_v3_DiscoveryRequest_mutable_node(request,
|
827
1246
|
arena.ptr());
|
828
|
-
PopulateNode(
|
829
|
-
|
830
|
-
}
|
1247
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
1248
|
+
user_agent_version_, node_msg);
|
1249
|
+
}
|
1250
|
+
// A vector for temporary local storage of resource name strings.
|
1251
|
+
std::vector<std::string> resource_name_storage;
|
1252
|
+
// Make sure the vector is sized right up-front, so that reallocations
|
1253
|
+
// don't move the strings out from under the upb proto object that
|
1254
|
+
// points to them.
|
1255
|
+
size_t size = 0;
|
1256
|
+
for (const auto& p : resource_names) {
|
1257
|
+
size += p.second.size();
|
1258
|
+
}
|
1259
|
+
resource_name_storage.reserve(size);
|
831
1260
|
// Add resource_names.
|
832
|
-
for (const auto&
|
833
|
-
|
834
|
-
|
1261
|
+
for (const auto& a : resource_names) {
|
1262
|
+
absl::string_view authority = a.first;
|
1263
|
+
for (const auto& p : a.second) {
|
1264
|
+
absl::string_view resource_id = p;
|
1265
|
+
resource_name_storage.push_back(
|
1266
|
+
ConstructFullResourceName(authority, type_url, resource_id));
|
1267
|
+
envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
|
1268
|
+
request, StdStringToUpbString(resource_name_storage.back()),
|
1269
|
+
arena.ptr());
|
1270
|
+
}
|
835
1271
|
}
|
836
|
-
MaybeLogDiscoveryRequest(
|
837
|
-
return SerializeDiscoveryRequest(
|
1272
|
+
MaybeLogDiscoveryRequest(context, request);
|
1273
|
+
return SerializeDiscoveryRequest(context, request);
|
838
1274
|
}
|
839
1275
|
|
840
1276
|
namespace {
|
841
1277
|
|
842
1278
|
void MaybeLogDiscoveryResponse(
|
843
|
-
|
1279
|
+
const EncodingContext& context,
|
844
1280
|
const envoy_service_discovery_v3_DiscoveryResponse* response) {
|
845
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1281
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
846
1282
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
847
1283
|
const upb_msgdef* msg_type =
|
848
|
-
envoy_service_discovery_v3_DiscoveryResponse_getmsgdef(symtab);
|
1284
|
+
envoy_service_discovery_v3_DiscoveryResponse_getmsgdef(context.symtab);
|
849
1285
|
char buf[10240];
|
850
1286
|
upb_text_encode(response, msg_type, nullptr, 0, buf, sizeof(buf));
|
851
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", client,
|
1287
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", context.client,
|
1288
|
+
buf);
|
1289
|
+
}
|
1290
|
+
}
|
1291
|
+
|
1292
|
+
void MaybeLogListener(const EncodingContext& context,
|
1293
|
+
const envoy_config_listener_v3_Listener* listener) {
|
1294
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1295
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1296
|
+
const upb_msgdef* msg_type =
|
1297
|
+
envoy_config_listener_v3_Listener_getmsgdef(context.symtab);
|
1298
|
+
char buf[10240];
|
1299
|
+
upb_text_encode(listener, msg_type, nullptr, 0, buf, sizeof(buf));
|
1300
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] Listener: %s", context.client, buf);
|
1301
|
+
}
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
void MaybeLogHttpConnectionManager(
|
1305
|
+
const EncodingContext& context,
|
1306
|
+
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
1307
|
+
http_connection_manager_config) {
|
1308
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1309
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1310
|
+
const upb_msgdef* msg_type =
|
1311
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
|
1312
|
+
context.symtab);
|
1313
|
+
char buf[10240];
|
1314
|
+
upb_text_encode(http_connection_manager_config, msg_type, nullptr, 0, buf,
|
1315
|
+
sizeof(buf));
|
1316
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] HttpConnectionManager: %s",
|
1317
|
+
context.client, buf);
|
852
1318
|
}
|
853
1319
|
}
|
854
1320
|
|
855
1321
|
void MaybeLogRouteConfiguration(
|
856
|
-
|
1322
|
+
const EncodingContext& context,
|
857
1323
|
const envoy_config_route_v3_RouteConfiguration* route_config) {
|
858
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1324
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
859
1325
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
860
1326
|
const upb_msgdef* msg_type =
|
861
|
-
envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab);
|
1327
|
+
envoy_config_route_v3_RouteConfiguration_getmsgdef(context.symtab);
|
862
1328
|
char buf[10240];
|
863
1329
|
upb_text_encode(route_config, msg_type, nullptr, 0, buf, sizeof(buf));
|
864
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", client,
|
1330
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", context.client,
|
1331
|
+
buf);
|
865
1332
|
}
|
866
1333
|
}
|
867
1334
|
|
868
|
-
void MaybeLogCluster(
|
1335
|
+
void MaybeLogCluster(const EncodingContext& context,
|
869
1336
|
const envoy_config_cluster_v3_Cluster* cluster) {
|
870
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1337
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
871
1338
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
872
1339
|
const upb_msgdef* msg_type =
|
873
|
-
envoy_config_cluster_v3_Cluster_getmsgdef(symtab);
|
1340
|
+
envoy_config_cluster_v3_Cluster_getmsgdef(context.symtab);
|
874
1341
|
char buf[10240];
|
875
1342
|
upb_text_encode(cluster, msg_type, nullptr, 0, buf, sizeof(buf));
|
876
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", client, buf);
|
1343
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", context.client, buf);
|
877
1344
|
}
|
878
1345
|
}
|
879
1346
|
|
880
1347
|
void MaybeLogClusterLoadAssignment(
|
881
|
-
|
1348
|
+
const EncodingContext& context,
|
882
1349
|
const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
|
883
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
1350
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
884
1351
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
885
1352
|
const upb_msgdef* msg_type =
|
886
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
|
1353
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
|
1354
|
+
context.symtab);
|
887
1355
|
char buf[10240];
|
888
1356
|
upb_text_encode(cla, msg_type, nullptr, 0, buf, sizeof(buf));
|
889
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
|
890
|
-
buf);
|
1357
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
|
1358
|
+
context.client, buf);
|
891
1359
|
}
|
892
1360
|
}
|
893
1361
|
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
1362
|
+
grpc_error_handle RoutePathMatchParse(
|
1363
|
+
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route,
|
1364
|
+
bool* ignore_route) {
|
1365
|
+
auto* case_sensitive_ptr =
|
1366
|
+
envoy_config_route_v3_RouteMatch_case_sensitive(match);
|
1367
|
+
bool case_sensitive = true;
|
1368
|
+
if (case_sensitive_ptr != nullptr) {
|
1369
|
+
case_sensitive = google_protobuf_BoolValue_value(case_sensitive_ptr);
|
900
1370
|
}
|
1371
|
+
StringMatcher::Type type;
|
1372
|
+
std::string match_string;
|
901
1373
|
if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
|
902
1374
|
absl::string_view prefix =
|
903
1375
|
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
|
@@ -922,9 +1394,8 @@ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
922
1394
|
return GRPC_ERROR_NONE;
|
923
1395
|
}
|
924
1396
|
}
|
925
|
-
|
926
|
-
|
927
|
-
route->matchers.path_matcher.string_matcher = std::string(prefix);
|
1397
|
+
type = StringMatcher::Type::kPrefix;
|
1398
|
+
match_string = std::string(prefix);
|
928
1399
|
} else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
|
929
1400
|
absl::string_view path =
|
930
1401
|
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
|
@@ -957,102 +1428,96 @@ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
957
1428
|
*ignore_route = true;
|
958
1429
|
return GRPC_ERROR_NONE;
|
959
1430
|
}
|
960
|
-
|
961
|
-
|
962
|
-
route->matchers.path_matcher.string_matcher = std::string(path);
|
1431
|
+
type = StringMatcher::Type::kExact;
|
1432
|
+
match_string = std::string(path);
|
963
1433
|
} else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
|
964
1434
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
965
1435
|
envoy_config_route_v3_RouteMatch_safe_regex(match);
|
966
1436
|
GPR_ASSERT(regex_matcher != nullptr);
|
967
|
-
|
1437
|
+
type = StringMatcher::Type::kSafeRegex;
|
1438
|
+
match_string = UpbStringToStdString(
|
968
1439
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
969
|
-
RE2::Options options;
|
970
|
-
options.set_case_sensitive(route->matchers.path_matcher.case_sensitive);
|
971
|
-
auto regex = absl::make_unique<RE2>(std::move(matcher), options);
|
972
|
-
if (!regex->ok()) {
|
973
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
974
|
-
"Invalid regex string specified in path matcher.");
|
975
|
-
}
|
976
|
-
route->matchers.path_matcher.type =
|
977
|
-
XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX;
|
978
|
-
route->matchers.path_matcher.regex_matcher = std::move(regex);
|
979
1440
|
} else {
|
980
1441
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
981
1442
|
"Invalid route path specifier specified.");
|
982
1443
|
}
|
1444
|
+
absl::StatusOr<StringMatcher> string_matcher =
|
1445
|
+
StringMatcher::Create(type, match_string, case_sensitive);
|
1446
|
+
if (!string_matcher.ok()) {
|
1447
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1448
|
+
absl::StrCat("path matcher: ", string_matcher.status().message()));
|
1449
|
+
}
|
1450
|
+
route->matchers.path_matcher = std::move(string_matcher.value());
|
983
1451
|
return GRPC_ERROR_NONE;
|
984
1452
|
}
|
985
1453
|
|
986
|
-
|
1454
|
+
grpc_error_handle RouteHeaderMatchersParse(
|
987
1455
|
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
988
1456
|
size_t size;
|
989
1457
|
const envoy_config_route_v3_HeaderMatcher* const* headers =
|
990
1458
|
envoy_config_route_v3_RouteMatch_headers(match, &size);
|
991
1459
|
for (size_t i = 0; i < size; ++i) {
|
992
1460
|
const envoy_config_route_v3_HeaderMatcher* header = headers[i];
|
993
|
-
|
994
|
-
header_matcher.name =
|
1461
|
+
const std::string name =
|
995
1462
|
UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
|
1463
|
+
HeaderMatcher::Type type;
|
1464
|
+
std::string match_string;
|
1465
|
+
int64_t range_start = 0;
|
1466
|
+
int64_t range_end = 0;
|
1467
|
+
bool present_match = false;
|
996
1468
|
if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
|
997
|
-
|
998
|
-
|
999
|
-
header_matcher.string_matcher = UpbStringToStdString(
|
1469
|
+
type = HeaderMatcher::Type::kExact;
|
1470
|
+
match_string = UpbStringToStdString(
|
1000
1471
|
envoy_config_route_v3_HeaderMatcher_exact_match(header));
|
1001
1472
|
} else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
|
1002
1473
|
header)) {
|
1003
1474
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1004
1475
|
envoy_config_route_v3_HeaderMatcher_safe_regex_match(header);
|
1005
1476
|
GPR_ASSERT(regex_matcher != nullptr);
|
1006
|
-
|
1477
|
+
type = HeaderMatcher::Type::kSafeRegex;
|
1478
|
+
match_string = UpbStringToStdString(
|
1007
1479
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
1008
|
-
std::unique_ptr<RE2> regex = absl::make_unique<RE2>(matcher);
|
1009
|
-
if (!regex->ok()) {
|
1010
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1011
|
-
"Invalid regex string specified in header matcher.");
|
1012
|
-
}
|
1013
|
-
header_matcher.type =
|
1014
|
-
XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX;
|
1015
|
-
header_matcher.regex_match = std::move(regex);
|
1016
1480
|
} else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
|
1017
|
-
|
1018
|
-
XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE;
|
1481
|
+
type = HeaderMatcher::Type::kRange;
|
1019
1482
|
const envoy_type_v3_Int64Range* range_matcher =
|
1020
1483
|
envoy_config_route_v3_HeaderMatcher_range_match(header);
|
1021
|
-
|
1022
|
-
|
1023
|
-
header_matcher.range_end = envoy_type_v3_Int64Range_end(range_matcher);
|
1024
|
-
if (header_matcher.range_end < header_matcher.range_start) {
|
1025
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1026
|
-
"Invalid range header matcher specifier specified: end "
|
1027
|
-
"cannot be smaller than start.");
|
1028
|
-
}
|
1484
|
+
range_start = envoy_type_v3_Int64Range_start(range_matcher);
|
1485
|
+
range_end = envoy_type_v3_Int64Range_end(range_matcher);
|
1029
1486
|
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
1030
|
-
|
1031
|
-
|
1032
|
-
header_matcher.present_match =
|
1033
|
-
envoy_config_route_v3_HeaderMatcher_present_match(header);
|
1487
|
+
type = HeaderMatcher::Type::kPresent;
|
1488
|
+
present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
|
1034
1489
|
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
1035
|
-
|
1036
|
-
|
1037
|
-
header_matcher.string_matcher = UpbStringToStdString(
|
1490
|
+
type = HeaderMatcher::Type::kPrefix;
|
1491
|
+
match_string = UpbStringToStdString(
|
1038
1492
|
envoy_config_route_v3_HeaderMatcher_prefix_match(header));
|
1039
1493
|
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
1040
|
-
|
1041
|
-
|
1042
|
-
header_matcher.string_matcher = UpbStringToStdString(
|
1494
|
+
type = HeaderMatcher::Type::kSuffix;
|
1495
|
+
match_string = UpbStringToStdString(
|
1043
1496
|
envoy_config_route_v3_HeaderMatcher_suffix_match(header));
|
1497
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
1498
|
+
type = HeaderMatcher::Type::kContains;
|
1499
|
+
match_string = UpbStringToStdString(
|
1500
|
+
envoy_config_route_v3_HeaderMatcher_contains_match(header));
|
1044
1501
|
} else {
|
1045
1502
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1046
1503
|
"Invalid route header matcher specified.");
|
1047
1504
|
}
|
1048
|
-
|
1505
|
+
bool invert_match =
|
1049
1506
|
envoy_config_route_v3_HeaderMatcher_invert_match(header);
|
1050
|
-
|
1507
|
+
absl::StatusOr<HeaderMatcher> header_matcher =
|
1508
|
+
HeaderMatcher::Create(name, type, match_string, range_start, range_end,
|
1509
|
+
present_match, invert_match);
|
1510
|
+
if (!header_matcher.ok()) {
|
1511
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1512
|
+
absl::StrCat("header matcher: ", header_matcher.status().message()));
|
1513
|
+
}
|
1514
|
+
route->matchers.header_matchers.emplace_back(
|
1515
|
+
std::move(header_matcher.value()));
|
1051
1516
|
}
|
1052
1517
|
return GRPC_ERROR_NONE;
|
1053
1518
|
}
|
1054
1519
|
|
1055
|
-
|
1520
|
+
grpc_error_handle RouteRuntimeFractionParse(
|
1056
1521
|
const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
|
1057
1522
|
const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
|
1058
1523
|
envoy_config_route_v3_RouteMatch_runtime_fraction(match);
|
@@ -1085,12 +1550,185 @@ grpc_error* RouteRuntimeFractionParse(
|
|
1085
1550
|
return GRPC_ERROR_NONE;
|
1086
1551
|
}
|
1087
1552
|
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1553
|
+
grpc_error_handle ExtractHttpFilterTypeName(const EncodingContext& context,
|
1554
|
+
const google_protobuf_Any* any,
|
1555
|
+
absl::string_view* filter_type) {
|
1556
|
+
*filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1557
|
+
if (*filter_type == "type.googleapis.com/xds.type.v3.TypedStruct" ||
|
1558
|
+
*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
|
1559
|
+
upb_strview any_value = google_protobuf_Any_value(any);
|
1560
|
+
const auto* typed_struct = xds_type_v3_TypedStruct_parse(
|
1561
|
+
any_value.data, any_value.size, context.arena);
|
1562
|
+
if (typed_struct == nullptr) {
|
1563
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1564
|
+
"could not parse TypedStruct from filter config");
|
1565
|
+
}
|
1566
|
+
*filter_type =
|
1567
|
+
UpbStringToAbsl(xds_type_v3_TypedStruct_type_url(typed_struct));
|
1568
|
+
}
|
1569
|
+
*filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
|
1570
|
+
return GRPC_ERROR_NONE;
|
1571
|
+
}
|
1572
|
+
|
1573
|
+
template <typename ParentType, typename EntryType>
|
1574
|
+
grpc_error_handle ParseTypedPerFilterConfig(
|
1575
|
+
const EncodingContext& context, const ParentType* parent,
|
1576
|
+
const EntryType* (*entry_func)(const ParentType*, size_t*),
|
1577
|
+
upb_strview (*key_func)(const EntryType*),
|
1578
|
+
const google_protobuf_Any* (*value_func)(const EntryType*),
|
1579
|
+
XdsApi::TypedPerFilterConfig* typed_per_filter_config) {
|
1580
|
+
size_t filter_it = UPB_MAP_BEGIN;
|
1581
|
+
while (true) {
|
1582
|
+
const auto* filter_entry = entry_func(parent, &filter_it);
|
1583
|
+
if (filter_entry == nullptr) break;
|
1584
|
+
absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
|
1585
|
+
if (key.empty()) {
|
1586
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("empty filter name in map");
|
1587
|
+
}
|
1588
|
+
const google_protobuf_Any* any = value_func(filter_entry);
|
1589
|
+
GPR_ASSERT(any != nullptr);
|
1590
|
+
absl::string_view filter_type =
|
1591
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1592
|
+
if (filter_type.empty()) {
|
1593
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1594
|
+
absl::StrCat("no filter config specified for filter name ", key));
|
1595
|
+
}
|
1596
|
+
bool is_optional = false;
|
1597
|
+
if (filter_type ==
|
1598
|
+
"type.googleapis.com/envoy.config.route.v3.FilterConfig") {
|
1599
|
+
upb_strview any_value = google_protobuf_Any_value(any);
|
1600
|
+
const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
|
1601
|
+
any_value.data, any_value.size, context.arena);
|
1602
|
+
if (filter_config == nullptr) {
|
1603
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1604
|
+
absl::StrCat("could not parse FilterConfig wrapper for ", key));
|
1605
|
+
}
|
1606
|
+
is_optional =
|
1607
|
+
envoy_config_route_v3_FilterConfig_is_optional(filter_config);
|
1608
|
+
any = envoy_config_route_v3_FilterConfig_config(filter_config);
|
1609
|
+
if (any == nullptr) {
|
1610
|
+
if (is_optional) continue;
|
1611
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1612
|
+
absl::StrCat("no filter config specified for filter name ", key));
|
1613
|
+
}
|
1614
|
+
}
|
1615
|
+
grpc_error_handle error =
|
1616
|
+
ExtractHttpFilterTypeName(context, any, &filter_type);
|
1617
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1618
|
+
const XdsHttpFilterImpl* filter_impl =
|
1619
|
+
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
1620
|
+
if (filter_impl == nullptr) {
|
1621
|
+
if (is_optional) continue;
|
1622
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1623
|
+
absl::StrCat("no filter registered for config type ", filter_type));
|
1624
|
+
}
|
1625
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
1626
|
+
filter_impl->GenerateFilterConfigOverride(
|
1627
|
+
google_protobuf_Any_value(any), context.arena);
|
1628
|
+
if (!filter_config.ok()) {
|
1629
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
1630
|
+
"filter config for type ", filter_type,
|
1631
|
+
" failed to parse: ", filter_config.status().ToString()));
|
1632
|
+
}
|
1633
|
+
(*typed_per_filter_config)[std::string(key)] = std::move(*filter_config);
|
1634
|
+
}
|
1635
|
+
return GRPC_ERROR_NONE;
|
1636
|
+
}
|
1637
|
+
|
1638
|
+
XdsApi::Duration DurationParse(const google_protobuf_Duration* proto_duration) {
|
1639
|
+
XdsApi::Duration duration;
|
1640
|
+
duration.seconds = google_protobuf_Duration_seconds(proto_duration);
|
1641
|
+
duration.nanos = google_protobuf_Duration_nanos(proto_duration);
|
1642
|
+
return duration;
|
1643
|
+
}
|
1644
|
+
|
1645
|
+
grpc_error_handle RetryPolicyParse(
|
1646
|
+
const EncodingContext& context,
|
1647
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy,
|
1648
|
+
absl::optional<XdsApi::RetryPolicy>* retry) {
|
1649
|
+
std::vector<grpc_error_handle> errors;
|
1650
|
+
XdsApi::RetryPolicy retry_to_return;
|
1651
|
+
auto retry_on = UpbStringToStdString(
|
1652
|
+
envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
|
1653
|
+
std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
|
1654
|
+
for (const auto& code : codes) {
|
1655
|
+
if (code == "cancelled") {
|
1656
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_CANCELLED);
|
1657
|
+
} else if (code == "deadline-exceeded") {
|
1658
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_DEADLINE_EXCEEDED);
|
1659
|
+
} else if (code == "internal") {
|
1660
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_INTERNAL);
|
1661
|
+
} else if (code == "resource-exhausted") {
|
1662
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_RESOURCE_EXHAUSTED);
|
1663
|
+
} else if (code == "unavailable") {
|
1664
|
+
retry_to_return.retry_on.Add(GRPC_STATUS_UNAVAILABLE);
|
1665
|
+
} else {
|
1666
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1667
|
+
gpr_log(GPR_INFO, "Unsupported retry_on policy %s.",
|
1668
|
+
std::string(code).c_str());
|
1669
|
+
}
|
1670
|
+
}
|
1671
|
+
}
|
1672
|
+
const google_protobuf_UInt32Value* num_retries =
|
1673
|
+
envoy_config_route_v3_RetryPolicy_num_retries(retry_policy);
|
1674
|
+
if (num_retries != nullptr) {
|
1675
|
+
uint32_t num_retries_value = google_protobuf_UInt32Value_value(num_retries);
|
1676
|
+
if (num_retries_value == 0) {
|
1677
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1678
|
+
"RouteAction RetryPolicy num_retries set to invalid value 0."));
|
1679
|
+
} else {
|
1680
|
+
retry_to_return.num_retries = num_retries_value;
|
1681
|
+
}
|
1682
|
+
} else {
|
1683
|
+
retry_to_return.num_retries = 1;
|
1684
|
+
}
|
1685
|
+
const envoy_config_route_v3_RetryPolicy_RetryBackOff* backoff =
|
1686
|
+
envoy_config_route_v3_RetryPolicy_retry_back_off(retry_policy);
|
1687
|
+
if (backoff != nullptr) {
|
1688
|
+
const google_protobuf_Duration* base_interval =
|
1689
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
|
1690
|
+
if (base_interval == nullptr) {
|
1691
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1692
|
+
"RouteAction RetryPolicy RetryBackoff missing base interval."));
|
1693
|
+
} else {
|
1694
|
+
retry_to_return.retry_back_off.base_interval =
|
1695
|
+
DurationParse(base_interval);
|
1696
|
+
}
|
1697
|
+
const google_protobuf_Duration* max_interval =
|
1698
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
|
1699
|
+
XdsApi::Duration max;
|
1700
|
+
if (max_interval != nullptr) {
|
1701
|
+
max = DurationParse(max_interval);
|
1702
|
+
} else {
|
1703
|
+
// if max interval is not set, it is 10x the base, if the value in nanos
|
1704
|
+
// can yield another second, adjust the value in seconds accordingly.
|
1705
|
+
max.seconds = retry_to_return.retry_back_off.base_interval.seconds * 10;
|
1706
|
+
max.nanos = retry_to_return.retry_back_off.base_interval.nanos * 10;
|
1707
|
+
if (max.nanos > 1000000000) {
|
1708
|
+
max.seconds += max.nanos / 1000000000;
|
1709
|
+
max.nanos = max.nanos % 1000000000;
|
1710
|
+
}
|
1711
|
+
}
|
1712
|
+
retry_to_return.retry_back_off.max_interval = max;
|
1713
|
+
} else {
|
1714
|
+
retry_to_return.retry_back_off.base_interval.seconds = 0;
|
1715
|
+
retry_to_return.retry_back_off.base_interval.nanos = 25000000;
|
1716
|
+
retry_to_return.retry_back_off.max_interval.seconds = 0;
|
1717
|
+
retry_to_return.retry_back_off.max_interval.nanos = 250000000;
|
1718
|
+
}
|
1719
|
+
if (errors.empty()) {
|
1720
|
+
*retry = retry_to_return;
|
1721
|
+
return GRPC_ERROR_NONE;
|
1722
|
+
} else {
|
1723
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing retry policy",
|
1724
|
+
&errors);
|
1725
|
+
}
|
1726
|
+
}
|
1727
|
+
|
1728
|
+
grpc_error_handle RouteActionParse(const EncodingContext& context,
|
1729
|
+
const envoy_config_route_v3_Route* route_msg,
|
1730
|
+
XdsApi::Route::RouteAction* route,
|
1731
|
+
bool* ignore_route) {
|
1094
1732
|
const envoy_config_route_v3_RouteAction* route_action =
|
1095
1733
|
envoy_config_route_v3_Route_route(route_msg);
|
1096
1734
|
// Get the cluster or weighted_clusters in the RouteAction.
|
@@ -1119,7 +1757,7 @@ grpc_error* RouteActionParse(const envoy_config_route_v3_Route* route_msg,
|
|
1119
1757
|
for (size_t j = 0; j < clusters_size; ++j) {
|
1120
1758
|
const envoy_config_route_v3_WeightedCluster_ClusterWeight*
|
1121
1759
|
cluster_weight = clusters[j];
|
1122
|
-
XdsApi::Route::ClusterWeight cluster;
|
1760
|
+
XdsApi::Route::RouteAction::ClusterWeight cluster;
|
1123
1761
|
cluster.name = UpbStringToStdString(
|
1124
1762
|
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
1125
1763
|
cluster_weight));
|
@@ -1136,7 +1774,19 @@ grpc_error* RouteActionParse(const envoy_config_route_v3_Route* route_msg,
|
|
1136
1774
|
"RouteAction weighted_cluster cluster missing weight");
|
1137
1775
|
}
|
1138
1776
|
cluster.weight = google_protobuf_UInt32Value_value(weight);
|
1777
|
+
if (cluster.weight == 0) continue;
|
1139
1778
|
sum_of_weights += cluster.weight;
|
1779
|
+
if (context.use_v3) {
|
1780
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
1781
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
1782
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
1783
|
+
context, cluster_weight,
|
1784
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
|
1785
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
|
1786
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
|
1787
|
+
&cluster.typed_per_filter_config);
|
1788
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1789
|
+
}
|
1140
1790
|
route->weighted_clusters.emplace_back(std::move(cluster));
|
1141
1791
|
}
|
1142
1792
|
if (total_weight != sum_of_weights) {
|
@@ -1151,7 +1801,7 @@ grpc_error* RouteActionParse(const envoy_config_route_v3_Route* route_msg,
|
|
1151
1801
|
// No cluster or weighted_clusters found in RouteAction, ignore this route.
|
1152
1802
|
*ignore_route = true;
|
1153
1803
|
}
|
1154
|
-
if (
|
1804
|
+
if (!*ignore_route) {
|
1155
1805
|
const envoy_config_route_v3_RouteAction_MaxStreamDuration*
|
1156
1806
|
max_stream_duration =
|
1157
1807
|
envoy_config_route_v3_RouteAction_max_stream_duration(route_action);
|
@@ -1165,27 +1815,107 @@ grpc_error* RouteActionParse(const envoy_config_route_v3_Route* route_msg,
|
|
1165
1815
|
max_stream_duration);
|
1166
1816
|
}
|
1167
1817
|
if (duration != nullptr) {
|
1168
|
-
|
1169
|
-
duration_in_route.seconds = google_protobuf_Duration_seconds(duration);
|
1170
|
-
duration_in_route.nanos = google_protobuf_Duration_nanos(duration);
|
1171
|
-
route->max_stream_duration = duration_in_route;
|
1818
|
+
route->max_stream_duration = DurationParse(duration);
|
1172
1819
|
}
|
1173
1820
|
}
|
1174
1821
|
}
|
1822
|
+
// Get HashPolicy from RouteAction
|
1823
|
+
size_t size = 0;
|
1824
|
+
const envoy_config_route_v3_RouteAction_HashPolicy* const* hash_policies =
|
1825
|
+
envoy_config_route_v3_RouteAction_hash_policy(route_action, &size);
|
1826
|
+
for (size_t i = 0; i < size; ++i) {
|
1827
|
+
const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
|
1828
|
+
hash_policies[i];
|
1829
|
+
XdsApi::Route::RouteAction::HashPolicy policy;
|
1830
|
+
policy.terminal =
|
1831
|
+
envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
|
1832
|
+
const envoy_config_route_v3_RouteAction_HashPolicy_Header* header;
|
1833
|
+
const envoy_config_route_v3_RouteAction_HashPolicy_FilterState*
|
1834
|
+
filter_state;
|
1835
|
+
if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
|
1836
|
+
hash_policy)) != nullptr) {
|
1837
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::HEADER;
|
1838
|
+
policy.header_name = UpbStringToStdString(
|
1839
|
+
envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
|
1840
|
+
header));
|
1841
|
+
const struct envoy_type_matcher_v3_RegexMatchAndSubstitute*
|
1842
|
+
regex_rewrite =
|
1843
|
+
envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
|
1844
|
+
header);
|
1845
|
+
if (regex_rewrite != nullptr) {
|
1846
|
+
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
1847
|
+
envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
|
1848
|
+
regex_rewrite);
|
1849
|
+
if (regex_matcher == nullptr) {
|
1850
|
+
gpr_log(
|
1851
|
+
GPR_DEBUG,
|
1852
|
+
"RouteAction HashPolicy contains policy specifier Header with "
|
1853
|
+
"RegexMatchAndSubstitution but RegexMatcher pattern is "
|
1854
|
+
"missing");
|
1855
|
+
continue;
|
1856
|
+
}
|
1857
|
+
RE2::Options options;
|
1858
|
+
policy.regex = absl::make_unique<RE2>(
|
1859
|
+
UpbStringToStdString(
|
1860
|
+
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
|
1861
|
+
options);
|
1862
|
+
if (!policy.regex->ok()) {
|
1863
|
+
gpr_log(
|
1864
|
+
GPR_DEBUG,
|
1865
|
+
"RouteAction HashPolicy contains policy specifier Header with "
|
1866
|
+
"RegexMatchAndSubstitution but RegexMatcher pattern does not "
|
1867
|
+
"compile");
|
1868
|
+
continue;
|
1869
|
+
}
|
1870
|
+
policy.regex_substitution = UpbStringToStdString(
|
1871
|
+
envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
|
1872
|
+
regex_rewrite));
|
1873
|
+
}
|
1874
|
+
} else if ((filter_state =
|
1875
|
+
envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
|
1876
|
+
hash_policy)) != nullptr) {
|
1877
|
+
std::string key = UpbStringToStdString(
|
1878
|
+
envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
|
1879
|
+
filter_state));
|
1880
|
+
if (key == "io.grpc.channel_id") {
|
1881
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::CHANNEL_ID;
|
1882
|
+
} else {
|
1883
|
+
gpr_log(GPR_DEBUG,
|
1884
|
+
"RouteAction HashPolicy contains policy specifier "
|
1885
|
+
"FilterState but "
|
1886
|
+
"key is not io.grpc.channel_id.");
|
1887
|
+
continue;
|
1888
|
+
}
|
1889
|
+
} else {
|
1890
|
+
gpr_log(GPR_DEBUG,
|
1891
|
+
"RouteAction HashPolicy contains unsupported policy specifier.");
|
1892
|
+
continue;
|
1893
|
+
}
|
1894
|
+
route->hash_policies.emplace_back(std::move(policy));
|
1895
|
+
}
|
1896
|
+
// Get retry policy
|
1897
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1898
|
+
envoy_config_route_v3_RouteAction_retry_policy(route_action);
|
1899
|
+
if (retry_policy != nullptr) {
|
1900
|
+
absl::optional<XdsApi::RetryPolicy> retry;
|
1901
|
+
grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
|
1902
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1903
|
+
route->retry_policy = retry;
|
1904
|
+
}
|
1175
1905
|
return GRPC_ERROR_NONE;
|
1176
1906
|
}
|
1177
1907
|
|
1178
|
-
|
1179
|
-
|
1908
|
+
grpc_error_handle RouteConfigParse(
|
1909
|
+
const EncodingContext& context,
|
1180
1910
|
const envoy_config_route_v3_RouteConfiguration* route_config,
|
1181
|
-
XdsApi::RdsUpdate* rds_update) {
|
1182
|
-
MaybeLogRouteConfiguration(
|
1911
|
+
bool /*is_v2*/, XdsApi::RdsUpdate* rds_update) {
|
1912
|
+
MaybeLogRouteConfiguration(context, route_config);
|
1183
1913
|
// Get the virtual hosts.
|
1184
|
-
size_t
|
1914
|
+
size_t num_virtual_hosts;
|
1185
1915
|
const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
|
1186
|
-
envoy_config_route_v3_RouteConfiguration_virtual_hosts(
|
1187
|
-
|
1188
|
-
for (size_t i = 0; i <
|
1916
|
+
envoy_config_route_v3_RouteConfiguration_virtual_hosts(
|
1917
|
+
route_config, &num_virtual_hosts);
|
1918
|
+
for (size_t i = 0; i < num_virtual_hosts; ++i) {
|
1189
1919
|
rds_update->virtual_hosts.emplace_back();
|
1190
1920
|
XdsApi::RdsUpdate::VirtualHost& vhost = rds_update->virtual_hosts.back();
|
1191
1921
|
// Parse domains.
|
@@ -1196,15 +1926,35 @@ grpc_error* RouteConfigParse(
|
|
1196
1926
|
std::string domain_pattern = UpbStringToStdString(domains[j]);
|
1197
1927
|
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
1198
1928
|
if (match_type == INVALID_MATCH) {
|
1199
|
-
return
|
1200
|
-
absl::StrCat("Invalid domain pattern \"", domain_pattern, "\".")
|
1201
|
-
.c_str());
|
1929
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1930
|
+
absl::StrCat("Invalid domain pattern \"", domain_pattern, "\"."));
|
1202
1931
|
}
|
1203
1932
|
vhost.domains.emplace_back(std::move(domain_pattern));
|
1204
1933
|
}
|
1205
1934
|
if (vhost.domains.empty()) {
|
1206
1935
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
|
1207
1936
|
}
|
1937
|
+
// Parse typed_per_filter_config.
|
1938
|
+
if (context.use_v3) {
|
1939
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
1940
|
+
envoy_config_route_v3_VirtualHost,
|
1941
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
|
1942
|
+
context, virtual_hosts[i],
|
1943
|
+
envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
|
1944
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
|
1945
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
|
1946
|
+
&vhost.typed_per_filter_config);
|
1947
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1948
|
+
}
|
1949
|
+
// Parse retry policy.
|
1950
|
+
absl::optional<XdsApi::RetryPolicy> virtual_host_retry_policy;
|
1951
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1952
|
+
envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
|
1953
|
+
if (retry_policy != nullptr) {
|
1954
|
+
grpc_error_handle error =
|
1955
|
+
RetryPolicyParse(context, retry_policy, &virtual_host_retry_policy);
|
1956
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1957
|
+
}
|
1208
1958
|
// Parse routes.
|
1209
1959
|
size_t num_routes;
|
1210
1960
|
const envoy_config_route_v3_Route* const* routes =
|
@@ -1217,6 +1967,9 @@ grpc_error* RouteConfigParse(
|
|
1217
1967
|
for (size_t j = 0; j < num_routes; ++j) {
|
1218
1968
|
const envoy_config_route_v3_RouteMatch* match =
|
1219
1969
|
envoy_config_route_v3_Route_match(routes[j]);
|
1970
|
+
if (match == nullptr) {
|
1971
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Match can't be null.");
|
1972
|
+
}
|
1220
1973
|
size_t query_parameters_size;
|
1221
1974
|
static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
|
1222
1975
|
match, &query_parameters_size));
|
@@ -1225,16 +1978,41 @@ grpc_error* RouteConfigParse(
|
|
1225
1978
|
}
|
1226
1979
|
XdsApi::Route route;
|
1227
1980
|
bool ignore_route = false;
|
1228
|
-
|
1981
|
+
grpc_error_handle error =
|
1982
|
+
RoutePathMatchParse(match, &route, &ignore_route);
|
1229
1983
|
if (error != GRPC_ERROR_NONE) return error;
|
1230
1984
|
if (ignore_route) continue;
|
1231
1985
|
error = RouteHeaderMatchersParse(match, &route);
|
1232
1986
|
if (error != GRPC_ERROR_NONE) return error;
|
1233
1987
|
error = RouteRuntimeFractionParse(match, &route);
|
1234
1988
|
if (error != GRPC_ERROR_NONE) return error;
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1989
|
+
if (envoy_config_route_v3_Route_has_route(routes[j])) {
|
1990
|
+
route.action.emplace<XdsApi::Route::RouteAction>();
|
1991
|
+
auto& route_action =
|
1992
|
+
absl::get<XdsApi::Route::RouteAction>(route.action);
|
1993
|
+
error =
|
1994
|
+
RouteActionParse(context, routes[j], &route_action, &ignore_route);
|
1995
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1996
|
+
if (ignore_route) continue;
|
1997
|
+
if (route_action.retry_policy == absl::nullopt &&
|
1998
|
+
retry_policy != nullptr) {
|
1999
|
+
route_action.retry_policy = virtual_host_retry_policy;
|
2000
|
+
}
|
2001
|
+
} else if (envoy_config_route_v3_Route_has_non_forwarding_action(
|
2002
|
+
routes[j])) {
|
2003
|
+
route.action.emplace<XdsApi::Route::NonForwardingAction>();
|
2004
|
+
}
|
2005
|
+
if (context.use_v3) {
|
2006
|
+
grpc_error_handle error = ParseTypedPerFilterConfig<
|
2007
|
+
envoy_config_route_v3_Route,
|
2008
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
2009
|
+
context, routes[j],
|
2010
|
+
envoy_config_route_v3_Route_typed_per_filter_config_next,
|
2011
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
|
2012
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value,
|
2013
|
+
&route.typed_per_filter_config);
|
2014
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2015
|
+
}
|
1238
2016
|
vhost.routes.emplace_back(std::move(route));
|
1239
2017
|
}
|
1240
2018
|
if (vhost.routes.empty()) {
|
@@ -1244,101 +2022,417 @@ grpc_error* RouteConfigParse(
|
|
1244
2022
|
return GRPC_ERROR_NONE;
|
1245
2023
|
}
|
1246
2024
|
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
2025
|
+
// CertificateProviderInstance is deprecated but we are still supporting it for
|
2026
|
+
// backward compatibility reasons. Note that we still parse the data into the
|
2027
|
+
// same CertificateProviderPluginInstance struct since the fields are the same.
|
2028
|
+
// TODO(yashykt): Remove this once we stop supporting the old way of fetching
|
2029
|
+
// certificate provider instances.
|
2030
|
+
grpc_error_handle CertificateProviderInstanceParse(
|
2031
|
+
const EncodingContext& context,
|
2032
|
+
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance*
|
2033
|
+
certificate_provider_instance_proto,
|
2034
|
+
XdsApi::CommonTlsContext::CertificateProviderPluginInstance*
|
2035
|
+
certificate_provider_plugin_instance) {
|
2036
|
+
*certificate_provider_plugin_instance = {
|
2037
|
+
UpbStringToStdString(
|
2038
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_instance_name(
|
2039
|
+
certificate_provider_instance_proto)),
|
2040
|
+
UpbStringToStdString(
|
2041
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_certificate_name(
|
2042
|
+
certificate_provider_instance_proto))};
|
2043
|
+
if (context.certificate_provider_definition_map->find(
|
2044
|
+
certificate_provider_plugin_instance->instance_name) ==
|
2045
|
+
context.certificate_provider_definition_map->end()) {
|
2046
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2047
|
+
absl::StrCat("Unrecognized certificate provider instance name: ",
|
2048
|
+
certificate_provider_plugin_instance->instance_name));
|
2049
|
+
}
|
2050
|
+
return GRPC_ERROR_NONE;
|
2051
|
+
}
|
2052
|
+
|
2053
|
+
grpc_error_handle CertificateProviderPluginInstanceParse(
|
2054
|
+
const EncodingContext& context,
|
2055
|
+
const envoy_extensions_transport_sockets_tls_v3_CertificateProviderPluginInstance*
|
2056
|
+
certificate_provider_plugin_instance_proto,
|
2057
|
+
XdsApi::CommonTlsContext::CertificateProviderPluginInstance*
|
2058
|
+
certificate_provider_plugin_instance) {
|
2059
|
+
*certificate_provider_plugin_instance = {
|
2060
|
+
UpbStringToStdString(
|
2061
|
+
envoy_extensions_transport_sockets_tls_v3_CertificateProviderPluginInstance_instance_name(
|
2062
|
+
certificate_provider_plugin_instance_proto)),
|
2063
|
+
UpbStringToStdString(
|
2064
|
+
envoy_extensions_transport_sockets_tls_v3_CertificateProviderPluginInstance_certificate_name(
|
2065
|
+
certificate_provider_plugin_instance_proto))};
|
2066
|
+
if (context.certificate_provider_definition_map->find(
|
2067
|
+
certificate_provider_plugin_instance->instance_name) ==
|
2068
|
+
context.certificate_provider_definition_map->end()) {
|
2069
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2070
|
+
absl::StrCat("Unrecognized certificate provider instance name: ",
|
2071
|
+
certificate_provider_plugin_instance->instance_name));
|
2072
|
+
}
|
2073
|
+
return GRPC_ERROR_NONE;
|
2074
|
+
}
|
2075
|
+
|
2076
|
+
grpc_error_handle CertificateValidationContextParse(
|
2077
|
+
const EncodingContext& context,
|
2078
|
+
const envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext*
|
2079
|
+
certificate_validation_context_proto,
|
2080
|
+
XdsApi::CommonTlsContext::CertificateValidationContext*
|
2081
|
+
certificate_validation_context) {
|
2082
|
+
std::vector<grpc_error_handle> errors;
|
2083
|
+
size_t len = 0;
|
2084
|
+
auto* subject_alt_names_matchers =
|
2085
|
+
envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_match_subject_alt_names(
|
2086
|
+
certificate_validation_context_proto, &len);
|
2087
|
+
for (size_t i = 0; i < len; ++i) {
|
2088
|
+
StringMatcher::Type type;
|
2089
|
+
std::string matcher;
|
2090
|
+
if (envoy_type_matcher_v3_StringMatcher_has_exact(
|
2091
|
+
subject_alt_names_matchers[i])) {
|
2092
|
+
type = StringMatcher::Type::kExact;
|
2093
|
+
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_exact(
|
2094
|
+
subject_alt_names_matchers[i]));
|
2095
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(
|
2096
|
+
subject_alt_names_matchers[i])) {
|
2097
|
+
type = StringMatcher::Type::kPrefix;
|
2098
|
+
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_prefix(
|
2099
|
+
subject_alt_names_matchers[i]));
|
2100
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(
|
2101
|
+
subject_alt_names_matchers[i])) {
|
2102
|
+
type = StringMatcher::Type::kSuffix;
|
2103
|
+
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_suffix(
|
2104
|
+
subject_alt_names_matchers[i]));
|
2105
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(
|
2106
|
+
subject_alt_names_matchers[i])) {
|
2107
|
+
type = StringMatcher::Type::kContains;
|
2108
|
+
matcher =
|
2109
|
+
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_contains(
|
2110
|
+
subject_alt_names_matchers[i]));
|
2111
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(
|
2112
|
+
subject_alt_names_matchers[i])) {
|
2113
|
+
type = StringMatcher::Type::kSafeRegex;
|
2114
|
+
auto* regex_matcher = envoy_type_matcher_v3_StringMatcher_safe_regex(
|
2115
|
+
subject_alt_names_matchers[i]);
|
2116
|
+
matcher = UpbStringToStdString(
|
2117
|
+
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
2118
|
+
} else {
|
2119
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2120
|
+
"Invalid StringMatcher specified"));
|
1277
2121
|
continue;
|
1278
2122
|
}
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
if (
|
1290
|
-
|
1291
|
-
"
|
2123
|
+
bool ignore_case = envoy_type_matcher_v3_StringMatcher_ignore_case(
|
2124
|
+
subject_alt_names_matchers[i]);
|
2125
|
+
absl::StatusOr<StringMatcher> string_matcher =
|
2126
|
+
StringMatcher::Create(type, matcher,
|
2127
|
+
/*case_sensitive=*/!ignore_case);
|
2128
|
+
if (!string_matcher.ok()) {
|
2129
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2130
|
+
absl::StrCat("string matcher: ", string_matcher.status().message())));
|
2131
|
+
continue;
|
2132
|
+
}
|
2133
|
+
if (type == StringMatcher::Type::kSafeRegex && ignore_case) {
|
2134
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2135
|
+
"StringMatcher: ignore_case has no effect for SAFE_REGEX."));
|
2136
|
+
continue;
|
1292
2137
|
}
|
1293
|
-
|
1294
|
-
|
2138
|
+
certificate_validation_context->match_subject_alt_names.push_back(
|
2139
|
+
std::move(string_matcher.value()));
|
2140
|
+
}
|
2141
|
+
auto* ca_certificate_provider_instance =
|
2142
|
+
envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_ca_certificate_provider_instance(
|
2143
|
+
certificate_validation_context_proto);
|
2144
|
+
if (ca_certificate_provider_instance != nullptr) {
|
2145
|
+
grpc_error_handle error = CertificateProviderPluginInstanceParse(
|
2146
|
+
context, ca_certificate_provider_instance,
|
2147
|
+
&certificate_validation_context->ca_certificate_provider_instance);
|
2148
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2149
|
+
}
|
2150
|
+
if (envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_verify_certificate_spki(
|
2151
|
+
certificate_validation_context_proto, nullptr) != nullptr) {
|
2152
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2153
|
+
"CertificateValidationContext: verify_certificate_spki "
|
2154
|
+
"unsupported"));
|
2155
|
+
}
|
2156
|
+
if (envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_verify_certificate_hash(
|
2157
|
+
certificate_validation_context_proto, nullptr) != nullptr) {
|
2158
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2159
|
+
"CertificateValidationContext: verify_certificate_hash "
|
2160
|
+
"unsupported"));
|
2161
|
+
}
|
2162
|
+
auto* require_signed_certificate_timestamp =
|
2163
|
+
envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_require_signed_certificate_timestamp(
|
2164
|
+
certificate_validation_context_proto);
|
2165
|
+
if (require_signed_certificate_timestamp != nullptr &&
|
2166
|
+
google_protobuf_BoolValue_value(require_signed_certificate_timestamp)) {
|
2167
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2168
|
+
"CertificateValidationContext: "
|
2169
|
+
"require_signed_certificate_timestamp unsupported"));
|
2170
|
+
}
|
2171
|
+
if (envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_has_crl(
|
2172
|
+
certificate_validation_context_proto)) {
|
2173
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2174
|
+
"CertificateValidationContext: crl unsupported"));
|
2175
|
+
}
|
2176
|
+
if (envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_has_custom_validator_config(
|
2177
|
+
certificate_validation_context_proto)) {
|
2178
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2179
|
+
"CertificateValidationContext: custom_validator_config "
|
2180
|
+
"unsupported"));
|
2181
|
+
}
|
2182
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR(
|
2183
|
+
"Error parsing CertificateValidationContext", &errors);
|
2184
|
+
}
|
2185
|
+
|
2186
|
+
grpc_error_handle CommonTlsContextParse(
|
2187
|
+
const EncodingContext& context,
|
2188
|
+
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
|
2189
|
+
common_tls_context_proto,
|
2190
|
+
XdsApi::CommonTlsContext* common_tls_context) {
|
2191
|
+
std::vector<grpc_error_handle> errors;
|
2192
|
+
// The validation context is derived from the oneof in
|
2193
|
+
// 'validation_context_type'. 'validation_context_sds_secret_config' is not
|
2194
|
+
// supported.
|
2195
|
+
auto* combined_validation_context =
|
2196
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_combined_validation_context(
|
2197
|
+
common_tls_context_proto);
|
2198
|
+
if (combined_validation_context != nullptr) {
|
2199
|
+
auto* default_validation_context =
|
2200
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_default_validation_context(
|
2201
|
+
combined_validation_context);
|
2202
|
+
if (default_validation_context != nullptr) {
|
2203
|
+
grpc_error_handle error = CertificateValidationContextParse(
|
2204
|
+
context, default_validation_context,
|
2205
|
+
&common_tls_context->certificate_validation_context);
|
2206
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2207
|
+
}
|
2208
|
+
// If after parsing default_validation_context,
|
2209
|
+
// common_tls_context->certificate_validation_context.ca_certificate_provider_instance
|
2210
|
+
// is empty, fall back onto
|
2211
|
+
// 'validation_context_certificate_provider_instance' inside
|
2212
|
+
// 'combined_validation_context'. Note that this way of fetching root
|
2213
|
+
// certificates is deprecated and will be removed in the future.
|
2214
|
+
// TODO(yashykt): Remove this once it's no longer needed.
|
2215
|
+
auto* validation_context_certificate_provider_instance =
|
2216
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_validation_context_certificate_provider_instance(
|
2217
|
+
combined_validation_context);
|
2218
|
+
if (common_tls_context->certificate_validation_context
|
2219
|
+
.ca_certificate_provider_instance.Empty() &&
|
2220
|
+
validation_context_certificate_provider_instance != nullptr) {
|
2221
|
+
grpc_error_handle error = CertificateProviderInstanceParse(
|
2222
|
+
context, validation_context_certificate_provider_instance,
|
2223
|
+
&common_tls_context->certificate_validation_context
|
2224
|
+
.ca_certificate_provider_instance);
|
2225
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2226
|
+
}
|
2227
|
+
} else {
|
2228
|
+
auto* validation_context =
|
2229
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_validation_context(
|
2230
|
+
common_tls_context_proto);
|
2231
|
+
if (validation_context != nullptr) {
|
2232
|
+
grpc_error_handle error = CertificateValidationContextParse(
|
2233
|
+
context, validation_context,
|
2234
|
+
&common_tls_context->certificate_validation_context);
|
2235
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2236
|
+
} else if (
|
2237
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_has_validation_context_sds_secret_config(
|
2238
|
+
common_tls_context_proto)) {
|
2239
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2240
|
+
"validation_context_sds_secret_config unsupported"));
|
2241
|
+
}
|
2242
|
+
}
|
2243
|
+
auto* tls_certificate_provider_instance =
|
2244
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_provider_instance(
|
2245
|
+
common_tls_context_proto);
|
2246
|
+
if (tls_certificate_provider_instance != nullptr) {
|
2247
|
+
grpc_error_handle error = CertificateProviderPluginInstanceParse(
|
2248
|
+
context, tls_certificate_provider_instance,
|
2249
|
+
&common_tls_context->tls_certificate_provider_instance);
|
2250
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2251
|
+
} else {
|
2252
|
+
// Fall back onto 'tls_certificate_certificate_provider_instance'. Note that
|
2253
|
+
// this way of fetching identity certificates is deprecated and will be
|
2254
|
+
// removed in the future.
|
2255
|
+
// TODO(yashykt): Remove this once it's no longer needed.
|
2256
|
+
auto* tls_certificate_certificate_provider_instance =
|
2257
|
+
envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_certificate_provider_instance(
|
2258
|
+
common_tls_context_proto);
|
2259
|
+
if (tls_certificate_certificate_provider_instance != nullptr) {
|
2260
|
+
grpc_error_handle error = CertificateProviderInstanceParse(
|
2261
|
+
context, tls_certificate_certificate_provider_instance,
|
2262
|
+
&common_tls_context->tls_certificate_provider_instance);
|
2263
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2264
|
+
} else {
|
2265
|
+
if (envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_has_tls_certificates(
|
2266
|
+
common_tls_context_proto)) {
|
2267
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2268
|
+
"tls_certificates unsupported"));
|
2269
|
+
}
|
2270
|
+
if (envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_has_tls_certificate_sds_secret_configs(
|
2271
|
+
common_tls_context_proto)) {
|
2272
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2273
|
+
"tls_certificate_sds_secret_configs unsupported"));
|
2274
|
+
}
|
2275
|
+
}
|
2276
|
+
}
|
2277
|
+
if (envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_has_tls_params(
|
2278
|
+
common_tls_context_proto)) {
|
2279
|
+
errors.push_back(
|
2280
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("tls_params unsupported"));
|
2281
|
+
}
|
2282
|
+
if (envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_has_custom_handshaker(
|
2283
|
+
common_tls_context_proto)) {
|
2284
|
+
errors.push_back(
|
2285
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("custom_handshaker unsupported"));
|
2286
|
+
}
|
2287
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing CommonTlsContext",
|
2288
|
+
&errors);
|
2289
|
+
}
|
2290
|
+
|
2291
|
+
grpc_error_handle HttpConnectionManagerParse(
|
2292
|
+
bool is_client, const EncodingContext& context,
|
1295
2293
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
2294
|
+
http_connection_manager_proto,
|
2295
|
+
bool is_v2,
|
2296
|
+
XdsApi::LdsUpdate::HttpConnectionManager* http_connection_manager) {
|
2297
|
+
MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
|
2298
|
+
// Obtain max_stream_duration from Http Protocol Options.
|
2299
|
+
const envoy_config_core_v3_HttpProtocolOptions* options =
|
2300
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_common_http_protocol_options(
|
2301
|
+
http_connection_manager_proto);
|
2302
|
+
if (options != nullptr) {
|
2303
|
+
const google_protobuf_Duration* duration =
|
2304
|
+
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
2305
|
+
if (duration != nullptr) {
|
2306
|
+
http_connection_manager->http_max_stream_duration =
|
2307
|
+
DurationParse(duration);
|
2308
|
+
}
|
2309
|
+
}
|
2310
|
+
// Parse filters.
|
2311
|
+
if (!is_v2) {
|
2312
|
+
size_t num_filters = 0;
|
2313
|
+
const auto* http_filters =
|
2314
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_http_filters(
|
2315
|
+
http_connection_manager_proto, &num_filters);
|
2316
|
+
std::set<absl::string_view> names_seen;
|
2317
|
+
for (size_t i = 0; i < num_filters; ++i) {
|
2318
|
+
const auto* http_filter = http_filters[i];
|
2319
|
+
absl::string_view name = UpbStringToAbsl(
|
2320
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
|
2321
|
+
http_filter));
|
2322
|
+
if (name.empty()) {
|
2323
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2324
|
+
absl::StrCat("empty filter name at index ", i));
|
2325
|
+
}
|
2326
|
+
if (names_seen.find(name) != names_seen.end()) {
|
2327
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2328
|
+
absl::StrCat("duplicate HTTP filter name: ", name));
|
2329
|
+
}
|
2330
|
+
names_seen.insert(name);
|
2331
|
+
const bool is_optional =
|
2332
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_is_optional(
|
2333
|
+
http_filter);
|
2334
|
+
const google_protobuf_Any* any =
|
2335
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
|
2336
|
+
http_filter);
|
2337
|
+
if (any == nullptr) {
|
2338
|
+
if (is_optional) continue;
|
2339
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2340
|
+
absl::StrCat("no filter config specified for filter name ", name));
|
2341
|
+
}
|
2342
|
+
absl::string_view filter_type;
|
2343
|
+
grpc_error_handle error =
|
2344
|
+
ExtractHttpFilterTypeName(context, any, &filter_type);
|
2345
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2346
|
+
const XdsHttpFilterImpl* filter_impl =
|
2347
|
+
XdsHttpFilterRegistry::GetFilterForType(filter_type);
|
2348
|
+
if (filter_impl == nullptr) {
|
2349
|
+
if (is_optional) continue;
|
2350
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2351
|
+
absl::StrCat("no filter registered for config type ", filter_type));
|
2352
|
+
}
|
2353
|
+
if ((is_client && !filter_impl->IsSupportedOnClients()) ||
|
2354
|
+
(!is_client && !filter_impl->IsSupportedOnServers())) {
|
2355
|
+
if (is_optional) continue;
|
2356
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2357
|
+
absl::StrFormat("Filter %s is not supported on %s", filter_type,
|
2358
|
+
is_client ? "clients" : "servers"));
|
2359
|
+
}
|
2360
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
2361
|
+
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
2362
|
+
context.arena);
|
2363
|
+
if (!filter_config.ok()) {
|
2364
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2365
|
+
"filter config for type ", filter_type,
|
2366
|
+
" failed to parse: ", filter_config.status().ToString()));
|
2367
|
+
}
|
2368
|
+
http_connection_manager->http_filters.emplace_back(
|
2369
|
+
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2370
|
+
std::string(name), std::move(*filter_config)});
|
2371
|
+
}
|
2372
|
+
if (http_connection_manager->http_filters.empty()) {
|
1300
2373
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1301
|
-
"
|
1302
|
-
}
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
2374
|
+
"Expected at least one HTTP filter");
|
2375
|
+
}
|
2376
|
+
// Make sure that the last filter is terminal and non-last filters are
|
2377
|
+
// non-terminal. Note that this check is being performed in a separate loop
|
2378
|
+
// to take care of the case where there are two terminal filters in the list
|
2379
|
+
// out of which only one gets added in the final list.
|
2380
|
+
for (const auto& http_filter : http_connection_manager->http_filters) {
|
2381
|
+
const XdsHttpFilterImpl* filter_impl =
|
2382
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
2383
|
+
http_filter.config.config_proto_type_name);
|
2384
|
+
if (&http_filter != &http_connection_manager->http_filters.back()) {
|
2385
|
+
// Filters before the last filter must not be terminal.
|
2386
|
+
if (filter_impl->IsTerminalFilter()) {
|
2387
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2388
|
+
absl::StrCat("terminal filter for config type ",
|
2389
|
+
http_filter.config.config_proto_type_name,
|
2390
|
+
" must be the last filter in the chain"));
|
2391
|
+
}
|
2392
|
+
} else {
|
2393
|
+
// The last filter must be terminal.
|
2394
|
+
if (!filter_impl->IsTerminalFilter()) {
|
2395
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2396
|
+
absl::StrCat("non-terminal filter for config type ",
|
2397
|
+
http_filter.config.config_proto_type_name,
|
2398
|
+
" is the last filter in the chain"));
|
1317
2399
|
}
|
1318
2400
|
}
|
1319
2401
|
}
|
2402
|
+
} else {
|
2403
|
+
// If using a v2 config, we just hard-code a list containing only the
|
2404
|
+
// router filter without actually looking at the config. This ensures
|
2405
|
+
// that the right thing happens in the xds resolver without having
|
2406
|
+
// to expose whether the resource we received was v2 or v3.
|
2407
|
+
http_connection_manager->http_filters.emplace_back(
|
2408
|
+
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2409
|
+
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
2410
|
+
}
|
2411
|
+
// Guarding parsing of RouteConfig on the server side with the environmental
|
2412
|
+
// variable since that's the first feature on the server side that will be
|
2413
|
+
// using this.
|
2414
|
+
if (is_client || XdsRbacEnabled()) {
|
1320
2415
|
// Found inlined route_config. Parse it to find the cluster_name.
|
1321
2416
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
1322
|
-
|
2417
|
+
http_connection_manager_proto)) {
|
1323
2418
|
const envoy_config_route_v3_RouteConfiguration* route_config =
|
1324
2419
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
1325
|
-
|
2420
|
+
http_connection_manager_proto);
|
1326
2421
|
XdsApi::RdsUpdate rds_update;
|
1327
|
-
|
1328
|
-
RouteConfigParse(
|
2422
|
+
grpc_error_handle error =
|
2423
|
+
RouteConfigParse(context, route_config, is_v2, &rds_update);
|
1329
2424
|
if (error != GRPC_ERROR_NONE) return error;
|
1330
|
-
|
1331
|
-
|
2425
|
+
http_connection_manager->rds_update = std::move(rds_update);
|
2426
|
+
return GRPC_ERROR_NONE;
|
1332
2427
|
}
|
1333
2428
|
// Validate that RDS must be used to get the route_config dynamically.
|
1334
|
-
|
1335
|
-
|
2429
|
+
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
2430
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
2431
|
+
http_connection_manager_proto);
|
2432
|
+
if (rds == nullptr) {
|
1336
2433
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1337
2434
|
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
1338
2435
|
}
|
1339
|
-
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
1340
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
1341
|
-
http_connection_manager);
|
1342
2436
|
// Check that the ConfigSource specifies ADS.
|
1343
2437
|
const envoy_config_core_v3_ConfigSource* config_source =
|
1344
2438
|
envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
|
@@ -1352,208 +2446,679 @@ grpc_error* LdsResponseParse(
|
|
1352
2446
|
"HttpConnectionManager ConfigSource for RDS does not specify ADS.");
|
1353
2447
|
}
|
1354
2448
|
// Get the route_config_name.
|
1355
|
-
|
2449
|
+
http_connection_manager->route_config_name = UpbStringToStdString(
|
1356
2450
|
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
1357
2451
|
rds));
|
1358
2452
|
}
|
1359
2453
|
return GRPC_ERROR_NONE;
|
1360
2454
|
}
|
1361
2455
|
|
1362
|
-
|
1363
|
-
|
1364
|
-
const
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
const
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
2456
|
+
grpc_error_handle LdsResourceParseClient(
|
2457
|
+
const EncodingContext& context,
|
2458
|
+
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
|
2459
|
+
XdsApi::LdsUpdate* lds_update) {
|
2460
|
+
lds_update->type = XdsApi::LdsUpdate::ListenerType::kHttpApiListener;
|
2461
|
+
const upb_strview encoded_api_listener = google_protobuf_Any_value(
|
2462
|
+
envoy_config_listener_v3_ApiListener_api_listener(api_listener));
|
2463
|
+
const auto* http_connection_manager =
|
2464
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
2465
|
+
encoded_api_listener.data, encoded_api_listener.size, context.arena);
|
2466
|
+
if (http_connection_manager == nullptr) {
|
2467
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2468
|
+
"Could not parse HttpConnectionManager config from ApiListener");
|
2469
|
+
}
|
2470
|
+
return HttpConnectionManagerParse(true /* is_client */, context,
|
2471
|
+
http_connection_manager, is_v2,
|
2472
|
+
&lds_update->http_connection_manager);
|
2473
|
+
}
|
2474
|
+
|
2475
|
+
grpc_error_handle DownstreamTlsContextParse(
|
2476
|
+
const EncodingContext& context,
|
2477
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
2478
|
+
XdsApi::DownstreamTlsContext* downstream_tls_context) {
|
2479
|
+
absl::string_view name = UpbStringToAbsl(
|
2480
|
+
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
2481
|
+
if (name != "envoy.transport_sockets.tls") {
|
2482
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2483
|
+
absl::StrCat("Unrecognized transport socket: ", name));
|
2484
|
+
}
|
2485
|
+
auto* typed_config =
|
2486
|
+
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
2487
|
+
std::vector<grpc_error_handle> errors;
|
2488
|
+
if (typed_config != nullptr) {
|
2489
|
+
const upb_strview encoded_downstream_tls_context =
|
2490
|
+
google_protobuf_Any_value(typed_config);
|
2491
|
+
auto* downstream_tls_context_proto =
|
2492
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
2493
|
+
encoded_downstream_tls_context.data,
|
2494
|
+
encoded_downstream_tls_context.size, context.arena);
|
2495
|
+
if (downstream_tls_context_proto == nullptr) {
|
2496
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2497
|
+
"Can't decode downstream tls context.");
|
2498
|
+
}
|
2499
|
+
auto* common_tls_context =
|
2500
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
2501
|
+
downstream_tls_context_proto);
|
2502
|
+
if (common_tls_context != nullptr) {
|
2503
|
+
grpc_error_handle error =
|
2504
|
+
CommonTlsContextParse(context, common_tls_context,
|
2505
|
+
&downstream_tls_context->common_tls_context);
|
2506
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2507
|
+
}
|
2508
|
+
auto* require_client_certificate =
|
2509
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
2510
|
+
downstream_tls_context_proto);
|
2511
|
+
if (require_client_certificate != nullptr) {
|
2512
|
+
downstream_tls_context->require_client_certificate =
|
2513
|
+
google_protobuf_BoolValue_value(require_client_certificate);
|
2514
|
+
}
|
2515
|
+
auto* require_sni =
|
2516
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
|
2517
|
+
downstream_tls_context_proto);
|
2518
|
+
if (require_sni != nullptr &&
|
2519
|
+
google_protobuf_BoolValue_value(require_sni)) {
|
2520
|
+
errors.push_back(
|
2521
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("require_sni: unsupported"));
|
2522
|
+
}
|
2523
|
+
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
2524
|
+
downstream_tls_context_proto) !=
|
2525
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
2526
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2527
|
+
"ocsp_staple_policy: Only LENIENT_STAPLING supported"));
|
2528
|
+
}
|
2529
|
+
}
|
2530
|
+
if (downstream_tls_context->common_tls_context
|
2531
|
+
.tls_certificate_provider_instance.instance_name.empty()) {
|
2532
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2533
|
+
"TLS configuration provided but no "
|
2534
|
+
"tls_certificate_provider_instance found."));
|
2535
|
+
}
|
2536
|
+
if (downstream_tls_context->require_client_certificate &&
|
2537
|
+
downstream_tls_context->common_tls_context.certificate_validation_context
|
2538
|
+
.ca_certificate_provider_instance.instance_name.empty()) {
|
2539
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2540
|
+
"TLS configuration requires client certificates but no certificate "
|
2541
|
+
"provider instance specified for validation."));
|
2542
|
+
}
|
2543
|
+
if (!downstream_tls_context->common_tls_context.certificate_validation_context
|
2544
|
+
.match_subject_alt_names.empty()) {
|
2545
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2546
|
+
"match_subject_alt_names not supported on servers"));
|
2547
|
+
}
|
2548
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing DownstreamTlsContext",
|
2549
|
+
&errors);
|
2550
|
+
}
|
2551
|
+
|
2552
|
+
grpc_error_handle CidrRangeParse(
|
2553
|
+
const envoy_config_core_v3_CidrRange* cidr_range_proto,
|
2554
|
+
XdsApi::LdsUpdate::FilterChainMap::CidrRange* cidr_range) {
|
2555
|
+
std::string address_prefix = UpbStringToStdString(
|
2556
|
+
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
2557
|
+
grpc_error_handle error =
|
2558
|
+
grpc_string_to_sockaddr(&cidr_range->address, address_prefix.c_str(), 0);
|
2559
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2560
|
+
cidr_range->prefix_len = 0;
|
2561
|
+
auto* prefix_len_proto =
|
2562
|
+
envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
|
2563
|
+
if (prefix_len_proto != nullptr) {
|
2564
|
+
cidr_range->prefix_len = std::min(
|
2565
|
+
google_protobuf_UInt32Value_value(prefix_len_proto),
|
2566
|
+
(reinterpret_cast<const grpc_sockaddr*>(cidr_range->address.addr))
|
2567
|
+
->sa_family == GRPC_AF_INET
|
2568
|
+
? uint32_t(32)
|
2569
|
+
: uint32_t(128));
|
2570
|
+
}
|
2571
|
+
// Normalize the network address by masking it with prefix_len
|
2572
|
+
grpc_sockaddr_mask_bits(&cidr_range->address, cidr_range->prefix_len);
|
1408
2573
|
return GRPC_ERROR_NONE;
|
1409
2574
|
}
|
1410
2575
|
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
2576
|
+
grpc_error_handle FilterChainMatchParse(
|
2577
|
+
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
|
2578
|
+
FilterChain::FilterChainMatch* filter_chain_match) {
|
2579
|
+
auto* destination_port =
|
2580
|
+
envoy_config_listener_v3_FilterChainMatch_destination_port(
|
2581
|
+
filter_chain_match_proto);
|
2582
|
+
if (destination_port != nullptr) {
|
2583
|
+
filter_chain_match->destination_port =
|
2584
|
+
google_protobuf_UInt32Value_value(destination_port);
|
2585
|
+
}
|
2586
|
+
size_t size = 0;
|
2587
|
+
auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
|
2588
|
+
filter_chain_match_proto, &size);
|
2589
|
+
filter_chain_match->prefix_ranges.reserve(size);
|
2590
|
+
for (size_t i = 0; i < size; i++) {
|
2591
|
+
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2592
|
+
grpc_error_handle error = CidrRangeParse(prefix_ranges[i], &cidr_range);
|
2593
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2594
|
+
filter_chain_match->prefix_ranges.push_back(cidr_range);
|
2595
|
+
}
|
2596
|
+
filter_chain_match->source_type =
|
2597
|
+
static_cast<XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
|
2598
|
+
envoy_config_listener_v3_FilterChainMatch_source_type(
|
2599
|
+
filter_chain_match_proto));
|
2600
|
+
auto* source_prefix_ranges =
|
2601
|
+
envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
|
2602
|
+
filter_chain_match_proto, &size);
|
2603
|
+
filter_chain_match->source_prefix_ranges.reserve(size);
|
2604
|
+
for (size_t i = 0; i < size; i++) {
|
2605
|
+
XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
|
2606
|
+
grpc_error_handle error =
|
2607
|
+
CidrRangeParse(source_prefix_ranges[i], &cidr_range);
|
2608
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2609
|
+
filter_chain_match->source_prefix_ranges.push_back(cidr_range);
|
2610
|
+
}
|
2611
|
+
auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
|
2612
|
+
filter_chain_match_proto, &size);
|
2613
|
+
filter_chain_match->source_ports.reserve(size);
|
2614
|
+
for (size_t i = 0; i < size; i++) {
|
2615
|
+
filter_chain_match->source_ports.push_back(source_ports[i]);
|
2616
|
+
}
|
2617
|
+
auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
|
2618
|
+
filter_chain_match_proto, &size);
|
2619
|
+
for (size_t i = 0; i < size; i++) {
|
2620
|
+
filter_chain_match->server_names.push_back(
|
2621
|
+
UpbStringToStdString(server_names[i]));
|
2622
|
+
}
|
2623
|
+
filter_chain_match->transport_protocol = UpbStringToStdString(
|
2624
|
+
envoy_config_listener_v3_FilterChainMatch_transport_protocol(
|
2625
|
+
filter_chain_match_proto));
|
2626
|
+
auto* application_protocols =
|
2627
|
+
envoy_config_listener_v3_FilterChainMatch_application_protocols(
|
2628
|
+
filter_chain_match_proto, &size);
|
2629
|
+
for (size_t i = 0; i < size; i++) {
|
2630
|
+
filter_chain_match->application_protocols.push_back(
|
2631
|
+
UpbStringToStdString(application_protocols[i]));
|
2632
|
+
}
|
2633
|
+
return GRPC_ERROR_NONE;
|
1422
2634
|
}
|
1423
2635
|
|
1424
|
-
|
1425
|
-
const
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1474
|
-
"Invalid regex string specified in string matcher.");
|
1475
|
-
}
|
1476
|
-
matcher.regex_match = std::move(regex);
|
2636
|
+
grpc_error_handle FilterChainParse(
|
2637
|
+
const EncodingContext& context,
|
2638
|
+
const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
|
2639
|
+
FilterChain* filter_chain) {
|
2640
|
+
std::vector<grpc_error_handle> errors;
|
2641
|
+
auto* filter_chain_match =
|
2642
|
+
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
2643
|
+
filter_chain_proto);
|
2644
|
+
if (filter_chain_match != nullptr) {
|
2645
|
+
grpc_error_handle error = FilterChainMatchParse(
|
2646
|
+
filter_chain_match, &filter_chain->filter_chain_match);
|
2647
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2648
|
+
}
|
2649
|
+
filter_chain->filter_chain_data =
|
2650
|
+
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2651
|
+
// Parse the filters list. Currently we only support HttpConnectionManager.
|
2652
|
+
size_t size = 0;
|
2653
|
+
auto* filters =
|
2654
|
+
envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
|
2655
|
+
if (size != 1) {
|
2656
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2657
|
+
"FilterChain should have exactly one filter: HttpConnectionManager; no "
|
2658
|
+
"other filter is supported at the moment"));
|
2659
|
+
} else {
|
2660
|
+
auto* typed_config =
|
2661
|
+
envoy_config_listener_v3_Filter_typed_config(filters[0]);
|
2662
|
+
if (typed_config == nullptr) {
|
2663
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2664
|
+
"No typed_config found in filter."));
|
2665
|
+
} else {
|
2666
|
+
absl::string_view type_url =
|
2667
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
|
2668
|
+
if (type_url !=
|
2669
|
+
"type.googleapis.com/"
|
2670
|
+
"envoy.extensions.filters.network.http_connection_manager.v3."
|
2671
|
+
"HttpConnectionManager") {
|
2672
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2673
|
+
absl::StrCat("Unsupported filter type ", type_url)));
|
2674
|
+
} else {
|
2675
|
+
const upb_strview encoded_http_connection_manager =
|
2676
|
+
google_protobuf_Any_value(typed_config);
|
2677
|
+
const auto* http_connection_manager =
|
2678
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
2679
|
+
encoded_http_connection_manager.data,
|
2680
|
+
encoded_http_connection_manager.size, context.arena);
|
2681
|
+
if (http_connection_manager == nullptr) {
|
2682
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2683
|
+
"Could not parse HttpConnectionManager config from filter "
|
2684
|
+
"typed_config"));
|
1477
2685
|
} else {
|
1478
|
-
|
1479
|
-
|
2686
|
+
grpc_error_handle error = HttpConnectionManagerParse(
|
2687
|
+
false /* is_client */, context, http_connection_manager, is_v2,
|
2688
|
+
&filter_chain->filter_chain_data->http_connection_manager);
|
2689
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
1480
2690
|
}
|
1481
|
-
matcher.ignore_case = envoy_type_matcher_v3_StringMatcher_ignore_case(
|
1482
|
-
subject_alt_names_matchers[i]);
|
1483
|
-
common_tls_context->combined_validation_context
|
1484
|
-
.default_validation_context.match_subject_alt_names.emplace_back(
|
1485
|
-
matcher);
|
1486
2691
|
}
|
1487
2692
|
}
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
2693
|
+
}
|
2694
|
+
auto* transport_socket =
|
2695
|
+
envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
|
2696
|
+
if (transport_socket != nullptr) {
|
2697
|
+
grpc_error_handle error = DownstreamTlsContextParse(
|
2698
|
+
context, transport_socket,
|
2699
|
+
&filter_chain->filter_chain_data->downstream_tls_context);
|
2700
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2701
|
+
}
|
2702
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing FilterChain", &errors);
|
2703
|
+
}
|
2704
|
+
|
2705
|
+
grpc_error_handle AddressParse(
|
2706
|
+
const envoy_config_core_v3_Address* address_proto, std::string* address) {
|
2707
|
+
const auto* socket_address =
|
2708
|
+
envoy_config_core_v3_Address_socket_address(address_proto);
|
2709
|
+
if (socket_address == nullptr) {
|
2710
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2711
|
+
"Address does not have socket_address");
|
2712
|
+
}
|
2713
|
+
if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
|
2714
|
+
envoy_config_core_v3_SocketAddress_TCP) {
|
2715
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2716
|
+
"SocketAddress protocol is not TCP");
|
2717
|
+
}
|
2718
|
+
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
2719
|
+
if (port > 65535) {
|
2720
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port");
|
2721
|
+
}
|
2722
|
+
*address = JoinHostPort(
|
2723
|
+
UpbStringToAbsl(
|
2724
|
+
envoy_config_core_v3_SocketAddress_address(socket_address)),
|
2725
|
+
port);
|
2726
|
+
return GRPC_ERROR_NONE;
|
2727
|
+
}
|
2728
|
+
|
2729
|
+
// An intermediate map for filter chains that we create to validate the list of
|
2730
|
+
// filter chains received from the control plane and to finally create
|
2731
|
+
// XdsApi::LdsUpdate::FilterChainMap
|
2732
|
+
struct InternalFilterChainMap {
|
2733
|
+
using SourceIpMap =
|
2734
|
+
std::map<std::string, XdsApi::LdsUpdate::FilterChainMap::SourceIp>;
|
2735
|
+
using ConnectionSourceTypesArray = std::array<SourceIpMap, 3>;
|
2736
|
+
struct DestinationIp {
|
2737
|
+
absl::optional<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_range;
|
2738
|
+
bool transport_protocol_raw_buffer_provided = false;
|
2739
|
+
ConnectionSourceTypesArray source_types_array;
|
2740
|
+
};
|
2741
|
+
using DestinationIpMap = std::map<std::string, DestinationIp>;
|
2742
|
+
DestinationIpMap destination_ip_map;
|
2743
|
+
};
|
2744
|
+
|
2745
|
+
grpc_error_handle AddFilterChainDataForSourcePort(
|
2746
|
+
const FilterChain& filter_chain,
|
2747
|
+
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map,
|
2748
|
+
uint32_t port) {
|
2749
|
+
auto insert_result = ports_map->emplace(
|
2750
|
+
port, XdsApi::LdsUpdate::FilterChainMap::FilterChainDataSharedPtr{
|
2751
|
+
filter_chain.filter_chain_data});
|
2752
|
+
if (!insert_result.second) {
|
2753
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2754
|
+
"Duplicate matching rules detected when adding filter chain: ",
|
2755
|
+
filter_chain.filter_chain_match.ToString()));
|
2756
|
+
}
|
2757
|
+
return GRPC_ERROR_NONE;
|
2758
|
+
}
|
2759
|
+
|
2760
|
+
grpc_error_handle AddFilterChainDataForSourcePorts(
|
2761
|
+
const FilterChain& filter_chain,
|
2762
|
+
XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map) {
|
2763
|
+
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
2764
|
+
return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
|
2765
|
+
} else {
|
2766
|
+
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
2767
|
+
grpc_error_handle error =
|
2768
|
+
AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
|
2769
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1496
2770
|
}
|
1497
2771
|
}
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
2772
|
+
return GRPC_ERROR_NONE;
|
2773
|
+
}
|
2774
|
+
|
2775
|
+
grpc_error_handle AddFilterChainDataForSourceIpRange(
|
2776
|
+
const FilterChain& filter_chain,
|
2777
|
+
InternalFilterChainMap::SourceIpMap* source_ip_map) {
|
2778
|
+
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
2779
|
+
auto insert_result = source_ip_map->emplace(
|
2780
|
+
"", XdsApi::LdsUpdate::FilterChainMap::SourceIp());
|
2781
|
+
return AddFilterChainDataForSourcePorts(
|
2782
|
+
filter_chain, &insert_result.first->second.ports_map);
|
2783
|
+
} else {
|
2784
|
+
for (const auto& prefix_range :
|
2785
|
+
filter_chain.filter_chain_match.source_prefix_ranges) {
|
2786
|
+
auto insert_result = source_ip_map->emplace(
|
2787
|
+
absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
|
2788
|
+
"/", prefix_range.prefix_len),
|
2789
|
+
XdsApi::LdsUpdate::FilterChainMap::SourceIp());
|
2790
|
+
if (insert_result.second) {
|
2791
|
+
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2792
|
+
}
|
2793
|
+
grpc_error_handle error = AddFilterChainDataForSourcePorts(
|
2794
|
+
filter_chain, &insert_result.first->second.ports_map);
|
2795
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2796
|
+
}
|
1505
2797
|
}
|
1506
2798
|
return GRPC_ERROR_NONE;
|
1507
2799
|
}
|
1508
2800
|
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
2801
|
+
grpc_error_handle AddFilterChainDataForSourceType(
|
2802
|
+
const FilterChain& filter_chain,
|
2803
|
+
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2804
|
+
GPR_ASSERT(static_cast<unsigned int>(
|
2805
|
+
filter_chain.filter_chain_match.source_type) < 3);
|
2806
|
+
return AddFilterChainDataForSourceIpRange(
|
2807
|
+
filter_chain, &destination_ip->source_types_array[static_cast<int>(
|
2808
|
+
filter_chain.filter_chain_match.source_type)]);
|
2809
|
+
}
|
2810
|
+
|
2811
|
+
grpc_error_handle AddFilterChainDataForApplicationProtocols(
|
2812
|
+
const FilterChain& filter_chain,
|
2813
|
+
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2814
|
+
// Only allow filter chains that do not mention application protocols
|
2815
|
+
if (!filter_chain.filter_chain_match.application_protocols.empty()) {
|
2816
|
+
return GRPC_ERROR_NONE;
|
2817
|
+
}
|
2818
|
+
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
2819
|
+
}
|
2820
|
+
|
2821
|
+
grpc_error_handle AddFilterChainDataForTransportProtocol(
|
2822
|
+
const FilterChain& filter_chain,
|
2823
|
+
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2824
|
+
const std::string& transport_protocol =
|
2825
|
+
filter_chain.filter_chain_match.transport_protocol;
|
2826
|
+
// Only allow filter chains with no transport protocol or "raw_buffer"
|
2827
|
+
if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
|
2828
|
+
return GRPC_ERROR_NONE;
|
2829
|
+
}
|
2830
|
+
// If for this configuration, we've already seen filter chains that mention
|
2831
|
+
// the transport protocol as "raw_buffer", we will never match filter chains
|
2832
|
+
// that do not mention it.
|
2833
|
+
if (destination_ip->transport_protocol_raw_buffer_provided &&
|
2834
|
+
transport_protocol.empty()) {
|
2835
|
+
return GRPC_ERROR_NONE;
|
2836
|
+
}
|
2837
|
+
if (!transport_protocol.empty() &&
|
2838
|
+
!destination_ip->transport_protocol_raw_buffer_provided) {
|
2839
|
+
destination_ip->transport_protocol_raw_buffer_provided = true;
|
2840
|
+
// Clear out the previous entries if any since those entries did not mention
|
2841
|
+
// "raw_buffer"
|
2842
|
+
destination_ip->source_types_array =
|
2843
|
+
InternalFilterChainMap::ConnectionSourceTypesArray();
|
2844
|
+
}
|
2845
|
+
return AddFilterChainDataForApplicationProtocols(filter_chain,
|
2846
|
+
destination_ip);
|
2847
|
+
}
|
2848
|
+
|
2849
|
+
grpc_error_handle AddFilterChainDataForServerNames(
|
2850
|
+
const FilterChain& filter_chain,
|
2851
|
+
InternalFilterChainMap::DestinationIp* destination_ip) {
|
2852
|
+
// Don't continue adding filter chains with server names mentioned
|
2853
|
+
if (!filter_chain.filter_chain_match.server_names.empty()) {
|
2854
|
+
return GRPC_ERROR_NONE;
|
2855
|
+
}
|
2856
|
+
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
2857
|
+
}
|
2858
|
+
|
2859
|
+
grpc_error_handle AddFilterChainDataForDestinationIpRange(
|
2860
|
+
const FilterChain& filter_chain,
|
2861
|
+
InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
|
2862
|
+
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
2863
|
+
auto insert_result = destination_ip_map->emplace(
|
2864
|
+
"", InternalFilterChainMap::DestinationIp());
|
2865
|
+
return AddFilterChainDataForServerNames(filter_chain,
|
2866
|
+
&insert_result.first->second);
|
2867
|
+
} else {
|
2868
|
+
for (const auto& prefix_range :
|
2869
|
+
filter_chain.filter_chain_match.prefix_ranges) {
|
2870
|
+
auto insert_result = destination_ip_map->emplace(
|
2871
|
+
absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
|
2872
|
+
"/", prefix_range.prefix_len),
|
2873
|
+
InternalFilterChainMap::DestinationIp());
|
2874
|
+
if (insert_result.second) {
|
2875
|
+
insert_result.first->second.prefix_range.emplace(prefix_range);
|
2876
|
+
}
|
2877
|
+
grpc_error_handle error = AddFilterChainDataForServerNames(
|
2878
|
+
filter_chain, &insert_result.first->second);
|
2879
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1541
2880
|
}
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
2881
|
+
}
|
2882
|
+
return GRPC_ERROR_NONE;
|
2883
|
+
}
|
2884
|
+
|
2885
|
+
XdsApi::LdsUpdate::FilterChainMap BuildFromInternalFilterChainMap(
|
2886
|
+
InternalFilterChainMap* internal_filter_chain_map) {
|
2887
|
+
XdsApi::LdsUpdate::FilterChainMap filter_chain_map;
|
2888
|
+
for (auto& destination_ip_pair :
|
2889
|
+
internal_filter_chain_map->destination_ip_map) {
|
2890
|
+
XdsApi::LdsUpdate::FilterChainMap::DestinationIp destination_ip;
|
2891
|
+
destination_ip.prefix_range = destination_ip_pair.second.prefix_range;
|
2892
|
+
for (int i = 0; i < 3; i++) {
|
2893
|
+
auto& source_ip_map = destination_ip_pair.second.source_types_array[i];
|
2894
|
+
for (auto& source_ip_pair : source_ip_map) {
|
2895
|
+
destination_ip.source_types_array[i].push_back(
|
2896
|
+
std::move(source_ip_pair.second));
|
2897
|
+
}
|
2898
|
+
}
|
2899
|
+
filter_chain_map.destination_ip_vector.push_back(std::move(destination_ip));
|
2900
|
+
}
|
2901
|
+
return filter_chain_map;
|
2902
|
+
}
|
2903
|
+
|
2904
|
+
grpc_error_handle BuildFilterChainMap(
|
2905
|
+
const std::vector<FilterChain>& filter_chains,
|
2906
|
+
XdsApi::LdsUpdate::FilterChainMap* filter_chain_map) {
|
2907
|
+
InternalFilterChainMap internal_filter_chain_map;
|
2908
|
+
for (const auto& filter_chain : filter_chains) {
|
2909
|
+
// Discard filter chain entries that specify destination port
|
2910
|
+
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
2911
|
+
grpc_error_handle error = AddFilterChainDataForDestinationIpRange(
|
2912
|
+
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
2913
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2914
|
+
}
|
2915
|
+
*filter_chain_map =
|
2916
|
+
BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
2917
|
+
return GRPC_ERROR_NONE;
|
2918
|
+
}
|
2919
|
+
|
2920
|
+
grpc_error_handle LdsResourceParseServer(
|
2921
|
+
const EncodingContext& context,
|
2922
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2,
|
2923
|
+
XdsApi::LdsUpdate* lds_update) {
|
2924
|
+
lds_update->type = XdsApi::LdsUpdate::ListenerType::kTcpListener;
|
2925
|
+
grpc_error_handle error =
|
2926
|
+
AddressParse(envoy_config_listener_v3_Listener_address(listener),
|
2927
|
+
&lds_update->address);
|
2928
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2929
|
+
const auto* use_original_dst =
|
2930
|
+
envoy_config_listener_v3_Listener_use_original_dst(listener);
|
2931
|
+
if (use_original_dst != nullptr) {
|
2932
|
+
if (google_protobuf_BoolValue_value(use_original_dst)) {
|
2933
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2934
|
+
"Field \'use_original_dst\' is not supported.");
|
1547
2935
|
}
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
2936
|
+
}
|
2937
|
+
size_t size = 0;
|
2938
|
+
auto* filter_chains =
|
2939
|
+
envoy_config_listener_v3_Listener_filter_chains(listener, &size);
|
2940
|
+
std::vector<FilterChain> parsed_filter_chains;
|
2941
|
+
parsed_filter_chains.reserve(size);
|
2942
|
+
for (size_t i = 0; i < size; i++) {
|
2943
|
+
FilterChain filter_chain;
|
2944
|
+
error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
|
2945
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2946
|
+
parsed_filter_chains.push_back(std::move(filter_chain));
|
2947
|
+
}
|
2948
|
+
error =
|
2949
|
+
BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
|
2950
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2951
|
+
auto* default_filter_chain =
|
2952
|
+
envoy_config_listener_v3_Listener_default_filter_chain(listener);
|
2953
|
+
if (default_filter_chain != nullptr) {
|
2954
|
+
FilterChain filter_chain;
|
2955
|
+
error =
|
2956
|
+
FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
|
2957
|
+
if (error != GRPC_ERROR_NONE) return error;
|
2958
|
+
if (filter_chain.filter_chain_data != nullptr) {
|
2959
|
+
lds_update->default_filter_chain =
|
2960
|
+
std::move(*filter_chain.filter_chain_data);
|
1552
2961
|
}
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
2962
|
+
}
|
2963
|
+
if (size == 0 && default_filter_chain == nullptr) {
|
2964
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No filter chain provided.");
|
2965
|
+
}
|
2966
|
+
return GRPC_ERROR_NONE;
|
2967
|
+
}
|
2968
|
+
|
2969
|
+
grpc_error_handle LdsResourceParse(
|
2970
|
+
const EncodingContext& context,
|
2971
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2,
|
2972
|
+
XdsApi::LdsUpdate* lds_update) {
|
2973
|
+
// Check whether it's a client or server listener.
|
2974
|
+
const envoy_config_listener_v3_ApiListener* api_listener =
|
2975
|
+
envoy_config_listener_v3_Listener_api_listener(listener);
|
2976
|
+
const envoy_config_core_v3_Address* address =
|
2977
|
+
envoy_config_listener_v3_Listener_address(listener);
|
2978
|
+
if (api_listener != nullptr && address != nullptr) {
|
2979
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2980
|
+
"Listener has both address and ApiListener");
|
2981
|
+
}
|
2982
|
+
if (api_listener == nullptr && address == nullptr) {
|
2983
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2984
|
+
"Listener has neither address nor ApiListener");
|
2985
|
+
}
|
2986
|
+
// Validate Listener fields.
|
2987
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
2988
|
+
if (api_listener != nullptr) {
|
2989
|
+
error = LdsResourceParseClient(context, api_listener, is_v2, lds_update);
|
2990
|
+
} else {
|
2991
|
+
error = LdsResourceParseServer(context, listener, is_v2, lds_update);
|
2992
|
+
}
|
2993
|
+
return error;
|
2994
|
+
}
|
2995
|
+
|
2996
|
+
grpc_error_handle UpstreamTlsContextParse(
|
2997
|
+
const EncodingContext& context,
|
2998
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
2999
|
+
XdsApi::CommonTlsContext* common_tls_context) {
|
3000
|
+
// Record Upstream tls context
|
3001
|
+
absl::string_view name = UpbStringToAbsl(
|
3002
|
+
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
3003
|
+
if (name != "envoy.transport_sockets.tls") {
|
3004
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3005
|
+
absl::StrCat("Unrecognized transport socket: ", name));
|
3006
|
+
}
|
3007
|
+
auto* typed_config =
|
3008
|
+
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
3009
|
+
if (typed_config != nullptr) {
|
3010
|
+
const upb_strview encoded_upstream_tls_context =
|
3011
|
+
google_protobuf_Any_value(typed_config);
|
3012
|
+
auto* upstream_tls_context =
|
3013
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
|
3014
|
+
encoded_upstream_tls_context.data,
|
3015
|
+
encoded_upstream_tls_context.size, context.arena);
|
3016
|
+
if (upstream_tls_context == nullptr) {
|
3017
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3018
|
+
"Can't decode upstream tls context.");
|
3019
|
+
}
|
3020
|
+
auto* common_tls_context_proto =
|
3021
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
3022
|
+
upstream_tls_context);
|
3023
|
+
if (common_tls_context_proto != nullptr) {
|
3024
|
+
grpc_error_handle error = CommonTlsContextParse(
|
3025
|
+
context, common_tls_context_proto, common_tls_context);
|
3026
|
+
if (error != GRPC_ERROR_NONE) {
|
3027
|
+
return grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3028
|
+
"Error parsing UpstreamTlsContext"),
|
3029
|
+
error);
|
3030
|
+
}
|
1556
3031
|
}
|
3032
|
+
}
|
3033
|
+
if (common_tls_context->certificate_validation_context
|
3034
|
+
.ca_certificate_provider_instance.instance_name.empty()) {
|
3035
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3036
|
+
"UpstreamTlsContext: TLS configuration provided but no "
|
3037
|
+
"ca_certificate_provider_instance found.");
|
3038
|
+
}
|
3039
|
+
return GRPC_ERROR_NONE;
|
3040
|
+
}
|
3041
|
+
|
3042
|
+
grpc_error_handle CdsLogicalDnsParse(
|
3043
|
+
const envoy_config_cluster_v3_Cluster* cluster,
|
3044
|
+
XdsApi::CdsUpdate* cds_update) {
|
3045
|
+
const auto* load_assignment =
|
3046
|
+
envoy_config_cluster_v3_Cluster_load_assignment(cluster);
|
3047
|
+
if (load_assignment == nullptr) {
|
3048
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3049
|
+
"load_assignment not present for LOGICAL_DNS cluster");
|
3050
|
+
}
|
3051
|
+
size_t num_localities;
|
3052
|
+
const auto* const* localities =
|
3053
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(load_assignment,
|
3054
|
+
&num_localities);
|
3055
|
+
if (num_localities != 1) {
|
3056
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3057
|
+
absl::StrCat("load_assignment for LOGICAL_DNS cluster must have "
|
3058
|
+
"exactly one locality, found ",
|
3059
|
+
num_localities));
|
3060
|
+
}
|
3061
|
+
size_t num_endpoints;
|
3062
|
+
const auto* const* endpoints =
|
3063
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(localities[0],
|
3064
|
+
&num_endpoints);
|
3065
|
+
if (num_endpoints != 1) {
|
3066
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3067
|
+
absl::StrCat("locality for LOGICAL_DNS cluster must have "
|
3068
|
+
"exactly one endpoint, found ",
|
3069
|
+
num_endpoints));
|
3070
|
+
}
|
3071
|
+
const auto* endpoint =
|
3072
|
+
envoy_config_endpoint_v3_LbEndpoint_endpoint(endpoints[0]);
|
3073
|
+
if (endpoint == nullptr) {
|
3074
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3075
|
+
"LbEndpoint endpoint field not set");
|
3076
|
+
}
|
3077
|
+
const auto* address = envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
3078
|
+
if (address == nullptr) {
|
3079
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3080
|
+
"Endpoint address field not set");
|
3081
|
+
}
|
3082
|
+
const auto* socket_address =
|
3083
|
+
envoy_config_core_v3_Address_socket_address(address);
|
3084
|
+
if (socket_address == nullptr) {
|
3085
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3086
|
+
"Address socket_address field not set");
|
3087
|
+
}
|
3088
|
+
if (envoy_config_core_v3_SocketAddress_resolver_name(socket_address).size !=
|
3089
|
+
0) {
|
3090
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3091
|
+
"LOGICAL_DNS clusters must NOT have a custom resolver name set");
|
3092
|
+
}
|
3093
|
+
absl::string_view address_str = UpbStringToAbsl(
|
3094
|
+
envoy_config_core_v3_SocketAddress_address(socket_address));
|
3095
|
+
if (address_str.empty()) {
|
3096
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3097
|
+
"SocketAddress address field not set");
|
3098
|
+
}
|
3099
|
+
if (!envoy_config_core_v3_SocketAddress_has_port_value(socket_address)) {
|
3100
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3101
|
+
"SocketAddress port_value field not set");
|
3102
|
+
}
|
3103
|
+
cds_update->dns_hostname = JoinHostPort(
|
3104
|
+
address_str,
|
3105
|
+
envoy_config_core_v3_SocketAddress_port_value(socket_address));
|
3106
|
+
return GRPC_ERROR_NONE;
|
3107
|
+
}
|
3108
|
+
|
3109
|
+
grpc_error_handle CdsResourceParse(
|
3110
|
+
const EncodingContext& context,
|
3111
|
+
const envoy_config_cluster_v3_Cluster* cluster, bool /*is_v2*/,
|
3112
|
+
XdsApi::CdsUpdate* cds_update) {
|
3113
|
+
std::vector<grpc_error_handle> errors;
|
3114
|
+
// Check the cluster_discovery_type.
|
3115
|
+
if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
|
3116
|
+
!envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
3117
|
+
errors.push_back(
|
3118
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found."));
|
3119
|
+
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
3120
|
+
envoy_config_cluster_v3_Cluster_EDS) {
|
3121
|
+
cds_update->cluster_type = XdsApi::CdsUpdate::ClusterType::EDS;
|
1557
3122
|
// Check the EDS config source.
|
1558
3123
|
const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
|
1559
3124
|
envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
|
@@ -1561,97 +3126,170 @@ grpc_error* CdsResponseParse(
|
|
1561
3126
|
envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
|
1562
3127
|
eds_cluster_config);
|
1563
3128
|
if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
|
1564
|
-
|
1565
|
-
"EDS ConfigSource is not ADS.");
|
3129
|
+
errors.push_back(
|
3130
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS ConfigSource is not ADS."));
|
1566
3131
|
}
|
1567
3132
|
// Record EDS service_name (if any).
|
1568
3133
|
upb_strview service_name =
|
1569
3134
|
envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
|
1570
3135
|
eds_cluster_config);
|
1571
3136
|
if (service_name.size != 0) {
|
1572
|
-
cds_update
|
1573
|
-
}
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
3137
|
+
cds_update->eds_service_name = UpbStringToStdString(service_name);
|
3138
|
+
}
|
3139
|
+
} else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
|
3140
|
+
errors.push_back(
|
3141
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
|
3142
|
+
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
3143
|
+
envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
|
3144
|
+
cds_update->cluster_type = XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS;
|
3145
|
+
grpc_error_handle error = CdsLogicalDnsParse(cluster, cds_update);
|
3146
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
3147
|
+
} else {
|
3148
|
+
if (!envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
3149
|
+
errors.push_back(
|
3150
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
|
3151
|
+
} else {
|
3152
|
+
const envoy_config_cluster_v3_Cluster_CustomClusterType*
|
3153
|
+
custom_cluster_type =
|
3154
|
+
envoy_config_cluster_v3_Cluster_cluster_type(cluster);
|
3155
|
+
upb_strview type_name =
|
3156
|
+
envoy_config_cluster_v3_Cluster_CustomClusterType_name(
|
3157
|
+
custom_cluster_type);
|
3158
|
+
if (UpbStringToAbsl(type_name) != "envoy.clusters.aggregate") {
|
3159
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3160
|
+
"DiscoveryType is not valid."));
|
3161
|
+
} else {
|
3162
|
+
cds_update->cluster_type = XdsApi::CdsUpdate::ClusterType::AGGREGATE;
|
3163
|
+
// Retrieve aggregate clusters.
|
3164
|
+
const google_protobuf_Any* typed_config =
|
3165
|
+
envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
|
3166
|
+
custom_cluster_type);
|
3167
|
+
const upb_strview aggregate_cluster_config_upb_strview =
|
3168
|
+
google_protobuf_Any_value(typed_config);
|
3169
|
+
const envoy_extensions_clusters_aggregate_v3_ClusterConfig*
|
3170
|
+
aggregate_cluster_config =
|
3171
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
|
3172
|
+
aggregate_cluster_config_upb_strview.data,
|
3173
|
+
aggregate_cluster_config_upb_strview.size, context.arena);
|
3174
|
+
if (aggregate_cluster_config == nullptr) {
|
3175
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3176
|
+
"Can't parse aggregate cluster."));
|
3177
|
+
} else {
|
3178
|
+
size_t size;
|
3179
|
+
const upb_strview* clusters =
|
3180
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
|
3181
|
+
aggregate_cluster_config, &size);
|
3182
|
+
for (size_t i = 0; i < size; ++i) {
|
3183
|
+
const upb_strview cluster = clusters[i];
|
3184
|
+
cds_update->prioritized_cluster_names.emplace_back(
|
3185
|
+
UpbStringToStdString(cluster));
|
1610
3186
|
}
|
1611
3187
|
}
|
1612
3188
|
}
|
1613
3189
|
}
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
3190
|
+
}
|
3191
|
+
// Check the LB policy.
|
3192
|
+
if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
3193
|
+
envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
|
3194
|
+
cds_update->lb_policy = "ROUND_ROBIN";
|
3195
|
+
} else if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
3196
|
+
envoy_config_cluster_v3_Cluster_RING_HASH) {
|
3197
|
+
cds_update->lb_policy = "RING_HASH";
|
3198
|
+
// Record ring hash lb config
|
3199
|
+
auto* ring_hash_config =
|
3200
|
+
envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
|
3201
|
+
if (ring_hash_config != nullptr) {
|
3202
|
+
const google_protobuf_UInt64Value* max_ring_size =
|
3203
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
|
3204
|
+
ring_hash_config);
|
3205
|
+
if (max_ring_size != nullptr) {
|
3206
|
+
cds_update->max_ring_size =
|
3207
|
+
google_protobuf_UInt64Value_value(max_ring_size);
|
3208
|
+
if (cds_update->max_ring_size > 8388608 ||
|
3209
|
+
cds_update->max_ring_size == 0) {
|
3210
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3211
|
+
"max_ring_size is not in the range of 1 to 8388608."));
|
3212
|
+
}
|
1621
3213
|
}
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
const envoy_config_cluster_v3_CircuitBreakers_Thresholds* const*
|
1633
|
-
thresholds = envoy_config_cluster_v3_CircuitBreakers_thresholds(
|
1634
|
-
circuit_breakers, &num_thresholds);
|
1635
|
-
for (size_t i = 0; i < num_thresholds; ++i) {
|
1636
|
-
const auto* threshold = thresholds[i];
|
1637
|
-
if (envoy_config_cluster_v3_CircuitBreakers_Thresholds_priority(
|
1638
|
-
threshold) == envoy_config_core_v3_DEFAULT) {
|
1639
|
-
const google_protobuf_UInt32Value* max_requests =
|
1640
|
-
envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
|
1641
|
-
threshold);
|
1642
|
-
if (max_requests != nullptr) {
|
1643
|
-
cds_update.max_concurrent_requests =
|
1644
|
-
google_protobuf_UInt32Value_value(max_requests);
|
1645
|
-
}
|
1646
|
-
break;
|
3214
|
+
const google_protobuf_UInt64Value* min_ring_size =
|
3215
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
|
3216
|
+
ring_hash_config);
|
3217
|
+
if (min_ring_size != nullptr) {
|
3218
|
+
cds_update->min_ring_size =
|
3219
|
+
google_protobuf_UInt64Value_value(min_ring_size);
|
3220
|
+
if (cds_update->min_ring_size > 8388608 ||
|
3221
|
+
cds_update->min_ring_size == 0) {
|
3222
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3223
|
+
"min_ring_size is not in the range of 1 to 8388608."));
|
1647
3224
|
}
|
3225
|
+
if (cds_update->min_ring_size > cds_update->max_ring_size) {
|
3226
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3227
|
+
"min_ring_size cannot be greater than max_ring_size."));
|
3228
|
+
}
|
3229
|
+
}
|
3230
|
+
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
3231
|
+
ring_hash_config) !=
|
3232
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
3233
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3234
|
+
"ring hash lb config has invalid hash function."));
|
3235
|
+
}
|
3236
|
+
}
|
3237
|
+
} else {
|
3238
|
+
errors.push_back(
|
3239
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB policy is not supported."));
|
3240
|
+
}
|
3241
|
+
auto* transport_socket =
|
3242
|
+
envoy_config_cluster_v3_Cluster_transport_socket(cluster);
|
3243
|
+
if (transport_socket != nullptr) {
|
3244
|
+
grpc_error_handle error = UpstreamTlsContextParse(
|
3245
|
+
context, transport_socket, &cds_update->common_tls_context);
|
3246
|
+
if (error != GRPC_ERROR_NONE) {
|
3247
|
+
errors.push_back(
|
3248
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3249
|
+
"Error parsing security configuration"),
|
3250
|
+
error));
|
3251
|
+
}
|
3252
|
+
}
|
3253
|
+
// Record LRS server name (if any).
|
3254
|
+
const envoy_config_core_v3_ConfigSource* lrs_server =
|
3255
|
+
envoy_config_cluster_v3_Cluster_lrs_server(cluster);
|
3256
|
+
if (lrs_server != nullptr) {
|
3257
|
+
if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
|
3258
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3259
|
+
": LRS ConfigSource is not self."));
|
3260
|
+
}
|
3261
|
+
cds_update->lrs_load_reporting_server_name.emplace("");
|
3262
|
+
}
|
3263
|
+
// The Cluster resource encodes the circuit breaking parameters in a list of
|
3264
|
+
// Thresholds messages, where each message specifies the parameters for a
|
3265
|
+
// particular RoutingPriority. we will look only at the first entry in the
|
3266
|
+
// list for priority DEFAULT and default to 1024 if not found.
|
3267
|
+
if (envoy_config_cluster_v3_Cluster_has_circuit_breakers(cluster)) {
|
3268
|
+
const envoy_config_cluster_v3_CircuitBreakers* circuit_breakers =
|
3269
|
+
envoy_config_cluster_v3_Cluster_circuit_breakers(cluster);
|
3270
|
+
size_t num_thresholds;
|
3271
|
+
const envoy_config_cluster_v3_CircuitBreakers_Thresholds* const*
|
3272
|
+
thresholds = envoy_config_cluster_v3_CircuitBreakers_thresholds(
|
3273
|
+
circuit_breakers, &num_thresholds);
|
3274
|
+
for (size_t i = 0; i < num_thresholds; ++i) {
|
3275
|
+
const auto* threshold = thresholds[i];
|
3276
|
+
if (envoy_config_cluster_v3_CircuitBreakers_Thresholds_priority(
|
3277
|
+
threshold) == envoy_config_core_v3_DEFAULT) {
|
3278
|
+
const google_protobuf_UInt32Value* max_requests =
|
3279
|
+
envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
|
3280
|
+
threshold);
|
3281
|
+
if (max_requests != nullptr) {
|
3282
|
+
cds_update->max_concurrent_requests =
|
3283
|
+
google_protobuf_UInt32Value_value(max_requests);
|
3284
|
+
}
|
3285
|
+
break;
|
1648
3286
|
}
|
1649
3287
|
}
|
1650
3288
|
}
|
1651
|
-
return
|
3289
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS resource", &errors);
|
1652
3290
|
}
|
1653
3291
|
|
1654
|
-
|
3292
|
+
grpc_error_handle ServerAddressParseAndAppend(
|
1655
3293
|
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
|
1656
3294
|
ServerAddressList* list) {
|
1657
3295
|
// If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
|
@@ -1674,15 +3312,32 @@ grpc_error* ServerAddressParseAndAppend(
|
|
1674
3312
|
if (GPR_UNLIKELY(port >> 16) != 0) {
|
1675
3313
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
|
1676
3314
|
}
|
3315
|
+
// Find load_balancing_weight for the endpoint.
|
3316
|
+
const google_protobuf_UInt32Value* load_balancing_weight =
|
3317
|
+
envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(lb_endpoint);
|
3318
|
+
const int32_t weight =
|
3319
|
+
load_balancing_weight != nullptr
|
3320
|
+
? google_protobuf_UInt32Value_value(load_balancing_weight)
|
3321
|
+
: 500;
|
3322
|
+
if (weight == 0) {
|
3323
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3324
|
+
"Invalid endpoint weight of 0.");
|
3325
|
+
}
|
1677
3326
|
// Populate grpc_resolved_address.
|
1678
3327
|
grpc_resolved_address addr;
|
1679
|
-
|
3328
|
+
grpc_error_handle error =
|
3329
|
+
grpc_string_to_sockaddr(&addr, address_str.c_str(), port);
|
3330
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1680
3331
|
// Append the address to the list.
|
1681
|
-
|
3332
|
+
std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
|
3333
|
+
attributes;
|
3334
|
+
attributes[ServerAddressWeightAttribute::kServerAddressWeightAttributeKey] =
|
3335
|
+
absl::make_unique<ServerAddressWeightAttribute>(weight);
|
3336
|
+
list->emplace_back(addr, nullptr, std::move(attributes));
|
1682
3337
|
return GRPC_ERROR_NONE;
|
1683
3338
|
}
|
1684
3339
|
|
1685
|
-
|
3340
|
+
grpc_error_handle LocalityParse(
|
1686
3341
|
const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
|
1687
3342
|
XdsApi::EdsUpdate::Priority::Locality* output_locality, size_t* priority) {
|
1688
3343
|
// Parse LB weight.
|
@@ -1699,6 +3354,9 @@ grpc_error* LocalityParse(
|
|
1699
3354
|
const envoy_config_core_v3_Locality* locality =
|
1700
3355
|
envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
|
1701
3356
|
locality_lb_endpoints);
|
3357
|
+
if (locality == nullptr) {
|
3358
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty locality.");
|
3359
|
+
}
|
1702
3360
|
std::string region =
|
1703
3361
|
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
1704
3362
|
std::string zone =
|
@@ -1713,7 +3371,7 @@ grpc_error* LocalityParse(
|
|
1713
3371
|
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
1714
3372
|
locality_lb_endpoints, &size);
|
1715
3373
|
for (size_t i = 0; i < size; ++i) {
|
1716
|
-
|
3374
|
+
grpc_error_handle error = ServerAddressParseAndAppend(
|
1717
3375
|
lb_endpoints[i], &output_locality->endpoints);
|
1718
3376
|
if (error != GRPC_ERROR_NONE) return error;
|
1719
3377
|
}
|
@@ -1723,7 +3381,7 @@ grpc_error* LocalityParse(
|
|
1723
3381
|
return GRPC_ERROR_NONE;
|
1724
3382
|
}
|
1725
3383
|
|
1726
|
-
|
3384
|
+
grpc_error_handle DropParseAndAppend(
|
1727
3385
|
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
|
1728
3386
|
drop_overload,
|
1729
3387
|
XdsApi::EdsUpdate::DropConfig* drop_config) {
|
@@ -1757,16 +3415,88 @@ grpc_error* DropParseAndAppend(
|
|
1757
3415
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
|
1758
3416
|
}
|
1759
3417
|
// Cap numerator to 1000000.
|
1760
|
-
numerator =
|
3418
|
+
numerator = std::min(numerator, 1000000u);
|
1761
3419
|
drop_config->AddCategory(std::move(category), numerator);
|
1762
3420
|
return GRPC_ERROR_NONE;
|
1763
3421
|
}
|
1764
3422
|
|
1765
|
-
|
1766
|
-
|
3423
|
+
grpc_error_handle EdsResourceParse(
|
3424
|
+
const EncodingContext& /*context*/,
|
3425
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment*
|
3426
|
+
cluster_load_assignment,
|
3427
|
+
bool /*is_v2*/, XdsApi::EdsUpdate* eds_update) {
|
3428
|
+
std::vector<grpc_error_handle> errors;
|
3429
|
+
// Get the endpoints.
|
3430
|
+
size_t locality_size;
|
3431
|
+
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
3432
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
3433
|
+
cluster_load_assignment, &locality_size);
|
3434
|
+
for (size_t j = 0; j < locality_size; ++j) {
|
3435
|
+
size_t priority;
|
3436
|
+
XdsApi::EdsUpdate::Priority::Locality locality;
|
3437
|
+
grpc_error_handle error = LocalityParse(endpoints[j], &locality, &priority);
|
3438
|
+
if (error != GRPC_ERROR_NONE) {
|
3439
|
+
errors.push_back(error);
|
3440
|
+
continue;
|
3441
|
+
}
|
3442
|
+
// Filter out locality with weight 0.
|
3443
|
+
if (locality.lb_weight == 0) continue;
|
3444
|
+
// Make sure prorities is big enough. Note that they might not
|
3445
|
+
// arrive in priority order.
|
3446
|
+
while (eds_update->priorities.size() < priority + 1) {
|
3447
|
+
eds_update->priorities.emplace_back();
|
3448
|
+
}
|
3449
|
+
eds_update->priorities[priority].localities.emplace(locality.name.get(),
|
3450
|
+
std::move(locality));
|
3451
|
+
}
|
3452
|
+
for (const auto& priority : eds_update->priorities) {
|
3453
|
+
if (priority.localities.empty()) {
|
3454
|
+
errors.push_back(
|
3455
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("sparse priority list"));
|
3456
|
+
}
|
3457
|
+
}
|
3458
|
+
// Get the drop config.
|
3459
|
+
eds_update->drop_config = MakeRefCounted<XdsApi::EdsUpdate::DropConfig>();
|
3460
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
|
3461
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
|
3462
|
+
cluster_load_assignment);
|
3463
|
+
if (policy != nullptr) {
|
3464
|
+
size_t drop_size;
|
3465
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
|
3466
|
+
drop_overload =
|
3467
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
|
3468
|
+
policy, &drop_size);
|
3469
|
+
for (size_t j = 0; j < drop_size; ++j) {
|
3470
|
+
grpc_error_handle error =
|
3471
|
+
DropParseAndAppend(drop_overload[j], eds_update->drop_config.get());
|
3472
|
+
if (error != GRPC_ERROR_NONE) {
|
3473
|
+
errors.push_back(
|
3474
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
3475
|
+
"drop config validation error"),
|
3476
|
+
error));
|
3477
|
+
}
|
3478
|
+
}
|
3479
|
+
}
|
3480
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS resource", &errors);
|
3481
|
+
}
|
3482
|
+
|
3483
|
+
template <typename ProtoParseFunction, typename ProtoResourceNameFunction,
|
3484
|
+
typename ResourceTypeSelectorFunction, typename ProtoLogFunction,
|
3485
|
+
typename ResourceParseFunction, typename UpdateMap>
|
3486
|
+
grpc_error_handle AdsResponseParse(
|
3487
|
+
const EncodingContext& context, ProtoParseFunction proto_parse_function,
|
3488
|
+
ProtoResourceNameFunction proto_resource_name_function,
|
3489
|
+
ResourceTypeSelectorFunction resource_type_selector_function,
|
3490
|
+
ProtoLogFunction proto_log_function,
|
3491
|
+
ResourceParseFunction resource_parse_function,
|
3492
|
+
const char* resource_type_string,
|
1767
3493
|
const envoy_service_discovery_v3_DiscoveryResponse* response,
|
1768
|
-
const std::
|
1769
|
-
|
3494
|
+
const std::map<absl::string_view /*authority*/,
|
3495
|
+
std::set<absl::string_view /*name*/>>&
|
3496
|
+
subscribed_resource_names,
|
3497
|
+
UpdateMap* update_map,
|
3498
|
+
std::set<XdsApi::ResourceName>* resource_names_failed) {
|
3499
|
+
std::vector<grpc_error_handle> errors;
|
1770
3500
|
// Get the resources from the response.
|
1771
3501
|
size_t size;
|
1772
3502
|
const google_protobuf_Any* const* resources =
|
@@ -1775,83 +3505,65 @@ grpc_error* EdsResponseParse(
|
|
1775
3505
|
// Check the type_url of the resource.
|
1776
3506
|
absl::string_view type_url =
|
1777
3507
|
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
google_protobuf_Any_value(resources[i]);
|
1784
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment* cluster_load_assignment =
|
1785
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
|
1786
|
-
encoded_cluster_load_assignment.data,
|
1787
|
-
encoded_cluster_load_assignment.size, arena);
|
1788
|
-
if (cluster_load_assignment == nullptr) {
|
1789
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1790
|
-
"Can't parse cluster_load_assignment.");
|
1791
|
-
}
|
1792
|
-
MaybeLogClusterLoadAssignment(client, tracer, symtab,
|
1793
|
-
cluster_load_assignment);
|
1794
|
-
// Check the EDS service name. Ignore unexpected names.
|
1795
|
-
std::string eds_service_name = UpbStringToStdString(
|
1796
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(
|
1797
|
-
cluster_load_assignment));
|
1798
|
-
if (expected_eds_service_names.find(eds_service_name) ==
|
1799
|
-
expected_eds_service_names.end()) {
|
3508
|
+
bool is_v2 = false;
|
3509
|
+
if (!resource_type_selector_function(type_url, &is_v2)) {
|
3510
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3511
|
+
absl::StrCat("resource index ", i, ": Resource is not ",
|
3512
|
+
resource_type_string, ".")));
|
1800
3513
|
continue;
|
1801
3514
|
}
|
1802
|
-
//
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
size_t locality_size;
|
1812
|
-
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
1813
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
1814
|
-
cluster_load_assignment, &locality_size);
|
1815
|
-
for (size_t j = 0; j < locality_size; ++j) {
|
1816
|
-
size_t priority;
|
1817
|
-
XdsApi::EdsUpdate::Priority::Locality locality;
|
1818
|
-
grpc_error* error = LocalityParse(endpoints[j], &locality, &priority);
|
1819
|
-
if (error != GRPC_ERROR_NONE) return error;
|
1820
|
-
// Filter out locality with weight 0.
|
1821
|
-
if (locality.lb_weight == 0) continue;
|
1822
|
-
// Make sure prorities is big enough. Note that they might not
|
1823
|
-
// arrive in priority order.
|
1824
|
-
while (eds_update.priorities.size() < priority + 1) {
|
1825
|
-
eds_update.priorities.emplace_back();
|
1826
|
-
}
|
1827
|
-
eds_update.priorities[priority].localities.emplace(locality.name.get(),
|
1828
|
-
std::move(locality));
|
3515
|
+
// Parse the resource.
|
3516
|
+
upb_strview serialized_resource = google_protobuf_Any_value(resources[i]);
|
3517
|
+
auto* resource = proto_parse_function(
|
3518
|
+
serialized_resource.data, serialized_resource.size, context.arena);
|
3519
|
+
if (resource == nullptr) {
|
3520
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3521
|
+
absl::StrCat("resource index ", i, ": Can't parse ",
|
3522
|
+
resource_type_string, " resource.")));
|
3523
|
+
continue;
|
1829
3524
|
}
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
3525
|
+
proto_log_function(context, resource);
|
3526
|
+
// Check the resource name. Ignore unexpected names.
|
3527
|
+
std::string resource_name =
|
3528
|
+
UpbStringToStdString(proto_resource_name_function(resource));
|
3529
|
+
auto resource_name_status = ParseResourceNameInternal(
|
3530
|
+
resource_name, resource_type_selector_function);
|
3531
|
+
if (!resource_name_status.ok()) {
|
3532
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3533
|
+
"Cannot parse xDS resource name \"", resource_name, "\"")));
|
3534
|
+
continue;
|
1835
3535
|
}
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
3536
|
+
auto iter = subscribed_resource_names.find(resource_name_status->authority);
|
3537
|
+
if (iter == subscribed_resource_names.end() ||
|
3538
|
+
iter->second.find(resource_name_status->id) == iter->second.end()) {
|
3539
|
+
continue;
|
3540
|
+
}
|
3541
|
+
// Fail on duplicate resources.
|
3542
|
+
if (update_map->find(*resource_name_status) != update_map->end()) {
|
3543
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3544
|
+
absl::StrCat("duplicate resource name \"", resource_name, "\"")));
|
3545
|
+
resource_names_failed->insert(*resource_name_status);
|
3546
|
+
continue;
|
3547
|
+
}
|
3548
|
+
// Validate resource.
|
3549
|
+
decltype(UpdateMap::mapped_type::resource) update;
|
3550
|
+
grpc_error_handle error =
|
3551
|
+
resource_parse_function(context, resource, is_v2, &update);
|
3552
|
+
if (error != GRPC_ERROR_NONE) {
|
3553
|
+
errors.push_back(
|
3554
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3555
|
+
resource_name, ": validation error")),
|
3556
|
+
error));
|
3557
|
+
resource_names_failed->insert(*resource_name_status);
|
3558
|
+
} else {
|
3559
|
+
// Store result in update map, in both validated and serialized form.
|
3560
|
+
auto& resource_data = (*update_map)[*resource_name_status];
|
3561
|
+
resource_data.resource = std::move(update);
|
3562
|
+
resource_data.serialized_proto =
|
3563
|
+
UpbStringToStdString(serialized_resource);
|
1852
3564
|
}
|
1853
3565
|
}
|
1854
|
-
return
|
3566
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing ADS response", &errors);
|
1855
3567
|
}
|
1856
3568
|
|
1857
3569
|
std::string TypeUrlInternalToExternal(absl::string_view type_url) {
|
@@ -1867,16 +3579,51 @@ std::string TypeUrlInternalToExternal(absl::string_view type_url) {
|
|
1867
3579
|
return std::string(type_url);
|
1868
3580
|
}
|
1869
3581
|
|
3582
|
+
upb_strview LdsResourceName(
|
3583
|
+
const envoy_config_listener_v3_Listener* lds_resource) {
|
3584
|
+
return envoy_config_listener_v3_Listener_name(lds_resource);
|
3585
|
+
}
|
3586
|
+
|
3587
|
+
upb_strview RdsResourceName(
|
3588
|
+
const envoy_config_route_v3_RouteConfiguration* rds_resource) {
|
3589
|
+
return envoy_config_route_v3_RouteConfiguration_name(rds_resource);
|
3590
|
+
}
|
3591
|
+
|
3592
|
+
upb_strview CdsResourceName(
|
3593
|
+
const envoy_config_cluster_v3_Cluster* cds_resource) {
|
3594
|
+
return envoy_config_cluster_v3_Cluster_name(cds_resource);
|
3595
|
+
}
|
3596
|
+
|
3597
|
+
upb_strview EdsResourceName(
|
3598
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment* eds_resource) {
|
3599
|
+
return envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(
|
3600
|
+
eds_resource);
|
3601
|
+
}
|
3602
|
+
|
1870
3603
|
} // namespace
|
1871
3604
|
|
1872
3605
|
XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
1873
|
-
const grpc_slice& encoded_response,
|
1874
|
-
const std::
|
1875
|
-
|
1876
|
-
|
1877
|
-
const std::
|
3606
|
+
const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
|
3607
|
+
const std::map<absl::string_view /*authority*/,
|
3608
|
+
std::set<absl::string_view /*name*/>>&
|
3609
|
+
subscribed_listener_names,
|
3610
|
+
const std::map<absl::string_view /*authority*/,
|
3611
|
+
std::set<absl::string_view /*name*/>>&
|
3612
|
+
subscribed_route_config_names,
|
3613
|
+
const std::map<absl::string_view /*authority*/,
|
3614
|
+
std::set<absl::string_view /*name*/>>&
|
3615
|
+
subscribed_cluster_names,
|
3616
|
+
const std::map<absl::string_view /*authority*/,
|
3617
|
+
std::set<absl::string_view /*name*/>>&
|
3618
|
+
subscribed_eds_service_names) {
|
1878
3619
|
AdsParseResult result;
|
1879
3620
|
upb::Arena arena;
|
3621
|
+
const EncodingContext context = {client_,
|
3622
|
+
tracer_,
|
3623
|
+
symtab_.ptr(),
|
3624
|
+
arena.ptr(),
|
3625
|
+
server.ShouldUseV3(),
|
3626
|
+
certificate_provider_definition_map_};
|
1880
3627
|
// Decode the response.
|
1881
3628
|
const envoy_service_discovery_v3_DiscoveryResponse* response =
|
1882
3629
|
envoy_service_discovery_v3_DiscoveryResponse_parse(
|
@@ -1888,7 +3635,7 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
1888
3635
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode DiscoveryResponse.");
|
1889
3636
|
return result;
|
1890
3637
|
}
|
1891
|
-
MaybeLogDiscoveryResponse(
|
3638
|
+
MaybeLogDiscoveryResponse(context, response);
|
1892
3639
|
// Record the type_url, the version_info, and the nonce of the response.
|
1893
3640
|
result.type_url = TypeUrlInternalToExternal(UpbStringToAbsl(
|
1894
3641
|
envoy_service_discovery_v3_DiscoveryResponse_type_url(response)));
|
@@ -1897,23 +3644,33 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
1897
3644
|
result.nonce = UpbStringToStdString(
|
1898
3645
|
envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
|
1899
3646
|
// Parse the response according to the resource type.
|
3647
|
+
// TODO(roth): When we have time, consider defining an interface for the
|
3648
|
+
// methods of each resource type, so that we don't have to pass
|
3649
|
+
// individual functions into each call to AdsResponseParse().
|
1900
3650
|
if (IsLds(result.type_url)) {
|
1901
|
-
result.parse_error =
|
1902
|
-
|
1903
|
-
|
3651
|
+
result.parse_error = AdsResponseParse(
|
3652
|
+
context, envoy_config_listener_v3_Listener_parse, LdsResourceName,
|
3653
|
+
IsLdsInternal, MaybeLogListener, LdsResourceParse, "LDS", response,
|
3654
|
+
subscribed_listener_names, &result.lds_update_map,
|
3655
|
+
&result.resource_names_failed);
|
1904
3656
|
} else if (IsRds(result.type_url)) {
|
1905
|
-
result.parse_error =
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
3657
|
+
result.parse_error = AdsResponseParse(
|
3658
|
+
context, envoy_config_route_v3_RouteConfiguration_parse,
|
3659
|
+
RdsResourceName, IsRdsInternal, MaybeLogRouteConfiguration,
|
3660
|
+
RouteConfigParse, "RDS", response, subscribed_route_config_names,
|
3661
|
+
&result.rds_update_map, &result.resource_names_failed);
|
1909
3662
|
} else if (IsCds(result.type_url)) {
|
1910
|
-
result.parse_error =
|
1911
|
-
|
1912
|
-
|
3663
|
+
result.parse_error = AdsResponseParse(
|
3664
|
+
context, envoy_config_cluster_v3_Cluster_parse, CdsResourceName,
|
3665
|
+
IsCdsInternal, MaybeLogCluster, CdsResourceParse, "CDS", response,
|
3666
|
+
subscribed_cluster_names, &result.cds_update_map,
|
3667
|
+
&result.resource_names_failed);
|
1913
3668
|
} else if (IsEds(result.type_url)) {
|
1914
|
-
result.parse_error =
|
1915
|
-
|
1916
|
-
|
3669
|
+
result.parse_error = AdsResponseParse(
|
3670
|
+
context, envoy_config_endpoint_v3_ClusterLoadAssignment_parse,
|
3671
|
+
EdsResourceName, IsEdsInternal, MaybeLogClusterLoadAssignment,
|
3672
|
+
EdsResourceParse, "EDS", response, subscribed_eds_service_names,
|
3673
|
+
&result.eds_update_map, &result.resource_names_failed);
|
1917
3674
|
}
|
1918
3675
|
return result;
|
1919
3676
|
}
|
@@ -1921,25 +3678,25 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
1921
3678
|
namespace {
|
1922
3679
|
|
1923
3680
|
void MaybeLogLrsRequest(
|
1924
|
-
|
3681
|
+
const EncodingContext& context,
|
1925
3682
|
const envoy_service_load_stats_v3_LoadStatsRequest* request) {
|
1926
|
-
if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
|
3683
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1927
3684
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1928
3685
|
const upb_msgdef* msg_type =
|
1929
|
-
envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef(symtab);
|
3686
|
+
envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef(context.symtab);
|
1930
3687
|
char buf[10240];
|
1931
3688
|
upb_text_encode(request, msg_type, nullptr, 0, buf, sizeof(buf));
|
1932
|
-
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s",
|
1933
|
-
buf);
|
3689
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s",
|
3690
|
+
context.client, buf);
|
1934
3691
|
}
|
1935
3692
|
}
|
1936
3693
|
|
1937
3694
|
grpc_slice SerializeLrsRequest(
|
1938
|
-
const
|
1939
|
-
|
3695
|
+
const EncodingContext& context,
|
3696
|
+
const envoy_service_load_stats_v3_LoadStatsRequest* request) {
|
1940
3697
|
size_t output_length;
|
1941
3698
|
char* output = envoy_service_load_stats_v3_LoadStatsRequest_serialize(
|
1942
|
-
request, arena, &output_length);
|
3699
|
+
request, context.arena, &output_length);
|
1943
3700
|
return grpc_slice_from_copied_buffer(output, output_length);
|
1944
3701
|
}
|
1945
3702
|
|
@@ -1948,6 +3705,12 @@ grpc_slice SerializeLrsRequest(
|
|
1948
3705
|
grpc_slice XdsApi::CreateLrsInitialRequest(
|
1949
3706
|
const XdsBootstrap::XdsServer& server) {
|
1950
3707
|
upb::Arena arena;
|
3708
|
+
const EncodingContext context = {client_,
|
3709
|
+
tracer_,
|
3710
|
+
symtab_.ptr(),
|
3711
|
+
arena.ptr(),
|
3712
|
+
server.ShouldUseV3(),
|
3713
|
+
certificate_provider_definition_map_};
|
1951
3714
|
// Create a request.
|
1952
3715
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
1953
3716
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -1955,25 +3718,26 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
|
|
1955
3718
|
envoy_config_core_v3_Node* node_msg =
|
1956
3719
|
envoy_service_load_stats_v3_LoadStatsRequest_mutable_node(request,
|
1957
3720
|
arena.ptr());
|
1958
|
-
PopulateNode(
|
1959
|
-
|
3721
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3722
|
+
user_agent_version_, node_msg);
|
1960
3723
|
envoy_config_core_v3_Node_add_client_features(
|
1961
3724
|
node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
|
1962
3725
|
arena.ptr());
|
1963
|
-
MaybeLogLrsRequest(
|
1964
|
-
return SerializeLrsRequest(
|
3726
|
+
MaybeLogLrsRequest(context, request);
|
3727
|
+
return SerializeLrsRequest(context, request);
|
1965
3728
|
}
|
1966
3729
|
|
1967
3730
|
namespace {
|
1968
3731
|
|
1969
3732
|
void LocalityStatsPopulate(
|
3733
|
+
const EncodingContext& context,
|
1970
3734
|
envoy_config_endpoint_v3_UpstreamLocalityStats* output,
|
1971
3735
|
const XdsLocalityName& locality_name,
|
1972
|
-
const XdsClusterLocalityStats::Snapshot& snapshot
|
3736
|
+
const XdsClusterLocalityStats::Snapshot& snapshot) {
|
1973
3737
|
// Set locality.
|
1974
3738
|
envoy_config_core_v3_Locality* locality =
|
1975
|
-
envoy_config_endpoint_v3_UpstreamLocalityStats_mutable_locality(
|
1976
|
-
|
3739
|
+
envoy_config_endpoint_v3_UpstreamLocalityStats_mutable_locality(
|
3740
|
+
output, context.arena);
|
1977
3741
|
if (!locality_name.region().empty()) {
|
1978
3742
|
envoy_config_core_v3_Locality_set_region(
|
1979
3743
|
locality, StdStringToUpbString(locality_name.region()));
|
@@ -2001,7 +3765,7 @@ void LocalityStatsPopulate(
|
|
2001
3765
|
const XdsClusterLocalityStats::BackendMetric& metric_value = p.second;
|
2002
3766
|
envoy_config_endpoint_v3_EndpointLoadMetricStats* load_metric =
|
2003
3767
|
envoy_config_endpoint_v3_UpstreamLocalityStats_add_load_metric_stats(
|
2004
|
-
output, arena);
|
3768
|
+
output, context.arena);
|
2005
3769
|
envoy_config_endpoint_v3_EndpointLoadMetricStats_set_metric_name(
|
2006
3770
|
load_metric, StdStringToUpbString(metric_name));
|
2007
3771
|
envoy_config_endpoint_v3_EndpointLoadMetricStats_set_num_requests_finished_with_metric(
|
@@ -2016,6 +3780,9 @@ void LocalityStatsPopulate(
|
|
2016
3780
|
grpc_slice XdsApi::CreateLrsRequest(
|
2017
3781
|
ClusterLoadReportMap cluster_load_report_map) {
|
2018
3782
|
upb::Arena arena;
|
3783
|
+
const EncodingContext context = {
|
3784
|
+
client_, tracer_, symtab_.ptr(),
|
3785
|
+
arena.ptr(), false, certificate_provider_definition_map_};
|
2019
3786
|
// Create a request.
|
2020
3787
|
envoy_service_load_stats_v3_LoadStatsRequest* request =
|
2021
3788
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
|
@@ -2042,8 +3809,7 @@ grpc_slice XdsApi::CreateLrsRequest(
|
|
2042
3809
|
envoy_config_endpoint_v3_UpstreamLocalityStats* locality_stats =
|
2043
3810
|
envoy_config_endpoint_v3_ClusterStats_add_upstream_locality_stats(
|
2044
3811
|
cluster_stats, arena.ptr());
|
2045
|
-
LocalityStatsPopulate(locality_stats, locality_name, snapshot
|
2046
|
-
arena.ptr());
|
3812
|
+
LocalityStatsPopulate(context, locality_stats, locality_name, snapshot);
|
2047
3813
|
}
|
2048
3814
|
// Add dropped requests.
|
2049
3815
|
uint64_t total_dropped_requests = 0;
|
@@ -2072,14 +3838,14 @@ grpc_slice XdsApi::CreateLrsRequest(
|
|
2072
3838
|
google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
|
2073
3839
|
google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
|
2074
3840
|
}
|
2075
|
-
MaybeLogLrsRequest(
|
2076
|
-
return SerializeLrsRequest(
|
3841
|
+
MaybeLogLrsRequest(context, request);
|
3842
|
+
return SerializeLrsRequest(context, request);
|
2077
3843
|
}
|
2078
3844
|
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
3845
|
+
grpc_error_handle XdsApi::ParseLrsResponse(
|
3846
|
+
const grpc_slice& encoded_response, bool* send_all_clusters,
|
3847
|
+
std::set<std::string>* cluster_names,
|
3848
|
+
grpc_millis* load_reporting_interval) {
|
2083
3849
|
upb::Arena arena;
|
2084
3850
|
// Decode the response.
|
2085
3851
|
const envoy_service_load_stats_v3_LoadStatsResponse* decoded_response =
|
@@ -2116,4 +3882,84 @@ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
|
|
2116
3882
|
return GRPC_ERROR_NONE;
|
2117
3883
|
}
|
2118
3884
|
|
3885
|
+
namespace {
|
3886
|
+
|
3887
|
+
google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
|
3888
|
+
grpc_millis value) {
|
3889
|
+
google_protobuf_Timestamp* timestamp =
|
3890
|
+
google_protobuf_Timestamp_new(context.arena);
|
3891
|
+
gpr_timespec timespec = grpc_millis_to_timespec(value, GPR_CLOCK_REALTIME);
|
3892
|
+
google_protobuf_Timestamp_set_seconds(timestamp, timespec.tv_sec);
|
3893
|
+
google_protobuf_Timestamp_set_nanos(timestamp, timespec.tv_nsec);
|
3894
|
+
return timestamp;
|
3895
|
+
}
|
3896
|
+
|
3897
|
+
} // namespace
|
3898
|
+
|
3899
|
+
std::string XdsApi::AssembleClientConfig(
|
3900
|
+
const ResourceTypeMetadataMap& resource_type_metadata_map) {
|
3901
|
+
upb::Arena arena;
|
3902
|
+
// Create the ClientConfig for resource metadata from XdsClient
|
3903
|
+
auto* client_config = envoy_service_status_v3_ClientConfig_new(arena.ptr());
|
3904
|
+
// Fill-in the node information
|
3905
|
+
auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config,
|
3906
|
+
arena.ptr());
|
3907
|
+
const EncodingContext context = {
|
3908
|
+
client_, tracer_, symtab_.ptr(),
|
3909
|
+
arena.ptr(), true, certificate_provider_definition_map_};
|
3910
|
+
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3911
|
+
user_agent_version_, node);
|
3912
|
+
// Dump each resource.
|
3913
|
+
for (const auto& p : resource_type_metadata_map) {
|
3914
|
+
absl::string_view type_url = p.first;
|
3915
|
+
const ResourceMetadataMap& resource_metadata_map = p.second;
|
3916
|
+
for (const auto& q : resource_metadata_map) {
|
3917
|
+
absl::string_view resource_name = q.first;
|
3918
|
+
const ResourceMetadata& metadata = *q.second;
|
3919
|
+
auto* entry =
|
3920
|
+
envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
|
3921
|
+
client_config, context.arena);
|
3922
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
|
3923
|
+
entry, StdStringToUpbString(type_url));
|
3924
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
|
3925
|
+
entry, StdStringToUpbString(resource_name));
|
3926
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
|
3927
|
+
entry, metadata.client_status);
|
3928
|
+
if (!metadata.serialized_proto.empty()) {
|
3929
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_version_info(
|
3930
|
+
entry, StdStringToUpbString(metadata.version));
|
3931
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_last_updated(
|
3932
|
+
entry, GrpcMillisToTimestamp(context, metadata.update_time));
|
3933
|
+
auto* any_field =
|
3934
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
|
3935
|
+
entry, context.arena);
|
3936
|
+
google_protobuf_Any_set_type_url(any_field,
|
3937
|
+
StdStringToUpbString(type_url));
|
3938
|
+
google_protobuf_Any_set_value(
|
3939
|
+
any_field, StdStringToUpbString(metadata.serialized_proto));
|
3940
|
+
}
|
3941
|
+
if (metadata.client_status == XdsApi::ResourceMetadata::NACKED) {
|
3942
|
+
auto* update_failure_state =
|
3943
|
+
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
3944
|
+
envoy_admin_v3_UpdateFailureState_set_details(
|
3945
|
+
update_failure_state,
|
3946
|
+
StdStringToUpbString(metadata.failed_details));
|
3947
|
+
envoy_admin_v3_UpdateFailureState_set_version_info(
|
3948
|
+
update_failure_state,
|
3949
|
+
StdStringToUpbString(metadata.failed_version));
|
3950
|
+
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
3951
|
+
update_failure_state,
|
3952
|
+
GrpcMillisToTimestamp(context, metadata.failed_update_time));
|
3953
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
|
3954
|
+
entry, update_failure_state);
|
3955
|
+
}
|
3956
|
+
}
|
3957
|
+
}
|
3958
|
+
// Serialize the upb message to bytes
|
3959
|
+
size_t output_length;
|
3960
|
+
char* output = envoy_service_status_v3_ClientConfig_serialize(
|
3961
|
+
client_config, arena.ptr(), &output_length);
|
3962
|
+
return std::string(output, output_length);
|
3963
|
+
}
|
3964
|
+
|
2119
3965
|
} // namespace grpc_core
|