From: Gleb Natapov <gleb@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v3 2/5] Add vmchannel command line option.
Date: Thu, 08 Jan 2009 11:55:44 +0200 [thread overview]
Message-ID: <20090108095544.12548.21251.stgit@dhcp-1-237.tlv.redhat.com> (raw)
In-Reply-To: <20090108095533.12548.8211.stgit@dhcp-1-237.tlv.redhat.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
vl.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/vl.c b/vl.c
index 959be62..c076375 100644
--- a/vl.c
+++ b/vl.c
@@ -207,6 +207,13 @@ static int full_screen = 0;
static int no_frame = 0;
#endif
int no_quit = 0;
+#if defined(CONFIG_SLIRP)
+#define MAX_VMCHANNEL_DEVICES 4
+struct VMChannel {
+ CharDriverState *hd;
+ int port;
+} vmchannel_hds[MAX_VMCHANNEL_DEVICES];
+#endif
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
#ifdef TARGET_I386
@@ -3948,6 +3955,9 @@ static void help(int exitcode)
"-monitor dev redirect the monitor to char device 'dev'\n"
"-serial dev redirect the serial port to char device 'dev'\n"
"-parallel dev redirect the parallel port to char device 'dev'\n"
+#if defined(CONFIG_SLIRP)
+ "-vmchannel di:DI,dev redirect the vmchannel device with device id DI, to char device 'dev'\n"
+#endif
"-pidfile file Write PID to 'file'\n"
"-S freeze CPU at startup (use 'c' to start execution)\n"
"-s wait gdb connection to port\n"
@@ -4062,6 +4072,9 @@ enum {
QEMU_OPTION_monitor,
QEMU_OPTION_serial,
QEMU_OPTION_parallel,
+#if defined(CONFIG_SLIRP)
+ QEMU_OPTION_vmchannel,
+#endif
QEMU_OPTION_loadvm,
QEMU_OPTION_full_screen,
QEMU_OPTION_no_frame,
@@ -4171,6 +4184,9 @@ static const QEMUOption qemu_options[] = {
{ "monitor", HAS_ARG, QEMU_OPTION_monitor },
{ "serial", HAS_ARG, QEMU_OPTION_serial },
{ "parallel", HAS_ARG, QEMU_OPTION_parallel },
+#if defined(CONFIG_SLIRP)
+ { "vmchannel", 1, QEMU_OPTION_vmchannel },
+#endif
{ "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
{ "full-screen", 0, QEMU_OPTION_full_screen },
#ifdef CONFIG_SDL
@@ -4469,6 +4485,20 @@ static void termsig_setup(void)
#endif
+#if defined(CONFIG_SLIRP)
+static int vmchannel_can_read(void *opaque)
+{
+ struct VMChannel *vmc = (struct VMChannel*)opaque;
+ return slirp_socket_can_recv(4, vmc->port);
+}
+
+static void vmchannel_read(void *opaque, const uint8_t *buf, int size)
+{
+ struct VMChannel *vmc = (struct VMChannel*)opaque;
+ slirp_socket_recv(4, vmc->port, buf, size);
+}
+#endif
+
int main(int argc, char **argv, char **envp)
{
#ifdef CONFIG_GDBSTUB
@@ -4496,6 +4526,8 @@ int main(int argc, char **argv, char **envp)
int serial_device_index;
const char *parallel_devices[MAX_PARALLEL_PORTS];
int parallel_device_index;
+ char *vmchannel_devices[MAX_VMCHANNEL_DEVICES];
+ int vmchannel_device_index;
const char *loadvm = NULL;
QEMUMachine *machine;
const char *cpu_model;
@@ -4569,6 +4601,10 @@ int main(int argc, char **argv, char **envp)
parallel_devices[i] = NULL;
parallel_device_index = 0;
+ for(i = 0; i < MAX_VMCHANNEL_DEVICES; i++)
+ vmchannel_devices[i] = NULL;
+ vmchannel_device_index = 0;
+
usb_devices_index = 0;
nb_net_clients = 0;
@@ -4963,7 +4999,15 @@ int main(int argc, char **argv, char **envp)
parallel_devices[parallel_device_index] = optarg;
parallel_device_index++;
break;
- case QEMU_OPTION_loadvm:
+#if defined(CONFIG_SLIRP)
+ case QEMU_OPTION_vmchannel:
+ if (vmchannel_device_index >= MAX_VMCHANNEL_DEVICES) {
+ fprintf(stderr, "qemu: too many vmchannel devices\n");
+ exit(1);
+ }
+ vmchannel_devices[vmchannel_device_index++] = optarg;
+#endif
+ case QEMU_OPTION_loadvm:
loadvm = optarg;
break;
case QEMU_OPTION_full_screen:
@@ -5468,6 +5512,35 @@ int main(int argc, char **argv, char **envp)
}
}
+#if defined(CONFIG_SLIRP)
+ for(i = 0; i < vmchannel_device_index; i++) {
+ char *devname = vmchannel_devices[i];
+ long port;
+ char name[20];
+
+ if (!devname)
+ continue;
+
+ port = strtol(devname, &devname, 10);
+ devname++;
+ if (port < 1 || port > 65535) {
+ fprintf(stderr, "vmchannel: wrong port number\n");
+ exit(1);
+ }
+ snprintf(name, 20, "vmchannel%ld\n", port);
+ vmchannel_hds[i].hd = qemu_chr_open(name, devname);
+ if (!vmchannel_hds[i].hd) {
+ fprintf(stderr, "qemu: could not open vmchannel device '%s'\n",
+ devname);
+ exit(1);
+ }
+ vmchannel_hds[i].port = port;
+ slirp_add_exec(3, vmchannel_hds[i].hd, 4, port);
+ qemu_chr_add_handlers(vmchannel_hds[i].hd, vmchannel_can_read,
+ vmchannel_read, NULL, &vmchannel_hds[i]);
+ }
+#endif
+
machine->init(ram_size, vga_ram_size, boot_devices, ds,
kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
next prev parent reply other threads:[~2009-01-08 9:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-08 9:55 [Qemu-devel] [PATCH v3 0/5] Marry slirp and qemu character device Gleb Natapov
2009-01-08 9:55 ` [Qemu-devel] [PATCH v3 1/5] Redirect slirp traffic to/from " Gleb Natapov
2009-01-08 9:55 ` Gleb Natapov [this message]
2009-01-08 19:21 ` [Qemu-devel] [PATCH v3 2/5] Add vmchannel command line option Anthony Liguori
2009-01-08 19:35 ` Daniel P. Berrange
2009-01-08 19:55 ` Anthony Liguori
2009-01-08 9:55 ` [Qemu-devel] [PATCH v3 3/5] Add slirp_restrict option Gleb Natapov
2009-01-08 9:55 ` [Qemu-devel] [PATCH v3 4/5] Add "restrict" and "ip" option to "user" net option Gleb Natapov
2009-01-08 9:55 ` [Qemu-devel] [PATCH v3 5/5] Add support for vmchannel socket migration Gleb Natapov
2009-01-08 19:27 ` [Qemu-devel] [PATCH v3 0/5] Marry slirp and qemu character device Anthony Liguori
2009-01-08 21:14 ` Gleb Natapov
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=20090108095544.12548.21251.stgit@dhcp-1-237.tlv.redhat.com \
--to=gleb@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).