mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 13:11:31 +00:00
network: calculate ICMPv4 checksums
This commit is contained in:
@ -14,7 +14,6 @@ use smoltcp::iface::{Config, Interface, SocketSet};
|
|||||||
use smoltcp::phy::Medium;
|
use smoltcp::phy::Medium;
|
||||||
use smoltcp::time::Instant;
|
use smoltcp::time::Instant;
|
||||||
use smoltcp::wire::{HardwareAddress, IpCidr};
|
use smoltcp::wire::{HardwareAddress, IpCidr};
|
||||||
use std::time::Duration;
|
|
||||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||||
use tokio::select;
|
use tokio::select;
|
||||||
use tokio::sync::mpsc::{channel, Receiver};
|
use tokio::sync::mpsc::{channel, Receiver};
|
||||||
@ -103,7 +102,6 @@ impl NetworkBackend {
|
|||||||
}
|
}
|
||||||
let link = link.unwrap();
|
let link = link.unwrap();
|
||||||
handle.link().set(link.header.index).up().execute().await?;
|
handle.link().set(link.header.index).up().execute().await?;
|
||||||
tokio::time::sleep(Duration::from_secs(3)).await;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,10 +189,12 @@ impl IcmpClient {
|
|||||||
let rx = self.add_handler(token.clone()).await?;
|
let rx = self.add_handler(token.clone()).await?;
|
||||||
|
|
||||||
let echo = IcmpEchoHeader { id, seq };
|
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<u8> = Vec::new();
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
header.write(&mut buffer)?;
|
header.write(&mut buffer)?;
|
||||||
buffer.extend_from_slice(payload);
|
buffer.extend_from_slice(payload);
|
||||||
|
|
||||||
self.socket
|
self.socket
|
||||||
.send_to(&buffer, SocketAddr::V4(SocketAddrV4::new(addr, 0)))
|
.send_to(&buffer, SocketAddr::V4(SocketAddrV4::new(addr, 0)))
|
||||||
.await?;
|
.await?;
|
||||||
@ -223,6 +225,7 @@ impl IcmpClient {
|
|||||||
let mut buffer: Vec<u8> = Vec::new();
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
header.write(&mut buffer)?;
|
header.write(&mut buffer)?;
|
||||||
buffer.extend_from_slice(payload);
|
buffer.extend_from_slice(payload);
|
||||||
|
|
||||||
self.socket
|
self.socket
|
||||||
.send_to(&buffer, SocketAddr::V6(SocketAddrV6::new(addr, 0, 0, 0)))
|
.send_to(&buffer, SocketAddr::V6(SocketAddrV6::new(addr, 0, 0, 0)))
|
||||||
.await?;
|
.await?;
|
||||||
|
Reference in New Issue
Block a user