diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-10-29 16:53:59 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-10-29 16:53:59 +0100 |
commit | e04a11a8cae5f4f8d29febdb38b93d236c700def (patch) | |
tree | ec756778c5462069ccdad7a30840829391132f19 /src/wireguard/router/workers.rs | |
parent | First full test of pure WireGuard (diff) | |
download | wireguard-rs-e04a11a8cae5f4f8d29febdb38b93d236c700def.tar.xz wireguard-rs-e04a11a8cae5f4f8d29febdb38b93d236c700def.zip |
Unified use of make_packet during tests
Diffstat (limited to 'src/wireguard/router/workers.rs')
-rw-r--r-- | src/wireguard/router/workers.rs | 52 |
1 files changed, 2 insertions, 50 deletions
diff --git a/src/wireguard/router/workers.rs b/src/wireguard/router/workers.rs index 8ebb246..70334c1 100644 --- a/src/wireguard/router/workers.rs +++ b/src/wireguard/router/workers.rs @@ -1,4 +1,3 @@ -use std::mem; use std::sync::mpsc::Receiver; use std::sync::Arc; @@ -8,17 +7,17 @@ use futures::*; use log::debug; use ring::aead::{Aad, LessSafeKey, Nonce, UnboundKey, CHACHA20_POLY1305}; -use std::net::{Ipv4Addr, Ipv6Addr}; + use std::sync::atomic::Ordering; use zerocopy::{AsBytes, LayoutVerified}; use super::device::{DecryptionState, DeviceInner}; use super::messages::{TransportHeader, TYPE_TRANSPORT}; use super::peer::PeerInner; +use super::route::check_route; use super::types::Callbacks; use super::super::{bind, tun, Endpoint}; -use super::ip::*; pub const SIZE_TAG: usize = 16; @@ -46,53 +45,6 @@ pub type JobInbound<E, C, T, B: bind::Writer<E>> = ( pub type JobOutbound = oneshot::Receiver<JobBuffer>; -#[inline(always)] -fn check_route<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>>( - device: &Arc<DeviceInner<E, C, T, B>>, - peer: &Arc<PeerInner<E, C, T, B>>, - packet: &[u8], -) -> Option<usize> { - match packet[0] >> 4 { - VERSION_IP4 => { - // check length and cast to IPv4 header - let (header, _): (LayoutVerified<&[u8], IPv4Header>, _) = - LayoutVerified::new_from_prefix(packet)?; - - // check IPv4 source address - device - .ipv4 - .read() - .longest_match(Ipv4Addr::from(header.f_source)) - .and_then(|(_, _, p)| { - if Arc::ptr_eq(p, &peer) { - Some(header.f_total_len.get() as usize) - } else { - None - } - }) - } - VERSION_IP6 => { - // check length and cast to IPv6 header - let (header, _): (LayoutVerified<&[u8], IPv6Header>, _) = - LayoutVerified::new_from_prefix(packet)?; - - // check IPv6 source address - device - .ipv6 - .read() - .longest_match(Ipv6Addr::from(header.f_source)) - .and_then(|(_, _, p)| { - if Arc::ptr_eq(p, &peer) { - Some(header.f_len.get() as usize + mem::size_of::<IPv6Header>()) - } else { - None - } - }) - } - _ => None, - } -} - pub fn worker_inbound<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>>( device: Arc<DeviceInner<E, C, T, B>>, // related device peer: Arc<PeerInner<E, C, T, B>>, // related peer |