mirror of
				https://github.com/edera-dev/krata.git
				synced 2025-11-03 23:29:39 +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