diff --git a/rust/agama-lib/src/network/settings.rs b/rust/agama-lib/src/network/settings.rs index dbce91e11c..834b6425f6 100644 --- a/rust/agama-lib/src/network/settings.rs +++ b/rust/agama-lib/src/network/settings.rs @@ -165,50 +165,76 @@ pub struct NetworkDevice { pub state: DeviceState, } +/// Represents the configuration details for a network connection #[derive(Clone, Debug, Default, Serialize, Deserialize, utoipa::ToSchema)] #[serde(rename_all = "camelCase")] pub struct NetworkConnection { + /// Unique identifier for the network connection pub id: String, + /// IPv4 method used for the network connection #[serde(skip_serializing_if = "Option::is_none")] pub method4: Option, + /// Gateway IP address for the IPv4 connection #[serde(skip_serializing_if = "Option::is_none")] pub gateway4: Option, + /// IPv6 method used for the network connection #[serde(skip_serializing_if = "Option::is_none")] pub method6: Option, + /// Gateway IP address for the IPv6 connection #[serde(skip_serializing_if = "Option::is_none")] pub gateway6: Option, + /// List of assigned IP addresses #[serde(skip_serializing_if = "Vec::is_empty", default)] pub addresses: Vec, + /// List of DNS server IP addresses #[serde(skip_serializing_if = "Vec::is_empty", default)] pub nameservers: Vec, + /// List of search domains for DNS resolution #[serde(skip_serializing_if = "Vec::is_empty", default)] pub dns_searchlist: Vec, + /// Specifies whether to ignore automatically assigned DNS settings #[serde(skip_serializing_if = "Option::is_none")] pub ignore_auto_dns: Option, + /// Wireless settings for the connection #[serde(skip_serializing_if = "Option::is_none")] pub wireless: Option, + /// Network interface associated with the connection #[serde(skip_serializing_if = "Option::is_none")] pub interface: Option, + /// Match settings for the network connection #[serde(skip_serializing_if = "Option::is_none")] pub match_settings: Option, + /// Identifier for the parent connection, if this connection is part of a bond #[serde(skip_serializing_if = "Option::is_none")] pub parent: Option, + /// Bonding settings if part of a bond #[serde(skip_serializing_if = "Option::is_none")] pub bond: Option, + /// MAC address of the connection's interface #[serde(rename = "mac-address", skip_serializing_if = "Option::is_none")] pub mac_address: Option, + /// Current status of the network connection #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + /// Maximum Transmission Unit (MTU) for the connection #[serde(skip_serializing_if = "is_zero", default)] pub mtu: u32, + /// IEEE 802.1X settings #[serde(rename = "ieee-8021x", skip_serializing_if = "Option::is_none")] pub ieee_8021x: Option, + /// Specifies if the connection should automatically connect + #[serde(default = "default_true")] + pub autoconnect: bool, } fn is_zero>(u: &T) -> bool { *u == T::from(0) } +fn default_true() -> bool { + true +} + impl NetworkConnection { /// Device type expected for the network connection. /// diff --git a/rust/agama-server/src/network/model.rs b/rust/agama-server/src/network/model.rs index f693b3c7d7..b802d3b9ed 100644 --- a/rust/agama-server/src/network/model.rs +++ b/rust/agama-server/src/network/model.rs @@ -513,6 +513,7 @@ pub struct Connection { pub match_config: MatchConfig, pub config: ConnectionConfig, pub ieee_8021x_config: Option, + pub autoconnect: bool, } impl Connection { @@ -584,6 +585,7 @@ impl Default for Connection { match_config: Default::default(), config: Default::default(), ieee_8021x_config: Default::default(), + autoconnect: true, } } } @@ -634,6 +636,7 @@ impl TryFrom for Connection { connection.ip_config.gateway6 = conn.gateway6; connection.interface = conn.interface; connection.mtu = conn.mtu; + connection.autoconnect = conn.autoconnect; Ok(connection) } @@ -660,6 +663,7 @@ impl TryFrom for NetworkConnection { let ieee_8021x: Option = conn .ieee_8021x_config .and_then(|x| IEEE8021XSettings::try_from(x).ok()); + let autoconnect = conn.autoconnect; let mut connection = NetworkConnection { id, @@ -676,6 +680,7 @@ impl TryFrom for NetworkConnection { addresses, mtu, ieee_8021x, + autoconnect, ..Default::default() }; diff --git a/rust/agama-server/src/network/nm/dbus.rs b/rust/agama-server/src/network/nm/dbus.rs index 3e4ab1bf64..bb4e2ad9d7 100644 --- a/rust/agama-server/src/network/nm/dbus.rs +++ b/rust/agama-server/src/network/nm/dbus.rs @@ -58,6 +58,7 @@ pub fn connection_to_dbus<'a>( let mut connection_dbus = HashMap::from([ ("id", conn.id.as_str().into()), ("type", ETHERNET_KEY.into()), + ("autoconnect", conn.autoconnect.into()), ]); if let Some(interface) = &conn.interface { @@ -652,6 +653,10 @@ fn base_connection_from_dbus(conn: &OwnedNestedHash) -> Result + +- Add autoconnect property for network connections + (gh#agama-project/agama#1715) + ------------------------------------------------------------------- Mon Oct 28 09:24:48 UTC 2024 - Imobach Gonzalez Sosa