qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH RFC 0/3] tests/pxe-testt: add testcase using vho


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH RFC 0/3] tests/pxe-testt: add testcase using vhost-user-bridge
Date: Thu, 13 Jul 2017 01:33:43 +0300

On Wed, Jul 12, 2017 at 11:13:05PM +0200, Jens Freimann wrote:
> On Wed, Jul 12, 2017 at 06:10:05PM +0300, Michael S. Tsirkin wrote:
> > On Wed, Jul 12, 2017 at 11:41:46AM +0200, Jens Freimann wrote:
> > > This implements a testcase for pxe-test using the vhost-user interface. 
> > > Spawn a
> > > vhost-user-bridge process and connect it to the qemu process.
> > > 
> > > It is send as an RFC because:
> > >  - Patch 3/3: there must be cleaner way to do this.
> > >  - Does Patch 1/3 make sense or should I just redirect all output to 
> > > /dev/null?
> > >  - don't hardcode port numbers in qemu cmdline, create socket and pass
> > >     fd to -netdev (need to figure out how to do this)
> > 
> > Doesn't this work?
> > 
> > -netdev socket,id=str[,fd=h]
> 
> It should. But I get this:
> 
>        dded sock 5 for watching. max_sock: 5
>        Sock 3 removed from dispatcher watch.
>        qemu: error: specified mcastaddr "127.0.0.1" (0x7f000001) does not 
> contain a multicast address
>        qemu-system-x86_64: -netdev socket,id=n1,fd=3: Device 'socket' could 
> not be initialized
>        Broken pipe

Not sure what's wrong with it, should not be too hard to debug.

Or maybe we should add unix domain socket support.
Sounds like a reasonable feature to me.

> diff --git a/tests/pxe-test.c b/tests/pxe-test.c
> index 5a0d182..a14c1d9 100644
> --- a/tests/pxe-test.c
> +++ b/tests/pxe-test.c
> @@ -29,7 +29,7 @@
> #define QEMU_CMD_NETDEV " -device virtio-net-pci,netdev=net0 "\
>                         " -netdev vhost-user,id=net0,chardev=%s,vhostforce "\
>                         " -netdev user,id=n0,tftp=./,bootfile=%s "\
> -                        " -netdev 
> socket,id=n1,udp=localhost:%d,localaddr=localhost:%d"
> +                        " -netdev socket,id=n1,fd=%d"
> #define QEMU_CMD_NET    " -device virtio-net-pci,netdev=n0 "\
>                         " -device virtio-net-pci,netdev=n1 "
> 
> @@ -72,16 +72,42 @@ static const char *init_hugepagefs(const char *path)
>     return path;
> }
> 
> +static int vubr_create_socket(struct sockaddr_in *si_remote, int rport)
> +{
> +    int sock =  -1;
> +
> +    if (inet_aton("127.0.0.1", (struct in_addr *) 
> &si_remote->sin_addr.s_addr) == 0) {
> +        g_test_message("inet_aton failed\n");
> +        return -1;
> +    }
> +
> +    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
> +    if (sock == -1) {
> +        g_test_message("socket creation failed\n");
> +    }
> +    if (connect(sock, (struct sockaddr *) si_remote, sizeof(*si_remote))) {
> +        printf("connect, %d", errno);
> +        return -1;
> +    }
> +
> +    return sock;
> +}
> +
> static void test_pxe_vhost_user(void)
> {
>     char template[] = "/tmp/vhost-user-bridge-XXXXXX";
>     char template2[] = "/tmp/hugepages-XXXXXX";
>     gchar *vubr_args[] = {NULL, NULL, NULL, NULL};
> +    struct sockaddr_in si_remote = {
> +        .sin_family = AF_INET,
> +        .sin_port = htons(RPORT),
> +    };
>     const char *hugefs;
>     GError *error = NULL;
>     char *vubr_binary;
>     char *qemu_args;
>     GPid vubr_pid;
> +    int sock = -1;
> 
>     tmpfs = mkdtemp(template);
>     if (!tmpfs) {
> 
>     tmpfs = mkdtemp(template);
>     if (!tmpfs) {
> @@ -109,9 +135,10 @@ static void test_pxe_vhost_user(void)
>         root = tmpfs2;
>     }
> 
> +    sock = vubr_create_socket(&si_remote, RPORT);
> +
>     qemu_args = g_strdup_printf(QEMU_CMD, MEMSZ, MEMSZ, (root),
> -                                "char0", vubr_args[2], "char0", disk,
> -                                RPORT, LPORT);
> +            "char0", vubr_args[2], "char0", disk, sock);
> 
> 
> 
> regards,
> Jens



reply via email to

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