diff --git a/BUILD b/BUILD index c6137df4eb0..ba954150eb6 100644 --- a/BUILD +++ b/BUILD @@ -3664,6 +3664,31 @@ grpc_upb_proto_reflection_library( deps = ["@envoy_api//envoy/extensions/filters/http/router/v3:pkg"], ) +grpc_upb_proto_library( + name = "envoy_extensions_filters_http_stateful_session_upb", + deps = ["@envoy_api//envoy/extensions/filters/http/stateful_session/v3:pkg"], +) + +grpc_upb_proto_reflection_library( + name = "envoy_extensions_filters_http_stateful_session_upbdefs", + deps = ["@envoy_api//envoy/extensions/filters/http/stateful_session/v3:pkg"], +) + +grpc_upb_proto_library( + name = "envoy_extensions_http_stateful_session_cookie_upb", + deps = ["@envoy_api//envoy/extensions/http/stateful_session/cookie/v3:pkg"], +) + +grpc_upb_proto_reflection_library( + name = "envoy_extensions_http_stateful_session_cookie_upbdefs", + deps = ["@envoy_api//envoy/extensions/http/stateful_session/cookie/v3:pkg"], +) + +grpc_upb_proto_library( + name = "envoy_type_http_upb", + deps = ["@envoy_api//envoy/type/http/v3:pkg"], +) + grpc_upb_proto_library( name = "envoy_extensions_load_balancing_policies_ring_hash_upb", deps = ["@envoy_api//envoy/extensions/load_balancing_policies/ring_hash/v3:pkg"], diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c82b671450..3f6656dbe62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -652,6 +652,9 @@ protobuf_generate_grpc_cpp_with_import_path_correction( protobuf_generate_grpc_cpp_with_import_path_correction( src/proto/grpc/testing/xds/v3/config_source.proto src/proto/grpc/testing/xds/v3/config_source.proto ) +protobuf_generate_grpc_cpp_with_import_path_correction( + src/proto/grpc/testing/xds/v3/cookie.proto src/proto/grpc/testing/xds/v3/cookie.proto +) protobuf_generate_grpc_cpp_with_import_path_correction( src/proto/grpc/testing/xds/v3/csds.proto src/proto/grpc/testing/xds/v3/csds.proto ) @@ -730,6 +733,12 @@ protobuf_generate_grpc_cpp_with_import_path_correction( protobuf_generate_grpc_cpp_with_import_path_correction( src/proto/grpc/testing/xds/v3/router.proto src/proto/grpc/testing/xds/v3/router.proto ) +protobuf_generate_grpc_cpp_with_import_path_correction( + src/proto/grpc/testing/xds/v3/stateful_session.proto src/proto/grpc/testing/xds/v3/stateful_session.proto +) +protobuf_generate_grpc_cpp_with_import_path_correction( + src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto +) protobuf_generate_grpc_cpp_with_import_path_correction( src/proto/grpc/testing/xds/v3/string.proto src/proto/grpc/testing/xds/v3/string.proto ) @@ -1835,7 +1844,9 @@ add_library(grpc src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c + src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c + src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c @@ -1982,7 +1993,9 @@ add_library(grpc src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c + src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c + src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c @@ -2068,6 +2081,7 @@ add_library(grpc src/core/ext/xds/xds_http_fault_filter.cc src/core/ext/xds/xds_http_filters.cc src/core/ext/xds/xds_http_rbac_filter.cc + src/core/ext/xds/xds_http_stateful_session_filter.cc src/core/ext/xds/xds_lb_policy_registry.cc src/core/ext/xds/xds_listener.cc src/core/ext/xds/xds_route_config.cc @@ -23510,6 +23524,10 @@ add_executable(xds_http_filters_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cookie.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cookie.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cookie.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cookie.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/expr.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/expr.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/expr.pb.h @@ -23562,10 +23580,22 @@ add_executable(xds_http_filters_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/router.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/router.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/router.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session_cookie.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session_cookie.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session_cookie.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/stateful_session_cookie.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/string.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/string.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/string.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/string.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/typed_struct.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/typed_struct.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/typed_struct.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/typed_struct.grpc.pb.h test/core/xds/xds_http_filters_test.cc test/cpp/util/cli_call.cc test/cpp/util/cli_credentials.cc diff --git a/Makefile b/Makefile index 25deb30b39c..ae67135f8c2 100644 --- a/Makefile +++ b/Makefile @@ -1128,7 +1128,9 @@ LIBGRPC_SRC = \ src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c \ + src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c \ + src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c \ src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c \ @@ -1275,7 +1277,9 @@ LIBGRPC_SRC = \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c \ + src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c \ + src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c \ @@ -1361,6 +1365,7 @@ LIBGRPC_SRC = \ src/core/ext/xds/xds_http_fault_filter.cc \ src/core/ext/xds/xds_http_filters.cc \ src/core/ext/xds/xds_http_rbac_filter.cc \ + src/core/ext/xds/xds_http_stateful_session_filter.cc \ src/core/ext/xds/xds_lb_policy_registry.cc \ src/core/ext/xds/xds_listener.cc \ src/core/ext/xds/xds_route_config.cc \ @@ -2984,7 +2989,9 @@ src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c: src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c: $(OPENSSL_DEP) +src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c: $(OPENSSL_DEP) +src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c: $(OPENSSL_DEP) @@ -3112,7 +3119,9 @@ src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.up src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c: $(OPENSSL_DEP) +src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c: $(OPENSSL_DEP) +src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c: $(OPENSSL_DEP) src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c: $(OPENSSL_DEP) @@ -3197,6 +3206,7 @@ src/core/ext/xds/xds_endpoint.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_http_fault_filter.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_http_filters.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_http_rbac_filter.cc: $(OPENSSL_DEP) +src/core/ext/xds/xds_http_stateful_session_filter.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_lb_policy_registry.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_listener.cc: $(OPENSSL_DEP) src/core/ext/xds/xds_route_config.cc: $(OPENSSL_DEP) diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 4062e449ecf..19195de96ec 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -469,7 +469,9 @@ libs: - src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h - src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h - src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h + - src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h + - src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h - src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h - src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h @@ -616,7 +618,9 @@ libs: - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h + - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h + - src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h @@ -704,6 +708,7 @@ libs: - src/core/ext/xds/xds_http_fault_filter.h - src/core/ext/xds/xds_http_filters.h - src/core/ext/xds/xds_http_rbac_filter.h + - src/core/ext/xds/xds_http_stateful_session_filter.h - src/core/ext/xds/xds_lb_policy_registry.h - src/core/ext/xds/xds_listener.h - src/core/ext/xds/xds_resource_type.h @@ -1218,7 +1223,9 @@ libs: - src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c - src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c - src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c + - src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c + - src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c - src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c - src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c @@ -1365,7 +1372,9 @@ libs: - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c + - src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c + - src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c - src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c @@ -1451,6 +1460,7 @@ libs: - src/core/ext/xds/xds_http_fault_filter.cc - src/core/ext/xds/xds_http_filters.cc - src/core/ext/xds/xds_http_rbac_filter.cc + - src/core/ext/xds/xds_http_stateful_session_filter.cc - src/core/ext/xds/xds_lb_policy_registry.cc - src/core/ext/xds/xds_listener.cc - src/core/ext/xds/xds_route_config.cc @@ -12922,6 +12932,7 @@ targets: - src/proto/grpc/reflection/v1alpha/reflection.proto - src/proto/grpc/testing/xds/v3/address.proto - src/proto/grpc/testing/xds/v3/base.proto + - src/proto/grpc/testing/xds/v3/cookie.proto - src/proto/grpc/testing/xds/v3/expr.proto - src/proto/grpc/testing/xds/v3/extension.proto - src/proto/grpc/testing/xds/v3/fault.proto @@ -12935,7 +12946,10 @@ targets: - src/proto/grpc/testing/xds/v3/regex.proto - src/proto/grpc/testing/xds/v3/route.proto - src/proto/grpc/testing/xds/v3/router.proto + - src/proto/grpc/testing/xds/v3/stateful_session.proto + - src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto - src/proto/grpc/testing/xds/v3/string.proto + - src/proto/grpc/testing/xds/v3/typed_struct.proto - test/core/xds/xds_http_filters_test.cc - test/cpp/util/cli_call.cc - test/cpp/util/cli_credentials.cc diff --git a/config.m4 b/config.m4 index be56c6d24f9..d08006262f6 100644 --- a/config.m4 +++ b/config.m4 @@ -211,7 +211,9 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c \ + src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c \ + src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c \ src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c \ @@ -358,7 +360,9 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c \ + src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c \ + src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c \ @@ -444,6 +448,7 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/xds/xds_http_fault_filter.cc \ src/core/ext/xds/xds_http_filters.cc \ src/core/ext/xds/xds_http_rbac_filter.cc \ + src/core/ext/xds/xds_http_stateful_session_filter.cc \ src/core/ext/xds/xds_lb_policy_registry.cc \ src/core/ext/xds/xds_listener.cc \ src/core/ext/xds/xds_route_config.cc \ @@ -1276,7 +1281,9 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3) @@ -1325,7 +1332,9 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/service/discovery/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3) diff --git a/config.w32 b/config.w32 index dc38be5b9b7..a18ab80c5c1 100644 --- a/config.w32 +++ b/config.w32 @@ -177,7 +177,9 @@ if (PHP_GRPC != "no") { "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\fault\\v3\\fault.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\rbac\\v3\\rbac.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\router\\v3\\router.upb.c " + + "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\stateful_session\\v3\\stateful_session.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3\\http_connection_manager.upb.c " + + "src\\core\\ext\\upb-generated\\envoy\\extensions\\http\\stateful_session\\cookie\\v3\\cookie.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\load_balancing_policies\\ring_hash\\v3\\ring_hash.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\load_balancing_policies\\wrr_locality\\v3\\wrr_locality.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\cert.upb.c " + @@ -324,7 +326,9 @@ if (PHP_GRPC != "no") { "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\fault\\v3\\fault.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\rbac\\v3\\rbac.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\router\\v3\\router.upbdefs.c " + + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\stateful_session\\v3\\stateful_session.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3\\http_connection_manager.upbdefs.c " + + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\http\\stateful_session\\cookie\\v3\\cookie.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\cert.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\common.upbdefs.c " + "src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\secret.upbdefs.c " + @@ -410,6 +414,7 @@ if (PHP_GRPC != "no") { "src\\core\\ext\\xds\\xds_http_fault_filter.cc " + "src\\core\\ext\\xds\\xds_http_filters.cc " + "src\\core\\ext\\xds\\xds_http_rbac_filter.cc " + + "src\\core\\ext\\xds\\xds_http_stateful_session_filter.cc " + "src\\core\\ext\\xds\\xds_lb_policy_registry.cc " + "src\\core\\ext\\xds\\xds_listener.cc " + "src\\core\\ext\\xds\\xds_route_config.cc " + @@ -1304,9 +1309,15 @@ if (PHP_GRPC != "no") { FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\rbac\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\router"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\router\\v3"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\stateful_session"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\http\\stateful_session\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\http"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\http\\stateful_session"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\http\\stateful_session\\cookie"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\http\\stateful_session\\cookie\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\load_balancing_policies"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\load_balancing_policies\\ring_hash"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\load_balancing_policies\\ring_hash\\v3"); @@ -1418,9 +1429,15 @@ if (PHP_GRPC != "no") { FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\rbac\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\router"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\router\\v3"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\stateful_session"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\http\\stateful_session\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\network"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\network\\http_connection_manager"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\http"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\http\\stateful_session"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\http\\stateful_session\\cookie"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\http\\stateful_session\\cookie\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets\\tls"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-generated\\envoy\\extensions\\transport_sockets\\tls\\v3"); diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index 06e4d6f03a4..0216c9aebd4 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -428,7 +428,9 @@ Pod::Spec.new do |s| 'src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h', 'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h', @@ -575,7 +577,9 @@ Pod::Spec.new do |s| 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h', @@ -663,6 +667,7 @@ Pod::Spec.new do |s| 'src/core/ext/xds/xds_http_fault_filter.h', 'src/core/ext/xds/xds_http_filters.h', 'src/core/ext/xds/xds_http_rbac_filter.h', + 'src/core/ext/xds/xds_http_stateful_session_filter.h', 'src/core/ext/xds/xds_lb_policy_registry.h', 'src/core/ext/xds/xds_listener.h', 'src/core/ext/xds/xds_resource_type.h', @@ -1318,7 +1323,9 @@ Pod::Spec.new do |s| 'src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h', 'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h', @@ -1465,7 +1472,9 @@ Pod::Spec.new do |s| 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h', @@ -1553,6 +1562,7 @@ Pod::Spec.new do |s| 'src/core/ext/xds/xds_http_fault_filter.h', 'src/core/ext/xds/xds_http_filters.h', 'src/core/ext/xds/xds_http_rbac_filter.h', + 'src/core/ext/xds/xds_http_stateful_session_filter.h', 'src/core/ext/xds/xds_lb_policy_registry.h', 'src/core/ext/xds/xds_listener.h', 'src/core/ext/xds/xds_resource_type.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index fe346f0874d..46e9cf99f5c 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -523,8 +523,12 @@ Pod::Spec.new do |s| 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c', @@ -817,8 +821,12 @@ Pod::Spec.new do |s| 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c', @@ -991,6 +999,8 @@ Pod::Spec.new do |s| 'src/core/ext/xds/xds_http_filters.h', 'src/core/ext/xds/xds_http_rbac_filter.cc', 'src/core/ext/xds/xds_http_rbac_filter.h', + 'src/core/ext/xds/xds_http_stateful_session_filter.cc', + 'src/core/ext/xds/xds_http_stateful_session_filter.h', 'src/core/ext/xds/xds_lb_policy_registry.cc', 'src/core/ext/xds/xds_lb_policy_registry.h', 'src/core/ext/xds/xds_listener.cc', @@ -1953,7 +1963,9 @@ Pod::Spec.new do |s| 'src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h', 'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h', @@ -2100,7 +2112,9 @@ Pod::Spec.new do |s| 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h', @@ -2188,6 +2202,7 @@ Pod::Spec.new do |s| 'src/core/ext/xds/xds_http_fault_filter.h', 'src/core/ext/xds/xds_http_filters.h', 'src/core/ext/xds/xds_http_rbac_filter.h', + 'src/core/ext/xds/xds_http_stateful_session_filter.h', 'src/core/ext/xds/xds_lb_policy_registry.h', 'src/core/ext/xds/xds_listener.h', 'src/core/ext/xds/xds_resource_type.h', diff --git a/grpc.gemspec b/grpc.gemspec index cc9b64b2d28..bc0f98bf74c 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -434,8 +434,12 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h ) + s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c ) + s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h ) + s.files += %w( src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c ) + s.files += %w( src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c ) @@ -728,8 +732,12 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h ) + s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c ) + s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h ) + s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c ) + s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c ) @@ -902,6 +910,8 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/xds/xds_http_filters.h ) s.files += %w( src/core/ext/xds/xds_http_rbac_filter.cc ) s.files += %w( src/core/ext/xds/xds_http_rbac_filter.h ) + s.files += %w( src/core/ext/xds/xds_http_stateful_session_filter.cc ) + s.files += %w( src/core/ext/xds/xds_http_stateful_session_filter.h ) s.files += %w( src/core/ext/xds/xds_lb_policy_registry.cc ) s.files += %w( src/core/ext/xds/xds_lb_policy_registry.h ) s.files += %w( src/core/ext/xds/xds_listener.cc ) diff --git a/grpc.gyp b/grpc.gyp index a358e00870a..98e9c959390 100644 --- a/grpc.gyp +++ b/grpc.gyp @@ -541,7 +541,9 @@ 'src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c', 'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c', @@ -688,7 +690,9 @@ 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c', @@ -774,6 +778,7 @@ 'src/core/ext/xds/xds_http_fault_filter.cc', 'src/core/ext/xds/xds_http_filters.cc', 'src/core/ext/xds/xds_http_rbac_filter.cc', + 'src/core/ext/xds/xds_http_stateful_session_filter.cc', 'src/core/ext/xds/xds_lb_policy_registry.cc', 'src/core/ext/xds/xds_listener.cc', 'src/core/ext/xds/xds_route_config.cc', diff --git a/package.xml b/package.xml index 103c7702837..63c51853081 100644 --- a/package.xml +++ b/package.xml @@ -416,8 +416,12 @@ + + + + @@ -710,8 +714,12 @@ + + + + @@ -884,6 +892,8 @@ + + diff --git a/src/core/BUILD b/src/core/BUILD index 904b77f0cb1..51ca51c268c 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -3564,6 +3564,7 @@ grpc_cc_library( "ext/xds/xds_http_fault_filter.cc", "ext/xds/xds_http_filters.cc", "ext/xds/xds_http_rbac_filter.cc", + "ext/xds/xds_http_stateful_session_filter.cc", "ext/xds/xds_lb_policy_registry.cc", "ext/xds/xds_listener.cc", "ext/xds/xds_route_config.cc", @@ -3584,6 +3585,7 @@ grpc_cc_library( "ext/xds/xds_http_fault_filter.h", "ext/xds/xds_http_filters.h", "ext/xds/xds_http_rbac_filter.h", + "ext/xds/xds_http_stateful_session_filter.h", "ext/xds/xds_lb_policy_registry.h", "ext/xds/xds_listener.h", "ext/xds/xds_route_config.h", @@ -3639,8 +3641,12 @@ grpc_cc_library( "envoy_extensions_filters_http_rbac_upbdefs", "envoy_extensions_filters_http_router_upb", "envoy_extensions_filters_http_router_upbdefs", + "envoy_extensions_filters_http_stateful_session_upb", + "envoy_extensions_filters_http_stateful_session_upbdefs", "envoy_extensions_filters_network_http_connection_manager_upb", "envoy_extensions_filters_network_http_connection_manager_upbdefs", + "envoy_extensions_http_stateful_session_cookie_upb", + "envoy_extensions_http_stateful_session_cookie_upbdefs", "envoy_extensions_load_balancing_policies_ring_hash_upb", "envoy_extensions_load_balancing_policies_wrr_locality_upb", "envoy_extensions_transport_sockets_tls_upb", @@ -3651,6 +3657,7 @@ grpc_cc_library( "envoy_service_load_stats_upbdefs", "envoy_service_status_upb", "envoy_service_status_upbdefs", + "envoy_type_http_upb", "envoy_type_matcher_upb", "envoy_type_upb", "error", @@ -3662,6 +3669,7 @@ grpc_cc_library( "grpc_outlier_detection_header", "grpc_rbac_filter", "grpc_sockaddr", + "grpc_stateful_session_filter", "grpc_tls_credentials", "grpc_transport_chttp2_client_connector", "init_internally", @@ -5046,6 +5054,31 @@ grpc_upb_proto_reflection_library( deps = ["@envoy_api//envoy/extensions/filters/http/router/v3:pkg"], ) +grpc_upb_proto_library( + name = "envoy_extensions_filters_http_stateful_session_upb", + deps = ["@envoy_api//envoy/extensions/filters/http/stateful_session/v3:pkg"], +) + +grpc_upb_proto_reflection_library( + name = "envoy_extensions_filters_http_stateful_session_upbdefs", + deps = ["@envoy_api//envoy/extensions/filters/http/stateful_session/v3:pkg"], +) + +grpc_upb_proto_library( + name = "envoy_extensions_http_stateful_session_cookie_upb", + deps = ["@envoy_api//envoy/extensions/http/stateful_session/cookie/v3:pkg"], +) + +grpc_upb_proto_reflection_library( + name = "envoy_extensions_http_stateful_session_cookie_upbdefs", + deps = ["@envoy_api//envoy/extensions/http/stateful_session/cookie/v3:pkg"], +) + +grpc_upb_proto_library( + name = "envoy_type_http_upb", + deps = ["@envoy_api//envoy/type/http/v3:pkg"], +) + grpc_upb_proto_library( name = "envoy_extensions_load_balancing_policies_ring_hash_upb", deps = ["@envoy_api//envoy/extensions/load_balancing_policies/ring_hash/v3:pkg"], diff --git a/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c b/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c new file mode 100644 index 00000000000..ad2079ab164 --- /dev/null +++ b/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c @@ -0,0 +1,62 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/filters/http/stateful_session/v3/stateful_session.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#include +#include "upb/msg_internal.h" +#include "envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h" +#include "envoy/config/core/v3/extension.upb.h" +#include "udpa/annotations/status.upb.h" +#include "validate/validate.upb.h" + +#include "upb/port_def.inc" + +static const upb_MiniTable_Sub envoy_extensions_filters_http_stateful_session_v3_StatefulSession_submsgs[1] = { + {.submsg = &envoy_config_core_v3_TypedExtensionConfig_msginit}, +}; + +static const upb_MiniTable_Field envoy_extensions_filters_http_stateful_session_v3_StatefulSession__fields[1] = { + {1, UPB_SIZE(4, 8), UPB_SIZE(1, 1), 0, 11, kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit = { + &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_submsgs[0], + &envoy_extensions_filters_http_stateful_session_v3_StatefulSession__fields[0], + UPB_SIZE(8, 16), 1, kUpb_ExtMode_NonExtendable, 1, 255, 0, +}; + +static const upb_MiniTable_Sub envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_submsgs[1] = { + {.submsg = &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit}, +}; + +static const upb_MiniTable_Field envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute__fields[2] = { + {1, UPB_SIZE(4, 8), UPB_SIZE(-1, -1), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(4, 8), UPB_SIZE(-1, -1), 0, 11, kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit = { + &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_submsgs[0], + &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute__fields[0], + UPB_SIZE(8, 16), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0, +}; + +static const upb_MiniTable *messages_layout[2] = { + &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, + &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, +}; + +const upb_MiniTable_File envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upb_file_layout = { + messages_layout, + NULL, + NULL, + 2, + 0, + 0, +}; + +#include "upb/port_undef.inc" + diff --git a/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h b/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h new file mode 100644 index 00000000000..d93a0593580 --- /dev/null +++ b/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h @@ -0,0 +1,179 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/filters/http/stateful_session/v3/stateful_session.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#ifndef ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPB_H_ +#define ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPB_H_ + +#include "upb/msg_internal.h" +#include "upb/decode.h" +#include "upb/decode_fast.h" +#include "upb/encode.h" + +#include "upb/port_def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession; +struct envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute; +typedef struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession envoy_extensions_filters_http_stateful_session_v3_StatefulSession; +typedef struct envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute; +extern const upb_MiniTable envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit; +extern const upb_MiniTable envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit; +struct envoy_config_core_v3_TypedExtensionConfig; +extern const upb_MiniTable envoy_config_core_v3_TypedExtensionConfig_msginit; + + + +/* envoy.extensions.filters.http.stateful_session.v3.StatefulSession */ + +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSession* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_new(upb_Arena* arena) { + return (envoy_extensions_filters_http_stateful_session_v3_StatefulSession*)_upb_Message_New(&envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, arena); +} +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSession* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_parse(const char* buf, size_t size, upb_Arena* arena) { + envoy_extensions_filters_http_stateful_session_v3_StatefulSession* ret = envoy_extensions_filters_http_stateful_session_v3_StatefulSession_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, NULL, 0, arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSession* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + envoy_extensions_filters_http_stateful_session_v3_StatefulSession* ret = envoy_extensions_filters_http_stateful_session_v3_StatefulSession_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, extreg, options, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_serialize(const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_serialize_ex(const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE bool envoy_extensions_filters_http_stateful_session_v3_StatefulSession_has_session_state(const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg) { + return _upb_hasbit(msg, 1); +} +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSession_clear_session_state(const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg) { + *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const upb_Message*) = NULL; +} +UPB_INLINE const struct envoy_config_core_v3_TypedExtensionConfig* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_session_state(const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg) { + return *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const struct envoy_config_core_v3_TypedExtensionConfig*); +} + +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSession_set_session_state(envoy_extensions_filters_http_stateful_session_v3_StatefulSession *msg, struct envoy_config_core_v3_TypedExtensionConfig* value) { + _upb_sethas(msg, 1); + *UPB_PTR_AT(msg, UPB_SIZE(4, 8), struct envoy_config_core_v3_TypedExtensionConfig*) = value; +} +UPB_INLINE struct envoy_config_core_v3_TypedExtensionConfig* envoy_extensions_filters_http_stateful_session_v3_StatefulSession_mutable_session_state(envoy_extensions_filters_http_stateful_session_v3_StatefulSession* msg, upb_Arena* arena) { + struct envoy_config_core_v3_TypedExtensionConfig* sub = (struct envoy_config_core_v3_TypedExtensionConfig*)envoy_extensions_filters_http_stateful_session_v3_StatefulSession_session_state(msg); + if (sub == NULL) { + sub = (struct envoy_config_core_v3_TypedExtensionConfig*)_upb_Message_New(&envoy_config_core_v3_TypedExtensionConfig_msginit, arena); + if (!sub) return NULL; + envoy_extensions_filters_http_stateful_session_v3_StatefulSession_set_session_state(msg, sub); + } + return sub; +} + +/* envoy.extensions.filters.http.stateful_session.v3.StatefulSessionPerRoute */ + +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_new(upb_Arena* arena) { + return (envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute*)_upb_Message_New(&envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, arena); +} +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_parse(const char* buf, size_t size, upb_Arena* arena) { + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* ret = envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, NULL, 0, arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* ret = envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, extreg, options, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_serialize(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_serialize_ex(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_msginit, options, arena, &ptr, len); + return ptr; +} +typedef enum { + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_disabled = 1, + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_stateful_session = 2, + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_NOT_SET = 0 +} envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_oneofcases; +UPB_INLINE envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_oneofcases envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_case(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + return (envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_oneofcases)*UPB_PTR_AT(msg, UPB_SIZE(0, 0), int32_t); +} +UPB_INLINE bool envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_has_disabled(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + return _upb_getoneofcase(msg, UPB_SIZE(0, 0)) == 1; +} +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_clear_disabled(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + UPB_WRITE_ONEOF(msg, bool, UPB_SIZE(4, 8), 0, UPB_SIZE(0, 0), envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_NOT_SET); +} +UPB_INLINE bool envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_disabled(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + return UPB_READ_ONEOF(msg, bool, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 1, false); +} +UPB_INLINE bool envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_has_stateful_session(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + return _upb_getoneofcase(msg, UPB_SIZE(0, 0)) == 2; +} +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_clear_stateful_session(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + UPB_WRITE_ONEOF(msg, envoy_extensions_filters_http_stateful_session_v3_StatefulSession*, UPB_SIZE(4, 8), 0, UPB_SIZE(0, 0), envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_override_NOT_SET); +} +UPB_INLINE const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_stateful_session(const envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg) { + return UPB_READ_ONEOF(msg, const envoy_extensions_filters_http_stateful_session_v3_StatefulSession*, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 2, NULL); +} + +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_set_disabled(envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute *msg, bool value) { + UPB_WRITE_ONEOF(msg, bool, UPB_SIZE(4, 8), value, UPB_SIZE(0, 0), 1); +} +UPB_INLINE void envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_set_stateful_session(envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute *msg, envoy_extensions_filters_http_stateful_session_v3_StatefulSession* value) { + UPB_WRITE_ONEOF(msg, envoy_extensions_filters_http_stateful_session_v3_StatefulSession*, UPB_SIZE(4, 8), value, UPB_SIZE(0, 0), 2); +} +UPB_INLINE struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession* envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_mutable_stateful_session(envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute* msg, upb_Arena* arena) { + struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession* sub = (struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession*)envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_stateful_session(msg); + if (sub == NULL) { + sub = (struct envoy_extensions_filters_http_stateful_session_v3_StatefulSession*)_upb_Message_New(&envoy_extensions_filters_http_stateful_session_v3_StatefulSession_msginit, arena); + if (!sub) return NULL; + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_set_stateful_session(msg, sub); + } + return sub; +} + +extern const upb_MiniTable_File envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upb_file_layout; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port_undef.inc" + +#endif /* ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPB_H_ */ diff --git a/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c b/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c new file mode 100644 index 00000000000..08c4a4a2765 --- /dev/null +++ b/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c @@ -0,0 +1,46 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/http/stateful_session/cookie/v3/cookie.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#include +#include "upb/msg_internal.h" +#include "envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h" +#include "envoy/type/http/v3/cookie.upb.h" +#include "udpa/annotations/status.upb.h" +#include "validate/validate.upb.h" + +#include "upb/port_def.inc" + +static const upb_MiniTable_Sub envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_submsgs[1] = { + {.submsg = &envoy_type_http_v3_Cookie_msginit}, +}; + +static const upb_MiniTable_Field envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState__fields[1] = { + {1, UPB_SIZE(4, 8), UPB_SIZE(1, 1), 0, 11, kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit = { + &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_submsgs[0], + &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState__fields[0], + UPB_SIZE(8, 16), 1, kUpb_ExtMode_NonExtendable, 1, 255, 0, +}; + +static const upb_MiniTable *messages_layout[1] = { + &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, +}; + +const upb_MiniTable_File envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upb_file_layout = { + messages_layout, + NULL, + NULL, + 1, + 0, + 0, +}; + +#include "upb/port_undef.inc" + diff --git a/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h b/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h new file mode 100644 index 00000000000..84010d82e2c --- /dev/null +++ b/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h @@ -0,0 +1,98 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/http/stateful_session/cookie/v3/cookie.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#ifndef ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPB_H_ +#define ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPB_H_ + +#include "upb/msg_internal.h" +#include "upb/decode.h" +#include "upb/decode_fast.h" +#include "upb/encode.h" + +#include "upb/port_def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +struct envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState; +typedef struct envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState; +extern const upb_MiniTable envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit; +struct envoy_type_http_v3_Cookie; +extern const upb_MiniTable envoy_type_http_v3_Cookie_msginit; + + + +/* envoy.extensions.http.stateful_session.cookie.v3.CookieBasedSessionState */ + +UPB_INLINE envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_new(upb_Arena* arena) { + return (envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState*)_upb_Message_New(&envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, arena); +} +UPB_INLINE envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_parse(const char* buf, size_t size, upb_Arena* arena) { + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* ret = envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, NULL, 0, arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* ret = envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, ret, &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, extreg, options, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_serialize(const envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_serialize_ex(const envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(msg, &envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_msginit, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE bool envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_has_cookie(const envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg) { + return _upb_hasbit(msg, 1); +} +UPB_INLINE void envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_clear_cookie(const envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg) { + *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const upb_Message*) = NULL; +} +UPB_INLINE const struct envoy_type_http_v3_Cookie* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_cookie(const envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg) { + return *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const struct envoy_type_http_v3_Cookie*); +} + +UPB_INLINE void envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_set_cookie(envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState *msg, struct envoy_type_http_v3_Cookie* value) { + _upb_sethas(msg, 1); + *UPB_PTR_AT(msg, UPB_SIZE(4, 8), struct envoy_type_http_v3_Cookie*) = value; +} +UPB_INLINE struct envoy_type_http_v3_Cookie* envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_mutable_cookie(envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState* msg, upb_Arena* arena) { + struct envoy_type_http_v3_Cookie* sub = (struct envoy_type_http_v3_Cookie*)envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_cookie(msg); + if (sub == NULL) { + sub = (struct envoy_type_http_v3_Cookie*)_upb_Message_New(&envoy_type_http_v3_Cookie_msginit, arena); + if (!sub) return NULL; + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_set_cookie(msg, sub); + } + return sub; +} + +extern const upb_MiniTable_File envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upb_file_layout; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port_undef.inc" + +#endif /* ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPB_H_ */ diff --git a/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c b/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c new file mode 100644 index 00000000000..8885ebe1566 --- /dev/null +++ b/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c @@ -0,0 +1,60 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/filters/http/stateful_session/v3/stateful_session.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#include "upb/def.h" +#include "envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h" +#include "envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h" + +extern _upb_DefPool_Init envoy_config_core_v3_extension_proto_upbdefinit; +extern _upb_DefPool_Init udpa_annotations_status_proto_upbdefinit; +extern _upb_DefPool_Init validate_validate_proto_upbdefinit; +static const char descriptor[733] = {'\n', 'H', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/', 'f', 'i', 'l', 't', 'e', 'r', +'s', '/', 'h', 't', 't', 'p', '/', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '/', 'v', +'3', '/', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', 'o', '\022', +'1', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'f', 'i', 'l', 't', 'e', 'r', 's', +'.', 'h', 't', 't', 'p', '.', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'v', '3', +'\032', '$', 'e', 'n', 'v', 'o', 'y', '/', 'c', 'o', 'n', 'f', 'i', 'g', '/', 'c', 'o', 'r', 'e', '/', 'v', '3', '/', 'e', 'x', +'t', 'e', 'n', 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', 'o', '\032', '\035', 'u', 'd', 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', +'a', 't', 'i', 'o', 'n', 's', '/', 's', 't', 'a', 't', 'u', 's', '.', 'p', 'r', 'o', 't', 'o', '\032', '\027', 'v', 'a', 'l', 'i', +'d', 'a', 't', 'e', '/', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'e', '.', 'p', 'r', 'o', 't', 'o', '\"', 'b', '\n', '\017', 'S', 't', +'a', 't', 'e', 'f', 'u', 'l', 'S', 'e', 's', 's', 'i', 'o', 'n', '\022', 'O', '\n', '\r', 's', 'e', 's', 's', 'i', 'o', 'n', '_', +'s', 't', 'a', 't', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', +'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'T', 'y', 'p', 'e', 'd', 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 'C', +'o', 'n', 'f', 'i', 'g', 'R', '\014', 's', 'e', 's', 's', 'i', 'o', 'n', 'S', 't', 'a', 't', 'e', '\"', '\302', '\001', '\n', '\027', 'S', +'t', 'a', 't', 'e', 'f', 'u', 'l', 'S', 'e', 's', 's', 'i', 'o', 'n', 'P', 'e', 'r', 'R', 'o', 'u', 't', 'e', '\022', '%', '\n', +'\010', 'd', 'i', 's', 'a', 'b', 'l', 'e', 'd', '\030', '\001', ' ', '\001', '(', '\010', 'B', '\007', '\372', 'B', '\004', 'j', '\002', '\010', '\001', 'H', +'\000', 'R', '\010', 'd', 'i', 's', 'a', 'b', 'l', 'e', 'd', '\022', 'o', '\n', '\020', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', +'e', 's', 's', 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\013', '2', 'B', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', +'n', 's', 'i', 'o', 'n', 's', '.', 'f', 'i', 'l', 't', 'e', 'r', 's', '.', 'h', 't', 't', 'p', '.', 's', 't', 'a', 't', 'e', +'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'v', '3', '.', 'S', 't', 'a', 't', 'e', 'f', 'u', 'l', 'S', 'e', +'s', 's', 'i', 'o', 'n', 'H', '\000', 'R', '\017', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', 'S', 'e', 's', 's', 'i', 'o', 'n', 'B', +'\017', '\n', '\010', 'o', 'v', 'e', 'r', 'r', 'i', 'd', 'e', '\022', '\003', '\370', 'B', '\001', 'B', '\316', '\001', '\n', '?', 'i', 'o', '.', 'e', +'n', 'v', 'o', 'y', 'p', 'r', 'o', 'x', 'y', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', +'s', '.', 'f', 'i', 'l', 't', 'e', 'r', 's', '.', 'h', 't', 't', 'p', '.', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', +'e', 's', 's', 'i', 'o', 'n', '.', 'v', '3', 'B', '\024', 'S', 't', 'a', 't', 'e', 'f', 'u', 'l', 'S', 'e', 's', 's', 'i', 'o', +'n', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', 'k', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'e', 'n', 'v', 'o', +'y', 'p', 'r', 'o', 'x', 'y', '/', 'g', 'o', '-', 'c', 'o', 'n', 't', 'r', 'o', 'l', '-', 'p', 'l', 'a', 'n', 'e', '/', 'e', +'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/', 'f', 'i', 'l', 't', 'e', 'r', 's', '/', 'h', +'t', 't', 'p', '/', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '/', 'v', '3', ';', 's', +'t', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', 'v', '3', '\272', '\200', '\310', '\321', '\006', '\002', '\020', '\002', +'b', '\006', 'p', 'r', 'o', 't', 'o', '3', +}; + +static _upb_DefPool_Init *deps[4] = { + &envoy_config_core_v3_extension_proto_upbdefinit, + &udpa_annotations_status_proto_upbdefinit, + &validate_validate_proto_upbdefinit, + NULL +}; + +_upb_DefPool_Init envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upbdefinit = { + deps, + &envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upb_file_layout, + "envoy/extensions/filters/http/stateful_session/v3/stateful_session.proto", + UPB_STRINGVIEW_INIT(descriptor, 733) +}; diff --git a/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h b/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h new file mode 100644 index 00000000000..a1f0e5910ae --- /dev/null +++ b/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h @@ -0,0 +1,40 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/filters/http/stateful_session/v3/stateful_session.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#ifndef ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPBDEFS_H_ +#define ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPBDEFS_H_ + +#include "upb/def.h" +#include "upb/port_def.inc" +#ifdef __cplusplus +extern "C" { +#endif + +#include "upb/def.h" + +#include "upb/port_def.inc" + +extern _upb_DefPool_Init envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upbdefinit; + +UPB_INLINE const upb_MessageDef *envoy_extensions_filters_http_stateful_session_v3_StatefulSession_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "envoy.extensions.filters.http.stateful_session.v3.StatefulSession"); +} + +UPB_INLINE const upb_MessageDef *envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &envoy_extensions_filters_http_stateful_session_v3_stateful_session_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "envoy.extensions.filters.http.stateful_session.v3.StatefulSessionPerRoute"); +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port_undef.inc" + +#endif /* ENVOY_EXTENSIONS_FILTERS_HTTP_STATEFUL_SESSION_V3_STATEFUL_SESSION_PROTO_UPBDEFS_H_ */ diff --git a/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c b/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c new file mode 100644 index 00000000000..492b1802ae4 --- /dev/null +++ b/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c @@ -0,0 +1,50 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/http/stateful_session/cookie/v3/cookie.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#include "upb/def.h" +#include "envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h" +#include "envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h" + +extern _upb_DefPool_Init envoy_type_http_v3_cookie_proto_upbdefinit; +extern _upb_DefPool_Init udpa_annotations_status_proto_upbdefinit; +extern _upb_DefPool_Init validate_validate_proto_upbdefinit; +static const char descriptor[487] = {'\n', '=', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/', 'h', 't', 't', 'p', '/', 's', +'t', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '/', 'c', 'o', 'o', 'k', 'i', 'e', '/', 'v', '3', +'/', 'c', 'o', 'o', 'k', 'i', 'e', '.', 'p', 'r', 'o', 't', 'o', '\022', '0', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', +'n', 's', 'i', 'o', 'n', 's', '.', 'h', 't', 't', 'p', '.', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', +'i', 'o', 'n', '.', 'c', 'o', 'o', 'k', 'i', 'e', '.', 'v', '3', '\032', '\037', 'e', 'n', 'v', 'o', 'y', '/', 't', 'y', 'p', 'e', +'/', 'h', 't', 't', 'p', '/', 'v', '3', '/', 'c', 'o', 'o', 'k', 'i', 'e', '.', 'p', 'r', 'o', 't', 'o', '\032', '\035', 'u', 'd', +'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 's', 't', 'a', 't', 'u', 's', '.', 'p', 'r', 'o', +'t', 'o', '\032', '\027', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'e', '/', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'e', '.', 'p', 'r', 'o', +'t', 'o', '\"', 'W', '\n', '\027', 'C', 'o', 'o', 'k', 'i', 'e', 'B', 'a', 's', 'e', 'd', 'S', 'e', 's', 's', 'i', 'o', 'n', 'S', +'t', 'a', 't', 'e', '\022', '<', '\n', '\006', 'c', 'o', 'o', 'k', 'i', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', '\032', '.', 'e', 'n', +'v', 'o', 'y', '.', 't', 'y', 'p', 'e', '.', 'h', 't', 't', 'p', '.', 'v', '3', '.', 'C', 'o', 'o', 'k', 'i', 'e', 'B', '\010', +'\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\006', 'c', 'o', 'o', 'k', 'i', 'e', 'B', '\271', '\001', '\n', '>', 'i', 'o', '.', 'e', +'n', 'v', 'o', 'y', 'p', 'r', 'o', 'x', 'y', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', +'s', '.', 'h', 't', 't', 'p', '.', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'c', +'o', 'o', 'k', 'i', 'e', '.', 'v', '3', 'B', '\013', 'C', 'o', 'o', 'k', 'i', 'e', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '`', +'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'e', 'n', 'v', 'o', 'y', 'p', 'r', 'o', 'x', 'y', '/', 'g', 'o', '-', +'c', 'o', 'n', 't', 'r', 'o', 'l', '-', 'p', 'l', 'a', 'n', 'e', '/', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', +'s', 'i', 'o', 'n', 's', '/', 'h', 't', 't', 'p', '/', 's', 't', 'a', 't', 'e', 'f', 'u', 'l', '_', 's', 'e', 's', 's', 'i', +'o', 'n', '/', 'c', 'o', 'o', 'k', 'i', 'e', '/', 'v', '3', ';', 'c', 'o', 'o', 'k', 'i', 'e', 'v', '3', '\272', '\200', '\310', '\321', +'\006', '\002', '\020', '\002', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', +}; + +static _upb_DefPool_Init *deps[4] = { + &envoy_type_http_v3_cookie_proto_upbdefinit, + &udpa_annotations_status_proto_upbdefinit, + &validate_validate_proto_upbdefinit, + NULL +}; + +_upb_DefPool_Init envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upbdefinit = { + deps, + &envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upb_file_layout, + "envoy/extensions/http/stateful_session/cookie/v3/cookie.proto", + UPB_STRINGVIEW_INIT(descriptor, 487) +}; diff --git a/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h b/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h new file mode 100644 index 00000000000..cd4011ae179 --- /dev/null +++ b/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h @@ -0,0 +1,35 @@ +/* This file was generated by upbc (the upb compiler) from the input + * file: + * + * envoy/extensions/http/stateful_session/cookie/v3/cookie.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. */ + +#ifndef ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPBDEFS_H_ +#define ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPBDEFS_H_ + +#include "upb/def.h" +#include "upb/port_def.inc" +#ifdef __cplusplus +extern "C" { +#endif + +#include "upb/def.h" + +#include "upb/port_def.inc" + +extern _upb_DefPool_Init envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upbdefinit; + +UPB_INLINE const upb_MessageDef *envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &envoy_extensions_http_stateful_session_cookie_v3_cookie_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "envoy.extensions.http.stateful_session.cookie.v3.CookieBasedSessionState"); +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port_undef.inc" + +#endif /* ENVOY_EXTENSIONS_HTTP_STATEFUL_SESSION_COOKIE_V3_COOKIE_PROTO_UPBDEFS_H_ */ diff --git a/src/core/ext/xds/xds_cluster.cc b/src/core/ext/xds/xds_cluster.cc index d6a9a3020d5..554abb363e8 100644 --- a/src/core/ext/xds/xds_cluster.cc +++ b/src/core/ext/xds/xds_cluster.cc @@ -74,6 +74,15 @@ bool XdsCustomLbPolicyEnabled() { return parse_succeeded && parsed_value; } +// TODO(eostroukhov): Remove once this feature is no longer experimental. +bool XdsHostOverrideEnabled() { + auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_ENABLE_HOST_OVERRIDE"); + if (!value.has_value()) return false; + bool parsed_value; + bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value); + return parse_succeeded && parsed_value; +} + // // XdsClusterResource // diff --git a/src/core/ext/xds/xds_cluster.h b/src/core/ext/xds/xds_cluster.h index 830fc052d74..8c29d8e3a75 100644 --- a/src/core/ext/xds/xds_cluster.h +++ b/src/core/ext/xds/xds_cluster.h @@ -45,6 +45,7 @@ namespace grpc_core { bool XdsCustomLbPolicyEnabled(); +bool XdsHostOverrideEnabled(); struct XdsClusterResource : public XdsResourceType::ResourceData { enum ClusterType { EDS, LOGICAL_DNS, AGGREGATE }; diff --git a/src/core/ext/xds/xds_http_fault_filter.cc b/src/core/ext/xds/xds_http_fault_filter.cc index 7604d00e726..b16fdb762c3 100644 --- a/src/core/ext/xds/xds_http_fault_filter.cc +++ b/src/core/ext/xds/xds_http_fault_filter.cc @@ -85,9 +85,9 @@ void XdsHttpFaultFilter::PopulateSymtab(upb_DefPool* symtab) const { } absl::optional -XdsHttpFaultFilter::GenerateFilterConfig(XdsExtension extension, - upb_Arena* arena, - ValidationErrors* errors) const { +XdsHttpFaultFilter::GenerateFilterConfig( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { absl::string_view* serialized_filter_config = absl::get_if(&extension.value); if (serialized_filter_config == nullptr) { @@ -96,7 +96,7 @@ XdsHttpFaultFilter::GenerateFilterConfig(XdsExtension extension, } auto* http_fault = envoy_extensions_filters_http_fault_v3_HTTPFault_parse( serialized_filter_config->data(), serialized_filter_config->size(), - arena); + context.arena); if (http_fault == nullptr) { errors->AddError("could not parse fault injection filter config"); return absl::nullopt; @@ -206,10 +206,11 @@ XdsHttpFaultFilter::GenerateFilterConfig(XdsExtension extension, absl::optional XdsHttpFaultFilter::GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, ValidationErrors* errors) const { + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { // HTTPFault filter has the same message type in HTTP connection manager's // filter config and in overriding filter config field. - return GenerateFilterConfig(std::move(extension), arena, errors); + return GenerateFilterConfig(context, std::move(extension), errors); } const grpc_channel_filter* XdsHttpFaultFilter::channel_filter() const { diff --git a/src/core/ext/xds/xds_http_fault_filter.h b/src/core/ext/xds/xds_http_fault_filter.h index a72a6c5cab5..63e20de6946 100644 --- a/src/core/ext/xds/xds_http_fault_filter.h +++ b/src/core/ext/xds/xds_http_fault_filter.h @@ -39,10 +39,10 @@ class XdsHttpFaultFilter : public XdsHttpFilterImpl { absl::string_view OverrideConfigProtoName() const override; void PopulateSymtab(upb_DefPool* symtab) const override; absl::optional GenerateFilterConfig( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; absl::optional GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; diff --git a/src/core/ext/xds/xds_http_filters.cc b/src/core/ext/xds/xds_http_filters.cc index c6b8c0b47f0..28bae2317eb 100644 --- a/src/core/ext/xds/xds_http_filters.cc +++ b/src/core/ext/xds/xds_http_filters.cc @@ -29,8 +29,10 @@ #include +#include "src/core/ext/xds/xds_cluster.h" #include "src/core/ext/xds/xds_http_fault_filter.h" #include "src/core/ext/xds/xds_http_rbac_filter.h" +#include "src/core/ext/xds/xds_http_stateful_session_filter.h" namespace grpc_core { @@ -51,9 +53,9 @@ void XdsHttpRouterFilter::PopulateSymtab(upb_DefPool* symtab) const { } absl::optional -XdsHttpRouterFilter::GenerateFilterConfig(XdsExtension extension, - upb_Arena* arena, - ValidationErrors* errors) const { +XdsHttpRouterFilter::GenerateFilterConfig( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { absl::string_view* serialized_filter_config = absl::get_if(&extension.value); if (serialized_filter_config == nullptr) { @@ -62,7 +64,7 @@ XdsHttpRouterFilter::GenerateFilterConfig(XdsExtension extension, } if (envoy_extensions_filters_http_router_v3_Router_parse( serialized_filter_config->data(), serialized_filter_config->size(), - arena) == nullptr) { + context.arena) == nullptr) { errors->AddError("could not parse router filter config"); return absl::nullopt; } @@ -71,8 +73,8 @@ XdsHttpRouterFilter::GenerateFilterConfig(XdsExtension extension, absl::optional XdsHttpRouterFilter::GenerateFilterConfigOverride( - XdsExtension /*extension*/, upb_Arena* /*arena*/, - ValidationErrors* errors) const { + const XdsResourceType::DecodeContext& /*context*/, + XdsExtension /*extension*/, ValidationErrors* errors) const { errors->AddError("router filter does not support config override"); return absl::nullopt; } @@ -86,6 +88,9 @@ XdsHttpFilterRegistry::XdsHttpFilterRegistry(bool register_builtins) { RegisterFilter(std::make_unique()); RegisterFilter(std::make_unique()); RegisterFilter(std::make_unique()); + if (XdsHostOverrideEnabled()) { + RegisterFilter(std::make_unique()); + } } } diff --git a/src/core/ext/xds/xds_http_filters.h b/src/core/ext/xds/xds_http_filters.h index 7693d270ca9..7f9926068c4 100644 --- a/src/core/ext/xds/xds_http_filters.h +++ b/src/core/ext/xds/xds_http_filters.h @@ -34,6 +34,7 @@ #include "upb/def.h" #include "src/core/ext/xds/xds_common_types.h" +#include "src/core/ext/xds/xds_resource_type.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_fwd.h" #include "src/core/lib/gprpp/validation_errors.h" @@ -85,13 +86,13 @@ class XdsHttpFilterImpl { // Generates a Config from the xDS filter config proto. // Used for the top-level config in the HCM HTTP filter list. virtual absl::optional GenerateFilterConfig( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const = 0; // Generates a Config from the xDS filter config proto. // Used for the typed_per_filter_config override in VirtualHost and Route. virtual absl::optional GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const = 0; // C-core channel filter implementation. @@ -129,10 +130,10 @@ class XdsHttpRouterFilter : public XdsHttpFilterImpl { absl::string_view OverrideConfigProtoName() const override; void PopulateSymtab(upb_DefPool* symtab) const override; absl::optional GenerateFilterConfig( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; absl::optional GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; const grpc_channel_filter* channel_filter() const override { return nullptr; } absl::StatusOr GenerateServiceConfig( diff --git a/src/core/ext/xds/xds_http_rbac_filter.cc b/src/core/ext/xds/xds_http_rbac_filter.cc index e8cd4c79c00..fcd34240b95 100644 --- a/src/core/ext/xds/xds_http_rbac_filter.cc +++ b/src/core/ext/xds/xds_http_rbac_filter.cc @@ -434,9 +434,9 @@ void XdsHttpRbacFilter::PopulateSymtab(upb_DefPool* symtab) const { } absl::optional -XdsHttpRbacFilter::GenerateFilterConfig(XdsExtension extension, - upb_Arena* arena, - ValidationErrors* errors) const { +XdsHttpRbacFilter::GenerateFilterConfig( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { absl::string_view* serialized_filter_config = absl::get_if(&extension.value); if (serialized_filter_config == nullptr) { @@ -445,7 +445,7 @@ XdsHttpRbacFilter::GenerateFilterConfig(XdsExtension extension, } auto* rbac = envoy_extensions_filters_http_rbac_v3_RBAC_parse( serialized_filter_config->data(), serialized_filter_config->size(), - arena); + context.arena); if (rbac == nullptr) { errors->AddError("could not parse HTTP RBAC filter config"); return absl::nullopt; @@ -455,7 +455,8 @@ XdsHttpRbacFilter::GenerateFilterConfig(XdsExtension extension, absl::optional XdsHttpRbacFilter::GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, ValidationErrors* errors) const { + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { absl::string_view* serialized_filter_config = absl::get_if(&extension.value); if (serialized_filter_config == nullptr) { @@ -465,7 +466,7 @@ XdsHttpRbacFilter::GenerateFilterConfigOverride( auto* rbac_per_route = envoy_extensions_filters_http_rbac_v3_RBACPerRoute_parse( serialized_filter_config->data(), serialized_filter_config->size(), - arena); + context.arena); if (rbac_per_route == nullptr) { errors->AddError("could not parse RBACPerRoute"); return absl::nullopt; diff --git a/src/core/ext/xds/xds_http_rbac_filter.h b/src/core/ext/xds/xds_http_rbac_filter.h index a582f06f625..7d031eda60a 100644 --- a/src/core/ext/xds/xds_http_rbac_filter.h +++ b/src/core/ext/xds/xds_http_rbac_filter.h @@ -39,10 +39,10 @@ class XdsHttpRbacFilter : public XdsHttpFilterImpl { absl::string_view OverrideConfigProtoName() const override; void PopulateSymtab(upb_DefPool* symtab) const override; absl::optional GenerateFilterConfig( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; absl::optional GenerateFilterConfigOverride( - XdsExtension extension, upb_Arena* arena, + const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; diff --git a/src/core/ext/xds/xds_http_stateful_session_filter.cc b/src/core/ext/xds/xds_http_stateful_session_filter.cc new file mode 100644 index 00000000000..fbe871e2db1 --- /dev/null +++ b/src/core/ext/xds/xds_http_stateful_session_filter.cc @@ -0,0 +1,227 @@ +// +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include + +#include "src/core/ext/xds/xds_http_stateful_session_filter.h" + +#include + +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/string_view.h" +#include "absl/types/variant.h" +#include "envoy/config/core/v3/extension.upb.h" +#include "envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h" +#include "envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h" +#include "envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h" +#include "envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h" +#include "envoy/type/http/v3/cookie.upb.h" +#include "envoy/type/v3/percent.upb.h" +#include "google/protobuf/wrappers.upb.h" +#include "upb/def.h" + +#include + +#include "src/core/ext/filters/stateful_session/stateful_session_filter.h" +#include "src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h" +#include "src/core/ext/xds/upb_utils.h" +#include "src/core/ext/xds/xds_common_types.h" +#include "src/core/ext/xds/xds_http_filters.h" +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/channel/status_util.h" +#include "src/core/lib/gprpp/time.h" +#include "src/core/lib/gprpp/validation_errors.h" +#include "src/core/lib/json/json.h" +#include "src/core/lib/transport/status_conversion.h" + +namespace grpc_core { + +absl::string_view XdsHttpStatefulSessionFilter::ConfigProtoName() const { + return "envoy.extensions.filters.http.stateful_session.v3.StatefulSession"; +} + +absl::string_view XdsHttpStatefulSessionFilter::OverrideConfigProtoName() + const { + return "envoy.extensions.filters.http.stateful_session.v3" + ".StatefulSessionPerRoute"; +} + +void XdsHttpStatefulSessionFilter::PopulateSymtab(upb_DefPool* symtab) const { + envoy_extensions_filters_http_stateful_session_v3_StatefulSession_getmsgdef( + symtab); + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_getmsgdef( + symtab); + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_getmsgdef( + symtab); +} + +namespace { + +Json::Object ValidateStatefulSession( + const XdsResourceType::DecodeContext& context, + const envoy_extensions_filters_http_stateful_session_v3_StatefulSession* + stateful_session, + ValidationErrors* errors) { + ValidationErrors::ScopedField field(errors, ".session_state"); + const auto* session_state = + envoy_extensions_filters_http_stateful_session_v3_StatefulSession_session_state( + stateful_session); + if (session_state == nullptr) { + errors->AddError("field not present"); + return {}; + } + ValidationErrors::ScopedField field2(errors, ".typed_config"); + const auto* typed_config = + envoy_config_core_v3_TypedExtensionConfig_typed_config(session_state); + auto extension = ExtractXdsExtension(context, typed_config, errors); + if (!extension.has_value()) return {}; + if (extension->type != + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState") { + errors->AddError("unsupported session state type"); + return {}; + } + absl::string_view* serialized_session_state = + absl::get_if(&extension->value); + if (serialized_session_state == nullptr) { + errors->AddError("could not parse session state config"); + return {}; + } + auto* cookie_state = + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_parse( + serialized_session_state->data(), serialized_session_state->size(), + context.arena); + if (cookie_state == nullptr) { + errors->AddError("could not parse session state config"); + return {}; + } + ValidationErrors::ScopedField field3(errors, ".cookie"); + const auto* cookie = + envoy_extensions_http_stateful_session_cookie_v3_CookieBasedSessionState_cookie( + cookie_state); + if (cookie == nullptr) { + errors->AddError("field not present"); + return {}; + } + Json::Object cookie_config; + // name + std::string cookie_name = + UpbStringToStdString(envoy_type_http_v3_Cookie_name(cookie)); + if (cookie_name.empty()) { + ValidationErrors::ScopedField field(errors, ".name"); + errors->AddError("field not present"); + } + cookie_config["name"] = std::move(cookie_name); + // ttl + { + ValidationErrors::ScopedField field(errors, ".ttl"); + const auto* duration = envoy_type_http_v3_Cookie_ttl(cookie); + if (duration != nullptr) { + Duration ttl = ParseDuration(duration, errors); + cookie_config["ttl"] = ttl.ToJsonString(); + } + } + // path + std::string path = + UpbStringToStdString(envoy_type_http_v3_Cookie_path(cookie)); + if (!path.empty()) cookie_config["path"] = std::move(path); + return cookie_config; +} + +} // namespace + +absl::optional +XdsHttpStatefulSessionFilter::GenerateFilterConfig( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { + absl::string_view* serialized_filter_config = + absl::get_if(&extension.value); + if (serialized_filter_config == nullptr) { + errors->AddError("could not parse stateful session filter config"); + return absl::nullopt; + } + auto* stateful_session = + envoy_extensions_filters_http_stateful_session_v3_StatefulSession_parse( + serialized_filter_config->data(), serialized_filter_config->size(), + context.arena); + if (stateful_session == nullptr) { + errors->AddError("could not parse stateful session filter config"); + return absl::nullopt; + } + return FilterConfig{ + ConfigProtoName(), + ValidateStatefulSession(context, stateful_session, errors)}; +} + +absl::optional +XdsHttpStatefulSessionFilter::GenerateFilterConfigOverride( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const { + absl::string_view* serialized_filter_config = + absl::get_if(&extension.value); + if (serialized_filter_config == nullptr) { + errors->AddError("could not parse stateful session filter override config"); + return absl::nullopt; + } + auto* stateful_session_per_route = + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_parse( + serialized_filter_config->data(), serialized_filter_config->size(), + context.arena); + if (stateful_session_per_route == nullptr) { + errors->AddError("could not parse stateful session filter override config"); + return absl::nullopt; + } + Json::Object config; + if (!envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_disabled( + stateful_session_per_route)) { + ValidationErrors::ScopedField field(errors, ".stateful_session"); + const auto* stateful_session = + envoy_extensions_filters_http_stateful_session_v3_StatefulSessionPerRoute_stateful_session( + stateful_session_per_route); + if (stateful_session == nullptr) { + errors->AddError("field not present"); + } else { + config = ValidateStatefulSession(context, stateful_session, errors); + } + } + return FilterConfig{OverrideConfigProtoName(), Json(std::move(config))}; +} + +const grpc_channel_filter* XdsHttpStatefulSessionFilter::channel_filter() + const { + return &StatefulSessionFilter::kFilter; +} + +ChannelArgs XdsHttpStatefulSessionFilter::ModifyChannelArgs( + const ChannelArgs& args) const { + return args.Set(GRPC_ARG_PARSE_STATEFUL_SESSION_METHOD_CONFIG, 1); +} + +absl::StatusOr +XdsHttpStatefulSessionFilter::GenerateServiceConfig( + const FilterConfig& hcm_filter_config, + const FilterConfig* filter_config_override) const { + Json config = filter_config_override != nullptr + ? filter_config_override->config + : hcm_filter_config.config; + return ServiceConfigJsonEntry{"stateful_session", config.Dump()}; +} + +} // namespace grpc_core diff --git a/src/core/ext/xds/xds_http_stateful_session_filter.h b/src/core/ext/xds/xds_http_stateful_session_filter.h new file mode 100644 index 00000000000..008ba28ab7a --- /dev/null +++ b/src/core/ext/xds/xds_http_stateful_session_filter.h @@ -0,0 +1,58 @@ +// +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef GRPC_CORE_EXT_XDS_XDS_HTTP_STATEFUL_SESSION_FILTER_H +#define GRPC_CORE_EXT_XDS_XDS_HTTP_STATEFUL_SESSION_FILTER_H + +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" +#include "absl/types/optional.h" +#include "upb/arena.h" +#include "upb/def.h" + +#include "src/core/ext/xds/xds_common_types.h" +#include "src/core/ext/xds/xds_http_filters.h" +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/channel/channel_fwd.h" +#include "src/core/lib/gprpp/validation_errors.h" + +namespace grpc_core { + +class XdsHttpStatefulSessionFilter : public XdsHttpFilterImpl { + public: + absl::string_view ConfigProtoName() const override; + absl::string_view OverrideConfigProtoName() const override; + void PopulateSymtab(upb_DefPool* symtab) const override; + absl::optional GenerateFilterConfig( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const override; + absl::optional GenerateFilterConfigOverride( + const XdsResourceType::DecodeContext& context, XdsExtension extension, + ValidationErrors* errors) const override; + const grpc_channel_filter* channel_filter() const override; + ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; + absl::StatusOr GenerateServiceConfig( + const FilterConfig& hcm_filter_config, + const FilterConfig* filter_config_override) const override; + bool IsSupportedOnClients() const override { return true; } + bool IsSupportedOnServers() const override { return false; } +}; + +} // namespace grpc_core + +#endif // GRPC_CORE_EXT_XDS_XDS_HTTP_STATEFUL_SESSION_FILTER_H diff --git a/src/core/ext/xds/xds_lb_policy_registry.cc b/src/core/ext/xds/xds_lb_policy_registry.cc index ad99b012d05..7d90457299a 100644 --- a/src/core/ext/xds/xds_lb_policy_registry.cc +++ b/src/core/ext/xds/xds_lb_policy_registry.cc @@ -208,10 +208,6 @@ Json::Array XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig( const auto* typed_config = envoy_config_core_v3_TypedExtensionConfig_typed_config( typed_extension_config); - if (typed_config == nullptr) { - errors->AddError("field not present"); - return {}; - } auto extension = ExtractXdsExtension(context, typed_config, errors); if (!extension.has_value()) return {}; // Check for registered LB policy type. diff --git a/src/core/ext/xds/xds_listener.cc b/src/core/ext/xds/xds_listener.cc index 4da36a9d592..35fc6efe05a 100644 --- a/src/core/ext/xds/xds_listener.cc +++ b/src/core/ext/xds/xds_listener.cc @@ -411,8 +411,8 @@ XdsListenerResource::HttpConnectionManager HttpConnectionManagerParse( continue; } absl::optional filter_config = - filter_impl->GenerateFilterConfig(std::move(*extension), - context.arena, errors); + filter_impl->GenerateFilterConfig(context, std::move(*extension), + errors); if (filter_config.has_value()) { http_connection_manager.http_filters.emplace_back( XdsListenerResource::HttpConnectionManager::HttpFilter{ diff --git a/src/core/ext/xds/xds_route_config.cc b/src/core/ext/xds/xds_route_config.cc index 25478580839..cb48d930dc3 100644 --- a/src/core/ext/xds/xds_route_config.cc +++ b/src/core/ext/xds/xds_route_config.cc @@ -620,8 +620,8 @@ XdsRouteConfigResource::TypedPerFilterConfig ParseTypedPerFilterConfig( continue; } absl::optional filter_config = - filter_impl->GenerateFilterConfigOverride(std::move(*extension_to_use), - context.arena, errors); + filter_impl->GenerateFilterConfigOverride( + context, std::move(*extension_to_use), errors); if (filter_config.has_value()) { typed_per_filter_config[std::string(key)] = std::move(*filter_config); } diff --git a/src/proto/grpc/testing/xds/v3/BUILD b/src/proto/grpc/testing/xds/v3/BUILD index 8fe155cba3b..890eb54eff6 100644 --- a/src/proto/grpc/testing/xds/v3/BUILD +++ b/src/proto/grpc/testing/xds/v3/BUILD @@ -419,6 +419,34 @@ grpc_proto_library( well_known_protos = True, ) +grpc_proto_library( + name = "cookie_proto", + srcs = [ + "cookie.proto", + ], + well_known_protos = True, +) + +grpc_proto_library( + name = "stateful_session_cookie_proto", + srcs = [ + "stateful_session_cookie.proto", + ], + deps = [ + "cookie_proto", + ], +) + +grpc_proto_library( + name = "stateful_session_proto", + srcs = [ + "stateful_session.proto", + ], + deps = [ + "extension_proto", + ], +) + py_proto_library( name = "csds_py_pb2", deps = [":_csds_proto_only"], diff --git a/src/proto/grpc/testing/xds/v3/cookie.proto b/src/proto/grpc/testing/xds/v3/cookie.proto new file mode 100644 index 00000000000..8f2515f13cf --- /dev/null +++ b/src/proto/grpc/testing/xds/v3/cookie.proto @@ -0,0 +1,38 @@ +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Local copy of Envoy xDS proto file, used for testing only. + +syntax = "proto3"; + +package envoy.type.http.v3; + +import "google/protobuf/duration.proto"; + +// [#protodoc-title: Http cookie API] + +// Cookie defines an API for obtaining or generating HTTP cookie. +message Cookie { + // The name that will be used to obtain cookie value from downstream HTTP request or generate + // new cookie for downstream. + string name = 1; + + // Duration of cookie. This will be used to set the expiry time of a new cookie when it is + // generated. Set this to 0 to use a session cookie. + google.protobuf.Duration ttl = 2; + + // Path of cookie. This will be used to set the path of a new cookie when it is generated. + // If no path is specified here, no path will be set for the cookie. + string path = 3; +} diff --git a/src/proto/grpc/testing/xds/v3/stateful_session.proto b/src/proto/grpc/testing/xds/v3/stateful_session.proto new file mode 100644 index 00000000000..a033ec6a5bd --- /dev/null +++ b/src/proto/grpc/testing/xds/v3/stateful_session.proto @@ -0,0 +1,44 @@ +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Local copy of Envoy xDS proto file, used for testing only. + +syntax = "proto3"; + +package envoy.extensions.filters.http.stateful_session.v3; + +import "src/proto/grpc/testing/xds/v3/extension.proto"; + +// [#protodoc-title: Stateful session filter] +// Stateful session :ref:`configuration overview `. +// [#extension: envoy.filters.http.stateful_session] + +message StatefulSession { + // Specific implementation of session state. This session state will be used to store and + // get address of the upstream host to which the session is assigned. + // + // [#extension-category: envoy.http.stateful_session] + config.core.v3.TypedExtensionConfig session_state = 1; +} + +message StatefulSessionPerRoute { + oneof override { + // Disable the stateful session filter for this particular vhost or route. If disabled is + // specified in multiple per-filter-configs, the most specific one will be used. + bool disabled = 1; + + // Per-route stateful session configuration that can be served by RDS or static route table. + StatefulSession stateful_session = 2; + } +} diff --git a/src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto b/src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto new file mode 100644 index 00000000000..09354b8a28a --- /dev/null +++ b/src/proto/grpc/testing/xds/v3/stateful_session_cookie.proto @@ -0,0 +1,50 @@ +// Copyright 2022 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Local copy of Envoy xDS proto file, used for testing only. + +syntax = "proto3"; + +package envoy.extensions.http.stateful_session.cookie.v3; + +import "src/proto/grpc/testing/xds/v3/cookie.proto"; + +// [#protodoc-title: Cookie based stateful session extension] + +// This extension allows the session state to be tracked via cookies. +// +// This extension first encodes the address of the upstream host selected by the load balancer +// into a ``set-cookie`` response header with the :ref:`cookie configuration +// `. +// when new requests are incoming, this extension will try to parse the specific upstream host +// address by the cookie name. If the address parsed from the cookie corresponds to a valid +// upstream host, this upstream host will be selected first. See :ref:`stateful session filter +// `. +// +// For example, if the cookie name is set to ``sticky-host``, envoy will prefer ``1.2.3.4:80`` +// as the upstream host when the request contains the following header: +// +// .. code-block:: none +// +// cookie: sticky-host="MS4yLjMuNDo4MA==" +// +// When processing the upstream response, if ``1.2.3.4:80`` is indeed the final choice the extension +// does nothing. If ``1.2.3.4:80`` is not the final choice, the new selected host will be used to +// update the cookie (via the ``set-cookie`` response header). +// +// [#extension: envoy.http.stateful_session.cookie] +message CookieBasedSessionState { + // The cookie configuration used to track session state. + type.http.v3.Cookie cookie = 1; +} diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 2a90435c5b2..c73edf19488 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -186,7 +186,9 @@ CORE_SOURCE_FILES = [ 'src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c', 'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c', + 'src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c', 'src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c', 'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c', @@ -333,7 +335,9 @@ CORE_SOURCE_FILES = [ 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c', + 'src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c', 'src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c', @@ -419,6 +423,7 @@ CORE_SOURCE_FILES = [ 'src/core/ext/xds/xds_http_fault_filter.cc', 'src/core/ext/xds/xds_http_filters.cc', 'src/core/ext/xds/xds_http_rbac_filter.cc', + 'src/core/ext/xds/xds_http_stateful_session_filter.cc', 'src/core/ext/xds/xds_lb_policy_registry.cc', 'src/core/ext/xds/xds_listener.cc', 'src/core/ext/xds/xds_route_config.cc', diff --git a/test/core/xds/BUILD b/test/core/xds/BUILD index c7b9d276f16..8bdc344a9e3 100644 --- a/test/core/xds/BUILD +++ b/test/core/xds/BUILD @@ -219,6 +219,9 @@ grpc_cc_test( "//src/proto/grpc/testing/xds/v3:fault_proto", "//src/proto/grpc/testing/xds/v3:http_filter_rbac_proto", "//src/proto/grpc/testing/xds/v3:router_proto", + "//src/proto/grpc/testing/xds/v3:stateful_session_cookie_proto", + "//src/proto/grpc/testing/xds/v3:stateful_session_proto", + "//src/proto/grpc/testing/xds/v3:typed_struct_proto", "//test/core/util:grpc_test_util", "//test/cpp/util:grpc_cli_utils", ], diff --git a/test/core/xds/xds_http_filters_test.cc b/test/core/xds/xds_http_filters_test.cc index 5dd14fad35f..17b5d0b73a7 100644 --- a/test/core/xds/xds_http_filters_test.cc +++ b/test/core/xds/xds_http_filters_test.cc @@ -29,6 +29,7 @@ #include "absl/strings/strip.h" #include "absl/types/variant.h" #include "gtest/gtest.h" +#include "upb/def.hpp" #include "upb/upb.hpp" #include @@ -40,6 +41,10 @@ #include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h" #include "src/core/ext/filters/rbac/rbac_filter.h" #include "src/core/ext/filters/rbac/rbac_service_config_parser.h" +#include "src/core/ext/filters/stateful_session/stateful_session_filter.h" +#include "src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h" +#include "src/core/ext/xds/xds_bootstrap_grpc.h" +#include "src/core/lib/gprpp/env.h" #include "src/proto/grpc/testing/xds/v3/address.pb.h" #include "src/proto/grpc/testing/xds/v3/fault.pb.h" #include "src/proto/grpc/testing/xds/v3/fault_common.pb.h" @@ -52,7 +57,10 @@ #include "src/proto/grpc/testing/xds/v3/regex.pb.h" #include "src/proto/grpc/testing/xds/v3/route.pb.h" #include "src/proto/grpc/testing/xds/v3/router.pb.h" +#include "src/proto/grpc/testing/xds/v3/stateful_session.pb.h" +#include "src/proto/grpc/testing/xds/v3/stateful_session_cookie.pb.h" #include "src/proto/grpc/testing/xds/v3/string.pb.h" +#include "src/proto/grpc/testing/xds/v3/typed_struct.pb.h" #include "test/core/util/test_config.h" // IWYU pragma: no_include @@ -65,6 +73,11 @@ using ::envoy::extensions::filters::http::fault::v3::HTTPFault; using ::envoy::extensions::filters::http::rbac::v3::RBAC; using ::envoy::extensions::filters::http::rbac::v3::RBACPerRoute; using ::envoy::extensions::filters::http::router::v3::Router; +using ::envoy::extensions::filters::http::stateful_session::v3::StatefulSession; +using ::envoy::extensions::filters::http::stateful_session::v3 :: + StatefulSessionPerRoute; +using ::envoy::extensions::http::stateful_session::cookie::v3 :: + CookieBasedSessionState; // // base class for filter tests @@ -72,6 +85,10 @@ using ::envoy::extensions::filters::http::router::v3::Router; class XdsHttpFilterTest : public ::testing::Test { protected: + XdsHttpFilterTest() + : decode_context_{nullptr, xds_server_, nullptr, upb_def_pool_.ptr(), + upb_arena_.ptr()} {} + XdsExtension MakeXdsExtension(const grpc::protobuf::Message& message) { google::protobuf::Any any; any.PackFrom(message); @@ -92,9 +109,12 @@ class XdsHttpFilterTest : public ::testing::Test { absl::StripPrefix(type, "type.googleapis.com/")); } + GrpcXdsBootstrap::GrpcXdsServer xds_server_; + upb::DefPool upb_def_pool_; + upb::Arena upb_arena_; + XdsResourceType::DecodeContext decode_context_; XdsHttpFilterRegistry registry_; ValidationErrors errors_; - upb::Arena arena_; std::string type_url_storage_; std::string serialized_storage_; }; @@ -155,8 +175,8 @@ TEST_F(XdsRouterFilterTest, Accessors) { TEST_F(XdsRouterFilterTest, GenerateFilterConfig) { XdsExtension extension = MakeXdsExtension(Router()); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); ASSERT_TRUE(config.has_value()); EXPECT_EQ(config->config_proto_type_name, filter_->ConfigProtoName()); @@ -166,8 +186,8 @@ TEST_F(XdsRouterFilterTest, GenerateFilterConfig) { TEST_F(XdsRouterFilterTest, GenerateFilterConfigTypedStruct) { XdsExtension extension = MakeXdsExtension(Router()); extension.value = Json(); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ( @@ -182,8 +202,8 @@ TEST_F(XdsRouterFilterTest, GenerateFilterConfigUnparseable) { XdsExtension extension = MakeXdsExtension(Router()); std::string serialized_resource("\0", 1); extension.value = absl::string_view(serialized_resource); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ( @@ -196,8 +216,8 @@ TEST_F(XdsRouterFilterTest, GenerateFilterConfigUnparseable) { TEST_F(XdsRouterFilterTest, GenerateFilterConfigOverride) { XdsExtension extension = MakeXdsExtension(Router()); - auto config = filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ( @@ -271,10 +291,10 @@ class XdsFaultInjectionFilterConfigTest absl::optional GenerateConfig( XdsExtension extension) { if (GetParam()) { - return filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + return filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); } - return filter_->GenerateFilterConfig(std::move(extension), arena_.ptr(), + return filter_->GenerateFilterConfig(decode_context_, std::move(extension), &errors_); } }; @@ -439,8 +459,8 @@ TEST_F(XdsRbacFilterTest, ModifyChannelArgs) { TEST_F(XdsRbacFilterTest, GenerateFilterConfig) { XdsExtension extension = MakeXdsExtension(RBAC()); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); ASSERT_TRUE(config.has_value()); EXPECT_EQ(config->config_proto_type_name, filter_->ConfigProtoName()); @@ -450,8 +470,8 @@ TEST_F(XdsRbacFilterTest, GenerateFilterConfig) { TEST_F(XdsRbacFilterTest, GenerateFilterConfigTypedStruct) { XdsExtension extension = MakeXdsExtension(RBAC()); extension.value = Json(); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ( @@ -466,8 +486,8 @@ TEST_F(XdsRbacFilterTest, GenerateFilterConfigUnparseable) { XdsExtension extension = MakeXdsExtension(RBAC()); std::string serialized_resource("\0", 1); extension.value = absl::string_view(serialized_resource); - auto config = filter_->GenerateFilterConfig(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ( @@ -480,8 +500,8 @@ TEST_F(XdsRbacFilterTest, GenerateFilterConfigUnparseable) { TEST_F(XdsRbacFilterTest, GenerateFilterConfigOverride) { XdsExtension extension = MakeXdsExtension(RBACPerRoute()); - auto config = filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); ASSERT_TRUE(config.has_value()); EXPECT_EQ(config->config_proto_type_name, filter_->OverrideConfigProtoName()); @@ -491,8 +511,8 @@ TEST_F(XdsRbacFilterTest, GenerateFilterConfigOverride) { TEST_F(XdsRbacFilterTest, GenerateFilterConfigOverrideTypedStruct) { XdsExtension extension = MakeXdsExtension(RBACPerRoute()); extension.value = Json(); - auto config = filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ(status.message(), @@ -506,8 +526,8 @@ TEST_F(XdsRbacFilterTest, GenerateFilterConfigOverrideUnparseable) { XdsExtension extension = MakeXdsExtension(RBACPerRoute()); std::string serialized_resource("\0", 1); extension.value = absl::string_view(serialized_resource); - auto config = filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); absl::Status status = errors_.status("errors validating filter config"); EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); EXPECT_EQ(status.message(), @@ -528,11 +548,11 @@ class XdsRbacFilterConfigTest : public XdsRbacFilterTest, RBACPerRoute rbac_per_route; *rbac_per_route.mutable_rbac() = rbac; XdsExtension extension = MakeXdsExtension(rbac_per_route); - return filter_->GenerateFilterConfigOverride(std::move(extension), - arena_.ptr(), &errors_); + return filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); } XdsExtension extension = MakeXdsExtension(rbac); - return filter_->GenerateFilterConfig(std::move(extension), arena_.ptr(), + return filter_->GenerateFilterConfig(decode_context_, std::move(extension), &errors_); } @@ -907,6 +927,348 @@ TEST_P(XdsRbacFilterConfigTest, InvalidPermissionAndPrincipal) { << status; } +// +// StatefulSession filter tests +// + +using XdsStatefulSessionFilterDisabledTest = XdsHttpFilterTest; + +TEST_F(XdsStatefulSessionFilterDisabledTest, FilterNotRegistered) { + XdsExtension extension = MakeXdsExtension(StatefulSession()); + EXPECT_EQ(GetFilter(extension.type), nullptr); +} + +class XdsStatefulSessionFilterTest : public XdsHttpFilterTest { + protected: + void SetUp() override { + SetEnv("GRPC_EXPERIMENTAL_XDS_ENABLE_HOST_OVERRIDE", "true"); + registry_ = XdsHttpFilterRegistry(); + XdsExtension extension = MakeXdsExtension(StatefulSession()); + filter_ = GetFilter(extension.type); + GPR_ASSERT(filter_ != nullptr); + } + + void TearDown() override { + UnsetEnv("GRPC_EXPERIMENTAL_XDS_ENABLE_HOST_OVERRIDE"); + } + + const XdsHttpFilterImpl* filter_; +}; + +TEST_F(XdsStatefulSessionFilterTest, Accessors) { + EXPECT_EQ( + filter_->ConfigProtoName(), + "envoy.extensions.filters.http.stateful_session.v3.StatefulSession"); + EXPECT_EQ(filter_->OverrideConfigProtoName(), + "envoy.extensions.filters.http.stateful_session.v3" + ".StatefulSessionPerRoute"); + EXPECT_EQ(filter_->channel_filter(), &StatefulSessionFilter::kFilter); + EXPECT_TRUE(filter_->IsSupportedOnClients()); + EXPECT_FALSE(filter_->IsSupportedOnServers()); + EXPECT_FALSE(filter_->IsTerminalFilter()); +} + +TEST_F(XdsStatefulSessionFilterTest, ModifyChannelArgs) { + ChannelArgs args = filter_->ModifyChannelArgs(ChannelArgs()); + auto value = args.GetInt(GRPC_ARG_PARSE_STATEFUL_SESSION_METHOD_CONFIG); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(*value, 1); +} + +TEST_F(XdsStatefulSessionFilterTest, OverrideConfigDisabled) { + StatefulSessionPerRoute stateful_session_per_route; + stateful_session_per_route.set_disabled(true); + XdsExtension extension = MakeXdsExtension(stateful_session_per_route); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); + ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); + ASSERT_TRUE(config.has_value()); + EXPECT_EQ(config->config_proto_type_name, filter_->OverrideConfigProtoName()); + EXPECT_EQ(config->config, Json(Json::Object{})) << config->config.Dump(); +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateServiceConfigNoOverride) { + XdsHttpFilterImpl::FilterConfig hcm_config = {filter_->ConfigProtoName(), + Json::Object{{"name", "foo"}}}; + auto config = filter_->GenerateServiceConfig(hcm_config, nullptr); + ASSERT_TRUE(config.ok()) << config.status(); + EXPECT_EQ(config->service_config_field_name, "stateful_session"); + EXPECT_EQ(config->element, Json(Json::Object{{"name", "foo"}}).Dump()); +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateServiceConfigWithOverride) { + XdsHttpFilterImpl::FilterConfig hcm_config = {filter_->ConfigProtoName(), + Json::Object{{"name", "foo"}}}; + XdsHttpFilterImpl::FilterConfig override_config = { + filter_->OverrideConfigProtoName(), Json::Object{{"name", "bar"}}}; + auto config = filter_->GenerateServiceConfig(hcm_config, &override_config); + ASSERT_TRUE(config.ok()) << config.status(); + EXPECT_EQ(config->service_config_field_name, "stateful_session"); + EXPECT_EQ(config->element, Json(Json::Object{{"name", "bar"}}).Dump()); +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateFilterConfigTypedStruct) { + XdsExtension extension = MakeXdsExtension(StatefulSession()); + extension.value = Json(); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); + absl::Status status = errors_.status("errors validating filter config"); + EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + "errors validating filter config: [" + "field:http_filter.value[" + "envoy.extensions.filters.http.stateful_session.v3.StatefulSession] " + "error:could not parse stateful session filter config]") + << status; +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateFilterConfigUnparseable) { + XdsExtension extension = MakeXdsExtension(StatefulSession()); + std::string serialized_resource("\0", 1); + extension.value = absl::string_view(serialized_resource); + auto config = filter_->GenerateFilterConfig(decode_context_, + std::move(extension), &errors_); + absl::Status status = errors_.status("errors validating filter config"); + EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + "errors validating filter config: [" + "field:http_filter.value[" + "envoy.extensions.filters.http.stateful_session.v3.StatefulSession] " + "error:could not parse stateful session filter config]") + << status; +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateFilterConfigOverrideTypedStruct) { + XdsExtension extension = MakeXdsExtension(StatefulSessionPerRoute()); + extension.value = Json(); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); + absl::Status status = errors_.status("errors validating filter config"); + EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ(status.message(), + "errors validating filter config: [" + "field:http_filter.value[" + "envoy.extensions.filters.http.stateful_session.v3" + ".StatefulSessionPerRoute] " + "error:could not parse stateful session filter override config]") + << status; +} + +TEST_F(XdsStatefulSessionFilterTest, GenerateFilterConfigOverrideUnparseable) { + XdsExtension extension = MakeXdsExtension(StatefulSessionPerRoute()); + std::string serialized_resource("\0", 1); + extension.value = absl::string_view(serialized_resource); + auto config = filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); + absl::Status status = errors_.status("errors validating filter config"); + EXPECT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ(status.message(), + "errors validating filter config: [" + "field:http_filter.value[" + "envoy.extensions.filters.http.stateful_session.v3" + ".StatefulSessionPerRoute] " + "error:could not parse stateful session filter override config]") + << status; +} + +// For the stateful session filter, the override config is a superset of the +// top-level config, so we test all of the common fields as input for +// both GenerateFilterConfig() and GenerateFilterConfigOverride(). +class XdsStatefulSessionFilterConfigTest + : public XdsStatefulSessionFilterTest, + public ::testing::WithParamInterface { + protected: + absl::optional GenerateConfig( + StatefulSession stateful_session) { + if (GetParam()) { + StatefulSessionPerRoute stateful_session_per_route; + *stateful_session_per_route.mutable_stateful_session() = stateful_session; + XdsExtension extension = MakeXdsExtension(stateful_session_per_route); + return filter_->GenerateFilterConfigOverride( + decode_context_, std::move(extension), &errors_); + } + XdsExtension extension = MakeXdsExtension(stateful_session); + return filter_->GenerateFilterConfig(decode_context_, std::move(extension), + &errors_); + } + + std::string FieldPrefix() { + return absl::StrCat("http_filter.value[", + (GetParam() ? filter_->OverrideConfigProtoName() + : filter_->ConfigProtoName()), + "]", (GetParam() ? ".stateful_session" : "")); + } +}; + +INSTANTIATE_TEST_SUITE_P(XdsStatefulSessionFilter, + XdsStatefulSessionFilterConfigTest, ::testing::Bool()); + +TEST_P(XdsStatefulSessionFilterConfigTest, MinimalConfig) { + CookieBasedSessionState cookie_state; + cookie_state.mutable_cookie()->set_name("foo"); + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + cookie_state); + auto config = GenerateConfig(stateful_session); + ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); + ASSERT_TRUE(config.has_value()); + EXPECT_EQ(config->config_proto_type_name, + GetParam() ? filter_->OverrideConfigProtoName() + : filter_->ConfigProtoName()); + EXPECT_EQ(config->config, Json(Json::Object{{"name", "foo"}})) + << config->config.Dump(); +} + +TEST_P(XdsStatefulSessionFilterConfigTest, PathAndTtl) { + CookieBasedSessionState cookie_state; + auto* cookie = cookie_state.mutable_cookie(); + cookie->set_name("foo"); + cookie->set_path("/service/method"); + cookie->mutable_ttl()->set_seconds(3); + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + cookie_state); + auto config = GenerateConfig(stateful_session); + ASSERT_TRUE(errors_.ok()) << errors_.status("unexpected errors"); + ASSERT_TRUE(config.has_value()); + EXPECT_EQ(config->config_proto_type_name, + GetParam() ? filter_->OverrideConfigProtoName() + : filter_->ConfigProtoName()); + EXPECT_EQ(config->config, Json(Json::Object{ + {"name", "foo"}, + {"path", "/service/method"}, + {"ttl", "3.000000000s"}, + })) + << config->config.Dump(); +} + +TEST_P(XdsStatefulSessionFilterConfigTest, SessionStateUnset) { + auto config = GenerateConfig(StatefulSession()); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state error:field not present]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, CookieNotPresent) { + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + CookieBasedSessionState()); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState].cookie " + "error:field not present]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, CookieNameNotPresent) { + CookieBasedSessionState cookie_state; + cookie_state.mutable_cookie(); + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + cookie_state); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState].cookie.name " + "error:field not present]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, InvalidTtl) { + CookieBasedSessionState cookie_state; + auto* cookie = cookie_state.mutable_cookie(); + cookie->set_name("foo"); + cookie->mutable_ttl()->set_seconds(-1); + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + cookie_state); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState].cookie.ttl.seconds " + "error:value must be in the range [0, 315576000000]]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, UnknownSessionStateType) { + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + Router()); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "envoy.extensions.filters.http.router.v3.Router] " + "error:unsupported session state type]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, TypedStructSessionState) { + StatefulSession stateful_session; + auto* typed_config = + stateful_session.mutable_session_state()->mutable_typed_config(); + typed_config->PackFrom(CookieBasedSessionState()); + ::xds::type::v3::TypedStruct typed_struct; + typed_struct.set_type_url(typed_config->type_url()); + typed_config->PackFrom(typed_struct); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "xds.type.v3.TypedStruct].value[" + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState] " + "error:could not parse session state config]")) + << status; +} + +TEST_P(XdsStatefulSessionFilterConfigTest, UnparseableSessionState) { + StatefulSession stateful_session; + stateful_session.mutable_session_state()->mutable_typed_config()->PackFrom( + CookieBasedSessionState()); + stateful_session.mutable_session_state()->mutable_typed_config()->set_value( + std::string("\0", 1)); + auto config = GenerateConfig(stateful_session); + absl::Status status = errors_.status("errors validating filter config"); + ASSERT_EQ(status.code(), absl::StatusCode::kInvalidArgument); + EXPECT_EQ( + status.message(), + absl::StrCat("errors validating filter config: [field:", FieldPrefix(), + ".session_state.typed_config.value[" + "envoy.extensions.http.stateful_session.cookie.v3" + ".CookieBasedSessionState] " + "error:could not parse session state config]")) + << status; +} + } // namespace } // namespace testing } // namespace grpc_core diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index a7266ff5c11..9d477a0b7e2 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1432,8 +1432,12 @@ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h \ +src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c \ +src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h \ +src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c \ +src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c \ @@ -1726,8 +1730,12 @@ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdef src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h \ +src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c \ +src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h \ +src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c \ +src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c \ @@ -1900,6 +1908,8 @@ src/core/ext/xds/xds_http_filters.cc \ src/core/ext/xds/xds_http_filters.h \ src/core/ext/xds/xds_http_rbac_filter.cc \ src/core/ext/xds/xds_http_rbac_filter.h \ +src/core/ext/xds/xds_http_stateful_session_filter.cc \ +src/core/ext/xds/xds_http_stateful_session_filter.h \ src/core/ext/xds/xds_lb_policy_registry.cc \ src/core/ext/xds/xds_lb_policy_registry.h \ src/core/ext/xds/xds_listener.cc \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 422a4b0a8e9..be269c413f7 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1205,8 +1205,12 @@ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h \ +src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c \ +src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c \ src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h \ +src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c \ +src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h \ src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c \ @@ -1499,8 +1503,12 @@ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdef src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h \ +src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c \ +src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h \ +src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c \ +src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h \ src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c \ @@ -1673,6 +1681,8 @@ src/core/ext/xds/xds_http_filters.cc \ src/core/ext/xds/xds_http_filters.h \ src/core/ext/xds/xds_http_rbac_filter.cc \ src/core/ext/xds/xds_http_rbac_filter.h \ +src/core/ext/xds/xds_http_stateful_session_filter.cc \ +src/core/ext/xds/xds_http_stateful_session_filter.h \ src/core/ext/xds/xds_lb_policy_registry.cc \ src/core/ext/xds/xds_lb_policy_registry.h \ src/core/ext/xds/xds_listener.cc \