mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 11:31:16 +00:00
virtportallocator: new function "virPortAllocatorSetUsed"
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@redhat.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
59cac9a918
commit
1d8d2fbcd0
@ -1770,6 +1770,7 @@ virPidFileWritePath;
|
||||
virPortAllocatorAcquire;
|
||||
virPortAllocatorNew;
|
||||
virPortAllocatorRelease;
|
||||
virPortAllocatorSetUsed;
|
||||
|
||||
|
||||
# util/virprocess.h
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* virportallocator.c: Allocate & track TCP port allocations
|
||||
*
|
||||
* Copyright (C) 2013 Red Hat, Inc.
|
||||
* Copyright (C) 2013-2014 Red Hat, Inc.
|
||||
*
|
||||
* 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,44 @@ 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 {
|
||||
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;
|
||||
}
|
||||
|
@ -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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user