From 2c18efd90238a7ed8dd92792023d2e19b8aed8a8 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 23 Apr 2020 07:07:14 +0200 Subject: [PATCH] src/config/network.rs: use a single mtu setting (instead of mtu_v4 and mtu_v6) --- src/api2/config/network.rs | 26 ++++++++------------------ src/api2/types.rs | 11 ++++------- src/config/network.rs | 24 +++++++++++++----------- src/config/network/parser.rs | 9 ++++----- 4 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/api2/config/network.rs b/src/api2/config/network.rs index ecd6f9c6..9251e212 100644 --- a/src/api2/config/network.rs +++ b/src/api2/config/network.rs @@ -90,10 +90,8 @@ pub enum DeletableProperty { method_v4, /// Delete the whole IPv6 configuration entry. method_v6, - /// Delete mtu for IPv4. - mtu_v4, - /// Delete mtu IPv6. - mtu_v6, + /// Delete mtu. + mtu, /// Delete auto flag auto, } @@ -126,17 +124,12 @@ pub enum DeletableProperty { schema: IP_SCHEMA, optional: true, }, - mtu_v4: { - description: "Maximum Transmission Unit for IPv4.", - optional: true, - minimum: 46, - maximum: 65535, - }, - mtu_v6: { - description: "Maximum Transmission Unit for IPv6.", + mtu: { + description: "Maximum Transmission Unit.", optional: true, minimum: 46, maximum: 65535, + default: 1500, }, delete: { description: "List of properties to delete.", @@ -164,8 +157,7 @@ pub fn update_interface( method_v6: Option, address: Option, gateway: Option, - mtu_v4: Option, - mtu_v6: Option, + mtu: Option, delete: Option>, digest: Option, ) -> Result<(), Error> { @@ -190,8 +182,7 @@ pub fn update_interface( DeletableProperty::gateway_v6 => { interface.gateway_v6 = None; }, DeletableProperty::method_v4 => { interface.method_v4 = None; }, DeletableProperty::method_v6 => { interface.method_v6 = None; }, - DeletableProperty::mtu_v4 => { interface.mtu_v4 = None; }, - DeletableProperty::mtu_v6 => { interface.mtu_v6 = None; }, + DeletableProperty::mtu => { interface.mtu = None; }, DeletableProperty::auto => { interface.auto = false; }, } } @@ -200,8 +191,7 @@ pub fn update_interface( if let Some(auto) = auto { interface.auto = auto; } if method_v4.is_some() { interface.method_v4 = method_v4; } if method_v6.is_some() { interface.method_v6 = method_v6; } - if mtu_v4.is_some() { interface.mtu_v4 = mtu_v4; } - if mtu_v6.is_some() { interface.mtu_v6 = mtu_v6; } + if mtu.is_some() { interface.mtu = mtu; } if let Some(address) = address { let (_, _, is_v6) = network::parse_cidr(&address)?; diff --git a/src/api2/types.rs b/src/api2/types.rs index 6e94f59f..fb8c01c7 100644 --- a/src/api2/types.rs +++ b/src/api2/types.rs @@ -586,17 +586,14 @@ pub struct Interface { /// IPv6 gateway pub gateway_v6: Option, - #[serde(skip_serializing_if="Option::is_none")] - /// Maximum Transmission Unit for IPv4 - pub mtu_v4: Option, - #[serde(skip_serializing_if="Option::is_none")] - /// Maximum Transmission Unit for IPv6 - pub mtu_v6: Option, - #[serde(skip_serializing_if="Vec::is_empty")] pub options_v4: Vec, #[serde(skip_serializing_if="Vec::is_empty")] pub options_v6: Vec, + + #[serde(skip_serializing_if="Option::is_none")] + /// Maximum Transmission Unit + pub mtu: Option, } // Regression tests diff --git a/src/config/network.rs b/src/config/network.rs index 05dfe43c..100f67fd 100644 --- a/src/config/network.rs +++ b/src/config/network.rs @@ -30,10 +30,9 @@ impl Interface { gateway_v4: None, cidr_v6: None, gateway_v6: None, - mtu_v4: None, - mtu_v6: None, options_v4: Vec::new(), options_v6: Vec::new(), + mtu: None, } } @@ -99,6 +98,15 @@ impl Interface { } } + /// Write attributes not dependening on address family + fn write_iface_attributes(&self, w: &mut dyn Write) -> Result<(), Error> { + if let Some(mtu) = self.mtu { + writeln!(w, " mtu {}", mtu)?; + } + Ok(()) + } + + /// Write attributes dependening on address family inet (IPv4) fn write_iface_attributes_v4(&self, w: &mut dyn Write, method: NetworkConfigMethod) -> Result<(), Error> { if method == NetworkConfigMethod::Static { if let Some(address) = &self.cidr_v4 { @@ -109,10 +117,6 @@ impl Interface { } } - if let Some(mtu) = &self.mtu_v4 { - writeln!(w, " mtu {}", mtu)?; - } - for option in &self.options_v4 { writeln!(w, " {}", option)?; } @@ -120,6 +124,7 @@ impl Interface { Ok(()) } + /// Write attributes dependening on address family inet6 (IPv6) fn write_iface_attributes_v6(&self, w: &mut dyn Write, method: NetworkConfigMethod) -> Result<(), Error> { if method == NetworkConfigMethod::Static { if let Some(address) = &self.cidr_v6 { @@ -130,10 +135,6 @@ impl Interface { } } - if let Some(mtu) = &self.mtu_v6 { - writeln!(w, " mtu {}", mtu)?; - } - for option in &self.options_v6 { writeln!(w, " {}", option)?; } @@ -159,13 +160,13 @@ impl Interface { } if self.method_v4 == self.method_v6 - && self.mtu_v4 == self.mtu_v6 && self.options_v4.is_empty() == self.options_v6.is_empty() { if let Some(method) = self.method_v4 { writeln!(w, "iface {} {}", self.name, method_to_str(method))?; self.write_iface_attributes_v4(w, method)?; self.write_iface_attributes_v6(w, method)?; + self.write_iface_attributes(w)?; writeln!(w)?; } } else { @@ -179,6 +180,7 @@ impl Interface { self.write_iface_attributes_v6(w, method)?; writeln!(w)?; } + self.write_iface_attributes(w)?; } Ok(()) } diff --git a/src/config/network/parser.rs b/src/config/network/parser.rs index e0dc248f..5389e143 100644 --- a/src/config/network/parser.rs +++ b/src/config/network/parser.rs @@ -156,7 +156,7 @@ impl NetworkParser { Ok(()) } - fn parse_iface_attributes(&mut self, interface: &mut Interface, family_v4: bool, family_v6: bool) -> Result<(), Error> { + fn parse_iface_attributes(&mut self, interface: &mut Interface) -> Result<(), Error> { loop { match self.peek()? { @@ -170,8 +170,7 @@ impl NetworkParser { Token::Gateway => self.parse_iface_gateway(interface)?, Token::MTU => { let mtu = self.parse_iface_mtu()?; - if family_v4 { interface.mtu_v4 = Some(mtu); } - if family_v6 { interface.mtu_v6 = Some(mtu); } + interface.mtu = Some(mtu); } Token::Netmask => bail!("netmask is deprecated and no longer supported"), _ => { @@ -221,7 +220,7 @@ impl NetworkParser { interface.set_method_v6(config_method)?; } - if has_attributes { self.parse_iface_attributes(&mut interface, address_family_v4, address_family_v6)?; } + if has_attributes { self.parse_iface_attributes(&mut interface)?; } } else { let mut interface = Interface::new(iface.clone()); if address_family_v4 { @@ -231,7 +230,7 @@ impl NetworkParser { interface.set_method_v6(config_method)?; } - if has_attributes { self.parse_iface_attributes(&mut interface, address_family_v4, address_family_v6)?; } + if has_attributes { self.parse_iface_attributes(&mut interface)?; } config.interfaces.insert(interface.name.clone(), interface);