提交 614f9a47 authored 作者: Serhij S's avatar Serhij S

snmp example moved to snmp2

上级 3ac837fc
...@@ -46,7 +46,7 @@ log = "0.4.21" ...@@ -46,7 +46,7 @@ log = "0.4.21"
metrics-exporter-prometheus = { version = "0.14.0", optional = true, default-features = false, features = ["http-listener"] } metrics-exporter-prometheus = { version = "0.14.0", optional = true, default-features = false, features = ["http-listener"] }
metrics-exporter-scope = { version = "0.1.3", default-features = false, features = ["msrv"], optional = true } metrics-exporter-scope = { version = "0.1.3", default-features = false, features = ["msrv"], optional = true }
metrics = { version = "0.22.3", optional = true } metrics = { version = "0.22.3", optional = true }
snmp = { version = "0.2.2", optional = true } snmp2 = { version = "0.3", optional = true }
rtsc = "0.3" rtsc = "0.3"
rvideo = { version = "0.5", optional = true, default-features = false } rvideo = { version = "0.5", optional = true, default-features = false }
rflow = { version = "0.1", optional = true, default-features = false } rflow = { version = "0.1", optional = true, default-features = false }
...@@ -127,4 +127,4 @@ required-features = ["eapi"] ...@@ -127,4 +127,4 @@ required-features = ["eapi"]
[[example]] [[example]]
name = "snmp-modbus" name = "snmp-modbus"
path = "examples/snmp-modbus.rs" path = "examples/snmp-modbus.rs"
required-features = ["modbus", "snmp"] required-features = ["modbus", "snmp2"]
...@@ -50,8 +50,9 @@ struct Relay { ...@@ -50,8 +50,9 @@ struct Relay {
impl Worker<Message, Variables> for Relay { impl Worker<Message, Variables> for Relay {
fn run(&mut self, _context: &Context<Message, Variables>) -> WResult { fn run(&mut self, _context: &Context<Message, Variables>) -> WResult {
let mut first_run = true; let mut first_run = true;
let mut sess = snmp::SyncSession::new(RELAY_ADDR, RELAY_COMMUNITY, Some(SNMP_TIMEOUT), 0)?; let mut sess =
let relay_oid = &[1, 3, 6, 1, 4, 1, 42505, 6, 2, 3, 1, 3]; snmp2::SyncSession::new_v2c(RELAY_ADDR, RELAY_COMMUNITY, Some(SNMP_TIMEOUT), 0)?;
let relay_oid = snmp2::Oid::from(&[1, 3, 6, 1, 4, 1, 42505, 6, 2, 3, 1, 3]).unwrap();
let mut prev_relay_state = Relays16::default(); let mut prev_relay_state = Relays16::default();
let mut relay_down = false; let mut relay_down = false;
for int_state in interval(Duration::from_millis(500)) { for int_state in interval(Duration::from_millis(500)) {
...@@ -73,7 +74,7 @@ impl Worker<Message, Variables> for Relay { ...@@ -73,7 +74,7 @@ impl Worker<Message, Variables> for Relay {
.enumerate() .enumerate()
{ {
if prev != current { if prev != current {
let port_oid = &[ let port_oid = snmp2::Oid::from(&[
1, 1,
3, 3,
6, 6,
...@@ -86,12 +87,13 @@ impl Worker<Message, Variables> for Relay { ...@@ -86,12 +87,13 @@ impl Worker<Message, Variables> for Relay {
3, 3,
1, 1,
3, 3,
u32::try_from(i).unwrap(), u64::try_from(i).unwrap(),
]; ])
let value = snmp::Value::Integer((*current).into()); .unwrap();
match sess.set(&[(port_oid, value)]) { let value = snmp2::Value::Integer((*current).into());
match sess.set(&[(&port_oid, value)]) {
Ok(res) => { Ok(res) => {
if res.error_status != snmp::snmp::ERRSTATUS_NOERROR { if res.error_status != snmp2::snmp::ERRSTATUS_NOERROR {
error!(status = res.error_status, "Relay SNMP set error"); error!(status = res.error_status, "Relay SNMP set error");
} }
} }
...@@ -103,22 +105,25 @@ impl Worker<Message, Variables> for Relay { ...@@ -103,22 +105,25 @@ impl Worker<Message, Variables> for Relay {
} }
} }
// read the current relay board state // read the current relay board state
match sess.getbulk(&[relay_oid], 0, 16) { match sess.getbulk(&[&relay_oid], 0, 16) {
Ok(response) => { Ok(response) => {
for (name, val) in response.varbinds { for (oid, val) in response.varbinds {
let snmp::Value::Integer(value) = val else { let snmp2::Value::Integer(value) = val else {
continue; continue;
}; };
let Ok(value) = u8::try_from(value) else { let Ok(value) = u8::try_from(value) else {
continue; continue;
}; };
let Some(port) = name.raw().last() else { let Some(port) = oid.iter().and_then(|v| v.last()) else {
continue; continue;
}; };
if usize::from(*port) >= relays.ports.len() { let Ok(port) = usize::try_from(port) else {
continue;
};
if port >= relays.ports.len() {
continue; continue;
} }
relays.ports[usize::from(*port)] = value; relays.ports[port] = value;
} }
// save the current relay board state // save the current relay board state
prev_relay_state = relays.clone(); prev_relay_state = relays.clone();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论