pub struct Agent { /* private fields */ }Expand description
SNMP Agent.
Listens for and responds to SNMP requests (GET, GETNEXT, GETBULK, SET).
§Example
use async_snmp::agent::Agent;
use async_snmp::oid;
let agent = Agent::builder()
.bind("0.0.0.0:161")
.community(b"public")
.build()
.await?;
agent.run().awaitImplementations§
Source§impl Agent
impl Agent
Sourcepub async fn send_trap(
&self,
trap_oid: &Oid,
uptime: u32,
varbinds: Vec<VarBind>,
) -> Result<()>
pub async fn send_trap( &self, trap_oid: &Oid, uptime: u32, varbinds: Vec<VarBind>, ) -> Result<()>
Send a trap to all configured trap sinks.
Constructs a TrapV2 PDU with the mandatory sysUpTime.0 and snmpTrapOID.0 prefix and sends it to each destination. Fire-and-forget: no response expected.
V1 trap sinks receive a converted v1 trap (RFC 3584 Section 3.2).
§Example
let agent = Agent::builder()
.bind("0.0.0.0:1161")
.community(b"public")
.trap_sink("192.168.1.100:162", Auth::v2c("public"))
.build()
.await?;
// Send coldStart trap to all sinks
agent.send_trap(&oid!(1, 3, 6, 1, 6, 3, 1, 1, 5, 1), 0, vec![]).await?;Sourcepub async fn send_inform(
&self,
trap_oid: &Oid,
uptime: u32,
varbinds: Vec<VarBind>,
) -> Result<()>
pub async fn send_inform( &self, trap_oid: &Oid, uptime: u32, varbinds: Vec<VarBind>, ) -> Result<()>
Send an inform to all configured trap sinks.
Constructs an InformRequest PDU and sends it to each destination, waiting for acknowledgement from each. Reuses a cached client per sink for the request/response exchange.
V1 trap sinks are skipped (v1 does not support informs).
§Example
let agent = Agent::builder()
.bind("0.0.0.0:1161")
.community(b"public")
.trap_sink("192.168.1.100:162", Auth::v2c("public"))
.build()
.await?;
// Send warmStart inform to all sinks (waits for acknowledgement)
agent.send_inform(&oid!(1, 3, 6, 1, 6, 3, 1, 1, 5, 2), 0, vec![]).await?;Source§impl Agent
impl Agent
Sourcepub fn builder() -> AgentBuilder
pub fn builder() -> AgentBuilder
Create a builder for configuring the agent.
Sourcepub fn local_addr(&self) -> SocketAddr
pub fn local_addr(&self) -> SocketAddr
Get the local address the agent is bound to.
Sourcepub fn engine_boots(&self) -> u32
pub fn engine_boots(&self) -> u32
Get the current engine boots value.
Useful for persisting across restarts per RFC 3414 Section 2.3.
The persisted value should be passed to AgentBuilder::engine_boots()
on the next startup.
Sourcepub fn engine_time(&self) -> u32
pub fn engine_time(&self) -> u32
Get the current engine time value.
Sourcepub fn cancel(&self) -> CancellationToken
pub fn cancel(&self) -> CancellationToken
Get the cancellation token for this agent.
Call token.cancel() to initiate graceful shutdown.
Sourcepub fn snmp_invalid_msgs(&self) -> u32
pub fn snmp_invalid_msgs(&self) -> u32
Get the snmpInvalidMsgs counter value.
This counter tracks messages with invalid msgFlags, such as privacy-without-authentication (RFC 3412 Section 7.2 Step 5d).
OID: 1.3.6.1.6.3.11.2.1.2
Sourcepub fn snmp_unknown_security_models(&self) -> u32
pub fn snmp_unknown_security_models(&self) -> u32
Get the snmpUnknownSecurityModels counter value.
This counter tracks messages with unrecognized security models (RFC 3412 Section 7.2 Step 2).
OID: 1.3.6.1.6.3.11.2.1.1
Sourcepub fn snmp_silent_drops(&self) -> u32
pub fn snmp_silent_drops(&self) -> u32
Get the snmpSilentDrops counter value.
This counter tracks confirmed-class PDUs (GetRequest, GetNextRequest, GetBulkRequest, SetRequest, InformRequest) that were silently dropped because even an empty Response-PDU would exceed the maximum message size constraint (RFC 3412 Section 7.1).
OID: 1.3.6.1.6.3.11.2.1.3
Sourcepub fn usm_unknown_engine_ids(&self) -> u32
pub fn usm_unknown_engine_ids(&self) -> u32
Get the usmStatsUnknownEngineIDs counter value.
This counter tracks messages with unknown engine IDs. Incremented when a non-discovery request arrives with an engine ID that does not match the local engine (RFC 3414 Section 3.2 Step 3).
OID: 1.3.6.1.6.3.15.1.1.4
Sourcepub fn usm_unknown_usernames(&self) -> u32
pub fn usm_unknown_usernames(&self) -> u32
Get the usmStatsUnknownUserNames counter value.
This counter tracks messages with unknown user names. Incremented when a message arrives with a user name not in the local user database (RFC 3414 Section 3.2 Step 1).
OID: 1.3.6.1.6.3.15.1.1.3
Sourcepub fn usm_wrong_digests(&self) -> u32
pub fn usm_wrong_digests(&self) -> u32
Get the usmStatsWrongDigests counter value.
This counter tracks messages with incorrect authentication digests. (RFC 3414 Section 3.2 Step 7).
OID: 1.3.6.1.6.3.15.1.1.5
Sourcepub fn usm_not_in_time_windows(&self) -> u32
pub fn usm_not_in_time_windows(&self) -> u32
Get the usmStatsNotInTimeWindows counter value.
This counter tracks messages that fall outside the time window. Incremented when the message time differs from the local time by more than 150 seconds (RFC 3414 Section 3.2 Step 8).
OID: 1.3.6.1.6.3.15.1.1.2
Sourcepub fn usm_unsupported_sec_levels(&self) -> u32
pub fn usm_unsupported_sec_levels(&self) -> u32
Get the usmStatsUnsupportedSecLevels counter value.
This counter tracks messages where the user does not support the requested security level (e.g., auth required but user has no auth key configured). RFC 3414 Section 3.2.
OID: 1.3.6.1.6.3.15.1.1.1
Sourcepub fn usm_decryption_errors(&self) -> u32
pub fn usm_decryption_errors(&self) -> u32
Get the usmStatsDecryptionErrors counter value.
This counter tracks messages where decryption failed (the user has a privacy key but the decrypt operation returned an error). RFC 3414 Section 3.2.
OID: 1.3.6.1.6.3.15.1.1.6
Sourcepub fn uptime_hundredths(&self) -> u32
pub fn uptime_hundredths(&self) -> u32
Returns agent uptime in hundredths of a second (centiseconds).
Use this in your system MIB handler to provide sysUpTime.0
(1.3.6.1.2.1.1.3.0) as a Value::TimeTicks value.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Agent
impl !RefUnwindSafe for Agent
impl Send for Agent
impl Sync for Agent
impl Unpin for Agent
impl UnsafeUnpin for Agent
impl !UnwindSafe for Agent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more