Formatting

This commit is contained in:
Mathias Hall-Andersen
2019-12-09 13:38:08 +01:00
parent d1350620be
commit 3b376cd6fb
9 changed files with 45 additions and 42 deletions

View File

@@ -20,8 +20,8 @@ use super::peer::{new_peer, Peer, PeerHandle};
use super::types::{Callbacks, RouterError}; use super::types::{Callbacks, RouterError};
use super::SIZE_MESSAGE_PREFIX; use super::SIZE_MESSAGE_PREFIX;
use super::runq::RunQueue;
use super::route::RoutingTable; use super::route::RoutingTable;
use super::runq::RunQueue;
use super::super::{tun, udp, Endpoint, KeyPair}; use super::super::{tun, udp, Endpoint, KeyPair};
use super::queue::ParallelQueue; use super::queue::ParallelQueue;
@@ -137,7 +137,7 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> DeviceHandle<
run_outbound: RunQueue::new(), run_outbound: RunQueue::new(),
recv: RwLock::new(HashMap::new()), recv: RwLock::new(HashMap::new()),
table: RoutingTable::new(), table: RoutingTable::new(),
}) }),
}; };
// start worker threads // start worker threads

View File

@@ -1,11 +1,11 @@
use super::device::DecryptionState; use super::device::DecryptionState;
use super::device::Device;
use super::messages::TransportHeader; use super::messages::TransportHeader;
use super::peer::Peer; use super::peer::Peer;
use super::pool::*; use super::pool::*;
use super::runq::RunQueue;
use super::types::Callbacks; use super::types::Callbacks;
use super::{tun, udp, Endpoint}; use super::{tun, udp, Endpoint};
use super::device::Device;
use super::runq::RunQueue;
use ring::aead::{Aad, LessSafeKey, Nonce, UnboundKey, CHACHA20_POLY1305}; use ring::aead::{Aad, LessSafeKey, Nonce, UnboundKey, CHACHA20_POLY1305};
use zerocopy::{AsBytes, LayoutVerified}; use zerocopy::{AsBytes, LayoutVerified};
@@ -47,10 +47,10 @@ pub fn parallel<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
// run queue to schedule // run queue to schedule
fn queue<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( fn queue<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
device: &Device<E, C, T, B>, device: &Device<E, C, T, B>,
) -> &RunQueue<Peer<E, C, T, B>> { ) -> &RunQueue<Peer<E, C, T, B>> {
&device.run_inbound &device.run_inbound
} }
// parallel work to apply // parallel work to apply
fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
peer: &Peer<E, C, T, B>, peer: &Peer<E, C, T, B>,
@@ -130,7 +130,7 @@ pub fn sequential<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
// sequential work to apply // sequential work to apply
fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
peer: &Peer<E, C, T, B>, peer: &Peer<E, C, T, B>,
body: &mut Inbound<E, C, T, B> body: &mut Inbound<E, C, T, B>,
) { ) {
log::trace!("worker, sequential section, obtained job"); log::trace!("worker, sequential section, obtained job");

View File

@@ -9,8 +9,8 @@ mod peer;
mod pool; mod pool;
mod queue; mod queue;
mod route; mod route;
mod types;
mod runq; mod runq;
mod types;
// mod workers; // mod workers;

View File

@@ -1,3 +1,4 @@
use super::device::Device;
use super::messages::{TransportHeader, TYPE_TRANSPORT}; use super::messages::{TransportHeader, TYPE_TRANSPORT};
use super::peer::Peer; use super::peer::Peer;
use super::pool::*; use super::pool::*;
@@ -5,7 +6,6 @@ use super::types::Callbacks;
use super::KeyPair; use super::KeyPair;
use super::REJECT_AFTER_MESSAGES; use super::REJECT_AFTER_MESSAGES;
use super::{tun, udp, Endpoint}; use super::{tun, udp, Endpoint};
use super::device::Device;
use std::sync::mpsc::Receiver; use std::sync::mpsc::Receiver;
use std::sync::Arc; use std::sync::Arc;
@@ -35,7 +35,6 @@ impl Outbound {
pub fn parallel<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( pub fn parallel<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
device: Device<E, C, T, B>, device: Device<E, C, T, B>,
receiver: Receiver<Job<Peer<E, C, T, B>, Outbound>>, receiver: Receiver<Job<Peer<E, C, T, B>, Outbound>>,
) { ) {
fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( fn work<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
_peer: &Peer<E, C, T, B>, _peer: &Peer<E, C, T, B>,
@@ -67,8 +66,9 @@ pub fn parallel<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
let nonce = Nonce::assume_unique_for_key(nonce); let nonce = Nonce::assume_unique_for_key(nonce);
// do the weird ring AEAD dance // do the weird ring AEAD dance
let key = let key = LessSafeKey::new(
LessSafeKey::new(UnboundKey::new(&CHACHA20_POLY1305, &body.keypair.send.key[..]).unwrap()); UnboundKey::new(&CHACHA20_POLY1305, &body.keypair.send.key[..]).unwrap(),
);
// encrypt content of transport message in-place // encrypt content of transport message in-place
let end = packet.len() - SIZE_TAG; let end = packet.len() - SIZE_TAG;
@@ -83,7 +83,6 @@ pub fn parallel<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
worker_parallel(device, |dev| &dev.run_outbound, receiver, work); worker_parallel(device, |dev| &dev.run_outbound, receiver, work);
} }
#[inline(always)] #[inline(always)]
pub fn sequential<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>( pub fn sequential<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
device: Device<E, C, T, B>, device: Device<E, C, T, B>,
@@ -105,4 +104,4 @@ pub fn sequential<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
); );
}); });
}); });
} }

