aboutsummaryrefslogtreecommitdiffstats
path: root/src/interface
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-22 17:35:50 +0000
committerJake McGinty <me@jake.su>2018-02-22 17:36:08 +0000
commiteb268e7c350043075fd7a49fdb3a68573bddd1ca (patch)
treea580635f5be607b25044ff5388c90c8a2fcdcbf4 /src/interface
parentsquish unnecessary memcpy (diff)
downloadwireguard-rs-eb268e7c350043075fd7a49fdb3a68573bddd1ca.tar.xz
wireguard-rs-eb268e7c350043075fd7a49fdb3a68573bddd1ca.zip
support removing peers
Diffstat (limited to 'src/interface')
-rw-r--r--src/interface/mod.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/interface/mod.rs b/src/interface/mod.rs
index 93c926c..d9f078f 100644
--- a/src/interface/mod.rs
+++ b/src/interface/mod.rs
@@ -188,8 +188,18 @@ impl Interface {
state.router.add_allowed_ips(&info.allowed_ips, &peer);
let _ = state.pubkey_map.insert(info.pub_key, peer);
},
- UpdateEvent::RemovePeer(_pub_key) => {
- warn!("RemovePeer event not yet handled");
+ UpdateEvent::RemovePeer(pub_key) => {
+ if let Some(peer_ref) = state.pubkey_map.remove(&pub_key) {
+ let peer = peer_ref.borrow();
+ let indices = peer.get_mapped_indices();
+
+ for index in indices {
+ let _ = state.index_map.remove(&index);
+ }
+ state.router.remove_allowed_ips(&peer.info.allowed_ips);
+ } else {
+ info!("RemovePeer request for nonexistent peer.");
+ }
},
_ => warn!("unhandled UpdateEvent received")
}