static void test_redirector_tx(void)

{

    int backend_sock[2], recv_sock;

    char *cmdline;

    uint32_t ret = 0, len = 0;

    char send_buf[] = "Hello!!";

    char sock_path0[] = "filter-redirector0.XXXXXX";

    char sock_path1[] = "filter-redirector1.XXXXXX";

    char *recv_buf;

    uint32_t size = sizeof(send_buf);

    size = htonl(size);



    ret = socketpair(PF_UNIX, SOCK_STREAM, 0, backend_sock);

    g_assert_cmpint(ret, !=, -1);



    ret = mkstemp(sock_path0);

    g_assert_cmpint(ret, !=, -1);

    ret = mkstemp(sock_path1);

    g_assert_cmpint(ret, !=, -1);



    cmdline = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "

                "-device rtl8139,netdev=qtest-bn0,id=qtest-e0 "

                "-chardev socket,id=redirector0,path=%s,server,nowait "

                "-chardev socket,id=redirector1,path=%s,server,nowait "

                "-chardev socket,id=redirector2,path=%s,nowait "

                "-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector0 "

                "-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"

                "queue=tx,indev=redirector2 "

                "-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector1 "

                , backend_sock[1], sock_path0, sock_path1, sock_path0);

    qtest_start(cmdline);

    g_free(cmdline);



    recv_sock = unix_connect(sock_path1, NULL);

    g_assert_cmpint(recv_sock, !=, -1);



    /* send a qmp command to guarantee that 'connected' is setting to true. */

    qmp_discard_response("{ 'execute' : 'query-status'}");



    struct iovec iov[] = {

        {

            .iov_base = &size,

            .iov_len = sizeof(size),

        }, {

            .iov_base = send_buf,

            .iov_len = sizeof(send_buf),

        },

    };



    ret = iov_send(backend_sock[0], iov, 2, 0, sizeof(size) + sizeof(send_buf));

    g_assert_cmpint(ret, ==, sizeof(send_buf) + sizeof(size));

    close(backend_sock[0]);



    ret = qemu_recv(recv_sock, &len, sizeof(len), 0);

    g_assert_cmpint(ret, ==, sizeof(len));

    len = ntohl(len);



    g_assert_cmpint(len, ==, sizeof(send_buf));

    recv_buf = g_malloc(len);

    ret = qemu_recv(recv_sock, recv_buf, len, 0);

    g_assert_cmpstr(recv_buf, ==, send_buf);



    g_free(recv_buf);

    close(recv_sock);

    unlink(sock_path0);

    unlink(sock_path1);

    qtest_end();

}

static void test_redirector_tx(void)

{

    int backend_sock[2], recv_sock;

    char *cmdline;

    uint32_t ret = 0, len = 0;

    char send_buf[] = "Hello!!";

    char sock_path0[] = "filter-redirector0.XXXXXX";

    char sock_path1[] = "filter-redirector1.XXXXXX";

    char *recv_buf;

    uint32_t size = sizeof(send_buf);

    size = htonl(size);



    ret = socketpair(PF_UNIX, SOCK_STREAM, 0, backend_sock);

    g_assert_cmpint(ret, !=, -1);



    ret = mkstemp(sock_path0);

    g_assert_cmpint(ret, !=, -1);

    ret = mkstemp(sock_path1);

    g_assert_cmpint(ret, !=, -1);



    cmdline = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "

                "-device rtl8139,netdev=qtest-bn0,id=qtest-e0 "

                "-chardev socket,id=redirector0,path=%s,server,nowait "

                "-chardev socket,id=redirector1,path=%s,server,nowait "

                "-chardev socket,id=redirector2,path=%s,nowait "

                "-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector0 "

                "-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"

                "queue=tx,indev=redirector2 "

                "-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector1 "

                , backend_sock[1], sock_path0, sock_path1, sock_path0);

    qtest_start(cmdline);

    g_free(cmdline);



    recv_sock = unix_connect(sock_path1, NULL);

    g_assert_cmpint(recv_sock, !=, -1);



    

    qmp_discard_response("{ 'execute' : 'query-status'}");



    struct iovec iov[] = {

        {

            .iov_base = &size,

            .iov_len = sizeof(size),

        }, {

            .iov_base = send_buf,

            .iov_len = sizeof(send_buf),

        },

    };



    ret = iov_send(backend_sock[0], iov, 2, 0, sizeof(size) + sizeof(send_buf));

    g_assert_cmpint(ret, ==, sizeof(send_buf) + sizeof(size));

    close(backend_sock[0]);



    ret = qemu_recv(recv_sock, &len, sizeof(len), 0);

    g_assert_cmpint(ret, ==, sizeof(len));

    len = ntohl(len);



    g_assert_cmpint(len, ==, sizeof(send_buf));

    recv_buf = g_malloc(len);

    ret = qemu_recv(recv_sock, recv_buf, len, 0);

    g_assert_cmpstr(recv_buf, ==, send_buf);



    g_free(recv_buf);

    close(recv_sock);

    unlink(sock_path0);

    unlink(sock_path1);

    qtest_end();

}

