config(qemu): support DHCP start/end for vmnet configs

Resolves #5301
This commit is contained in:
osy 2023-05-29 15:45:51 -07:00
parent 3c2906a313
commit 3a9c8b493b
3 changed files with 14 additions and 2 deletions

View File

@ -703,7 +703,7 @@ import Foundation
let firstAddrStr = String(cString: inet_ntoa(firstAddr))
let lastAddrStr = String(cString: inet_ntoa(lastAddr))
let netmaskStr = String(cString: inet_ntoa(netmask))
return (firstAddrStr, lastAddrStr, netmaskStr)
return (network.vlanDhcpStartAddress ?? firstAddrStr, network.vlanDhcpEndAddress ?? lastAddrStr, netmaskStr)
}
@QEMUArgumentBuilder private var networkArguments: [QEMUArgument] {

View File

@ -51,6 +51,9 @@ struct UTMQemuConfigurationNetwork: Codable, Identifiable {
/// DHCP start address for emulated VLAN.
var vlanDhcpStartAddress: String?
/// DHCP end address for Apple VLAN
var vlanDhcpEndAddress: String?
/// DHCP domain for emulated VLAN.
var vlanDhcpDomain: String?
@ -91,6 +94,7 @@ struct UTMQemuConfigurationNetwork: Codable, Identifiable {
case vlanHostAddress = "VlanHostAddress"
case vlanHostAddressIPv6 = "VlanHostAddressIPv6"
case vlanDhcpStartAddress = "VlanDhcpStartAddress"
case vlanDhcpEndAddress = "VlanDhcpEndAddress"
case vlanDhcpDomain = "VlanDhcpDomain"
case vlanDnsServerAddress = "VlanDnsServerAddress"
case vlanDnsServerAddressIPv6 = "VlanDnsServerAddressIPv6"
@ -113,6 +117,7 @@ struct UTMQemuConfigurationNetwork: Codable, Identifiable {
vlanHostAddress = try values.decodeIfPresent(String.self, forKey: .vlanHostAddress)
vlanHostAddressIPv6 = try values.decodeIfPresent(String.self, forKey: .vlanHostAddressIPv6)
vlanDhcpStartAddress = try values.decodeIfPresent(String.self, forKey: .vlanDhcpStartAddress)
vlanDhcpEndAddress = try values.decodeIfPresent(String.self, forKey: .vlanDhcpEndAddress)
vlanDhcpDomain = try values.decodeIfPresent(String.self, forKey: .vlanDhcpDomain)
vlanDnsServerAddress = try values.decodeIfPresent(String.self, forKey: .vlanDnsServerAddress)
vlanDnsServerAddressIPv6 = try values.decodeIfPresent(String.self, forKey: .vlanDnsServerAddressIPv6)
@ -134,6 +139,7 @@ struct UTMQemuConfigurationNetwork: Codable, Identifiable {
try container.encodeIfPresent(vlanHostAddress, forKey: .vlanHostAddress)
try container.encodeIfPresent(vlanHostAddressIPv6, forKey: .vlanHostAddressIPv6)
try container.encodeIfPresent(vlanDhcpStartAddress, forKey: .vlanDhcpStartAddress)
try container.encodeIfPresent(vlanDhcpEndAddress, forKey: .vlanDhcpEndAddress)
try container.encodeIfPresent(vlanDhcpDomain, forKey: .vlanDhcpDomain)
try container.encodeIfPresent(vlanDnsServerAddress, forKey: .vlanDnsServerAddress)
try container.encodeIfPresent(vlanDnsServerAddressIPv6, forKey: .vlanDnsServerAddressIPv6)

View File

@ -47,8 +47,14 @@ struct IPConfigurationSection: View {
.keyboardType(.decimalPad)
DefaultTextField("Host Address (IPv6)", text: $config.vlanHostAddressIPv6.bound, prompt: "fec0::2")
.keyboardType(.asciiCapable)
DefaultTextField("DHCP Start", text: $config.vlanDhcpStartAddress.bound, prompt: "10.0.2.15")
}
DefaultTextField("DHCP Start", text: $config.vlanDhcpStartAddress.bound, prompt: "10.0.2.15")
.keyboardType(.decimalPad)
if config.mode != .emulated {
DefaultTextField("DHCP End", text: $config.vlanDhcpEndAddress.bound, prompt: "10.0.2.254")
.keyboardType(.decimalPad)
}
if config.mode == .emulated {
DefaultTextField("DHCP Domain Name", text: $config.vlanDhcpDomain.bound)
.keyboardType(.asciiCapable)
DefaultTextField("DNS Server", text: $config.vlanDnsServerAddress.bound, prompt: "10.0.2.3")