grpc 1.81.1 → 1.83.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (955) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +15 -9
  3. data/etc/roots.pem +10400 -3855
  4. data/include/grpc/grpc.h +6 -7
  5. data/include/grpc/grpc_audit_logging.h +2 -2
  6. data/include/grpc/grpc_security_constants.h +2 -0
  7. data/include/grpc/impl/channel_arg_names.h +26 -1
  8. data/src/core/call/call_filters.h +21 -5
  9. data/src/core/call/call_spine.h +4 -4
  10. data/src/core/call/client_call.cc +2 -2
  11. data/src/core/call/interception_chain.h +6 -9
  12. data/src/core/call/metadata.cc +7 -2
  13. data/src/core/call/metadata.h +1 -1
  14. data/src/core/call/metadata_batch.cc +1 -1
  15. data/src/core/call/metadata_batch.h +17 -1
  16. data/src/core/call/parsed_metadata.h +7 -2
  17. data/src/core/call/server_call.cc +16 -4
  18. data/src/core/call/server_call.h +14 -5
  19. data/src/core/call/status_util.cc +0 -4
  20. data/src/core/call/status_util.h +0 -3
  21. data/src/core/channelz/channel_trace.cc +3 -1
  22. data/src/core/client_channel/backup_poller.cc +2 -17
  23. data/src/core/client_channel/client_channel.cc +23 -28
  24. data/src/core/client_channel/client_channel.h +5 -3
  25. data/src/core/client_channel/client_channel_filter.cc +19 -30
  26. data/src/core/client_channel/client_channel_filter.h +2 -2
  27. data/src/core/client_channel/client_channel_plugin.cc +1 -1
  28. data/src/core/client_channel/client_channel_service_config.cc +5 -13
  29. data/src/core/client_channel/config_selector.h +2 -7
  30. data/src/core/client_channel/direct_channel.cc +5 -1
  31. data/src/core/client_channel/direct_channel.h +3 -1
  32. data/src/core/client_channel/dynamic_filters.cc +4 -7
  33. data/src/core/client_channel/dynamic_filters.h +1 -3
  34. data/src/core/client_channel/retry_filter.cc +2 -25
  35. data/src/core/client_channel/retry_filter.h +3 -7
  36. data/src/core/client_channel/retry_filter_legacy_call_data.cc +1 -1
  37. data/src/core/client_channel/retry_filter_legacy_call_data.h +2 -2
  38. data/src/core/client_channel/retry_interceptor.cc +7 -35
  39. data/src/core/client_channel/retry_interceptor.h +11 -14
  40. data/src/core/client_channel/retry_service_config.cc +0 -2
  41. data/src/core/client_channel/retry_service_config.h +0 -2
  42. data/src/core/client_channel/retry_throttle.cc +19 -7
  43. data/src/core/client_channel/retry_throttle.h +24 -7
  44. data/src/core/client_channel/subchannel.cc +1 -1
  45. data/src/core/{filter/blackboard.cc → config/experiment_env_var.cc} +11 -14
  46. data/src/core/config/experiment_env_var.h +26 -0
  47. data/src/core/credentials/call/external/external_account_credentials.cc +125 -12
  48. data/src/core/credentials/call/external/external_account_credentials.h +6 -1
  49. data/src/core/credentials/call/jwt/jwt_credentials.cc +11 -1
  50. data/src/core/credentials/call/jwt/jwt_credentials.h +3 -0
  51. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +64 -11
  52. data/src/core/credentials/call/oauth2/oauth2_credentials.h +0 -1
  53. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +411 -0
  54. data/src/core/credentials/call/regional_access_boundary_fetcher.h +158 -0
  55. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +1 -1
  56. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +7 -1
  57. data/src/core/credentials/transport/insecure/insecure_security_connector.h +1 -1
  58. data/src/core/credentials/transport/local/local_security_connector.cc +1 -1
  59. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +14 -2
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.cc +172 -0
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +103 -0
  62. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +3 -2
  63. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +10 -3
  64. data/src/core/credentials/transport/tls/tls_security_connector.cc +14 -2
  65. data/src/core/credentials/transport/xds/xds_credentials.cc +4 -12
  66. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +6 -0
  67. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +28 -66
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -8
  69. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +24 -58
  70. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +24 -19
  71. data/src/core/ext/filters/http/message_compress/compression_filter.cc +25 -32
  72. data/src/core/ext/filters/http/message_compress/compression_filter.h +0 -1
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -81
  74. data/src/core/ext/filters/message_size/message_size_filter.h +1 -50
  75. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -1
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -56
  77. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -14
  78. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  79. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +184 -54
  80. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -1
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +132 -18
  82. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  83. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  84. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -2
  85. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +2 -4
  86. data/src/core/ext/transport/chttp2/transport/frame.cc +120 -13
  87. data/src/core/ext/transport/chttp2/transport/frame.h +57 -10
  88. data/src/core/ext/transport/chttp2/transport/frame_data.cc +34 -2
  89. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +55 -23
  90. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -1
  92. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +13 -7
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  94. data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
  95. data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  97. data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
  98. data/src/core/ext/transport/chttp2/transport/goaway.h +17 -1
  99. data/src/core/ext/transport/chttp2/transport/header_assembler.h +54 -22
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +53 -5
  101. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +22 -0
  102. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +20 -0
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +42 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  105. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +219 -417
  106. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +49 -29
  107. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +2073 -0
  108. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +746 -0
  109. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  110. data/src/core/ext/transport/chttp2/transport/http2_settings.h +49 -15
  111. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +0 -2
  112. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +74 -26
  113. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +39 -15
  114. data/src/core/ext/transport/chttp2/transport/http2_transport.h +18 -48
  115. data/src/core/ext/transport/chttp2/transport/internal.h +24 -0
  116. data/src/core/ext/transport/chttp2/transport/message_assembler.h +1 -2
  117. data/src/core/ext/transport/chttp2/transport/parsing.cc +93 -26
  118. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +1 -1
  119. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +4 -10
  120. data/src/core/ext/transport/chttp2/transport/read_context.h +494 -0
  121. data/src/core/ext/transport/chttp2/transport/security_frame.h +13 -3
  122. data/src/core/ext/transport/chttp2/transport/stream.h +287 -137
  123. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +83 -65
  124. data/src/core/ext/transport/chttp2/transport/write_cycle.h +9 -1
  125. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -2
  126. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +621 -432
  127. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +264 -166
  128. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +0 -13
  129. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +708 -497
  130. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +294 -176
  131. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +0 -15
  132. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +262 -181
  133. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +84 -58
  134. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +0 -5
  135. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +254 -190
  136. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +107 -53
  137. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +0 -4
  138. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +271 -190
  139. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +88 -64
  140. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +0 -5
  141. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +1035 -730
  142. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +384 -260
  143. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +0 -19
  144. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +87 -56
  145. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +26 -16
  146. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +0 -2
  147. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +105 -71
  148. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +30 -22
  149. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +0 -2
  150. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +31 -29
  151. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +19 -7
  152. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +0 -1
  153. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +25 -23
  154. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +15 -7
  155. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +0 -1
  156. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +25 -23
  157. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +15 -7
  158. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +0 -1
  159. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +201 -165
  160. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +79 -31
  161. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +0 -2
  162. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +29 -26
  163. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +17 -11
  164. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +0 -1
  165. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +46 -29
  166. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +37 -19
  167. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +4 -4
  168. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +34 -27
  169. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +34 -13
  170. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +1 -2
  171. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +617 -452
  172. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +221 -163
  173. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +0 -16
  174. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1339 -970
  175. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +484 -324
  176. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +0 -23
  177. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +181 -135
  178. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +59 -43
  179. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +0 -3
  180. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1353 -1028
  181. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +535 -361
  182. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +0 -25
  183. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +37 -33
  184. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +19 -13
  185. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +0 -1
  186. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +234 -196
  187. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +77 -57
  188. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +0 -1
  189. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +695 -502
  190. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +246 -186
  191. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +0 -15
  192. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +140 -116
  193. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +53 -43
  194. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +0 -3
  195. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +363 -269
  196. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +131 -89
  197. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +0 -8
  198. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +35 -31
  199. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +15 -13
  200. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +0 -1
  201. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +1073 -769
  202. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +515 -293
  203. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +0 -30
  204. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +25 -23
  205. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +15 -7
  206. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +0 -1
  207. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +375 -267
  208. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +142 -86
  209. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +0 -7
  210. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +32 -27
  211. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +13 -11
  212. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +0 -1
  213. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +29 -26
  214. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +17 -11
  215. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +0 -1
  216. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +87 -56
  217. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +26 -16
  218. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +0 -2
  219. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +634 -468
  220. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +255 -161
  221. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +0 -14
  222. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -474
  223. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +228 -130
  224. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +0 -9
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +56 -40
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +15 -13
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +0 -1
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +34 -29
  229. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +19 -11
  230. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +0 -1
  231. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +811 -635
  232. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +347 -221
  233. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +0 -16
  234. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +174 -118
  235. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +62 -38
  236. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +0 -4
  237. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +78 -57
  238. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +28 -18
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +0 -2
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +37 -33
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +22 -14
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +0 -1
  243. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +159 -119
  244. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +47 -35
  245. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +0 -5
  246. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +101 -76
  247. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +41 -23
  248. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +0 -2
  249. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +35 -31
  250. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +15 -13
  251. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +0 -1
  252. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +189 -127
  253. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +79 -49
  254. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +0 -4
  255. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +378 -283
  256. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +156 -98
  257. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +0 -8
  258. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +354 -255
  259. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +125 -69
  260. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +0 -6
  261. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +27 -24
  262. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +13 -11
  263. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +0 -1
  264. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +611 -451
  265. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +159 -119
  266. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +0 -11
  267. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +468 -321
  268. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +157 -99
  269. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -6
  270. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +146 -119
  271. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +55 -35
  272. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +0 -1
  273. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +61 -51
  274. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +16 -16
  275. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +0 -2
  276. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +43 -39
  277. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +25 -13
  278. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +0 -1
  279. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +341 -247
  280. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +130 -84
  281. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +0 -8
  282. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +452 -313
  283. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +144 -100
  284. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +0 -10
  285. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +666 -493
  286. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +251 -181
  287. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +0 -12
  288. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +327 -197
  289. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +92 -48
  290. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +0 -3
  291. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3583 -2532
  292. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +1340 -816
  293. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +0 -60
  294. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +111 -82
  295. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +48 -28
  296. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +0 -3
  297. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +548 -410
  298. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +214 -148
  299. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +0 -12
  300. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +59 -50
  301. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +30 -20
  302. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +0 -2
  303. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +29 -26
  304. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +17 -11
  305. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +0 -1
  306. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +60 -49
  307. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +28 -20
  308. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +0 -2
  309. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +50 -36
  310. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +19 -11
  311. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +0 -1
  312. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +82 -63
  313. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +27 -19
  314. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +0 -1
  315. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +27 -24
  316. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +13 -11
  317. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +0 -1
  318. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +70 -58
  319. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +32 -22
  320. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +0 -2
  321. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -5
  322. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +1 -1
  323. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +73 -62
  324. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +39 -25
  325. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +0 -2
  326. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +49 -45
  327. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +33 -13
  328. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +0 -1
  329. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +771 -588
  330. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +383 -185
  331. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +0 -16
  332. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +66 -47
  333. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +31 -17
  334. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +0 -2
  335. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb.h +69 -58
  336. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.c +27 -23
  337. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.h +0 -2
  338. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +151 -119
  339. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +45 -39
  340. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +0 -5
  341. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb.h +19 -17
  342. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.c +1 -3
  343. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.h +0 -1
  344. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb.h +144 -109
  345. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.c +46 -38
  346. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.h +0 -4
  347. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +184 -139
  348. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +65 -35
  349. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +0 -3
  350. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +129 -106
  351. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +69 -41
  352. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +0 -4
  353. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +83 -71
  354. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +40 -26
  355. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +0 -2
  356. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +148 -101
  357. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +45 -27
  358. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +0 -2
  359. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +62 -51
  360. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +35 -21
  361. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +0 -2
  362. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1362 -1024
  363. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +508 -336
  364. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +0 -22
  365. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +21 -19
  366. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +13 -7
  367. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +0 -1
  368. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +35 -31
  369. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +15 -13
  370. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +0 -1
  371. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +27 -24
  372. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +13 -11
  373. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +0 -1
  374. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +27 -24
  375. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +13 -11
  376. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +0 -1
  377. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +94 -74
  378. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +35 -23
  379. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.h +0 -1
  380. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +231 -179
  381. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +88 -66
  382. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +0 -6
  383. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +21 -19
  384. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +13 -7
  385. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +0 -1
  386. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +63 -56
  387. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +31 -19
  388. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +0 -1
  389. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +27 -24
  390. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +13 -11
  391. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +0 -1
  392. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +27 -24
  393. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +13 -11
  394. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +0 -1
  395. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -5
  396. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +1 -1
  397. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +538 -364
  398. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +157 -95
  399. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +0 -8
  400. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -110
  401. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +69 -49
  402. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +0 -4
  403. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +517 -389
  404. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +182 -116
  405. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +0 -7
  406. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +84 -62
  407. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +30 -22
  408. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +0 -2
  409. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +340 -256
  410. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +92 -82
  411. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +0 -5
  412. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +19 -17
  413. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -3
  414. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +0 -1
  415. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +857 -566
  416. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +288 -182
  417. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +0 -15
  418. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +105 -72
  419. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +36 -22
  420. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +0 -2
  421. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +312 -226
  422. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +132 -78
  423. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +0 -5
  424. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +82 -61
  425. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -19
  426. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +0 -2
  427. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +123 -89
  428. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +25 -25
  429. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +0 -4
  430. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +48 -33
  431. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +13 -11
  432. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +0 -1
  433. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +42 -36
  434. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +19 -13
  435. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +0 -1
  436. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +101 -79
  437. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +61 -31
  438. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +0 -5
  439. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +83 -60
  440. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +37 -19
  441. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +0 -2
  442. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +56 -40
  443. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +15 -13
  444. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +0 -1
  445. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +34 -29
  446. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +13 -11
  447. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +0 -1
  448. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +32 -27
  449. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +13 -11
  450. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +0 -1
  451. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +88 -71
  452. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +48 -30
  453. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +0 -3
  454. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +37 -30
  455. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +1 -5
  456. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +0 -2
  457. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +95 -71
  458. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +36 -22
  459. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +0 -2
  460. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +79 -56
  461. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +26 -18
  462. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +0 -2
  463. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +164 -124
  464. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +54 -40
  465. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +0 -4
  466. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +200 -147
  467. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +47 -41
  468. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +0 -7
  469. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +160 -130
  470. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +89 -47
  471. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +0 -5
  472. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +78 -62
  473. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +26 -20
  474. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +0 -3
  475. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -5
  476. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +1 -1
  477. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +21 -19
  478. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +13 -7
  479. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +0 -1
  480. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +43 -36
  481. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +22 -12
  482. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +0 -2
  483. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +67 -55
  484. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +36 -18
  485. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +0 -3
  486. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +62 -51
  487. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +33 -19
  488. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +0 -2
  489. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -5
  490. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +1 -1
  491. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +25 -23
  492. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +15 -7
  493. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +0 -1
  494. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +37 -33
  495. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +19 -13
  496. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +0 -1
  497. data/src/core/ext/upb-gen/google/api/annotations.upb.h +15 -13
  498. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +22 -7
  499. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +1 -1
  500. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +619 -430
  501. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +260 -168
  502. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +0 -13
  503. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +734 -518
  504. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +312 -182
  505. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +0 -16
  506. data/src/core/ext/upb-gen/google/api/http.upb.h +146 -105
  507. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +65 -29
  508. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +0 -3
  509. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +52 -37
  510. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +19 -11
  511. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +0 -1
  512. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +23 -21
  513. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +15 -7
  514. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +0 -1
  515. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2236 -1514
  516. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +824 -406
  517. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +0 -34
  518. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +23 -21
  519. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +15 -7
  520. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +0 -1
  521. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +19 -17
  522. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -3
  523. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +0 -1
  524. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +149 -100
  525. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +59 -43
  526. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +0 -4
  527. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +23 -21
  528. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +15 -7
  529. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +0 -1
  530. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +181 -139
  531. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +99 -53
  532. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +0 -9
  533. data/src/core/ext/upb-gen/google/rpc/status.upb.h +52 -37
  534. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +19 -11
  535. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +0 -1
  536. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +1553 -1157
  537. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +712 -410
  538. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +0 -39
  539. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +189 -125
  540. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +59 -35
  541. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +0 -3
  542. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +454 -343
  543. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +204 -130
  544. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +0 -11
  545. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +369 -243
  546. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +109 -79
  547. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +0 -7
  548. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +256 -175
  549. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +122 -68
  550. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +0 -8
  551. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +71 -51
  552. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +39 -19
  553. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h +0 -2
  554. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +583 -407
  555. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +259 -145
  556. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h +0 -12
  557. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +114 -84
  558. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +52 -30
  559. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +0 -4
  560. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +41 -34
  561. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +25 -13
  562. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.h +0 -2
  563. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +309 -230
  564. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +123 -79
  565. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +0 -9
  566. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +98 -63
  567. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +51 -23
  568. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.h +0 -3
  569. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +505 -312
  570. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +159 -87
  571. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +0 -9
  572. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +128 -91
  573. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +82 -41
  574. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -8
  575. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +36 -29
  576. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +36 -13
  577. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +1 -2
  578. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +13 -11
  579. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +22 -7
  580. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +1 -1
  581. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +36 -29
  582. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +36 -13
  583. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +1 -2
  584. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +34 -27
  585. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +34 -13
  586. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +1 -2
  587. data/src/core/ext/upb-gen/validate/validate.upb.h +1682 -1130
  588. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +587 -247
  589. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +4 -27
  590. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +128 -91
  591. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +82 -41
  592. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -8
  593. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +36 -29
  594. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +36 -13
  595. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +1 -2
  596. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +13 -11
  597. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +22 -7
  598. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +1 -1
  599. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +122 -90
  600. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +82 -39
  601. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +3 -7
  602. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +34 -27
  603. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +34 -13
  604. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +1 -2
  605. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +21 -19
  606. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +13 -7
  607. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +0 -1
  608. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +29 -26
  609. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +17 -11
  610. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +0 -1
  611. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +70 -58
  612. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +32 -22
  613. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +0 -2
  614. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +53 -34
  615. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +26 -16
  616. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +0 -2
  617. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +29 -26
  618. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +17 -11
  619. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +0 -1
  620. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +37 -33
  621. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +22 -14
  622. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +0 -1
  623. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +102 -76
  624. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +43 -23
  625. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +0 -2
  626. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +33 -30
  627. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +19 -11
  628. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +0 -1
  629. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +136 -83
  630. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +41 -33
  631. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +0 -4
  632. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +46 -32
  633. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +20 -12
  634. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +0 -1
  635. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +29 -26
  636. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +20 -12
  637. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +0 -1
  638. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +93 -61
  639. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +28 -20
  640. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +0 -2
  641. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +19 -17
  642. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -3
  643. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +0 -1
  644. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +105 -71
  645. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +32 -22
  646. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +0 -2
  647. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +430 -314
  648. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +153 -123
  649. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +0 -10
  650. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +307 -199
  651. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +74 -62
  652. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +0 -6
  653. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +52 -42
  654. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +19 -13
  655. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +0 -2
  656. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +95 -71
  657. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +36 -22
  658. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +0 -2
  659. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +92 -77
  660. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +42 -28
  661. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +0 -2
  662. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +67 -55
  663. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +36 -18
  664. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +0 -3
  665. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +29 -26
  666. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +17 -11
  667. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +0 -1
  668. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +885 -855
  669. data/src/core/filter/composite/composite_filter.cc +10 -3
  670. data/src/core/filter/composite/composite_filter.h +11 -1
  671. data/src/core/filter/filter_args.h +4 -22
  672. data/src/core/handshaker/handshaker.cc +10 -2
  673. data/src/core/handshaker/security/secure_endpoint.cc +60 -5
  674. data/src/core/lib/channel/channel_args.h +12 -6
  675. data/src/core/lib/channel/channel_stack.cc +1 -2
  676. data/src/core/lib/channel/channel_stack.h +1 -7
  677. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  678. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -7
  679. data/src/core/lib/channel/promise_based_filter.cc +90 -4
  680. data/src/core/lib/channel/promise_based_filter.h +241 -188
  681. data/src/core/lib/compression/message_compress.cc +132 -97
  682. data/src/core/lib/compression/message_compress.h +24 -0
  683. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +0 -13
  684. data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +44 -0
  685. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  686. data/src/core/lib/event_engine/posix.h +2 -0
  687. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -1
  688. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +11 -8
  689. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +9 -18
  690. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  691. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -1
  692. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +10 -10
  693. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  694. data/src/core/lib/event_engine/shim.cc +2 -16
  695. data/src/core/lib/event_engine/shim.h +0 -4
  696. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  697. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -4
  698. data/src/core/lib/experiments/experiments.cc +318 -183
  699. data/src/core/lib/experiments/experiments.h +186 -93
  700. data/src/core/lib/iomgr/buffer_list.h +1 -1
  701. data/src/core/lib/iomgr/error.cc +3 -73
  702. data/src/core/lib/iomgr/error.h +8 -6
  703. data/src/core/lib/iomgr/error_cfstream.cc +1 -2
  704. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -7
  705. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -6
  706. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  707. data/src/core/lib/iomgr/tcp_posix.cc +4 -7
  708. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  709. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  710. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  711. data/src/core/lib/promise/interceptor_list.h +1 -1
  712. data/src/core/lib/promise/try_seq.h +2 -2
  713. data/src/core/lib/resource_quota/telemetry.cc +54 -0
  714. data/src/core/lib/resource_quota/telemetry.h +5 -23
  715. data/src/core/lib/security/authorization/audit_logging.cc +2 -2
  716. data/src/core/lib/security/authorization/audit_logging.h +3 -3
  717. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
  718. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  719. data/src/core/lib/security/authorization/matchers.cc +20 -20
  720. data/src/core/lib/security/authorization/matchers.h +15 -16
  721. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  722. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  723. data/src/core/lib/security/authorization/stdout_logger.h +6 -5
  724. data/src/core/lib/surface/call.cc +6 -9
  725. data/src/core/lib/surface/call.h +11 -0
  726. data/src/core/lib/surface/channel.cc +21 -2
  727. data/src/core/lib/surface/channel.h +14 -6
  728. data/src/core/lib/surface/filter_stack_call.cc +10 -29
  729. data/src/core/lib/surface/legacy_channel.cc +9 -7
  730. data/src/core/lib/surface/legacy_channel.h +3 -1
  731. data/src/core/lib/surface/version.cc +2 -2
  732. data/src/core/lib/transport/bdp_estimator.cc +13 -13
  733. data/src/core/lib/transport/bdp_estimator.h +9 -5
  734. data/src/core/lib/transport/error_utils.cc +26 -138
  735. data/src/core/lib/transport/promise_endpoint.h +8 -8
  736. data/src/core/lib/transport/transport.h +31 -4
  737. data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
  738. data/src/core/load_balancing/pick_first/pick_first.cc +33 -2
  739. data/src/core/load_balancing/pick_first/pick_first.h +6 -0
  740. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -10
  741. data/src/core/load_balancing/rls/rls.cc +2 -1
  742. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +141 -74
  743. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +88 -0
  744. data/src/core/load_balancing/xds/cds.cc +80 -56
  745. data/src/core/load_balancing/xds/cds.h +21 -0
  746. data/src/core/mitigation_engine/mitigation.h +53 -0
  747. data/src/core/mitigation_engine/mitigation_engine.h +81 -0
  748. data/src/core/mitigation_engine/mitigation_provider.h +62 -0
  749. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  750. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -5
  751. data/src/core/resolver/dns/dns_resolver_plugin.cc +1 -6
  752. data/src/core/resolver/xds/xds_resolver.cc +37 -144
  753. data/src/core/server/server.cc +40 -18
  754. data/src/core/server/server.h +26 -18
  755. data/src/core/server/server_config_selector.h +5 -4
  756. data/src/core/server/server_config_selector_filter.cc +135 -26
  757. data/src/core/server/server_config_selector_filter.h +1 -0
  758. data/src/core/server/xds_server_config_fetcher.cc +687 -692
  759. data/src/core/server/xds_server_config_fetcher_legacy.cc +1336 -0
  760. data/src/core/telemetry/call_tracer.cc +49 -2
  761. data/src/core/telemetry/call_tracer.h +1 -0
  762. data/src/core/telemetry/histogram.h +10 -89
  763. data/src/core/telemetry/instrument.h +42 -28
  764. data/src/core/telemetry/tcp_tracer.h +38 -0
  765. data/src/core/transport/message_size_service_config.cc +123 -0
  766. data/src/core/transport/message_size_service_config.h +85 -0
  767. data/src/core/transport/session_endpoint.cc +29 -4
  768. data/src/core/transport/session_endpoint.h +4 -0
  769. data/src/core/tsi/alts/crypt/gsec.h +4 -2
  770. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  771. data/src/core/tsi/ssl_telemetry_utils.cc +343 -0
  772. data/src/core/tsi/ssl_telemetry_utils.h +74 -0
  773. data/src/core/tsi/ssl_transport_security.cc +583 -305
  774. data/src/core/tsi/ssl_transport_security.h +22 -6
  775. data/src/core/tsi/ssl_transport_security_utils.cc +2 -0
  776. data/src/core/tsi/transport_security.h +7 -0
  777. data/src/core/util/http_client/httpcli.cc +1 -4
  778. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  779. data/src/core/util/http_client/parser.cc +1 -1
  780. data/src/core/util/lru_cache.h +2 -0
  781. data/src/core/util/ref_counted_string.h +1 -1
  782. data/src/core/util/status_helper.cc +71 -192
  783. data/src/core/util/status_helper.h +16 -21
  784. data/src/core/util/tchar.cc +13 -7
  785. data/src/core/util/trie_lookup.h +1 -1
  786. data/src/core/xds/grpc/blackboard.cc +58 -0
  787. data/src/core/{filter → xds/grpc}/blackboard.h +30 -11
  788. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
  789. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -7
  790. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -16
  791. data/src/core/xds/grpc/xds_common_types.cc +96 -0
  792. data/src/core/xds/grpc/xds_common_types.h +35 -7
  793. data/src/core/xds/grpc/xds_common_types_parser.cc +205 -134
  794. data/src/core/xds/grpc/xds_common_types_parser.h +18 -1
  795. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -18
  796. data/src/core/xds/grpc/xds_http_composite_filter.cc +34 -18
  797. data/src/core/xds/grpc/xds_http_composite_filter.h +6 -3
  798. data/src/core/xds/grpc/xds_http_fault_filter.cc +0 -149
  799. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -8
  800. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  801. data/src/core/xds/grpc/xds_http_filter.h +6 -16
  802. data/src/core/xds/grpc/xds_http_filter_registry.cc +2 -12
  803. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -119
  804. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +27 -15
  805. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -12
  806. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +0 -149
  807. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -8
  808. data/src/core/xds/grpc/xds_lb_policy_registry.cc +18 -0
  809. data/src/core/xds/grpc/xds_listener_parser.cc +13 -9
  810. data/src/core/xds/grpc/xds_metadata_parser.cc +0 -2
  811. data/src/core/xds/grpc/xds_route_config.h +1 -1
  812. data/src/core/xds/grpc/xds_route_config_parser.cc +10 -16
  813. data/src/core/xds/grpc/xds_routing.cc +115 -90
  814. data/src/core/xds/grpc/xds_routing.h +73 -24
  815. data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
  816. data/src/core/xds/grpc/xds_server_grpc.h +16 -2
  817. data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
  818. data/src/core/xds/grpc/xds_transport_grpc.cc +123 -18
  819. data/src/core/xds/grpc/xds_transport_grpc.h +28 -4
  820. data/src/core/xds/xds_client/lrs_client.cc +4 -8
  821. data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
  822. data/src/core/xds/xds_client/xds_client.cc +2 -15
  823. data/src/core/xds/xds_client/xds_transport.h +3 -0
  824. data/src/ruby/ext/grpc/rb_byte_buffer.c +1 -0
  825. data/src/ruby/ext/grpc/rb_call.c +3 -0
  826. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  827. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  828. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  829. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  830. data/src/ruby/ext/grpc/rb_completion_queue.c +1 -0
  831. data/src/ruby/ext/grpc/rb_compression_options.c +1 -0
  832. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  833. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -6
  834. data/src/ruby/ext/grpc/rb_server.c +1 -0
  835. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  836. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  837. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  838. data/src/ruby/lib/grpc/core/call_credentials.rb +86 -0
  839. data/src/ruby/lib/grpc/core/channel_credentials.rb +69 -0
  840. data/src/ruby/lib/grpc/core/credentials_helper.rb +126 -0
  841. data/src/ruby/lib/grpc/generic/client_stub.rb +86 -73
  842. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  843. data/src/ruby/lib/grpc/version.rb +1 -1
  844. data/src/ruby/lib/grpc.rb +25 -0
  845. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
  846. data/src/ruby/spec/call_credentials_spec.rb +52 -2
  847. data/src/ruby/spec/credentials_helper_spec.rb +80 -0
  848. data/src/ruby/spec/generic/client_stub_spec.rb +27 -4
  849. data/src/ruby/spec/generic/server_interceptors_spec.rb +17 -3
  850. data/third_party/upb/upb/base/error_handler.h +79 -0
  851. data/third_party/upb/upb/base/internal/log2.h +29 -5
  852. data/third_party/upb/upb/generated_code_support.h +1 -0
  853. data/third_party/upb/upb/hash/common.c +129 -14
  854. data/third_party/upb/upb/hash/common.h +1 -1
  855. data/third_party/upb/upb/hash/ext_table.h +65 -0
  856. data/third_party/upb/upb/lex/strtod.c +14 -5
  857. data/third_party/upb/upb/mem/arena.c +113 -95
  858. data/third_party/upb/upb/mem/internal/arena.h +13 -8
  859. data/third_party/upb/upb/message/accessors.c +2 -3
  860. data/third_party/upb/upb/message/accessors.h +32 -12
  861. data/third_party/upb/upb/message/array.c +51 -2
  862. data/third_party/upb/upb/message/array.h +10 -0
  863. data/third_party/upb/upb/message/copy.c +18 -34
  864. data/third_party/upb/upb/message/internal/accessors.h +15 -49
  865. data/third_party/upb/upb/message/internal/array.h +1 -1
  866. data/third_party/upb/upb/message/internal/map.h +1 -1
  867. data/third_party/upb/upb/message/internal/message.c +8 -1
  868. data/third_party/upb/upb/message/internal/message.h +40 -10
  869. data/third_party/upb/upb/message/message.c +3 -2
  870. data/third_party/upb/upb/message/value.h +0 -6
  871. data/third_party/upb/upb/mini_descriptor/decode.c +78 -59
  872. data/third_party/upb/upb/mini_descriptor/link.c +8 -6
  873. data/third_party/upb/upb/mini_table/extension_registry.c +17 -49
  874. data/third_party/upb/upb/mini_table/extension_registry.h +5 -17
  875. data/third_party/upb/upb/mini_table/generated_registry.c +180 -0
  876. data/third_party/upb/upb/mini_table/generated_registry.h +66 -0
  877. data/third_party/upb/upb/mini_table/internal/extension.h +5 -3
  878. data/third_party/upb/upb/mini_table/internal/field.h +7 -5
  879. data/third_party/upb/upb/mini_table/internal/generated_registry.h +37 -0
  880. data/third_party/upb/upb/mini_table/internal/message.c +0 -18
  881. data/third_party/upb/upb/mini_table/internal/message.h +24 -41
  882. data/third_party/upb/upb/mini_table/internal/size_log2.h +2 -1
  883. data/third_party/upb/upb/mini_table/internal/sub.h +2 -5
  884. data/third_party/upb/upb/mini_table/message.h +34 -13
  885. data/third_party/upb/upb/port/atomic.h +180 -74
  886. data/third_party/upb/upb/port/def.inc +194 -29
  887. data/third_party/upb/upb/port/sanitizers.h +15 -0
  888. data/third_party/upb/upb/port/undef.inc +6 -2
  889. data/third_party/upb/upb/reflection/common.h +0 -6
  890. data/third_party/upb/upb/reflection/def.hpp +8 -12
  891. data/third_party/upb/upb/reflection/def_pool.c +85 -33
  892. data/third_party/upb/upb/reflection/def_pool.h +38 -8
  893. data/third_party/upb/upb/reflection/def_type.h +3 -0
  894. data/third_party/upb/upb/reflection/enum_def.c +45 -33
  895. data/third_party/upb/upb/reflection/enum_def.h +8 -4
  896. data/third_party/upb/upb/reflection/enum_reserved_range.c +7 -3
  897. data/third_party/upb/upb/reflection/enum_value_def.c +14 -29
  898. data/third_party/upb/upb/reflection/enum_value_def.h +5 -4
  899. data/third_party/upb/upb/reflection/extension_range.c +15 -14
  900. data/third_party/upb/upb/reflection/extension_range.h +7 -4
  901. data/third_party/upb/upb/reflection/field_def.c +114 -96
  902. data/third_party/upb/upb/reflection/field_def.h +3 -3
  903. data/third_party/upb/upb/reflection/file_def.c +71 -65
  904. data/third_party/upb/upb/reflection/file_def.h +4 -5
  905. data/third_party/upb/upb/reflection/internal/def_builder.c +22 -14
  906. data/third_party/upb/upb/reflection/internal/def_builder.h +44 -38
  907. data/third_party/upb/upb/reflection/internal/def_pool.h +5 -1
  908. data/third_party/upb/upb/reflection/internal/enum_def.h +6 -4
  909. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +3 -2
  910. data/third_party/upb/upb/reflection/internal/enum_value_def.h +7 -4
  911. data/third_party/upb/upb/reflection/internal/extension_range.h +4 -3
  912. data/third_party/upb/upb/reflection/internal/field_def.h +15 -12
  913. data/third_party/upb/upb/reflection/internal/file_def.h +8 -1
  914. data/third_party/upb/upb/reflection/internal/message_def.h +10 -7
  915. data/third_party/upb/upb/reflection/internal/message_reserved_range.h +3 -1
  916. data/third_party/upb/upb/reflection/internal/method_def.h +6 -6
  917. data/third_party/upb/upb/reflection/internal/oneof_def.h +6 -6
  918. data/third_party/upb/upb/reflection/internal/service_def.h +9 -6
  919. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  920. data/third_party/upb/upb/reflection/message_def.c +46 -53
  921. data/third_party/upb/upb/reflection/message_def.h +6 -7
  922. data/third_party/upb/upb/reflection/message_reserved_range.c +7 -6
  923. data/third_party/upb/upb/reflection/method_def.c +22 -20
  924. data/third_party/upb/upb/reflection/method_def.h +4 -4
  925. data/third_party/upb/upb/reflection/oneof_def.c +17 -15
  926. data/third_party/upb/upb/reflection/oneof_def.h +6 -3
  927. data/third_party/upb/upb/reflection/service_def.c +50 -23
  928. data/third_party/upb/upb/reflection/service_def.h +7 -4
  929. data/third_party/upb/upb/text/internal/encode.c +7 -10
  930. data/third_party/upb/upb/wire/decode.c +269 -430
  931. data/third_party/upb/upb/wire/decode.h +6 -45
  932. data/third_party/upb/upb/wire/decode_fast/combinations.h +7 -3
  933. data/third_party/upb/upb/wire/decode_fast/select.c +7 -2
  934. data/third_party/upb/upb/wire/encode.c +144 -106
  935. data/third_party/upb/upb/wire/encode.h +6 -2
  936. data/third_party/upb/upb/wire/eps_copy_input_stream.c +36 -7
  937. data/third_party/upb/upb/wire/eps_copy_input_stream.h +94 -380
  938. data/third_party/upb/upb/wire/internal/decoder.c +1 -14
  939. data/third_party/upb/upb/wire/internal/decoder.h +84 -24
  940. data/third_party/upb/upb/wire/internal/eps_copy_input_stream.h +339 -0
  941. data/third_party/upb/upb/wire/internal/reader.h +29 -12
  942. data/third_party/upb/upb/wire/reader.c +35 -22
  943. data/third_party/upb/upb/wire/reader.h +11 -18
  944. data/third_party/utf8_range/utf8_range.c +1 -1
  945. data/third_party/utf8_range/utf8_range.h +2 -1
  946. metadata +35 -13
  947. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +0 -117
  948. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +0 -109
  949. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +0 -80
  950. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +0 -86
  951. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +0 -83
  952. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +0 -91
  953. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +0 -217
  954. data/third_party/upb/upb/message/internal/tagged_ptr.h +0 -56
  955. data/third_party/upb/upb/message/tagged_ptr.h +0 -48