View File

@@ -18,9 +18,9 @@ use super::device::EncryptionState;
use super::messages::TransportHeader; use super::messages::TransportHeader;
use super::constants::*; use super::constants::*;
use super::runq::ToKey;
use super::types::{Callbacks, RouterError}; use super::types::{Callbacks, RouterError};
use super::SIZE_MESSAGE_PREFIX; use super::SIZE_MESSAGE_PREFIX;
use super::runq::ToKey;
// worker pool related // worker pool related
use super::inbound::Inbound; use super::inbound::Inbound;
@@ -86,8 +86,7 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref for Pee
} }
} }
/* A peer handle is a specially designated peer pointer
/* A peer handle is a specially designated peer pointer
* which removes the peer from the device when dropped. * which removes the peer from the device when dropped.
*/ */
pub struct PeerHandle<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> { pub struct PeerHandle<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> {

View File

@@ -1,8 +1,8 @@
use arraydeque::ArrayDeque; use arraydeque::ArrayDeque;
use spin::{Mutex, MutexGuard}; use spin::{Mutex, MutexGuard};
use std::mem;
use std::sync::mpsc::Receiver; use std::sync::mpsc::Receiver;
use std::sync::Arc; use std::sync::Arc;
use std::mem;
use super::runq::{RunQueue, ToKey}; use super::runq::{RunQueue, ToKey};
@@ -76,7 +76,7 @@ impl<P, B> InorderQueue<P, B> {
return; return;
} }
}; };
// apply function if job complete // apply function if job complete
let ret = if let Some(mut guard) = elem.complete() { let ret = if let Some(mut guard) = elem.complete() {
mem::drop(queue); mem::drop(queue);
@@ -100,9 +100,9 @@ impl<P, B> InorderQueue<P, B> {
/// Applicable for both decryption and encryption workers. /// Applicable for both decryption and encryption workers.
#[inline(always)] #[inline(always)]
pub fn worker_parallel< pub fn worker_parallel<
P : ToKey, // represents a peer (atomic reference counted pointer) P: ToKey, // represents a peer (atomic reference counted pointer)
B, // inner body type (message buffer, key material, ...) B, // inner body type (message buffer, key material, ...)
D, // device D, // device
W: Fn(&P, &mut B), W: Fn(&P, &mut B),
Q: Fn(&D) -> &RunQueue<P>, Q: Fn(&D) -> &RunQueue<P>,
>( >(
@@ -131,8 +131,8 @@ pub fn worker_parallel<
work(&peer, &mut job.body); work(&peer, &mut job.body);
peer peer
}; };
// process inorder jobs for peer // process inorder jobs for peer
queue(&device).insert(peer); queue(&device).insert(peer);
} }
} }

View File

@@ -110,7 +110,7 @@ impl<T: Eq + Clone> RoutingTable<T> {
v => { v => {
log::trace!("router, invalid IP version {}", v); log::trace!("router, invalid IP version {}", v);
None None
}, }
} }
} }

View File

