mirror of https://github.com/dswd/vpncloud.git
Removed address remove code for prefix table
This commit is contained in:
parent
97af7bcef4
commit
dea7c8c128
31
src/ip.rs
31
src/ip.rs
|
@ -139,34 +139,9 @@ impl Table for RoutingTable {
|
||||||
|
|
||||||
/// Removes an address from the map and returns whether something has been removed
|
/// Removes an address from the map and returns whether something has been removed
|
||||||
#[inline]
|
#[inline]
|
||||||
fn remove(&mut self, addr: &Address) -> bool {
|
fn remove(&mut self, _addr: &Address) -> bool {
|
||||||
let len = addr.len as usize;
|
// Do nothing, removing single address from prefix-based routing tables does not make sense
|
||||||
let mut found = false;
|
false
|
||||||
let mut found_len: isize = -1;
|
|
||||||
for i in 0..len+1 {
|
|
||||||
if let Some(group) = self.0.get(&addr.data[0..len-i]) {
|
|
||||||
for entry in group {
|
|
||||||
let mut match_len = 0;
|
|
||||||
for j in 0..addr.len as usize {
|
|
||||||
let b = addr.data[j] ^ entry.bytes[j];
|
|
||||||
if b == 0 {
|
|
||||||
match_len += 8;
|
|
||||||
} else {
|
|
||||||
match_len += b.leading_zeros();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if match_len as u8 >= entry.prefix_len && match_len as isize > found_len {
|
|
||||||
found = true;
|
|
||||||
found_len = match_len as isize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if found {
|
|
||||||
self.0.remove(&addr.data[0..found_len as usize]);
|
|
||||||
}
|
|
||||||
found
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Removed all addresses associated with a certain peer
|
/// Removed all addresses associated with a certain peer
|
||||||
|
|
Loading…
Reference in New Issue