diff --git a/Cargo.lock b/Cargo.lock index dd8ea475df..93869f4a8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,7 +40,7 @@ dependencies = [ "getrandom 0.2.11", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.31", ] [[package]] @@ -5204,7 +5204,7 @@ dependencies = [ "walkdir", "workspace_hack", "x509-cert", - "zerocopy", + "zerocopy 0.8.24", ] [[package]] @@ -8510,7 +8510,6 @@ dependencies = [ "tracing-log", "url", "uuid", - "zerocopy", "zeroize", "zstd", "zstd-safe", @@ -8614,8 +8613,16 @@ version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" dependencies = [ - "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.31", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", ] [[package]] @@ -8629,6 +8636,17 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/Cargo.toml b/Cargo.toml index 850e04ff2d..9241b350d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -220,7 +220,7 @@ uuid = { version = "1.6.1", features = ["v4", "v7", "serde"] } walkdir = "2.3.2" rustls-native-certs = "0.8" whoami = "1.5.1" -zerocopy = { version = "0.7", features = ["derive"] } +zerocopy = { version = "0.8", features = ["derive", "simd"] } json-structural-diff = { version = "0.2.0" } x509-cert = { version = "0.2.5" } diff --git a/proxy/src/protocol2.rs b/proxy/src/protocol2.rs index ecd9882f53..0793998639 100644 --- a/proxy/src/protocol2.rs +++ b/proxy/src/protocol2.rs @@ -12,7 +12,7 @@ use pin_project_lite::pin_project; use smol_str::SmolStr; use strum_macros::FromRepr; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; -use zerocopy::{FromBytes, FromZeroes}; +use zerocopy::{FromBytes, Immutable, KnownLayout, Unaligned, network_endian}; pin_project! { /// A chained [`AsyncRead`] with [`AsyncWrite`] passthrough @@ -339,49 +339,49 @@ trait BufExt: Sized { } impl BufExt for BytesMut { fn try_get(&mut self) -> Option { - let res = T::read_from_prefix(self)?; + let (res, _) = T::read_from_prefix(self).ok()?; self.advance(size_of::()); Some(res) } } -#[derive(FromBytes, FromZeroes, Copy, Clone)] -#[repr(C)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] +#[repr(C, packed)] struct ProxyProtocolV2Header { signature: [u8; 12], version_and_command: u8, protocol_and_family: u8, - len: zerocopy::byteorder::network_endian::U16, + len: network_endian::U16, } -#[derive(FromBytes, FromZeroes, Copy, Clone)] -#[repr(C)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] +#[repr(C, packed)] struct ProxyProtocolV2HeaderV4 { src_addr: NetworkEndianIpv4, dst_addr: NetworkEndianIpv4, - src_port: zerocopy::byteorder::network_endian::U16, - dst_port: zerocopy::byteorder::network_endian::U16, + src_port: network_endian::U16, + dst_port: network_endian::U16, } -#[derive(FromBytes, FromZeroes, Copy, Clone)] -#[repr(C)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] +#[repr(C, packed)] struct ProxyProtocolV2HeaderV6 { src_addr: NetworkEndianIpv6, dst_addr: NetworkEndianIpv6, - src_port: zerocopy::byteorder::network_endian::U16, - dst_port: zerocopy::byteorder::network_endian::U16, + src_port: network_endian::U16, + dst_port: network_endian::U16, } -#[derive(FromBytes, FromZeroes, Copy, Clone)] -#[repr(C)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] +#[repr(C, packed)] struct TlvHeader { kind: u8, - len: zerocopy::byteorder::network_endian::U16, + len: network_endian::U16, } -#[derive(FromBytes, FromZeroes, Copy, Clone)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] #[repr(transparent)] -struct NetworkEndianIpv4(zerocopy::byteorder::network_endian::U32); +struct NetworkEndianIpv4(network_endian::U32); impl NetworkEndianIpv4 { #[inline] fn get(self) -> Ipv4Addr { @@ -389,9 +389,9 @@ impl NetworkEndianIpv4 { } } -#[derive(FromBytes, FromZeroes, Copy, Clone)] +#[derive(FromBytes, KnownLayout, Immutable, Unaligned, Copy, Clone)] #[repr(transparent)] -struct NetworkEndianIpv6(zerocopy::byteorder::network_endian::U128); +struct NetworkEndianIpv6(network_endian::U128); impl NetworkEndianIpv6 { #[inline] fn get(self) -> Ipv6Addr { diff --git a/workspace_hack/Cargo.toml b/workspace_hack/Cargo.toml index b548a2a88a..7a58bcb141 100644 --- a/workspace_hack/Cargo.toml +++ b/workspace_hack/Cargo.toml @@ -103,7 +103,6 @@ tracing-core = { version = "0.1" } tracing-log = { version = "0.2" } url = { version = "2", features = ["serde"] } uuid = { version = "1", features = ["serde", "v4", "v7"] } -zerocopy = { version = "0.7", features = ["derive", "simd"] } zeroize = { version = "1", features = ["derive", "serde"] } zstd = { version = "0.13" } zstd-safe = { version = "7", default-features = false, features = ["arrays", "legacy", "std", "zdict_builder"] } @@ -146,7 +145,6 @@ serde = { version = "1", features = ["alloc", "derive"] } syn = { version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] } toml_edit = { version = "0.22", features = ["serde"] } -zerocopy = { version = "0.7", features = ["derive", "simd"] } zstd = { version = "0.13" } zstd-safe = { version = "7", default-features = false, features = ["arrays", "legacy", "std", "zdict_builder"] } zstd-sys = { version = "2", default-features = false, features = ["legacy", "std", "zdict_builder"] }