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())
}
#[derive(Clone, Debug)]
pub(crate) enum MeasurementType {
#[derive(Clone, Copy, Debug)]
pub enum MeasurementType {
ICMP = 1,
ICMPTimestamps,
NTP,
+7 -10
View File
@@ -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<dyn PingListener + Send>,
Box::new(PingerICMPTimestampSender {}) as Box<dyn PingSender + Send>,
),
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];
+9 -10
View File
@@ -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<RawFd> {
fn open_socket(type_: MeasurementType) -> nix::Result<RawFd> {
match type_ {
SocketType::ICMP => {
MeasurementType::ICMP | MeasurementType::ICMPTimestamps => {
socket(
AddressFamily::Inet,
SockType::Raw,
@@ -41,7 +37,7 @@ fn open_socket(type_: SocketType) -> nix::Result<RawFd> {
SockProtocol::ICMP,
)
}
SocketType::UDP => {
MeasurementType::NTP => {
socket(
AddressFamily::Inet,
SockType::Datagram,
@@ -49,6 +45,9 @@ fn open_socket(type_: SocketType) -> nix::Result<RawFd> {
SockProtocol::Udp,
)
}
_ => {
unimplemented!()
}
}
}
@@ -56,7 +55,7 @@ pub trait PingListener {
fn listen(
&mut self,
id: u16,
type_: SocketType,
type_: MeasurementType,
reflectors_lock: Arc<RwLock<Vec<IpAddr>>>,
stats_sender: Sender<PingReply>,
) -> Result<(), Box<dyn Error>> {
@@ -111,7 +110,7 @@ pub trait PingSender {
fn send(
&mut self,
id: u16,
type_: SocketType,
type_: MeasurementType,
reflectors_lock: Arc<RwLock<Vec<IpAddr>>>,
) -> Result<(), Box<dyn Error>> {
let socket = open_socket(type_)?;