From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Markus Armbruster <armbru@redhat.com>
Subject: [Qemu-devel] [PATCH 3/4] qemu-char: Convert udp char backend to parse/kind
Date: Fri, 8 Aug 2014 18:07:28 +0100 [thread overview]
Message-ID: <1407517649-11257-4-git-send-email-peter.maydell@linaro.org> (raw)
In-Reply-To: <1407517649-11257-1-git-send-email-peter.maydell@linaro.org>
Convert the udp char backend to the new style QAPI framework.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
qemu-char.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 54 insertions(+), 15 deletions(-)
diff --git a/qemu-char.c b/qemu-char.c
index cac7edb..a01ccdc 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2383,20 +2383,6 @@ static CharDriverState *qemu_chr_open_udp_fd(int fd)
return chr;
}
-static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
-{
- Error *local_err = NULL;
- int fd = -1;
-
- fd = inet_dgram_opts(opts, &local_err);
- if (fd < 0) {
- qerror_report_err(local_err);
- error_free(local_err);
- return NULL;
- }
- return qemu_chr_open_udp_fd(fd);
-}
-
/***********************************************************/
/* TCP Net console */
@@ -3449,6 +3435,58 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
backend->socket->addr = addr;
}
+static void qemu_chr_parse_udp(QemuOpts *opts, ChardevBackend *backend,
+ Error **errp)
+{
+ const char *host = qemu_opt_get(opts, "host");
+ const char *port = qemu_opt_get(opts, "port");
+ bool ipv4 = qemu_opt_get_bool(opts, "ipv4", 0);
+ bool ipv6 = qemu_opt_get_bool(opts, "ipv6", 0);
+ const char *localaddr = qemu_opt_get(opts, "localaddr");
+ const char *localport = qemu_opt_get(opts, "localport");
+ bool has_local = false;
+ SocketAddress *addr;
+
+ if (host == NULL || strlen(host) == 0) {
+ host = "localhost";
+ }
+ if (port == NULL || strlen(port) == 0) {
+ error_setg(errp, "chardev: udp: remote port not specified");
+ return;
+ }
+ if (localport == NULL || strlen(localport) == 0) {
+ localport = "0";
+ } else {
+ has_local = true;
+ }
+ if (localaddr == NULL || strlen(localaddr) == 0) {
+ localaddr = "";
+ } else {
+ has_local = true;
+ }
+
+ backend->udp = g_new0(ChardevUdp, 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);
+ addr->inet->has_ipv4 = addr->inet->ipv4 = ipv4;
+ addr->inet->has_ipv6 = addr->inet->ipv6 = ipv6;
+ backend->udp->remote = addr;
+
+ if (has_local) {
+ backend->udp->has_local = true;
+ addr = g_new0(SocketAddress, 1);
+ addr->kind = SOCKET_ADDRESS_KIND_INET;
+ addr->inet = g_new0(InetSocketAddress, 1);
+ addr->inet->host = g_strdup(localaddr);
+ addr->inet->port = g_strdup(localport);
+ backend->udp->local = addr;
+ }
+}
+
typedef struct CharDriver {
const char *name;
/* old, pre qapi */
@@ -4139,7 +4177,8 @@ static void register_types(void)
register_char_driver_qapi("null", CHARDEV_BACKEND_KIND_NULL, NULL);
register_char_driver_qapi("socket", CHARDEV_BACKEND_KIND_SOCKET,
qemu_chr_parse_socket);
- register_char_driver("udp", qemu_chr_open_udp);
+ register_char_driver_qapi("udp", CHARDEV_BACKEND_KIND_UDP,
+ qemu_chr_parse_udp);
register_char_driver_qapi("ringbuf", CHARDEV_BACKEND_KIND_RINGBUF,
qemu_chr_parse_ringbuf);
register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
--
1.9.1
next prev parent reply other threads:[~2014-08-08 17:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-08 17:07 [Qemu-devel] [PATCH 0/4] Convert remaining legacy chardevs to parse/kind Peter Maydell
2014-08-08 17:07 ` [Qemu-devel] [PATCH 1/4] qemu-char: Convert socket char backend " Peter Maydell
2014-08-19 12:45 ` Markus Armbruster
2014-08-19 12:47 ` Markus Armbruster
2014-08-08 17:07 ` [Qemu-devel] [PATCH 2/4] util/qemu-sockets.c: Support specifying IPv4 or IPv6 in socket_dgram() Peter Maydell
2014-08-08 17:07 ` Peter Maydell [this message]
2014-08-19 13:16 ` [Qemu-devel] [PATCH 3/4] qemu-char: Convert udp char backend to parse/kind Markus Armbruster
2014-09-01 18:15 ` Peter Maydell
2014-08-08 17:07 ` [Qemu-devel] [PATCH 4/4] qemu-char: Remove register_char_driver() machinery Peter Maydell
2014-08-19 13:21 ` Markus Armbruster
2014-08-19 13:25 ` [Qemu-devel] [PATCH 0/4] Convert remaining legacy chardevs to parse/kind Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1407517649-11257-4-git-send-email-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=armbru@redhat.com \
--cc=kraxel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).