From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35343) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YdHSa-0003cw-JH for qemu-devel@nongnu.org; Wed, 01 Apr 2015 08:09:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YdHSY-0000bk-N2 for qemu-devel@nongnu.org; Wed, 01 Apr 2015 08:09:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41774) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YdHSY-0000bW-Iu for qemu-devel@nongnu.org; Wed, 01 Apr 2015 08:09:26 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 5841FAE5B9 for ; Wed, 1 Apr 2015 12:09:26 +0000 (UTC) From: Max Reitz Date: Wed, 1 Apr 2015 14:09:14 +0200 Message-Id: <1427890157-18639-3-git-send-email-mreitz@redhat.com> In-Reply-To: <1427890157-18639-1-git-send-email-mreitz@redhat.com> References: <1427890157-18639-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH for-2.4 2/5] chardev/irc: Add sockfd option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Paolo Bonzini , Markus Armbruster , Max Reitz IRC being well on the way to deprecate other character devices, it must be exposed to management tools as well. These often prefer to pass a socket FD instead of a host and port to connect to, so this patch adds an appropriate option. Signed-off-by: Max Reitz --- qemu-char.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index a68fef3..4507e5f 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -3937,19 +3937,26 @@ static void qemu_chr_parse_udp(QemuOpts *opts, ChardevBackend *backend, static void qemu_chr_parse_irc(QemuOpts *opts, ChardevBackend *backend, Error **errp) { - const char *host, *port, *nick, *channel; + const char *host, *port, *nick, *channel, *sockfd; SocketAddress *addr; host = qemu_opt_get(opts, "host"); port = qemu_opt_get(opts, "port") ?: "6667"; + sockfd = qemu_opt_get(opts, "sockfd"); nick = qemu_opt_get(opts, "nick"); channel = qemu_opt_get(opts, "channel"); - if (!host || !nick || !channel) { + if ((!host && !sockfd) || !nick || !channel) { error_setg(errp, "chardev: irc: Missing options"); return; } + if ((host || port) && sockfd) { + error_setg(errp, + "chardev: irc: Both sockfd and host and/or port specified"); + return; + } + if (strlen(nick) > 64 || strlen(channel) > 64) { error_setg(errp, "chardev: irc: Nick or channel too long"); return; @@ -3958,10 +3965,17 @@ static void qemu_chr_parse_irc(QemuOpts *opts, ChardevBackend *backend, backend->irc = g_new0(ChardevIrc, 1); addr = g_new0(SocketAddress, 1); - addr->kind = SOCKET_ADDRESS_KIND_INET; - addr->inet = g_new0(InetSocketAddress, 1); - addr->inet->host = g_strdup(host); - addr->inet->port = g_strdup(port); + if (host) { + addr->kind = SOCKET_ADDRESS_KIND_INET; + addr->inet = g_new0(InetSocketAddress, 1); + addr->inet->host = g_strdup(host); + addr->inet->port = g_strdup(port); + } else { + addr->kind = SOCKET_ADDRESS_KIND_FD; + addr->fd = g_new(String, 1); + addr->fd->str = g_strdup(sockfd); + } + backend->irc->addr = addr; backend->irc->nick = g_strdup(nick); @@ -4332,6 +4346,9 @@ QemuOptsList qemu_chardev_opts = { },{ .name = "channel", .type = QEMU_OPT_STRING, + },{ + .name = "sockfd", + .type = QEMU_OPT_STRING, }, { /* end of list */ } }, -- 2.3.4