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;
|
virPortAllocatorAcquire;
|
||||||
virPortAllocatorNew;
|
virPortAllocatorNew;
|
||||||
virPortAllocatorRelease;
|
virPortAllocatorRelease;
|
||||||
|
virPortAllocatorSetUsed;
|
||||||
|
|
||||||
|
|
||||||
# util/virprocess.h
|
# util/virprocess.h
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* virportallocator.c: Allocate & track TCP port allocations
|
* 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -250,3 +250,44 @@ int virPortAllocatorRelease(virPortAllocatorPtr pa,
|
|||||||
virObjectUnlock(pa);
|
virObjectUnlock(pa);
|
||||||
return ret;
|
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,
|
int virPortAllocatorRelease(virPortAllocatorPtr pa,
|
||||||
unsigned short port);
|
unsigned short port);
|
||||||
|
|
||||||
|
int virPortAllocatorSetUsed(virPortAllocatorPtr pa,
|
||||||
|
unsigned short port,
|
||||||
|
bool value);
|
||||||
|
|
||||||
#endif /* __VIR_PORT_ALLOCATOR_H__ */
|
#endif /* __VIR_PORT_ALLOCATOR_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user