@@ -0,0 +1,1336 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/credentials.h>
20
+ #include <grpc/grpc.h>
21
+ #include <grpc/grpc_security.h>
22
+ #include <grpc/slice.h>
23
+ #include <grpc/status.h>
24
+ #include <grpc/support/port_platform.h>
25
+ #include <string.h>
26
+
27
+ #include <algorithm>
28
+ #include <map>
29
+ #include <memory>
30
+ #include <optional>
31
+ #include <set>
32
+ #include <string>
33
+ #include <utility>
34
+ #include <variant>
35
+ #include <vector>
36
+
37
+ #include "src/core/call/metadata_batch.h"
38
+ #include "src/core/config/core_configuration.h"
39
+ #include "src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h"
40
+ #include "src/core/credentials/transport/tls/grpc_tls_certificate_provider.h"
41
+ #include "src/core/credentials/transport/transport_credentials.h"
42
+ #include "src/core/credentials/transport/xds/xds_credentials.h"
43
+ #include "src/core/lib/address_utils/parse_address.h"
44
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
45
+ #include "src/core/lib/channel/channel_args.h"
46
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
47
+ #include "src/core/lib/channel/channel_fwd.h"
48
+ #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/iomgr/endpoint.h"
50
+ #include "src/core/lib/iomgr/exec_ctx.h"
51
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
52
+ #include "src/core/lib/iomgr/resolved_address.h"
53
+ #include "src/core/lib/iomgr/sockaddr.h"
54
+ #include "src/core/lib/iomgr/socket_utils.h"
55
+ #include "src/core/server/server.h"
56
+ #include "src/core/server/server_config_selector.h"
57
+ #include "src/core/server/server_config_selector_filter.h"
58
+ #include "src/core/server/xds_channel_stack_modifier.h"
59
+ #include "src/core/service_config/service_config.h"
60
+ #include "src/core/service_config/service_config_impl.h"
61
+ #include "src/core/util/debug_location.h"
62
+ #include "src/core/util/down_cast.h"
63
+ #include "src/core/util/grpc_check.h"
64
+ #include "src/core/util/host_port.h"
65
+ #include "src/core/util/match.h"
66
+ #include "src/core/util/ref_counted_ptr.h"
67
+ #include "src/core/util/sync.h"
68
+ #include "src/core/util/unique_type_name.h"
69
+ #include "src/core/util/uri.h"
70
+ #include "src/core/xds/grpc/certificate_provider_store.h"
71
+ #include "src/core/xds/grpc/xds_bootstrap_grpc.h"
72
+ #include "src/core/xds/grpc/xds_certificate_provider.h"
73
+ #include "src/core/xds/grpc/xds_client_grpc.h"
74
+ #include "src/core/xds/grpc/xds_common_types.h"
75
+ #include "src/core/xds/grpc/xds_http_filter.h"
76
+ #include "src/core/xds/grpc/xds_http_filter_registry.h"
77
+ #include "src/core/xds/grpc/xds_listener.h"
78
+ #include "src/core/xds/grpc/xds_listener_parser.h"
79
+ #include "src/core/xds/grpc/xds_route_config.h"
80
+ #include "src/core/xds/grpc/xds_route_config_parser.h"
81
+ #include "src/core/xds/grpc/xds_routing.h"
82
+ #include "src/core/xds/xds_client/xds_client.h"
83
+ #include "absl/base/thread_annotations.h"
84
+ #include "absl/log/log.h"
85
+ #include "absl/status/status.h"
86
+ #include "absl/status/statusor.h"
87
+ #include "absl/strings/match.h"
88
+ #include "absl/strings/numbers.h"
89
+ #include "absl/strings/str_cat.h"
90
+ #include "absl/strings/str_join.h"
91
+ #include "absl/strings/str_replace.h"
92
+ #include "absl/strings/string_view.h"
93
+
94
+ namespace grpc_core {
95
+ namespace {
96
+
97
+ using ReadDelayHandle = XdsClient::ReadDelayHandle;
98
+
99
+ // A server config fetcher that fetches the information for configuring server
100
+ // listeners from the xDS control plane.
101
+ class XdsServerConfigFetcher final : public ServerConfigFetcher {
102
+ public:
103
+ XdsServerConfigFetcher(RefCountedPtr<GrpcXdsClient> xds_client,
104
+ grpc_server_xds_status_notifier notifier);
105
+
106
+ ~XdsServerConfigFetcher() override {
107
+ xds_client_.reset(DEBUG_LOCATION, "XdsServerConfigFetcher");
108
+ }
109
+
110
+ void StartWatch(
111
+ std::string listening_address,
112
+ std::unique_ptr<ServerConfigFetcher::WatcherInterface> watcher) override;
113
+
114
+ void CancelWatch(ServerConfigFetcher::WatcherInterface* watcher) override;
115
+
116
+ // Return the interested parties from the xds client so that it can be polled.
117
+ grpc_pollset_set* interested_parties() override {
118
+ return xds_client_->interested_parties();
119
+ }
120
+
121
+ private:
122
+ class ListenerWatcher;
123
+
124
+ RefCountedPtr<GrpcXdsClient> xds_client_;
125
+ const grpc_server_xds_status_notifier serving_status_notifier_;
126
+ Mutex mu_;
127
+ std::map<ServerConfigFetcher::WatcherInterface*, ListenerWatcher*>
128
+ listener_watchers_ ABSL_GUARDED_BY(mu_);
129
+ };
130
+
131
+ // A watcher implementation for listening on LDS updates from the xDS control
132
+ // plane. When a good LDS update is received, it creates a
133
+ // FilterChainMatchManager object that would replace the existing (if any)
134
+ // FilterChainMatchManager object after all referenced RDS resources are
135
+ // fetched. Note that a good update also causes the server listener to start
136
+ // listening if it isn't already. If an error LDS update is received (NACKed
137
+ // resource, timeouts), the previous good FilterChainMatchManager, if any,
138
+ // continues to be used. If there isn't any previous good update or if the
139
+ // update received was a fatal error (resource does not exist), the server
140
+ // listener is made to stop listening.
141
+ class XdsServerConfigFetcher::ListenerWatcher final
142
+ : public XdsListenerResourceType::WatcherInterface {
143
+ public:
144
+ ListenerWatcher(RefCountedPtr<GrpcXdsClient> xds_client,
145
+ std::unique_ptr<ServerConfigFetcher::WatcherInterface>
146
+ server_config_watcher,
147
+ grpc_server_xds_status_notifier serving_status_notifier,
148
+ std::string listening_address);
149
+
150
+ ~ListenerWatcher() override {
151
+ xds_client_.reset(DEBUG_LOCATION, "ListenerWatcher");
152
+ }
153
+
154
+ void OnResourceChanged(
155
+ absl::StatusOr<std::shared_ptr<const XdsListenerResource>> listener,
156
+ RefCountedPtr<ReadDelayHandle> read_delay_handle) override;
157
+
158
+ void OnAmbientError(
159
+ absl::Status status,
160
+ RefCountedPtr<ReadDelayHandle> read_delay_handle) override;
161
+
162
+ const std::string& listening_address() const { return listening_address_; }
163
+
164
+ private:
165
+ class FilterChainMatchManager;
166
+
167
+ void OnFatalError(absl::Status status) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
168
+
169
+ // Invoked by FilterChainMatchManager that is done fetching all referenced RDS
170
+ // resources. If the calling FilterChainMatchManager is the
171
+ // pending_filter_chain_match_manager_, it is promoted to be the
172
+ // filter_chain_match_manager_ in use.
173
+ void PendingFilterChainMatchManagerReady(
174
+ FilterChainMatchManager* filter_chain_match_manager) {
175
+ MutexLock lock(&mu_);
176
+ PendingFilterChainMatchManagerReadyLocked(filter_chain_match_manager);
177
+ }
178
+ void PendingFilterChainMatchManagerReadyLocked(
179
+ FilterChainMatchManager* filter_chain_match_manager)
180
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_);
181
+
182
+ RefCountedPtr<GrpcXdsClient> xds_client_;
183
+ const std::unique_ptr<ServerConfigFetcher::WatcherInterface>
184
+ server_config_watcher_;
185
+ const grpc_server_xds_status_notifier serving_status_notifier_;
186
+ const std::string listening_address_;
187
+ Mutex mu_;
188
+ RefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_
189
+ ABSL_GUARDED_BY(mu_);
190
+ RefCountedPtr<FilterChainMatchManager> pending_filter_chain_match_manager_
191
+ ABSL_GUARDED_BY(mu_);
192
+ };
193
+
194
+ // A connection manager used by the server listener code to inject channel args
195
+ // to be used for each incoming connection. This implementation chooses the
196
+ // appropriate filter chain from the xDS Listener resource and injects channel
197
+ // args that configure the right mTLS certs and cause the right set of HTTP
198
+ // filters to be injected.
199
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager final
200
+ : public ServerConfigFetcher::ConnectionManager {
201
+ public:
202
+ FilterChainMatchManager(
203
+ RefCountedPtr<GrpcXdsClient> xds_client,
204
+ XdsListenerResource::FilterChainMap filter_chain_map,
205
+ std::optional<XdsListenerResource::FilterChainData> default_filter_chain);
206
+
207
+ ~FilterChainMatchManager() override {
208
+ xds_client_.reset(DEBUG_LOCATION, "FilterChainMatchManager");
209
+ }
210
+
211
+ absl::StatusOr<ChannelArgs> UpdateChannelArgsForConnection(
212
+ const ChannelArgs& args, grpc_endpoint* tcp) override;
213
+
214
+ // Invoked by ListenerWatcher to start fetching referenced RDS resources.
215
+ void StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher)
216
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ListenerWatcher::mu_);
217
+
218
+ const XdsListenerResource::FilterChainMap& filter_chain_map() const {
219
+ return filter_chain_map_;
220
+ }
221
+
222
+ const std::optional<XdsListenerResource::FilterChainData>&
223
+ default_filter_chain() const {
224
+ return default_filter_chain_;
225
+ }
226
+
227
+ private:
228
+ class RouteConfigWatcher;
229
+ struct RdsUpdateState {
230
+ RouteConfigWatcher* watcher;
231
+ std::optional<absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>>
232
+ rds_update;
233
+ };
234
+
235
+ class XdsServerConfigSelector;
236
+ class StaticXdsServerConfigSelectorProvider;
237
+ class DynamicXdsServerConfigSelectorProvider;
238
+
239
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
240
+ CreateOrGetXdsCertificateProviderFromFilterChainData(
241
+ const XdsListenerResource::FilterChainData* filter_chain);
242
+ void Orphaned() override;
243
+
244
+ // Helper functions invoked by RouteConfigWatcher when there are updates to
245
+ // RDS resources.
246
+ void OnRouteConfigChanged(
247
+ const std::string& resource_name,
248
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
249
+ route_config);
250
+ void OnAmbientError(const std::string& resource_name, absl::Status status);
251
+
252
+ // Executes cb once for each unique filter chain object in the LDS resource.
253
+ void ForEachFilterChain(
254
+ absl::FunctionRef<void(XdsListenerResource::FilterChainData&)> cb);
255
+
256
+ RefCountedPtr<GrpcXdsClient> xds_client_;
257
+ // This ref is only kept around till the FilterChainMatchManager becomes
258
+ // ready.
259
+ RefCountedPtr<ListenerWatcher> listener_watcher_;
260
+ // TODO(roth): Consider holding a ref to the LDS resource and storing
261
+ // a pointer to the filter chain data within that LDS resource, rather
262
+ // than copying the filter chain data here.
263
+ XdsListenerResource::FilterChainMap filter_chain_map_;
264
+ std::optional<XdsListenerResource::FilterChainData> default_filter_chain_;
265
+ Mutex mu_;
266
+ size_t rds_resources_yet_to_fetch_ ABSL_GUARDED_BY(mu_) = 0;
267
+ std::map<std::string /* resource_name */, RdsUpdateState> rds_map_
268
+ ABSL_GUARDED_BY(mu_);
269
+ std::map<const XdsListenerResource::FilterChainData*,
270
+ RefCountedPtr<XdsCertificateProvider>>
271
+ certificate_providers_map_ ABSL_GUARDED_BY(mu_);
272
+ };
273
+
274
+ // A watcher implementation for listening on RDS updates referenced to by a
275
+ // FilterChainMatchManager object. After all referenced RDS resources are
276
+ // fetched (errors are allowed), the FilterChainMatchManager tries to replace
277
+ // the current object. The watcher continues to update the referenced RDS
278
+ // resources so that new XdsServerConfigSelectorProvider objects are created
279
+ // with the latest updates and new connections do not need to wait for the RDS
280
+ // resources to be fetched.
281
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
282
+ RouteConfigWatcher final
283
+ : public XdsRouteConfigResourceType::WatcherInterface {
284
+ public:
285
+ RouteConfigWatcher(
286
+ std::string resource_name,
287
+ WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager)
288
+ : resource_name_(std::move(resource_name)),
289
+ filter_chain_match_manager_(std::move(filter_chain_match_manager)) {}
290
+
291
+ void OnResourceChanged(
292
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
293
+ route_config,
294
+ RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
295
+ filter_chain_match_manager_->OnRouteConfigChanged(resource_name_,
296
+ std::move(route_config));
297
+ }
298
+
299
+ void OnAmbientError(
300
+ absl::Status status,
301
+ RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
302
+ filter_chain_match_manager_->OnAmbientError(resource_name_,
303
+ std::move(status));
304
+ }
305
+
306
+ private:
307
+ std::string resource_name_;
308
+ WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_;
309
+ };
310
+
311
+ // An implementation of ServerConfigSelector used by
312
+ // StaticXdsServerConfigSelectorProvider and
313
+ // DynamicXdsServerConfigSelectorProvider to parse the RDS update and get
314
+ // per-call configuration based on incoming metadata.
315
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
316
+ XdsServerConfigSelector final : public ServerConfigSelector {
317
+ public:
318
+ static absl::StatusOr<RefCountedPtr<XdsServerConfigSelector>> Create(
319
+ const XdsHttpFilterRegistry& http_filter_registry,
320
+ std::shared_ptr<const XdsRouteConfigResource> rds_update,
321
+ const std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>&
322
+ http_filters);
323
+ ~XdsServerConfigSelector() override = default;
324
+
325
+ absl::StatusOr<CallConfig> GetCallConfig(
326
+ grpc_metadata_batch* metadata) override;
327
+
328
+ private:
329
+ struct VirtualHost {
330
+ struct Route {
331
+ // true if an action other than kNonForwardingAction is configured.
332
+ bool unsupported_action;
333
+ // TODO(roth): Consider holding a ref to the RDS resource and storing
334
+ // a pointer to the matchers within that RDS resource, rather than
335
+ // copying the matchers here.
336
+ XdsRouteConfigResource::Route::Matchers matchers;
337
+ RefCountedPtr<ServiceConfig> method_config;
338
+ };
339
+
340
+ class RouteListIterator final : public XdsRouting::RouteListIterator {
341
+ public:
342
+ explicit RouteListIterator(const std::vector<Route>* routes)
343
+ : routes_(routes) {}
344
+
345
+ size_t Size() const override { return routes_->size(); }
346
+
347
+ const XdsRouteConfigResource::Route::Matchers& GetMatchersForRoute(
348
+ size_t index) const override {
349
+ return (*routes_)[index].matchers;
350
+ }
351
+
352
+ private:
353
+ const std::vector<Route>* routes_;
354
+ };
355
+
356
+ std::vector<std::string> domains;
357
+ std::vector<Route> routes;
358
+ };
359
+
360
+ class VirtualHostListIterator final
361
+ : public XdsRouting::VirtualHostListIterator {
362
+ public:
363
+ explicit VirtualHostListIterator(
364
+ const std::vector<VirtualHost>* virtual_hosts)
365
+ : virtual_hosts_(virtual_hosts) {}
366
+
367
+ size_t Size() const override { return virtual_hosts_->size(); }
368
+
369
+ const std::vector<std::string>& GetDomainsForVirtualHost(
370
+ size_t index) const override {
371
+ return (*virtual_hosts_)[index].domains;
372
+ }
373
+
374
+ private:
375
+ const std::vector<VirtualHost>* virtual_hosts_;
376
+ };
377
+
378
+ std::vector<VirtualHost> virtual_hosts_;
379
+ };
380
+
381
+ // An XdsServerConfigSelectorProvider implementation for when the
382
+ // RouteConfiguration is available inline.
383
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
384
+ StaticXdsServerConfigSelectorProvider final
385
+ : public ServerConfigSelectorProvider {
386
+ public:
387
+ StaticXdsServerConfigSelectorProvider(
388
+ RefCountedPtr<GrpcXdsClient> xds_client,
389
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
390
+ static_resource,
391
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
392
+ http_filters)
393
+ : xds_client_(std::move(xds_client)),
394
+ static_resource_(std::move(static_resource)),
395
+ http_filters_(std::move(http_filters)) {}
396
+
397
+ ~StaticXdsServerConfigSelectorProvider() override {
398
+ xds_client_.reset(DEBUG_LOCATION, "StaticXdsServerConfigSelectorProvider");
399
+ }
400
+
401
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
402
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) override {
403
+ GRPC_CHECK(watcher_ == nullptr);
404
+ watcher_ = std::move(watcher);
405
+ if (!static_resource_.ok()) {
406
+ return static_resource_.status();
407
+ }
408
+ return XdsServerConfigSelector::Create(
409
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
410
+ .http_filter_registry(),
411
+ static_resource_.value(), http_filters_);
412
+ }
413
+
414
+ void CancelWatch(
415
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) override {
416
+ GRPC_CHECK(watcher == watcher_);
417
+ watcher_.reset();
418
+ }
419
+
420
+ private:
421
+ void Orphaned() override {}
422
+
423
+ RefCountedPtr<GrpcXdsClient> xds_client_;
424
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
425
+ static_resource_;
426
+ // TODO(roth): Consider holding a ref to the LDS resource and storing
427
+ // a pointer to the HTTP filters within that LDS resource, rather than
428
+ // copying the HTTP filters here.
429
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
430
+ http_filters_;
431
+ std::shared_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
432
+ watcher_;
433
+ };
434
+
435
+ // An XdsServerConfigSelectorProvider implementation for when the
436
+ // RouteConfiguration is to be fetched separately via RDS.
437
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
438
+ DynamicXdsServerConfigSelectorProvider final
439
+ : public ServerConfigSelectorProvider {
440
+ public:
441
+ DynamicXdsServerConfigSelectorProvider(
442
+ RefCountedPtr<GrpcXdsClient> xds_client, std::string resource_name,
443
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
444
+ initial_resource,
445
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
446
+ http_filters);
447
+
448
+ ~DynamicXdsServerConfigSelectorProvider() override {
449
+ xds_client_.reset(DEBUG_LOCATION, "DynamicXdsServerConfigSelectorProvider");
450
+ }
451
+
452
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
453
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) override;
454
+ void CancelWatch(
455
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) override;
456
+
457
+ private:
458
+ class RouteConfigWatcher;
459
+
460
+ void Orphaned() override;
461
+ void OnRouteConfigChanged(
462
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>> rds_update);
463
+ void OnAmbientError(absl::Status status);
464
+
465
+ RefCountedPtr<GrpcXdsClient> xds_client_;
466
+ std::string resource_name_;
467
+ // TODO(roth): Consider holding a ref to the LDS resource and storing
468
+ // a pointer to the HTTP filters within that LDS resource, rather than
469
+ // copying the HTTP filters here.
470
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
471
+ http_filters_;
472
+ RouteConfigWatcher* route_config_watcher_ = nullptr;
473
+ Mutex mu_;
474
+ std::shared_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
475
+ watcher_ ABSL_GUARDED_BY(mu_);
476
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>> resource_
477
+ ABSL_GUARDED_BY(mu_);
478
+ };
479
+
480
+ // A watcher implementation for updating the RDS resource used by
481
+ // DynamicXdsServerConfigSelectorProvider
482
+ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
483
+ DynamicXdsServerConfigSelectorProvider::RouteConfigWatcher final
484
+ : public XdsRouteConfigResourceType::WatcherInterface {
485
+ public:
486
+ explicit RouteConfigWatcher(
487
+ WeakRefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent)
488
+ : parent_(std::move(parent)) {}
489
+
490
+ void OnResourceChanged(
491
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
492
+ route_config,
493
+ RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
494
+ parent_->OnRouteConfigChanged(std::move(route_config));
495
+ }
496
+
497
+ void OnAmbientError(
498
+ absl::Status status,
499
+ RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) override {
500
+ parent_->OnAmbientError(std::move(status));
501
+ }
502
+
503
+ private:
504
+ WeakRefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent_;
505
+ };
506
+
507
+ //
508
+ // XdsServerConfigFetcher
509
+ //
510
+
511
+ XdsServerConfigFetcher::XdsServerConfigFetcher(
512
+ RefCountedPtr<GrpcXdsClient> xds_client,
513
+ grpc_server_xds_status_notifier notifier)
514
+ : xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
515
+ GRPC_CHECK(xds_client_ != nullptr);
516
+ }
517
+
518
+ std::string ListenerResourceName(absl::string_view resource_name_template,
519
+ absl::string_view listening_address) {
520
+ std::string tmp;
521
+ if (absl::StartsWith(resource_name_template, "xdstp:")) {
522
+ tmp = URI::PercentEncodePath(listening_address);
523
+ listening_address = tmp;
524
+ }
525
+ return absl::StrReplaceAll(resource_name_template,
526
+ {{"%s", listening_address}});
527
+ }
528
+
529
+ void XdsServerConfigFetcher::StartWatch(
530
+ std::string listening_address,
531
+ std::unique_ptr<ServerConfigFetcher::WatcherInterface> watcher) {
532
+ ServerConfigFetcher::WatcherInterface* watcher_ptr = watcher.get();
533
+ auto listener_watcher = MakeRefCounted<ListenerWatcher>(
534
+ xds_client_.Ref(DEBUG_LOCATION, "ListenerWatcher"), std::move(watcher),
535
+ serving_status_notifier_, listening_address);
536
+ auto* listener_watcher_ptr = listener_watcher.get();
537
+ XdsListenerResourceType::StartWatch(
538
+ xds_client_.get(),
539
+ ListenerResourceName(
540
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
541
+ .server_listener_resource_name_template(),
542
+ listening_address),
543
+ std::move(listener_watcher));
544
+ MutexLock lock(&mu_);
545
+ listener_watchers_.emplace(watcher_ptr, listener_watcher_ptr);
546
+ }
547
+
548
+ void XdsServerConfigFetcher::CancelWatch(
549
+ ServerConfigFetcher::WatcherInterface* watcher) {
550
+ MutexLock lock(&mu_);
551
+ auto it = listener_watchers_.find(watcher);
552
+ if (it != listener_watchers_.end()) {
553
+ // Cancel the watch on the listener before erasing
554
+ XdsListenerResourceType::CancelWatch(
555
+ xds_client_.get(),
556
+ ListenerResourceName(
557
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
558
+ .server_listener_resource_name_template(),
559
+ it->second->listening_address()),
560
+ it->second, false /* delay_unsubscription */);
561
+ listener_watchers_.erase(it);
562
+ }
563
+ }
564
+
565
+ //
566
+ // XdsServerConfigFetcher::ListenerWatcher
567
+ //
568
+
569
+ XdsServerConfigFetcher::ListenerWatcher::ListenerWatcher(
570
+ RefCountedPtr<GrpcXdsClient> xds_client,
571
+ std::unique_ptr<ServerConfigFetcher::WatcherInterface>
572
+ server_config_watcher,
573
+ grpc_server_xds_status_notifier serving_status_notifier,
574
+ std::string listening_address)
575
+ : xds_client_(std::move(xds_client)),
576
+ server_config_watcher_(std::move(server_config_watcher)),
577
+ serving_status_notifier_(serving_status_notifier),
578
+ listening_address_(std::move(listening_address)) {}
579
+
580
+ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
581
+ absl::StatusOr<std::shared_ptr<const XdsListenerResource>> listener,
582
+ RefCountedPtr<ReadDelayHandle> /* read_delay_handle */) {
583
+ if (!listener.ok()) {
584
+ MutexLock lock(&mu_);
585
+ OnFatalError(absl::Status(
586
+ listener.status().code(),
587
+ absl::StrCat("LDS resource: ", listener.status().message())));
588
+ return;
589
+ }
590
+ GRPC_TRACE_LOG(xds_server_config_fetcher, INFO)
591
+ << "[ListenerWatcher " << this << "] Received LDS update from xds client "
592
+ << xds_client_.get() << ": " << (*listener)->ToString();
593
+ auto* tcp_listener =
594
+ std::get_if<XdsListenerResource::TcpListener>(&(*listener)->listener);
595
+ if (tcp_listener == nullptr) {
596
+ MutexLock lock(&mu_);
597
+ OnFatalError(
598
+ absl::FailedPreconditionError("LDS resource is not a TCP listener"));
599
+ return;
600
+ }
601
+ if (tcp_listener->address != listening_address_) {
602
+ MutexLock lock(&mu_);
603
+ OnFatalError(absl::FailedPreconditionError(
604
+ "Address in LDS update does not match listening address"));
605
+ return;
606
+ }
607
+ auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
608
+ xds_client_.Ref(DEBUG_LOCATION, "FilterChainMatchManager"),
609
+ tcp_listener->filter_chain_map, tcp_listener->default_filter_chain);
610
+ MutexLock lock(&mu_);
611
+ if (filter_chain_match_manager_ == nullptr ||
612
+ !(new_filter_chain_match_manager->filter_chain_map() ==
613
+ filter_chain_match_manager_->filter_chain_map() &&
614
+ new_filter_chain_match_manager->default_filter_chain() ==
615
+ filter_chain_match_manager_->default_filter_chain())) {
616
+ pending_filter_chain_match_manager_ =
617
+ std::move(new_filter_chain_match_manager);
618
+ pending_filter_chain_match_manager_->StartRdsWatch(
619
+ RefAsSubclass<ListenerWatcher>());
620
+ }
621
+ }
622
+
623
+ void XdsServerConfigFetcher::ListenerWatcher::OnAmbientError(
624
+ absl::Status status, RefCountedPtr<ReadDelayHandle> /*read_delay_handle*/) {
625
+ LOG(ERROR) << "ListenerWatcher:" << this
626
+ << " XdsClient reports ambient error: " << status << " for "
627
+ << listening_address_
628
+ << "; ignoring in favor of existing resource";
629
+ }
630
+
631
+ void XdsServerConfigFetcher::ListenerWatcher::OnFatalError(
632
+ absl::Status status) {
633
+ pending_filter_chain_match_manager_.reset();
634
+ if (filter_chain_match_manager_ != nullptr) {
635
+ // The server has started listening already, so we need to gracefully
636
+ // stop serving.
637
+ server_config_watcher_->StopServing();
638
+ filter_chain_match_manager_.reset();
639
+ }
640
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
641
+ serving_status_notifier_.on_serving_status_update(
642
+ serving_status_notifier_.user_data, listening_address_.c_str(),
643
+ {static_cast<grpc_status_code>(status.raw_code()),
644
+ std::string(status.message()).c_str()});
645
+ } else {
646
+ LOG(ERROR) << "ListenerWatcher:" << this << " Encountered fatal error "
647
+ << status << "; not serving on " << listening_address_;
648
+ }
649
+ }
650
+
651
+ void XdsServerConfigFetcher::ListenerWatcher::
652
+ PendingFilterChainMatchManagerReadyLocked(
653
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager*
654
+ filter_chain_match_manager) {
655
+ if (pending_filter_chain_match_manager_ != filter_chain_match_manager) {
656
+ // This FilterChainMatchManager is no longer the current pending resource.
657
+ // It should get cleaned up eventually. Ignore this update.
658
+ return;
659
+ }
660
+ bool first_good_update = filter_chain_match_manager_ == nullptr;
661
+ // Promote the pending FilterChainMatchManager
662
+ filter_chain_match_manager_ = std::move(pending_filter_chain_match_manager_);
663
+ // TODO(yashykt): Right now, the server_config_watcher_ does not invoke
664
+ // XdsServerConfigFetcher while holding a lock, but that might change in the
665
+ // future in which case we would want to execute this update outside the
666
+ // critical region through a WorkSerializer similar to XdsClient.
667
+ server_config_watcher_->UpdateConnectionManager(filter_chain_match_manager_);
668
+ // Let the logger know about the update if there was no previous good update.
669
+ if (first_good_update) {
670
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
671
+ serving_status_notifier_.on_serving_status_update(
672
+ serving_status_notifier_.user_data, listening_address_.c_str(),
673
+ {GRPC_STATUS_OK, ""});
674
+ } else {
675
+ LOG(INFO) << "xDS Listener resource obtained; will start serving on "
676
+ << listening_address_;
677
+ }
678
+ }
679
+ }
680
+
681
+ //
682
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
683
+ //
684
+
685
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
686
+ FilterChainMatchManager(
687
+ RefCountedPtr<GrpcXdsClient> xds_client,
688
+ XdsListenerResource::FilterChainMap filter_chain_map,
689
+ std::optional<XdsListenerResource::FilterChainData>
690
+ default_filter_chain)
691
+ : xds_client_(std::move(xds_client)),
692
+ filter_chain_map_(std::move(filter_chain_map)),
693
+ default_filter_chain_(std::move(default_filter_chain)) {}
694
+
695
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
696
+ ForEachFilterChain(
697
+ absl::FunctionRef<void(XdsListenerResource::FilterChainData&)> cb) {
698
+ // A given FilterChainData object may appear more than once in the map,
699
+ // but we want to invoke the callback exactly once for each
700
+ // FilterChainData object. Therefore, we start by constructing a set
701
+ // of all FilterChainData objects by address, to weed out duplicates.
702
+ std::set<XdsListenerResource::FilterChainData*> filter_chain_data_set;
703
+ for (const auto& destination_ip : filter_chain_map_.destination_ip_vector) {
704
+ for (const auto& source_type : destination_ip.source_types_array) {
705
+ for (const auto& source_ip : source_type) {
706
+ for (const auto& source_port_pair : source_ip.ports_map) {
707
+ auto* filter_chain_data = source_port_pair.second.data.get();
708
+ filter_chain_data_set.insert(filter_chain_data);
709
+ }
710
+ }
711
+ }
712
+ }
713
+ // Invoke the callback once for each FilterChainData object.
714
+ for (auto* filter_chain_data : filter_chain_data_set) {
715
+ cb(*filter_chain_data);
716
+ }
717
+ // Also invoke the callback for the default filter chain, if present.
718
+ if (default_filter_chain_.has_value()) {
719
+ cb(*default_filter_chain_);
720
+ }
721
+ }
722
+
723
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
724
+ StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher) {
725
+ // Get the set of RDS resources to watch on. Also reverse the list of
726
+ // HTTP filters in each filter chain, since received data moves *up*
727
+ // the stack on the server side.
728
+ std::set<std::string> resource_names;
729
+ ForEachFilterChain(
730
+ [&](XdsListenerResource::FilterChainData& filter_chain_data) {
731
+ auto& hcm = filter_chain_data.http_connection_manager;
732
+ const auto* rds_name = std::get_if<std::string>(&hcm.route_config);
733
+ if (rds_name != nullptr) resource_names.insert(*rds_name);
734
+ std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
735
+ });
736
+ // Start watching referenced RDS resources.
737
+ struct WatcherToStart {
738
+ std::string resource_name;
739
+ RefCountedPtr<RouteConfigWatcher> watcher;
740
+ };
741
+ std::vector<WatcherToStart> watchers_to_start;
742
+ watchers_to_start.reserve(resource_names.size());
743
+ {
744
+ MutexLock lock(&mu_);
745
+ for (const auto& resource_name : resource_names) {
746
+ ++rds_resources_yet_to_fetch_;
747
+ auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(
748
+ resource_name, WeakRefAsSubclass<FilterChainMatchManager>());
749
+ rds_map_.emplace(resource_name, RdsUpdateState{route_config_watcher.get(),
750
+ std::nullopt});
751
+ watchers_to_start.push_back(
752
+ WatcherToStart{resource_name, std::move(route_config_watcher)});
753
+ }
754
+ if (rds_resources_yet_to_fetch_ != 0) {
755
+ listener_watcher_ = std::move(listener_watcher);
756
+ listener_watcher = nullptr;
757
+ }
758
+ }
759
+ for (auto& watcher_to_start : watchers_to_start) {
760
+ XdsRouteConfigResourceType::StartWatch(xds_client_.get(),
761
+ watcher_to_start.resource_name,
762
+ std::move(watcher_to_start.watcher));
763
+ }
764
+ // Promote this filter chain match manager if all referenced resources are
765
+ // fetched.
766
+ if (listener_watcher != nullptr) {
767
+ listener_watcher->PendingFilterChainMatchManagerReadyLocked(this);
768
+ }
769
+ }
770
+
771
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
772
+ Orphaned() {
773
+ MutexLock lock(&mu_);
774
+ // Cancel the RDS watches to clear up the weak refs
775
+ for (const auto& entry : rds_map_) {
776
+ XdsRouteConfigResourceType::CancelWatch(xds_client_.get(), entry.first,
777
+ entry.second.watcher,
778
+ false /* delay_unsubscription */);
779
+ }
780
+ // Also give up the ref on ListenerWatcher since it won't be needed anymore
781
+ listener_watcher_.reset();
782
+ }
783
+
784
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
785
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
786
+ CreateOrGetXdsCertificateProviderFromFilterChainData(
787
+ const XdsListenerResource::FilterChainData* filter_chain) {
788
+ MutexLock lock(&mu_);
789
+ auto it = certificate_providers_map_.find(filter_chain);
790
+ if (it != certificate_providers_map_.end()) return it->second;
791
+ // Configure root cert.
792
+ auto* ca_cert_provider =
793
+ std::get_if<CommonTlsContext::CertificateProviderPluginInstance>(
794
+ &filter_chain->downstream_tls_context.common_tls_context
795
+ .certificate_validation_context.ca_certs);
796
+ absl::string_view root_provider_cert_name;
797
+ RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider;
798
+ if (ca_cert_provider != nullptr) {
799
+ root_provider_cert_name = ca_cert_provider->certificate_name;
800
+ root_cert_provider =
801
+ xds_client_->certificate_provider_store()
802
+ .CreateOrGetCertificateProvider(ca_cert_provider->instance_name);
803
+ if (root_cert_provider == nullptr) {
804
+ return absl::NotFoundError(
805
+ absl::StrCat("Certificate provider instance name: \"",
806
+ ca_cert_provider->instance_name, "\" not recognized."));
807
+ }
808
+ }
809
+ // Configure identity cert.
810
+ absl::string_view identity_provider_instance_name =
811
+ filter_chain->downstream_tls_context.common_tls_context
812
+ .tls_certificate_provider_instance.instance_name;
813
+ absl::string_view identity_provider_cert_name =
814
+ filter_chain->downstream_tls_context.common_tls_context
815
+ .tls_certificate_provider_instance.certificate_name;
816
+ RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider;
817
+ if (!identity_provider_instance_name.empty()) {
818
+ identity_cert_provider =
819
+ xds_client_->certificate_provider_store()
820
+ .CreateOrGetCertificateProvider(identity_provider_instance_name);
821
+ if (identity_cert_provider == nullptr) {
822
+ return absl::NotFoundError(
823
+ absl::StrCat("Certificate provider instance name: \"",
824
+ identity_provider_instance_name, "\" not recognized."));
825
+ }
826
+ }
827
+ auto xds_cert_provider = MakeRefCounted<XdsCertificateProvider>(
828
+ std::move(root_cert_provider), root_provider_cert_name,
829
+ std::move(identity_cert_provider), identity_provider_cert_name,
830
+ filter_chain->downstream_tls_context.require_client_certificate);
831
+ certificate_providers_map_.emplace(filter_chain, xds_cert_provider);
832
+ return xds_cert_provider;
833
+ }
834
+
835
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
836
+ OnRouteConfigChanged(
837
+ const std::string& resource_name,
838
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
839
+ route_config) {
840
+ RefCountedPtr<ListenerWatcher> listener_watcher;
841
+ {
842
+ MutexLock lock(&mu_);
843
+ auto& state = rds_map_[resource_name];
844
+ if (!state.rds_update.has_value()) {
845
+ if (--rds_resources_yet_to_fetch_ == 0) {
846
+ listener_watcher = std::move(listener_watcher_);
847
+ }
848
+ }
849
+ if (!route_config.ok()) {
850
+ route_config = absl::UnavailableError(
851
+ absl::StrCat("RDS resource ", resource_name, ": ",
852
+ route_config.status().message()));
853
+ }
854
+ state.rds_update = std::move(route_config);
855
+ }
856
+ // Promote the filter chain match manager object if all the referenced
857
+ // resources are fetched.
858
+ if (listener_watcher != nullptr) {
859
+ listener_watcher->PendingFilterChainMatchManagerReady(this);
860
+ }
861
+ }
862
+
863
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
864
+ OnAmbientError(const std::string& resource_name, absl::Status status) {
865
+ LOG(ERROR) << "RouteConfigWatcher:" << this
866
+ << " XdsClient reports ambient error: " << status << " for "
867
+ << resource_name << "; ignoring in favor of existing resource";
868
+ }
869
+
870
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourcePort(
871
+ const XdsListenerResource::FilterChainMap::SourcePortsMap& source_ports_map,
872
+ absl::string_view port_str) {
873
+ int port = 0;
874
+ if (!absl::SimpleAtoi(port_str, &port)) return nullptr;
875
+ auto it = source_ports_map.find(port);
876
+ if (it != source_ports_map.end()) {
877
+ return it->second.data.get();
878
+ }
879
+ // Search for the catch-all port 0 since we didn't get a direct match
880
+ it = source_ports_map.find(0);
881
+ if (it != source_ports_map.end()) {
882
+ return it->second.data.get();
883
+ }
884
+ return nullptr;
885
+ }
886
+
887
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourceIp(
888
+ const XdsListenerResource::FilterChainMap::SourceIpVector& source_ip_vector,
889
+ const grpc_resolved_address* source_ip, absl::string_view port) {
890
+ const XdsListenerResource::FilterChainMap::SourceIp* best_match = nullptr;
891
+ for (const auto& entry : source_ip_vector) {
892
+ // Special case for catch-all
893
+ if (!entry.prefix_range.has_value()) {
894
+ if (best_match == nullptr) {
895
+ best_match = &entry;
896
+ }
897
+ continue;
898
+ }
899
+ if (best_match != nullptr && best_match->prefix_range.has_value() &&
900
+ best_match->prefix_range->prefix_len >=
901
+ entry.prefix_range->prefix_len) {
902
+ continue;
903
+ }
904
+ if (grpc_sockaddr_match_subnet(source_ip, &entry.prefix_range->address,
905
+ entry.prefix_range->prefix_len)) {
906
+ best_match = &entry;
907
+ }
908
+ }
909
+ if (best_match == nullptr) return nullptr;
910
+ return FindFilterChainDataForSourcePort(best_match->ports_map, port);
911
+ }
912
+
913
+ bool IsLoopbackIp(const grpc_resolved_address* address) {
914
+ const grpc_sockaddr* sock_addr =
915
+ reinterpret_cast<const grpc_sockaddr*>(&address->addr);
916
+ if (sock_addr->sa_family == GRPC_AF_INET) {
917
+ const grpc_sockaddr_in* addr4 =
918
+ reinterpret_cast<const grpc_sockaddr_in*>(sock_addr);
919
+ if (addr4->sin_addr.s_addr == grpc_htonl(INADDR_LOOPBACK)) {
920
+ return true;
921
+ }
922
+ } else if (sock_addr->sa_family == GRPC_AF_INET6) {
923
+ const grpc_sockaddr_in6* addr6 =
924
+ reinterpret_cast<const grpc_sockaddr_in6*>(sock_addr);
925
+ if (memcmp(&addr6->sin6_addr, &in6addr_loopback,
926
+ sizeof(in6addr_loopback)) == 0) {
927
+ return true;
928
+ }
929
+ }
930
+ return false;
931
+ }
932
+
933
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForSourceType(
934
+ const XdsListenerResource::FilterChainMap::ConnectionSourceTypesArray&
935
+ source_types_array,
936
+ grpc_endpoint* tcp, absl::string_view destination_ip) {
937
+ auto source_uri = URI::Parse(grpc_endpoint_get_peer(tcp));
938
+ if (!source_uri.ok() ||
939
+ (source_uri->scheme() != "ipv4" && source_uri->scheme() != "ipv6")) {
940
+ return nullptr;
941
+ }
942
+ std::string host;
943
+ std::string port;
944
+ if (!SplitHostPort(source_uri->path(), &host, &port)) {
945
+ return nullptr;
946
+ }
947
+ auto source_addr = StringToSockaddr(host, 0); // Port doesn't matter here.
948
+ if (!source_addr.ok()) {
949
+ VLOG(2) << "Could not parse \"" << host
950
+ << "\" as socket address: " << source_addr.status();
951
+ return nullptr;
952
+ }
953
+ // Use kAny only if kSameIporLoopback and kExternal are empty
954
+ if (source_types_array[static_cast<int>(
955
+ XdsListenerResource::FilterChainMap::
956
+ ConnectionSourceType::kSameIpOrLoopback)]
957
+ .empty() &&
958
+ source_types_array[static_cast<int>(XdsListenerResource::FilterChainMap::
959
+ ConnectionSourceType::kExternal)]
960
+ .empty()) {
961
+ return FindFilterChainDataForSourceIp(
962
+ source_types_array[static_cast<int>(
963
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::kAny)],
964
+ &*source_addr, port);
965
+ }
966
+ if (IsLoopbackIp(&*source_addr) || host == destination_ip) {
967
+ return FindFilterChainDataForSourceIp(
968
+ source_types_array[static_cast<int>(
969
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::
970
+ kSameIpOrLoopback)],
971
+ &*source_addr, port);
972
+ } else {
973
+ return FindFilterChainDataForSourceIp(
974
+ source_types_array[static_cast<int>(
975
+ XdsListenerResource::FilterChainMap::ConnectionSourceType::
976
+ kExternal)],
977
+ &*source_addr, port);
978
+ }
979
+ }
980
+
981
+ const XdsListenerResource::FilterChainData* FindFilterChainDataForDestinationIp(
982
+ const XdsListenerResource::FilterChainMap::DestinationIpVector
983
+ destination_ip_vector,
984
+ grpc_endpoint* tcp) {
985
+ auto destination_uri = URI::Parse(grpc_endpoint_get_local_address(tcp));
986
+ if (!destination_uri.ok() || (destination_uri->scheme() != "ipv4" &&
987
+ destination_uri->scheme() != "ipv6")) {
988
+ return nullptr;
989
+ }
990
+ std::string host;
991
+ std::string port;
992
+ if (!SplitHostPort(destination_uri->path(), &host, &port)) {
993
+ return nullptr;
994
+ }
995
+ auto destination_addr =
996
+ StringToSockaddr(host, 0); // Port doesn't matter here.
997
+ if (!destination_addr.ok()) {
998
+ VLOG(2) << "Could not parse \"" << host
999
+ << "\" as socket address: " << destination_addr.status();
1000
+ return nullptr;
1001
+ }
1002
+ const XdsListenerResource::FilterChainMap::DestinationIp* best_match =
1003
+ nullptr;
1004
+ for (const auto& entry : destination_ip_vector) {
1005
+ // Special case for catch-all
1006
+ if (!entry.prefix_range.has_value()) {
1007
+ if (best_match == nullptr) {
1008
+ best_match = &entry;
1009
+ }
1010
+ continue;
1011
+ }
1012
+ if (best_match != nullptr && best_match->prefix_range.has_value() &&
1013
+ best_match->prefix_range->prefix_len >=
1014
+ entry.prefix_range->prefix_len) {
1015
+ continue;
1016
+ }
1017
+ if (grpc_sockaddr_match_subnet(&*destination_addr,
1018
+ &entry.prefix_range->address,
1019
+ entry.prefix_range->prefix_len)) {
1020
+ best_match = &entry;
1021
+ }
1022
+ }
1023
+ if (best_match == nullptr) return nullptr;
1024
+ return FindFilterChainDataForSourceType(best_match->source_types_array, tcp,
1025
+ host);
1026
+ }
1027
+
1028
+ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
1029
+ FilterChainMatchManager::UpdateChannelArgsForConnection(
1030
+ const ChannelArgs& input_args, grpc_endpoint* tcp) {
1031
+ ChannelArgs args = input_args;
1032
+ const auto* filter_chain = FindFilterChainDataForDestinationIp(
1033
+ filter_chain_map_.destination_ip_vector, tcp);
1034
+ if (filter_chain == nullptr && default_filter_chain_.has_value()) {
1035
+ filter_chain = &default_filter_chain_.value();
1036
+ }
1037
+ if (filter_chain == nullptr) {
1038
+ return absl::UnavailableError("No matching filter chain found");
1039
+ }
1040
+ RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider;
1041
+ RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier;
1042
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider;
1043
+ // Iterate the list of HTTP filters in reverse since in Core, received data
1044
+ // flows *up* the stack.
1045
+ std::vector<const grpc_channel_filter*> filters;
1046
+ const auto& http_filter_registry =
1047
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1048
+ .http_filter_registry();
1049
+ for (const auto& http_filter :
1050
+ filter_chain->http_connection_manager.http_filters) {
1051
+ // Find filter. This is guaranteed to succeed, because it's checked
1052
+ // at config validation time in the XdsApi code.
1053
+ const XdsHttpFilterImpl* filter_impl =
1054
+ http_filter_registry.GetFilterForTopLevelType(
1055
+ http_filter.config_proto_type);
1056
+ GRPC_CHECK_NE(filter_impl, nullptr);
1057
+ // Some filters like the router filter are no-op filters and do not have
1058
+ // an implementation.
1059
+ if (filter_impl->channel_filter() != nullptr) {
1060
+ filters.push_back(filter_impl->channel_filter());
1061
+ }
1062
+ }
1063
+ // Add config selector filter.
1064
+ filters.push_back(&kLegacyServerConfigSelectorFilter);
1065
+ channel_stack_modifier =
1066
+ MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
1067
+ Match(
1068
+ filter_chain->http_connection_manager.route_config,
1069
+ // RDS resource name
1070
+ [&](const std::string& rds_name) {
1071
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
1072
+ initial_resource;
1073
+ {
1074
+ MutexLock lock(&mu_);
1075
+ initial_resource = rds_map_[rds_name].rds_update.value();
1076
+ }
1077
+ server_config_selector_provider =
1078
+ MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
1079
+ xds_client_.Ref(DEBUG_LOCATION,
1080
+ "DynamicXdsServerConfigSelectorProvider"),
1081
+ rds_name, std::move(initial_resource),
1082
+ filter_chain->http_connection_manager.http_filters);
1083
+ },
1084
+ // inline RouteConfig
1085
+ [&](const std::shared_ptr<const XdsRouteConfigResource>& route_config) {
1086
+ server_config_selector_provider =
1087
+ MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
1088
+ xds_client_.Ref(DEBUG_LOCATION,
1089
+ "StaticXdsServerConfigSelectorProvider"),
1090
+ route_config,
1091
+ filter_chain->http_connection_manager.http_filters);
1092
+ });
1093
+ args = args.SetObject(server_config_selector_provider)
1094
+ .SetObject(channel_stack_modifier);
1095
+ // Add XdsCertificateProvider if credentials are xDS.
1096
+ auto* server_creds = args.GetObject<grpc_server_credentials>();
1097
+ if (server_creds != nullptr &&
1098
+ server_creds->type() == XdsServerCredentials::Type()) {
1099
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
1100
+ CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
1101
+ if (!result.ok()) {
1102
+ return result.status();
1103
+ }
1104
+ xds_certificate_provider = std::move(*result);
1105
+ GRPC_CHECK(xds_certificate_provider != nullptr);
1106
+ args = args.SetObject(xds_certificate_provider);
1107
+ }
1108
+ return args;
1109
+ }
1110
+
1111
+ //
1112
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::XdsServerConfigSelector
1113
+ //
1114
+
1115
+ absl::StatusOr<
1116
+ RefCountedPtr<XdsServerConfigFetcher::ListenerWatcher::
1117
+ FilterChainMatchManager::XdsServerConfigSelector>>
1118
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1119
+ XdsServerConfigSelector::Create(
1120
+ const XdsHttpFilterRegistry& http_filter_registry,
1121
+ std::shared_ptr<const XdsRouteConfigResource> rds_update,
1122
+ const std::vector<
1123
+ XdsListenerResource::HttpConnectionManager::HttpFilter>&
1124
+ http_filters) {
1125
+ auto config_selector = MakeRefCounted<XdsServerConfigSelector>();
1126
+ for (auto& vhost : rds_update->virtual_hosts) {
1127
+ config_selector->virtual_hosts_.emplace_back();
1128
+ auto& virtual_host = config_selector->virtual_hosts_.back();
1129
+ virtual_host.domains = vhost.domains;
1130
+ for (auto& route : vhost.routes) {
1131
+ virtual_host.routes.emplace_back();
1132
+ auto& config_selector_route = virtual_host.routes.back();
1133
+ config_selector_route.matchers = route.matchers;
1134
+ config_selector_route.unsupported_action =
1135
+ std::get_if<XdsRouteConfigResource::Route::NonForwardingAction>(
1136
+ &route.action) == nullptr;
1137
+ auto result = XdsRouting::GeneratePerHTTPFilterConfigsForMethodConfig(
1138
+ http_filter_registry, http_filters, vhost, route, nullptr,
1139
+ ChannelArgs());
1140
+ if (!result.ok()) return result.status();
1141
+ std::vector<std::string> fields;
1142
+ fields.reserve(result->per_filter_configs.size());
1143
+ for (const auto& p : result->per_filter_configs) {
1144
+ fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
1145
+ absl::StrJoin(p.second, ",\n"),
1146
+ "\n ]"));
1147
+ }
1148
+ if (!fields.empty()) {
1149
+ std::string json = absl::StrCat(
1150
+ "{\n"
1151
+ " \"methodConfig\": [ {\n"
1152
+ " \"name\": [\n"
1153
+ " {}\n"
1154
+ " ],\n"
1155
+ " ",
1156
+ absl::StrJoin(fields, ",\n"),
1157
+ "\n } ]\n"
1158
+ "}");
1159
+ config_selector_route.method_config =
1160
+ ServiceConfigImpl::Create(result->args, json.c_str()).value();
1161
+ }
1162
+ }
1163
+ }
1164
+ return config_selector;
1165
+ }
1166
+
1167
+ absl::StatusOr<ServerConfigSelector::CallConfig>
1168
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1169
+ XdsServerConfigSelector::GetCallConfig(grpc_metadata_batch* metadata) {
1170
+ CallConfig call_config;
1171
+ if (metadata->get_pointer(HttpPathMetadata()) == nullptr) {
1172
+ return absl::InternalError("no path found");
1173
+ }
1174
+ absl::string_view path =
1175
+ metadata->get_pointer(HttpPathMetadata())->as_string_view();
1176
+ if (metadata->get_pointer(HttpAuthorityMetadata()) == nullptr) {
1177
+ return absl::InternalError("no authority found");
1178
+ }
1179
+ absl::string_view authority =
1180
+ metadata->get_pointer(HttpAuthorityMetadata())->as_string_view();
1181
+ auto vhost_index = XdsRouting::FindVirtualHostForDomain(
1182
+ VirtualHostListIterator(&virtual_hosts_), authority);
1183
+ if (!vhost_index.has_value()) {
1184
+ return absl::UnavailableError(
1185
+ absl::StrCat("could not find VirtualHost for ", authority,
1186
+ " in RouteConfiguration"));
1187
+ }
1188
+ auto& virtual_host = virtual_hosts_[vhost_index.value()];
1189
+ auto route_index = XdsRouting::GetRouteForRequest(
1190
+ VirtualHost::RouteListIterator(&virtual_host.routes), path, metadata);
1191
+ if (route_index.has_value()) {
1192
+ auto& route = virtual_host.routes[route_index.value()];
1193
+ // Found the matching route
1194
+ if (route.unsupported_action) {
1195
+ return absl::UnavailableError("matching route has unsupported action");
1196
+ }
1197
+ if (route.method_config != nullptr) {
1198
+ call_config.method_configs =
1199
+ route.method_config->GetMethodParsedConfigVector(grpc_empty_slice());
1200
+ call_config.service_config = route.method_config;
1201
+ }
1202
+ return call_config;
1203
+ }
1204
+ return absl::UnavailableError("no route matched");
1205
+ }
1206
+
1207
+ //
1208
+ // XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::DynamicXdsServerConfigSelectorProvider
1209
+ //
1210
+
1211
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1212
+ DynamicXdsServerConfigSelectorProvider::
1213
+ DynamicXdsServerConfigSelectorProvider(
1214
+ RefCountedPtr<GrpcXdsClient> xds_client, std::string resource_name,
1215
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
1216
+ initial_resource,
1217
+ std::vector<XdsListenerResource::HttpConnectionManager::HttpFilter>
1218
+ http_filters)
1219
+ : xds_client_(std::move(xds_client)),
1220
+ resource_name_(std::move(resource_name)),
1221
+ http_filters_(std::move(http_filters)),
1222
+ resource_(std::move(initial_resource)) {
1223
+ GRPC_CHECK(!resource_name_.empty());
1224
+ // RouteConfigWatcher is being created here instead of in Watch() to avoid
1225
+ // deadlocks from invoking XdsRouteConfigResourceType::StartWatch whilst in a
1226
+ // critical region.
1227
+ auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(
1228
+ WeakRefAsSubclass<DynamicXdsServerConfigSelectorProvider>());
1229
+ route_config_watcher_ = route_config_watcher.get();
1230
+ XdsRouteConfigResourceType::StartWatch(xds_client_.get(), resource_name_,
1231
+ std::move(route_config_watcher));
1232
+ }
1233
+
1234
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1235
+ DynamicXdsServerConfigSelectorProvider::Orphaned() {
1236
+ XdsRouteConfigResourceType::CancelWatch(xds_client_.get(), resource_name_,
1237
+ route_config_watcher_,
1238
+ false /* delay_unsubscription */);
1239
+ }
1240
+
1241
+ absl::StatusOr<RefCountedPtr<ServerConfigSelector>>
1242
+ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1243
+ DynamicXdsServerConfigSelectorProvider::Watch(
1244
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) {
1245
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>> resource;
1246
+ {
1247
+ MutexLock lock(&mu_);
1248
+ GRPC_CHECK(watcher_ == nullptr);
1249
+ watcher_ = std::move(watcher);
1250
+ resource = resource_;
1251
+ }
1252
+ if (!resource.ok()) {
1253
+ return resource.status();
1254
+ }
1255
+ return XdsServerConfigSelector::Create(
1256
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1257
+ .http_filter_registry(),
1258
+ resource.value(), http_filters_);
1259
+ }
1260
+
1261
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1262
+ DynamicXdsServerConfigSelectorProvider::CancelWatch(
1263
+ std::shared_ptr<ServerConfigSelectorWatcher> watcher) {
1264
+ MutexLock lock(&mu_);
1265
+ GRPC_CHECK(watcher == watcher_);
1266
+ watcher_.reset();
1267
+ }
1268
+
1269
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1270
+ DynamicXdsServerConfigSelectorProvider::OnRouteConfigChanged(
1271
+ absl::StatusOr<std::shared_ptr<const XdsRouteConfigResource>>
1272
+ rds_update) {
1273
+ MutexLock lock(&mu_);
1274
+ if (!rds_update.ok()) {
1275
+ rds_update = absl::UnavailableError(absl::StrCat(
1276
+ "RDS resource ", resource_name_, ": ", rds_update.status().message()));
1277
+ }
1278
+ resource_ = std::move(rds_update);
1279
+ if (watcher_ == nullptr) {
1280
+ return;
1281
+ }
1282
+ // Currently server_config_selector_filter does not call into
1283
+ // DynamicXdsServerConfigSelectorProvider while holding a lock, but if that
1284
+ // ever changes, we would want to invoke the update outside the critical
1285
+ // region with the use of a WorkSerializer.
1286
+ if (!resource_.ok()) {
1287
+ watcher_->OnServerConfigSelectorUpdate(resource_.status());
1288
+ } else {
1289
+ watcher_->OnServerConfigSelectorUpdate(XdsServerConfigSelector::Create(
1290
+ DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1291
+ .http_filter_registry(),
1292
+ *resource_, http_filters_));
1293
+ }
1294
+ }
1295
+
1296
+ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1297
+ DynamicXdsServerConfigSelectorProvider::OnAmbientError(
1298
+ absl::Status status) {
1299
+ LOG(ERROR) << "RouteConfigWatcher:" << this
1300
+ << " XdsClient reports ambient error: " << status << " for "
1301
+ << resource_name_ << "; ignoring in favor of existing resource";
1302
+ }
1303
+
1304
+ } // namespace
1305
+ } // namespace grpc_core
1306
+
1307
+ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create_legacy(
1308
+ grpc_server_xds_status_notifier notifier, const grpc_channel_args* args) {
1309
+ grpc_core::ExecCtx exec_ctx;
1310
+ grpc_core::ChannelArgs channel_args = grpc_core::CoreConfiguration::Get()
1311
+ .channel_args_preconditioning()
1312
+ .PreconditionChannelArgs(args);
1313
+ GRPC_TRACE_LOG(api, INFO)
1314
+ << "grpc_server_config_fetcher_xds_create(notifier={on_serving_status_"
1315
+ "update="
1316
+ << notifier.on_serving_status_update
1317
+ << ", user_data=" << notifier.user_data << "}, args=" << args << ")";
1318
+ auto xds_client = grpc_core::GrpcXdsClient::GetOrCreate(
1319
+ grpc_core::GrpcXdsClient::kServerKey, channel_args,
1320
+ "XdsServerConfigFetcher");
1321
+ if (!xds_client.ok()) {
1322
+ LOG(ERROR) << "Failed to create xds client: " << xds_client.status();
1323
+ return nullptr;
1324
+ }
1325
+ if (grpc_core::DownCast<const grpc_core::GrpcXdsBootstrap&>(
1326
+ (*xds_client)->bootstrap())
1327
+ .server_listener_resource_name_template()
1328
+ .empty()) {
1329
+ LOG(ERROR) << "server_listener_resource_name_template not provided in "
1330
+ "bootstrap file.";
1331
+ return nullptr;
1332
+ }
1333
+ return (new grpc_core::XdsServerConfigFetcher(std::move(*xds_client),
1334
+ notifier))
1335
+ ->c_ptr();
1336
+ }