finally delete that ahh shitass fn
This commit is contained in:
+3
-3
@@ -3,9 +3,9 @@ pub mod utils;
|
|||||||
|
|
||||||
pub use service::{
|
pub use service::{
|
||||||
broadcast_wake_targets, get_interface_summaries, get_interface_summary, get_ips, get_leases,
|
broadcast_wake_targets, get_interface_summaries, get_interface_summary, get_ips, get_leases,
|
||||||
inventory, leases_without_state, list_interfaces, merge_devices, query_to_device_query,
|
inventory, leases_without_state, merge_devices, query_to_device_query, resolve_devices,
|
||||||
resolve_devices, resolve_query, resolve_selector, resolve_wake_targets, wake_explicit,
|
resolve_query, resolve_selector, resolve_wake_targets, wake_explicit, wake_from_query,
|
||||||
wake_from_query, wake_targets,
|
wake_targets,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -2,13 +2,6 @@ use anyhow::Result;
|
|||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
use wakey_core::InterfaceSummary;
|
use wakey_core::InterfaceSummary;
|
||||||
|
|
||||||
/// Return interface names only.
|
|
||||||
///
|
|
||||||
/// This is the old, lightweight interface listing surface kept for compatibility.
|
|
||||||
pub async fn list_interfaces() -> Result<Vec<String>> {
|
|
||||||
Ok(wakey_linux::devices::devs_sorted().await)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return condensed interface summaries useful for CLI and wake routing.
|
/// Return condensed interface summaries useful for CLI and wake routing.
|
||||||
#[instrument(skip_all)]
|
#[instrument(skip_all)]
|
||||||
pub async fn get_interface_summaries() -> Result<Vec<InterfaceSummary>> {
|
pub async fn get_interface_summaries() -> Result<Vec<InterfaceSummary>> {
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ pub mod leases;
|
|||||||
pub mod query;
|
pub mod query;
|
||||||
pub mod wake;
|
pub mod wake;
|
||||||
|
|
||||||
pub use interfaces::{get_interface_summaries, get_interface_summary, get_ips, list_interfaces};
|
pub use interfaces::{get_interface_summaries, get_interface_summary, get_ips};
|
||||||
pub use inventory::{inventory, merge_devices, resolve_devices};
|
pub use inventory::{inventory, merge_devices, resolve_devices};
|
||||||
pub use leases::{get_leases, leases_without_state};
|
pub use leases::{get_leases, leases_without_state};
|
||||||
pub use query::{query_to_device_query, resolve_query, resolve_selector};
|
pub use query::{query_to_device_query, resolve_query, resolve_selector};
|
||||||
|
|||||||
@@ -1,59 +1,7 @@
|
|||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use lda_ipjs::subcommands::address;
|
use lda_ipjs::subcommands::address;
|
||||||
use std::collections::HashSet;
|
|
||||||
use wakey_core::{InterfaceAddr, InterfaceSummary};
|
use wakey_core::{InterfaceAddr, InterfaceSummary};
|
||||||
|
|
||||||
/// Discover interface names from Linux without requiring `ip`.
|
|
||||||
///
|
|
||||||
/// This is the lowest-common-denominator interface listing path and is used for
|
|
||||||
/// quick existence checks and legacy string-only callers.
|
|
||||||
pub async fn list_devs() -> HashSet<String> {
|
|
||||||
fn get_dev() -> HashSet<String> {
|
|
||||||
let mut devs: HashSet<String> = HashSet::new();
|
|
||||||
if let Ok(rd) = std::fs::read_dir("/sys/class/net") {
|
|
||||||
for e in rd.flatten() {
|
|
||||||
if e.file_type()
|
|
||||||
.map(|ft| {
|
|
||||||
if ft.is_symlink() {
|
|
||||||
std::fs::metadata(e.path())
|
|
||||||
.map(|m| m.is_dir())
|
|
||||||
.unwrap_or(false)
|
|
||||||
} else {
|
|
||||||
ft.is_dir()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.unwrap_or(false)
|
|
||||||
&& let Ok(name) = e.file_name().into_string()
|
|
||||||
&& name != "lo"
|
|
||||||
&& !name.is_empty()
|
|
||||||
{
|
|
||||||
devs.insert(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if let Ok(txt) = std::fs::read_to_string("/proc/net/dev") {
|
|
||||||
for line in txt.lines().skip(2) {
|
|
||||||
if let Some((name, _rest)) = line.split_once(':') {
|
|
||||||
let n = name.trim().to_string();
|
|
||||||
if n != "lo" && !n.is_empty() {
|
|
||||||
devs.insert(n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
devs
|
|
||||||
}
|
|
||||||
|
|
||||||
tokio::task::spawn_blocking(get_dev)
|
|
||||||
.await
|
|
||||||
.unwrap_or_default()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn devs_sorted() -> Vec<String> {
|
|
||||||
let mut v: Vec<String> = list_devs().await.into_iter().collect();
|
|
||||||
v.sort();
|
|
||||||
v
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Build condensed interface summaries from Linux address data.
|
/// Build condensed interface summaries from Linux address data.
|
||||||
///
|
///
|
||||||
/// On Unix this prefers the `ipjs` netlink-backed address path; elsewhere it
|
/// On Unix this prefers the `ipjs` netlink-backed address path; elsewhere it
|
||||||
@@ -100,7 +48,10 @@ pub async fn list_interface_summaries() -> Result<Vec<InterfaceSummary>> {
|
|||||||
Ok(out)
|
Ok(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return whether a named interface exists according to [`list_devs`].
|
/// Return whether a named non-loopback interface exists.
|
||||||
pub async fn has_dev(name: &str) -> bool {
|
pub async fn has_dev(name: &str) -> bool {
|
||||||
list_devs().await.contains(name)
|
match list_interface_summaries().await {
|
||||||
|
Ok(interfaces) => interfaces.iter().any(|iface| iface.ifname == name),
|
||||||
|
Err(_) => false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ mod interfaces;
|
|||||||
mod neighbors;
|
mod neighbors;
|
||||||
mod query;
|
mod query;
|
||||||
|
|
||||||
pub use interfaces::{devs_sorted, has_dev, list_devs, list_interface_summaries};
|
pub use interfaces::{has_dev, list_interface_summaries};
|
||||||
pub use neighbors::{get_ips, get_neighbors, query_neighbors};
|
pub use neighbors::{get_ips, get_neighbors, query_neighbors};
|
||||||
pub use query::classify_query;
|
pub use query::classify_query;
|
||||||
|
|||||||
Reference in New Issue
Block a user