[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 4/4] qga: add vsock-listen method
From: |
Michael Roth |
Subject: |
Re: [Qemu-devel] [PATCH 4/4] qga: add vsock-listen method |
Date: |
Fri, 07 Oct 2016 12:07:41 -0500 |
User-agent: |
alot/0.3.6 |
Quoting Stefan Hajnoczi (2016-10-06 11:40:18)
> Add AF_VSOCK (virtio-vsock) support as an alternative to virtio-serial.
>
> $ qemu-system-x86_64 -device vhost-vsock-pci,guest-cid=3 ...
> (guest)# qemu-ga -m vsock-listen -p 3:1234
>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
I still need to get a vsock environment set up to test with, but looks
good other than minor comments in patch 3.
> ---
> qga/channel-posix.c | 25 +++++++++++++++++++++++++
> qga/channel.h | 1 +
> qga/main.c | 6 ++++--
> 3 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/qga/channel-posix.c b/qga/channel-posix.c
> index 579891d..71582e0 100644
> --- a/qga/channel-posix.c
> +++ b/qga/channel-posix.c
> @@ -193,6 +193,31 @@ static gboolean ga_channel_open(GAChannel *c, const
> gchar *path, GAChannelMethod
> ga_channel_listen_add(c, fd, true);
> break;
> }
> + case GA_CHANNEL_VSOCK_LISTEN: {
> + Error *local_err = NULL;
> + SocketAddress *addr;
> + char *addr_str;
> + int fd;
> +
> + addr_str = g_strdup_printf("vsock:%s", path);
> + addr = socket_parse(addr_str, &local_err);
> + g_free(addr_str);
> + if (local_err != NULL) {
> + g_critical("%s", error_get_pretty(local_err));
> + error_free(local_err);
> + return false;
> + }
> +
> + fd = socket_listen(addr, &local_err);
> + qapi_free_SocketAddress(addr);
> + if (local_err != NULL) {
> + g_critical("%s", error_get_pretty(local_err));
> + error_free(local_err);
> + return false;
> + }
> + ga_channel_listen_add(c, fd, true);
> + break;
> + }
> default:
> g_critical("error binding/listening to specified socket");
> return false;
> diff --git a/qga/channel.h b/qga/channel.h
> index ae8cf0f..8fd0c8f 100644
> --- a/qga/channel.h
> +++ b/qga/channel.h
> @@ -19,6 +19,7 @@ typedef enum {
> GA_CHANNEL_VIRTIO_SERIAL,
> GA_CHANNEL_ISA_SERIAL,
> GA_CHANNEL_UNIX_LISTEN,
> + GA_CHANNEL_VSOCK_LISTEN,
> } GAChannelMethod;
>
> typedef gboolean (*GAChannelCallback)(GIOCondition condition, gpointer
> opaque);
> diff --git a/qga/main.c b/qga/main.c
> index 0b9d04e..6caf215 100644
> --- a/qga/main.c
> +++ b/qga/main.c
> @@ -190,8 +190,8 @@ static void usage(const char *cmd)
> "Usage: %s [-m <method> -p <path>] [<options>]\n"
> "QEMU Guest Agent %s\n"
> "\n"
> -" -m, --method transport method: one of unix-listen, virtio-serial,
> or\n"
> -" isa-serial (virtio-serial is the default)\n"
> +" -m, --method transport method: one of unix-listen, virtio-serial,\n"
> +" isa-serial, or vsock-listen (virtio-serial is the
> default)\n"
> " -p, --path device/socket path (the default for virtio-serial is:\n"
> " %s,\n"
> " the default for isa-serial is:\n"
> @@ -659,6 +659,8 @@ static gboolean channel_init(GAState *s, const gchar
> *method, const gchar *path)
> channel_method = GA_CHANNEL_ISA_SERIAL;
> } else if (strcmp(method, "unix-listen") == 0) {
> channel_method = GA_CHANNEL_UNIX_LISTEN;
> + } else if (strcmp(method, "vsock-listen") == 0) {
> + channel_method = GA_CHANNEL_VSOCK_LISTEN;
> } else {
> g_critical("unsupported channel method/type: %s", method);
> return false;
> --
> 2.7.4
>