grpc 1.42.0 → 1.45.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (1465) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +405 -221
  3. data/include/grpc/event_engine/event_engine.h +37 -13
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  5. data/include/grpc/event_engine/memory_allocator.h +27 -11
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc.h +40 -14
  8. data/include/grpc/grpc_posix.h +20 -19
  9. data/include/grpc/grpc_security.h +312 -195
  10. data/include/grpc/grpc_security_constants.h +1 -14
  11. data/include/grpc/impl/codegen/compression_types.h +0 -2
  12. data/include/grpc/impl/codegen/grpc_types.h +17 -8
  13. data/include/grpc/impl/codegen/port_platform.h +7 -3
  14. data/include/grpc/impl/codegen/slice.h +4 -1
  15. data/include/grpc/slice.h +0 -11
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +9 -10
  17. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  18. data/src/core/ext/filters/client_channel/backup_poller.cc +12 -8
  19. data/src/core/ext/filters/client_channel/channel_connectivity.cc +5 -5
  20. data/src/core/ext/filters/client_channel/client_channel.cc +213 -156
  21. data/src/core/ext/filters/client_channel/client_channel.h +43 -41
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +6 -13
  23. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  24. data/src/core/ext/filters/client_channel/connector.h +1 -1
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -6
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -2
  27. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
  28. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -15
  29. data/src/core/ext/filters/client_channel/health/health_check_client.cc +32 -31
  30. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -5
  31. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +22 -27
  32. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +4 -7
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -81
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +15 -15
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  42. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +50 -32
  43. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +28 -19
  44. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +122 -71
  45. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +161 -112
  46. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  47. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  48. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -7
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +55 -99
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +147 -70
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +5 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +114 -206
  54. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  55. data/src/core/ext/filters/client_channel/lb_policy.h +94 -62
  56. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +10 -16
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +261 -122
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +136 -226
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +122 -115
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -17
  66. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  67. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +84 -68
  68. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +40 -39
  69. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +390 -373
  70. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -11
  71. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
  72. data/src/core/ext/filters/client_channel/retry_filter.cc +236 -169
  73. data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
  74. data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
  75. data/src/core/ext/filters/client_channel/retry_throttle.cc +9 -23
  76. data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
  77. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +8 -7
  78. data/src/core/ext/filters/client_channel/subchannel.cc +49 -56
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -7
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +96 -159
  81. data/src/core/ext/filters/client_idle/idle_filter_state.h +2 -2
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +15 -14
  83. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  84. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +53 -58
  85. data/src/core/ext/filters/fault_injection/service_config_parser.cc +11 -13
  86. data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
  87. data/src/core/ext/filters/http/client/http_client_filter.cc +70 -153
  88. data/src/core/ext/filters/http/client_authority_filter.cc +28 -87
  89. data/src/core/ext/filters/http/client_authority_filter.h +23 -5
  90. data/src/core/ext/filters/http/http_filters_plugin.cc +14 -17
  91. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +43 -140
  92. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +15 -27
  93. data/src/core/ext/filters/http/server/http_server_filter.cc +60 -161
  94. data/src/core/ext/filters/max_age/max_age_filter.cc +46 -40
  95. data/src/core/ext/filters/message_size/message_size_filter.cc +27 -35
  96. data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
  97. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  98. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  99. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  100. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  101. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  102. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  103. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +271 -0
  104. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
  105. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +238 -20
  106. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  107. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +283 -106
  108. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +204 -291
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +9 -4
  110. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  111. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  112. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -10
  113. data/src/core/ext/transport/chttp2/transport/flow_control.h +5 -5
  114. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  115. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -0
  117. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +365 -240
  118. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +87 -145
  119. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  120. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +74 -149
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  123. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  125. data/src/core/ext/transport/chttp2/transport/internal.h +12 -41
  126. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -9
  127. data/src/core/ext/transport/chttp2/transport/writing.cc +62 -128
  128. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  129. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -81
  130. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  131. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +114 -0
  132. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
  133. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
  134. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
  135. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +243 -209
  136. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +799 -574
  137. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  138. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
  139. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  140. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
  141. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  142. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
  143. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  144. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
  145. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  146. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
  147. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
  148. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
  149. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  150. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
  151. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  152. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +19 -0
  153. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  154. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +33 -18
  155. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  156. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +422 -316
  157. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +231 -199
  158. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +788 -570
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +43 -28
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +116 -78
  161. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +308 -271
  162. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +955 -661
  163. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  164. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +34 -22
  165. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +40 -27
  166. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +128 -78
  167. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
  168. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +72 -53
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +222 -158
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +20 -7
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +34 -22
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +213 -176
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +692 -498
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +62 -45
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +179 -129
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +26 -18
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +31 -17
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +75 -52
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +143 -117
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +450 -328
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +111 -91
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +366 -263
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +37 -25
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +184 -125
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +676 -344
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +26 -16
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +60 -41
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +40 -24
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +46 -34
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +35 -23
  201. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  202. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +114 -84
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +73 -55
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +211 -150
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +211 -141
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +29 -19
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +91 -71
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +282 -191
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +97 -78
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +287 -217
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +29 -16
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +63 -41
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +24 -10
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +54 -37
  217. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  218. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
  219. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +81 -61
  220. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +245 -184
  221. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  222. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +261 -191
  223. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +123 -103
  224. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +236 -190
  225. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +49 -34
  226. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +143 -111
  227. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +642 -572
  228. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2038 -1506
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +108 -63
  231. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
  232. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
  233. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  234. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
  235. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  236. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +56 -39
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  249. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  250. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
  251. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  252. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
  253. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  254. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +30 -22
  255. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  256. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +125 -91
  257. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  258. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +150 -104
  259. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
  260. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +54 -36
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +254 -223
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +804 -558
  265. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  266. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  267. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +99 -60
  268. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +369 -193
  269. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  270. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +96 -70
  271. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +101 -83
  272. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +267 -192
  273. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
  275. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  276. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
  277. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +91 -72
  278. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +298 -217
  279. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  280. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +74 -53
  281. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +73 -56
  282. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +198 -144
  283. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  284. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
  285. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  286. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +91 -68
  287. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  288. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
  289. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  290. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +65 -46
  291. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  292. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +35 -25
  293. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  294. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +26 -18
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +26 -18
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +86 -60
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +66 -51
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +57 -42
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +75 -57
  305. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  306. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +163 -123
  307. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  308. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +158 -112
  309. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  310. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
  311. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  312. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  313. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  314. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +136 -0
  315. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  316. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +52 -33
  317. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  318. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +81 -51
  319. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  320. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  321. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  322. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +32 -18
  323. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  324. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +114 -0
  325. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  326. data/src/core/ext/upb-generated/google/api/annotations.upb.h +8 -0
  327. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +150 -125
  328. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +372 -280
  329. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +152 -126
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +410 -297
  331. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  332. data/src/core/ext/upb-generated/google/api/http.upb.h +118 -88
  333. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  334. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -0
  335. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  336. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +33 -21
  337. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +366 -276
  338. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1089 -763
  339. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  340. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +29 -17
  341. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  342. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
  343. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  344. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +81 -63
  345. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  346. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +29 -17
  347. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  348. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +214 -148
  349. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  350. data/src/core/ext/upb-generated/google/rpc/status.upb.h +37 -25
  351. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  352. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +276 -0
  353. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  354. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +61 -41
  355. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +131 -107
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +397 -284
  357. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +26 -12
  358. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +59 -38
  359. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  360. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +51 -34
  361. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  362. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +272 -202
  363. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  364. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +77 -56
  365. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  366. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +108 -57
  367. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  368. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +34 -17
  369. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  370. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +8 -0
  371. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  372. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +34 -17
  373. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +33 -18
  375. data/src/core/ext/upb-generated/validate/validate.upb.c +395 -310
  376. data/src/core/ext/upb-generated/validate/validate.upb.h +1118 -725
  377. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
  379. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
  381. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  382. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  384. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +113 -65
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  386. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  388. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  389. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  390. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +64 -45
  391. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  392. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +32 -24
  393. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  394. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
  395. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  396. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +40 -26
  397. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  398. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +74 -53
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  400. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +44 -28
  401. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  402. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +44 -30
  403. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
  404. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
  405. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  406. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
  409. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  410. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +34 -22
  411. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  412. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  413. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  414. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  415. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
  416. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
  417. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  418. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  419. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  420. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  421. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  422. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  423. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  424. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  425. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  426. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  427. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  428. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  429. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  430. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  431. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  432. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  433. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  434. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  435. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +22 -52
  436. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  437. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +250 -281
  438. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  439. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +18 -24
  440. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  441. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +377 -426
  442. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  443. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  444. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  445. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +18 -20
  446. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  447. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  448. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  449. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  450. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  451. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  452. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  453. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +87 -133
  454. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  455. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +20 -31
  456. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
  457. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  458. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  459. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +17 -21
  460. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
  461. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  463. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  464. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  465. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +25 -41
  466. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
  467. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  468. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  469. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +252 -254
  470. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  471. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  472. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  473. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  474. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  475. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  476. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  477. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +20 -22
  478. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  479. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  480. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  481. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  482. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  483. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  484. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  485. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  486. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  487. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  488. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  489. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +54 -62
  490. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +19 -19
  491. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +25 -39
  492. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  493. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  494. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  495. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +17 -21
  496. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  497. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  498. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  499. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  500. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  501. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  502. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  503. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  504. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  505. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +21 -27
  506. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
  507. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +818 -912
  508. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +160 -160
  509. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  510. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  511. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  512. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  513. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  514. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  515. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  516. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  517. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  518. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  519. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  520. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  521. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  522. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  523. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  524. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  525. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  526. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  527. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  528. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  530. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  531. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  532. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  533. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  534. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  535. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  536. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  537. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  538. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  539. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  540. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  541. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  542. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  543. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +137 -173
  544. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +58 -58
  545. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  546. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  547. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +171 -157
  548. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  549. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  550. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  551. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +23 -34
  552. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
  553. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  554. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  555. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  556. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
  558. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
  559. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  560. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  561. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +22 -32
  562. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  563. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  564. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  565. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  566. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  567. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  568. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  569. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  570. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  571. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  572. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  573. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  574. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  575. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  576. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  577. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +17 -23
  578. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  579. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  580. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  581. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  582. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  583. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  584. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  585. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  586. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  587. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  588. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  589. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  590. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  591. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  592. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  593. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  594. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  595. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  596. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  597. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  598. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  599. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  600. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  601. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  602. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  603. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  604. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  606. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  607. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  608. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  609. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  610. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  611. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  612. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  613. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  614. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  615. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  616. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  617. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +5 -62
  618. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  619. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  620. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  621. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  622. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  623. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  624. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  625. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  626. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  627. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  628. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  629. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  630. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  631. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  632. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  633. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  634. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  635. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  636. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  637. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  638. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  639. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  640. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  641. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  642. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  643. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  644. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  645. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  646. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  647. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  648. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  649. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  650. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  651. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  652. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  653. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  654. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  655. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  656. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  657. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  658. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  659. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  660. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  661. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  662. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  663. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  664. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  665. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  666. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  667. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  668. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  669. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  670. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  671. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  672. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  673. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  674. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  675. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  676. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  677. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  678. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  679. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -4
  680. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  681. data/src/core/ext/xds/upb_utils.h +67 -0
  682. data/src/core/ext/xds/xds_api.cc +162 -3417
  683. data/src/core/ext/xds/xds_api.h +60 -613
  684. data/src/core/ext/xds/xds_bootstrap.cc +221 -122
  685. data/src/core/ext/xds/xds_bootstrap.h +31 -15
  686. data/src/core/ext/xds/xds_certificate_provider.h +2 -2
  687. data/src/core/ext/xds/xds_channel_stack_modifier.cc +16 -20
  688. data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -3
  689. data/src/core/ext/xds/xds_client.cc +794 -1065
  690. data/src/core/ext/xds/xds_client.h +109 -149
  691. data/src/core/ext/xds/xds_client_stats.cc +15 -15
  692. data/src/core/ext/xds/xds_client_stats.h +5 -4
  693. data/src/core/ext/xds/xds_cluster.cc +453 -0
  694. data/src/core/ext/xds/xds_cluster.h +108 -0
  695. data/src/core/ext/xds/xds_common_types.cc +388 -0
  696. data/src/core/ext/xds/xds_common_types.h +95 -0
  697. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  698. data/src/core/ext/xds/xds_endpoint.h +135 -0
  699. data/src/core/ext/xds/xds_http_fault_filter.cc +6 -6
  700. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  701. data/src/core/ext/xds/xds_http_filters.cc +11 -5
  702. data/src/core/ext/xds/xds_http_filters.h +4 -4
  703. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  704. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  705. data/src/core/ext/xds/xds_listener.cc +1039 -0
  706. data/src/core/ext/xds/xds_listener.h +220 -0
  707. data/src/core/ext/xds/xds_resource_type.cc +33 -0
  708. data/src/core/ext/xds/xds_resource_type.h +98 -0
  709. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  710. data/src/core/ext/xds/xds_route_config.cc +985 -0
  711. data/src/core/ext/xds/xds_route_config.h +215 -0
  712. data/src/core/ext/xds/xds_routing.cc +250 -0
  713. data/src/core/ext/xds/xds_routing.h +101 -0
  714. data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -286
  715. data/src/core/lib/address_utils/parse_address.cc +20 -0
  716. data/src/core/lib/address_utils/parse_address.h +5 -0
  717. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  718. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  719. data/src/core/lib/avl/avl.h +389 -88
  720. data/src/core/lib/backoff/backoff.cc +9 -38
  721. data/src/core/lib/backoff/backoff.h +11 -11
  722. data/src/core/lib/channel/call_finalization.h +86 -0
  723. data/src/core/lib/channel/channel_args.cc +77 -18
  724. data/src/core/lib/channel/channel_args.h +13 -10
  725. data/src/core/lib/channel/channel_args_preconditioning.cc +48 -0
  726. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  727. data/src/core/lib/channel/channel_stack.cc +10 -3
  728. data/src/core/lib/channel/channel_stack.h +42 -6
  729. data/src/core/lib/channel/channel_stack_builder.cc +66 -250
  730. data/src/core/lib/channel/channel_stack_builder.h +95 -147
  731. data/src/core/lib/channel/channel_trace.cc +3 -6
  732. data/src/core/lib/channel/channelz.cc +2 -1
  733. data/src/core/lib/channel/connected_channel.cc +9 -4
  734. data/src/core/lib/channel/connected_channel.h +1 -1
  735. data/src/core/lib/channel/context.h +11 -0
  736. data/src/core/lib/channel/handshaker.cc +1 -1
  737. data/src/core/lib/channel/handshaker.h +1 -1
  738. data/src/core/lib/channel/promise_based_filter.cc +669 -0
  739. data/src/core/lib/channel/promise_based_filter.h +423 -0
  740. data/src/core/lib/compression/compression.cc +20 -112
  741. data/src/core/lib/compression/compression_internal.cc +143 -203
  742. data/src/core/lib/compression/compression_internal.h +64 -69
  743. data/src/core/lib/compression/message_compress.cc +11 -11
  744. data/src/core/lib/compression/message_compress.h +2 -2
  745. data/src/core/lib/config/core_configuration.cc +11 -3
  746. data/src/core/lib/config/core_configuration.h +50 -0
  747. data/src/core/lib/debug/trace.h +2 -2
  748. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  749. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  750. data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
  751. data/src/core/lib/event_engine/event_engine.cc +21 -19
  752. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  753. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  754. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  755. data/src/core/lib/gpr/sync_posix.cc +1 -0
  756. data/src/core/lib/gpr/time.cc +2 -1
  757. data/src/core/lib/gpr/tls.h +6 -0
  758. data/src/core/lib/gpr/useful.h +18 -0
  759. data/src/core/lib/gprpp/bitset.h +7 -0
  760. data/src/core/lib/gprpp/capture.h +76 -0
  761. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  762. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  763. data/src/core/lib/gprpp/debug_location.h +2 -0
  764. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  765. data/src/core/lib/gprpp/global_config_env.h +2 -2
  766. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  767. data/src/core/lib/gprpp/orphanable.h +1 -1
  768. data/src/core/lib/gprpp/ref_counted.h +1 -1
  769. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  770. data/src/core/lib/gprpp/status_helper.cc +30 -38
  771. data/src/core/lib/gprpp/status_helper.h +6 -19
  772. data/src/core/lib/gprpp/table.h +24 -1
  773. data/src/core/lib/gprpp/time.cc +186 -0
  774. data/src/core/lib/gprpp/time.h +292 -0
  775. data/src/core/lib/http/format_request.cc +27 -23
  776. data/src/core/lib/http/format_request.h +7 -6
  777. data/src/core/lib/http/httpcli.cc +310 -238
  778. data/src/core/lib/http/httpcli.h +183 -88
  779. data/src/core/lib/http/httpcli_security_connector.cc +62 -73
  780. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  781. data/src/core/lib/http/parser.h +1 -1
  782. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  783. data/src/core/lib/iomgr/buffer_list.h +18 -18
  784. data/src/core/lib/iomgr/call_combiner.cc +17 -7
  785. data/src/core/lib/iomgr/closure.h +29 -9
  786. data/src/core/lib/iomgr/combiner.cc +25 -3
  787. data/src/core/lib/iomgr/endpoint.h +0 -1
  788. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
  789. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  790. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  791. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  792. data/src/core/lib/iomgr/error.cc +13 -10
  793. data/src/core/lib/iomgr/error.h +0 -2
  794. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  795. data/src/core/lib/iomgr/ev_epoll1_linux.cc +8 -7
  796. data/src/core/lib/iomgr/ev_epollex_linux.cc +12 -9
  797. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -7
  798. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  799. data/src/core/lib/iomgr/ev_posix.h +1 -1
  800. data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
  801. data/src/core/lib/iomgr/event_engine/iomgr.cc +8 -27
  802. data/src/core/lib/iomgr/event_engine/pollset.cc +2 -3
  803. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  804. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  805. data/src/core/lib/iomgr/event_engine/resolver.cc +68 -49
  806. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  807. data/src/core/lib/iomgr/event_engine/tcp.cc +11 -8
  808. data/src/core/lib/iomgr/event_engine/timer.cc +7 -7
  809. data/src/core/lib/iomgr/exec_ctx.cc +25 -97
  810. data/src/core/lib/iomgr/exec_ctx.h +18 -34
  811. data/src/core/lib/iomgr/executor.cc +22 -16
  812. data/src/core/lib/iomgr/executor.h +1 -1
  813. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  814. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  815. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  816. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  817. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  818. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  819. data/src/core/lib/iomgr/polling_entity.h +6 -0
  820. data/src/core/lib/iomgr/pollset.cc +1 -1
  821. data/src/core/lib/iomgr/pollset.h +4 -4
  822. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  823. data/src/core/lib/iomgr/port.h +6 -9
  824. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  825. data/src/core/lib/iomgr/resolve_address.h +47 -44
  826. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  827. data/src/core/lib/iomgr/resolve_address_posix.cc +83 -67
  828. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  829. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  830. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  831. data/src/core/lib/iomgr/resolved_address.h +39 -0
  832. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  833. data/src/core/lib/iomgr/socket_utils_common_posix.cc +0 -17
  834. data/src/core/lib/iomgr/tcp_client.cc +3 -5
  835. data/src/core/lib/iomgr/tcp_client.h +4 -5
  836. data/src/core/lib/iomgr/tcp_client_cfstream.cc +2 -10
  837. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -24
  838. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  839. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -11
  840. data/src/core/lib/iomgr/tcp_posix.cc +30 -34
  841. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  842. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  843. data/src/core/lib/iomgr/tcp_server.h +6 -8
  844. data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
  845. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  846. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  847. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  848. data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
  849. data/src/core/lib/iomgr/tcp_windows.cc +19 -17
  850. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  851. data/src/core/lib/iomgr/timer.cc +2 -2
  852. data/src/core/lib/iomgr/timer.h +11 -6
  853. data/src/core/lib/iomgr/timer_generic.cc +96 -77
  854. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  855. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  856. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  857. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  858. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  859. data/src/core/lib/iomgr/work_serializer.h +16 -4
  860. data/src/core/lib/json/json_reader.cc +83 -35
  861. data/src/core/lib/json/json_util.cc +5 -5
  862. data/src/core/lib/json/json_util.h +2 -2
  863. data/src/core/lib/matchers/matchers.cc +1 -1
  864. data/src/core/lib/promise/activity.cc +121 -0
  865. data/src/core/lib/promise/activity.h +540 -0
  866. data/src/core/lib/promise/arena_promise.h +188 -0
  867. data/src/core/lib/promise/context.h +86 -0
  868. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  869. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  870. data/src/core/lib/promise/detail/promise_like.h +85 -0
  871. data/src/core/lib/promise/detail/status.h +49 -0
  872. data/src/core/lib/promise/detail/switch.h +1455 -0
  873. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  874. data/src/core/lib/promise/loop.h +134 -0
  875. data/src/core/lib/promise/map.h +88 -0
  876. data/src/core/lib/promise/poll.h +66 -0
  877. data/src/core/lib/promise/promise.h +95 -0
  878. data/src/core/lib/promise/race.h +84 -0
  879. data/src/core/lib/promise/seq.h +89 -0
  880. data/src/core/lib/promise/sleep.cc +74 -0
  881. data/src/core/lib/promise/sleep.h +66 -0
  882. data/src/core/lib/promise/try_seq.h +157 -0
  883. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  884. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  885. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -31
  886. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  887. data/src/core/lib/resolver/resolver_registry.h +113 -0
  888. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  889. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  890. data/src/core/lib/resource_quota/api.cc +108 -0
  891. data/src/core/lib/resource_quota/api.h +40 -0
  892. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  893. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  894. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  895. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  896. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  897. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  898. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  899. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  900. data/src/core/lib/resource_quota/trace.cc +19 -0
  901. data/src/core/lib/resource_quota/trace.h +24 -0
  902. data/src/core/lib/security/authorization/evaluate_args.cc +37 -38
  903. data/src/core/lib/security/authorization/evaluate_args.h +3 -2
  904. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  905. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  906. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
  907. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
  908. data/src/core/lib/security/authorization/matchers.cc +227 -0
  909. data/src/core/lib/security/authorization/matchers.h +211 -0
  910. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  911. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  912. data/src/core/lib/security/context/security_context.cc +4 -2
  913. data/src/core/lib/security/context/security_context.h +1 -1
  914. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
  915. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  916. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  917. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  918. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  919. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -81
  920. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
  921. data/src/core/lib/security/credentials/credentials.cc +2 -3
  922. data/src/core/lib/security/credentials/credentials.h +68 -57
  923. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +48 -33
  924. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  925. data/src/core/lib/security/credentials/external/external_account_credentials.cc +52 -35
  926. data/src/core/lib/security/credentials/external/external_account_credentials.h +5 -9
  927. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
  928. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +33 -14
  929. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -0
  930. data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -18
  931. data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
  932. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +17 -16
  933. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
  934. data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -27
  935. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
  936. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
  937. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  938. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +28 -44
  939. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -12
  940. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +54 -43
  941. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  942. data/src/core/lib/security/credentials/local/local_credentials.h +6 -0
  943. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +148 -173
  944. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +52 -33
  945. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +95 -153
  946. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
  947. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  948. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -3
  949. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  950. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  951. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  952. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  953. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
  954. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +36 -83
  955. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  956. data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
  957. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  958. data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
  959. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +11 -17
  960. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  961. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -16
  962. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  963. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
  964. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -16
  965. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  966. data/src/core/lib/security/security_connector/local/local_security_connector.cc +12 -17
  967. data/src/core/lib/security/security_connector/security_connector.cc +3 -15
  968. data/src/core/lib/security/security_connector/security_connector.h +16 -21
  969. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +6 -11
  970. data/src/core/lib/security/security_connector/ssl_utils.cc +38 -32
  971. data/src/core/lib/security/security_connector/ssl_utils.h +14 -18
  972. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +361 -204
  973. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +70 -47
  974. data/src/core/lib/security/transport/auth_filters.h +37 -4
  975. data/src/core/lib/security/transport/client_auth_filter.cc +87 -358
  976. data/src/core/lib/security/transport/security_handshaker.cc +16 -8
  977. data/src/core/lib/security/transport/server_auth_filter.cc +41 -35
  978. data/src/core/lib/service_config/service_config.h +82 -0
  979. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  980. data/src/core/{ext/service_config/service_config.cc → lib/service_config/service_config_impl.cc} +20 -17
  981. data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +16 -18
  982. data/src/core/{ext → lib}/service_config/service_config_parser.cc +31 -27
  983. data/src/core/{ext → lib}/service_config/service_config_parser.h +39 -30
  984. data/src/core/lib/slice/percent_encoding.cc +30 -86
  985. data/src/core/lib/slice/percent_encoding.h +5 -11
  986. data/src/core/lib/slice/slice.cc +78 -181
  987. data/src/core/lib/slice/slice.h +384 -0
  988. data/src/core/lib/slice/slice_buffer.cc +4 -0
  989. data/src/core/lib/slice/slice_internal.h +12 -31
  990. data/src/core/lib/slice/slice_refcount.cc +18 -0
  991. data/src/core/lib/slice/slice_refcount.h +8 -83
  992. data/src/core/lib/slice/slice_refcount_base.h +21 -133
  993. data/src/core/lib/surface/builtins.cc +6 -6
  994. data/src/core/lib/surface/call.cc +204 -413
  995. data/src/core/lib/surface/call.h +5 -5
  996. data/src/core/lib/surface/channel.cc +67 -99
  997. data/src/core/lib/surface/channel.h +12 -23
  998. data/src/core/lib/surface/channel_init.cc +1 -1
  999. data/src/core/lib/surface/channel_init.h +4 -4
  1000. data/src/core/lib/surface/completion_queue.cc +12 -11
  1001. data/src/core/lib/surface/init.cc +78 -10
  1002. data/src/core/lib/surface/init.h +0 -2
  1003. data/src/core/lib/surface/lame_client.cc +26 -19
  1004. data/src/core/lib/surface/server.cc +44 -72
  1005. data/src/core/lib/surface/server.h +13 -14
  1006. data/src/core/lib/surface/validate_metadata.cc +2 -2
  1007. data/src/core/lib/surface/version.cc +2 -2
  1008. data/src/core/lib/transport/bdp_estimator.cc +10 -11
  1009. data/src/core/lib/transport/bdp_estimator.h +2 -2
  1010. data/src/core/lib/transport/byte_stream.cc +4 -0
  1011. data/src/core/lib/transport/error_utils.cc +5 -3
  1012. data/src/core/lib/transport/error_utils.h +2 -1
  1013. data/src/core/lib/transport/metadata_batch.h +1128 -793
  1014. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1015. data/src/core/lib/transport/parsed_metadata.h +228 -90
  1016. data/src/core/lib/transport/pid_controller.cc +4 -4
  1017. data/src/core/lib/transport/status_conversion.cc +2 -2
  1018. data/src/core/lib/transport/status_conversion.h +1 -1
  1019. data/src/core/lib/transport/timeout_encoding.cc +204 -67
  1020. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1021. data/src/core/lib/transport/transport.cc +7 -27
  1022. data/src/core/lib/transport/transport.h +88 -4
  1023. data/src/core/lib/transport/transport_impl.h +13 -0
  1024. data/src/core/lib/transport/transport_op_string.cc +5 -47
  1025. data/src/core/lib/uri/uri_parser.cc +237 -63
  1026. data/src/core/lib/uri/uri_parser.h +39 -23
  1027. data/src/core/plugin_registry/grpc_plugin_registry.cc +22 -88
  1028. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1029. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +28 -23
  1030. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1031. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +19 -11
  1032. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1033. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1034. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1035. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1036. data/src/core/tsi/local_transport_security.cc +16 -24
  1037. data/src/core/tsi/local_transport_security.h +1 -4
  1038. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1039. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1040. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1041. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  1042. data/src/core/tsi/ssl_transport_security.cc +135 -15
  1043. data/src/core/tsi/ssl_transport_security.h +39 -6
  1044. data/src/ruby/ext/grpc/extconf.rb +10 -3
  1045. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1046. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -34
  1047. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +39 -51
  1048. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1049. data/src/ruby/lib/grpc/version.rb +1 -1
  1050. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1051. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  1052. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  1053. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  1054. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1055. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1056. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  1057. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1058. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  1059. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1060. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  1061. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1062. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1063. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  1064. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  1065. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1066. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  1067. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  1068. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  1069. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1070. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  1071. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  1072. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1073. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1074. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1075. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  1076. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1077. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1078. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1079. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1080. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1081. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1082. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1083. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  1084. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1085. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1086. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1087. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1088. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  1089. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1090. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1091. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1092. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1093. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  1094. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1095. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1096. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1097. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1098. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1099. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1100. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1101. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1102. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1103. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1104. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1105. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1106. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1107. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1108. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1109. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1110. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1111. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1112. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1113. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1114. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1115. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1116. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1117. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1118. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1119. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1120. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1121. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1122. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1123. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1124. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1125. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1126. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1127. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1128. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1129. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1130. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1131. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1132. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1133. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1134. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1135. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1136. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1137. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1138. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1139. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1140. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1141. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1142. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1143. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1144. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1145. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  1146. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  1147. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  1148. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1149. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  1150. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1151. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1152. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  1153. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  1154. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1155. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  1156. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  1157. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1158. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1159. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1160. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1161. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1162. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1163. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1164. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1165. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  1166. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  1167. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1168. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1169. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1170. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1171. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1172. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1173. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1174. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1175. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1176. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1177. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1178. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1179. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  1180. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1181. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  1182. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1183. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1184. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1185. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  1186. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1187. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  1188. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  1189. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1190. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1191. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1192. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1193. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1194. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1195. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1196. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1197. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  1198. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  1199. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1200. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1201. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1202. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1203. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1204. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1205. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1206. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1207. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  1208. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1209. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1210. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1211. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1212. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1213. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1214. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1215. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1216. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1217. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1220. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1221. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1222. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1224. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1226. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1228. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1229. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1230. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1233. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1234. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1235. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1236. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1243. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1248. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1249. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1250. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1251. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1252. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1253. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1254. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1255. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1256. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1257. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1258. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1259. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1260. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1261. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1262. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1263. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1264. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1265. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1266. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1267. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1268. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1269. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1270. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1271. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1272. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1273. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1274. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1275. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1276. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1277. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1278. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1279. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1280. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1281. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1282. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1283. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1284. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1285. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1286. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1287. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1288. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1289. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1290. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1291. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1292. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1293. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1294. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1295. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1296. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1297. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1298. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1299. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1300. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1301. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1302. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1303. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1304. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1305. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1306. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1307. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1308. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1309. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1310. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1311. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1312. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1313. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1314. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1315. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1316. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1317. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1318. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1319. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1320. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1321. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1322. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1323. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1324. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1325. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1326. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1327. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1328. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1329. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1330. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1331. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1332. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1333. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1334. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1335. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1336. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1337. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1338. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1339. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1340. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1341. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1342. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1343. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1344. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1345. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1346. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1347. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1348. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1349. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1350. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1351. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1352. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1353. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1354. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1355. data/third_party/upb/upb/decode.c +716 -378
  1356. data/third_party/upb/upb/decode.h +43 -17
  1357. data/third_party/upb/upb/decode_fast.c +303 -301
  1358. data/third_party/upb/upb/decode_fast.h +18 -18
  1359. data/third_party/upb/upb/decode_internal.h +73 -55
  1360. data/third_party/upb/upb/def.c +2009 -979
  1361. data/third_party/upb/upb/def.h +321 -258
  1362. data/third_party/upb/upb/def.hpp +139 -169
  1363. data/third_party/upb/upb/encode.c +261 -174
  1364. data/third_party/upb/upb/encode.h +15 -17
  1365. data/third_party/upb/upb/msg.c +154 -121
  1366. data/third_party/upb/upb/msg.h +40 -33
  1367. data/third_party/upb/upb/msg_internal.h +381 -250
  1368. data/third_party/upb/upb/reflection.c +292 -212
  1369. data/third_party/upb/upb/reflection.h +91 -67
  1370. data/third_party/upb/upb/reflection.hpp +6 -6
  1371. data/third_party/upb/upb/table.c +222 -142
  1372. data/third_party/upb/upb/table_internal.h +128 -96
  1373. data/third_party/upb/upb/text_encode.c +114 -91
  1374. data/third_party/upb/upb/text_encode.h +10 -10
  1375. data/third_party/upb/upb/upb.c +118 -71
  1376. data/third_party/upb/upb/upb.h +120 -144
  1377. data/third_party/upb/upb/upb.hpp +31 -28
  1378. data/third_party/upb/upb/upb_internal.h +21 -11
  1379. data/third_party/xxhash/xxhash.h +607 -352
  1380. metadata +476 -213
  1381. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1382. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1383. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1384. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1385. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1386. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1387. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1388. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1389. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1390. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1391. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1392. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1393. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1394. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1395. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1396. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1397. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1398. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1399. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1400. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1401. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1402. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1403. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1404. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1405. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1406. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1407. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1408. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1409. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1410. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1411. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1412. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1413. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1414. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1415. data/src/core/lib/avl/avl.cc +0 -306
  1416. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1417. data/src/core/lib/compression/compression_args.cc +0 -138
  1418. data/src/core/lib/compression/compression_args.h +0 -56
  1419. data/src/core/lib/compression/stream_compression.cc +0 -81
  1420. data/src/core/lib/compression/stream_compression.h +0 -117
  1421. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1422. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1423. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1424. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1425. data/src/core/lib/gprpp/match.h +0 -73
  1426. data/src/core/lib/gprpp/overload.h +0 -59
  1427. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1428. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1429. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1430. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1431. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1432. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1433. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1434. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1435. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1436. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1437. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1438. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1439. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1440. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  1441. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  1442. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1443. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1444. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  1445. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  1446. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1447. data/src/core/lib/slice/slice_intern.cc +0 -367
  1448. data/src/core/lib/slice/slice_utils.h +0 -200
  1449. data/src/core/lib/slice/static_slice.cc +0 -529
  1450. data/src/core/lib/slice/static_slice.h +0 -331
  1451. data/src/core/lib/surface/init_secure.cc +0 -103
  1452. data/src/core/lib/transport/metadata.cc +0 -714
  1453. data/src/core/lib/transport/metadata.h +0 -449
  1454. data/src/core/lib/transport/metadata_batch.cc +0 -94
  1455. data/src/core/lib/transport/static_metadata.cc +0 -1117
  1456. data/src/core/lib/transport/static_metadata.h +0 -340
  1457. data/src/core/lib/transport/status_metadata.cc +0 -63
  1458. data/src/core/lib/transport/status_metadata.h +0 -48
  1459. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1460. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1461. data/third_party/cares/cares/ares_getopt.c +0 -122
  1462. data/third_party/cares/cares/ares_getopt.h +0 -53
  1463. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1464. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1465. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
