diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-11-01 12:00:34 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-11-01 12:00:34 +0100 |
commit | 9e5fe0f5b4bcd80e8044cf03c295bd1995b2e1c6 (patch) | |
tree | 2f92ace3f7a0b872d9a33b1ff6dfa4d7d41220de | |
parent | bd91ff93ef98f774126cf0444bff27e24e59805d (diff) |
truncate prefix early and log truncated version
-rw-r--r-- | src/main.rs | 17 |
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], |