From 84e4306b22ba5f352e143d6d1cfa6bce15583f27 Mon Sep 17 00:00:00 2001 From: Herbert Wolverson Date: Mon, 20 Mar 2023 19:47:30 +0000 Subject: [PATCH] Don't change lqos.conf, generate a node ID hash based on ip link output. --- .../lqos_anonymous_stats_server/src/db.rs | 1 + src/rust/lqos_config/src/etc.rs | 23 +++++++++++-------- src/rust/lqos_setup/src/main.rs | 2 +- src/rust/lqosd/src/anonymous_usage/mod.rs | 6 ++--- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/rust/lqos_anonymous_stats_server/src/db.rs b/src/rust/lqos_anonymous_stats_server/src/db.rs index 10893237..a093be98 100644 --- a/src/rust/lqos_anonymous_stats_server/src/db.rs +++ b/src/rust/lqos_anonymous_stats_server/src/db.rs @@ -164,6 +164,7 @@ pub fn insert_stats_dump(stats: &AnonymousUsageV1, ip: &str) -> anyhow::Result<( } // Not a great idea, this is for test data +#[allow(dead_code)] pub fn dump_all_to_string() -> anyhow::Result { let mut result = String::new(); let cn = sqlite::open(DBPATH)?; diff --git a/src/rust/lqos_config/src/etc.rs b/src/rust/lqos_config/src/etc.rs index 6f7ce9c4..a5d57971 100644 --- a/src/rust/lqos_config/src/etc.rs +++ b/src/rust/lqos_config/src/etc.rs @@ -1,8 +1,7 @@ //! Manages the `/etc/lqos.conf` file. use log::error; use serde::{Deserialize, Serialize}; -use uuid::Uuid; -use std::{path::Path, fs}; +use std::{path::Path, fs, process::Command}; use thiserror::Error; /// Represents the top-level of the `/etc/lqos.conf` file. Serialization @@ -180,15 +179,19 @@ impl EtcLqos { } fn check_config(cfg: &mut EtcLqos) { - let mut changed = false; - if cfg.node_id.is_none() { - let new_id = Uuid::new_v4(); - cfg.node_id = Some(new_id.to_string()); - changed = true; - } + use sha2::Digest; + use sha2::digest::Update; - if changed { - let _ = cfg.save(); + if cfg.node_id.is_none() { + if let Ok(out) = Command::new("/bin/ip").args(["link"]).output() { + if let Ok(raw_ip_link) = String::from_utf8(out.stdout) { + let hash = sha2::Sha256::new().chain(raw_ip_link).finalize(); + cfg.node_id = Some(format!("{:x}", hash)); + log::info!("Generated node ID: {:?}", cfg.node_id); + log::warn!("Please consider adding a line to your /etc/lqos.conf configuration:"); + log::warn!("node_id = (big random number)"); + } + } } } diff --git a/src/rust/lqos_setup/src/main.rs b/src/rust/lqos_setup/src/main.rs index c2e0bdd1..659aface 100644 --- a/src/rust/lqos_setup/src/main.rs +++ b/src/rust/lqos_setup/src/main.rs @@ -140,7 +140,7 @@ vlan_mapping = [] [usage_stats] send_anonymous = {ALLOW_ANONYMOUS} -anonymous_server = \"127.0.0.1:9125\" +anonymous_server = \"stats.libreqos.io:9125\" "; fn write_etc_lqos_conf(internet: &str, isp: &str, allow_anonymous: bool) { diff --git a/src/rust/lqosd/src/anonymous_usage/mod.rs b/src/rust/lqosd/src/anonymous_usage/mod.rs index 5c8f035b..b2712146 100644 --- a/src/rust/lqosd/src/anonymous_usage/mod.rs +++ b/src/rust/lqosd/src/anonymous_usage/mod.rs @@ -3,7 +3,7 @@ mod version; use std::{time::Duration, net::TcpStream, io::Write}; use lqos_bus::anonymous::{AnonymousUsageV1, build_stats}; use lqos_config::{EtcLqos, LibreQoSConfig}; -use lqos_sys::num_possible_cpus; +use lqos_sys::libbpf_num_possible_cpus; use sysinfo::{System, SystemExt, CpuExt}; use crate::shaped_devices_tracker::{SHAPED_DEVICES, NETWORK_JSON}; @@ -36,9 +36,7 @@ fn anonymous_usage_dump() -> anyhow::Result<()> { if let Some(kernel) = sys.kernel_version() { data.kernel_version = kernel; } - if let Ok(cores) = num_possible_cpus() { - data.usable_cores = cores; - } + data.usable_cores = unsafe { libbpf_num_possible_cpus() } as u32; let cpu = sys.cpus().first(); if let Some(cpu) = cpu { data.cpu_brand = cpu.brand().to_string();