@@ -18,46 +18,151 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "absl/strings/str_join.h"
21
22
  #include "absl/strings/str_replace.h"
22
23
 
24
+ #include "src/core/ext/filters/server_config_selector/server_config_selector.h"
25
+ #include "src/core/ext/filters/server_config_selector/server_config_selector_filter.h"
23
26
  #include "src/core/ext/xds/xds_certificate_provider.h"
27
+ #include "src/core/ext/xds/xds_channel_stack_modifier.h"
24
28
  #include "src/core/ext/xds/xds_client.h"
29
+ #include "src/core/ext/xds/xds_listener.h"
30
+ #include "src/core/ext/xds/xds_route_config.h"
31
+ #include "src/core/ext/xds/xds_routing.h"
32
+ #include "src/core/lib/address_utils/parse_address.h"
25
33
  #include "src/core/lib/address_utils/sockaddr_utils.h"
26
34
  #include "src/core/lib/channel/channel_args.h"
35
+ #include "src/core/lib/config/core_configuration.h"
27
36
  #include "src/core/lib/gprpp/host_port.h"
28
37
  #include "src/core/lib/iomgr/sockaddr.h"
29
38
  #include "src/core/lib/iomgr/socket_utils.h"
30
39
  #include "src/core/lib/security/credentials/xds/xds_credentials.h"
