From 08f37b15eee2bf80604ff07860b6bec99b2d9407 Mon Sep 17 00:00:00 2001 From: chenjiayi Date: Tue, 15 Aug 2023 10:06:45 +0800 Subject: [PATCH 1/3] fix(devmaster): avoid coredump when rules directory is empty Also simplify configuration entry 'netif_cfg_d' into 'network_d'. --- exts/devmaster/config/config.toml | 13 +++++++++++++ exts/devmaster/config/network.d/99-default.link | 5 +++++ exts/devmaster/config/rules.d/99-default.rules | 1 + exts/devmaster/src/lib/config/devmaster_conf.rs | 11 +++++++---- exts/devmaster/src/lib/framework/devmaster.rs | 4 ++-- exts/devmaster/src/lib/rules/exec_mgr.rs | 5 +---- exts/devmaster/tests/network/99-default.link | 7 ------- 7 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 exts/devmaster/config/config.toml create mode 100644 exts/devmaster/config/network.d/99-default.link create mode 100644 exts/devmaster/config/rules.d/99-default.rules delete mode 100644 exts/devmaster/tests/network/99-default.link diff --git a/exts/devmaster/config/config.toml b/exts/devmaster/config/config.toml new file mode 100644 index 00000000..35e795c3 --- /dev/null +++ b/exts/devmaster/config/config.toml @@ -0,0 +1,13 @@ +# Default configuration of devmaster daemon. + +# Support 'info' and 'debug'. +log_level = "info" + +# Support multiple rules directories. +rules_d = ["/etc/devmaster/rules.d"] + +# Support multiple network interface configuration directories. +network_d = ["/etc/devmaster/network.d"] + +# The default value is 3. +max_workers = 3 diff --git a/exts/devmaster/config/network.d/99-default.link b/exts/devmaster/config/network.d/99-default.link new file mode 100644 index 00000000..831f33ed --- /dev/null +++ b/exts/devmaster/config/network.d/99-default.link @@ -0,0 +1,5 @@ +[Match] +OriginalName = "*" + +[Link] +NamePolicy = ["database", "onboard", "slot", "path"] diff --git a/exts/devmaster/config/rules.d/99-default.rules b/exts/devmaster/config/rules.d/99-default.rules new file mode 100644 index 00000000..78f59f0a --- /dev/null +++ b/exts/devmaster/config/rules.d/99-default.rules @@ -0,0 +1 @@ +TAG+="devmaster" \ No newline at end of file diff --git a/exts/devmaster/src/lib/config/devmaster_conf.rs b/exts/devmaster/src/lib/config/devmaster_conf.rs index b7fcd00d..645d2e67 100644 --- a/exts/devmaster/src/lib/config/devmaster_conf.rs +++ b/exts/devmaster/src/lib/config/devmaster_conf.rs @@ -44,7 +44,7 @@ pub(crate) struct DevmasterConfigData { pub(crate) rules_d: Option>, pub(crate) max_workers: Option, pub(crate) log_level: Option, - pub(crate) netif_cfg_d: Option>, + pub(crate) network_d: Option>, } impl DevmasterConfig { @@ -101,7 +101,7 @@ impl DevmasterConfig { pub fn get_netif_cfg_d(&self) -> Vec { self.inner .borrow() - .netif_cfg_d + .network_d .clone() .unwrap_or_else(|| DEFAULT_NETIF_CONFIG_DIRS.to_vec()) } @@ -116,7 +116,7 @@ mod tests { fn test_config() { let config_s = " rules_d = [\"/root/rules.d\"] -netif_cfg_d = [\"/root/network\"] +network_d = [\"/root/network.d\"] "; fs::write("/tmp/test_config.toml", config_s).unwrap(); let config: DevmasterConfig = DevmasterConfig::new(); @@ -125,7 +125,10 @@ netif_cfg_d = [\"/root/network\"] assert_eq!(config.get_rules_d(), vec!["/root/rules.d".to_string()]); assert_eq!(config.get_max_workers(), 3); assert_eq!(config.get_log_level(), LevelFilter::Info); - assert_eq!(config.get_netif_cfg_d(), vec!["/root/network".to_string()]); + assert_eq!( + config.get_netif_cfg_d(), + vec!["/root/network.d".to_string()] + ); fs::remove_file("/tmp/test_config.toml").unwrap(); let default_conf = DevmasterConfig::new(); diff --git a/exts/devmaster/src/lib/framework/devmaster.rs b/exts/devmaster/src/lib/framework/devmaster.rs index 2fc00313..b636dc1e 100644 --- a/exts/devmaster/src/lib/framework/devmaster.rs +++ b/exts/devmaster/src/lib/framework/devmaster.rs @@ -56,11 +56,11 @@ pub struct Cache { impl Cache { /// generate the shared cache - pub fn new(rules_d: Vec, netif_cfg_d: Vec) -> Cache { + pub fn new(rules_d: Vec, network_d: Vec) -> Cache { let rules = Rules::load_rules(rules_d, ResolveNameTime::Early); let mut netif_cfg_ctx = NetifConfigCtx::new(); - netif_cfg_ctx.load(netif_cfg_d); + netif_cfg_ctx.load(network_d); Cache { rules, diff --git a/exts/devmaster/src/lib/rules/exec_mgr.rs b/exts/devmaster/src/lib/rules/exec_mgr.rs index 7a685e1b..18c38a18 100644 --- a/exts/devmaster/src/lib/rules/exec_mgr.rs +++ b/exts/devmaster/src/lib/rules/exec_mgr.rs @@ -219,7 +219,7 @@ impl ExecuteManager { .files .clone(); - loop { + while self.current_rule_file.is_some() { let next_file = self .current_rule_file .clone() @@ -233,9 +233,6 @@ impl ExecuteManager { self.apply_rule_file()?; self.current_rule_file = next_file; - if self.current_rule_file.is_none() { - break; - } } Ok(()) diff --git a/exts/devmaster/tests/network/99-default.link b/exts/devmaster/tests/network/99-default.link deleted file mode 100644 index 2c86cdb5..00000000 --- a/exts/devmaster/tests/network/99-default.link +++ /dev/null @@ -1,7 +0,0 @@ -[Match] -OriginalName = "*" - -[Link] -NamePolicy = ["keep", "kernel", "database", "onboard", "slot", "path"] -AlternativeNamesPolicy = ["database", "onboard", "slot", "path"] -MACAddressPolicy = "persistent" -- 2.33.0