From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751833836239.3905882646037; Tue, 19 Dec 2017 22:37:13 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 36793C0546DE; Wed, 20 Dec 2017 06:37:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0683F17AEA; Wed, 20 Dec 2017 06:37:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C1EB441FAE; Wed, 20 Dec 2017 06:37:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6aeDg016342 for ; Wed, 20 Dec 2017 01:36:40 -0500 Received: by smtp.corp.redhat.com (Postfix) id B9A6919177; Wed, 20 Dec 2017 06:36:40 +0000 (UTC) Received: from mx1.redhat.com (ext-mx01.extmail.prod.ext.phx2.redhat.com [10.5.110.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B4C9F18EF0 for ; Wed, 20 Dec 2017 06:36:38 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AF3DB81DE8 for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWf001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:33 +0300 Message-Id: <1513751738-772066-2-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 20 Dec 2017 06:36:36 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 20 Dec 2017 06:36:36 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.25 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/6] port allocator: make used port bitmap global X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 20 Dec 2017 06:37:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Host tcp4/tcp6 ports is a global resource thus we need to make port accounting also global or we have issues described in [1] when port allocator ranges of different instances are overlapped (which is by default for qemu for example). Let's have only one global port allocator object that take care of the entire ports range (0 - 65535) and introduce port range object for clients to specify desired auto allocation band. [1] https://www.redhat.com/archives/libvir-list/2017-December/msg00600.html --- src/bhyve/bhyve_driver.c | 4 +- src/bhyve/bhyve_utils.h | 2 +- src/libvirt_private.syms | 3 +- src/libxl/libxl_conf.c | 8 +-- src/libxl/libxl_conf.h | 8 +-- src/libxl/libxl_driver.c | 18 +++--- src/qemu/qemu_conf.h | 6 +- src/qemu/qemu_driver.c | 30 +++++----- src/util/virportallocator.c | 125 ++++++++++++++++++++++++++++---------= ---- src/util/virportallocator.h | 20 ++++--- tests/bhyvexml2argvtest.c | 6 +- tests/libxlxml2domconfigtest.c | 8 +-- tests/virportallocatortest.c | 48 ++++++++++------ 13 files changed, 175 insertions(+), 111 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index dd6e8ab..43487f5 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1220,7 +1220,7 @@ bhyveStateCleanup(void) virObjectUnref(bhyve_driver->closeCallbacks); virObjectUnref(bhyve_driver->domainEventState); virObjectUnref(bhyve_driver->config); - virObjectUnref(bhyve_driver->remotePorts); + virPortRangeFree(bhyve_driver->remotePorts); =20 virMutexDestroy(&bhyve_driver->lock); VIR_FREE(bhyve_driver); @@ -1267,7 +1267,7 @@ bhyveStateInitialize(bool privileged, if (!(bhyve_driver->domainEventState =3D virObjectEventStateNew())) goto cleanup; =20 - if (!(bhyve_driver->remotePorts =3D virPortAllocatorNew(_("display"), = 5900, 65535, 0))) + if (!(bhyve_driver->remotePorts =3D virPortRangeNew(_("display"), 5900= , 65535, 0))) goto cleanup; =20 bhyve_driver->hostsysinfo =3D virSysinfoRead(); diff --git a/src/bhyve/bhyve_utils.h b/src/bhyve/bhyve_utils.h index 8ad2698..9ab590b 100644 --- a/src/bhyve/bhyve_utils.h +++ b/src/bhyve/bhyve_utils.h @@ -59,7 +59,7 @@ struct _bhyveConn { =20 virCloseCallbacksPtr closeCallbacks; =20 - virPortAllocatorPtr remotePorts; + virPortRangePtr remotePorts; =20 unsigned bhyvecaps; unsigned grubcaps; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index d5c3b9a..c668ded 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2496,9 +2496,10 @@ virPolkitCheckAuth; =20 # util/virportallocator.h virPortAllocatorAcquire; -virPortAllocatorNew; virPortAllocatorRelease; virPortAllocatorSetUsed; +virPortRangeFree; +virPortRangeNew; =20 =20 # util/virprocess.h diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 970cff2..8e606b2 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -1287,7 +1287,7 @@ libxlMakeNicList(virDomainDefPtr def, libxl_domain_c= onfig *d_config) } =20 int -libxlMakeVfb(virPortAllocatorPtr graphicsports, +libxlMakeVfb(virPortRangePtr graphicsports, virDomainGraphicsDefPtr l_vfb, libxl_device_vfb *x_vfb) { @@ -1348,7 +1348,7 @@ libxlMakeVfb(virPortAllocatorPtr graphicsports, } =20 static int -libxlMakeVfbList(virPortAllocatorPtr graphicsports, +libxlMakeVfbList(virPortRangePtr graphicsports, virDomainDefPtr def, libxl_domain_config *d_config) { @@ -1397,7 +1397,7 @@ libxlMakeVfbList(virPortAllocatorPtr graphicsports, * populate libxl_domain_config->vfbs. */ static int -libxlMakeBuildInfoVfb(virPortAllocatorPtr graphicsports, +libxlMakeBuildInfoVfb(virPortRangePtr graphicsports, virDomainDefPtr def, libxl_domain_config *d_config) { @@ -2284,7 +2284,7 @@ libxlDriverNodeGetInfo(libxlDriverPrivatePtr driver, = virNodeInfoPtr info) } =20 int -libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, +libxlBuildDomainConfig(virPortRangePtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, libxl_ctx *ctx, diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index 264df11..3ba8710 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -131,10 +131,10 @@ struct _libxlDriverPrivate { virObjectEventStatePtr domainEventState; =20 /* Immutable pointer, self-locking APIs */ - virPortAllocatorPtr reservedGraphicsPorts; + virPortRangePtr reservedGraphicsPorts; =20 /* Immutable pointer, self-locking APIs */ - virPortAllocatorPtr migrationPorts; + virPortRangePtr migrationPorts; =20 /* Immutable pointer, lockless APIs*/ virSysinfoDefPtr hostsysinfo; @@ -189,7 +189,7 @@ libxlMakeNic(virDomainDefPtr def, libxl_device_nic *x_nic, bool attach); int -libxlMakeVfb(virPortAllocatorPtr graphicsports, +libxlMakeVfb(virPortRangePtr graphicsports, virDomainGraphicsDefPtr l_vfb, libxl_device_vfb *x_vfb); =20 int @@ -213,7 +213,7 @@ libxlCreateXMLConf(void); # define LIBXL_ATTR_UNUSED ATTRIBUTE_UNUSED # endif int -libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, +libxlBuildDomainConfig(virPortRangePtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, libxl_ctx *ctx, diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 79e29ce..5209ea7 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -477,8 +477,8 @@ libxlStateCleanup(void) virObjectUnref(libxl_driver->config); virObjectUnref(libxl_driver->xmlopt); virObjectUnref(libxl_driver->domains); - virObjectUnref(libxl_driver->reservedGraphicsPorts); - virObjectUnref(libxl_driver->migrationPorts); + virPortRangeFree(libxl_driver->reservedGraphicsPorts); + virPortRangeFree(libxl_driver->migrationPorts); virLockManagerPluginUnref(libxl_driver->lockManager); =20 virObjectUnref(libxl_driver->domainEventState); @@ -657,17 +657,17 @@ libxlStateInitialize(bool privileged, =20 /* Allocate bitmap for vnc port reservation */ if (!(libxl_driver->reservedGraphicsPorts =3D - virPortAllocatorNew(_("VNC"), - LIBXL_VNC_PORT_MIN, - LIBXL_VNC_PORT_MAX, - 0))) + virPortRangeNew(_("VNC"), + LIBXL_VNC_PORT_MIN, + LIBXL_VNC_PORT_MAX, + 0))) goto error; =20 /* Allocate bitmap for migration port reservation */ if (!(libxl_driver->migrationPorts =3D - virPortAllocatorNew(_("migration"), - LIBXL_MIGRATION_PORT_MIN, - LIBXL_MIGRATION_PORT_MAX, 0))) + virPortRangeNew(_("migration"), + LIBXL_MIGRATION_PORT_MIN, + LIBXL_MIGRATION_PORT_MAX, 0))) goto error; =20 if (!(libxl_driver->domains =3D virDomainObjListNew())) diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index a553e30..e8c8bd6 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -264,13 +264,13 @@ struct _virQEMUDriver { virHashTablePtr sharedDevices; =20 /* Immutable pointer, self-locking APIs */ - virPortAllocatorPtr remotePorts; + virPortRangePtr remotePorts; =20 /* Immutable pointer, self-locking APIs */ - virPortAllocatorPtr webSocketPorts; + virPortRangePtr webSocketPorts; =20 /* Immutable pointer, self-locking APIs */ - virPortAllocatorPtr migrationPorts; + virPortRangePtr migrationPorts; =20 /* Immutable pointer, lockless APIs*/ virSysinfoDefPtr hostsysinfo; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 97b194b..254ccd1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -746,24 +746,24 @@ qemuStateInitialize(bool privileged, * do this before the config is loaded properly, since the port * numbers are configurable now */ if ((qemu_driver->remotePorts =3D - virPortAllocatorNew(_("display"), - cfg->remotePortMin, - cfg->remotePortMax, - 0)) =3D=3D NULL) + virPortRangeNew(_("display"), + cfg->remotePortMin, + cfg->remotePortMax, + 0)) =3D=3D NULL) goto error; =20 if ((qemu_driver->webSocketPorts =3D - virPortAllocatorNew(_("webSocket"), - cfg->webSocketPortMin, - cfg->webSocketPortMax, - 0)) =3D=3D NULL) + virPortRangeNew(_("webSocket"), + cfg->webSocketPortMin, + cfg->webSocketPortMax, + 0)) =3D=3D NULL) goto error; =20 if ((qemu_driver->migrationPorts =3D - virPortAllocatorNew(_("migration"), - cfg->migrationPortMin, - cfg->migrationPortMax, - 0)) =3D=3D NULL) + virPortRangeNew(_("migration"), + cfg->migrationPortMin, + cfg->migrationPortMax, + 0)) =3D=3D NULL) goto error; =20 if (qemuSecurityInit(qemu_driver) < 0) @@ -1106,9 +1106,9 @@ qemuStateCleanup(void) virObjectUnref(qemu_driver->qemuCapsCache); =20 virObjectUnref(qemu_driver->domains); - virObjectUnref(qemu_driver->remotePorts); - virObjectUnref(qemu_driver->webSocketPorts); - virObjectUnref(qemu_driver->migrationPorts); + virPortRangeFree(qemu_driver->remotePorts); + virPortRangeFree(qemu_driver->webSocketPorts); + virPortRangeFree(qemu_driver->migrationPorts); virObjectUnref(qemu_driver->migrationErrors); =20 virObjectUnref(qemu_driver->xmlopt); diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index fcd4f74..cd64356 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -35,10 +35,14 @@ =20 #define VIR_FROM_THIS VIR_FROM_NONE =20 +typedef struct _virPortAllocator virPortAllocator; +typedef virPortAllocator *virPortAllocatorPtr; struct _virPortAllocator { virObjectLockable parent; virBitmapPtr bitmap; +}; =20 +struct _virPortRange { char *name; =20 unsigned short start; @@ -48,6 +52,7 @@ struct _virPortAllocator { }; =20 static virClassPtr virPortAllocatorClass; +static virPortAllocatorPtr virPortAllocatorInstance; =20 static void virPortAllocatorDispose(void *obj) @@ -55,7 +60,22 @@ virPortAllocatorDispose(void *obj) virPortAllocatorPtr pa =3D obj; =20 virBitmapFree(pa->bitmap); - VIR_FREE(pa->name); +} + +static virPortAllocatorPtr virPortAllocatorNew(void) +{ + virPortAllocatorPtr pa; + + if (!(pa =3D virObjectLockableNew(virPortAllocatorClass))) + return NULL; + + if (!(pa->bitmap =3D virBitmapNew(USHRT_MAX))) + goto error; + + return pa; + error: + virObjectUnref(pa); + return NULL; } =20 static int virPortAllocatorOnceInit(void) @@ -66,17 +86,20 @@ static int virPortAllocatorOnceInit(void) virPortAllocatorDispose))) return -1; =20 + if (!(virPortAllocatorInstance =3D virPortAllocatorNew())) + return -1; + return 0; } =20 VIR_ONCE_GLOBAL_INIT(virPortAllocator) =20 -virPortAllocatorPtr virPortAllocatorNew(const char *name, - unsigned short start, - unsigned short end, - unsigned int flags) +virPortRangePtr virPortRangeNew(const char *name, + unsigned short start, + unsigned short end, + unsigned int flags) { - virPortAllocatorPtr pa; + virPortRangePtr range; =20 if (start >=3D end) { virReportInvalidArg(start, "start port %d must be less than end po= rt %d", @@ -84,23 +107,31 @@ virPortAllocatorPtr virPortAllocatorNew(const char *na= me, return NULL; } =20 - if (virPortAllocatorInitialize() < 0) + if (VIR_ALLOC(range) < 0) return NULL; =20 - if (!(pa =3D virObjectLockableNew(virPortAllocatorClass))) - return NULL; + range->flags =3D flags; + range->start =3D start; + range->end =3D end; =20 - pa->flags =3D flags; - pa->start =3D start; - pa->end =3D end; + if (VIR_STRDUP(range->name, name) < 0) + goto error; =20 - if (!(pa->bitmap =3D virBitmapNew((end-start)+1)) || - VIR_STRDUP(pa->name, name) < 0) { - virObjectUnref(pa); - return NULL; - } + return range; + + error: + virPortRangeFree(range); + return NULL; +} + +void +virPortRangeFree(virPortRangePtr range) +{ + if (!range) + return; =20 - return pa; + VIR_FREE(range->name); + VIR_FREE(range); } =20 static int virPortAllocatorBindToPort(bool *used, @@ -172,22 +203,35 @@ static int virPortAllocatorBindToPort(bool *used, return ret; } =20 -int virPortAllocatorAcquire(virPortAllocatorPtr pa, +static virPortAllocatorPtr virPortAllocatorGet(void) +{ + if (virPortAllocatorInitialize() < 0) + return NULL; + + return virPortAllocatorInstance; +} + +int virPortAllocatorAcquire(virPortRangePtr range, unsigned short *port) { int ret =3D -1; size_t i; + virPortAllocatorPtr pa =3D virPortAllocatorGet(); =20 *port =3D 0; + + if (!pa) + return -1; + virObjectLock(pa); =20 - for (i =3D pa->start; i <=3D pa->end && !*port; i++) { + for (i =3D range->start; i <=3D range->end && !*port; i++) { bool used =3D false, v6used =3D false; =20 - if (virBitmapIsBitSet(pa->bitmap, i - pa->start)) + if (virBitmapIsBitSet(pa->bitmap, i)) continue; =20 - if (!(pa->flags & VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)) { + if (!(range->flags & VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)) { if (virPortAllocatorBindToPort(&v6used, i, AF_INET6) < 0 || virPortAllocatorBindToPort(&used, i, AF_INET) < 0) goto cleanup; @@ -195,8 +239,7 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa, =20 if (!used && !v6used) { /* Add port to bitmap of reserved ports */ - if (virBitmapSetBit(pa->bitmap, - i - pa->start) < 0) { + if (virBitmapSetBit(pa->bitmap, i) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to reserve port %zu"), i); goto cleanup; @@ -209,32 +252,35 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa, if (*port =3D=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to find an unused port in range '%s' (%d-= %d)"), - pa->name, pa->start, pa->end); + range->name, range->start, range->end); } cleanup: virObjectUnlock(pa); return ret; } =20 -int virPortAllocatorRelease(virPortAllocatorPtr pa, +int virPortAllocatorRelease(virPortRangePtr range, unsigned short port) { int ret =3D -1; + virPortAllocatorPtr pa =3D virPortAllocatorGet(); + + if (!pa) + return -1; =20 if (!port) return 0; =20 virObjectLock(pa); =20 - if (port < pa->start || - port > pa->end) { + if (port < range->start || + port > range->end) { virReportInvalidArg(port, "port %d must be in range (%d, %d)", - port, pa->start, pa->end); + port, range->start, range->end); goto cleanup; } =20 - if (virBitmapClearBit(pa->bitmap, - port - pa->start) < 0) { + if (virBitmapClearBit(pa->bitmap, port) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to release port %d"), port); @@ -247,30 +293,33 @@ int virPortAllocatorRelease(virPortAllocatorPtr pa, return ret; } =20 -int virPortAllocatorSetUsed(virPortAllocatorPtr pa, +int virPortAllocatorSetUsed(virPortRangePtr range, unsigned short port, bool value) { int ret =3D -1; + virPortAllocatorPtr pa =3D virPortAllocatorGet(); + + if (!pa) + return -1; =20 virObjectLock(pa); =20 - if (port < pa->start || - port > pa->end) { + if (port < range->start || + port > range->end) { ret =3D 0; goto cleanup; } =20 if (value) { - if (virBitmapIsBitSet(pa->bitmap, port - pa->start) || - virBitmapSetBit(pa->bitmap, port - pa->start) < 0) { + if (virBitmapIsBitSet(pa->bitmap, port) || + virBitmapSetBit(pa->bitmap, port) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to reserve port %d"), port); goto cleanup; } } else { - if (virBitmapClearBit(pa->bitmap, - port - pa->start) < 0) { + if (virBitmapClearBit(pa->bitmap, port) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to release port %d"), port); diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index 14c3b24..e9b9038 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -25,25 +25,27 @@ # include "internal.h" # include "virobject.h" =20 -typedef struct _virPortAllocator virPortAllocator; -typedef virPortAllocator *virPortAllocatorPtr; +typedef struct _virPortRange virPortRange; +typedef virPortRange *virPortRangePtr; =20 typedef enum { VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK =3D (1 << 0), } virPortAllocatorFlags; =20 -virPortAllocatorPtr virPortAllocatorNew(const char *name, - unsigned short start, - unsigned short end, - unsigned int flags); +virPortRangePtr virPortRangeNew(const char *name, + unsigned short start, + unsigned short end, + unsigned int flags); =20 -int virPortAllocatorAcquire(virPortAllocatorPtr pa, +void virPortRangeFree(virPortRangePtr range); + +int virPortAllocatorAcquire(virPortRangePtr range, unsigned short *port); =20 -int virPortAllocatorRelease(virPortAllocatorPtr pa, +int virPortAllocatorRelease(virPortRangePtr range, unsigned short port); =20 -int virPortAllocatorSetUsed(virPortAllocatorPtr pa, +int virPortAllocatorSetUsed(virPortRangePtr range, unsigned short port, bool value); =20 diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 8128589..93c8026 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -145,8 +145,8 @@ mymain(void) if ((driver.xmlopt =3D virBhyveDriverCreateXMLConf(&driver)) =3D=3D NU= LL) return EXIT_FAILURE; =20 - if (!(driver.remotePorts =3D virPortAllocatorNew("display", 5900, 6553= 5, - VIR_PORT_ALLOCATOR_SKIP= _BIND_CHECK))) + if (!(driver.remotePorts =3D virPortRangeNew("display", 5900, 65535, + VIR_PORT_ALLOCATOR_SKIP_BIN= D_CHECK))) return EXIT_FAILURE; =20 =20 @@ -240,7 +240,7 @@ mymain(void) =20 virObjectUnref(driver.caps); virObjectUnref(driver.xmlopt); - virObjectUnref(driver.remotePorts); + virPortRangeFree(driver.remotePorts); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index bd4c3af..b3bdcaf 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -58,7 +58,7 @@ testCompareXMLToDomConfig(const char *xmlfile, libxl_domain_config expectconfig; xentoollog_logger *log =3D NULL; libxl_ctx *ctx =3D NULL; - virPortAllocatorPtr gports =3D NULL; + virPortRangePtr gports =3D NULL; virDomainXMLOptionPtr xmlopt =3D NULL; virDomainDefPtr vmdef =3D NULL; char *actualjson =3D NULL; @@ -74,8 +74,8 @@ testCompareXMLToDomConfig(const char *xmlfile, if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, log) < 0) goto cleanup; =20 - if (!(gports =3D virPortAllocatorNew("vnc", 5900, 6000, - VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)= )) + if (!(gports =3D virPortRangeNew("vnc", 5900, 6000, + VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK))) goto cleanup; =20 if (!(xmlopt =3D libxlCreateXMLConf())) @@ -116,7 +116,7 @@ testCompareXMLToDomConfig(const char *xmlfile, VIR_FREE(actualjson); VIR_FREE(tempjson); virDomainDefFree(vmdef); - virObjectUnref(gports); + virPortRangeFree(gports); virObjectUnref(xmlopt); libxl_ctx_free(ctx); libxl_domain_config_dispose(&actualconfig); diff --git a/tests/virportallocatortest.c b/tests/virportallocatortest.c index ed9c4f2..972b579 100644 --- a/tests/virportallocatortest.c +++ b/tests/virportallocatortest.c @@ -42,63 +42,71 @@ VIR_LOG_INIT("tests.portallocatortest"); =20 static int testAllocAll(const void *args ATTRIBUTE_UNUSED) { - virPortAllocatorPtr alloc =3D virPortAllocatorNew("test", 5900, 5909, = 0); + virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5909, 0); int ret =3D -1; unsigned short p1, p2, p3, p4, p5, p6, p7; =20 - if (!alloc) + if (!ports) return -1; =20 - if (virPortAllocatorAcquire(alloc, &p1) < 0) + if (virPortAllocatorAcquire(ports, &p1) < 0) goto cleanup; if (p1 !=3D 5901) { VIR_TEST_DEBUG("Expected 5901, got %d", p1); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p2) < 0) + if (virPortAllocatorAcquire(ports, &p2) < 0) goto cleanup; if (p2 !=3D 5902) { VIR_TEST_DEBUG("Expected 5902, got %d", p2); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p3) < 0) + if (virPortAllocatorAcquire(ports, &p3) < 0) goto cleanup; if (p3 !=3D 5903) { VIR_TEST_DEBUG("Expected 5903, got %d", p3); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p4) < 0) + if (virPortAllocatorAcquire(ports, &p4) < 0) goto cleanup; if (p4 !=3D 5907) { VIR_TEST_DEBUG("Expected 5907, got %d", p4); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p5) < 0) + if (virPortAllocatorAcquire(ports, &p5) < 0) goto cleanup; if (p5 !=3D 5908) { VIR_TEST_DEBUG("Expected 5908, got %d", p5); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p6) < 0) + if (virPortAllocatorAcquire(ports, &p6) < 0) goto cleanup; if (p6 !=3D 5909) { VIR_TEST_DEBUG("Expected 5909, got %d", p6); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p7) =3D=3D 0) { + if (virPortAllocatorAcquire(ports, &p7) =3D=3D 0) { VIR_TEST_DEBUG("Expected error, got %d", p7); goto cleanup; } =20 + virPortAllocatorRelease(ports, p1); + virPortAllocatorRelease(ports, p2); + virPortAllocatorRelease(ports, p3); + virPortAllocatorRelease(ports, p4); + virPortAllocatorRelease(ports, p5); + virPortAllocatorRelease(ports, p6); + virPortAllocatorRelease(ports, p7); + ret =3D 0; cleanup: - virObjectUnref(alloc); + virPortRangeFree(ports); return ret; } =20 @@ -106,28 +114,28 @@ static int testAllocAll(const void *args ATTRIBUTE_UN= USED) =20 static int testAllocReuse(const void *args ATTRIBUTE_UNUSED) { - virPortAllocatorPtr alloc =3D virPortAllocatorNew("test", 5900, 5910, = 0); + virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5910, 0); int ret =3D -1; unsigned short p1, p2, p3, p4; =20 - if (!alloc) + if (!ports) return -1; =20 - if (virPortAllocatorAcquire(alloc, &p1) < 0) + if (virPortAllocatorAcquire(ports, &p1) < 0) goto cleanup; if (p1 !=3D 5901) { VIR_TEST_DEBUG("Expected 5901, got %d", p1); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p2) < 0) + if (virPortAllocatorAcquire(ports, &p2) < 0) goto cleanup; if (p2 !=3D 5902) { VIR_TEST_DEBUG("Expected 5902, got %d", p2); goto cleanup; } =20 - if (virPortAllocatorAcquire(alloc, &p3) < 0) + if (virPortAllocatorAcquire(ports, &p3) < 0) goto cleanup; if (p3 !=3D 5903) { VIR_TEST_DEBUG("Expected 5903, got %d", p3); @@ -135,19 +143,23 @@ static int testAllocReuse(const void *args ATTRIBUTE_= UNUSED) } =20 =20 - if (virPortAllocatorRelease(alloc, p2) < 0) + if (virPortAllocatorRelease(ports, p2) < 0) goto cleanup; =20 - if (virPortAllocatorAcquire(alloc, &p4) < 0) + if (virPortAllocatorAcquire(ports, &p4) < 0) goto cleanup; if (p4 !=3D 5902) { VIR_TEST_DEBUG("Expected 5902, got %d", p4); goto cleanup; } =20 + virPortAllocatorRelease(ports, p1); + virPortAllocatorRelease(ports, p3); + virPortAllocatorRelease(ports, p4); + ret =3D 0; cleanup: - virObjectUnref(alloc); + virPortRangeFree(ports); return ret; } =20 --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751835734764.4465408091323; Tue, 19 Dec 2017 22:37:15 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 641384903B; Wed, 20 Dec 2017 06:37:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 36C2960C8E; Wed, 20 Dec 2017 06:37:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 76B3B180474E; Wed, 20 Dec 2017 06:37:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6aeUQ016331 for ; Wed, 20 Dec 2017 01:36:40 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3E22D17AEA; Wed, 20 Dec 2017 06:36:40 +0000 (UTC) Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AD01160C20 for ; Wed, 20 Dec 2017 06:36:37 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C1A5961491 for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWg001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:34 +0300 Message-Id: <1513751738-772066-3-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 20 Dec 2017 06:36:36 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 20 Dec 2017 06:36:36 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/6] port allocator: remove range on manual port reserving X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 20 Dec 2017 06:37:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Range check in virPortAllocatorSetUsed is not useful anymore when we manage ports for entire unsigned short range values. --- src/bhyve/bhyve_command.c | 4 +--- src/bhyve/bhyve_process.c | 4 +--- src/qemu/qemu_process.c | 41 +++++++++++------------------------------ src/util/virportallocator.c | 9 +-------- src/util/virportallocator.h | 4 +--- 5 files changed, 15 insertions(+), 47 deletions(-) diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 55032ae..9d21788 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -411,9 +411,7 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def, return -1; graphics->data.vnc.port =3D port; } else { - if (virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.vnc.port, - true) < 0) + if (virPortAllocatorSetUsed(graphics->data.vnc.port, true)= < 0) VIR_WARN("Failed to mark VNC port '%d' as used by '%s'= ", graphics->data.vnc.port, def->name); } diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 5076246..e215f6a 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -425,9 +425,7 @@ virBhyveProcessReconnect(virDomainObjPtr vm, if (vm->def->ngraphics =3D=3D 1 && vm->def->graphics[0]->type =3D=3D VIR_DOMAIN_GRAPHICS_TYP= E_VNC) { int vnc_port =3D vm->def->graphics[0]->data.vnc.port; - if (virPortAllocatorSetUsed(data->driver->remotePorts, - vnc_port, - true) < 0) { + if (virPortAllocatorSetUsed(vnc_port, true) < 0) { VIR_WARN("Failed to mark VNC port '%d' as used by '%s= '", vnc_port, vm->def->name); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a0f430f..b0f8ea8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4153,8 +4153,7 @@ qemuProcessStartHook(virQEMUDriverPtr driver, =20 =20 static int -qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver, - virDomainGraphicsDefPtr graphics, +qemuProcessGraphicsReservePorts(virDomainGraphicsDefPtr graphics, bool reconnect) { virDomainGraphicsListenDefPtr glisten; @@ -4172,16 +4171,12 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr dr= iver, case VIR_DOMAIN_GRAPHICS_TYPE_VNC: if (!graphics->data.vnc.autoport || reconnect) { - if (virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.vnc.port, - true) < 0) + if (virPortAllocatorSetUsed(graphics->data.vnc.port, true) < 0) return -1; graphics->data.vnc.portReserved =3D true; } if (graphics->data.vnc.websocket > 0 && - virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.vnc.websocket, - true) < 0) + virPortAllocatorSetUsed(graphics->data.vnc.websocket, true) < = 0) return -1; break; =20 @@ -4190,17 +4185,13 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr dr= iver, return 0; =20 if (graphics->data.spice.port > 0) { - if (virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.spice.port, - true) < 0) + if (virPortAllocatorSetUsed(graphics->data.spice.port, true) <= 0) return -1; graphics->data.spice.portReserved =3D true; } =20 if (graphics->data.spice.tlsPort > 0) { - if (virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.spice.tlsPort, - true) < 0) + if (virPortAllocatorSetUsed(graphics->data.spice.tlsPort, true= ) < 0) return -1; graphics->data.spice.tlsPortReserved =3D true; } @@ -4390,7 +4381,7 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver, for (i =3D 0; i < vm->def->ngraphics; i++) { graphics =3D vm->def->graphics[i]; =20 - if (qemuProcessGraphicsReservePorts(driver, graphics, false) <= 0) + if (qemuProcessGraphicsReservePorts(graphics, false) < 0) goto cleanup; } } @@ -6551,9 +6542,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, virPortAllocatorRelease(driver->remotePorts, graphics->data.vnc.port); } else if (graphics->data.vnc.portReserved) { - virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.spice.port, - false); + virPortAllocatorSetUsed(graphics->data.spice.port, false); graphics->data.vnc.portReserved =3D false; } if (graphics->data.vnc.websocketGenerated) { @@ -6562,9 +6551,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, graphics->data.vnc.websocketGenerated =3D false; graphics->data.vnc.websocket =3D -1; } else if (graphics->data.vnc.websocket) { - virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.vnc.websocket, - false); + virPortAllocatorSetUsed(graphics->data.vnc.websocket, fals= e); } } if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { @@ -6575,16 +6562,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, graphics->data.spice.tlsPort); } else { if (graphics->data.spice.portReserved) { - virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.spice.port, - false); + virPortAllocatorSetUsed(graphics->data.spice.port, fal= se); graphics->data.spice.portReserved =3D false; } =20 if (graphics->data.spice.tlsPortReserved) { - virPortAllocatorSetUsed(driver->remotePorts, - graphics->data.spice.tlsPort, - false); + virPortAllocatorSetUsed(graphics->data.spice.tlsPort, = false); graphics->data.spice.tlsPortReserved =3D false; } } @@ -7177,9 +7160,7 @@ qemuProcessReconnect(void *opaque) } =20 for (i =3D 0; i < obj->def->ngraphics; i++) { - if (qemuProcessGraphicsReservePorts(driver, - obj->def->graphics[i], - true) < 0) + if (qemuProcessGraphicsReservePorts(obj->def->graphics[i], true) <= 0) goto error; } =20 diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index cd64356..76346c7 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -293,8 +293,7 @@ int virPortAllocatorRelease(virPortRangePtr range, return ret; } =20 -int virPortAllocatorSetUsed(virPortRangePtr range, - unsigned short port, +int virPortAllocatorSetUsed(unsigned short port, bool value) { int ret =3D -1; @@ -305,12 +304,6 @@ int virPortAllocatorSetUsed(virPortRangePtr range, =20 virObjectLock(pa); =20 - if (port < range->start || - port > range->end) { - ret =3D 0; - goto cleanup; - } - if (value) { if (virBitmapIsBitSet(pa->bitmap, port) || virBitmapSetBit(pa->bitmap, port) < 0) { diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index e9b9038..8511eca 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -45,8 +45,6 @@ int virPortAllocatorAcquire(virPortRangePtr range, int virPortAllocatorRelease(virPortRangePtr range, unsigned short port); =20 -int virPortAllocatorSetUsed(virPortRangePtr range, - unsigned short port, - bool value); +int virPortAllocatorSetUsed(unsigned short port, bool value); =20 #endif /* __VIR_PORT_ALLOCATOR_H__ */ --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751809393666.4963641510632; Tue, 19 Dec 2017 22:36:49 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6339B7EA84; Wed, 20 Dec 2017 06:36:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9B23B19177; Wed, 20 Dec 2017 06:36:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id ECB961808850; Wed, 20 Dec 2017 06:36:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6adTb016314 for ; Wed, 20 Dec 2017 01:36:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id 502FC17DF1; Wed, 20 Dec 2017 06:36:39 +0000 (UTC) Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 48FFE17CCF for ; Wed, 20 Dec 2017 06:36:37 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C13F5356EF for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWh001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:35 +0300 Message-Id: <1513751738-772066-4-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/6] port allocator: remove range check in release function X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 20 Dec 2017 06:36:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Range check in virPortAllocatorSetUsed is not useful anymore when we manage ports for entire unsigned short range values. --- src/bhyve/bhyve_process.c | 3 +-- src/libxl/libxl_domain.c | 3 +-- src/libxl/libxl_migration.c | 4 ++-- src/qemu/qemu_migration.c | 12 ++++++------ src/qemu/qemu_process.c | 14 +++++--------- src/util/virportallocator.c | 10 +--------- src/util/virportallocator.h | 3 +-- tests/virportallocatortest.c | 23 +++++++++++------------ 8 files changed, 28 insertions(+), 44 deletions(-) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index e215f6a..5e682fa 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -296,8 +296,7 @@ virBhyveProcessStop(bhyveConnPtr driver, /* VNC autoport cleanup */ if ((vm->def->ngraphics =3D=3D 1) && vm->def->graphics[0]->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_VNC) { - if (virPortAllocatorRelease(driver->remotePorts, - vm->def->graphics[0]->data.vnc.port) <= 0) { + if (virPortAllocatorRelease(vm->def->graphics[0]->data.vnc.port) <= 0) { VIR_WARN("Failed to release VNC port for '%s'", vm->def->name); } diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 395c8a9..f69d60a 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -778,8 +778,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, vm->def->graphics[0]->data.vnc.autoport) { vnc_port =3D vm->def->graphics[0]->data.vnc.port; if (vnc_port >=3D LIBXL_VNC_PORT_MIN) { - if (virPortAllocatorRelease(driver->reservedGraphicsPorts, - vnc_port) < 0) + if (virPortAllocatorRelease(vnc_port) < 0) VIR_DEBUG("Could not mark port %d as unused", vnc_port); } } diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c index 228c850..9c03488 100644 --- a/src/libxl/libxl_migration.c +++ b/src/libxl/libxl_migration.c @@ -805,7 +805,7 @@ libxlDomainMigrationPrepare(virConnectPtr dconn, } VIR_FREE(socks); virObjectUnref(args); - virPortAllocatorRelease(driver->migrationPorts, priv->migrationPort); + virPortAllocatorRelease(priv->migrationPort); priv->migrationPort =3D 0; =20 /* Remove virDomainObj from domain list */ @@ -1256,7 +1256,7 @@ libxlDomainMigrationFinish(virConnectPtr dconn, virObjectEventPtr event =3D NULL; virDomainPtr dom =3D NULL; =20 - virPortAllocatorRelease(driver->migrationPorts, priv->migrationPort); + virPortAllocatorRelease(priv->migrationPort); priv->migrationPort =3D 0; =20 if (cancelled) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index c1ceb16..a19abd0 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -552,7 +552,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver, cleanup: VIR_FREE(diskAlias); if (ret < 0 && nbdPort =3D=3D 0) - virPortAllocatorRelease(driver->migrationPorts, port); + virPortAllocatorRelease(port); return ret; =20 exit_monitor: @@ -580,7 +580,7 @@ qemuMigrationStopNBDServer(virQEMUDriverPtr driver, if (qemuDomainObjExitMonitor(driver, vm) < 0) return -1; =20 - virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); + virPortAllocatorRelease(priv->nbdPort); priv->nbdPort =3D 0; return 0; } @@ -2227,7 +2227,7 @@ qemuMigrationPrepareCleanup(virQEMUDriverPtr driver, qemuDomainJobTypeToString(priv->job.active), qemuDomainAsyncJobTypeToString(priv->job.asyncJob)); =20 - virPortAllocatorRelease(driver->migrationPorts, priv->migrationPort); + virPortAllocatorRelease(priv->migrationPort); priv->migrationPort =3D 0; =20 if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN)) @@ -2907,7 +2907,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, * it is given in parameters */ if (nbdPort =3D=3D 0) - virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); + virPortAllocatorRelease(priv->nbdPort); priv->nbdPort =3D 0; virDomainObjRemoveTransientDef(vm); qemuDomainRemoveInactiveJob(driver, vm); @@ -3150,7 +3150,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, if (ret !=3D 0) { VIR_FREE(*uri_out); if (autoPort) - virPortAllocatorRelease(driver->migrationPorts, port); + virPortAllocatorRelease(port); } return ret; } @@ -5500,7 +5500,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver, =20 cleanup: VIR_FREE(jobInfo); - virPortAllocatorRelease(driver->migrationPorts, port); + virPortAllocatorRelease(port); if (priv->mon) qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL); VIR_FREE(priv->origname); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index b0f8ea8..0777922 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6384,7 +6384,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, } } =20 - virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); + virPortAllocatorRelease(priv->nbdPort); priv->nbdPort =3D 0; =20 if (priv->agent) { @@ -6539,15 +6539,13 @@ void qemuProcessStop(virQEMUDriverPtr driver, virDomainGraphicsDefPtr graphics =3D vm->def->graphics[i]; if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_VNC) { if (graphics->data.vnc.autoport) { - virPortAllocatorRelease(driver->remotePorts, - graphics->data.vnc.port); + virPortAllocatorRelease(graphics->data.vnc.port); } else if (graphics->data.vnc.portReserved) { virPortAllocatorSetUsed(graphics->data.spice.port, false); graphics->data.vnc.portReserved =3D false; } if (graphics->data.vnc.websocketGenerated) { - virPortAllocatorRelease(driver->webSocketPorts, - graphics->data.vnc.websocket); + virPortAllocatorRelease(graphics->data.vnc.websocket); graphics->data.vnc.websocketGenerated =3D false; graphics->data.vnc.websocket =3D -1; } else if (graphics->data.vnc.websocket) { @@ -6556,10 +6554,8 @@ void qemuProcessStop(virQEMUDriverPtr driver, } if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { if (graphics->data.spice.autoport) { - virPortAllocatorRelease(driver->remotePorts, - graphics->data.spice.port); - virPortAllocatorRelease(driver->remotePorts, - graphics->data.spice.tlsPort); + virPortAllocatorRelease(graphics->data.spice.port); + virPortAllocatorRelease(graphics->data.spice.tlsPort); } else { if (graphics->data.spice.portReserved) { virPortAllocatorSetUsed(graphics->data.spice.port, fal= se); diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index 76346c7..a154806 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -259,8 +259,7 @@ int virPortAllocatorAcquire(virPortRangePtr range, return ret; } =20 -int virPortAllocatorRelease(virPortRangePtr range, - unsigned short port) +int virPortAllocatorRelease(unsigned short port) { int ret =3D -1; virPortAllocatorPtr pa =3D virPortAllocatorGet(); @@ -273,13 +272,6 @@ int virPortAllocatorRelease(virPortRangePtr range, =20 virObjectLock(pa); =20 - if (port < range->start || - port > range->end) { - virReportInvalidArg(port, "port %d must be in range (%d, %d)", - port, range->start, range->end); - goto cleanup; - } - if (virBitmapClearBit(pa->bitmap, port) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to release port %d"), diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index 8511eca..ae00edc 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -42,8 +42,7 @@ void virPortRangeFree(virPortRangePtr range); int virPortAllocatorAcquire(virPortRangePtr range, unsigned short *port); =20 -int virPortAllocatorRelease(virPortRangePtr range, - unsigned short port); +int virPortAllocatorRelease(unsigned short port); =20 int virPortAllocatorSetUsed(unsigned short port, bool value); =20 diff --git a/tests/virportallocatortest.c b/tests/virportallocatortest.c index 972b579..cd792ad 100644 --- a/tests/virportallocatortest.c +++ b/tests/virportallocatortest.c @@ -96,13 +96,13 @@ static int testAllocAll(const void *args ATTRIBUTE_UNUS= ED) goto cleanup; } =20 - virPortAllocatorRelease(ports, p1); - virPortAllocatorRelease(ports, p2); - virPortAllocatorRelease(ports, p3); - virPortAllocatorRelease(ports, p4); - virPortAllocatorRelease(ports, p5); - virPortAllocatorRelease(ports, p6); - virPortAllocatorRelease(ports, p7); + virPortAllocatorRelease(p1); + virPortAllocatorRelease(p2); + virPortAllocatorRelease(p3); + virPortAllocatorRelease(p4); + virPortAllocatorRelease(p5); + virPortAllocatorRelease(p6); + virPortAllocatorRelease(p7); =20 ret =3D 0; cleanup: @@ -142,8 +142,7 @@ static int testAllocReuse(const void *args ATTRIBUTE_UN= USED) goto cleanup; } =20 - - if (virPortAllocatorRelease(ports, p2) < 0) + if (virPortAllocatorRelease(p2) < 0) goto cleanup; =20 if (virPortAllocatorAcquire(ports, &p4) < 0) @@ -153,9 +152,9 @@ static int testAllocReuse(const void *args ATTRIBUTE_UN= USED) goto cleanup; } =20 - virPortAllocatorRelease(ports, p1); - virPortAllocatorRelease(ports, p3); - virPortAllocatorRelease(ports, p4); + virPortAllocatorRelease(p1); + virPortAllocatorRelease(p3); + virPortAllocatorRelease(p4); =20 ret =3D 0; cleanup: --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751809485752.5296840849899; Tue, 19 Dec 2017 22:36:49 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 67D597EA85; Wed, 20 Dec 2017 06:36:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9B9D462660; Wed, 20 Dec 2017 06:36:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 107E81808873; Wed, 20 Dec 2017 06:36:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6adW3016315 for ; Wed, 20 Dec 2017 01:36:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4E59618B17; Wed, 20 Dec 2017 06:36:39 +0000 (UTC) Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 46E4318B16 for ; Wed, 20 Dec 2017 06:36:37 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A3CFE83F43 for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWi001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:36 +0300 Message-Id: <1513751738-772066-5-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/6] port allocator: drop skip flag X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 20 Dec 2017 06:36:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This flag is only used for tests and tests overload socket and bind functions using virportallocatormock.c already in a suitable fashion so we don't need this flag at all. --- src/bhyve/bhyve_driver.c | 2 +- src/libxl/libxl_driver.c | 5 ++--- src/qemu/qemu_driver.c | 9 +++------ src/util/virportallocator.c | 14 ++++---------- src/util/virportallocator.h | 7 +------ tests/bhyvexml2argvtest.c | 3 +-- tests/libxlxml2domconfigtest.c | 3 +-- tests/virportallocatortest.c | 4 ++-- 8 files changed, 15 insertions(+), 32 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 43487f5..19c86e2 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1267,7 +1267,7 @@ bhyveStateInitialize(bool privileged, if (!(bhyve_driver->domainEventState =3D virObjectEventStateNew())) goto cleanup; =20 - if (!(bhyve_driver->remotePorts =3D virPortRangeNew(_("display"), 5900= , 65535, 0))) + if (!(bhyve_driver->remotePorts =3D virPortRangeNew(_("display"), 5900= , 65535))) goto cleanup; =20 bhyve_driver->hostsysinfo =3D virSysinfoRead(); diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 5209ea7..18126e4 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -659,15 +659,14 @@ libxlStateInitialize(bool privileged, if (!(libxl_driver->reservedGraphicsPorts =3D virPortRangeNew(_("VNC"), LIBXL_VNC_PORT_MIN, - LIBXL_VNC_PORT_MAX, - 0))) + LIBXL_VNC_PORT_MAX))) goto error; =20 /* Allocate bitmap for migration port reservation */ if (!(libxl_driver->migrationPorts =3D virPortRangeNew(_("migration"), LIBXL_MIGRATION_PORT_MIN, - LIBXL_MIGRATION_PORT_MAX, 0))) + LIBXL_MIGRATION_PORT_MAX))) goto error; =20 if (!(libxl_driver->domains =3D virDomainObjListNew())) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 254ccd1..edde4e2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -748,22 +748,19 @@ qemuStateInitialize(bool privileged, if ((qemu_driver->remotePorts =3D virPortRangeNew(_("display"), cfg->remotePortMin, - cfg->remotePortMax, - 0)) =3D=3D NULL) + cfg->remotePortMax)) =3D=3D NULL) goto error; =20 if ((qemu_driver->webSocketPorts =3D virPortRangeNew(_("webSocket"), cfg->webSocketPortMin, - cfg->webSocketPortMax, - 0)) =3D=3D NULL) + cfg->webSocketPortMax)) =3D=3D NULL) goto error; =20 if ((qemu_driver->migrationPorts =3D virPortRangeNew(_("migration"), cfg->migrationPortMin, - cfg->migrationPortMax, - 0)) =3D=3D NULL) + cfg->migrationPortMax)) =3D=3D NULL) goto error; =20 if (qemuSecurityInit(qemu_driver) < 0) diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index a154806..76fac49 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -47,8 +47,6 @@ struct _virPortRange { =20 unsigned short start; unsigned short end; - - unsigned int flags; }; =20 static virClassPtr virPortAllocatorClass; @@ -96,8 +94,7 @@ VIR_ONCE_GLOBAL_INIT(virPortAllocator) =20 virPortRangePtr virPortRangeNew(const char *name, unsigned short start, - unsigned short end, - unsigned int flags) + unsigned short end) { virPortRangePtr range; =20 @@ -110,7 +107,6 @@ virPortRangePtr virPortRangeNew(const char *name, if (VIR_ALLOC(range) < 0) return NULL; =20 - range->flags =3D flags; range->start =3D start; range->end =3D end; =20 @@ -231,11 +227,9 @@ int virPortAllocatorAcquire(virPortRangePtr range, if (virBitmapIsBitSet(pa->bitmap, i)) continue; =20 - if (!(range->flags & VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)) { - if (virPortAllocatorBindToPort(&v6used, i, AF_INET6) < 0 || - virPortAllocatorBindToPort(&used, i, AF_INET) < 0) - goto cleanup; - } + if (virPortAllocatorBindToPort(&v6used, i, AF_INET6) < 0 || + virPortAllocatorBindToPort(&used, i, AF_INET) < 0) + goto cleanup; =20 if (!used && !v6used) { /* Add port to bitmap of reserved ports */ diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index ae00edc..bddeadd 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -28,14 +28,9 @@ typedef struct _virPortRange virPortRange; typedef virPortRange *virPortRangePtr; =20 -typedef enum { - VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK =3D (1 << 0), -} virPortAllocatorFlags; - virPortRangePtr virPortRangeNew(const char *name, unsigned short start, - unsigned short end, - unsigned int flags); + unsigned short end); =20 void virPortRangeFree(virPortRangePtr range); =20 diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 93c8026..4edf921 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -145,8 +145,7 @@ mymain(void) if ((driver.xmlopt =3D virBhyveDriverCreateXMLConf(&driver)) =3D=3D NU= LL) return EXIT_FAILURE; =20 - if (!(driver.remotePorts =3D virPortRangeNew("display", 5900, 65535, - VIR_PORT_ALLOCATOR_SKIP_BIN= D_CHECK))) + if (!(driver.remotePorts =3D virPortRangeNew("display", 5900, 65535))) return EXIT_FAILURE; =20 =20 diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index b3bdcaf..375fac3 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -74,8 +74,7 @@ testCompareXMLToDomConfig(const char *xmlfile, if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, log) < 0) goto cleanup; =20 - if (!(gports =3D virPortRangeNew("vnc", 5900, 6000, - VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK))) + if (!(gports =3D virPortRangeNew("vnc", 5900, 6000))) goto cleanup; =20 if (!(xmlopt =3D libxlCreateXMLConf())) diff --git a/tests/virportallocatortest.c b/tests/virportallocatortest.c index cd792ad..25641d1 100644 --- a/tests/virportallocatortest.c +++ b/tests/virportallocatortest.c @@ -42,7 +42,7 @@ VIR_LOG_INIT("tests.portallocatortest"); =20 static int testAllocAll(const void *args ATTRIBUTE_UNUSED) { - virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5909, 0); + virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5909); int ret =3D -1; unsigned short p1, p2, p3, p4, p5, p6, p7; =20 @@ -114,7 +114,7 @@ static int testAllocAll(const void *args ATTRIBUTE_UNUS= ED) =20 static int testAllocReuse(const void *args ATTRIBUTE_UNUSED) { - virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5910, 0); + virPortRangePtr ports =3D virPortRangeNew("test", 5900, 5910); int ret =3D -1; unsigned short p1, p2, p3, p4; =20 --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751809324482.2432154337595; Tue, 19 Dec 2017 22:36:49 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 40E24C049D43; Wed, 20 Dec 2017 06:36:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9BA7317C59; Wed, 20 Dec 2017 06:36:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id EC3354BB78; Wed, 20 Dec 2017 06:36:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6acGG016309 for ; Wed, 20 Dec 2017 01:36:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id E125E5EDE8; Wed, 20 Dec 2017 06:36:38 +0000 (UTC) Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DB59162660 for ; Wed, 20 Dec 2017 06:36:37 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BCEF1356D1 for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWj001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:37 +0300 Message-Id: <1513751738-772066-6-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 5/6] port allocator: remove release functionality from set used X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 20 Dec 2017 06:36:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Let's use virPortAllocatorRelease instead of virPortAllocatorSetUsed(false). --- src/bhyve/bhyve_command.c | 2 +- src/bhyve/bhyve_process.c | 2 +- src/qemu/qemu_process.c | 16 ++++++++-------- src/util/virportallocator.c | 22 ++++++---------------- src/util/virportallocator.h | 2 +- 5 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 9d21788..d723cc2 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -411,7 +411,7 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def, return -1; graphics->data.vnc.port =3D port; } else { - if (virPortAllocatorSetUsed(graphics->data.vnc.port, true)= < 0) + if (virPortAllocatorSetUsed(graphics->data.vnc.port) < 0) VIR_WARN("Failed to mark VNC port '%d' as used by '%s'= ", graphics->data.vnc.port, def->name); } diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 5e682fa..4ff6257 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -424,7 +424,7 @@ virBhyveProcessReconnect(virDomainObjPtr vm, if (vm->def->ngraphics =3D=3D 1 && vm->def->graphics[0]->type =3D=3D VIR_DOMAIN_GRAPHICS_TYP= E_VNC) { int vnc_port =3D vm->def->graphics[0]->data.vnc.port; - if (virPortAllocatorSetUsed(vnc_port, true) < 0) { + if (virPortAllocatorSetUsed(vnc_port) < 0) { VIR_WARN("Failed to mark VNC port '%d' as used by '%s= '", vnc_port, vm->def->name); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0777922..6f4ccd9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4171,12 +4171,12 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDe= fPtr graphics, case VIR_DOMAIN_GRAPHICS_TYPE_VNC: if (!graphics->data.vnc.autoport || reconnect) { - if (virPortAllocatorSetUsed(graphics->data.vnc.port, true) < 0) + if (virPortAllocatorSetUsed(graphics->data.vnc.port) < 0) return -1; graphics->data.vnc.portReserved =3D true; } if (graphics->data.vnc.websocket > 0 && - virPortAllocatorSetUsed(graphics->data.vnc.websocket, true) < = 0) + virPortAllocatorSetUsed(graphics->data.vnc.websocket) < 0) return -1; break; =20 @@ -4185,13 +4185,13 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDe= fPtr graphics, return 0; =20 if (graphics->data.spice.port > 0) { - if (virPortAllocatorSetUsed(graphics->data.spice.port, true) <= 0) + if (virPortAllocatorSetUsed(graphics->data.spice.port) < 0) return -1; graphics->data.spice.portReserved =3D true; } =20 if (graphics->data.spice.tlsPort > 0) { - if (virPortAllocatorSetUsed(graphics->data.spice.tlsPort, true= ) < 0) + if (virPortAllocatorSetUsed(graphics->data.spice.tlsPort) < 0) return -1; graphics->data.spice.tlsPortReserved =3D true; } @@ -6541,7 +6541,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, if (graphics->data.vnc.autoport) { virPortAllocatorRelease(graphics->data.vnc.port); } else if (graphics->data.vnc.portReserved) { - virPortAllocatorSetUsed(graphics->data.spice.port, false); + virPortAllocatorRelease(graphics->data.spice.port); graphics->data.vnc.portReserved =3D false; } if (graphics->data.vnc.websocketGenerated) { @@ -6549,7 +6549,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, graphics->data.vnc.websocketGenerated =3D false; graphics->data.vnc.websocket =3D -1; } else if (graphics->data.vnc.websocket) { - virPortAllocatorSetUsed(graphics->data.vnc.websocket, fals= e); + virPortAllocatorRelease(graphics->data.vnc.websocket); } } if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { @@ -6558,12 +6558,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, virPortAllocatorRelease(graphics->data.spice.tlsPort); } else { if (graphics->data.spice.portReserved) { - virPortAllocatorSetUsed(graphics->data.spice.port, fal= se); + virPortAllocatorRelease(graphics->data.spice.port); graphics->data.spice.portReserved =3D false; } =20 if (graphics->data.spice.tlsPortReserved) { - virPortAllocatorSetUsed(graphics->data.spice.tlsPort, = false); + virPortAllocatorRelease(graphics->data.spice.tlsPort); graphics->data.spice.tlsPortReserved =3D false; } } diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index 76fac49..565715c 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -279,8 +279,7 @@ int virPortAllocatorRelease(unsigned short port) return ret; } =20 -int virPortAllocatorSetUsed(unsigned short port, - bool value) +int virPortAllocatorSetUsed(unsigned short port) { int ret =3D -1; virPortAllocatorPtr pa =3D virPortAllocatorGet(); @@ -290,20 +289,11 @@ int virPortAllocatorSetUsed(unsigned short port, =20 virObjectLock(pa); =20 - if (value) { - if (virBitmapIsBitSet(pa->bitmap, port) || - virBitmapSetBit(pa->bitmap, port) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to reserve port %d"), port); - goto cleanup; - } - } else { - if (virBitmapClearBit(pa->bitmap, port) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to release port %d"), - port); - goto cleanup; - } + if (virBitmapIsBitSet(pa->bitmap, port) || + virBitmapSetBit(pa->bitmap, port) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to reserve port %d"), port); + goto cleanup; } =20 ret =3D 0; diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index bddeadd..3bc3ef2 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -39,6 +39,6 @@ int virPortAllocatorAcquire(virPortRangePtr range, =20 int virPortAllocatorRelease(unsigned short port); =20 -int virPortAllocatorSetUsed(unsigned short port, bool value); +int virPortAllocatorSetUsed(unsigned short port); =20 #endif /* __VIR_PORT_ALLOCATOR_H__ */ --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat Apr 27 15:12:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1513751830515488.64143165652126; Tue, 19 Dec 2017 22:37:10 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EB52E4E90E; Wed, 20 Dec 2017 06:37:08 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CAA4517DF1; Wed, 20 Dec 2017 06:37:08 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 95EC74A468; Wed, 20 Dec 2017 06:37:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vBK6adBB016325 for ; Wed, 20 Dec 2017 01:36:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id B491817B46; Wed, 20 Dec 2017 06:36:39 +0000 (UTC) Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AC85717C1A for ; Wed, 20 Dec 2017 06:36:36 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B5164356D0 for ; Wed, 20 Dec 2017 06:36:34 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vBJ9IkWk001510 for ; Tue, 19 Dec 2017 12:18:47 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Wed, 20 Dec 2017 09:35:38 +0300 Message-Id: <1513751738-772066-7-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1513751738-772066-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 20 Dec 2017 06:36:35 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 6/6] port allocator: make port range constant object X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 20 Dec 2017 06:37:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" --- src/libxl/libxl_conf.h | 4 ++-- src/qemu/qemu_conf.h | 6 +++--- src/util/virportallocator.c | 2 +- src/util/virportallocator.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index 3ba8710..457dabd 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -130,10 +130,10 @@ struct _libxlDriverPrivate { /* Immutable pointer, self-locking APIs */ virObjectEventStatePtr domainEventState; =20 - /* Immutable pointer, self-locking APIs */ + /* Immutable pointer, immutable object */ virPortRangePtr reservedGraphicsPorts; =20 - /* Immutable pointer, self-locking APIs */ + /* Immutable pointer, immutable object */ virPortRangePtr migrationPorts; =20 /* Immutable pointer, lockless APIs*/ diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index e8c8bd6..b0854ce 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -263,13 +263,13 @@ struct _virQEMUDriver { /* Immutable pointer. Unsafe APIs. XXX */ virHashTablePtr sharedDevices; =20 - /* Immutable pointer, self-locking APIs */ + /* Immutable pointer, immutable object */ virPortRangePtr remotePorts; =20 - /* Immutable pointer, self-locking APIs */ + /* Immutable pointer, immutable object */ virPortRangePtr webSocketPorts; =20 - /* Immutable pointer, self-locking APIs */ + /* Immutable pointer, immutable object */ virPortRangePtr migrationPorts; =20 /* Immutable pointer, lockless APIs*/ diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c index 565715c..3ca3f44 100644 --- a/src/util/virportallocator.c +++ b/src/util/virportallocator.c @@ -207,7 +207,7 @@ static virPortAllocatorPtr virPortAllocatorGet(void) return virPortAllocatorInstance; } =20 -int virPortAllocatorAcquire(virPortRangePtr range, +int virPortAllocatorAcquire(const virPortRange *range, unsigned short *port) { int ret =3D -1; diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h index 3bc3ef2..71a924a 100644 --- a/src/util/virportallocator.h +++ b/src/util/virportallocator.h @@ -34,7 +34,7 @@ virPortRangePtr virPortRangeNew(const char *name, =20 void virPortRangeFree(virPortRangePtr range); =20 -int virPortAllocatorAcquire(virPortRangePtr range, +int virPortAllocatorAcquire(const virPortRange *range, unsigned short *port); =20 int virPortAllocatorRelease(unsigned short port); --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list