40
+ #include "src/core/lib/service_config/service_config_impl.h"
41
+ #include "src/core/lib/slice/slice_internal.h"
31
42
  #include "src/core/lib/surface/api_trace.h"
32
43
  #include "src/core/lib/surface/server.h"
44
+ #include "src/core/lib/transport/error_utils.h"
33
45
  #include "src/core/lib/uri/uri_parser.h"
34
46
 
35
47
  namespace grpc_core {
48
+ namespace {
36
49
 
37
50
  TraceFlag grpc_xds_server_config_fetcher_trace(false,
38
51
  "xds_server_config_fetcher");
39
52
 
40
- namespace {
53
+ // A server config fetcher that fetches the information for configuring server
54
+ // listeners from the xDS control plane.
55
+ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
56
+ public:
57
+ XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client,
58
+ grpc_server_xds_status_notifier notifier);
59
+
60
+ void StartWatch(std::string listening_address,
61
+ std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
62
+ watcher) override;
63
+
64
+ void CancelWatch(
65
+ grpc_server_config_fetcher::WatcherInterface* watcher) override;
66
+
67
+ // Return the interested parties from the xds client so that it can be polled.
68
+ grpc_pollset_set* interested_parties() override {
69
+ return xds_client_->interested_parties();
70
+ }
71
+
72
+ private:
73
+ class ListenerWatcher;
74
+
75
+ const RefCountedPtr<XdsClient> xds_client_;
76
+ const grpc_server_xds_status_notifier serving_status_notifier_;
77
+ Mutex mu_;
78
+ std::map<grpc_server_config_fetcher::WatcherInterface*, ListenerWatcher*>
79
+ listener_watchers_ ABSL_GUARDED_BY(mu_);
80
+ };
81
+
82
+ // A watcher implementation for listening on LDS updates from the xDS control
83
+ // plane. When a good LDS update is received, it creates a
84
+ // FilterChainMatchManager object that would replace the existing (if any)
85
+ // FilterChainMatchManager object after all referenced RDS resources are
86
+ // fetched. Note that a good update also causes the server listener to start
87
+ // listening if it isn't already. If an error LDS update is received (NACKed
88
+ // resource, timeouts), the previous good FilterChainMatchManager, if any,
89
+ // continues to be used. If there isn't any previous good update or if the
90
+ // update received was a fatal error (resource does not exist), the server
91
+ // listener is made to stop listening.
92
+ class XdsServerConfigFetcher::ListenerWatcher
93
+ : public XdsListenerResourceType::WatcherInterface {
94
+ public:
95
+ ListenerWatcher(RefCountedPtr<XdsClient> xds_client,
96
+ std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
97
+ server_config_watcher,
98
+ grpc_server_xds_status_notifier serving_status_notifier,
99
+ std::string listening_address);
100
+
101
+ void OnResourceChanged(XdsListenerResource listener) override;
102
+
103
+ void OnError(grpc_error_handle error) override;
104
+
105
+ void OnResourceDoesNotExist() override;
106
+
107
+ const std::string& listening_address() const { return listening_address_; }
108
+
109
+ private:
110
+ class FilterChainMatchManager;
111
+
112
+ void OnFatalError(absl::Status status) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
113
+
114
+ // Invoked by FilterChainMatchManager that is done fetching all referenced RDS
115
+ // resources. If the calling FilterChainMatchManager is the
116
+ // pending_filter_chain_match_manager_, it is promoted to be the
117
+ // filter_chain_match_manager_ in use.
118
+ void PendingFilterChainMatchManagerReady(
119
+ FilterChainMatchManager* filter_chain_match_manager) {
120
+ MutexLock lock(&mu_);
121
+ PendingFilterChainMatchManagerReadyLocked(filter_chain_match_manager);
122
+ }
123
+ void PendingFilterChainMatchManagerReadyLocked(
124
+ FilterChainMatchManager* filter_chain_match_manager)
125
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_);
126
+
127
+ const RefCountedPtr<XdsClient> xds_client_;
128
+ const std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
129
+ server_config_watcher_;
130
+ const grpc_server_xds_status_notifier serving_status_notifier_;
131
+ const std::string listening_address_;
132
+ Mutex mu_;
133
+ RefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_
134
+ ABSL_GUARDED_BY(mu_);
135
+ RefCountedPtr<FilterChainMatchManager> pending_filter_chain_match_manager_
136
+ ABSL_GUARDED_BY(mu_);
137
+ };
41
138
 
