summaryrefslogtreecommitdiffstats
path: root/src/wireguard/router
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2019-10-28 14:48:24 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2019-10-28 14:48:24 +0100
commit4ff328b7da876fb3305fefd83865553af9c8ab2c (patch)
treebd1680d9f7316415e3044fd152ef503729d97239 /src/wireguard/router
parentFixed Ordering::Acquire -> Ordering::SeqCst typo (diff)
downloadwireguard-rs-4ff328b7da876fb3305fefd83865553af9c8ab2c.tar.xz
wireguard-rs-4ff328b7da876fb3305fefd83865553af9c8ab2c.zip
First full test of pure WireGuard
Diffstat (limited to 'src/wireguard/router')
-rw-r--r--src/wireguard/router/device.rs10
-rw-r--r--src/wireguard/router/peer.rs12
-rw-r--r--src/wireguard/router/tests.rs8
-rw-r--r--src/wireguard/router/types.rs4
4 files changed, 14 insertions, 20 deletions
diff --git a/src/wireguard/router/device.rs b/src/wireguard/router/device.rs
index b122bf4..254b3de 100644
--- a/src/wireguard/router/device.rs
+++ b/src/wireguard/router/device.rs
@@ -89,13 +89,7 @@ fn get_route<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>>(
device: &Arc<DeviceInner<E, C, T, B>>,
packet: &[u8],
) -> Option<Arc<PeerInner<E, C, T, B>>> {
- // ensure version access within bounds
- if packet.len() < 1 {
- return None;
- };
-
- // cast to correct IP header
- match packet[0] >> 4 {
+ match packet.get(0)? >> 4 {
VERSION_IP4 => {
// check length and cast to IPv4 header
let (header, _): (LayoutVerified<&[u8], IPv4Header>, _) =
@@ -176,7 +170,7 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> Device<E, C,
let packet = &msg[SIZE_MESSAGE_PREFIX..];
// lookup peer based on IP packet destination address
- let peer = get_route(&self.state, packet).ok_or(RouterError::NoCryptKeyRoute)?;
+ let peer = get_route(&self.state, packet).ok_or(RouterError::NoCryptoKeyRoute)?;
// schedule for encryption and transmission to peer
if let Some(job) = peer.send_job(msg, true) {
diff --git a/src/wireguard/router/peer.rs b/src/wireguard/router/peer.rs
index 0b193a4..66a6e9f 100644
--- a/src/wireguard/router/peer.rs
+++ b/src/wireguard/router/peer.rs
@@ -531,8 +531,8 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> Peer<E, C, T
///
/// If an identical value already exists as part of a prior peer,
/// the allowed IP entry will be removed from that peer and added to this peer.
- pub fn add_subnet(&self, ip: IpAddr, masklen: u32) {
- debug!("peer.add_subnet");
+ pub fn add_allowed_ips(&self, ip: IpAddr, masklen: u32) {
+ debug!("peer.add_allowed_ips");
match ip {
IpAddr::V4(v4) => {
self.state
@@ -556,8 +556,8 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> Peer<E, C, T
/// # Returns
///
/// A vector of subnets, represented by as mask/size
- pub fn list_subnets(&self) -> Vec<(IpAddr, u32)> {
- debug!("peer.list_subnets");
+ pub fn list_allowed_ips(&self) -> Vec<(IpAddr, u32)> {
+ debug!("peer.list_allowed_ips");
let mut res = Vec::new();
res.append(&mut treebit_list(
&self.state,
@@ -575,8 +575,8 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> Peer<E, C, T
/// Clear subnets mapped to the peer.
/// After the call, no subnets will be cryptkey routed to the peer.
/// Used for the UAPI command "replace_allowed_ips=true"
- pub fn remove_subnets(&self) {
- debug!("peer.remove_subnets");
+ pub fn remove_allowed_ips(&self) {
+ debug!("peer.remove_allowed_ips");
treebit_remove(self, &self.state.device.ipv4);
treebit_remove(self, &self.state.device.ipv6);
}
diff --git a/src/wireguard/router/tests.rs b/src/wireguard/router/tests.rs
index d44a612..6184993 100644
--- a/src/wireguard/router/tests.rs
+++ b/src/wireguard/router/tests.rs
@@ -157,7 +157,7 @@ mod tests {
let (mask, len, ip) = ("192.168.1.0", 24, "192.168.1.20");
let mask: IpAddr = mask.parse().unwrap();
let ip1: IpAddr = ip.parse().unwrap();
- peer.add_subnet(mask, len);
+ peer.add_allowed_ips(mask, len);
// every iteration sends 10 GB
b.iter(|| {
@@ -215,7 +215,7 @@ mod tests {
}
// map subnet to peer
- peer.add_subnet(mask, *len);
+ peer.add_allowed_ips(mask, *len);
// create "IP packet"
let msg = make_packet(1024, ip.parse().unwrap());
@@ -339,13 +339,13 @@ mod tests {
let (mask, len, _ip, _okay) = p1;
let peer1 = router1.new_peer(opaq1.clone());
let mask: IpAddr = mask.parse().unwrap();
- peer1.add_subnet(mask, *len);
+ peer1.add_allowed_ips(mask, *len);
peer1.add_keypair(dummy_keypair(false));
let (mask, len, _ip, _okay) = p2;
let peer2 = router2.new_peer(opaq2.clone());
let mask: IpAddr = mask.parse().unwrap();
- peer2.add_subnet(mask, *len);
+ peer2.add_allowed_ips(mask, *len);
peer2.set_endpoint(dummy::UnitEndpoint::new());
if *stage {
diff --git a/src/wireguard/router/types.rs b/src/wireguard/router/types.rs
index 52ee4f1..9f769fe 100644
--- a/src/wireguard/router/types.rs
+++ b/src/wireguard/router/types.rs
@@ -31,7 +31,7 @@ pub trait Callbacks: Send + Sync + 'static {
#[derive(Debug)]
pub enum RouterError {
- NoCryptKeyRoute,
+ NoCryptoKeyRoute,
MalformedIPHeader,
MalformedTransportMessage,
UnknownReceiverId,
@@ -42,7 +42,7 @@ pub enum RouterError {
impl fmt::Display for RouterError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
- RouterError::NoCryptKeyRoute => write!(f, "No cryptkey route configured for subnet"),
+ RouterError::NoCryptoKeyRoute => write!(f, "No cryptokey route configured for subnet"),
RouterError::MalformedIPHeader => write!(f, "IP header is malformed"),
RouterError::MalformedTransportMessage => write!(f, "IP header is malformed"),
RouterError::UnknownReceiverId => {