static void FUNC_0(void)

{

    int VAR_0[2], VAR_1;

    char *VAR_2;

    uint32_t ret = 0, len = 0;

    char VAR_3[] = "Hello!!";

    char VAR_4[] = "filter-redirector0.XXXXXX";

    char VAR_5[] = "filter-redirector1.XXXXXX";

    char *VAR_6;

    uint32_t size = sizeof(VAR_3);

    size = htonl(size);



    ret = socketpair(PF_UNIX, SOCK_STREAM, 0, VAR_0);

    g_assert_cmpint(ret, !=, -1);



    ret = mkstemp(VAR_4);

    g_assert_cmpint(ret, !=, -1);

    ret = mkstemp(VAR_5);

    g_assert_cmpint(ret, !=, -1);



    VAR_2 = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "

                "-device rtl8139,netdev=qtest-bn0,id=qtest-e0 "

                "-chardev socket,id=redirector0,path=%s,server,nowait "

                "-chardev socket,id=redirector1,path=%s,server,nowait "

                "-chardev socket,id=redirector2,path=%s,nowait "

                "-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector0 "

                "-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"

                "queue=tx,indev=redirector2 "

                "-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"

                "queue=tx,outdev=redirector1 "

                , VAR_0[1], VAR_4, VAR_5, VAR_4);

    qtest_start(VAR_2);

    g_free(VAR_2);



    VAR_1 = unix_connect(VAR_5, NULL);

    g_assert_cmpint(VAR_1, !=, -1);



    

    qmp_discard_response("{ 'execute' : 'query-status'}");



    struct iovec VAR_7[] = {

        {

            .iov_base = &size,

            .iov_len = sizeof(size),

        }, {

            .iov_base = VAR_3,

            .iov_len = sizeof(VAR_3),

        },

    };



    ret = iov_send(VAR_0[0], VAR_7, 2, 0, sizeof(size) + sizeof(VAR_3));

    g_assert_cmpint(ret, ==, sizeof(VAR_3) + sizeof(size));

    close(VAR_0[0]);



    ret = qemu_recv(VAR_1, &len, sizeof(len), 0);

    g_assert_cmpint(ret, ==, sizeof(len));

    len = ntohl(len);



    g_assert_cmpint(len, ==, sizeof(VAR_3));

    VAR_6 = g_malloc(len);

    ret = qemu_recv(VAR_1, VAR_6, len, 0);

    g_assert_cmpstr(VAR_6, ==, VAR_3);



    g_free(VAR_6);

    close(VAR_1);

    unlink(VAR_4);

    unlink(VAR_5);

    qtest_end();

}

static void FUNC_0(void)
{ int VAR_0[2], VAR_1; char *VAR_2; uint32_t ret = 0, len = 0; char VAR_3[] = "Hello!!"; char VAR_4[] = "filter-redirector0.XXXXXX"; char VAR_5[] = "filter-redirector1.XXXXXX"; char *VAR_6; uint32_t size = sizeof(VAR_3); size = htonl(size); ret = socketpair(PF_UNIX, SOCK_STREAM, 0, VAR_0); g_assert_cmpint(ret, !=, -1); ret = mkstemp(VAR_4); g_assert_cmpint(ret, !=, -1); ret = mkstemp(VAR_5); g_assert_cmpint(ret, !=, -1); VAR_2 = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "
"-device rtl8139,netdev=qtest-bn0,id=qtest-e0 "
"-chardev socket,id=redirector0,path=%s,server,nowait "
"-chardev socket,id=redirector1,path=%s,server,nowait "
"-chardev socket,id=redirector2,path=%s,nowait "
"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"
"queue=tx,outdev=redirector0 "
"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"
"queue=tx,indev=redirector2 "
"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"
"queue=tx,outdev=redirector1 "
, VAR_0[1], VAR_4, VAR_5, VAR_4); qtest_start(VAR_2); g_free(VAR_2); VAR_1 = unix_connect(VAR_5, NULL); g_assert_cmpint(VAR_1, !=, -1); qmp_discard_response("{ 'execute' : 'query-status'}"); struct iovec VAR_7[] = { { .iov_base = &size,
.iov_len = sizeof(size),
}, { .iov_base = VAR_3,
.iov_len = sizeof(VAR_3),
}, }; ret = iov_send(VAR_0[0], VAR_7, 2, 0, sizeof(size) + sizeof(VAR_3)); g_assert_cmpint(ret, ==, sizeof(VAR_3) + sizeof(size)); close(VAR_0[0]); ret = qemu_recv(VAR_1, &len, sizeof(len), 0); g_assert_cmpint(ret, ==, sizeof(len)); len = ntohl(len); g_assert_cmpint(len, ==, sizeof(VAR_3)); VAR_6 = g_malloc(len); ret = qemu_recv(VAR_1, VAR_6, len, 0); g_assert_cmpstr(VAR_6, ==, VAR_3); g_free(VAR_6); close(VAR_1); unlink(VAR_4); unlink(VAR_5); qtest_end(); }