[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [RFC][RESEND][PATCH v1 09/15] virtproxy: add handler fo
From: |
Adam Litke |
Subject: |
[Qemu-devel] Re: [RFC][RESEND][PATCH v1 09/15] virtproxy: add handler for data packets |
Date: |
Wed, 03 Nov 2010 19:46:18 -0500 |
On Wed, 2010-11-03 at 10:28 -0500, Michael Roth wrote:
> Process VPPackets coming in from channel and send them to the
> appropriate server/client connections.
>
> Signed-off-by: Michael Roth <address@hidden>
> ---
> virtproxy.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 42 insertions(+), 0 deletions(-)
>
> diff --git a/virtproxy.c b/virtproxy.c
> index 6c3611b..57ab2b0 100644
> --- a/virtproxy.c
> +++ b/virtproxy.c
> @@ -235,6 +235,48 @@ static void vp_channel_accept(void *opaque)
> vp_set_fd_handler(drv->listen_fd, NULL, NULL, NULL);
> }
>
> +/* handle data packets
> + *
> + * process VPPackets containing data and send them to the corresponding
> + * FDs
> + */
> +static int vp_handle_data_packet(void *drv, const VPPacket *pkt)
> +{
> + int fd, ret;
> +
> + TRACE("called with drv: %p", drv);
> +
> + if (pkt->type == VP_PKT_CLIENT) {
> + TRACE("recieved client packet, client fd: %d, server fd: %d",
> + pkt->payload.proxied.client_fd,
> pkt->payload.proxied.server_fd);
> + fd = pkt->payload.proxied.server_fd;
> + } else if (pkt->type == VP_PKT_SERVER) {
> + TRACE("recieved server packet, client fd: %d, server fd: %d",
> + pkt->payload.proxied.client_fd,
> pkt->payload.proxied.server_fd);
> + fd = pkt->payload.proxied.client_fd;
> + } else {
> + TRACE("unknown packet type");
> + return -1;
> + }
> +
> + /* TODO: proxied in non-blocking mode can causes us to spin here
> + * for slow servers/clients. need to use write()'s and maintain
> + * a per-conn write queue that we clear out before sending any
> + * more data to the fd
> + */
Hmm, so a guest can cause a denial of service in the host qemu process?
Are you working on adding the write queues?
> + ret = vp_send_all(fd, (void *)pkt->payload.proxied.data,
> + pkt->payload.proxied.bytes);
> + if (ret == -1) {
> + LOG("error sending data over channel");
> + return -1;
> + } else if (ret != pkt->payload.proxied.bytes) {
> + TRACE("buffer full?");
This can happen? Does this bring the whole connection down? The whole
virtproxy instance?
--
Thanks,
Adam
- [Qemu-devel] Re: [RFC][RESEND][PATCH v1 01/15] virtproxy: base data structures and constants, (continued)
- [Qemu-devel] [RFC][RESEND][PATCH v1 03/15] virtproxy: add debug functions for virtproxy core, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 04/15] virtproxy: list look-up functions conns/oforwards/iforwards, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 05/15] virtproxy: add accept handler for communication channel, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 08/15] virtproxy: interfaces to set/remove/handle VPOForwards, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 09/15] virtproxy: add handler for data packets, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 10/15] virtproxy: add handler for control packet, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 14/15] virtproxy: Makefile/configure changes to build qemu-vp, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 11/15] virtproxy: add vp_handle_packet(), Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 12/15] virtproxy: interfaces to set/remove VPIForwards, Michael Roth, 2010/11/03
- [Qemu-devel] [RFC][RESEND][PATCH v1 07/15] virtproxy: add vp_new() VPDriver constructor, Michael Roth, 2010/11/03