diff options
author | Florian Klink <flokli@flokli.de> | 2024-04-08T08·31+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-04-08T08·40+0000 |
commit | c05f90e611c9e0e74fbedeff97cf6ca768264d64 (patch) | |
tree | e4a19ed322bf9bd031db6ebf226bb138beadfb41 | |
parent | fd749070e29bd3856e5923136ea97260d933e3db (diff) |
refactor(tvix/nix-compat/wire): express magics as u64 r/7875
This allows using read_u64, write_u64, which is a bit easier to juggle with. Also, update names to align with the nix codebase, which makes it easier to spot both the constant name as well as the value. Leave the ASCII interpretation as a comment afterwards. Change-Id: I0b9ab187acd22807e2785b0722aa4300dab37c51 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11378 Tested-by: BuildkiteCI Reviewed-by: picnoir picnoir <picnoir@alternativebit.fr> Autosubmit: flokli <flokli@flokli.de>
-rw-r--r-- | tvix/nix-compat/src/wire/worker_protocol.rs | 13 | ||||
-rw-r--r-- | users/picnoir/tvix-daemon/src/main.rs | 23 |
2 files changed, 15 insertions, 21 deletions
diff --git a/tvix/nix-compat/src/wire/worker_protocol.rs b/tvix/nix-compat/src/wire/worker_protocol.rs index c9d055319273..121b9b2ea5cb 100644 --- a/tvix/nix-compat/src/wire/worker_protocol.rs +++ b/tvix/nix-compat/src/wire/worker_protocol.rs @@ -11,14 +11,11 @@ use crate::wire::primitive; use super::bytes::read_string; -// LE-encoded nixc on 64 bits. Because why not. -pub static MAGIC_HELLO: [u8; 8] = *b"cxin\0\0\0\0"; -// LE-encoded dxio on 64 bits. What's dxio? I have no clue. -pub static MAGIC_HELLO_RESPONSE: [u8; 8] = *b"oixd\0\0\0\0"; -// LE-encoded protocol version. -pub static PROTOCOL_VERSION: [u8; 8] = [0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; - -pub static STDERR_LAST: u64 = 0x616c7473; +pub static WORKER_MAGIC_1: u64 = 0x6e697863; // "nixc" +pub static WORKER_MAGIC_2: u64 = 0x6478696f; // "dxio" +pub static STDERR_LAST: u64 = 0x616c7473; // "alts" +/// Protocol version (1.35) +pub static PROTOCOL_VERSION: u64 = 1 << 8 | 35; /// Max length of a Nix setting name/value. In bytes. /// diff --git a/users/picnoir/tvix-daemon/src/main.rs b/users/picnoir/tvix-daemon/src/main.rs index 46cb813e3e38..398c8af01fcc 100644 --- a/users/picnoir/tvix-daemon/src/main.rs +++ b/users/picnoir/tvix-daemon/src/main.rs @@ -124,20 +124,17 @@ async fn perform_init_handshake<'a, R: 'a>( where &'a mut R: AsyncReadExt + AsyncWriteExt + Unpin + std::fmt::Debug, { - let mut magic_hello = vec![0; 8]; - conn.read_exact(&mut magic_hello).await?; + let worker_magic_1 = primitive::read_u64(&mut conn).await?; debug!("Hello read"); - if magic_hello != worker_protocol::MAGIC_HELLO { + if worker_magic_1 != worker_protocol::WORKER_MAGIC_1 { Err(anyhow!( "Invalid client hello received: {:?}, expected {:?}", - magic_hello, - worker_protocol::MAGIC_HELLO + worker_magic_1, + worker_protocol::WORKER_MAGIC_1 )) } else { - conn.write_all(&worker_protocol::MAGIC_HELLO_RESPONSE[..]) - .await?; - conn.write_all(&worker_protocol::PROTOCOL_VERSION[..]) - .await?; + primitive::write_u64(&mut conn, worker_protocol::WORKER_MAGIC_2).await?; + primitive::write_u64(&mut conn, worker_protocol::PROTOCOL_VERSION).await?; conn.flush().await?; debug!("Hello responded"); let client_version = primitive::read_u64(&mut conn).await?; @@ -198,12 +195,12 @@ mod integration_tests { #[tokio::test] async fn test_init_handshake() { let mut test_conn = tokio_test::io::Builder::new() - .read(&worker_protocol::MAGIC_HELLO) - .write(&worker_protocol::MAGIC_HELLO_RESPONSE) - .write(&worker_protocol::PROTOCOL_VERSION) + .read(&worker_protocol::WORKER_MAGIC_1.to_le_bytes()) + .write(&worker_protocol::WORKER_MAGIC_2.to_le_bytes()) + .write(&worker_protocol::PROTOCOL_VERSION.to_le_bytes()) // Let's say the client is in sync with the daemon // protocol-wise - .read(&worker_protocol::PROTOCOL_VERSION) + .read(&worker_protocol::PROTOCOL_VERSION.to_le_bytes()) // cpu affinity .read(&vec![0; 8]) // reservespace |