aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-12 17:36:09 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-12 17:36:09 +0100
commitfaaf6e36f86e530f09fe132613ba5d78d077112a (patch)
tree6b05ce372c6cca4d1f76d2ca5b96f6805c2a0609
parent534105b6b2308394bde32c9894b567e98c1f00f2 (diff)
inform other services of lease acquiry and expiry
-rw-r--r--src/error.rs2
-rw-r--r--src/main.rs25
2 files changed, 25 insertions, 2 deletions
diff --git a/src/error.rs b/src/error.rs
index b58678a..d67a9fd 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -6,6 +6,8 @@ use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
+ #[error("lease has been obtained but doesn't exist")]
+ LeaseNotFound,
#[error("no client duid")]
NoClientId,
#[error("no hexdump data")]
diff --git a/src/main.rs b/src/main.rs
index 1fc51a7..edcd7c6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -114,9 +114,30 @@ async fn main() -> Result<()> {
let is_opened = *dhcp6c_rx.borrow_and_update();
if is_opened {
- todo!("write lease + inform")
+ let pd_config = dhcp6.lease.clone().ok_or(Error::LeaseNotFound)?;
+
+ let mut file = File::create(rsdsl_pd_config::LOCATION)?;
+ serde_json::to_writer_pretty(&mut file, &pd_config)?;
+
+ inform();
+
+ println!(
+ "[info] <> obtain lease {}/{} t1={} t2={} preflft={} validlft={} dns1={} dns2={} aftr={:?}",
+ pd_config.prefix,
+ pd_config.len,
+ pd_config.t1,
+ pd_config.t2,
+ pd_config.preflft,
+ pd_config.validlft,
+ pd_config.dns1,
+ pd_config.dns2,
+ pd_config.aftr
+ );
} else {
- todo!("del lease + inform")
+ fs::remove_file(rsdsl_pd_config::LOCATION)?;
+ inform();
+
+ println!("[info] <> expire");
}
}