Clean up socket creation a bit
This commit is contained in:
1 parent
a3ee2b5c08
commit
0cbde6d1ea
3 files changed
+18
-22
No files matched your search
+2
-2
@@ -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
@@ -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
@@ -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_)?;
|
||||||
|
|||||||
Reference in new issue
Block a user