mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
Rename console methods in port manager to use the generic tcp term in the name.
Fixes bug when a console port is allocated to a Ghost VM instance and not released. Warnings at exit when TCP/UDP ports are still allocated.
This commit is contained in:
1 parent
182d2e465e
commit
3d3300e83a
13 files changed
+66
-39
No files matched your search
@@ -47,9 +47,9 @@ class BaseVM:
|
||||
self._console = console
|
||||
|
||||
if self._console is not None:
|
||||
self._console = self._manager.port_manager.reserve_console_port(self._console)
|
||||
self._console = self._manager.port_manager.reserve_tcp_port(self._console)
|
||||
else:
|
||||
self._console = self._manager.port_manager.get_free_console_port()
|
||||
self._console = self._manager.port_manager.get_free_tcp_port()
|
||||
|
||||
log.debug("{module}: {name} [{id}] initialized. Console port {console}".format(
|
||||
module=self.manager.module_name,
|
||||
@@ -188,8 +188,8 @@ class BaseVM:
|
||||
if console == self._console:
|
||||
return
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._console = self._manager.port_manager.reserve_console_port(console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = self._manager.port_manager.reserve_tcp_port(console)
|
||||
log.info("{module}: '{name}' [{id}]: console port set to {port}".format(
|
||||
module=self.manager.module_name,
|
||||
name=self.name,
|
||||
|
||||
@@ -106,11 +106,15 @@ class Router(BaseVM):
|
||||
self._dynamips_ids[project.id].append(self._dynamips_id)
|
||||
|
||||
if self._aux is not None:
|
||||
self._aux = self._manager.port_manager.reserve_console_port(self._aux)
|
||||
self._aux = self._manager.port_manager.reserve_tcp_port(self._aux)
|
||||
else:
|
||||
self._aux = self._manager.port_manager.get_free_console_port()
|
||||
self._aux = self._manager.port_manager.get_free_tcp_port()
|
||||
else:
|
||||
log.info("Creating a new ghost IOS instance")
|
||||
if self._console:
|
||||
# Ghost VMs do not need a console port.
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
self._dynamips_id = 0
|
||||
self._name = "Ghost"
|
||||
|
||||
@@ -320,11 +324,11 @@ class Router(BaseVM):
|
||||
yield from self.hypervisor.stop()
|
||||
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
|
||||
if self._aux:
|
||||
self._manager.port_manager.release_console_port(self._aux)
|
||||
self._manager.port_manager.release_tcp_port(self._aux)
|
||||
self._aux = None
|
||||
|
||||
self._closed = True
|
||||
@@ -873,8 +877,8 @@ class Router(BaseVM):
|
||||
old_console=self._console,
|
||||
new_console=console))
|
||||
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._console = self._manager.port_manager.reserve_console_port(console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = self._manager.port_manager.reserve_tcp_port(console)
|
||||
|
||||
@property
|
||||
def aux(self):
|
||||
@@ -901,8 +905,8 @@ class Router(BaseVM):
|
||||
old_aux=self._aux,
|
||||
new_aux=aux))
|
||||
|
||||
self._manager.port_manager.release_console_port(self._aux)
|
||||
self._aux = self._manager.port_manager.reserve_console_port(aux)
|
||||
self._manager.port_manager.release_tcp_port(self._aux)
|
||||
self._aux = self._manager.port_manager.reserve_tcp_port(aux)
|
||||
|
||||
@asyncio.coroutine
|
||||
def get_cpu_usage(self, cpu_id=0):
|
||||
|
||||
@@ -106,7 +106,7 @@ class IOUVM(BaseVM):
|
||||
|
||||
yield from self.stop()
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
|
||||
@property
|
||||
|
||||
@@ -116,6 +116,16 @@ class PortManager:
|
||||
assert isinstance(new_range, tuple)
|
||||
self._udp_port_range = new_range
|
||||
|
||||
@property
|
||||
def tcp_ports(self):
|
||||
|
||||
return self._used_tcp_ports
|
||||
|
||||
@property
|
||||
def udp_ports(self):
|
||||
|
||||
return self._used_udp_ports
|
||||
|
||||
@staticmethod
|
||||
def find_unused_port(start_port, end_port, host="127.0.0.1", socket_type="TCP", ignore_ports=[]):
|
||||
"""
|
||||
@@ -163,9 +173,9 @@ class PortManager:
|
||||
host,
|
||||
last_exception))
|
||||
|
||||
def get_free_console_port(self):
|
||||
def get_free_tcp_port(self):
|
||||
"""
|
||||
Get an available TCP console port and reserve it
|
||||
Get an available TCP port and reserve it
|
||||
"""
|
||||
|
||||
port = self.find_unused_port(self._console_port_range[0],
|
||||
@@ -175,11 +185,12 @@ class PortManager:
|
||||
ignore_ports=self._used_tcp_ports)
|
||||
|
||||
self._used_tcp_ports.add(port)
|
||||
log.debug("TCP port {} has been allocated".format(port))
|
||||
return port
|
||||
|
||||
def reserve_console_port(self, port):
|
||||
def reserve_tcp_port(self, port):
|
||||
"""
|
||||
Reserve a specific TCP console port number
|
||||
Reserve a specific TCP port number
|
||||
|
||||
:param port: TCP port number
|
||||
"""
|
||||
@@ -187,17 +198,19 @@ class PortManager:
|
||||
if port in self._used_tcp_ports:
|
||||
raise HTTPConflict(text="TCP port {} already in use on host".format(port, self._console_host))
|
||||
self._used_tcp_ports.add(port)
|
||||
log.debug("TCP port {} has been reserved".format(port))
|
||||
return port
|
||||
|
||||
def release_console_port(self, port):
|
||||
def release_tcp_port(self, port):
|
||||
"""
|
||||
Release a specific TCP console port number
|
||||
Release a specific TCP port number
|
||||
|
||||
:param port: TCP port number
|
||||
"""
|
||||
|
||||
if port in self._used_tcp_ports:
|
||||
self._used_tcp_ports.remove(port)
|
||||
log.debug("TCP port {} has been released".format(port))
|
||||
|
||||
def get_free_udp_port(self):
|
||||
"""
|
||||
@@ -211,6 +224,7 @@ class PortManager:
|
||||
ignore_ports=self._used_udp_ports)
|
||||
|
||||
self._used_udp_ports.add(port)
|
||||
log.debug("UDP port {} has been allocated".format(port))
|
||||
return port
|
||||
|
||||
def reserve_udp_port(self, port):
|
||||
@@ -223,6 +237,7 @@ class PortManager:
|
||||
if port in self._used_udp_ports:
|
||||
raise HTTPConflict(text="UDP port {} already in use on host".format(port, self._console_host))
|
||||
self._used_udp_ports.add(port)
|
||||
log.debug("UDP port {} has been reserved".format(port))
|
||||
|
||||
def release_udp_port(self, port):
|
||||
"""
|
||||
@@ -233,3 +248,4 @@ class PortManager:
|
||||
|
||||
if port in self._used_udp_ports:
|
||||
self._used_udp_ports.remove(port)
|
||||
log.debug("UDP port {} has been released".format(port))
|
||||
@@ -97,9 +97,9 @@ class QemuVM(BaseVM):
|
||||
self._process_priority = "low"
|
||||
|
||||
if self._monitor is not None:
|
||||
self._monitor = self._manager.port_manager.reserve_console_port(self._monitor)
|
||||
self._monitor = self._manager.port_manager.reserve_tcp_port(self._monitor)
|
||||
else:
|
||||
self._monitor = self._manager.port_manager.get_free_console_port()
|
||||
self._monitor = self._manager.port_manager.get_free_tcp_port()
|
||||
|
||||
self.adapters = 1 # creates 1 adapter by default
|
||||
log.info("QEMU VM {name} [id={id}] has been created".format(name=self._name,
|
||||
@@ -649,10 +649,10 @@ class QemuVM(BaseVM):
|
||||
|
||||
yield from self.stop()
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
if self._monitor:
|
||||
self._manager.port_manager.release_console_port(self._monitor)
|
||||
self._manager.port_manager.release_tcp_port(self._monitor)
|
||||
self._monitor = None
|
||||
|
||||
@asyncio.coroutine
|
||||
|
||||
@@ -299,7 +299,7 @@ class VirtualBoxVM(BaseVM):
|
||||
yield from self.stop()
|
||||
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
|
||||
if self._linked_clone:
|
||||
|
||||
@@ -72,7 +72,7 @@ class VPCSVM(BaseVM):
|
||||
|
||||
self._terminate_process()
|
||||
if self._console:
|
||||
self._manager.port_manager.release_console_port(self._console)
|
||||
self._manager.port_manager.release_tcp_port(self._console)
|
||||
self._console = None
|
||||
|
||||
@asyncio.coroutine
|
||||
|
||||
@@ -72,6 +72,13 @@ class Server:
|
||||
log.debug("Unloading module {}".format(module.__name__))
|
||||
m = module.instance()
|
||||
yield from m.unload()
|
||||
|
||||
if self._port_manager.tcp_ports:
|
||||
log.warning("TCP ports are still used {}".format(self._port_manager.tcp_ports))
|
||||
|
||||
if self._port_manager.udp_ports:
|
||||
log.warning("UDP ports are still used {}".format(self._port_manager.udp_ports))
|
||||
|
||||
self._loop.stop()
|
||||
|
||||
def _signal_handling(self, handler):
|
||||
|
||||
Reference in new issue
Block a user