mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-28 03:08:14 +00:00
Support to activate/deactive network connection state replication in Qemu.
This commit is contained in:
parent
a796f1e42e
commit
58a19af9ac
@ -117,6 +117,7 @@ class QemuVM(BaseNode):
|
|||||||
self._kernel_image = ""
|
self._kernel_image = ""
|
||||||
self._kernel_command_line = ""
|
self._kernel_command_line = ""
|
||||||
self._legacy_networking = False
|
self._legacy_networking = False
|
||||||
|
self._replicate_network_connection_state = True
|
||||||
self._on_close = "power_off"
|
self._on_close = "power_off"
|
||||||
self._cpu_throttling = 0 # means no CPU throttling
|
self._cpu_throttling = 0 # means no CPU throttling
|
||||||
self._process_priority = "low"
|
self._process_priority = "low"
|
||||||
@ -615,6 +616,30 @@ class QemuVM(BaseNode):
|
|||||||
log.info('QEMU VM "{name}" [{id}] has disabled legacy networking'.format(name=self._name, id=self._id))
|
log.info('QEMU VM "{name}" [{id}] has disabled legacy networking'.format(name=self._name, id=self._id))
|
||||||
self._legacy_networking = legacy_networking
|
self._legacy_networking = legacy_networking
|
||||||
|
|
||||||
|
@property
|
||||||
|
def replicate_network_connection_state(self):
|
||||||
|
"""
|
||||||
|
Returns whether the network connection state for links is replicated in QEMU.
|
||||||
|
|
||||||
|
:returns: boolean
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._replicate_network_connection_state
|
||||||
|
|
||||||
|
@replicate_network_connection_state.setter
|
||||||
|
def replicate_network_connection_state(self, replicate_network_connection_state):
|
||||||
|
"""
|
||||||
|
Sets whether the network connection state for links is replicated in QEMU
|
||||||
|
|
||||||
|
:param replicate_network_connection_state: boolean
|
||||||
|
"""
|
||||||
|
|
||||||
|
if replicate_network_connection_state:
|
||||||
|
log.info('QEMU VM "{name}" [{id}] has enabled network connection state replication'.format(name=self._name, id=self._id))
|
||||||
|
else:
|
||||||
|
log.info('QEMU VM "{name}" [{id}] has disabled network connection state replication'.format(name=self._name, id=self._id))
|
||||||
|
self._replicate_network_connection_state = replicate_network_connection_state
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
"""
|
"""
|
||||||
@ -1004,12 +1029,12 @@ class QemuVM(BaseNode):
|
|||||||
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
||||||
self._local_udp_tunnels[adapter_number][1],
|
self._local_udp_tunnels[adapter_number][1],
|
||||||
nio)
|
nio)
|
||||||
if nio.suspend:
|
if nio.suspend and self._replicate_network_connection_state:
|
||||||
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
|
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
|
||||||
else:
|
elif self._replicate_network_connection_state:
|
||||||
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
|
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
|
||||||
|
|
||||||
if "-loadvm" not in command_string:
|
if "-loadvm" not in command_string and self._replicate_network_connection_state:
|
||||||
# only set the link statuses if not restoring a previous VM state
|
# only set the link statuses if not restoring a previous VM state
|
||||||
await self._control_vm_commands(set_link_commands)
|
await self._control_vm_commands(set_link_commands)
|
||||||
|
|
||||||
@ -1293,7 +1318,8 @@ class QemuVM(BaseNode):
|
|||||||
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
||||||
self._local_udp_tunnels[adapter_number][1],
|
self._local_udp_tunnels[adapter_number][1],
|
||||||
nio)
|
nio)
|
||||||
await self._control_vm("set_link gns3-{} on".format(adapter_number))
|
if self._replicate_network_connection_state:
|
||||||
|
await self._control_vm("set_link gns3-{} on".format(adapter_number))
|
||||||
except (IndexError, KeyError):
|
except (IndexError, KeyError):
|
||||||
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
|
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
@ -1317,10 +1343,11 @@ class QemuVM(BaseNode):
|
|||||||
await self.update_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
await self.update_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
|
||||||
self._local_udp_tunnels[adapter_number][1],
|
self._local_udp_tunnels[adapter_number][1],
|
||||||
nio)
|
nio)
|
||||||
if nio.suspend:
|
if self._replicate_network_connection_state:
|
||||||
await self._control_vm("set_link gns3-{} off".format(adapter_number))
|
if nio.suspend:
|
||||||
else:
|
await self._control_vm("set_link gns3-{} off".format(adapter_number))
|
||||||
await self._control_vm("set_link gns3-{} on".format(adapter_number))
|
else:
|
||||||
|
await self._control_vm("set_link gns3-{} on".format(adapter_number))
|
||||||
except IndexError:
|
except IndexError:
|
||||||
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
|
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
@ -1342,7 +1369,8 @@ class QemuVM(BaseNode):
|
|||||||
|
|
||||||
await self.stop_capture(adapter_number)
|
await self.stop_capture(adapter_number)
|
||||||
if self.is_running():
|
if self.is_running():
|
||||||
await self._control_vm("set_link gns3-{} off".format(adapter_number))
|
if self._replicate_network_connection_state:
|
||||||
|
await self._control_vm("set_link gns3-{} off".format(adapter_number))
|
||||||
await self._ubridge_send("bridge delete {name}".format(name="QEMU-{}-{}".format(self._id, adapter_number)))
|
await self._ubridge_send("bridge delete {name}".format(name="QEMU-{}-{}".format(self._id, adapter_number)))
|
||||||
|
|
||||||
nio = adapter.get_nio(0)
|
nio = adapter.get_nio(0)
|
||||||
|
@ -186,6 +186,10 @@ QEMU_CREATE_SCHEMA = {
|
|||||||
"description": "Use QEMU legagy networking commands (-net syntax)",
|
"description": "Use QEMU legagy networking commands (-net syntax)",
|
||||||
"type": ["boolean", "null"],
|
"type": ["boolean", "null"],
|
||||||
},
|
},
|
||||||
|
"replicate_network_connection_state": {
|
||||||
|
"description": "Replicate the network connection state for links in Qemu",
|
||||||
|
"type": ["boolean", "null"],
|
||||||
|
},
|
||||||
"on_close": {
|
"on_close": {
|
||||||
"description": "Action to execute on the VM is closed",
|
"description": "Action to execute on the VM is closed",
|
||||||
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
||||||
@ -372,6 +376,10 @@ QEMU_UPDATE_SCHEMA = {
|
|||||||
"description": "Use QEMU legagy networking commands (-net syntax)",
|
"description": "Use QEMU legagy networking commands (-net syntax)",
|
||||||
"type": ["boolean", "null"],
|
"type": ["boolean", "null"],
|
||||||
},
|
},
|
||||||
|
"replicate_network_connection_state": {
|
||||||
|
"description": "Replicate the network connection state for links in Qemu",
|
||||||
|
"type": ["boolean", "null"],
|
||||||
|
},
|
||||||
"on_close": {
|
"on_close": {
|
||||||
"description": "Action to execute on the VM is closed",
|
"description": "Action to execute on the VM is closed",
|
||||||
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
||||||
@ -571,6 +579,10 @@ QEMU_OBJECT_SCHEMA = {
|
|||||||
"description": "Use QEMU legagy networking commands (-net syntax)",
|
"description": "Use QEMU legagy networking commands (-net syntax)",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
},
|
},
|
||||||
|
"replicate_network_connection_state": {
|
||||||
|
"description": "Replicate the network connection state for links in Qemu",
|
||||||
|
"type": "boolean",
|
||||||
|
},
|
||||||
"on_close": {
|
"on_close": {
|
||||||
"description": "Action to execute on the VM is closed",
|
"description": "Action to execute on the VM is closed",
|
||||||
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
||||||
@ -640,6 +652,7 @@ QEMU_OBJECT_SCHEMA = {
|
|||||||
"kernel_image_md5sum",
|
"kernel_image_md5sum",
|
||||||
"kernel_command_line",
|
"kernel_command_line",
|
||||||
"legacy_networking",
|
"legacy_networking",
|
||||||
|
"replicate_network_connection_state",
|
||||||
"on_close",
|
"on_close",
|
||||||
"cpu_throttling",
|
"cpu_throttling",
|
||||||
"process_priority",
|
"process_priority",
|
||||||
|
@ -178,6 +178,11 @@ QEMU_TEMPLATE_PROPERTIES = {
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": False
|
"default": False
|
||||||
},
|
},
|
||||||
|
"replicate_network_connection_state": {
|
||||||
|
"description": "Replicate the network connection state for links in Qemu",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": True
|
||||||
|
},
|
||||||
"on_close": {
|
"on_close": {
|
||||||
"description": "Action to execute on the VM is closed",
|
"description": "Action to execute on the VM is closed",
|
||||||
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
"enum": ["power_off", "shutdown_signal", "save_vm_state"],
|
||||||
|
Loading…
Reference in New Issue
Block a user