qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] migration-test: Add a test for fd protocol


From: Thomas Huth
Subject: Re: [Qemu-devel] [PATCH 2/2] migration-test: Add a test for fd protocol
Date: Mon, 27 May 2019 11:51:52 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

On 27/05/2019 11.33, Yury Kotov wrote:
> Signed-off-by: Yury Kotov <address@hidden>
> ---
>  tests/libqtest.c       |  83 ++++++++++++++++++++++++++++++--
>  tests/libqtest.h       |  51 +++++++++++++++++++-
>  tests/migration-test.c | 107 +++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 233 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index 8ac0c02af4..de8468d213 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -32,6 +32,7 @@
>  
>  #define MAX_IRQ 256
>  #define SOCKET_TIMEOUT 50
> +#define SOCKET_MAX_FDS 16
>  
>  QTestState *global_qtest;
>  
> @@ -391,6 +392,43 @@ static void GCC_FMT_ATTR(2, 3) qtest_sendf(QTestState 
> *s, const char *fmt, ...)
>      va_end(ap);
>  }

A short description in front of the function about its purpose would be
nice.

> +static void socket_send_fds(int fd, int *fds, size_t fds_num,
> +                            const char *buf, size_t buf_size)
> +{
> +#ifndef WIN32
> +    ssize_t ret;
> +    struct msghdr msg = { 0 };
> +    char control[CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS)] = { 0 };
> +    size_t fdsize = sizeof(int) * fds_num;
> +    struct cmsghdr *cmsg;
> +    struct iovec iov = { .iov_base = (char *)buf, .iov_len = buf_size };
> +
> +    msg.msg_iov = &iov;
> +    msg.msg_iovlen = 1;
> +
> +    if (fds && fds_num > 0) {
> +        g_assert_cmpuint(fds_num, <, SOCKET_MAX_FDS);
> +
> +        msg.msg_control = control;
> +        msg.msg_controllen = CMSG_SPACE(fdsize);
> +
> +        cmsg = CMSG_FIRSTHDR(&msg);
> +        cmsg->cmsg_len = CMSG_LEN(fdsize);
> +        cmsg->cmsg_level = SOL_SOCKET;
> +        cmsg->cmsg_type = SCM_RIGHTS;
> +        memcpy(CMSG_DATA(cmsg), fds, fdsize);
> +    }
> +
> +    do {
> +        ret = sendmsg(fd, &msg, 0);
> +    } while (ret < 0 && errno == EINTR);
> +    g_assert_cmpint(ret, >, 0);
> +#else
> +    g_test_skip("sendmsg is not supported under Win32");
> +    return;
> +#endif
> +}

We're only compiling the qtests if CONFIG_POSIX=y, so I think you don't
need to check for WIN32 here.

 Thomas



reply via email to

[Prev in Thread] Current Thread [Next in Thread]