diff --git a/Cargo.lock b/Cargo.lock index c484e9b..5226ac6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -993,7 +993,8 @@ name = "hostd" version = "0.2.0" dependencies = [ "anyhow", - "internal", + "ipc", + "systemd-ipc", "varlink", ] @@ -1354,7 +1355,7 @@ dependencies = [ ] [[package]] -name = "internal" +name = "ipc" version = "0.2.0" dependencies = [ "serde", @@ -3129,6 +3130,18 @@ dependencies = [ "libc", ] +[[package]] +name = "systemd-ipc" +version = "0.2.0" +dependencies = [ + "serde", + "serde_derive", + "serde_json", + "varlink", + "varlink_generator", + "walkdir", +] + [[package]] name = "take_mut" version = "0.2.2" diff --git a/Cargo.toml b/Cargo.toml index 99e13c5..83c8e99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,8 @@ members = [ "hostd", "trace-request", "xtask", - "internal", + "ipc", + "systemd-ipc", ] default-members = [ "agent", diff --git a/hostd/Cargo.toml b/hostd/Cargo.toml index 464fa55..4a8dee3 100644 --- a/hostd/Cargo.toml +++ b/hostd/Cargo.toml @@ -6,4 +6,5 @@ edition.workspace = true [dependencies] anyhow.workspace = true varlink = "11.0.1" -internal = { path = "../internal" } +ipc = { path = "../ipc" } +systemd-ipc = { path = "../systemd-ipc" } diff --git a/hostd/src/main.rs b/hostd/src/main.rs index fe1b597..f5d0bea 100644 --- a/hostd/src/main.rs +++ b/hostd/src/main.rs @@ -1,10 +1,8 @@ use anyhow::Result; -use internal::ipc::patagia::io_patagia_hostd; -use internal::ipc::systemd::io_systemd_hostname::{self, VarlinkClientInterface}; - -const LISTEN_ADDRESS: &str = "unix:/tmp/patagia/io.patagia.hostd"; -const SYSTEMD_ADDRESS: &str = "unix:/run/systemd/io.systemd.Hostname"; +use ipc::io_patagia_hostd; +use systemd_ipc::addrs::SYSTEMD_HOSTNAME; +use systemd_ipc::io_systemd_hostname::{self, VarlinkClientInterface}; struct PatagiaHostd; @@ -21,7 +19,7 @@ impl io_patagia_hostd::VarlinkInterface for PatagiaHostd { fn describe(&self, call: &mut dyn io_patagia_hostd::Call_Describe) -> varlink::Result<()> { // Connect to systemd.Hostname - let conn = varlink::Connection::with_address(SYSTEMD_ADDRESS).unwrap(); + let conn = varlink::Connection::with_address(SYSTEMD_HOSTNAME).unwrap(); let mut sd = io_systemd_hostname::VarlinkClient::new(conn); let machine = io_patagia_hostd::Machine { @@ -45,20 +43,14 @@ fn main() -> Result<()> { vec![Box::new(hostd_iface)], ); - let addr_path = std::path::Path::new(LISTEN_ADDRESS.strip_prefix("unix:").unwrap()) - .parent() - .unwrap(); + let addr = format!("unix:{}/{}", env!("XDG_RUNTIME_DIR"), "io.patagia.hostd"); - std::fs::create_dir_all(addr_path)?; - - println!("Varlink Listening on {}", LISTEN_ADDRESS); + println!("Varlink Listening on {}", addr); varlink::listen( svc, - LISTEN_ADDRESS, + &addr, &varlink::ListenConfig { - // Listen forever (0 = forever) - idle_timeout: 0, ..Default::default() }, )?; diff --git a/internal/src/ipc/mod.rs b/internal/src/ipc/mod.rs deleted file mode 100644 index 8bf455d..0000000 --- a/internal/src/ipc/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod patagia; -pub mod systemd; diff --git a/internal/src/lib.rs b/internal/src/lib.rs deleted file mode 100644 index ce14ad3..0000000 --- a/internal/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod ipc; diff --git a/internal/.gitignore b/ipc/.gitignore similarity index 100% rename from internal/.gitignore rename to ipc/.gitignore diff --git a/internal/Cargo.toml b/ipc/Cargo.toml similarity index 94% rename from internal/Cargo.toml rename to ipc/Cargo.toml index 7a5bc4a..b26a1f5 100644 --- a/internal/Cargo.toml +++ b/ipc/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "internal" +name = "ipc" version.workspace = true edition.workspace = true diff --git a/internal/build.rs b/ipc/build.rs similarity index 100% rename from internal/build.rs rename to ipc/build.rs diff --git a/internal/src/ipc/patagia/io.patagia.hostd.varlink b/ipc/src/io.patagia.hostd.varlink similarity index 100% rename from internal/src/ipc/patagia/io.patagia.hostd.varlink rename to ipc/src/io.patagia.hostd.varlink diff --git a/internal/src/ipc/patagia/io_patagia_hostd.rs b/ipc/src/io_patagia_hostd.rs similarity index 100% rename from internal/src/ipc/patagia/io_patagia_hostd.rs rename to ipc/src/io_patagia_hostd.rs diff --git a/internal/src/ipc/patagia/mod.rs b/ipc/src/lib.rs similarity index 100% rename from internal/src/ipc/patagia/mod.rs rename to ipc/src/lib.rs diff --git a/systemd-ipc/.gitignore b/systemd-ipc/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/systemd-ipc/.gitignore @@ -0,0 +1 @@ +/target diff --git a/systemd-ipc/Cargo.toml b/systemd-ipc/Cargo.toml new file mode 100644 index 0000000..4667cf5 --- /dev/null +++ b/systemd-ipc/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "systemd-ipc" +version.workspace = true +edition.workspace = true + +[dependencies] +serde.workspace = true +serde_derive = "1.0.217" +serde_json = "1.0.135" +varlink = "11.0.1" + +[build-dependencies] +varlink_generator = "10.1.0" +walkdir = "2.5.0" + +[package.metadata.cargo-machete] +ignored = ["serde"] diff --git a/systemd-ipc/build.rs b/systemd-ipc/build.rs new file mode 100644 index 0000000..89bc35a --- /dev/null +++ b/systemd-ipc/build.rs @@ -0,0 +1,12 @@ +extern crate varlink_generator; + +use walkdir::WalkDir; + +fn main() { + // walk dir to find varlink files + for entry in WalkDir::new("src").into_iter().filter_map(|e| e.ok()) { + if entry.file_name().to_str().unwrap().ends_with(".varlink") { + varlink_generator::cargo_build_tosource(&entry.path().display().to_string(), true); + } + } +} diff --git a/systemd-ipc/src/addrs.rs b/systemd-ipc/src/addrs.rs new file mode 100644 index 0000000..a05aca2 --- /dev/null +++ b/systemd-ipc/src/addrs.rs @@ -0,0 +1,2 @@ +#[allow(dead_code)] +pub const SYSTEMD_HOSTNAME: &str = "unix:/run/systemd/io.systemd.Hostname"; diff --git a/internal/src/ipc/systemd/io.systemd.hostname.varlink b/systemd-ipc/src/io.systemd.hostname.varlink similarity index 100% rename from internal/src/ipc/systemd/io.systemd.hostname.varlink rename to systemd-ipc/src/io.systemd.hostname.varlink diff --git a/internal/src/ipc/systemd/io_systemd_hostname.rs b/systemd-ipc/src/io_systemd_hostname.rs similarity index 100% rename from internal/src/ipc/systemd/io_systemd_hostname.rs rename to systemd-ipc/src/io_systemd_hostname.rs diff --git a/internal/src/ipc/systemd/mod.rs b/systemd-ipc/src/lib.rs similarity index 65% rename from internal/src/ipc/systemd/mod.rs rename to systemd-ipc/src/lib.rs index e13378d..606c22e 100644 --- a/internal/src/ipc/systemd/mod.rs +++ b/systemd-ipc/src/lib.rs @@ -1 +1,2 @@ +pub mod addrs; pub mod io_systemd_hostname;