diff --git a/bazel/external/quiche.BUILD b/bazel/external/quiche.BUILD index f4718d39f6928..b9536fa6dbb32 100644 --- a/bazel/external/quiche.BUILD +++ b/bazel/external/quiche.BUILD @@ -61,6 +61,9 @@ quiche_copts = select({ "-Wno-unused-function", "-Wno-unknown-warning-option", "-Wno-deprecated-copy", + "-Wno-ignored-qualifiers", + "-Wno-sign-compare", + "-Wno-inconsistent-missing-override", # quic_inlined_frame.h uses offsetof() to optimize memory usage in frames. "-Wno-invalid-offsetof", ], @@ -1146,6 +1149,17 @@ envoy_cc_test_library( deps = ["@envoy//test/extensions/quic_listeners/quiche/platform:quic_platform_port_utils_impl_lib"], ) +envoy_cc_library( + name = "quic_platform_udp_socket", + hdrs = select({ + "@envoy//bazel:linux": ["quiche/quic/platform/api/quic_udp_socket_platform_api.h"], + "//conditions:default": [], + }), + repository = "@envoy", + tags = ["nofips"], + deps = ["@envoy//source/extensions/quic_listeners/quiche/platform:quic_platform_udp_socket_impl_lib"], +) + envoy_cc_test_library( name = "quic_platform_sleep", hdrs = ["quiche/quic/platform/api/quic_sleep.h"], @@ -1350,6 +1364,125 @@ envoy_cc_library( ], ) +envoy_cc_library( + name = "quic_core_batch_writer_batch_writer_buffer_lib", + srcs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_batch_writer_buffer.cc", + ], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_batch_writer_buffer.h", + ], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + visibility = ["//visibility:public"], + deps = [ + ":quic_core_circular_deque_lib", + ":quic_core_linux_socket_utils_lib", + ":quic_core_packet_writer_interface_lib", + ":quic_platform", + ], +) + +envoy_cc_library( + name = "quic_core_batch_writer_batch_writer_base_lib", + srcs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_batch_writer_base.cc", + ], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_batch_writer_base.h", + ], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + visibility = ["//visibility:public"], + deps = [ + ":quic_core_batch_writer_batch_writer_buffer_lib", + ":quic_core_packet_writer_interface_lib", + ":quic_core_types_lib", + ":quic_platform", + ], +) + +envoy_cc_test_library( + name = "quic_core_batch_writer_batch_writer_test_lib", + hdrs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_batch_writer_test.h", + ], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + deps = [ + ":quic_core_batch_writer_batch_writer_base_lib", + ":quic_core_udp_socket_lib", + ":quic_platform_test", + ], +) + +envoy_cc_library( + name = "quic_core_batch_writer_gso_batch_writer_lib", + srcs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_gso_batch_writer.cc", + ], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_gso_batch_writer.h", + ], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + visibility = ["//visibility:public"], + deps = [ + ":quic_core_batch_writer_batch_writer_base_lib", + ":quic_core_linux_socket_utils_lib", + ":quic_platform", + ], +) + +envoy_cc_library( + name = "quic_core_batch_writer_sendmmsg_batch_writer_lib", + srcs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_sendmmsg_batch_writer.cc", + ], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": [ + "quiche/quic/core/batch_writer/quic_sendmmsg_batch_writer.h", + ], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + visibility = ["//visibility:public"], + deps = [ + ":quic_core_batch_writer_batch_writer_base_lib", + ":quic_core_linux_socket_utils_lib", + ], +) + envoy_cc_library( name = "quic_core_blocked_writer_interface_lib", hdrs = ["quiche/quic/core/quic_blocked_writer_interface.h"], @@ -2416,6 +2549,45 @@ envoy_cc_library( ], ) +envoy_cc_library( + name = "quic_core_syscall_wrapper_lib", + srcs = select({ + "@envoy//bazel:linux": ["quiche/quic/core/quic_syscall_wrapper.cc"], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": ["quiche/quic/core/quic_syscall_wrapper.h"], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + deps = [ + ":quic_platform_export", + ], +) + +envoy_cc_library( + name = "quic_core_linux_socket_utils_lib", + srcs = select({ + "@envoy//bazel:linux": ["quiche/quic/core/quic_linux_socket_utils.cc"], + "//conditions:default": [], + }), + hdrs = select({ + "@envoy//bazel:linux": ["quiche/quic/core/quic_linux_socket_utils.h"], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + deps = [ + ":quic_core_packet_writer_interface_lib", + ":quic_core_syscall_wrapper_lib", + ":quic_core_types_lib", + ":quic_platform", + ], +) + envoy_cc_library( name = "quic_core_network_blackhole_detector_lib", srcs = ["quiche/quic/core/quic_network_blackhole_detector.cc"], @@ -3181,6 +3353,32 @@ envoy_cc_library( ], ) +envoy_cc_library( + name = "quic_core_udp_socket_lib", + srcs = select({ + "@envoy//bazel:windows_x86_64": [], + "//conditions:default": ["quiche/quic/core/quic_udp_socket_posix.cc"], + }), + hdrs = select({ + "@envoy//bazel:windows_x86_64": [], + "//conditions:default": ["quiche/quic/core/quic_udp_socket.h"], + }), + copts = quiche_copts + select({ + # On OSX/iOS, condstants from RFC 3542 (e.g. IPV6_RECVPKTINFO) are not usable + # without this define. + "@envoy//bazel:apple": ["-D__APPLE_USE_RFC_3542"], + "//conditions:default": [], + }), + repository = "@envoy", + tags = ["nofips"], + deps = [ + ":quic_core_types_lib", + ":quic_core_utils_lib", + ":quic_platform", + ":quic_platform_udp_socket", + ], +) + envoy_cc_library( name = "quic_core_unacked_packet_map_lib", srcs = ["quiche/quic/core/quic_unacked_packet_map.cc"], @@ -3741,3 +3939,20 @@ envoy_cc_test( ":quic_platform_test_mem_slice_vector_lib", ], ) + +envoy_cc_test( + name = "quic_core_batch_writer_batch_writer_test", + srcs = select({ + "@envoy//bazel:linux": ["quiche/quic/core/batch_writer/quic_batch_writer_test.cc"], + "//conditions:default": [], + }), + copts = quiche_copts, + repository = "@envoy", + tags = ["nofips"], + deps = [ + ":quic_core_batch_writer_batch_writer_test_lib", + ":quic_core_batch_writer_gso_batch_writer_lib", + ":quic_core_batch_writer_sendmmsg_batch_writer_lib", + ":quic_platform", + ], +) diff --git a/source/extensions/quic_listeners/quiche/platform/BUILD b/source/extensions/quic_listeners/quiche/platform/BUILD index 4da7f76fcc71d..4ef4fbbc8d649 100644 --- a/source/extensions/quic_listeners/quiche/platform/BUILD +++ b/source/extensions/quic_listeners/quiche/platform/BUILD @@ -229,6 +229,16 @@ envoy_cc_library( ], ) +envoy_cc_library( + name = "quic_platform_udp_socket_impl_lib", + hdrs = select({ + "//bazel:linux": ["quic_udp_socket_platform_impl.h"], + "//conditions:default": [], + }), + repository = "@envoy", + tags = ["nofips"], +) + envoy_cc_library( name = "envoy_quic_clock_lib", srcs = ["envoy_quic_clock.cc"], diff --git a/source/extensions/quic_listeners/quiche/platform/quic_udp_socket_platform_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_udp_socket_platform_impl.h new file mode 100644 index 0000000000000..248cfc193e029 --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quic_udp_socket_platform_impl.h @@ -0,0 +1,22 @@ +#pragma once + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +#include + +namespace quic { + +const size_t kCmsgSpaceForGooglePacketHeaderImpl = 0; + +// NOLINTNEXTLINE(readability-identifier-naming) +inline bool GetGooglePacketHeadersFromControlMessageImpl(struct ::cmsghdr* /*cmsg*/, + char** /*packet_headers*/, + size_t* /*packet_headers_len*/) { + return false; +} + +} // namespace quic