42
- class FilterChainMatchManager
139
+ // A connection manager used by the server listener code to inject channel args
140
+ // to be used for each incoming connection. This implementation chooses the
141
+ // appropriate filter chain from the xDS Listener resource and injects channel
142
+ // args that configure the right mTLS certs and cause the right set of HTTP
143
+ // filters to be injected.
144
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
43
145
  : public grpc_server_config_fetcher::ConnectionManager {
44
146
  public:
45
- FilterChainMatchManager(
46
- RefCountedPtr<XdsClient> xds_client,
47
- XdsApi::LdsUpdate::FilterChainMap filter_chain_map,
48
- absl::optional<XdsApi::LdsUpdate::FilterChainData> default_filter_chain)
49
- : xds_client_(xds_client),
50
- filter_chain_map_(std::move(filter_chain_map)),
51
- default_filter_chain_(std::move(default_filter_chain)) {}
147
+ FilterChainMatchManager(RefCountedPtr<XdsClient> xds_client,
148
+ XdsListenerResource::FilterChainMap filter_chain_map,
149
+ absl::optional<XdsListenerResource::FilterChainData>
150
+ default_filter_chain);
52
151
 
53
152
  absl::StatusOr<grpc_channel_args*> UpdateChannelArgsForConnection(
54
153
  grpc_channel_args* args, grpc_endpoint* tcp) override;
55
154
 
56
- const XdsApi::LdsUpdate::FilterChainMap& filter_chain_map() const {
155
+ void Orphan() override;
156
+
157
+ // Invoked by ListenerWatcher to start fetching referenced RDS resources.
158
+ void StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher)
159
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ListenerWatcher::mu_);
160
+
161
+ const XdsListenerResource::FilterChainMap& filter_chain_map() const {
57
162
  return filter_chain_map_;
58
163
  }
59
164
 
60
- const absl::optional<XdsApi::LdsUpdate::FilterChainData>&
165
+ const absl::optional<XdsListenerResource::FilterChainData>&
61
166
  default_filter_chain() const {
62
167
  return default_filter_chain_;
63
168
  }
@@ -72,41 +177,655 @@ class FilterChainMatchManager
72
177
  RefCountedPtr<XdsCertificateProvider> xds;
73
178
  };
74
179
 
180
+ class RouteConfigWatcher;
181
+ struct RdsUpdateState {
182
+ RouteConfigWatcher* watcher;
183
+ absl::optional<absl::StatusOr<XdsRouteConfigResource>> rds_update;
184
+ };
185
+
186
+ class XdsServerConfigSelector;
187
+ class StaticXdsServerConfigSelectorProvider;
188
+ class DynamicXdsServerConfigSelectorProvider;
189
+
75
190
  absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
76
191
  CreateOrGetXdsCertificateProviderFromFilterChainData(
77
- const XdsApi::LdsUpdate::FilterChainData* filter_chain);
192
+ const XdsListenerResource::FilterChainData* filter_chain);
78
193
 
79
- const RefCountedPtr<XdsClient> xds_client_;
80
- const XdsApi::LdsUpdate::FilterChainMap filter_chain_map_;
81
- const absl::optional<XdsApi::LdsUpdate::FilterChainData>
82
- default_filter_chain_;
194
+ // Helper functions invoked by RouteConfigWatcher when there are updates to
195
+ // RDS resources.
196
+ void OnRouteConfigChanged(const std::string& resource_name,
197
+ XdsRouteConfigResource route_config);
198
+ void OnError(const std::string& resource_name, grpc_error_handle error);
199
+ void OnResourceDoesNotExist(const std::string& resource_name);
200
+
201
+ RefCountedPtr<XdsClient> xds_client_;
202
+ // This ref is only kept around till the FilterChainMatchManager becomes
203
+ // ready.
204
+ RefCountedPtr<ListenerWatcher> listener_watcher_;
205
+ XdsListenerResource::FilterChainMap filter_chain_map_;
206
+ absl::optional<XdsListenerResource::FilterChainData> default_filter_chain_;
83
207
  Mutex mu_;
84
- std::map<const XdsApi::LdsUpdate::FilterChainData*, CertificateProviders>
208
+ size_t rds_resources_yet_to_fetch_ ABSL_GUARDED_BY(mu_) = 0;
209
+ std::map<std::string /* resource_name */, RdsUpdateState> rds_map_
210
+ ABSL_GUARDED_BY(mu_);
211
+ std::map<const XdsListenerResource::FilterChainData*, CertificateProviders>
85
212
  certificate_providers_map_ ABSL_GUARDED_BY(mu_);
86
213
  };
87
214
 
