diff options
-rw-r--r-- | src/error.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 25 |
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"); } } |