@@ -1,6 +1,6 @@
use std::hash::Hash;
use std::mem; use std::mem;
use std::sync::{Condvar, Mutex}; use std::sync::{Condvar, Mutex};
use std::hash::Hash;
use std::collections::hash_map::Entry; use std::collections::hash_map::Entry;
use std::collections::HashMap; use std::collections::HashMap;
@@ -11,18 +11,18 @@ pub trait ToKey {
fn to_key(&self) -> Self::Key; fn to_key(&self) -> Self::Key;
} }
pub struct RunQueue<T : ToKey> { pub struct RunQueue<T: ToKey> {
cvar: Condvar, cvar: Condvar,
inner: Mutex<Inner<T>>, inner: Mutex<Inner<T>>,
} }
struct Inner<T : ToKey> { struct Inner<T: ToKey> {
stop: bool, stop: bool,
queue: VecDeque<T>, queue: VecDeque<T>,
members: HashMap<T::Key, usize>, members: HashMap<T::Key, usize>,
} }
impl<T : ToKey> RunQueue<T> { impl<T: ToKey> RunQueue<T> {
pub fn close(&self) { pub fn close(&self) {
let mut inner = self.inner.lock().unwrap(); let mut inner = self.inner.lock().unwrap();
inner.stop = true; inner.stop = true;
@@ -33,7 +33,7 @@ impl<T : ToKey> RunQueue<T> {
RunQueue { RunQueue {
cvar: Condvar::new(), cvar: Condvar::new(),
inner: Mutex::new(Inner { inner: Mutex::new(Inner {
stop:false, stop: false,
queue: VecDeque::new(), queue: VecDeque::new(),
members: HashMap::new(), members: HashMap::new(),
}), }),
@@ -111,8 +111,8 @@ impl<T : ToKey> RunQueue<T> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use std::thread;
use std::sync::Arc; use std::sync::Arc;
use std::thread;
use std::time::Duration; use std::time::Duration;
/* /*
@@ -142,4 +142,4 @@ mod tests {
} }
*/ */
} }

View File

@@ -157,7 +157,7 @@ mod tests {
let dst = dst.parse().unwrap(); let dst = dst.parse().unwrap();
let src = match dst { let src = match dst {
IpAddr::V4(_) => "127.0.0.1".parse().unwrap(), IpAddr::V4(_) => "127.0.0.1".parse().unwrap(),
IpAddr::V6(_) => "::1".parse().unwrap() IpAddr::V6(_) => "::1".parse().unwrap(),
}; };
let msg = make_packet_padded(1024, src, dst, 0); let msg = make_packet_padded(1024, src, dst, 0);
@@ -204,7 +204,13 @@ mod tests {
]; ];
for (num, (mask, len, dst, okay)) in tests.iter().enumerate() { for (num, (mask, len, dst, okay)) in tests.iter().enumerate() {
println!("Check: {} {} {}/{}", dst, if *okay { "\\in" } else { "\\notin" }, mask, len); println!(
"Check: {} {} {}/{}",
dst,
if *okay { "\\in" } else { "\\notin" },
mask,
len
);
for set_key in vec![true, false] { for set_key in vec![true, false] {
debug!("index = {}, set_key = {}", num, set_key); debug!("index = {}, set_key = {}", num, set_key);
@@ -223,7 +229,7 @@ mod tests {
let dst = dst.parse().unwrap(); let dst = dst.parse().unwrap();
let src = match dst { let src = match dst {
IpAddr::V4(_) => "127.0.0.1".parse().unwrap(), IpAddr::V4(_) => "127.0.0.1".parse().unwrap(),
IpAddr::V6(_) => "::1".parse().unwrap() IpAddr::V6(_) => "::1".parse().unwrap(),
}; };
let msg = make_packet_padded(1024, src, dst, 0); let msg = make_packet_padded(1024, src, dst, 0);
@@ -432,13 +438,12 @@ mod tests {
// pass IP packet to router // pass IP packet to router
let (_mask, _len, ip1, _okay) = p1; let (_mask, _len, ip1, _okay) = p1;
let (_mask, _len, ip2, _okay) = p2; let (_mask, _len, ip2, _okay) = p2;
let msg = let msg = make_packet_padded(
make_packet_padded( 1024,
1024, ip2.parse().unwrap(), // src
ip2.parse().unwrap(), // src ip1.parse().unwrap(), // dst
ip1.parse().unwrap(), // dst id,
id );
);
router1.send(msg).unwrap(); router1.send(msg).unwrap();
wait(); wait();