mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-25 16:28:11 +00:00
Fix "Can't use VirtualBox VM when an interface is managed by VirtualBox". Fixes #2335.
This commit is contained in:
parent
9afe756462
commit
b14e2e73ed
@ -846,10 +846,8 @@ class VirtualBoxVM(BaseNode):
|
|||||||
nio = self._local_udp_tunnels[adapter_number][0]
|
nio = self._local_udp_tunnels[adapter_number][0]
|
||||||
|
|
||||||
if nio:
|
if nio:
|
||||||
if not self._use_any_adapter and attachment not in ("none", "null", "generic"):
|
if not self._use_any_adapter and attachment in ("nat", "bridged", "intnet", "hostonly", "natnetwork"):
|
||||||
raise VirtualBoxError("Attachment ({}) already configured on adapter {}. "
|
continue
|
||||||
"Please set it to 'Not attached' to allow GNS3 to use it.".format(attachment,
|
|
||||||
adapter_number + 1))
|
|
||||||
|
|
||||||
yield from self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
yield from self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
||||||
vbox_adapter_type = "82540EM"
|
vbox_adapter_type = "82540EM"
|
||||||
@ -972,23 +970,40 @@ class VirtualBoxVM(BaseNode):
|
|||||||
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
|
|
||||||
|
# check if trying to connect to a nat, bridged, host-only or any other special adapter
|
||||||
|
nic_attachments = yield from self._get_nic_attachements(self._maximum_adapters)
|
||||||
|
attachment = nic_attachments[adapter_number]
|
||||||
|
if attachment in ("nat", "bridged", "intnet", "hostonly", "natnetwork"):
|
||||||
|
if not self._use_any_adapter:
|
||||||
|
raise VirtualBoxError("Attachment '{attachment}' is already configured on adapter {adapter_number}. "
|
||||||
|
"Please remove it or allow VirtualBox VM '{name}' to use any adapter.".format(attachment=attachment,
|
||||||
|
adapter_number=adapter_number,
|
||||||
|
name=self.name))
|
||||||
|
elif self.is_running():
|
||||||
|
# dynamically configure an UDP tunnel attachment if the VM is already running
|
||||||
|
local_nio = self._local_udp_tunnels[adapter_number][0]
|
||||||
|
if local_nio and isinstance(local_nio, NIOUDP):
|
||||||
|
yield from self._control_vm("nic{} generic UDPTunnel".format(adapter_number + 1))
|
||||||
|
yield from self._control_vm("nicproperty{} sport={}".format(adapter_number + 1, local_nio.lport))
|
||||||
|
yield from self._control_vm("nicproperty{} dest={}".format(adapter_number + 1, local_nio.rhost))
|
||||||
|
yield from self._control_vm("nicproperty{} dport={}".format(adapter_number + 1, local_nio.rport))
|
||||||
|
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
||||||
|
|
||||||
if self.is_running():
|
if self.is_running():
|
||||||
try:
|
try:
|
||||||
yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number),
|
yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number),
|
||||||
self._local_udp_tunnels[adapter_number][1],
|
self._local_udp_tunnels[adapter_number][1],
|
||||||
nio)
|
nio)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(
|
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
||||||
name=self.name,
|
adapter_number=adapter_number))
|
||||||
adapter_number=adapter_number))
|
|
||||||
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
||||||
|
|
||||||
adapter.add_nio(0, nio)
|
adapter.add_nio(0, nio)
|
||||||
log.info("VirtualBox VM '{name}' [{id}]: {nio} added to adapter {adapter_number}".format(
|
log.info("VirtualBox VM '{name}' [{id}]: {nio} added to adapter {adapter_number}".format(name=self.name,
|
||||||
name=self.name,
|
id=self.id,
|
||||||
id=self.id,
|
nio=nio,
|
||||||
nio=nio,
|
adapter_number=adapter_number))
|
||||||
adapter_number=adapter_number))
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def adapter_update_nio_binding(self, adapter_number, nio):
|
def adapter_update_nio_binding(self, adapter_number, nio):
|
||||||
|
Loading…
Reference in New Issue
Block a user