[libvirt] [PATCH v2 1/2] virtportallocator: new function "virPortAllocatorSetUsed"
Michal Privoznik
mprivozn at redhat.com
Tue Jun 24 11:50:52 UTC 2014
On 24.06.2014 13:34, Giuseppe Scrivano wrote:
> virPortAllocatorSetUsed permits to set a port as already used and
> prevent the port allocator to use it without any attempt to bind it.
>
> Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
> ---
> src/libvirt_private.syms | 1 +
> src/util/virportallocator.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
> src/util/virportallocator.h | 4 ++++
> 3 files changed, 48 insertions(+), 1 deletion(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 2a2b9c0..95a45aa 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1770,6 +1770,7 @@ virPidFileWritePath;
> virPortAllocatorAcquire;
> virPortAllocatorNew;
> virPortAllocatorRelease;
> +virPortAllocatorSetUsed;
>
>
> # util/virprocess.h
> diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c
> index b68133a..226f386 100644
> --- a/src/util/virportallocator.c
> +++ b/src/util/virportallocator.c
> @@ -1,7 +1,7 @@
> /*
> * virportallocator.c: Allocate & track TCP port allocations
> *
> - * Copyright (C) 2013 Red Hat, Inc.
> + * Copyright (C) 2013, 2014 Red Hat, Inc.
How about 2013-2014?
> *
> * This library is free software; you can redistribute it and/or
> * modify it under the terms of the GNU Lesser General Public
> @@ -250,3 +250,45 @@ int virPortAllocatorRelease(virPortAllocatorPtr pa,
> virObjectUnlock(pa);
> return ret;
> }
> +
> +int virPortAllocatorSetUsed(virPortAllocatorPtr pa,
> + unsigned short port,
> + bool value)
> +{
> + int ret = -1;
> +
> + virObjectLock(pa);
> +
> + if (port < pa->start ||
> + port > pa->end) {
> + ret = 0;
> + goto cleanup;
> + }
> +
> + if (value) {
> + bool used = false;
> + if (virBitmapGetBit(pa->bitmap, port - pa->start, &used) < 0)
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to query port %d"), port);
> +
> + if (used || virBitmapSetBit(pa->bitmap, port - pa->start) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to reserve port %d"), port);
> + goto cleanup;
> + }
> + }
> + else {
move the 'else' at the same line with the closing bracket
> + if (virBitmapClearBit(pa->bitmap,
> + port - pa->start) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to release port %d"),
> + port);
> + goto cleanup;
> + }
> + }
> +
> + ret = 0;
> + cleanup:
> + virObjectUnlock(pa);
> + return ret;
> +}
> diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h
> index c8aa6de..e5ee56d 100644
> --- a/src/util/virportallocator.h
> +++ b/src/util/virportallocator.h
> @@ -38,4 +38,8 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa,
> int virPortAllocatorRelease(virPortAllocatorPtr pa,
> unsigned short port);
>
> +int virPortAllocatorSetUsed(virPortAllocatorPtr pa,
> + unsigned short port,
> + bool value);
> +
> #endif /* __VIR_PORT_ALLOCATOR_H__ */
>
ACK
Michal
More information about the libvir-list
mailing list