aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-10-14 13:55:11 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-10-14 13:55:11 +0200
commit1cfaf49932d4c13cfaec29baef31b010abb70f4c (patch)
tree0a8633281ddf542db1520e6131b2de72285b60b3
parent9bbcbc331b5c36d25fed2ba832e34239c7b008ef (diff)
inform dnsd of lease updates using SIGUSR1
-rw-r--r--Cargo.lock102
-rw-r--r--Cargo.toml1
-rw-r--r--src/main.rs75
3 files changed, 140 insertions, 38 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 38ee25b..b6465e9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index 811513d..eebdf1c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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