On 06/27/2012 02:26 AM, Stefan Hajnoczi wrote:
On Tue, Jun 26, 2012 at 5:48 PM, Mike Lovell <m...@dev-zero.net> wrote:
you can connect multiple guests to a single vde_switch. as i understand it,
the communication happens over a local unix domain socket. this would limit
the guests on the same switch to the same host. so if you want guests on
multiple hosts to talk using vde, i think you need a vde_switch on each host
and then connect the vde_switch processes.
It can be done with socat or netcat (unix_domain_socket_a <-> TCP <->
unix_domain_socket_b):
http://www.dest-unreach.org/socat/doc/socat.html
Another idea is to take the QDES code and turn it into a freestanding
program that speaks the net/socket.c protocol. That way it works with
existing QEMUs: launch the qdes daemon, then launch qemu -netdev
socket,connect=qdes-host:qdes-port.
okay. so yes that would be possible. its complicated by the fact that
there are multiple unix domain sockets used between a vde client
application (like QEMU) and the vde_switch process and some of these are
dynamically created. clients connect to a control socket for the switch,
negotiate the creation of a new unix socket, and then pass traffic over
the new socket. whatever is starting the vde_switches and the qemu
guests will have to be aware of this and connect them.
this goes back to one of my original points. setting this up on multiple
physical hosts is more complex than QDES is. with QDES, you just need to
specify a ip and port on the physical host that is unique to each
process as well as specify a multicast ip and port thats the same for
all. no figuring out where the other virtual machines are running,
spawning additional processes, and connecting all of those processes
together. (i hope to eventually remove the need to specify the local
address and port)
also, connecting multiple guests on multiple hosts to a single
vde_switch instance results in a sub-optimal traffic flow. traffic from
a guest on one host will have to go to the host running the vde_switch
and then to the host with the destination guest. with QDES, the traffic
goes directly to the host running the destination guest.
i actually did my initial prototyping of QDES using an external python
app that talks to QEMU using the socket network backend. i used the udp
one instead of connect but it still worked. some of the future work i
intend to do is to have a few external applications that can talk to
other QDES as well. i want to do one that can forward packets between a
tap device and other QEMU processes so that regular systems can talk to
the QEMU virtual machines. doing another that talks to the QEMU sockets
backend would be possible as well. i do think there is some value in
having it built into QEMU in the ease of use.
mike