#![allow(dead_code)]
use super::proto::DiscoveryProtocol;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum LldpMode {
Listen,
Advertise,
Discover,
}
impl Default for LldpMode {
fn default() -> Self {
LldpMode::Listen
}
}
#[derive(Clone, Debug)]
pub struct LldpOptions {
pub iface: Option<String>,
pub ifaces: Vec<String>,
pub mode: LldpMode,
pub protocols: Vec<DiscoveryProtocol>,
pub ttl: u16,
pub count: Option<usize>,
pub hostname: Option<String>,
pub port_id: Option<String>,
pub stub: bool,
pub verbose: bool,
pub snaplen: u32,
pub promisc: bool,
pub capture_timeout_ms: u32,
pub channel_capacity: usize,
pub tx_interval_ms: Option<u64>,
}
impl Default for LldpOptions {
fn default() -> Self {
Self {
iface: None,
ifaces: Vec::new(),
mode: LldpMode::Listen,
protocols: Vec::new(),
ttl: 120,
count: None,
hostname: None,
port_id: None,
stub: true,
verbose: false,
snaplen: 1518,
promisc: true,
capture_timeout_ms: 100,
channel_capacity: 1024,
tx_interval_ms: None,
}
}
}
impl LldpOptions {
pub fn normalized(mut self) -> Self {
if let Some(ref name) = self.iface {
if !self.ifaces.iter().any(|n| n == name) {
self.ifaces.push(name.clone());
}
}
if self.ifaces.is_empty() {
if let Some(ref name) = self.iface {
self.ifaces.push(name.clone());
} else {
}
}
if self.protocols.is_empty() {
self.protocols.push(DiscoveryProtocol::LLDP);
}
self
}
pub fn should_listen(&self) -> bool {
matches!(self.mode, LldpMode::Listen | LldpMode::Discover)
}
pub fn should_advertise(&self) -> bool {
matches!(self.mode, LldpMode::Advertise | LldpMode::Discover)
}
pub fn effective_ifaces(&self) -> Vec<String> {
let mut out = self.ifaces.clone();
if let Some(ref n) = self.iface {
if !out.iter().any(|x| x == n) {
out.push(n.clone());
}
}
out
}
}