grpc 1.81.1 → 1.83.0

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 (948) 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/message_size/message_size_filter.cc +1 -81
  72. data/src/core/ext/filters/message_size/message_size_filter.h +1 -50
  73. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -1
  74. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -56
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -14
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +184 -54
  78. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +84 -15
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  81. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -2
  83. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +2 -4
  84. data/src/core/ext/transport/chttp2/transport/frame.cc +120 -13
  85. data/src/core/ext/transport/chttp2/transport/frame.h +57 -10
  86. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -1
  87. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +13 -7
  88. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  92. data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
  93. data/src/core/ext/transport/chttp2/transport/goaway.h +17 -1
  94. data/src/core/ext/transport/chttp2/transport/header_assembler.h +54 -22
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +53 -5
  96. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +22 -0
  97. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +20 -0
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +42 -1
  99. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  100. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +219 -417
  101. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +49 -29
  102. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +2073 -0
  103. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +746 -0
  104. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  105. data/src/core/ext/transport/chttp2/transport/http2_settings.h +49 -15
  106. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +0 -2
  107. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +74 -26
  108. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +39 -15
  109. data/src/core/ext/transport/chttp2/transport/http2_transport.h +18 -48
  110. data/src/core/ext/transport/chttp2/transport/internal.h +18 -0
  111. data/src/core/ext/transport/chttp2/transport/message_assembler.h +1 -2
  112. data/src/core/ext/transport/chttp2/transport/parsing.cc +85 -26
  113. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +1 -1
  114. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +4 -10
  115. data/src/core/ext/transport/chttp2/transport/read_context.h +494 -0
  116. data/src/core/ext/transport/chttp2/transport/security_frame.h +13 -3
  117. data/src/core/ext/transport/chttp2/transport/stream.h +287 -137
  118. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +83 -65
  119. data/src/core/ext/transport/chttp2/transport/write_cycle.h +9 -1
  120. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -2
  121. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +621 -432
  122. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +264 -166
  123. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +0 -13
  124. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +708 -497
  125. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +294 -176
  126. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +0 -15
  127. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +262 -181
  128. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +84 -58
  129. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +0 -5
  130. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +254 -190
  131. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +107 -53
  132. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +0 -4
  133. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +271 -190
  134. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +88 -64
  135. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +0 -5
  136. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +1035 -730
  137. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +384 -260
  138. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +0 -19
  139. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +87 -56
  140. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +26 -16
  141. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +0 -2
  142. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +105 -71
  143. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +30 -22
  144. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +0 -2
  145. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +31 -29
  146. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +19 -7
  147. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +0 -1
  148. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +25 -23
  149. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +15 -7
  150. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +0 -1
  151. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +25 -23
  152. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +15 -7
  153. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +0 -1
  154. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +201 -165
  155. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +79 -31
  156. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +0 -2
  157. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +29 -26
  158. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +17 -11
  159. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +0 -1
  160. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +46 -29
  161. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +37 -19
  162. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +4 -4
  163. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +34 -27
  164. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +34 -13
  165. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +1 -2
  166. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +617 -452
  167. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +221 -163
  168. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +0 -16
  169. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1339 -970
  170. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +484 -324
  171. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +0 -23
  172. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +181 -135
  173. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +59 -43
  174. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +0 -3
  175. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1353 -1028
  176. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +535 -361
  177. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +0 -25
  178. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +37 -33
  179. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +19 -13
  180. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +0 -1
  181. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +234 -196
  182. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +77 -57
  183. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +0 -1
  184. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +695 -502
  185. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +246 -186
  186. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +0 -15
  187. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +140 -116
  188. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +53 -43
  189. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +0 -3
  190. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +363 -269
  191. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +131 -89
  192. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +0 -8
  193. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +35 -31
  194. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +15 -13
  195. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +0 -1
  196. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +1073 -769
  197. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +515 -293
  198. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +0 -30
  199. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +25 -23
  200. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +15 -7
  201. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +0 -1
  202. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +375 -267
  203. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +142 -86
  204. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +0 -7
  205. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +32 -27
  206. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +13 -11
  207. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +0 -1
  208. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +29 -26
  209. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +17 -11
  210. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +0 -1
  211. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +87 -56
  212. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +26 -16
  213. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +0 -2
  214. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +634 -468
  215. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +255 -161
  216. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +0 -14
  217. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -474
  218. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +228 -130
  219. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +0 -9
  220. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +56 -40
  221. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +15 -13
  222. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +0 -1
  223. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +34 -29
  224. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +19 -11
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +0 -1
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +811 -635
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +347 -221
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +0 -16
  229. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +174 -118
  230. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +62 -38
  231. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +0 -4
  232. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +78 -57
  233. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +28 -18
  234. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +0 -2
  235. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +37 -33
  236. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +22 -14
  237. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +0 -1
  238. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +159 -119
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +47 -35
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +0 -5
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +101 -76
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +41 -23
  243. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +0 -2
  244. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +35 -31
  245. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +15 -13
  246. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +0 -1
  247. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +189 -127
  248. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +79 -49
  249. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +0 -4
  250. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +378 -283
  251. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +156 -98
  252. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +0 -8
  253. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +354 -255
  254. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +125 -69
  255. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +0 -6
  256. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +27 -24
  257. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +13 -11
  258. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +0 -1
  259. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +611 -451
  260. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +159 -119
  261. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +0 -11
  262. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +468 -321
  263. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +157 -99
  264. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -6
  265. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +146 -119
  266. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +55 -35
  267. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +0 -1
  268. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +61 -51
  269. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +16 -16
  270. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +0 -2
  271. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +43 -39
  272. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +25 -13
  273. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +0 -1
  274. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +341 -247
  275. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +130 -84
  276. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +0 -8
  277. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +452 -313
  278. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +144 -100
  279. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +0 -10
  280. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +666 -493
  281. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +251 -181
  282. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +0 -12
  283. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +327 -197
  284. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +92 -48
  285. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +0 -3
  286. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3583 -2532
  287. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +1340 -816
  288. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +0 -60
  289. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +111 -82
  290. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +48 -28
  291. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +0 -3
  292. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +548 -410
  293. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +214 -148
  294. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +0 -12
  295. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +59 -50
  296. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +30 -20
  297. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +0 -2
  298. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +29 -26
  299. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +17 -11
  300. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +0 -1
  301. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +60 -49
  302. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +28 -20
  303. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +0 -2
  304. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +50 -36
  305. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +19 -11
  306. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +0 -1
  307. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +82 -63
  308. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +27 -19
  309. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +0 -1
  310. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +27 -24
  311. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +13 -11
  312. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +0 -1
  313. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +70 -58
  314. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +32 -22
  315. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +0 -2
  316. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -5
  317. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +1 -1
  318. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +73 -62
  319. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +39 -25
  320. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +0 -2
  321. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +49 -45
  322. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +33 -13
  323. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +0 -1
  324. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +771 -588
  325. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +383 -185
  326. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +0 -16
  327. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +66 -47
  328. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +31 -17
  329. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +0 -2
  330. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb.h +69 -58
  331. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.c +27 -23
  332. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.h +0 -2
  333. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +151 -119
  334. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +45 -39
  335. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +0 -5
  336. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb.h +19 -17
  337. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.c +1 -3
  338. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.h +0 -1
  339. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb.h +144 -109
  340. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.c +46 -38
  341. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.h +0 -4
  342. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +184 -139
  343. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +65 -35
  344. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +0 -3
  345. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +129 -106
  346. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +69 -41
  347. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +0 -4
  348. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +83 -71
  349. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +40 -26
  350. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +0 -2
  351. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +148 -101
  352. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +45 -27
  353. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +0 -2
  354. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +62 -51
  355. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +35 -21
  356. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +0 -2
  357. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1362 -1024
  358. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +508 -336
  359. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +0 -22
  360. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +21 -19
  361. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +13 -7
  362. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +0 -1
  363. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +35 -31
  364. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +15 -13
  365. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +0 -1
  366. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +27 -24
  367. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +13 -11
  368. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +0 -1
  369. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +27 -24
  370. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +13 -11
  371. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +0 -1
  372. 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
  373. 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
  374. 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
  375. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +231 -179
  376. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +88 -66
  377. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +0 -6
  378. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +21 -19
  379. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +13 -7
  380. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +0 -1
  381. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +63 -56
  382. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +31 -19
  383. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +0 -1
  384. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +27 -24
  385. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +13 -11
  386. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +0 -1
  387. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +27 -24
  388. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +13 -11
  389. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +0 -1
  390. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -5
  391. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +1 -1
  392. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +538 -364
  393. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +157 -95
  394. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +0 -8
  395. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -110
  396. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +69 -49
  397. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +0 -4
  398. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +517 -389
  399. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +182 -116
  400. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +0 -7
  401. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +84 -62
  402. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +30 -22
  403. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +0 -2
  404. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +340 -256
  405. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +92 -82
  406. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +0 -5
  407. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +19 -17
  408. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -3
  409. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +0 -1
  410. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +857 -566
  411. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +288 -182
  412. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +0 -15
  413. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +105 -72
  414. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +36 -22
  415. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +0 -2
  416. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +312 -226
  417. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +132 -78
  418. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +0 -5
  419. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +82 -61
  420. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -19
  421. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +0 -2
  422. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +123 -89
  423. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +25 -25
  424. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +0 -4
  425. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +48 -33
  426. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +13 -11
  427. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +0 -1
  428. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +42 -36
  429. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +19 -13
  430. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +0 -1
  431. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +101 -79
  432. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +61 -31
  433. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +0 -5
  434. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +83 -60
  435. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +37 -19
  436. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +0 -2
  437. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +56 -40
  438. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +15 -13
  439. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +0 -1
  440. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +34 -29
  441. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +13 -11
  442. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +0 -1
  443. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +32 -27
  444. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +13 -11
  445. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +0 -1
  446. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +88 -71
  447. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +48 -30
  448. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +0 -3
  449. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +37 -30
  450. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +1 -5
  451. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +0 -2
  452. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +95 -71
  453. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +36 -22
  454. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +0 -2
  455. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +79 -56
  456. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +26 -18
  457. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +0 -2
  458. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +164 -124
  459. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +54 -40
  460. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +0 -4
  461. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +200 -147
  462. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +47 -41
  463. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +0 -7
  464. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +160 -130
  465. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +89 -47
  466. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +0 -5
  467. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +78 -62
  468. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +26 -20
  469. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +0 -3
  470. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -5
  471. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +1 -1
  472. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +21 -19
  473. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +13 -7
  474. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +0 -1
  475. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +43 -36
  476. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +22 -12
  477. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +0 -2
  478. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +67 -55
  479. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +36 -18
  480. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +0 -3
  481. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +62 -51
  482. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +33 -19
  483. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +0 -2
  484. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -5
  485. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +1 -1
  486. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +25 -23
  487. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +15 -7
  488. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +0 -1
  489. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +37 -33
  490. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +19 -13
  491. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +0 -1
  492. data/src/core/ext/upb-gen/google/api/annotations.upb.h +15 -13
  493. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +22 -7
  494. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +1 -1
  495. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +619 -430
  496. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +260 -168
  497. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +0 -13
  498. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +734 -518
  499. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +312 -182
  500. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +0 -16
  501. data/src/core/ext/upb-gen/google/api/http.upb.h +146 -105
  502. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +65 -29
  503. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +0 -3
  504. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +52 -37
  505. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +19 -11
  506. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +0 -1
  507. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +23 -21
  508. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +15 -7
  509. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +0 -1
  510. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2236 -1514
  511. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +824 -406
  512. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +0 -34
  513. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +23 -21
  514. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +15 -7
  515. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +0 -1
  516. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +19 -17
  517. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -3
  518. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +0 -1
  519. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +149 -100
  520. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +59 -43
  521. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +0 -4
  522. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +23 -21
  523. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +15 -7
  524. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +0 -1
  525. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +181 -139
  526. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +99 -53
  527. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +0 -9
  528. data/src/core/ext/upb-gen/google/rpc/status.upb.h +52 -37
  529. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +19 -11
  530. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +0 -1
  531. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +1553 -1157
  532. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +712 -410
  533. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +0 -39
  534. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +189 -125
  535. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +59 -35
  536. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +0 -3
  537. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +454 -343
  538. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +204 -130
  539. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +0 -11
  540. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +369 -243
  541. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +109 -79
  542. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +0 -7
  543. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +256 -175
  544. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +122 -68
  545. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +0 -8
  546. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +71 -51
  547. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +39 -19
  548. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h +0 -2
  549. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +583 -407
  550. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +259 -145
  551. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h +0 -12
  552. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +114 -84
  553. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +52 -30
  554. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +0 -4
  555. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +41 -34
  556. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +25 -13
  557. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.h +0 -2
  558. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +309 -230
  559. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +123 -79
  560. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +0 -9
  561. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +98 -63
  562. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +51 -23
  563. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.h +0 -3
  564. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +505 -312
  565. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +159 -87
  566. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +0 -9
  567. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +128 -91
  568. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +82 -41
  569. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -8
  570. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +36 -29
  571. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +36 -13
  572. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +1 -2
  573. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +13 -11
  574. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +22 -7
  575. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +1 -1
  576. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +36 -29
  577. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +36 -13
  578. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +1 -2
  579. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +34 -27
  580. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +34 -13
  581. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +1 -2
  582. data/src/core/ext/upb-gen/validate/validate.upb.h +1682 -1130
  583. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +587 -247
  584. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +4 -27
  585. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +128 -91
  586. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +82 -41
  587. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -8
  588. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +36 -29
  589. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +36 -13
  590. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +1 -2
  591. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +13 -11
  592. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +22 -7
  593. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +1 -1
  594. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +122 -90
  595. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +82 -39
  596. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +3 -7
  597. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +34 -27
  598. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +34 -13
  599. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +1 -2
  600. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +21 -19
  601. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +13 -7
  602. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +0 -1
  603. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +29 -26
  604. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +17 -11
  605. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +0 -1
  606. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +70 -58
  607. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +32 -22
  608. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +0 -2
  609. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +53 -34
  610. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +26 -16
  611. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +0 -2
  612. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +29 -26
  613. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +17 -11
  614. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +0 -1
  615. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +37 -33
  616. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +22 -14
  617. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +0 -1
  618. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +102 -76
  619. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +43 -23
  620. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +0 -2
  621. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +33 -30
  622. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +19 -11
  623. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +0 -1
  624. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +136 -83
  625. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +41 -33
  626. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +0 -4
  627. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +46 -32
  628. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +20 -12
  629. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +0 -1
  630. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +29 -26
  631. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +20 -12
  632. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +0 -1
  633. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +93 -61
  634. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +28 -20
  635. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +0 -2
  636. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +19 -17
  637. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -3
  638. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +0 -1
  639. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +105 -71
  640. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +32 -22
  641. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +0 -2
  642. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +430 -314
  643. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +153 -123
  644. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +0 -10
  645. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +307 -199
  646. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +74 -62
  647. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +0 -6
  648. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +52 -42
  649. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +19 -13
  650. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +0 -2
  651. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +95 -71
  652. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +36 -22
  653. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +0 -2
  654. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +92 -77
  655. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +42 -28
  656. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +0 -2
  657. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +67 -55
  658. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +36 -18
  659. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +0 -3
  660. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +29 -26
  661. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +17 -11
  662. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +0 -1
  663. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +885 -855
  664. data/src/core/filter/composite/composite_filter.cc +10 -3
  665. data/src/core/filter/composite/composite_filter.h +11 -1
  666. data/src/core/filter/filter_args.h +4 -22
  667. data/src/core/handshaker/handshaker.cc +10 -2
  668. data/src/core/handshaker/security/secure_endpoint.cc +60 -5
  669. data/src/core/lib/channel/channel_args.h +12 -6
  670. data/src/core/lib/channel/channel_stack.cc +1 -2
  671. data/src/core/lib/channel/channel_stack.h +1 -7
  672. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  673. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -7
  674. data/src/core/lib/channel/promise_based_filter.cc +90 -4
  675. data/src/core/lib/channel/promise_based_filter.h +241 -188
  676. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +0 -13
  677. data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +44 -0
  678. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  679. data/src/core/lib/event_engine/posix.h +2 -0
  680. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -1
  681. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +11 -8
  682. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +9 -18
  683. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  684. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -1
  685. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +10 -10
  686. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  687. data/src/core/lib/event_engine/shim.cc +2 -16
  688. data/src/core/lib/event_engine/shim.h +0 -4
  689. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  690. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -4
  691. data/src/core/lib/experiments/experiments.cc +303 -183
  692. data/src/core/lib/experiments/experiments.h +166 -90
  693. data/src/core/lib/iomgr/buffer_list.h +1 -1
  694. data/src/core/lib/iomgr/error.cc +3 -73
  695. data/src/core/lib/iomgr/error.h +8 -6
  696. data/src/core/lib/iomgr/error_cfstream.cc +1 -2
  697. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -7
  698. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -6
  699. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  700. data/src/core/lib/iomgr/tcp_posix.cc +4 -7
  701. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  702. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  703. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  704. data/src/core/lib/promise/interceptor_list.h +1 -1
  705. data/src/core/lib/promise/try_seq.h +2 -2
  706. data/src/core/lib/resource_quota/telemetry.cc +54 -0
  707. data/src/core/lib/resource_quota/telemetry.h +5 -23
  708. data/src/core/lib/security/authorization/audit_logging.cc +2 -2
  709. data/src/core/lib/security/authorization/audit_logging.h +3 -3
  710. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
  711. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  712. data/src/core/lib/security/authorization/matchers.cc +20 -20
  713. data/src/core/lib/security/authorization/matchers.h +15 -16
  714. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  715. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  716. data/src/core/lib/security/authorization/stdout_logger.h +6 -5
  717. data/src/core/lib/surface/call.cc +6 -9
  718. data/src/core/lib/surface/call.h +11 -0
  719. data/src/core/lib/surface/channel.cc +21 -2
  720. data/src/core/lib/surface/channel.h +14 -6
  721. data/src/core/lib/surface/filter_stack_call.cc +10 -29
  722. data/src/core/lib/surface/legacy_channel.cc +7 -7
  723. data/src/core/lib/surface/legacy_channel.h +3 -1
  724. data/src/core/lib/surface/version.cc +2 -2
  725. data/src/core/lib/transport/bdp_estimator.cc +13 -13
  726. data/src/core/lib/transport/bdp_estimator.h +9 -5
  727. data/src/core/lib/transport/error_utils.cc +26 -138
  728. data/src/core/lib/transport/promise_endpoint.h +8 -8
  729. data/src/core/lib/transport/transport.h +31 -4
  730. data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
  731. data/src/core/load_balancing/pick_first/pick_first.cc +33 -2
  732. data/src/core/load_balancing/pick_first/pick_first.h +6 -0
  733. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -10
  734. data/src/core/load_balancing/rls/rls.cc +2 -1
  735. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +141 -74
  736. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +88 -0
  737. data/src/core/load_balancing/xds/cds.cc +80 -56
  738. data/src/core/load_balancing/xds/cds.h +21 -0
  739. data/src/core/mitigation_engine/mitigation.h +53 -0
  740. data/src/core/mitigation_engine/mitigation_engine.h +81 -0
  741. data/src/core/mitigation_engine/mitigation_provider.h +62 -0
  742. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  743. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -5
  744. data/src/core/resolver/dns/dns_resolver_plugin.cc +1 -6
  745. data/src/core/resolver/xds/xds_resolver.cc +37 -144
  746. data/src/core/server/server.cc +40 -18
  747. data/src/core/server/server.h +26 -18
  748. data/src/core/server/server_config_selector.h +5 -4
  749. data/src/core/server/server_config_selector_filter.cc +135 -26
  750. data/src/core/server/server_config_selector_filter.h +1 -0
  751. data/src/core/server/xds_server_config_fetcher.cc +687 -692
  752. data/src/core/server/xds_server_config_fetcher_legacy.cc +1336 -0
  753. data/src/core/telemetry/call_tracer.cc +49 -2
  754. data/src/core/telemetry/call_tracer.h +1 -0
  755. data/src/core/telemetry/histogram.h +10 -89
  756. data/src/core/telemetry/instrument.h +42 -28
  757. data/src/core/telemetry/tcp_tracer.h +38 -0
  758. data/src/core/transport/message_size_service_config.cc +123 -0
  759. data/src/core/transport/message_size_service_config.h +85 -0
  760. data/src/core/transport/session_endpoint.cc +29 -4
  761. data/src/core/transport/session_endpoint.h +4 -0
  762. data/src/core/tsi/alts/crypt/gsec.h +4 -2
  763. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  764. data/src/core/tsi/ssl_telemetry_utils.cc +343 -0
  765. data/src/core/tsi/ssl_telemetry_utils.h +74 -0
  766. data/src/core/tsi/ssl_transport_security.cc +583 -305
  767. data/src/core/tsi/ssl_transport_security.h +22 -6
  768. data/src/core/tsi/ssl_transport_security_utils.cc +2 -0
  769. data/src/core/tsi/transport_security.h +7 -0
  770. data/src/core/util/http_client/httpcli.cc +1 -4
  771. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  772. data/src/core/util/http_client/parser.cc +1 -1
  773. data/src/core/util/lru_cache.h +2 -0
  774. data/src/core/util/ref_counted_string.h +1 -1
  775. data/src/core/util/status_helper.cc +71 -192
  776. data/src/core/util/status_helper.h +16 -21
  777. data/src/core/util/tchar.cc +13 -7
  778. data/src/core/util/trie_lookup.h +1 -1
  779. data/src/core/xds/grpc/blackboard.cc +58 -0
  780. data/src/core/{filter → xds/grpc}/blackboard.h +30 -11
  781. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
  782. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -7
  783. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -16
  784. data/src/core/xds/grpc/xds_common_types.cc +96 -0
  785. data/src/core/xds/grpc/xds_common_types.h +35 -7
  786. data/src/core/xds/grpc/xds_common_types_parser.cc +205 -134
  787. data/src/core/xds/grpc/xds_common_types_parser.h +18 -1
  788. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -18
  789. data/src/core/xds/grpc/xds_http_composite_filter.cc +34 -18
  790. data/src/core/xds/grpc/xds_http_composite_filter.h +6 -3
  791. data/src/core/xds/grpc/xds_http_fault_filter.cc +0 -149
  792. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -8
  793. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  794. data/src/core/xds/grpc/xds_http_filter.h +6 -16
  795. data/src/core/xds/grpc/xds_http_filter_registry.cc +2 -12
  796. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -119
  797. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +27 -15
  798. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -12
  799. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +0 -149
  800. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -8
  801. data/src/core/xds/grpc/xds_lb_policy_registry.cc +18 -0
  802. data/src/core/xds/grpc/xds_listener_parser.cc +13 -9
  803. data/src/core/xds/grpc/xds_metadata_parser.cc +0 -2
  804. data/src/core/xds/grpc/xds_route_config.h +1 -1
  805. data/src/core/xds/grpc/xds_route_config_parser.cc +10 -16
  806. data/src/core/xds/grpc/xds_routing.cc +115 -90
  807. data/src/core/xds/grpc/xds_routing.h +73 -24
  808. data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
  809. data/src/core/xds/grpc/xds_server_grpc.h +16 -2
  810. data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
  811. data/src/core/xds/grpc/xds_transport_grpc.cc +123 -18
  812. data/src/core/xds/grpc/xds_transport_grpc.h +28 -4
  813. data/src/core/xds/xds_client/lrs_client.cc +4 -8
  814. data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
  815. data/src/core/xds/xds_client/xds_client.cc +2 -15
  816. data/src/core/xds/xds_client/xds_transport.h +3 -0
  817. data/src/ruby/ext/grpc/rb_byte_buffer.c +1 -0
  818. data/src/ruby/ext/grpc/rb_call.c +3 -0
  819. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  820. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  821. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  822. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  823. data/src/ruby/ext/grpc/rb_completion_queue.c +1 -0
  824. data/src/ruby/ext/grpc/rb_compression_options.c +1 -0
  825. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  826. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -6
  827. data/src/ruby/ext/grpc/rb_server.c +1 -0
  828. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  829. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  830. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  831. data/src/ruby/lib/grpc/core/call_credentials.rb +86 -0
  832. data/src/ruby/lib/grpc/core/channel_credentials.rb +69 -0
  833. data/src/ruby/lib/grpc/core/credentials_helper.rb +126 -0
  834. data/src/ruby/lib/grpc/generic/client_stub.rb +86 -73
  835. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  836. data/src/ruby/lib/grpc/version.rb +1 -1
  837. data/src/ruby/lib/grpc.rb +25 -0
  838. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
  839. data/src/ruby/spec/call_credentials_spec.rb +52 -2
  840. data/src/ruby/spec/credentials_helper_spec.rb +80 -0
  841. data/src/ruby/spec/generic/client_stub_spec.rb +27 -4
  842. data/src/ruby/spec/generic/server_interceptors_spec.rb +17 -3
  843. data/third_party/upb/upb/base/error_handler.h +79 -0
  844. data/third_party/upb/upb/base/internal/log2.h +29 -5
  845. data/third_party/upb/upb/generated_code_support.h +1 -0
  846. data/third_party/upb/upb/hash/common.c +129 -14
  847. data/third_party/upb/upb/hash/common.h +1 -1
  848. data/third_party/upb/upb/hash/ext_table.h +65 -0
  849. data/third_party/upb/upb/lex/strtod.c +14 -5
  850. data/third_party/upb/upb/mem/arena.c +113 -95
  851. data/third_party/upb/upb/mem/internal/arena.h +13 -8
  852. data/third_party/upb/upb/message/accessors.c +2 -3
  853. data/third_party/upb/upb/message/accessors.h +32 -12
  854. data/third_party/upb/upb/message/array.c +51 -2
  855. data/third_party/upb/upb/message/array.h +10 -0
  856. data/third_party/upb/upb/message/copy.c +18 -34
  857. data/third_party/upb/upb/message/internal/accessors.h +15 -49
  858. data/third_party/upb/upb/message/internal/array.h +1 -1
  859. data/third_party/upb/upb/message/internal/map.h +1 -1
  860. data/third_party/upb/upb/message/internal/message.c +8 -1
  861. data/third_party/upb/upb/message/internal/message.h +40 -10
  862. data/third_party/upb/upb/message/message.c +3 -2
  863. data/third_party/upb/upb/message/value.h +0 -6
  864. data/third_party/upb/upb/mini_descriptor/decode.c +78 -59
  865. data/third_party/upb/upb/mini_descriptor/link.c +8 -6
  866. data/third_party/upb/upb/mini_table/extension_registry.c +17 -49
  867. data/third_party/upb/upb/mini_table/extension_registry.h +5 -17
  868. data/third_party/upb/upb/mini_table/generated_registry.c +180 -0
  869. data/third_party/upb/upb/mini_table/generated_registry.h +66 -0
  870. data/third_party/upb/upb/mini_table/internal/extension.h +5 -3
  871. data/third_party/upb/upb/mini_table/internal/field.h +7 -5
  872. data/third_party/upb/upb/mini_table/internal/generated_registry.h +37 -0
  873. data/third_party/upb/upb/mini_table/internal/message.c +0 -18
  874. data/third_party/upb/upb/mini_table/internal/message.h +24 -41
  875. data/third_party/upb/upb/mini_table/internal/size_log2.h +2 -1
  876. data/third_party/upb/upb/mini_table/internal/sub.h +2 -5
  877. data/third_party/upb/upb/mini_table/message.h +34 -13
  878. data/third_party/upb/upb/port/atomic.h +180 -74
  879. data/third_party/upb/upb/port/def.inc +194 -29
  880. data/third_party/upb/upb/port/sanitizers.h +15 -0
  881. data/third_party/upb/upb/port/undef.inc +6 -2
  882. data/third_party/upb/upb/reflection/common.h +0 -6
  883. data/third_party/upb/upb/reflection/def.hpp +8 -12
  884. data/third_party/upb/upb/reflection/def_pool.c +85 -33
  885. data/third_party/upb/upb/reflection/def_pool.h +38 -8
  886. data/third_party/upb/upb/reflection/def_type.h +3 -0
  887. data/third_party/upb/upb/reflection/enum_def.c +45 -33
  888. data/third_party/upb/upb/reflection/enum_def.h +8 -4
  889. data/third_party/upb/upb/reflection/enum_reserved_range.c +7 -3
  890. data/third_party/upb/upb/reflection/enum_value_def.c +14 -29
  891. data/third_party/upb/upb/reflection/enum_value_def.h +5 -4
  892. data/third_party/upb/upb/reflection/extension_range.c +15 -14
  893. data/third_party/upb/upb/reflection/extension_range.h +7 -4
  894. data/third_party/upb/upb/reflection/field_def.c +114 -96
  895. data/third_party/upb/upb/reflection/field_def.h +3 -3
  896. data/third_party/upb/upb/reflection/file_def.c +71 -65
  897. data/third_party/upb/upb/reflection/file_def.h +4 -5
  898. data/third_party/upb/upb/reflection/internal/def_builder.c +22 -14
  899. data/third_party/upb/upb/reflection/internal/def_builder.h +44 -38
  900. data/third_party/upb/upb/reflection/internal/def_pool.h +5 -1
  901. data/third_party/upb/upb/reflection/internal/enum_def.h +6 -4
  902. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +3 -2
  903. data/third_party/upb/upb/reflection/internal/enum_value_def.h +7 -4
  904. data/third_party/upb/upb/reflection/internal/extension_range.h +4 -3
  905. data/third_party/upb/upb/reflection/internal/field_def.h +15 -12
  906. data/third_party/upb/upb/reflection/internal/file_def.h +8 -1
  907. data/third_party/upb/upb/reflection/internal/message_def.h +10 -7
  908. data/third_party/upb/upb/reflection/internal/message_reserved_range.h +3 -1
  909. data/third_party/upb/upb/reflection/internal/method_def.h +6 -6
  910. data/third_party/upb/upb/reflection/internal/oneof_def.h +6 -6
  911. data/third_party/upb/upb/reflection/internal/service_def.h +9 -6
  912. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  913. data/third_party/upb/upb/reflection/message_def.c +46 -53
  914. data/third_party/upb/upb/reflection/message_def.h +6 -7
  915. data/third_party/upb/upb/reflection/message_reserved_range.c +7 -6
  916. data/third_party/upb/upb/reflection/method_def.c +22 -20
  917. data/third_party/upb/upb/reflection/method_def.h +4 -4
  918. data/third_party/upb/upb/reflection/oneof_def.c +17 -15
  919. data/third_party/upb/upb/reflection/oneof_def.h +6 -3
  920. data/third_party/upb/upb/reflection/service_def.c +50 -23
  921. data/third_party/upb/upb/reflection/service_def.h +7 -4
  922. data/third_party/upb/upb/text/internal/encode.c +7 -10
  923. data/third_party/upb/upb/wire/decode.c +269 -430
  924. data/third_party/upb/upb/wire/decode.h +6 -45
  925. data/third_party/upb/upb/wire/decode_fast/combinations.h +7 -3
  926. data/third_party/upb/upb/wire/decode_fast/select.c +7 -2
  927. data/third_party/upb/upb/wire/encode.c +144 -106
  928. data/third_party/upb/upb/wire/encode.h +6 -2
  929. data/third_party/upb/upb/wire/eps_copy_input_stream.c +36 -7
  930. data/third_party/upb/upb/wire/eps_copy_input_stream.h +94 -380
  931. data/third_party/upb/upb/wire/internal/decoder.c +1 -14
  932. data/third_party/upb/upb/wire/internal/decoder.h +84 -24
  933. data/third_party/upb/upb/wire/internal/eps_copy_input_stream.h +339 -0
  934. data/third_party/upb/upb/wire/internal/reader.h +29 -12
  935. data/third_party/upb/upb/wire/reader.c +35 -22
  936. data/third_party/upb/upb/wire/reader.h +11 -18
  937. data/third_party/utf8_range/utf8_range.c +1 -1
  938. data/third_party/utf8_range/utf8_range.h +2 -1
  939. metadata +35 -13
  940. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +0 -117
  941. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +0 -109
  942. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +0 -80
  943. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +0 -86
  944. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +0 -83
  945. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +0 -91
  946. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +0 -217
  947. data/third_party/upb/upb/message/internal/tagged_ptr.h +0 -56
  948. 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
+ }