Can attach defined networks to domains
This commit is contained in:
		@@ -63,11 +63,20 @@ pub struct FeaturesXML {
 | 
			
		||||
#[serde(rename = "acpi")]
 | 
			
		||||
pub struct ACPIXML {}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize)]
 | 
			
		||||
#[serde(rename = "source")]
 | 
			
		||||
pub struct NetIntSourceXML {
 | 
			
		||||
    #[serde(rename(serialize = "@network"))]
 | 
			
		||||
    pub network: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize)]
 | 
			
		||||
#[serde(rename = "interface")]
 | 
			
		||||
pub struct DomainNetInterfaceXML {
 | 
			
		||||
    #[serde(rename(serialize = "@type"))]
 | 
			
		||||
    pub r#type: String,
 | 
			
		||||
 | 
			
		||||
    pub source: Option<NetIntSourceXML>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Devices information
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ use crate::constants;
 | 
			
		||||
use crate::libvirt_lib_structures::{
 | 
			
		||||
    DevicesXML, DiskBootXML, DiskDriverXML, DiskReadOnlyXML, DiskSourceXML, DiskTargetXML, DiskXML,
 | 
			
		||||
    DomainCPUTopology, DomainCPUXML, DomainMemoryXML, DomainNetInterfaceXML, DomainVCPUXML,
 | 
			
		||||
    DomainXML, FeaturesXML, GraphicsXML, NetworkDHCPRangeXML, NetworkDHCPXML,
 | 
			
		||||
    DomainXML, FeaturesXML, GraphicsXML, NetIntSourceXML, NetworkDHCPRangeXML, NetworkDHCPXML,
 | 
			
		||||
    NetworkDNSForwarderXML, NetworkDNSXML, NetworkDomainXML, NetworkForwardXML, NetworkIPXML,
 | 
			
		||||
    NetworkXML, OSLoaderXML, OSTypeXML, XMLUuid, ACPIXML, OSXML,
 | 
			
		||||
};
 | 
			
		||||
@@ -68,7 +68,7 @@ pub enum VMArchitecture {
 | 
			
		||||
#[serde(tag = "type")]
 | 
			
		||||
pub enum Network {
 | 
			
		||||
    UserspaceSLIRPStack,
 | 
			
		||||
    // TODO : complete network types
 | 
			
		||||
    DefinedNetwork { network: String }, // TODO : complete network types
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize)]
 | 
			
		||||
@@ -226,6 +226,11 @@ impl VMInfo {
 | 
			
		||||
            networks.push(match n {
 | 
			
		||||
                Network::UserspaceSLIRPStack => DomainNetInterfaceXML {
 | 
			
		||||
                    r#type: "user".to_string(),
 | 
			
		||||
                    source: None,
 | 
			
		||||
                },
 | 
			
		||||
                Network::DefinedNetwork { network } => DomainNetInterfaceXML {
 | 
			
		||||
                    r#type: "network".to_string(),
 | 
			
		||||
                    source: Some(NetIntSourceXML { network }),
 | 
			
		||||
                },
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
@@ -344,6 +349,9 @@ impl VMInfo {
 | 
			
		||||
                .iter()
 | 
			
		||||
                .map(|d| match d.r#type.as_str() {
 | 
			
		||||
                    "user" => Ok(Network::UserspaceSLIRPStack),
 | 
			
		||||
                    "network" => Ok(Network::DefinedNetwork {
 | 
			
		||||
                        network: d.source.as_ref().unwrap().network.to_string(),
 | 
			
		||||
                    }),
 | 
			
		||||
                    a => Err(LibVirtStructError::DomainExtraction(format!(
 | 
			
		||||
                        "Unknown network interface type: {a}! "
 | 
			
		||||
                    ))),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user