use crate::error::Error;
use crate::platform;
use crate::platform::ffi;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct Counters {
pub received_packets: u64,
pub transmitted_packets: u64,
pub received_bytes: Option<u64>,
pub transmitted_bytes: Option<u64>,
pub received_drops: Option<u64>,
pub transmitted_drops: Option<u64>,
pub received_errors: Option<u64>,
pub transmitted_errors: Option<u64>,
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct ProcNetSnmp {
pub tcp: Counters,
pub udp: Counters,
pub icmp: Counters,
pub ip: Counters,
pub udp6: Option<Counters>,
pub icmp6: Option<Counters>,
pub ip6: Option<Counters>,
}
impl ProcNetSnmp {
pub fn new(snmp: &str, netstat: Option<&str>, snmp6: Option<&str>) -> Result<Self, Error> {
platform::outcome(
ffi::cz_proc_net_snmp_new(snmp, netstat.map(str::to_string), snmp6.map(str::to_string)),
"parse network protocol counters",
)
.map(|outcome| outcome.proc_net_snmp())
}
pub fn read(pid: Option<i32>) -> Result<Self, Error> {
platform::outcome(ffi::cz_proc_net_snmp_read(pid), "read network protocol counters")
.map(|outcome| outcome.proc_net_snmp())
}
}