diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-14 13:55:11 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-14 13:55:11 +0200 |
commit | 1cfaf49932d4c13cfaec29baef31b010abb70f4c (patch) | |
tree | 0a8633281ddf542db1520e6131b2de72285b60b3 | |
parent | 9bbcbc331b5c36d25fed2ba832e34239c7b008ef (diff) |
inform dnsd of lease updates using SIGUSR1
-rw-r--r-- | Cargo.lock | 102 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/main.rs | 75 |
3 files changed, 140 insertions, 38 deletions
@@ -86,6 +86,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] name = "crossbeam-channel" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -96,6 +102,30 @@ dependencies = [ ] [[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] name = "crossbeam-utils" version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -124,6 +154,12 @@ dependencies = [ ] [[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] name = "enum-as-inner" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -405,6 +441,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] name = "miniz_oxide" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -521,6 +566,15 @@ dependencies = [ ] [[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] name = "num_cpus" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -540,6 +594,12 @@ dependencies = [ ] [[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] name = "paste" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -618,6 +678,26 @@ dependencies = [ ] [[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] name = "redox_syscall" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -640,6 +720,7 @@ dependencies = [ "serde_derive", "serde_json", "socket2 0.5.3", + "sysinfo", "thiserror", ] @@ -717,6 +798,12 @@ dependencies = [ ] [[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] name = "serde" version = "1.0.177" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -811,6 +898,21 @@ dependencies = [ ] [[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "winapi", +] + +[[package]] name = "thiserror" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -18,4 +18,5 @@ serde = "1.0" serde_derive = "1.0" serde_json = "1.0" socket2 = { version = "0.5.1", features = ["all"] } +sysinfo = "0.29.10" thiserror = "1.0" diff --git a/src/main.rs b/src/main.rs index bc85922..c25be36 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,7 @@ use dhcproto::v4::{DhcpOption, Flags, Message, MessageType, Opcode, OptionCode}; use dhcproto::{Decodable, Decoder, Encodable, Encoder}; use rsdsl_netlinkd::link; use socket2::{Domain, Socket, Type}; +use sysinfo::{ProcessExt, Signal, System, SystemExt}; const BUFSIZE: usize = 1500; @@ -252,25 +253,21 @@ fn handle_request<T: LeaseManager>( let n = sock.send_to(&resp_buf, &dst.into())?; if n != resp_buf.len() { - Err(Error::PartialResponse) + return Err(Error::PartialResponse); + } else if renew { + println!( + "nak {} (renew) for client id {} on {}", + requested_addr, + format_client_id(client_id)?, + link + ); } else { - if renew { - println!( - "nak {} (renew) for client id {} on {}", - requested_addr, - format_client_id(client_id)?, - link - ); - } else { - println!( - "nak {} for client id {} on {}", - requested_addr, - format_client_id(client_id)?, - link - ); - } - - Ok(()) + println!( + "nak {} for client id {} on {}", + requested_addr, + format_client_id(client_id)?, + link + ); } } else { let lease_time = lease_mgr.lease_time(); @@ -298,29 +295,31 @@ fn handle_request<T: LeaseManager>( let n = sock.send_to(&resp_buf, &dst.into())?; if n != resp_buf.len() { - Err(Error::PartialResponse) + return Err(Error::PartialResponse); + } else if renew { + println!( + "ack {} (renew) for client id {} for {:?} on {}", + requested_addr, + format_client_id(client_id)?, + lease_time, + link + ); } else { - if renew { - println!( - "ack {} (renew) for client id {} for {:?} on {}", - requested_addr, - format_client_id(client_id)?, - lease_time, - link - ); - } else { - println!( - "ack {} for client id {} for {:?} on {}", - requested_addr, - format_client_id(client_id)?, - lease_time, - link - ); - } - - Ok(()) + println!( + "ack {} for client id {} for {:?} on {}", + requested_addr, + format_client_id(client_id)?, + lease_time, + link + ); } } + + for dnsd in System::default().processes_by_exact_name("/bin/rsdsl_dnsd") { + dnsd.kill_with(Signal::User1); + } + + Ok(()) } MessageType::Release => { let client_id = match opts |