src/config/network.rs: implement is_physical_nic() helper

This commit is contained in:
Dietmar Maurer 2020-05-24 17:27:33 +02:00
parent 58edd33d2b
commit 0ed9a2b3ae
2 changed files with 11 additions and 4 deletions

View File

@ -19,6 +19,14 @@ pub use parser::*;
use crate::api2::types::{Interface, NetworkConfigMethod, NetworkInterfaceType, LinuxBondMode}; use crate::api2::types::{Interface, NetworkConfigMethod, NetworkInterfaceType, LinuxBondMode};
lazy_static!{
static ref PHYSICAL_NIC_REGEX: Regex = Regex::new(r"^(?:eth\d+|en[^:.]+|ib\d+)$").unwrap();
}
pub fn is_physical_nic(iface: &str) -> bool {
PHYSICAL_NIC_REGEX.is_match(iface)
}
pub fn bond_mode_from_str(s: &str) -> Result<LinuxBondMode, Error> { pub fn bond_mode_from_str(s: &str) -> Result<LinuxBondMode, Error> {
LinuxBondMode::deserialize(s.into_deserializer()) LinuxBondMode::deserialize(s.into_deserializer())
.map_err(|_: value::Error| format_err!("invalid bond_mode '{}'", s)) .map_err(|_: value::Error| format_err!("invalid bond_mode '{}'", s))

View File

@ -366,7 +366,6 @@ impl <R: BufRead> NetworkParser<R> {
} }
lazy_static!{ lazy_static!{
static ref PHYSICAL_NIC_REGEX: Regex = Regex::new(r"^(?:eth\d+|en[^:.]+|ib\d+)$").unwrap();
static ref INTERFACE_ALIAS_REGEX: Regex = Regex::new(r"^\S+:\d+$").unwrap(); static ref INTERFACE_ALIAS_REGEX: Regex = Regex::new(r"^\S+:\d+$").unwrap();
static ref VLAN_INTERFACE_REGEX: Regex = Regex::new(r"^\S+\.\d+$").unwrap(); static ref VLAN_INTERFACE_REGEX: Regex = Regex::new(r"^\S+\.\d+$").unwrap();
} }
@ -375,10 +374,10 @@ impl <R: BufRead> NetworkParser<R> {
for (iface, active) in existing_interfaces.iter() { for (iface, active) in existing_interfaces.iter() {
if let Some(interface) = config.interfaces.get_mut(iface) { if let Some(interface) = config.interfaces.get_mut(iface) {
interface.active = *active; interface.active = *active;
if interface.interface_type == NetworkInterfaceType::Unknown && PHYSICAL_NIC_REGEX.is_match(iface) { if interface.interface_type == NetworkInterfaceType::Unknown && super::is_physical_nic(iface) {
interface.interface_type = NetworkInterfaceType::Eth; interface.interface_type = NetworkInterfaceType::Eth;
} }
} else if PHYSICAL_NIC_REGEX.is_match(iface) { // also add all physical NICs } else if super::is_physical_nic(iface) { // also add all physical NICs
let mut interface = Interface::new(iface.clone()); let mut interface = Interface::new(iface.clone());
interface.set_method_v4(NetworkConfigMethod::Manual)?; interface.set_method_v4(NetworkConfigMethod::Manual)?;
interface.interface_type = NetworkInterfaceType::Eth; interface.interface_type = NetworkInterfaceType::Eth;
@ -403,7 +402,7 @@ impl <R: BufRead> NetworkParser<R> {
interface.interface_type = NetworkInterfaceType::Vlan; interface.interface_type = NetworkInterfaceType::Vlan;
continue; continue;
} }
if PHYSICAL_NIC_REGEX.is_match(name) { if super::is_physical_nic(name) {
interface.interface_type = NetworkInterfaceType::Eth; interface.interface_type = NetworkInterfaceType::Eth;
continue; continue;
} }