88
- bool IsLoopbackIp(const grpc_resolved_address* address) {
89
- const grpc_sockaddr* sock_addr =
90
- reinterpret_cast<const grpc_sockaddr*>(&address->addr);
91
- if (sock_addr->sa_family == GRPC_AF_INET) {
92
- const grpc_sockaddr_in* addr4 =
93
- reinterpret_cast<const grpc_sockaddr_in*>(sock_addr);
94
- if (addr4->sin_addr.s_addr == grpc_htonl(INADDR_LOOPBACK)) {
95
- return true;
215
+ // A watcher implementation for listening on RDS updates referenced to by a
216
+ // FilterChainMatchManager object. After all referenced RDS resources are
217
+ // fetched (errors are allowed), the FilterChainMatchManager tries to replace
218
+ // the current object. The watcher continues to update the referenced RDS
219
+ // resources so that new XdsServerConfigSelectorProvider objects are created
220
+ // with the latest updates and new connections do not need to wait for the RDS
221
+ // resources to be fetched.
222
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
223
+ RouteConfigWatcher : public XdsRouteConfigResourceType::WatcherInterface {
224
+ public:
225
+ RouteConfigWatcher(
226
+ std::string resource_name,
227
+ WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager)
228
+ : resource_name_(std::move(resource_name)),
229
+ filter_chain_match_manager_(std::move(filter_chain_match_manager)) {}
230
+
231
+ void OnResourceChanged(XdsRouteConfigResource route_config) override {
232
+ filter_chain_match_manager_->OnRouteConfigChanged(resource_name_,
233
+ std::move(route_config));
234
+ }
235
+
236
+ void OnError(grpc_error_handle error) override {
237
+ filter_chain_match_manager_->OnError(resource_name_, error);
238
+ }
239
+
240
+ void OnResourceDoesNotExist() override {
241
+ filter_chain_match_manager_->OnResourceDoesNotExist(resource_name_);
242
+ }
243
+
244
+ private:
245
+ std::string resource_name_;
246
+ WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_;
247
+ };
248
+
249
+ // An implementation of ServerConfigSelector used by
250
+ // StaticXdsServerConfigSelectorProvider and
251
+ // DynamicXdsServerConfigSelectorProvider to parse the RDS update and get
252
+ // per-call configuration based on incoming metadata.
253
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
254
+ XdsServerConfigSelector : public ServerConfigSelector {
255
+ public:
256
+ static absl::StatusOr<RefCountedPtr<XdsServerConfigSelector>> Create(
257
+ XdsRouteConfigResource rds_update,
258
+ const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
259
+ http_filters);
260
+ ~XdsServerConfigSelector() override = default;
261
+
262
+ CallConfig GetCallConfig(grpc_metadata_batch* metadata) override;
263
+
264
+ private:
265
+ struct VirtualHost {
266
+ struct Route {
267
+ // true if an action other than kNonForwardingAction is configured.
268
+ bool unsupported_action;
269
+ XdsRouteConfigResource::Route::Matchers matchers;
270
+ RefCountedPtr<ServiceConfig> method_config;
271
+ };
272
+
273
+ class RouteListIterator : public XdsRouting::RouteListIterator {
274
+ public:
275
+ explicit RouteListIterator(const std::vector<Route>* routes)
276
+ : routes_(routes) {}
277
+
278
+ size_t Size() const override { return routes_->size(); }
279
+
280
+ const XdsRouteConfigResource::Route::Matchers& GetMatchersForRoute(
281
+ size_t index) const override {
282
+ return (*routes_)[index].matchers;
283
+ }
284
+
285
+ private:
286
+ const std::vector<Route>* routes_;
287
+ };
288
+
289
+ std::vector<std::string> domains;
290
+ std::vector<Route> routes;
291
+ };
292
+
293
+ class VirtualHostListIterator : public XdsRouting::VirtualHostListIterator {
294
+ public:
295
+ explicit VirtualHostListIterator(
296
+ const std::vector<VirtualHost>* virtual_hosts)
297
+ : virtual_hosts_(virtual_hosts) {}
298
+
299
+ size_t Size() const override { return virtual_hosts_->size(); }
300
+
301
+ const std::vector<std::string>& GetDomainsForVirtualHost(
302
+ size_t index) const override {
303
+ return (*virtual_hosts_)[index].domains;
96
304
  }
97
- } else if (sock_addr->sa_family == GRPC_AF_INET6) {
98
- const grpc_sockaddr_in6* addr6 =
99
- reinterpret_cast<const grpc_sockaddr_in6*>(sock_addr);
100
- if (memcmp(&addr6->sin6_addr, &in6addr_loopback,
101
- sizeof(in6addr_loopback)) == 0) {
102
- return true;
305
+
306
+ private:
307
+ const std::vector<VirtualHost>* virtual_hosts_;
308
+ };
309
+
310
+ std::vector<VirtualHost> virtual_hosts_;
311
+ };
312
+
313
+ // An XdsServerConfigSelectorProvider implementation for when the
314
+ // RouteConfiguration is available inline.
315
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
316
+ StaticXdsServerConfigSelectorProvider
317
+ : public ServerConfigSelectorProvider {
318
+ public:
319
+ StaticXdsServerConfigSelectorProvider(
320
+ absl::StatusOr<XdsRouteConfigResource> static_resource,
321
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
322
+ http_filters)
323
+ : static_resource_(std::move(static_resource)),
324
+ http_filters_(std::move(http_filters)) {}
325
+
326
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
327
+ std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
328
+ watcher) override {
329
+ GPR_ASSERT(watcher_ == nullptr);
330
+ watcher_ = std::move(watcher);
331
+ if (!static_resource_.ok()) {
332
+ return static_resource_.status();
103
333
  }
334
+ return XdsServerConfigSelector::Create(static_resource_.value(),
335
+ http_filters_);
104
336
  }
105
- return false;
337
+
338
+ void Orphan() override {}
339
+
340
+ void CancelWatch() override { watcher_.reset(); }
341
+
342
+ private:
343
+ absl::StatusOr<XdsRouteConfigResource> static_resource_;
344
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
345
+ http_filters_;
346
+ std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
347
+ watcher_;
348
+ };
349
+
350
+ // An XdsServerConfigSelectorProvider implementation for when the
351
+ // RouteConfiguration is to be fetched separately via RDS.
352
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
353
+ DynamicXdsServerConfigSelectorProvider
354
+ : public ServerConfigSelectorProvider {
355
+ public:
356
+ DynamicXdsServerConfigSelectorProvider(
357
+ RefCountedPtr<XdsClient> xds_client, std::string resource_name,
358
+ absl::StatusOr<XdsRouteConfigResource> initial_resource,
359
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
360
+ http_filters);
361
+
362
+ void Orphan() override;
363
+
364
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
365
+ std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
366
+ watcher) override;
367
+ void CancelWatch() override;
368
+
369
+ private:
370
+ class RouteConfigWatcher;
371
+
372
+ void OnRouteConfigChanged(XdsRouteConfigResource rds_update);
373
+ void OnError(grpc_error_handle error);
374
+ void OnResourceDoesNotExist();
375
+
376
+ RefCountedPtr<XdsClient> xds_client_;
377
+ std::string resource_name_;
378
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
379
+ http_filters_;
380
+ RouteConfigWatcher* route_config_watcher_ = nullptr;
381
+ Mutex mu_;
382
+ std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
383
+ watcher_ ABSL_GUARDED_BY(mu_);
384
+ absl::StatusOr<XdsRouteConfigResource> resource_ ABSL_GUARDED_BY(mu_);
385
+ };
386
+
387
+ // A watcher implementation for updating the RDS resource used by
388
+ // DynamicXdsServerConfigSelectorProvider
389
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
390
+ DynamicXdsServerConfigSelectorProvider::RouteConfigWatcher
391
+ : public XdsRouteConfigResourceType::WatcherInterface {
392
+ public:
393
+ explicit RouteConfigWatcher(
394
+ WeakRefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent)
395
+ : parent_(std::move(parent)) {}
396
+
397
+ void OnResourceChanged(XdsRouteConfigResource route_config) override {
398
+ parent_->OnRouteConfigChanged(std::move(route_config));
399
+ }
400
+
401
+ void OnError(grpc_error_handle error) override { parent_->OnError(error); }
402
+
403
+ void OnResourceDoesNotExist() override { parent_->OnResourceDoesNotExist(); }
404
+
405
+ private:
406
+ WeakRefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent_;
407
+ };
408
+
409
+ //
410
+ // XdsServerConfigFetcher
411
+ //
412
+
413
+ XdsServerConfigFetcher::XdsServerConfigFetcher(
414
+ RefCountedPtr<XdsClient> xds_client,
415
+ grpc_server_xds_status_notifier notifier)
416
+ : xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
417
+ GPR_ASSERT(xds_client_ != nullptr);
418
+ }
419
+
420
+ std::string ListenerResourceName(absl::string_view resource_name_template,
421
+ absl::string_view listening_address) {
422
+ std::string tmp;
423
+ if (absl::StartsWith(resource_name_template, "xdstp:")) {
424
+ tmp = URI::PercentEncodePath(listening_address);
425
+ listening_address = tmp;
426
+ }
427
+ return absl::StrReplaceAll(resource_name_template,
428
+ {{"%s", listening_address}});
429
+ }
430
+
431
+ void XdsServerConfigFetcher::StartWatch(
432
+ std::string listening_address,
433
+ std::unique_ptr<grpc_server_config_fetcher::WatcherInterface> watcher) {
434
+ grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
435
+ auto listener_watcher = MakeRefCounted<ListenerWatcher>(
436
+ xds_client_, std::move(watcher), serving_status_notifier_,
437
+ listening_address);
438
+ auto* listener_watcher_ptr = listener_watcher.get();
439
+ XdsListenerResourceType::StartWatch(
440
+ xds_client_.get(),
441
+ ListenerResourceName(
442
+ xds_client_->bootstrap().server_listener_resource_name_template(),
443
+ listening_address),
444
+ std::move(listener_watcher));
445
+ MutexLock lock(&mu_);
446
+ listener_watchers_.emplace(watcher_ptr, listener_watcher_ptr);
447
+ }
448
+
449
+ void XdsServerConfigFetcher::CancelWatch(
450
+ grpc_server_config_fetcher::WatcherInterface* watcher) {
451
+ MutexLock lock(&mu_);
452
+ auto it = listener_watchers_.find(watcher);
453
+ if (it != listener_watchers_.end()) {
454
+ // Cancel the watch on the listener before erasing
455
+ XdsListenerResourceType::CancelWatch(
456
+ xds_client_.get(),
457
+ ListenerResourceName(
458
+ xds_client_->bootstrap().server_listener_resource_name_template(),
459
+ it->second->listening_address()),
460
+ it->second, false /* delay_unsubscription */);
461
+ listener_watchers_.erase(it);
462
+ }
463
+ }
464
+
465
+ //
466
+ // XdsServerConfigFetcher::ListenerWatcher
467
+ //
468
+
469
+ XdsServerConfigFetcher::ListenerWatcher::ListenerWatcher(
470
+ RefCountedPtr<XdsClient> xds_client,
471
+ std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
472
+ server_config_watcher,
473
+ grpc_server_xds_status_notifier serving_status_notifier,
474
+ std::string listening_address)
475
+ : xds_client_(std::move(xds_client)),
476
+ server_config_watcher_(std::move(server_config_watcher)),
477
+ serving_status_notifier_(serving_status_notifier),
478
+ listening_address_(std::move(listening_address)) {}
479
+
480
+ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
481
+ XdsListenerResource listener) {
482
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_server_config_fetcher_trace)) {
483
+ gpr_log(GPR_INFO,
484
+ "[ListenerWatcher %p] Received LDS update from xds client %p: %s",
485
+ this, xds_client_.get(), listener.ToString().c_str());
486
+ }
487
+ if (listener.address != listening_address_) {
488
+ MutexLock lock(&mu_);
489
+ OnFatalError(absl::FailedPreconditionError(
490
+ "Address in LDS update does not match listening address"));
491
+ return;
492
+ }
493
+ auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
494
+ xds_client_, std::move(listener.filter_chain_map),
495
+ std::move(listener.default_filter_chain));
496
+ MutexLock lock(&mu_);
497
+ if (filter_chain_match_manager_ == nullptr ||
498
+ !(new_filter_chain_match_manager->filter_chain_map() ==
499
+ filter_chain_match_manager_->filter_chain_map() &&
500
+ new_filter_chain_match_manager->default_filter_chain() ==
501
+ filter_chain_match_manager_->default_filter_chain())) {
502
+ pending_filter_chain_match_manager_ =
503
+ std::move(new_filter_chain_match_manager);
504
+ if (XdsRbacEnabled()) {
505
+ pending_filter_chain_match_manager_->StartRdsWatch(Ref());
506
+ } else {
507
+ PendingFilterChainMatchManagerReadyLocked(
508
+ pending_filter_chain_match_manager_.get());
509
+ }
510
+ }
511
+ }
512
+
513
+ void XdsServerConfigFetcher::ListenerWatcher::OnError(grpc_error_handle error) {
514
+ MutexLock lock(&mu_);
515
+ if (filter_chain_match_manager_ != nullptr ||
516
+ pending_filter_chain_match_manager_ != nullptr) {
517
+ gpr_log(GPR_ERROR,
518
+ "ListenerWatcher:%p XdsClient reports error: %s for %s; "
519
+ "ignoring in favor of existing resource",
520
+ this, grpc_error_std_string(error).c_str(),
521
+ listening_address_.c_str());
522
+ } else {
523
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
524
+ serving_status_notifier_.on_serving_status_update(
525
+ serving_status_notifier_.user_data, listening_address_.c_str(),
526
+ {GRPC_STATUS_UNAVAILABLE, grpc_error_std_string(error).c_str()});
527
+ } else {
528
+ gpr_log(GPR_ERROR,
529
+ "ListenerWatcher:%p error obtaining xDS Listener resource: %s; "
530
+ "not serving on %s",
531
+ this, grpc_error_std_string(error).c_str(),
532
+ listening_address_.c_str());
533
+ }
534
+ }
535
+ GRPC_ERROR_UNREF(error);
536
+ }
537
+
538
+ void XdsServerConfigFetcher::ListenerWatcher::OnFatalError(
539
+ absl::Status status) {
540
+ pending_filter_chain_match_manager_.reset();
541
+ if (filter_chain_match_manager_ != nullptr) {
542
+ // The server has started listening already, so we need to gracefully
543
+ // stop serving.
544
+ server_config_watcher_->StopServing();
545
+ filter_chain_match_manager_.reset();
546
+ }
547
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
548
+ serving_status_notifier_.on_serving_status_update(
549
+ serving_status_notifier_.user_data, listening_address_.c_str(),
550
+ {static_cast<grpc_status_code>(status.raw_code()),
551
+ std::string(status.message()).c_str()});
552
+ } else {
553
+ gpr_log(GPR_ERROR,
554
+ "ListenerWatcher:%p Encountered fatal error %s; not serving on %s",
555
+ this, status.ToString().c_str(), listening_address_.c_str());
556
+ }
557
+ }
558
+
559
+ void XdsServerConfigFetcher::ListenerWatcher::OnResourceDoesNotExist() {
560
+ MutexLock lock(&mu_);
561
+ OnFatalError(absl::NotFoundError("Requested listener does not exist"));
106
562
  }
107
563
 
