From a0ca6650f62f5a1307aefac9a5294e0e867d51ca Mon Sep 17 00:00:00 2001 From: David Boucher Date: Fri, 21 Feb 2025 08:01:36 +0100 Subject: [PATCH] enh(generic-snmp): snmp version has the snmp version propagated to the execute function --- experimental/src/generic/mod.rs | 13 +++++++++++-- experimental/src/lib.rs | 11 ++++------- experimental/src/main.rs | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/experimental/src/generic/mod.rs b/experimental/src/generic/mod.rs index 3b5c9310d..c58751fe9 100644 --- a/experimental/src/generic/mod.rs +++ b/experimental/src/generic/mod.rs @@ -155,7 +155,13 @@ fn build_metrics<'a>( } impl Command { - pub fn execute(&self, target: &str, ext: &CommandExt) -> CmdResult { + pub fn execute( + &self, + target: &str, + version: &str, + community: &str, + ext: &CommandExt, + ) -> CmdResult { let mut agregation = ("", 0, Operation::None); let mut res: Option<(&str, SnmpResult)> = None; for (idx, entry) in self.leaf.entries.iter().enumerate() { @@ -165,7 +171,10 @@ impl Command { } Entry::Query(query) => match query.query { QueryType::Walk => { - res = Some((&query.name, r_snmp_bulk_walk(target, &query.oid))); + res = Some(( + &query.name, + r_snmp_bulk_walk(target, version, community, &query.oid), + )); } }, } diff --git a/experimental/src/lib.rs b/experimental/src/lib.rs index 5cf43045b..c399e02f9 100644 --- a/experimental/src/lib.rs +++ b/experimental/src/lib.rs @@ -2,7 +2,6 @@ extern crate log; extern crate rasn; extern crate rasn_smi; extern crate rasn_snmp; -extern crate regex; use log::{info, trace, warn}; use rasn::types::ObjectIdentifier; @@ -12,7 +11,6 @@ use rasn_snmp::v2::VarBindValue; use rasn_snmp::v2::{BulkPdu, Pdu}; use rasn_snmp::v2::{GetBulkRequest, GetNextRequest, GetRequest}; use rasn_snmp::v2c::Message; -use regex::Regex; use std::ffi::CStr; use std::ffi::CString; use std::net::UdpSocket; @@ -274,10 +272,9 @@ pub fn r_snmp_walk(target: &str, oid: &str) -> SnmpResult { /// # Example /// ``` /// use snmp_rust::r_snmp_bulk_walk; -/// let result = r_snmp_bulk_walk("127.0.0.1:161", "1.3.6.1.2.1.25.3.3.1.2"); +/// let result = r_snmp_bulk_walk("127.0.0.1:161", "2c", "public", "1.3.6.1.2.1.25.3.3.1.2"); /// ``` -pub fn r_snmp_bulk_walk(target: &str, oid: &str) -> SnmpResult { - let community = "public"; +pub fn r_snmp_bulk_walk(target: &str, version: &str, community: &str, oid: &str) -> SnmpResult { let oid_tab = oid .split('.') .map(|x| x.parse::().unwrap()) @@ -301,7 +298,7 @@ pub fn r_snmp_bulk_walk(target: &str, oid: &str) -> SnmpResult { let message: Message = Message { version: 1.into(), - community: community.into(), + community: community.to_string().into(), data: get_request.into(), }; @@ -417,7 +414,7 @@ mod tests { #[test] fn test_snmp_bulk_walk() { - let result = r_snmp_bulk_walk("127.0.0.1:161", "1.3.6.1.2.1.25.3.3.1.2"); + let result = r_snmp_bulk_walk("127.0.0.1:161", "2c", "public", "1.3.6.1.2.1.25.3.3.1.2"); let re = Regex::new(r"[0-9]+").unwrap(); assert!(result.variables.len() > 0); for v in result.variables.iter() { diff --git a/experimental/src/main.rs b/experimental/src/main.rs index 29bef9d49..7079754f7 100644 --- a/experimental/src/main.rs +++ b/experimental/src/main.rs @@ -70,7 +70,7 @@ fn main() { warning_agregation: cli.warning_agregation, critical_agregation: cli.critical_agregation, }; - let result = cmd.execute(&url, &cli.community, &ext); + let result = cmd.execute(&url, &cli.snmp_version, &cli.community, &ext); println!("{}", result.output); std::process::exit(result.status); }