diff --git a/src/config.rs b/src/config.rs index aa247c8..c792807 100644 --- a/src/config.rs +++ b/src/config.rs @@ -20,8 +20,8 @@ where Ok(io::BufReader::new(file).lines()) } -#[derive(Clone, Debug)] -pub(crate) enum MeasurementType { +#[derive(Clone, Copy, Debug)] +pub enum MeasurementType { ICMP = 1, ICMPTimestamps, NTP, diff --git a/src/main.rs b/src/main.rs index 1ce9c39..3c25593 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,7 @@ use std::{panic, process, thread}; use crate::config::{Config, MeasurementType}; use crate::netlink::Netlink; -use crate::pinger::{PingListener, PingSender, SocketType}; +use crate::pinger::{PingListener, PingSender}; use crate::pinger_icmp::{PingerICMPEchoListener, PingerICMPEchoSender}; use crate::pinger_icmp_ts::{PingerICMPTimestampListener, PingerICMPTimestampSender}; use crate::ratecontroller::{Ratecontroller, StatsDirection}; @@ -104,10 +104,7 @@ fn main() -> ExitCode { Box::new(PingerICMPTimestampListener {}) as Box, Box::new(PingerICMPTimestampSender {}) as Box, ), - MeasurementType::NTP => { - todo!() - } - MeasurementType::TCPTimestamps => { + MeasurementType::NTP | MeasurementType::TCPTimestamps => { todo!() } }; @@ -149,7 +146,7 @@ fn main() -> ExitCode { .spawn(move || { match pinger_receiver.listen( id, - SocketType::ICMP, + config.measurement_type, reflector_peers_lock_clone, baseliner_stats_sender, ) { @@ -168,15 +165,15 @@ fn main() -> ExitCode { let reflector_peers_lock_clone = reflector_peers_lock.clone(); let sender_handle = thread::Builder::new() .name("sender".to_string()) - .spawn( - move || match pinger_sender.send(id, SocketType::ICMP, reflector_peers_lock_clone) { + .spawn(move || { + match pinger_sender.send(id, config.measurement_type, reflector_peers_lock_clone) { Ok(_) => {} Err(e) => { error!("Error occured in sender thread: {}", e); panic!(); } - }, - ) + } + }) .expect("Couldn't spawn ping sender thread"); let mut threads = vec![receiver_handle, sender_handle, baseliner_handle]; diff --git a/src/pinger.rs b/src/pinger.rs index b797872..26e57a1 100644 --- a/src/pinger.rs +++ b/src/pinger.rs @@ -1,3 +1,4 @@ +use crate::MeasurementType; use log::{debug, error}; use nix::sys::socket::{ recvfrom, sendto, socket, AddressFamily, MsgFlags, SockFlag, SockProtocol, SockType, @@ -12,11 +13,6 @@ use std::sync::{Arc, RwLock}; use std::thread; use std::time::Duration; -pub enum SocketType { - ICMP, - UDP, -} - #[allow(dead_code)] pub struct PingReply { pub(crate) reflector: IpAddr, @@ -31,9 +27,9 @@ pub struct PingReply { pub(crate) last_receive_time_s: f64, } -fn open_socket(type_: SocketType) -> nix::Result { +fn open_socket(type_: MeasurementType) -> nix::Result { match type_ { - SocketType::ICMP => { + MeasurementType::ICMP | MeasurementType::ICMPTimestamps => { socket( AddressFamily::Inet, SockType::Raw, @@ -41,7 +37,7 @@ fn open_socket(type_: SocketType) -> nix::Result { SockProtocol::ICMP, ) } - SocketType::UDP => { + MeasurementType::NTP => { socket( AddressFamily::Inet, SockType::Datagram, @@ -49,6 +45,9 @@ fn open_socket(type_: SocketType) -> nix::Result { SockProtocol::Udp, ) } + _ => { + unimplemented!() + } } } @@ -56,7 +55,7 @@ pub trait PingListener { fn listen( &mut self, id: u16, - type_: SocketType, + type_: MeasurementType, reflectors_lock: Arc>>, stats_sender: Sender, ) -> Result<(), Box> { @@ -111,7 +110,7 @@ pub trait PingSender { fn send( &mut self, id: u16, - type_: SocketType, + type_: MeasurementType, reflectors_lock: Arc>>, ) -> Result<(), Box> { let socket = open_socket(type_)?;