1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-12-26 08:48:11 +00:00

Improved error message when the number of network adapters is above the maximum for VirtualBox VMs.

Better support for potential future chipsets in addition of PIIX3 and ICH9.
This commit is contained in:
grossmj 2017-10-22 15:23:43 +07:00
parent 6a87047c18
commit b4307e6035

View File

@ -665,9 +665,27 @@ class VirtualBoxVM(BaseNode):
""" """
# check for the maximum adapters supported by the VM # check for the maximum adapters supported by the VM
self._maximum_adapters = yield from self._get_maximum_supported_adapters() vm_info = yield from self._get_vm_info()
chipset = "piix3" # default chipset for VirtualBox VMs
self._maximum_adapters = 8 # default maximum network adapter count for PIIX3 chipset
if "chipset" in vm_info:
chipset = vm_info["chipset"]
max_adapter_string = "Maximum {} Network Adapter count".format(chipset.upper())
if max_adapter_string in self._system_properties:
try:
self._maximum_adapters = int(self._system_properties[max_adapter_string])
except ValueError:
log.error("Could not convert system property to integer: {} = {}".format(max_adapter_string, self._system_properties[max_adapter_string]))
else:
log.warning("Could not find system property '{}' for chipset {}".format(max_adapter_string, chipset))
log.info("VirtualBox VM '{name}' [{id}] can have a maximum of {max} network adapters for chipset {chipset}".format(name=self.name,
id=self.id,
max=self._maximum_adapters,
chipset=chipset.upper()))
if adapters > self._maximum_adapters: if adapters > self._maximum_adapters:
raise VirtualBoxError("Number of adapters above the maximum supported of {}".format(self._maximum_adapters)) raise VirtualBoxError("The configured {} chipset limits the VM to {} network adapters. The chipset can be changed outside GNS3 in the VirtualBox VM settings.".format(chipset.upper(),
self._maximum_adapters))
self._ethernet_adapters.clear() self._ethernet_adapters.clear()
for adapter_number in range(0, adapters): for adapter_number in range(0, adapters):
@ -743,23 +761,6 @@ class VirtualBoxVM(BaseNode):
vm_info[name.strip('"')] = value.strip('"') vm_info[name.strip('"')] = value.strip('"')
return vm_info return vm_info
@asyncio.coroutine
def _get_maximum_supported_adapters(self):
"""
Returns the maximum adapters supported by this VM.
:returns: maximum number of supported adapters (int)
"""
# check the maximum number of adapters supported by the VM
vm_info = yield from self._get_vm_info()
maximum_adapters = 8
if "chipset" in vm_info:
chipset = vm_info["chipset"]
if chipset == "ich9":
maximum_adapters = int(self._system_properties["Maximum ICH9 Network Adapter count"])
return maximum_adapters
def _get_pipe_name(self): def _get_pipe_name(self):
""" """
Returns the pipe name to create a serial connection. Returns the pipe name to create a serial connection.