mirror of https://gitee.com/openkylin/qemu.git
qemu-char: Convert udp backend to QAPI
Convert the udp char backend to the new style QAPI framework. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1409653457-27863-4-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
8287fea321
commit
90a14bfe52
69
qemu-char.c
69
qemu-char.c
|
@ -2385,20 +2385,6 @@ static CharDriverState *qemu_chr_open_udp_fd(int fd)
|
||||||
return chr;
|
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 */
|
/* TCP Net console */
|
||||||
|
|
||||||
|
@ -3449,6 +3435,58 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
|
||||||
backend->socket->addr = addr;
|
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");
|
||||||
|
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 = qemu_opt_get(opts, "ipv4");
|
||||||
|
addr->inet->ipv4 = qemu_opt_get_bool(opts, "ipv4", 0);
|
||||||
|
addr->inet->has_ipv6 = qemu_opt_get(opts, "ipv6");
|
||||||
|
addr->inet->ipv6 = qemu_opt_get_bool(opts, "ipv6", 0);
|
||||||
|
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 {
|
typedef struct CharDriver {
|
||||||
const char *name;
|
const char *name;
|
||||||
/* old, pre qapi */
|
/* 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("null", CHARDEV_BACKEND_KIND_NULL, NULL);
|
||||||
register_char_driver_qapi("socket", CHARDEV_BACKEND_KIND_SOCKET,
|
register_char_driver_qapi("socket", CHARDEV_BACKEND_KIND_SOCKET,
|
||||||
qemu_chr_parse_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,
|
register_char_driver_qapi("ringbuf", CHARDEV_BACKEND_KIND_RINGBUF,
|
||||||
qemu_chr_parse_ringbuf);
|
qemu_chr_parse_ringbuf);
|
||||||
register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
|
register_char_driver_qapi("file", CHARDEV_BACKEND_KIND_FILE,
|
||||||
|
|
Loading…
Reference in New Issue