native vde support
PATCH 1/1 native vde support
Hi!
The patch I'm proposing here adds native support to Virtual Distributed Ethernet using libvdeplug.
A small example:
- patch latest svn with the attached patch
- configure qemu to use vde support (disabled by default) using "./configure --enable-vde"
- start a vde switch
vde_switch -F -sock /tmp/my_qemu_test
- start qemu (full syntax explanation is in the qemu-doc and appears into qemu online help if it's compiled with vde support) qemu -net nic -net vde,sock=/tmp/my_qemu_test linux-0.2.img
What is VDE?
Virtual Distributed Ethernet is a virtual network that can be spawned over a set of physical computer over the Internet and that can be shared between physical hosts and various kinds of virtual machines. vde_switch, core app of VDE framework, is an evolution of uml_switch. The project was originally written by Renzo Davoli and now is maintained and developed by Virtualsquare Team (which I'm part of).
For more information and simple examples of vde usage visit:
http://wiki.virtualsquare.org/index.php/VDE and
http://wiki.virtualsquare.org/index.php/VDE_Basic_Networking
Why add native support to VDE?
Nowadays a number of qemu instances already use vde networking, to give you an idea simply search "qemu vde" on google, or think that vde is the recommended networking tool for qemu in major distributions as debian or ubuntu (and maybe others..), so in my opinion native vde networking will be widely used!
What's wrong with the present solution?
What are you doing with your patch?
Unfortunately at the moment qemu is connected to a vde_switch through a dirty hack called 'vdeq' which places itself in the middle between the two applications.
The life of a vdeq is quite simple:
- do some tricky syntax parsing and mangling
- connect to vde_switch using libvdeplug
- open socketpair
- fork qemu giving him one end of socketpair
- enter a loop to forward data between vde_switch and qemu
- when qemu exits close the connection with vde_switch
This is of course far from being optimal for obvious reasons, so with my patch I simply put into qemu the part of vdeq which connects/disconnects to vde_switch and send/receive data to it.
Please tell me what do you think about this idea and the attached patch, thank you!
Regards,
Luca
Signature · 4 lines
Beware of programmers who carry screwdrivers.
-- Leonard Brandwein
http://shammash.homelinux.org/ - http://www.artha.org/ - http://www.yue.it/Makefile.target +1 -1
@@ -652,7 +652,7 @@ endif $(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a - $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) + $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS) endif # !CONFIG_USER_ONLY
vl.c +101 -0
131 lines not on this page · raw message
Makefile +4 -0
@@ -127,6 +127,10 @@ OBJS+=$(addprefix slirp/, $(SLIRP_OBJS)) endif +ifdef CONFIG_VDE +LIBS+=-lvdeplug +endif + cocoa.o: cocoa.m $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
qemu-doc.texi +15 -0
@@ -672,6 +672,21 @@ /path/to/linux ubd0=/path/to/root_fs eth0=mcast @end example +@item -net vde[,vlan=@var{n}][,sock=@var{socketpath}][,port=@var{n}][,group=@var{groupname}][,mode=@var{octalmode}] +Connect VLAN @var{n} to PORT @var{n} of a vde switch running on host and +listening for incoming connections on @var{socketpath}. Use GROUP @var{groupname} +and MODE @var{octalmode} to change default ownership and permissions for +communication port. This option is available only if QEMU has been compiled +with vde support enabled. + +Example: +@example +# launch vde switch +vde_switch -F -sock /tmp/myswitch +# launch QEMU instance +qemu linux.img -net nic -net vde,sock=/tmp/myswitch +@end example + @item -net none Indicate that no network devices should be configured. It is used to override the default configuration (@option{-net nic -net user}) which
configure +23 -0
@@ -89,6 +89,7 @@ EXESUF="" gdbstub="yes" slirp="yes" +vde="no" fmod_lib="" fmod_inc="" vnc_tls="yes"
@@ -280,6 +281,8 @@ ;; --disable-slirp) slirp="no" ;; + --enable-vde) vde="yes" + ;; --disable-kqemu) kqemu="no" ;; --disable-brlapi) brlapi="no"
@@ -432,6 +435,7 @@ echo " --fmod-inc path to FMOD includes" echo " --enable-uname-release=R Return R for uname -r in usermode emulation" echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" +echo " --enable-vde enable support for vde network [$vde]" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1
@@ -722,6 +726,19 @@ fi ########################################## +# vde libraries probe +if test "$vde" = "yes" ; then + vde=no + cat > $TMPC << EOF +#include <libvdeplug.h> +int main(void) { struct vde_open_args a = {0, 0, 0} ; return 0;} +EOF + if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then + vde=yes + fi +fi + +########################################## # Sound support libraries probe audio_drv_probe()
@@ -868,6 +885,7 @@ [ ! -z "$uname_release" ] && \ echo "uname -r $uname_release" echo "NPTL support $nptl" +echo "vde support $vde" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -1032,6 +1050,11 @@ echo "CONFIG_SLIRP=yes" >> $config_mak echo "#define CONFIG_SLIRP 1" >> $config_h fi +if test "$vde" = "yes" ; then + echo "CONFIG_VDE=yes" >> $config_mak + echo "#define CONFIG_VDE 1" >> $config_h + echo "VDE_LIBS=-lvdeplug" >> $config_mak +fi for card in $audio_card_list; do def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'` echo "$def=yes" >> $config_mak
Quoted 2 lines · Luca Bigliardi
The patch I'm proposing here adds native support to Virtual Distributed Ethernet using libvdeplug.
Yes, yes, yes, please!
Quoted 6 lines
Why add native support to VDE?
Nowadays a number of qemu instances already use vde networking, to give you an idea simply search "qemu vde" on google, or think that vde is the recommended networking tool for qemu in major distributions as debian or ubuntu (and maybe others..), so in my opinion native vde networking will be widely used!
I tried a number of different networking options when I first started using qemu and VDE is the one that works best for me. I'd love to see this go in.
Cheers,
Erik
Signature · 5 lines
----------------------------------------------------------------- Erik de Castro Lopo ----------------------------------------------------------------- "Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin." - John Von Neumann (1951)
Quoted 2 lines · Luca Bigliardi
The patch I'm proposing here adds native support to Virtual Distributed Ethernet using libvdeplug.
Is someone with commit rights able to have a look at this patch?
If its not up to scratch now, please point out the problems so it can be fixed and re-submitted.
Cheers,
Erik
Signature · 6 lines
----------------------------------------------------------------- Erik de Castro Lopo ----------------------------------------------------------------- Seen on usenet (possibly a quote from an IBM exec): "Each large company needs its Vietnam, and Microsoft will experience it with NT..."
Quoted 9 lines · Luca Bigliardi
Hi!
The patch I'm proposing here adds native support to Virtual Distributed Ethernet using libvdeplug.
A small example:
- patch latest svn with the attached patch
- configure qemu to use vde support (disabled by default) using "./configure --enable-vde"
When no libvdeplug is available it silently ignores the user selection. I changed that, removed a hardcoded -lvdeplug in Makefile, and committed the result.
Thiemo
Quoted 3 lines · Thiemo Seufer
When no libvdeplug is available it silently ignores the user selection. I changed that, removed a hardcoded -lvdeplug in
Makefile, and committed the result.
Awesome Thiemo. Thanks. I'll test that some time over the next couple of days.
Erik
Signature · 9 lines
-----------------------------------------------------------------
Erik de Castro Lopo
-----------------------------------------------------------------
Everything that I've learned about computers I have boiled
down into three principles:
PC/Windows: You think it won't work, and it won't.
Macintosh: You think it will work, but it won't.
Unix: You think it won't work, but if you find the right
guru, you can make it work.Quoted 13 lines · Thiemo Seufer
Quoted 10 lines · Luca Bigliardi
Hi!
The patch I'm proposing here adds native support to Virtual Distributed Ethernet using libvdeplug.
A small example:
- patch latest svn with the attached patch
- configure qemu to use vde support (disabled by default) using "./configure --enable-vde"
Quoted 4 lines
When no libvdeplug is available it silently ignores the user selection. I changed that, removed a hardcoded -lvdeplug in
Makefile, and committed the result.
I've changed it to enable vde support by default if the library is present and changed --enable-vde to --disable-vde.
This is how we use other external libraries (like gnutls). Since the user has to explicitly ask to use libvde, there seems to be no harm in enabling it by default.
Regards,
Anthony Liguori
Quoted 4 lines
Thiemo
Quoted 6 lines · Anthony Liguori
I've changed it to enable vde support by default if the library is present and changed --enable-vde to --disable-vde.
This is how we use other external libraries (like gnutls). Since the user has to explicitly ask to use libvde, there seems to be no harm in enabling it by default.
Even better. Thanks Anthony.
Cheers,
Erik
Signature · 5 lines
----------------------------------------------------------------- Erik de Castro Lopo ----------------------------------------------------------------- "There is no satisfactory substitute for excellence." -- Dr. Arnold O. Beckman