[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH] networking using libpcap
From: |
Sebastian Herbszt |
Subject: |
[Qemu-devel] Re: [PATCH] networking using libpcap |
Date: |
Fri, 18 Jul 2008 18:12:59 +0200 |
Jung-uk Kim wrote:
Since someone showed interest, I updated my patches against trunk. :-)
http://people.freebsd.org/~jkim/qemu-pcap-20080717.diff
I turned it off by default for now. If you want to enable it, do:
configure --enable-pcap
To avoid confusion please change the pcap probe to error instead of
silently setting pcap=no. Take a look at audio_drv_probe.
Works perfect for me and allows access to the local Ethernet right
out of the box, very much unlike tap and bridging. The attached
version applies to trunk.
I have modified (e.g. got rid of threads) the original patch from
the forum and am using it here on Windows. It works fine but
performance is pretty low.
*After* applying the new patch:
cp -p vl.c vl.c.orig
sed -e 's/#ifdef PCAP_SET_FILTER/#if 1/g' vl.c > vl.c.tmp
mv vl.c.tmp vl.c
and try again? BTW, I have no real experience with WinPcap, so don't
kill me if it does not work for you. ;-)
Using pcap_setfilter helps and colinux (conet-bridged-daemon) does use
one too. Currently your filter is
"ether dst 52:54:00:12:34:56 or ((broadcast or multicast) and not ether src
52:54:00:12:34:56)".
The filter used by colinux is
"(ether dst 00:ff:81:24:00:00) or (ether broadcast or multicast) or (ip broadcast or
multicast)".
The "and not ether src 52:54:00:12:34:56" part in your filter prevents the VM
from seeing own
packets. It doesn't reply to own "ping broadcast" where it does in colinux and
VMware Server.
+ifdef CONFIG_PCAP
+LIBS+=-lpcap
+endif
On Windows it should be -lwpcap.
Thanks for the tip!
+ if ((fd = pcap_get_selectable_fd(s->handle)) < 0) {
+ fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
+ goto fail;
+ }
+ qemu_set_fd_handler(fd, pcap_send, NULL, s);
pcap_get_selectable_fd() is not available on Windows. I just put
pcap_send() in main_loop_wait().
I added WinPcap API support from WinPcap manual pages but I have no
way of checking. Can you try the patch and letting me know?
Since you use the winpcap win32 only parts there is the following warning:
vl.c: In function `net_pcap_init':
vl.c:4247: warning: implicit declaration of function `pcap_getevent'
vl.c:4247: warning: assignment makes pointer from integer without a cast
You can avoid it by defining WPCAP in vl.c:
#if defined(CONFIG_PCAP)
#ifdef _WIN32
#define WPCAP 1
#endif
#include <pcap.h>
#endif
I noticed that if no ifname is passed you try to get one with pcap_lookupdev.
This is broken on winpcap, please see
http://www.winpcap.org/pipermail/winpcap-bugs/2006-May/000220.html
I am not sure if pcap_lookupdev() gets you the "right" interface on non-win32,
so maybe just require ifname (tap does it too)?
Otherwise it seems to compile and run fine.
- Sebastian
- [Qemu-devel] Re: [PATCH] networking using libpcap, Jung-uk Kim, 2008/07/17
- [Qemu-devel] Re: [PATCH] networking using libpcap,
Sebastian Herbszt <=
- [Qemu-devel] Re: [PATCH] networking using libpcap, Jung-uk Kim, 2008/07/18
- [Qemu-devel] Re: [PATCH] networking using libpcap, Jung-uk Kim, 2008/07/18
- [Qemu-devel] Re: [PATCH] networking using libpcap, Sebastian Herbszt, 2008/07/21
- Re: [Qemu-devel] Re: [PATCH] networking using libpcap, Anthony Liguori, 2008/07/25
- Re: [Qemu-devel] Re: [PATCH] networking using libpcap, Sebastian Herbszt, 2008/07/26
- Re: [Qemu-devel] Re: [PATCH] networking using libpcap, Anthony Liguori, 2008/07/26
- Re: [Qemu-devel] Re: [PATCH] networking using libpcap, Paul Brook, 2008/07/27
Re: [Qemu-devel] Re: [PATCH] networking using libpcap, Anthony Liguori, 2008/07/22