aboutsummaryrefslogtreecommitdiffstats
path: root/src/router/peer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/router/peer.rs')
-rw-r--r--src/router/peer.rs42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/router/peer.rs b/src/router/peer.rs
index 647d24f..e21e69c 100644
--- a/src/router/peer.rs
+++ b/src/router/peer.rs
@@ -12,7 +12,7 @@ use treebitmap::address::Address;
use treebitmap::IpLookupTable;
use super::super::constants::*;
-use super::super::types::{KeyPair, Tun};
+use super::super::types::{KeyPair, Tun, Bind};
use super::anti_replay::AntiReplay;
use super::device::DecryptionState;
@@ -31,29 +31,29 @@ pub struct KeyWheel {
retired: Option<u32>, // retired id (previous id, after confirming key-pair)
}
-pub struct PeerInner<C: Callbacks, T: Tun> {
+pub struct PeerInner<C: Callbacks, T: Tun, B: Bind> {
pub stopped: AtomicBool,
pub opaque: C::Opaque,
- pub device: Arc<DeviceInner<C, T>>,
+ pub device: Arc<DeviceInner<C, T, B>>,
pub thread_outbound: spin::Mutex<Option<thread::JoinHandle<()>>>,
pub thread_inbound: spin::Mutex<Option<thread::JoinHandle<()>>>,
pub queue_outbound: SyncSender<JobOutbound>,
- pub queue_inbound: SyncSender<JobInbound<C, T>>,
+ pub queue_inbound: SyncSender<JobInbound<C, T, B>>,
pub staged_packets: spin::Mutex<ArrayDeque<[Vec<u8>; MAX_STAGED_PACKETS], Wrapping>>, // packets awaiting handshake
- pub rx_bytes: AtomicU64, // received bytes
- pub tx_bytes: AtomicU64, // transmitted bytes
+ pub rx_bytes: AtomicU64, // received bytes
+ pub tx_bytes: AtomicU64, // transmitted bytes
pub keys: spin::Mutex<KeyWheel>, // key-wheel
pub ekey: spin::Mutex<Option<EncryptionState>>, // encryption state
pub endpoint: spin::Mutex<Option<Arc<SocketAddr>>>,
}
-pub struct Peer<C: Callbacks, T: Tun>(
- Arc<PeerInner<C, T>>,
+pub struct Peer<C: Callbacks, T: Tun, B: Bind>(
+ Arc<PeerInner<C, T, B>>,
);
-fn treebit_list<A, E, C: Callbacks, T: Tun>(
- peer: &Arc<PeerInner<C, T>>,
- table: &spin::RwLock<IpLookupTable<A, Weak<PeerInner<C, T>>>>,
+fn treebit_list<A, E, C: Callbacks, T: Tun, B: Bind>(
+ peer: &Arc<PeerInner<C, T, B>>,
+ table: &spin::RwLock<IpLookupTable<A, Weak<PeerInner<C, T, B>>>>,
callback: Box<dyn Fn(A, u32) -> E>,
) -> Vec<E>
where
@@ -71,9 +71,9 @@ where
res
}
-fn treebit_remove<A: Address, C: Callbacks, T: Tun>(
- peer: &Peer<C, T>,
- table: &spin::RwLock<IpLookupTable<A, Weak<PeerInner<C, T>>>>,
+fn treebit_remove<A: Address, C: Callbacks, T: Tun, B: Bind>(
+ peer: &Peer<C, T, B>,
+ table: &spin::RwLock<IpLookupTable<A, Weak<PeerInner<C, T, B>>>>,
) {
let mut m = table.write();
@@ -95,7 +95,7 @@ fn treebit_remove<A: Address, C: Callbacks, T: Tun>(
}
}
-impl<C: Callbacks, T: Tun> Drop for Peer<C, T> {
+impl<C: Callbacks, T: Tun, B: Bind> Drop for Peer<C, T, B> {
fn drop(&mut self) {
// mark peer as stopped
@@ -150,10 +150,10 @@ impl<C: Callbacks, T: Tun> Drop for Peer<C, T> {
}
}
-pub fn new_peer<C: Callbacks, T: Tun>(
- device: Arc<DeviceInner<C, T>>,
+pub fn new_peer<C: Callbacks, T: Tun, B: Bind>(
+ device: Arc<DeviceInner<C, T, B>>,
opaque: C::Opaque,
-) -> Peer<C, T> {
+) -> Peer<C, T, B> {
// allocate in-order queues
let (send_inbound, recv_inbound) = sync_channel(MAX_STAGED_PACKETS);
let (send_outbound, recv_outbound) = sync_channel(MAX_STAGED_PACKETS);
@@ -204,7 +204,7 @@ pub fn new_peer<C: Callbacks, T: Tun>(
Peer(peer)
}
-impl<C: Callbacks, T: Tun> PeerInner<C, T> {
+impl<C: Callbacks, T: Tun, B: Bind> PeerInner<C, T, B> {
pub fn confirm_key(&self, kp: Weak<KeyPair>) {
// upgrade key-pair to strong reference
@@ -214,8 +214,8 @@ impl<C: Callbacks, T: Tun> PeerInner<C, T> {
}
}
-impl<C: Callbacks, T: Tun> Peer<C, T> {
- fn new(inner: PeerInner<C, T>) -> Peer<C, T> {
+impl<C: Callbacks, T: Tun, B: Bind> Peer<C, T, B> {
+ fn new(inner: PeerInner<C, T, B>) -> Peer<C, T, B> {
Peer(Arc::new(inner))
}