diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 6309b93..77d7036 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -23,6 +23,7 @@ Error messages may change over time; error codes do not. | Code | Area | Summary | |------|------|--------| | VUI-UDEV-001 | udev | udev control socket not reachable | +| VUI-UDEV-002 | udev | could not write into /run/vuinputd/... | --- @@ -60,3 +61,5 @@ When reporting an issue, please include: * Full command-line invocation * Execution environment (host, container, systemd) * Relevant debug logs (see [DEBUG.md](DEBUG.md)) + +### VUI-UDEV-002 - could not write into /run/vuinputd/... diff --git a/vuinputd/src/actions/handle_action.rs b/vuinputd/src/actions/handle_action.rs index 011ca44..6b95bc9 100644 --- a/vuinputd/src/actions/handle_action.rs +++ b/vuinputd/src/actions/handle_action.rs @@ -3,9 +3,9 @@ // Author: Johannes Leupolz use super::action::Action; -use super::input_device; -use super::netlink_message; -use super::runtime_data; +use crate::input_realizer::input_device; +use crate::input_realizer::netlink_message; +use crate::input_realizer::runtime_data; pub fn handle_cli_action(json: String) -> i32 { let action: Action = serde_json::from_str(&json).expect("invalid action JSON"); diff --git a/vuinputd/src/actions/mod.rs b/vuinputd/src/actions/mod.rs index a5e98d7..f7ec18c 100644 --- a/vuinputd/src/actions/mod.rs +++ b/vuinputd/src/actions/mod.rs @@ -4,6 +4,3 @@ pub mod action; pub mod handle_action; -pub mod input_device; -pub mod netlink_message; -pub mod runtime_data; diff --git a/vuinputd/src/global_config.rs b/vuinputd/src/global_config.rs index ee7cc34..8305284 100644 --- a/vuinputd/src/global_config.rs +++ b/vuinputd/src/global_config.rs @@ -30,7 +30,7 @@ pub enum DevicePolicy { StrictGamepad, } /// Where to create runtime artifacts (device nodes + udev data) -#[derive(Debug, Clone, ValueEnum, Default)] +#[derive(Debug, Clone, ValueEnum, Default, PartialEq, Eq)] pub enum Placement { #[default] /// Create inside the container diff --git a/vuinputd/src/actions/input_device.rs b/vuinputd/src/input_realizer/input_device.rs similarity index 100% rename from vuinputd/src/actions/input_device.rs rename to vuinputd/src/input_realizer/input_device.rs diff --git a/vuinputd/src/input_realizer/mod.rs b/vuinputd/src/input_realizer/mod.rs new file mode 100644 index 0000000..0be3f87 --- /dev/null +++ b/vuinputd/src/input_realizer/mod.rs @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +// +// Author: Johannes Leupolz + +pub mod input_device; +pub mod netlink_message; +pub mod runtime_data; diff --git a/vuinputd/src/actions/netlink_message.rs b/vuinputd/src/input_realizer/netlink_message.rs similarity index 100% rename from vuinputd/src/actions/netlink_message.rs rename to vuinputd/src/input_realizer/netlink_message.rs diff --git a/vuinputd/src/actions/runtime_data.rs b/vuinputd/src/input_realizer/runtime_data.rs similarity index 100% rename from vuinputd/src/actions/runtime_data.rs rename to vuinputd/src/input_realizer/runtime_data.rs diff --git a/vuinputd/src/jobs/emit_udev_event_job.rs b/vuinputd/src/jobs/emit_udev_event_job.rs index 4aceb15..25034b9 100644 --- a/vuinputd/src/jobs/emit_udev_event_job.rs +++ b/vuinputd/src/jobs/emit_udev_event_job.rs @@ -14,12 +14,9 @@ use async_io::Timer; use log::debug; use crate::{ - actions::{ - self, - action::Action, - runtime_data::{self, read_udev_data}, - }, + actions::{self, action::Action}, global_config::{self, get_placement, Placement}, + input_realizer::runtime_data, job_engine::job::{Job, JobTarget}, jobs::monitor_udev_job::EVENT_STORE, process_tools::{self, await_process, Pid, RequestingProcess}, @@ -128,7 +125,7 @@ impl EmitUdevEventJob { }; } if runtime_data.is_none() { - runtime_data = read_udev_data(self.major, self.minor).ok(); + runtime_data = runtime_data::read_udev_data(self.major, self.minor).ok(); } number_of_attempt += 1; diff --git a/vuinputd/src/jobs/mknod_device_job.rs b/vuinputd/src/jobs/mknod_device_job.rs index 98bdc40..bc443c1 100644 --- a/vuinputd/src/jobs/mknod_device_job.rs +++ b/vuinputd/src/jobs/mknod_device_job.rs @@ -9,13 +9,14 @@ use std::{ }; use crate::{ - actions::{action::Action, input_device}, + actions::action::Action, global_config::{self, Placement}, + input_realizer::input_device, job_engine::job::{Job, JobTarget}, process_tools::{self, await_process, Pid, RequestingProcess}, }; -use crate::actions::runtime_data::write_udev_data; +use crate::input_realizer::runtime_data::write_udev_data; #[derive(Clone, Debug, Copy, PartialOrd, PartialEq)] pub enum State { diff --git a/vuinputd/src/jobs/remove_device_job.rs b/vuinputd/src/jobs/remove_device_job.rs index 62a8345..e3c7281 100644 --- a/vuinputd/src/jobs/remove_device_job.rs +++ b/vuinputd/src/jobs/remove_device_job.rs @@ -13,6 +13,7 @@ use log::debug; use crate::{ actions::action::Action, global_config::{self, Placement}, + input_realizer::{input_device, runtime_data}, job_engine::job::{Job, JobTarget}, jobs::monitor_udev_job::EVENT_STORE, process_tools::{self, await_process, Pid, RequestingProcess}, @@ -154,6 +155,8 @@ impl RemoveDeviceJob { } Placement::OnHost => { todo!(); + //input_device::remove_input_device(path, major.into(), minor.into())?; + //runtime_data::delete_udev_data("/run",major.into(), minor.into())?; } Placement::None => {} } diff --git a/vuinputd/src/main.rs b/vuinputd/src/main.rs index 3c6acbb..43c2aa5 100644 --- a/vuinputd/src/main.rs +++ b/vuinputd/src/main.rs @@ -42,6 +42,7 @@ use crate::job_engine::{job::*, JOB_DISPATCHER}; use crate::process_tools::*; pub mod actions; +pub mod input_realizer; pub mod global_config; pub mod jobs; @@ -218,6 +219,10 @@ fn main() -> std::io::Result<()> { None => "vuinput", Some(devname) => devname, }; + if args.placement==Placement::OnHost { + todo!("ensure structure and writablity of dev-input") + } + let vuinput_devicename = CString::new(format!("DEVNAME={}", vuinput_devicename)).unwrap(); let mut dev_info_argv: Vec<*const c_char> = vec![