diff --git a/Cargo.lock b/Cargo.lock index fcfc05a..97fc719 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -74,15 +74,6 @@ dependencies = [ "wait-timeout", ] -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "2.4.1" @@ -254,7 +245,6 @@ name = "nperf" version = "0.1.0" dependencies = [ "assert_cmd", - "bincode", "clap", "clap-markdown", "env_logger", diff --git a/Cargo.toml b/Cargo.toml index 23f28c3..2de3ccf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bincode = "1.3.3" clap = { version = "4.4.14", features = ["derive"] } clap-markdown = "0.1.3" env_logger = "0.10.1" diff --git a/src/net/mod.rs b/src/net/mod.rs index cbf2560..d444e41 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -47,6 +47,13 @@ impl MessageHeader { } } + pub fn set_packet_id_raw(buffer: &mut [u8], packet_id: u64) { + unsafe { + let header = std::mem::transmute::<&mut [u8], &mut [u64]>(buffer); + header[2] = packet_id; + } + } + pub fn get_test_id(buffer: &[u8]) -> u64 { unsafe { let header = std::mem::transmute::<&[u8], &[u64]>(buffer); diff --git a/src/node/client.rs b/src/node/client.rs index 9ba1549..6946a58 100644 --- a/src/node/client.rs +++ b/src/node/client.rs @@ -113,7 +113,7 @@ impl Client { let mut total_amount_used_packet_ids: u64 = 0; for packet_buffer in self.packet_buffer.iter_mut() { - let amount_used_packet_ids = packet_buffer.add_message_header(self.test_id, self.next_packet_id)?; + let amount_used_packet_ids = packet_buffer.add_packet_ids(self.next_packet_id)?; self.next_packet_id += amount_used_packet_ids; total_amount_used_packet_ids += amount_used_packet_ids; } @@ -123,6 +123,11 @@ impl Client { Ok(total_amount_used_packet_ids) } + fn add_message_headers(&mut self) { + for packet_buffer in self.packet_buffer.iter_mut() { + packet_buffer.add_message_header(self.test_id, 0).expect("Error adding message header"); + } + } fn fill_packet_buffers_with_repeating_pattern(&mut self) { for packet_buffer in self.packet_buffer.iter_mut() { @@ -135,6 +140,7 @@ impl Client { impl Node for Client { fn run(&mut self, io_model: IOModel) -> Result { self.fill_packet_buffers_with_repeating_pattern(); + self.add_message_headers(); self.socket.connect().expect("Error connecting to remote host"); if let Ok(mss) = self.socket.get_mss() { diff --git a/src/util/packet_buffer.rs b/src/util/packet_buffer.rs index 2bddd0d..ce4671e 100644 --- a/src/util/packet_buffer.rs +++ b/src/util/packet_buffer.rs @@ -79,7 +79,7 @@ impl PacketBuffer { debug!("Filled buffer of size {} with repeating pattern", self.buffer.len()); } - pub fn add_message_header(&mut self, test_id: u64, packet_id: u64) -> Result{ + pub fn add_message_header(&mut self, test_id: u64, packet_id: u64) -> Result { let mut amount_used_packet_ids: u64 = 0; let mut header = MessageHeader::new(MessageType::MEASUREMENT, test_id, packet_id); @@ -95,6 +95,20 @@ impl PacketBuffer { Ok(amount_used_packet_ids) } + pub fn add_packet_ids(&mut self, packet_id: u64) -> Result { + let mut amount_used_packet_ids: u64 = 0; + + for i in 0..self.packets_amount { + let start_of_packet = i * self.datagram_size as usize; + MessageHeader::set_packet_id_raw(&mut self.buffer[start_of_packet..], packet_id + amount_used_packet_ids); + amount_used_packet_ids += 1; + } + + debug!("Added packet IDs to buffer! Used packet IDs: {}, Next packet ID: {}", amount_used_packet_ids, packet_id + amount_used_packet_ids); + // Return amount of used packet IDs + Ok(amount_used_packet_ids) + } + pub fn get_buffer_pointer(&mut self) -> &mut [u8] { &mut self.buffer