xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Jim Fehlig <jfehlig@suse.com>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: libvir-list@redhat.com, xen-devel@lists.xensource.com,
	Ian Campbell <Ian.Campbell@citrix.com>
Subject: Re: [libvirt] [PATCH v2 2/4] util: Allow port allocator to skip bind() check
Date: Tue, 03 Jun 2014 15:25:34 -0600	[thread overview]
Message-ID: <538E3D4E.5020805@suse.com> (raw)
In-Reply-To: <1401793373-26680-3-git-send-email-berrange@redhat.com>

Daniel P. Berrange wrote:
> 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>
> ---
>  src/libxl/libxl_driver.c     |  3 ++-
>  src/qemu/qemu_driver.c       |  9 ++++++---
>  src/util/virportallocator.c  | 14 ++++++++++----
>  src/util/virportallocator.h  |  7 ++++++-
>  tests/virportallocatortest.c |  4 ++--
>  5 files changed, 26 insertions(+), 11 deletions(-)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 515d5c9..70f9bb8 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -298,7 +298,8 @@ libxlStateInitialize(bool privileged,
>      if (!(libxl_driver->reservedVNCPorts =
>            virPortAllocatorNew(_("VNC"),
>                                LIBXL_VNC_PORT_MIN,
> -                              LIBXL_VNC_PORT_MAX)))
> +                              LIBXL_VNC_PORT_MAX,
> +                              0)))
>          goto error;
>  
>      if (!(libxl_driver->domains = virDomainObjListNew()))
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 3a7622a..b3a9036 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -680,19 +680,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)
> diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c
> index b68133a..fa17475 100644
> --- a/src/util/virportallocator.c
> +++ b/src/util/virportallocator.c
> @@ -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;
>  
> @@ -193,9 +197,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 */
> diff --git a/src/util/virportallocator.h b/src/util/virportallocator.h
> index c8aa6de..2fdb8d9 100644
> --- a/src/util/virportallocator.h
> +++ b/src/util/virportallocator.h
> @@ -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);
> diff --git a/tests/virportallocatortest.c b/tests/virportallocatortest.c
> index 48d2c9a..96d2ade 100644
> --- a/tests/virportallocatortest.c
> +++ b/tests/virportallocatortest.c
> @@ -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);
>   

Should these tests be changed to use the new
VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK flag?

Regards,
Jim

>      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;
>  
>   

  reply	other threads:[~2014-06-03 21:25 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-03 11:02 [PATCH v2 0/4] Testing libvirt XML -> libxl_domain_config conversion Daniel P. Berrange
2014-06-03 11:02 ` [libvirt] [PATCH v2 1/4] util: Introduce virJSONStringCompare for JSON doc comparisons Daniel P. Berrange
2014-06-03 21:18   ` Jim Fehlig
2014-06-03 11:02 ` [PATCH v2 2/4] util: Allow port allocator to skip bind() check Daniel P. Berrange
2014-06-03 21:25   ` Jim Fehlig [this message]
2014-06-03 11:02 ` [PATCH v2 3/4] tests: Add more test suite mock helpers Daniel P. Berrange
2014-06-03 21:30   ` [libvirt] " Jim Fehlig
2014-06-03 11:02 ` [PATCH v2 4/4] libxl: Add a test suite for libxl option generator Daniel P. Berrange
2014-06-03 21:45   ` [libvirt] " Jim Fehlig
2014-06-16 23:11     ` Jim Fehlig
2014-06-17  8:52       ` Ian Campbell
2014-06-17 18:40         ` Jim Fehlig
2014-06-18  8:33           ` Ian Campbell
2014-06-18  9:07           ` Daniel P. Berrange

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=538E3D4E.5020805@suse.com \
    --to=jfehlig@suse.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=berrange@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).