diff --git a/vmm/src/api/openapi/cloud-hypervisor.yaml b/vmm/src/api/openapi/cloud-hypervisor.yaml index 3e1e57775..7c03b3691 100644 --- a/vmm/src/api/openapi/cloud-hypervisor.yaml +++ b/vmm/src/api/openapi/cloud-hypervisor.yaml @@ -279,18 +279,17 @@ components: default: false NetConfig: - required: - - ip - - mask - - mac type: object properties: tap: type: string + default: "" ip: type: string + default: "192.168.249.1" mask: type: string + default: "255.255.255.0" mac: type: string iommu: diff --git a/vmm/src/config.rs b/vmm/src/config.rs index 0ed5d90f4..a3e75226e 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -302,14 +302,34 @@ impl DiskConfig { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct NetConfig { + #[serde(default = "default_netconfig_tap")] pub tap: Option, + #[serde(default = "default_netconfig_ip")] pub ip: Ipv4Addr, + #[serde(default = "default_netconfig_mask")] pub mask: Ipv4Addr, + #[serde(default = "default_netconfig_mac")] pub mac: MacAddr, #[serde(default)] pub iommu: bool, } +fn default_netconfig_tap() -> Option { + None +} + +fn default_netconfig_ip() -> Ipv4Addr { + Ipv4Addr::new(192, 168, 249, 1) +} + +fn default_netconfig_mask() -> Ipv4Addr { + Ipv4Addr::new(255, 255, 255, 0) +} + +fn default_netconfig_mac() -> MacAddr { + MacAddr::local_random() +} + impl NetConfig { pub fn parse(net: &str) -> Result { // Split the parameters based on the comma delimiter @@ -335,10 +355,10 @@ impl NetConfig { } } - let mut tap: Option = None; - let mut ip: Ipv4Addr = Ipv4Addr::new(192, 168, 249, 1); - let mut mask: Ipv4Addr = Ipv4Addr::new(255, 255, 255, 0); - let mut mac: MacAddr = MacAddr::local_random(); + let mut tap: Option = default_netconfig_tap(); + let mut ip: Ipv4Addr = default_netconfig_ip(); + let mut mask: Ipv4Addr = default_netconfig_mask(); + let mut mac: MacAddr = default_netconfig_mac(); let iommu = parse_on_off(iommu_str)?; if !tap_str.is_empty() {