mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
util: Allow port allocator to skip bind() check
Test suites using the port allocator don't want to have different behaviour depending on whether a port is in use on the host. Add a VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK which test suites can use to skip the bind() test. The port allocator will thus only track ports in use by the test suite process itself. This is fine when using the port allocator to generate guest configs which won't actually be launched Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Signed-off-by: Jim Fehlig <jfehlig@suse.com>
This commit is contained in:
parent
37d8c75fad
commit
973173e6bf
@ -301,14 +301,15 @@ libxlStateInitialize(bool privileged,
|
||||
if (!(libxl_driver->reservedVNCPorts =
|
||||
virPortAllocatorNew(_("VNC"),
|
||||
LIBXL_VNC_PORT_MIN,
|
||||
LIBXL_VNC_PORT_MAX)))
|
||||
LIBXL_VNC_PORT_MAX,
|
||||
0)))
|
||||
goto error;
|
||||
|
||||
/* Allocate bitmap for migration port reservation */
|
||||
if (!(libxl_driver->migrationPorts =
|
||||
virPortAllocatorNew(_("migration"),
|
||||
LIBXL_MIGRATION_PORT_MIN,
|
||||
LIBXL_MIGRATION_PORT_MAX)))
|
||||
LIBXL_MIGRATION_PORT_MAX, 0)))
|
||||
goto error;
|
||||
|
||||
if (!(libxl_driver->domains = virDomainObjListNew()))
|
||||
|
@ -731,19 +731,22 @@ qemuStateInitialize(bool privileged,
|
||||
if ((qemu_driver->remotePorts =
|
||||
virPortAllocatorNew(_("display"),
|
||||
cfg->remotePortMin,
|
||||
cfg->remotePortMax)) == NULL)
|
||||
cfg->remotePortMax,
|
||||
0)) == NULL)
|
||||
goto error;
|
||||
|
||||
if ((qemu_driver->webSocketPorts =
|
||||
virPortAllocatorNew(_("webSocket"),
|
||||
cfg->webSocketPortMin,
|
||||
cfg->webSocketPortMax)) == NULL)
|
||||
cfg->webSocketPortMax,
|
||||
0)) == NULL)
|
||||
goto error;
|
||||
|
||||
if ((qemu_driver->migrationPorts =
|
||||
virPortAllocatorNew(_("migration"),
|
||||
cfg->migrationPortMin,
|
||||
cfg->migrationPortMax)) == NULL)
|
||||
cfg->migrationPortMax,
|
||||
0)) == NULL)
|
||||
goto error;
|
||||
|
||||
if (qemuSecurityInit(qemu_driver) < 0)
|
||||
|
@ -43,6 +43,8 @@ struct _virPortAllocator {
|
||||
|
||||
unsigned short start;
|
||||
unsigned short end;
|
||||
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
static virClassPtr virPortAllocatorClass;
|
||||
@ -71,7 +73,8 @@ VIR_ONCE_GLOBAL_INIT(virPortAllocator)
|
||||
|
||||
virPortAllocatorPtr virPortAllocatorNew(const char *name,
|
||||
unsigned short start,
|
||||
unsigned short end)
|
||||
unsigned short end,
|
||||
unsigned int flags)
|
||||
{
|
||||
virPortAllocatorPtr pa;
|
||||
|
||||
@ -87,6 +90,7 @@ virPortAllocatorPtr virPortAllocatorNew(const char *name,
|
||||
if (!(pa = virObjectLockableNew(virPortAllocatorClass)))
|
||||
return NULL;
|
||||
|
||||
pa->flags = flags;
|
||||
pa->start = start;
|
||||
pa->end = end;
|
||||
|
||||
@ -190,9 +194,11 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa,
|
||||
if (used)
|
||||
continue;
|
||||
|
||||
if (virPortAllocatorBindToPort(&v6used, i, AF_INET6) < 0 ||
|
||||
virPortAllocatorBindToPort(&used, i, AF_INET) < 0)
|
||||
goto cleanup;
|
||||
if (!(pa->flags & VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)) {
|
||||
if (virPortAllocatorBindToPort(&v6used, i, AF_INET6) < 0 ||
|
||||
virPortAllocatorBindToPort(&used, i, AF_INET) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!used && !v6used) {
|
||||
/* Add port to bitmap of reserved ports */
|
||||
|
@ -28,9 +28,14 @@
|
||||
typedef struct _virPortAllocator virPortAllocator;
|
||||
typedef virPortAllocator *virPortAllocatorPtr;
|
||||
|
||||
typedef enum {
|
||||
VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK = (1 << 0),
|
||||
} virPortAllocatorFlags;
|
||||
|
||||
virPortAllocatorPtr virPortAllocatorNew(const char *name,
|
||||
unsigned short start,
|
||||
unsigned short end);
|
||||
unsigned short end,
|
||||
unsigned int flags);
|
||||
|
||||
int virPortAllocatorAcquire(virPortAllocatorPtr pa,
|
||||
unsigned short *port);
|
||||
|
@ -122,7 +122,7 @@ VIR_LOG_INIT("tests.portallocatortest");
|
||||
|
||||
static int testAllocAll(const void *args ATTRIBUTE_UNUSED)
|
||||
{
|
||||
virPortAllocatorPtr alloc = virPortAllocatorNew("test", 5900, 5909);
|
||||
virPortAllocatorPtr alloc = virPortAllocatorNew("test", 5900, 5909, 0);
|
||||
int ret = -1;
|
||||
unsigned short p1, p2, p3, p4, p5, p6, p7;
|
||||
|
||||
@ -193,7 +193,7 @@ static int testAllocAll(const void *args ATTRIBUTE_UNUSED)
|
||||
|
||||
static int testAllocReuse(const void *args ATTRIBUTE_UNUSED)
|
||||
{
|
||||
virPortAllocatorPtr alloc = virPortAllocatorNew("test", 5900, 5910);
|
||||
virPortAllocatorPtr alloc = virPortAllocatorNew("test", 5900, 5910, 0);
|
||||
int ret = -1;
|
||||
unsigned short p1, p2, p3, p4;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user