From bd74b2d518e738f8f23267f8de41c86f5552caae Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Mon, 30 Dec 2024 15:02:44 +0100 Subject: [PATCH] Add a coldplug utility --- src/bin/mdev-coldplug.rs | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/bin/mdev-coldplug.rs diff --git a/src/bin/mdev-coldplug.rs b/src/bin/mdev-coldplug.rs new file mode 100644 index 0000000..3513106 --- /dev/null +++ b/src/bin/mdev-coldplug.rs @@ -0,0 +1,49 @@ +use std::path::PathBuf; + +use clap::Parser; +use mdev::setup_log; +use tracing::{debug, error}; +use walkdir::WalkDir; + +#[derive(Parser)] +struct Opt { + /// Verbose mode, logs to stderr + #[arg(short, long, action = clap::ArgAction::Count)] + verbose: u8, + + /// Path where the sysfs is mounted + #[arg(short, long, default_value = "/sys")] + sysfs_mount: PathBuf, +} + +impl Opt { + fn setup_log(&self) -> anyhow::Result<()> { + setup_log(self.verbose) + } +} + +fn main() -> anyhow::Result<()> { + let opt = Opt::parse(); + + opt.setup_log()?; + + let classdir = WalkDir::new(opt.sysfs_mount.join("class")) + .follow_links(true) + .max_depth(4) + .into_iter(); + let busdir = WalkDir::new(opt.sysfs_mount.join("bus")) + .follow_links(true) + .max_depth(3) + .into_iter(); + + for entry in classdir + .chain(busdir) + .filter_map(|e| e.ok().filter(|e| e.file_name().eq("uevent"))) + { + debug!("{entry:?}"); + let p = entry.path(); + std::fs::write(p, "add").unwrap_or_else(|e| error!("cannot write to {}: {e}", p.display())); + } + + Ok(()) +}