108
- const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourcePort(
109
- const XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap& source_ports_map,
564
+ void XdsServerConfigFetcher::ListenerWatcher::
565
+ PendingFilterChainMatchManagerReadyLocked(
566
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager*
567
+ filter_chain_match_manager) {
568
+ if (pending_filter_chain_match_manager_ != filter_chain_match_manager) {
569
+ // This FilterChainMatchManager is no longer the current pending resource.
570
+ // It should get cleaned up eventually. Ignore this update.
571
+ return;
572
+ }
573
+ // Let the logger know about the update if there was no previous good update.
574
+ if (filter_chain_match_manager_ == nullptr) {
575
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
576
+ serving_status_notifier_.on_serving_status_update(
577
+ serving_status_notifier_.user_data, listening_address_.c_str(),
578
+ {GRPC_STATUS_OK, ""});
579
+ } else {
580
+ gpr_log(GPR_INFO,
581
+ "xDS Listener resource obtained; will start serving on %s",
582
+ listening_address_.c_str());
583
+ }
584
+ }
585
+ // Promote the pending FilterChainMatchManager
586
+ filter_chain_match_manager_ = std::move(pending_filter_chain_match_manager_);
587
+ // TODO(yashykt): Right now, the server_config_watcher_ does not invoke
588
+ // XdsServerConfigFetcher while holding a lock, but that might change in the
589
+ // future in which case we would want to execute this update outside the
590
+ // critical region through a WorkSerializer similar to XdsClient.
591
+ server_config_watcher_->UpdateConnectionManager(filter_chain_match_manager_);
592
+ }
593
+
594
+ //
595
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
596
+ //
597
+
598
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
599
+ FilterChainMatchManager(
600
+ RefCountedPtr<XdsClient> xds_client,
601
+ XdsListenerResource::FilterChainMap filter_chain_map,
602
+ absl::optional<XdsListenerResource::FilterChainData>
603
+ default_filter_chain)
604
+ : xds_client_(std::move(xds_client)),
605
+ filter_chain_map_(std::move(filter_chain_map)),
606
+ default_filter_chain_(std::move(default_filter_chain)) {}
607
+
608
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
609
+ StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher) {
610
+ // Get the set of RDS resources to watch on. Also get the set of
611
+ // FilterChainData so that we can reverse the list of HTTP filters since
612
+ // received data moves *up* the stack in Core.
613
+ std::set<std::string> resource_names;
614
+ std::set<XdsListenerResource::FilterChainData*> filter_chain_data_set;
615
+ for (const auto& destination_ip : filter_chain_map_.destination_ip_vector) {
616
+ for (const auto& source_type : destination_ip.source_types_array) {
617
+ for (const auto& source_ip : source_type) {
618
+ for (const auto& source_port_pair : source_ip.ports_map) {
619
+ if (!source_port_pair.second.data->http_connection_manager
620
+ .route_config_name.empty()) {
621
+ resource_names.insert(
622
+ source_port_pair.second.data->http_connection_manager
623
+ .route_config_name);
624
+ }
625
+ filter_chain_data_set.insert(source_port_pair.second.data.get());
626
+ }
627
+ }
628
+ }
629
+ }
630
+ if (default_filter_chain_.has_value()) {
631
+ if (!default_filter_chain_->http_connection_manager.route_config_name
632
+ .empty()) {
633
+ resource_names.insert(
634
+ default_filter_chain_->http_connection_manager.route_config_name);
635
+ }
636
+ std::reverse(
637
+ default_filter_chain_->http_connection_manager.http_filters.begin(),
638
+ default_filter_chain_->http_connection_manager.http_filters.end());
639
+ }
640
+ // Reverse the lists of HTTP filters in all the filter chains
641
+ for (auto* filter_chain_data : filter_chain_data_set) {
642
+ std::reverse(
643
+ filter_chain_data->http_connection_manager.http_filters.begin(),
644
+ filter_chain_data->http_connection_manager.http_filters.end());
645
+ }
646
+ // Start watching on referenced RDS resources
647
+ struct WatcherToStart {
648
+ std::string resource_name;
649
+ RefCountedPtr<RouteConfigWatcher> watcher;
650
+ };
651
+ std::vector<WatcherToStart> watchers_to_start;
652
+ watchers_to_start.reserve(resource_names.size());
653
+ {
654
+ MutexLock lock(&mu_);
655
+ for (const auto& resource_name : resource_names) {
656
+ ++rds_resources_yet_to_fetch_;
657
+ auto route_config_watcher =
658
+ MakeRefCounted<RouteConfigWatcher>(resource_name, WeakRef());
659
+ rds_map_.emplace(resource_name, RdsUpdateState{route_config_watcher.get(),
660
+ absl::nullopt});
661
+ watchers_to_start.push_back(
662
+ WatcherToStart{resource_name, std::move(route_config_watcher)});
663
+ }
664
+ if (rds_resources_yet_to_fetch_ != 0) {
665
+ listener_watcher_ = std::move(listener_watcher);
666
+ listener_watcher = nullptr;
667
+ }
668
+ }
669
+ for (auto& watcher_to_start : watchers_to_start) {
670
+ XdsRouteConfigResourceType::StartWatch(xds_client_.get(),
671
+ watcher_to_start.resource_name,
672
+ std::move(watcher_to_start.watcher));
673
+ }
674
+ // Promote this filter chain match manager if all referenced resources are
675
+ // fetched.
676
+ if (listener_watcher != nullptr) {
677
+ listener_watcher->PendingFilterChainMatchManagerReadyLocked(this);
678
+ }
679
+ }
680
+
681
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
682
+ Orphan() {
683
+ MutexLock lock(&mu_);
684
+ // Cancel the RDS watches to clear up the weak refs
685
+ for (const auto& entry : rds_map_) {
686
+ XdsRouteConfigResourceType::CancelWatch(xds_client_.get(), entry.first,
687
+ entry.second.watcher,
688
+ false /* delay_unsubscription */);
689
+ }
690
+ // Also give up the ref on ListenerWatcher since it won't be needed anymore
691
+ listener_watcher_.reset();
692
+ }
693
+
694
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
695
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
696
+ CreateOrGetXdsCertificateProviderFromFilterChainData(
697
+ const XdsListenerResource::FilterChainData* filter_chain) {
698
+ MutexLock lock(&mu_);
699
+ auto it = certificate_providers_map_.find(filter_chain);
700
+ if (it != certificate_providers_map_.end()) {
701
+ return it->second.xds;
702
+ }
703
+ CertificateProviders certificate_providers;
704
+ // Configure root cert.
705
+ absl::string_view root_provider_instance_name =
706
+ filter_chain->downstream_tls_context.common_tls_context
707
+ .certificate_validation_context.ca_certificate_provider_instance
708
+ .instance_name;
709
+ absl::string_view root_provider_cert_name =
710
+ filter_chain->downstream_tls_context.common_tls_context
711
+ .certificate_validation_context.ca_certificate_provider_instance
712
+ .certificate_name;
713
+ if (!root_provider_instance_name.empty()) {
714
+ certificate_providers.root =
715
+ xds_client_->certificate_provider_store()
716
+ .CreateOrGetCertificateProvider(root_provider_instance_name);
717
+ if (certificate_providers.root == nullptr) {
718
+ return absl::NotFoundError(
719
+ absl::StrCat("Certificate provider instance name: \"",
720
+ root_provider_instance_name, "\" not recognized."));
721
+ }
722
+ }
723
+ // Configure identity cert.
724
+ absl::string_view identity_provider_instance_name =
725
+ filter_chain->downstream_tls_context.common_tls_context
726
+ .tls_certificate_provider_instance.instance_name;
727
+ absl::string_view identity_provider_cert_name =
728
+ filter_chain->downstream_tls_context.common_tls_context
729
+ .tls_certificate_provider_instance.certificate_name;
730
+ if (!identity_provider_instance_name.empty()) {
731
+ certificate_providers.instance =
732
+ xds_client_->certificate_provider_store()
733
+ .CreateOrGetCertificateProvider(identity_provider_instance_name);
734
+ if (certificate_providers.instance == nullptr) {
735
+ return absl::NotFoundError(
736
+ absl::StrCat("Certificate provider instance name: \"",
737
+ identity_provider_instance_name, "\" not recognized."));
738
+ }
739
+ }
740
+ certificate_providers.xds = MakeRefCounted<XdsCertificateProvider>();
741
+ certificate_providers.xds->UpdateRootCertNameAndDistributor(
742
+ "", root_provider_cert_name,
743
+ certificate_providers.root == nullptr
744
+ ? nullptr
745
+ : certificate_providers.root->distributor());
746
+ certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
747
+ "", identity_provider_cert_name,
748
+ certificate_providers.instance == nullptr
749
+ ? nullptr
750
+ : certificate_providers.instance->distributor());
751
+ certificate_providers.xds->UpdateRequireClientCertificate(
752
+ "", filter_chain->downstream_tls_context.require_client_certificate);
753
+ auto xds_certificate_provider = certificate_providers.xds;
754
+ certificate_providers_map_.emplace(filter_chain,
755
+ std::move(certificate_providers));
756
+ return xds_certificate_provider;
757
+ }
758
+
759
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
760
+ OnRouteConfigChanged(const std::string& resource_name,
761
+ XdsRouteConfigResource route_config) {
762
+ RefCountedPtr<ListenerWatcher> listener_watcher;
763
+ {
764
+ MutexLock lock(&mu_);
765
+ auto& state = rds_map_[resource_name];
766
+ if (!state.rds_update.has_value()) {
767
+ if (--rds_resources_yet_to_fetch_ == 0) {
768
+ listener_watcher = std::move(listener_watcher_);
769
+ }
770
+ }
771
+ state.rds_update = std::move(route_config);
772
+ }
773
+ // Promote the filter chain match manager object if all the referenced
774
+ // resources are fetched.
775
+ if (listener_watcher != nullptr) {
776
+ listener_watcher->PendingFilterChainMatchManagerReady(this);
777
+ }
778
+ }
779
+
780
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::OnError(
781
+ const std::string& resource_name, grpc_error_handle error) {
782
+ RefCountedPtr<ListenerWatcher> listener_watcher;
783
+ {
784
+ MutexLock lock(&mu_);
785
+ auto& state = rds_map_[resource_name];
786
+ if (!state.rds_update.has_value()) {
787
+ if (--rds_resources_yet_to_fetch_ == 0) {
788
+ listener_watcher = std::move(listener_watcher_);
789
+ }
790
+ state.rds_update = grpc_error_to_absl_status(error);
791
+ } else {
792
+ // Prefer existing good version over current errored version
793
+ if (!state.rds_update->ok()) {
794
+ state.rds_update = grpc_error_to_absl_status(error);
795
+ }
796
+ }
797
+ }
798
+ // Promote the filter chain match manager object if all the referenced
799
+ // resources are fetched.
800
+ if (listener_watcher != nullptr) {
801
+ listener_watcher->PendingFilterChainMatchManagerReady(this);
802
+ }
803
+ GRPC_ERROR_UNREF(error);
804
+ }
805
+
806
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
807
+ OnResourceDoesNotExist(const std::string& resource_name) {
808
+ RefCountedPtr<ListenerWatcher> listener_watcher;
809
+ {
810
+ MutexLock lock(&mu_);
811
+ auto& state = rds_map_[resource_name];
812
+ if (!state.rds_update.has_value()) {
813
+ if (--rds_resources_yet_to_fetch_ == 0) {
814
+ listener_watcher = std::move(listener_watcher_);
815
+ }
816
+ }
817
+ state.rds_update =
818
+ absl::NotFoundError("Requested route config does not exist");
819
+ }
820
+ // Promote the filter chain match manager object if all the referenced
821
+ // resources are fetched.
822
+ if (listener_watcher != nullptr) {
823
+ listener_watcher->PendingFilterChainMatchManagerReady(this);
824
+ }
825
+ }
826
+
827
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourcePort(
828
+ const XdsListenerResource::FilterChainMap::SourcePortsMap& source_ports_map,
110
829
  absl::string_view port_str) {
111
830
  int port = 0;
112
831
  if (!absl::SimpleAtoi(port_str, &port)) return nullptr;
@@ -122,10 +841,10 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourcePort(
122
841
  return nullptr;
123
842
  }
124
843
 
125
- const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceIp(
126
- const XdsApi::LdsUpdate::FilterChainMap::SourceIpVector& source_ip_vector,
844
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourceIp(
845
+ const XdsListenerResource::FilterChainMap::SourceIpVector& source_ip_vector,
127
846
  const grpc_resolved_address* source_ip, absl::string_view port) {
128
- const XdsApi::LdsUpdate::FilterChainMap::SourceIp* best_match = nullptr;
847
+ const XdsListenerResource::FilterChainMap::SourceIp* best_match = nullptr;
129
848
  for (const auto& entry : source_ip_vector) {
130
849
  // Special case for catch-all
131
850
  if (!entry.prefix_range.has_value()) {
@@ -148,8 +867,28 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceIp(
148
867
  return FindFilterChainDataForSourcePort(best_match->ports_map, port);
149
868
  }
150
869
 
151
- const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceType(
152
- const XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceTypesArray&
870
+ bool IsLoopbackIp(const grpc_resolved_address* address) {
871
+ const grpc_sockaddr* sock_addr =
872
+ reinterpret_cast<const grpc_sockaddr*>(&address->addr);
873
+ if (sock_addr->sa_family == GRPC_AF_INET) {
874
+ const grpc_sockaddr_in* addr4 =
875
+ reinterpret_cast<const grpc_sockaddr_in*>(sock_addr);
876
+ if (addr4->sin_addr.s_addr == grpc_htonl(INADDR_LOOPBACK)) {
877
+ return true;
878
+ }
879
+ } else if (sock_addr->sa_family == GRPC_AF_INET6) {
880
+ const grpc_sockaddr_in6* addr6 =
881
+ reinterpret_cast<const grpc_sockaddr_in6*>(sock_addr);
882
+ if (memcmp(&addr6->sin6_addr, &in6addr_loopback,
883
+ sizeof(in6addr_loopback)) == 0) {
884
+ return true;
885
+ }
886
+ }
887
+ return false;
888
+ }
889
+
890
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourceType(
891
+ const XdsListenerResource::FilterChainMap::ConnectionSourceTypesArray&
153
892
  source_types_array,
154
893
  grpc_endpoint* tcp, absl::string_view destination_ip) {
155
894
  auto source_uri = URI::Parse(grpc_endpoint_get_peer(tcp));
@@ -173,34 +912,34 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceType(
173
912
  }
174
913
  // Use kAny only if kSameIporLoopback and kExternal are empty
175
914
  if (source_types_array[static_cast<int>(
176
- XdsApi::LdsUpdate::FilterChainMap::
915
+ XdsListenerResource::FilterChainMap::
177
916
  ConnectionSourceType::kSameIpOrLoopback)]
178
917
  .empty() &&
179
- source_types_array[static_cast<int>(XdsApi::LdsUpdate::FilterChainMap::
918
+ source_types_array[static_cast<int>(XdsListenerResource::FilterChainMap::
180
919
  ConnectionSourceType::kExternal)]
181
920
  .empty()) {
182
921
  return FindFilterChainDataForSourceIp(
183
922
  source_types_array[static_cast<int>(
184
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::kAny)],
923
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::kAny)],
185
924
  &source_addr, port);
186
925
  }
187
926
  if (IsLoopbackIp(&source_addr) || host == destination_ip) {
188
927
  return FindFilterChainDataForSourceIp(
189
928
  source_types_array[static_cast<int>(
190
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
929
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::
191
930
  kSameIpOrLoopback)],
192
931
  &source_addr, port);
193
932
  } else {
194
933
  return FindFilterChainDataForSourceIp(
195
934
  source_types_array[static_cast<int>(
196
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
935
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::
197
936
  kExternal)],
198
937
  &source_addr, port);
199
938
  }
200
939
  }
201
940
 
202
- const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForDestinationIp(
203
- const XdsApi::LdsUpdate::FilterChainMap::DestinationIpVector
941
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForDestinationIp(
942
+ const XdsListenerResource::FilterChainMap::DestinationIpVector
204
943
  destination_ip_vector,
205
944
  grpc_endpoint* tcp) {
206
945
  auto destination_uri = URI::Parse(grpc_endpoint_get_local_address(tcp));
@@ -222,7 +961,8 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForDestinationIp(
222
961
  GRPC_ERROR_UNREF(error);
223
962
  return nullptr;
224
963
  }
225
- const XdsApi::LdsUpdate::FilterChainMap::DestinationIp* best_match = nullptr;
964
+ const XdsListenerResource::FilterChainMap::DestinationIp* best_match =
965
+ nullptr;
226
966
  for (const auto& entry : destination_ip_vector) {
227
967
  // Special case for catch-all
228
968
  if (!entry.prefix_range.has_value()) {
@@ -247,73 +987,9 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForDestinationIp(
247
987
  host);
248
988
  }
249
989
 
250
- absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
251
- FilterChainMatchManager::CreateOrGetXdsCertificateProviderFromFilterChainData(
252
- const XdsApi::LdsUpdate::FilterChainData* filter_chain) {
253
- MutexLock lock(&mu_);
254
- auto it = certificate_providers_map_.find(filter_chain);
255
- if (it != certificate_providers_map_.end()) {
256
- return it->second.xds;
257
- }
258
- CertificateProviders certificate_providers;
259
- // Configure root cert.
260
- absl::string_view root_provider_instance_name =
261
- filter_chain->downstream_tls_context.common_tls_context
262
- .certificate_validation_context.ca_certificate_provider_instance
263
- .instance_name;
264
- absl::string_view root_provider_cert_name =
265
- filter_chain->downstream_tls_context.common_tls_context
266
- .certificate_validation_context.ca_certificate_provider_instance
267
- .certificate_name;
268
- if (!root_provider_instance_name.empty()) {
269
- certificate_providers.root =
270
- xds_client_->certificate_provider_store()
271
- .CreateOrGetCertificateProvider(root_provider_instance_name);
272
- if (certificate_providers.root == nullptr) {
273
- return absl::NotFoundError(
274
- absl::StrCat("Certificate provider instance name: \"",
275
- root_provider_instance_name, "\" not recognized."));
276
- }
277
- }
278
- // Configure identity cert.
279
- absl::string_view identity_provider_instance_name =
280
- filter_chain->downstream_tls_context.common_tls_context
281
- .tls_certificate_provider_instance.instance_name;
282
- absl::string_view identity_provider_cert_name =
283
- filter_chain->downstream_tls_context.common_tls_context
284
- .tls_certificate_provider_instance.certificate_name;
285
- if (!identity_provider_instance_name.empty()) {
286
- certificate_providers.instance =
287
- xds_client_->certificate_provider_store()
288
- .CreateOrGetCertificateProvider(identity_provider_instance_name);
289
- if (certificate_providers.instance == nullptr) {
290
- return absl::NotFoundError(
291
- absl::StrCat("Certificate provider instance name: \"",
292
- identity_provider_instance_name, "\" not recognized."));
293
- }
294
- }
295
- certificate_providers.xds = MakeRefCounted<XdsCertificateProvider>();
296
- certificate_providers.xds->UpdateRootCertNameAndDistributor(
297
- "", root_provider_cert_name,
298
- certificate_providers.root == nullptr
299
- ? nullptr
300
- : certificate_providers.root->distributor());
301
- certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
302
- "", identity_provider_cert_name,
303
- certificate_providers.instance == nullptr
304
- ? nullptr
305
- : certificate_providers.instance->distributor());
306
- certificate_providers.xds->UpdateRequireClientCertificate(
307
- "", filter_chain->downstream_tls_context.require_client_certificate);
308
- auto xds_certificate_provider = certificate_providers.xds;
309
- certificate_providers_map_.emplace(filter_chain,
310
- std::move(certificate_providers));
311
- return xds_certificate_provider;
312
- }
313
-
314
- absl::StatusOr<grpc_channel_args*>
315
- FilterChainMatchManager::UpdateChannelArgsForConnection(grpc_channel_args* args,
316
- grpc_endpoint* tcp) {
990
+ absl::StatusOr<grpc_channel_args*> XdsServerConfigFetcher::ListenerWatcher::
991
+ FilterChainMatchManager::UpdateChannelArgsForConnection(
992
+ grpc_channel_args* args, grpc_endpoint* tcp) {
317
993
  const auto* filter_chain = FindFilterChainDataForDestinationIp(
318
994
  filter_chain_map_.destination_ip_vector, tcp);
319
995
  if (filter_chain == nullptr && default_filter_chain_.has_value()) {
@@ -323,195 +999,289 @@ FilterChainMatchManager::UpdateChannelArgsForConnection(grpc_channel_args* args,
323
999
  grpc_channel_args_destroy(args);
324
1000
  return absl::UnavailableError("No matching filter chain found");
325
1001
  }
326
- // Nothing to update if credentials are not xDS.
1002
+ absl::InlinedVector<grpc_arg, 3> args_to_add;
1003
+ RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider;
1004
+ RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier;
1005
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider;
1006
+ // Add config selector filter
1007
+ if (XdsRbacEnabled()) {
1008
+ std::vector<const grpc_channel_filter*> filters;
1009
+ // Iterate the list of HTTP filters in reverse since in Core, received data
1010
+ // flows *up* the stack.
1011
+ for (const auto& http_filter :
1012
+ filter_chain->http_connection_manager.http_filters) {
1013
+ // Find filter. This is guaranteed to succeed, because it's checked
1014
+ // at config validation time in the XdsApi code.
1015
+ const XdsHttpFilterImpl* filter_impl =
1016
+ XdsHttpFilterRegistry::GetFilterForType(
1017
+ http_filter.config.config_proto_type_name);
1018
+ GPR_ASSERT(filter_impl != nullptr);
1019
+ // Some filters like the router filter are no-op filters and do not have
1020
+ // an implementation.
1021
+ if (filter_impl->channel_filter() != nullptr) {
1022
+ filters.push_back(filter_impl->channel_filter());
1023
+ }
1024
+ }
1025
+ filters.push_back(&kServerConfigSelectorFilter);
1026
+ channel_stack_modifier =
1027
+ MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
1028
+ if (filter_chain->http_connection_manager.rds_update.has_value()) {
1029
+ server_config_selector_provider =
1030
+ MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
1031
+ filter_chain->http_connection_manager.rds_update.value(),
1032
+ filter_chain->http_connection_manager.http_filters);
1033
+ } else {
1034
+ absl::StatusOr<XdsRouteConfigResource> initial_resource;
1035
+ {
1036
+ MutexLock lock(&mu_);
1037
+ initial_resource =
1038
+ rds_map_[filter_chain->http_connection_manager.route_config_name]
1039
+ .rds_update.value();
1040
+ }
1041
+ server_config_selector_provider =
1042
+ MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
1043
+ xds_client_,
1044
+ filter_chain->http_connection_manager.route_config_name,
1045
+ std::move(initial_resource),
1046
+ filter_chain->http_connection_manager.http_filters);
1047
+ }
1048
+ args_to_add.emplace_back(server_config_selector_provider->MakeChannelArg());
1049
+ args_to_add.emplace_back(channel_stack_modifier->MakeChannelArg());
1050
+ }
1051
+ // Add XdsCertificateProvider if credentials are xDS.
327
1052
  grpc_server_credentials* server_creds =
328
1053
  grpc_find_server_credentials_in_args(args);
329
- if (server_creds == nullptr || server_creds->type() != kCredentialsTypeXds) {
330
- return args;
1054
+ if (server_creds != nullptr && server_creds->type() == kCredentialsTypeXds) {
1055
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
1056
+ CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
1057
+ if (!result.ok()) {
1058
+ grpc_channel_args_destroy(args);
1059
+ return result.status();
1060
+ }
1061
+ xds_certificate_provider = std::move(*result);
1062
+ GPR_ASSERT(xds_certificate_provider != nullptr);
1063
+ args_to_add.emplace_back(xds_certificate_provider->MakeChannelArg());
331
1064
  }
332
- absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
333
- CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
334
- if (!result.ok()) {
1065
+ if (!args_to_add.empty()) {
1066
+ grpc_channel_args* updated_args = grpc_channel_args_copy_and_add(
1067
+ args, args_to_add.data(), args_to_add.size());
335
1068
  grpc_channel_args_destroy(args);
336
- return result.status();
337
- }
338
- RefCountedPtr<XdsCertificateProvider> xds_certificate_provider =
339
- std::move(*result);
340
- GPR_ASSERT(xds_certificate_provider != nullptr);
341
- grpc_arg arg_to_add = xds_certificate_provider->MakeChannelArg();
342
- grpc_channel_args* updated_args =
343
- grpc_channel_args_copy_and_add(args, &arg_to_add, 1);
344
- grpc_channel_args_destroy(args);
345
- return updated_args;
1069
+ args = updated_args;
1070
+ }
1071
+ return args;
346
1072
  }
347
1073
 
348
- class XdsServerConfigFetcher : public grpc_server_config_fetcher {
349
- public:
350
- explicit XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client,
351
- grpc_server_xds_status_notifier notifier)
352
- : xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
353
- GPR_ASSERT(xds_client_ != nullptr);
354
- }
1074
+ //
1075
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::XdsServerConfigSelector
1076
+ //
355
1077
 
356
- void StartWatch(std::string listening_address,
357
- std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
358
- watcher) override {
359
- grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
360
- auto listener_watcher = absl::make_unique<ListenerWatcher>(
361
- std::move(watcher), xds_client_, serving_status_notifier_,
362
- listening_address);
363
- auto* listener_watcher_ptr = listener_watcher.get();
364
- listening_address = absl::StrReplaceAll(
365
- xds_client_->bootstrap().server_listener_resource_name_template(),
366
- {{"%s", listening_address}});
367
- xds_client_->WatchListenerData(listening_address,
368
- std::move(listener_watcher));
369
- MutexLock lock(&mu_);
370
- auto& watcher_state = watchers_[watcher_ptr];
371
- watcher_state.listening_address = listening_address;
372
- watcher_state.listener_watcher = listener_watcher_ptr;
1078
+ absl::StatusOr<
1079
+ RefCountedPtr<XdsServerConfigFetcher::ListenerWatcher::
1080
+ FilterChainMatchManager::XdsServerConfigSelector>>
1081
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1082
+ XdsServerConfigSelector::Create(
1083
+ XdsRouteConfigResource rds_update,
1084
+ const std::vector<
1085
+ XdsListenerResource::HttpConnectionManager::HttpFilter>&
1086
+ http_filters) {
1087
+ auto config_selector = MakeRefCounted<XdsServerConfigSelector>();
1088
+ for (auto& vhost : rds_update.virtual_hosts) {
1089
+ config_selector->virtual_hosts_.emplace_back();
1090
+ auto& virtual_host = config_selector->virtual_hosts_.back();
1091
+ virtual_host.domains = std::move(vhost.domains);
1092
+ for (auto& route : vhost.routes) {
1093
+ virtual_host.routes.emplace_back();
1094
+ auto& config_selector_route = virtual_host.routes.back();
1095
+ config_selector_route.matchers = std::move(route.matchers);
1096
+ config_selector_route.unsupported_action =
1097
+ absl::get_if<XdsRouteConfigResource::Route::NonForwardingAction>(
1098
+ &route.action) == nullptr;
1099
+ XdsRouting::GeneratePerHttpFilterConfigsResult result =
1100
+ XdsRouting::GeneratePerHTTPFilterConfigs(http_filters, vhost, route,
1101
+ nullptr, nullptr);
1102
+ if (result.error != GRPC_ERROR_NONE) {
1103
+ return grpc_error_to_absl_status(result.error);
1104
+ }
1105
+ std::vector<std::string> fields;
1106
+ fields.reserve(result.per_filter_configs.size());
1107
+ for (const auto& p : result.per_filter_configs) {
1108
+ fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
1109
+ absl::StrJoin(p.second, ",\n"),
1110
+ "\n ]"));
1111
+ }
1112
+ if (!fields.empty()) {
1113
+ std::string json = absl::StrCat(
1114
+ "{\n"
1115
+ " \"methodConfig\": [ {\n"
1116
+ " \"name\": [\n"
1117
+ " {}\n"
1118
+ " ],\n"
1119
+ " ",
1120
+ absl::StrJoin(fields, ",\n"),
1121
+ "\n } ]\n"
1122
+ "}");
1123
+ grpc_error_handle error = GRPC_ERROR_NONE;
1124
+ config_selector_route.method_config =
1125
+ ServiceConfigImpl::Create(result.args, json.c_str(), &error);
1126
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
1127
+ }
1128
+ grpc_channel_args_destroy(result.args);
1129
+ }
373
1130
  }
1131
+ return config_selector;
1132
+ }
374
1133
 
375
- void CancelWatch(
376
- grpc_server_config_fetcher::WatcherInterface* watcher) override {
377
- MutexLock lock(&mu_);
378
- auto it = watchers_.find(watcher);
379
- if (it != watchers_.end()) {
380
- // Cancel the watch on the listener before erasing
381
- xds_client_->CancelListenerDataWatch(it->second.listening_address,
382
- it->second.listener_watcher,
383
- false /* delay_unsubscription */);
384
- watchers_.erase(it);
1134
+ ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
1135
+ FilterChainMatchManager::XdsServerConfigSelector::GetCallConfig(
1136
+ grpc_metadata_batch* metadata) {
1137
+ CallConfig call_config;
1138
+ if (metadata->get_pointer(HttpPathMetadata()) == nullptr) {
1139
+ call_config.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("No path found");
1140
+ return call_config;
1141
+ }
1142
+ absl::string_view path =
1143
+ metadata->get_pointer(HttpPathMetadata())->as_string_view();
1144
+ if (metadata->get_pointer(HttpAuthorityMetadata()) == nullptr) {
1145
+ call_config.error =
1146
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("No authority found");
1147
+ return call_config;
1148
+ }
1149
+ absl::string_view authority =
1150
+ metadata->get_pointer(HttpAuthorityMetadata())->as_string_view();
1151
+ auto vhost_index = XdsRouting::FindVirtualHostForDomain(
1152
+ VirtualHostListIterator(&virtual_hosts_), authority);
1153
+ if (!vhost_index.has_value()) {
1154
+ call_config.error =
1155
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1156
+ "could not find VirtualHost for ", authority,
1157
+ " in RouteConfiguration")),
1158
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1159
+ return call_config;
1160
+ }
1161
+ auto& virtual_host = virtual_hosts_[vhost_index.value()];
1162
+ auto route_index = XdsRouting::GetRouteForRequest(
1163
+ VirtualHost::RouteListIterator(&virtual_host.routes), path, metadata);
1164
+ if (route_index.has_value()) {
1165
+ auto& route = virtual_host.routes[route_index.value()];
1166
+ // Found the matching route
1167
+ if (route.unsupported_action) {
1168
+ call_config.error = grpc_error_set_int(
1169
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1170
+ "Matching route has unsupported action"),
1171
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1172
+ return call_config;
1173
+ }
1174
+ if (route.method_config != nullptr) {
1175
+ call_config.method_configs =
1176
+ route.method_config->GetMethodParsedConfigVector(grpc_empty_slice());
1177
+ call_config.service_config = route.method_config;
385
1178
  }
1179
+ return call_config;
386
1180
  }
1181
+ call_config.error = grpc_error_set_int(
1182
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("No route matched"),
1183
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
1184
+ return call_config;
1185
+ }
387
1186
 
388
- // Return the interested parties from the xds client so that it can be polled.
389
- grpc_pollset_set* interested_parties() override {
390
- return xds_client_->interested_parties();
391
- }
1187
+ //
1188
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::DynamicXdsServerConfigSelectorProvider
1189
+ //
392
1190
 
393
- private:
394
- class ListenerWatcher : public XdsClient::ListenerWatcherInterface {
395
- public:
396
- explicit ListenerWatcher(
397
- std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
398
- server_config_watcher,
399
- RefCountedPtr<XdsClient> xds_client,
400
- grpc_server_xds_status_notifier serving_status_notifier,
401
- std::string listening_address)
402
- : server_config_watcher_(std::move(server_config_watcher)),
403
- xds_client_(std::move(xds_client)),
404
- serving_status_notifier_(serving_status_notifier),
405
- listening_address_(std::move(listening_address)) {}
406
-
407
- // Deleted due to special handling required for args_. Copy the channel args
408
- // if we ever need these.
409
- ListenerWatcher(const ListenerWatcher&) = delete;
410
- ListenerWatcher& operator=(const ListenerWatcher&) = delete;
411
-
412
- void OnListenerChanged(XdsApi::LdsUpdate listener) override {
413
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_server_config_fetcher_trace)) {
414
- gpr_log(
415
- GPR_INFO,
416
- "[ListenerWatcher %p] Received LDS update from xds client %p: %s",
417
- this, xds_client_.get(), listener.ToString().c_str());
418
- }
419
- if (listener.address != listening_address_) {
420
- OnFatalError(absl::FailedPreconditionError(
421
- "Address in LDS update does not match listening address"));
422
- return;
423
- }
424
- if (filter_chain_match_manager_ == nullptr) {
425
- if (serving_status_notifier_.on_serving_status_update != nullptr) {
426
- serving_status_notifier_.on_serving_status_update(
427
- serving_status_notifier_.user_data, listening_address_.c_str(),
428
- {GRPC_STATUS_OK, ""});
429
- } else {
430
- gpr_log(GPR_INFO,
431
- "xDS Listener resource obtained; will start serving on %s",
432
- listening_address_.c_str());
433
- }
434
- }
435
- if (filter_chain_match_manager_ == nullptr ||
436
- !(listener.filter_chain_map ==
437
- filter_chain_match_manager_->filter_chain_map() &&
438
- listener.default_filter_chain ==
439
- filter_chain_match_manager_->default_filter_chain())) {
440
- filter_chain_match_manager_ = MakeRefCounted<FilterChainMatchManager>(
441
- xds_client_, std::move(listener.filter_chain_map),
442
- std::move(listener.default_filter_chain));
443
- server_config_watcher_->UpdateConnectionManager(
444
- filter_chain_match_manager_);
445
- }
446
- }
1191
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1192
+ DynamicXdsServerConfigSelectorProvider::
1193
+ DynamicXdsServerConfigSelectorProvider(
1194
+ RefCountedPtr<XdsClient> xds_client, std::string resource_name,
1195
+ absl::StatusOr<XdsRouteConfigResource> initial_resource,
1196
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
1197
+ http_filters)
1198
+ : xds_client_(std::move(xds_client)),
1199
+ resource_name_(std::move(resource_name)),
1200
+ http_filters_(std::move(http_filters)),
1201
+ resource_(std::move(initial_resource)) {
1202
+ GPR_ASSERT(!resource_name_.empty());
1203
+ // RouteConfigWatcher is being created here instead of in Watch() to avoid
1204
+ // deadlocks from invoking XdsRouteConfigResourceType::StartWatch whilst in a
1205
+ // critical region.
1206
+ auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(WeakRef());
1207
+ route_config_watcher_ = route_config_watcher.get();
1208
+ XdsRouteConfigResourceType::StartWatch(xds_client_.get(), resource_name_,
1209
+ std::move(route_config_watcher));
1210
+ }
447
1211
 
448
- void OnError(grpc_error_handle error) override {
449
- if (filter_chain_match_manager_ != nullptr) {
450
- gpr_log(GPR_ERROR,
451
- "ListenerWatcher:%p XdsClient reports error: %s for %s; "
452
- "ignoring in favor of existing resource",
453
- this, grpc_error_std_string(error).c_str(),
454
- listening_address_.c_str());
455
- } else {
456
- if (serving_status_notifier_.on_serving_status_update != nullptr) {
457
- serving_status_notifier_.on_serving_status_update(
458
- serving_status_notifier_.user_data, listening_address_.c_str(),
459
- {GRPC_STATUS_UNAVAILABLE, grpc_error_std_string(error).c_str()});
460
- } else {
461
- gpr_log(
462
- GPR_ERROR,
463
- "ListenerWatcher:%p error obtaining xDS Listener resource: %s; "
464
- "not serving on %s",
465
- this, grpc_error_std_string(error).c_str(),
466
- listening_address_.c_str());
467
- }
468
- }
469
- GRPC_ERROR_UNREF(error);
470
- }
1212
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1213
+ DynamicXdsServerConfigSelectorProvider::Orphan() {
1214
+ XdsRouteConfigResourceType::CancelWatch(xds_client_.get(), resource_name_,
1215
+ route_config_watcher_,
1216
+ false /* delay_unsubscription */);
1217
+ }
471
1218
 
472
- void OnFatalError(absl::Status status) {
473
- gpr_log(
474
- GPR_ERROR,
475
- "ListenerWatcher:%p Encountered fatal error %s; not serving on %s",
476
- this, status.ToString().c_str(), listening_address_.c_str());
477
- if (filter_chain_match_manager_ != nullptr) {
478
- // The server has started listening already, so we need to gracefully
479
- // stop serving.
480
- server_config_watcher_->StopServing();
481
- filter_chain_match_manager_.reset();
482
- }
483
- if (serving_status_notifier_.on_serving_status_update != nullptr) {
484
- serving_status_notifier_.on_serving_status_update(
485
- serving_status_notifier_.user_data, listening_address_.c_str(),
486
- {static_cast<grpc_status_code>(status.raw_code()),
487
- std::string(status.message()).c_str()});
488
- }
489
- }
1219
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>>
1220
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1221
+ DynamicXdsServerConfigSelectorProvider::Watch(
1222
+ std::unique_ptr<
1223
+ ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
1224
+ watcher) {
1225
+ absl::StatusOr<XdsRouteConfigResource> resource;
1226
+ {
1227
+ MutexLock lock(&mu_);
1228
+ GPR_ASSERT(watcher_ == nullptr);
1229
+ watcher_ = std::move(watcher);
1230
+ resource = resource_;
1231
+ }
1232
+ if (!resource.ok()) {
1233
+ return resource.status();
1234
+ }
1235
+ return XdsServerConfigSelector::Create(resource.value(), http_filters_);
1236
+ }
490
1237
 
491
- void OnResourceDoesNotExist() override {
492
- OnFatalError(absl::NotFoundError("Requested listener does not exist"));
493
- }
1238
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1239
+ DynamicXdsServerConfigSelectorProvider::CancelWatch() {
1240
+ MutexLock lock(&mu_);
1241
+ watcher_.reset();
1242
+ }
494
1243
 
495
- private:
496
- std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
497
- server_config_watcher_;
498
- RefCountedPtr<XdsClient> xds_client_;
499
- grpc_server_xds_status_notifier serving_status_notifier_;
500
- std::string listening_address_;
501
- RefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_;
502
- };
1244
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1245
+ DynamicXdsServerConfigSelectorProvider::OnRouteConfigChanged(
1246
+ XdsRouteConfigResource rds_update) {
1247
+ MutexLock lock(&mu_);
1248
+ resource_ = std::move(rds_update);
1249
+ if (watcher_ == nullptr) {
1250
+ return;
1251
+ }
1252
+ // Currently server_config_selector_filter does not call into
1253
+ // DynamicXdsServerConfigSelectorProvider while holding a lock, but if that
1254
+ // ever changes, we would want to invoke the update outside the critical
1255
+ // region with the use of a WorkSerializer.
1256
+ watcher_->OnServerConfigSelectorUpdate(
1257
+ XdsServerConfigSelector::Create(*resource_, http_filters_));
1258
+ }
503
1259
 
504
- struct WatcherState {
505
- std::string listening_address;
506
- ListenerWatcher* listener_watcher = nullptr;
507
- };
1260
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1261
+ DynamicXdsServerConfigSelectorProvider::OnError(grpc_error_handle error) {
1262
+ MutexLock lock(&mu_);
1263
+ // Prefer existing good update.
1264
+ if (resource_.ok()) {
1265
+ GRPC_ERROR_UNREF(error);
1266
+ return;
1267
+ }
1268
+ resource_ = grpc_error_to_absl_status(error);
1269
+ GRPC_ERROR_UNREF(error);
1270
+ if (watcher_ == nullptr) {
1271
+ return;
1272
+ }
1273
+ watcher_->OnServerConfigSelectorUpdate(resource_.status());
1274
+ }
508
1275
 
509
- RefCountedPtr<XdsClient> xds_client_;
510
- grpc_server_xds_status_notifier serving_status_notifier_;
511
- Mutex mu_;
512
- std::map<grpc_server_config_fetcher::WatcherInterface*, WatcherState>
513
- watchers_ ABSL_GUARDED_BY(mu_);
514
- };
1276
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1277
+ DynamicXdsServerConfigSelectorProvider::OnResourceDoesNotExist() {
1278
+ MutexLock lock(&mu_);
1279
+ resource_ = absl::NotFoundError("Requested route config does not exist");
1280
+ if (watcher_ == nullptr) {
1281
+ return;
1282
+ }
1283
+ watcher_->OnServerConfigSelectorUpdate(resource_.status());
1284
+ }
515
1285
 
516
1286
  } // namespace
517
1287
  } // namespace grpc_core
@@ -520,8 +1290,13 @@ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
520
1290
  grpc_server_xds_status_notifier notifier, const grpc_channel_args* args) {
521
1291
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
522
1292
  grpc_core::ExecCtx exec_ctx;
523
- args = grpc_channel_args_remove_grpc_internal(args);
524
- GRPC_API_TRACE("grpc_server_config_fetcher_xds_create()", 0, ());
1293
+ args = grpc_core::CoreConfiguration::Get()
1294
+ .channel_args_preconditioning()
1295
+ .PreconditionChannelArgs(args);
1296
+ GRPC_API_TRACE(
1297
+ "grpc_server_config_fetcher_xds_create(notifier={on_serving_status_"
1298
+ "update=%p, user_data=%p}, args=%p)",
1299
+ 3, (notifier.on_serving_status_update, notifier.user_data, args));
525
1300
  grpc_error_handle error = GRPC_ERROR_NONE;
526
1301
  grpc_core::RefCountedPtr<grpc_core::XdsClient> xds_client =
527
1302
  grpc_core::XdsClient::GetOrCreate(args, &error);