qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC][PATCH v2 00/19] virtproxy: host/guest communication layer
@ 2010-11-10 22:27 Michael Roth
  2010-11-10 22:27 ` [Qemu-devel] [RFC][PATCH v2 01/19] virtproxy: base data structures and constants Michael Roth
                   ` (19 more replies)
  0 siblings, 20 replies; 21+ messages in thread
From: Michael Roth @ 2010-11-10 22:27 UTC (permalink / raw)
  To: qemu-devel; +Cc: agl, abeekhof, mdroth, aliguori, ryanh, amit.shah

OVERVIEW:

Virtproxy proxies and multiplexes socket streams over a data channel between a host and a guest (currently network connections, emulated serial, or virtio-serial channels are supported). This allows for services such as guest data collection agents, host/guest file transfer, and event generation/handling to be implemented/deployed as basic socket-based daemons, independently of the actual data channel.

This code is intended to provide a channel-independent abstraction layer for communicating with a QEMU-specific guest agent (in particular, the virtagent RPC guest agent which will follow this in a seperate patchset), but may have general utility beyond this (for instance: ssh/sftp/other guest agents/etc over isa/virtio serial), and so is submitted here as a seperate patchset.

CHANGES IN V2:
 - host daemon deprecated, virtproxy now integrated into qemu via a virtproxy chardev. The command-line options have not yet been converted over so for now the virtproxy layer is no longer testable directly. This will be addressed soon. Virtagent will hook into this chardev via a boolean chardev option. That patchset will follow this one shortly.
 - deadlocking issue resolved

BUILD/USAGE INFO:
  # build guest daemon
  make qemu-vp
  ./qemu-vp -h

EXAMPLE USAGE:

note: oforward/iforward chardev options have not yet been converted over from original standalone host daemon implementation so this won't work till then. The examples however have been updated for reference.

 - Proxy http and ssh connections from a host to a guest over a virtio-serial connection:
    # start guest with virtio-serial. for example (RHEL6s13):
    qemu \
    -device virtio-serial \
    -chardev virtproxy,id=test0, \
             oforward=http:127.0.0.1:9080,oforward=ssh:127.0.0.1:22 \
    -device virtconsole,chardev=test0,name=test0 \
    ...
    # in the guest:
    ./qemu-vp -c virtserial-open:/dev/virtio-ports/test2:- -i http:127.0.0.1:80 \
              -i ssh:127.0.0.1:22

    # from host, access guest http server
    wget http://locahost:9080
    # from host, access guest ssh server
    ssh localhost -p 9022

By specifying -i and -o options in the host and guest, respectively, the channel can also be used to establish connections from a guest to a host.

KNOWN ISSUES:

 - Sync issues with virtio-serial: This may or may not be related to the issue above, but I noticed some cases where proxied ssh sessions from the guest to the host would "lag" by a few bytes. For instance typing "top" would result in "to" being displayed, and the "p" wouldn't show up till I hit another key. This could be related to how I'm handling the buffering, but I haven't been able to reproduce using a network-based channel. UPDATE: this issue seems to be fixed here:

    http://git.kernel.org/?p=linux/kernel/git/rusty/linux-2.6-for-linus.git;a=commit;h=6df7aadcd9290807c464675098b5dd2dc9da5075

TODO:

 - Better channel negotiation to gracefully handle guest reboots/disconnects/etc
 - Port qemu-vp -i/-o options to chardev options
 - Add monitor commands to add/remove virtproxy channels/oforwards/iforwards on the fly

 .gitignore          |    1 +
 Makefile            |    4 +-
 Makefile.target     |    2 +-
 configure           |    1 +
 qemu-char.c         |   43 +++
 qemu-vp.c           |  624 +++++++++++++++++++++++++++++++++++++
 roms/seabios        |    2 +-
 virtproxy-builtin.c |   38 +++
 virtproxy.c         |  863 +++++++++++++++++++++++++++++++++++++++++++++++++++
 virtproxy.h         |   47 +++
 10 files changed, 1622 insertions(+), 3 deletions(-)

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2010-11-10 23:47 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-10 22:27 [Qemu-devel] [RFC][PATCH v2 00/19] virtproxy: host/guest communication layer Michael Roth
2010-11-10 22:27 ` [Qemu-devel] [RFC][PATCH v2 01/19] virtproxy: base data structures and constants Michael Roth
2010-11-10 22:27 ` [Qemu-devel] [RFC][PATCH v2 02/19] virtproxy: qemu-vp, standalone daemon skeleton Michael Roth
2010-11-10 22:27 ` [Qemu-devel] [RFC][PATCH v2 03/19] virtproxy: add debug functions for virtproxy core Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 04/19] virtproxy: list look-up functions conns/oforwards/iforwards Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 05/19] virtproxy, add vp_channel_send_all Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 06/19] virtproxy: add accept handler for communication channel Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 07/19] virtproxy: add read " Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 08/19] virtproxy: add vp_new() VPDriver constructor Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 09/19] virtproxy: interfaces to set/remove/handle VPOForwards Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 10/19] virtproxy: add handler for data packets Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 11/19] virtproxy: add handler for control packet Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 12/19] virtproxy: add vp_handle_packet() Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 13/19] virtproxy: interfaces to set/remove VPIForwards Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 14/19] virtproxy: add read handler for proxied connections Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 15/19] virtproxy: add virtproxy-builtin.c for compat defs Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 16/19] virtproxy: qemu integration, add virtproxy chardev Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 17/19] virtproxy: qemu integration, add virtproxy to Makefile.targets Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 18/19] virtproxy: qemu-vp, main logic Michael Roth
2010-11-10 22:28 ` [Qemu-devel] [RFC][PATCH v2 19/19] virtproxy: Makefile/configure changes to build qemu-vp Michael Roth
2010-11-10 23:47 ` [Qemu-devel] [RFC][PATCH v2 00/19] virtproxy: host/guest communication layer Michael Roth

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).