From c14a95a4bd7e8a878f720d9bbbe58aaa8b7ad2e6 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Tue, 13 Feb 2024 12:01:35 +0000 Subject: [PATCH] network: calculate ICMPv4 checksums --- network/src/backend.rs | 2 -- network/src/icmp.rs | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/network/src/backend.rs b/network/src/backend.rs index 5021487..d1b13c8 100644 --- a/network/src/backend.rs +++ b/network/src/backend.rs @@ -14,7 +14,6 @@ use smoltcp::iface::{Config, Interface, SocketSet}; use smoltcp::phy::Medium; use smoltcp::time::Instant; use smoltcp::wire::{HardwareAddress, IpCidr}; -use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::select; use tokio::sync::mpsc::{channel, Receiver}; @@ -103,7 +102,6 @@ impl NetworkBackend { } let link = link.unwrap(); handle.link().set(link.header.index).up().execute().await?; - tokio::time::sleep(Duration::from_secs(3)).await; Ok(()) } diff --git a/network/src/icmp.rs b/network/src/icmp.rs index 7047fc3..e772a83 100644 --- a/network/src/icmp.rs +++ b/network/src/icmp.rs @@ -189,10 +189,12 @@ impl IcmpClient { let rx = self.add_handler(token.clone()).await?; let echo = IcmpEchoHeader { id, seq }; - let header = Icmpv4Header::new(Icmpv4Type::EchoRequest(echo)); + let mut header = Icmpv4Header::new(Icmpv4Type::EchoRequest(echo)); + header.update_checksum(payload); let mut buffer: Vec = Vec::new(); header.write(&mut buffer)?; buffer.extend_from_slice(payload); + self.socket .send_to(&buffer, SocketAddr::V4(SocketAddrV4::new(addr, 0))) .await?; @@ -223,6 +225,7 @@ impl IcmpClient { let mut buffer: Vec = Vec::new(); header.write(&mut buffer)?; buffer.extend_from_slice(payload); + self.socket .send_to(&buffer, SocketAddr::V6(SocketAddrV6::new(addr, 0, 0, 0))) .await?;