Clean up socket creation a bit

This commit is contained in:
Nils Andreas Svee committed 2022-09-29 00:24:31 +02:00
1 parent a3ee2b5c08
commit 0cbde6d1ea
3 files changed
+18 -22

No files matched your search

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