aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2022-11-01 12:00:34 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2022-11-01 12:00:34 +0100
commit9e5fe0f5b4bcd80e8044cf03c295bd1995b2e1c6 (patch)
tree2f92ace3f7a0b872d9a33b1ff6dfa4d7d41220de
parentbd91ff93ef98f774126cf0444bff27e24e59805d (diff)
truncate prefix early and log truncated version
-rw-r--r--src/main.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs
index eeb18d4..554d320 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -264,16 +264,18 @@ fn monitor6(config: Arc<Config>, tx: mpsc::Sender<Ipv6Net>) -> Result<()> {
let ipv6s = linkaddrs::ipv6_addresses(config.link6.clone())?;
for newv6 in ipv6s {
- if is_ipv6_global(&newv6.addr()) && (ipv6.is_none() || ipv6.unwrap() != newv6) {
+ // Resize the prefix.
+ let prefix = Ipv6Net::new(newv6.addr(), config.prefix_len)?.trunc();
+
+ if is_ipv6_global(&prefix.addr()) && (ipv6.is_none() || ipv6.unwrap() != prefix) {
if let Some(ipv6) = ipv6 {
- println!("ipv6 update: {} => {}", ipv6, newv6);
+ println!("ipv6 update: {} => {}", ipv6, prefix);
} else {
- println!("ipv6: {}", newv6);
+ println!("ipv6: {}", prefix);
}
- // Resize the prefix.
- tx.send(Ipv6Net::new(newv6.addr(), config.prefix_len)?)?;
- ipv6 = Some(newv6);
+ tx.send(prefix)?;
+ ipv6 = Some(prefix);
break;
}
@@ -351,8 +353,7 @@ fn push6(config: Arc<Config>, rx: &mpsc::Receiver<Ipv6Net>) -> Result<()> {
// Get the interface identifier.
let if_id = address.bitand(prefix.hostmask());
- let clean_prefix = prefix.addr().bitand(prefix.netmask());
- let new = clean_prefix.bitor(if_id);
+ let new = prefix.addr().bitor(if_id);
clt.call(RecordUpdate {
ids: vec![record.id],