Can change network interface type
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -29,6 +29,12 @@ pub enum VMArchitecture {
|
|||||||
X86_64,
|
X86_64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Serialize, serde::Deserialize)]
|
||||||
|
pub enum NetworkInterfaceModelType {
|
||||||
|
Virtio,
|
||||||
|
E1000,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(serde::Serialize, serde::Deserialize)]
|
#[derive(serde::Serialize, serde::Deserialize)]
|
||||||
pub struct NWFilterParam {
|
pub struct NWFilterParam {
|
||||||
name: String,
|
name: String,
|
||||||
@@ -46,6 +52,7 @@ pub struct Network {
|
|||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
r#type: NetworkType,
|
r#type: NetworkType,
|
||||||
mac: String,
|
mac: String,
|
||||||
|
model: NetworkInterfaceModelType,
|
||||||
nwfilterref: Option<NWFilterRef>,
|
nwfilterref: Option<NWFilterRef>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +203,11 @@ impl VMInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let model = Some(NetIntModelXML {
|
let model = Some(NetIntModelXML {
|
||||||
r#type: "virtio".to_string(),
|
r#type: match n.model {
|
||||||
|
NetworkInterfaceModelType::Virtio => "virtio",
|
||||||
|
NetworkInterfaceModelType::E1000 => "e1000",
|
||||||
|
}
|
||||||
|
.to_string(),
|
||||||
});
|
});
|
||||||
|
|
||||||
let filterref = if let Some(n) = &n.nwfilterref {
|
let filterref = if let Some(n) = &n.nwfilterref {
|
||||||
@@ -518,6 +529,18 @@ impl VMInfo {
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
model: match d.model.as_ref() {
|
||||||
|
None => NetworkInterfaceModelType::Virtio,
|
||||||
|
Some(model) => match model.r#type.as_str() {
|
||||||
|
"virtio" => NetworkInterfaceModelType::Virtio,
|
||||||
|
"e1000" => NetworkInterfaceModelType::E1000,
|
||||||
|
model => {
|
||||||
|
return Err(LibVirtStructError::DomainExtraction(format!(
|
||||||
|
"Unknown network interface model type: {model}! "
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
nwfilterref: d.filterref.as_ref().map(|f| NWFilterRef {
|
nwfilterref: d.filterref.as_ref().map(|f| NWFilterRef {
|
||||||
name: f.filter.to_string(),
|
name: f.filter.to_string(),
|
||||||
parameters: f
|
parameters: f
|
||||||
|
@@ -60,6 +60,7 @@ export type VMNetInterface = (
|
|||||||
|
|
||||||
export interface VMNetInterfaceBase {
|
export interface VMNetInterfaceBase {
|
||||||
mac: string;
|
mac: string;
|
||||||
|
model: "Virtio" | "E1000";
|
||||||
nwfilterref?: VMNetInterfaceFilter;
|
nwfilterref?: VMNetInterfaceFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,6 +35,7 @@ export function VMNetworksList(p: {
|
|||||||
const addNew = () => {
|
const addNew = () => {
|
||||||
p.vm.networks.push({
|
p.vm.networks.push({
|
||||||
type: "UserspaceSLIRPStack",
|
type: "UserspaceSLIRPStack",
|
||||||
|
model: "Virtio",
|
||||||
mac: randomMacAddress(ServerApi.Config.net_mac_prefix),
|
mac: randomMacAddress(ServerApi.Config.net_mac_prefix),
|
||||||
});
|
});
|
||||||
p.onChange?.();
|
p.onChange?.();
|
||||||
@@ -146,6 +147,7 @@ function NetworkInfoWidget(p: {
|
|||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<div style={{ marginLeft: "70px" }}>
|
<div style={{ marginLeft: "70px" }}>
|
||||||
|
{/* MAC address input */}
|
||||||
<MACInput
|
<MACInput
|
||||||
editable={p.editable}
|
editable={p.editable}
|
||||||
label="MAC Address"
|
label="MAC Address"
|
||||||
@@ -156,6 +158,26 @@ function NetworkInfoWidget(p: {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* NIC model */}
|
||||||
|
<SelectInput
|
||||||
|
editable={p.editable}
|
||||||
|
label="NIC Model"
|
||||||
|
value={p.network.model}
|
||||||
|
onValueChange={(v) => {
|
||||||
|
p.network.model = v as any;
|
||||||
|
p.onChange?.();
|
||||||
|
}}
|
||||||
|
options={[
|
||||||
|
{ label: "e1000", value: "E1000" },
|
||||||
|
{
|
||||||
|
label: "virtio",
|
||||||
|
value: "Virtio",
|
||||||
|
description:
|
||||||
|
"Recommended model, but will require specific drivers on OS that do not support it.",
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* Defined network selection */}
|
{/* Defined network selection */}
|
||||||
{p.network.type === "DefinedNetwork" && (
|
{p.network.type === "DefinedNetwork" && (
|
||||||
<SelectInput
|
<SelectInput
|
||||||
|
Reference in New Issue
Block a user