qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Sebastian Herbszt" <herbszt@gmx.de>
To: Jung-uk Kim <jkim@FreeBSD.org>
Cc: Juergen Lock <nox@jelal.kn-bremen.de>, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] networking using libpcap
Date: Fri, 18 Jul 2008 18:12:59 +0200	[thread overview]
Message-ID: <043901c8e8f1$6150b260$0201a8c0@zeug> (raw)
In-Reply-To: 200807171812.41200.jkim@FreeBSD.org

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

  reply	other threads:[~2008-07-18 16:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-17 22:12 [Qemu-devel] Re: [PATCH] networking using libpcap Jung-uk Kim
2008-07-18 16:12 ` Sebastian Herbszt [this message]
2008-07-18 20:39   ` Jung-uk Kim
2008-07-18 23:07     ` Jung-uk Kim
2008-07-21 15:35     ` Sebastian Herbszt
2008-07-25 20:51     ` Anthony Liguori
2008-07-26 17:30       ` Sebastian Herbszt
2008-07-27  0:28         ` Anthony Liguori
2008-07-27 12:55       ` Paul Brook
2008-07-23  1:55 ` Anthony Liguori
  -- strict thread matches above, loose matches on Subject: below --
2008-07-02 15:02 [Qemu-devel] " Ulrich Hecht
2008-07-02 23:39 ` [Qemu-devel] " Sebastian Herbszt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='043901c8e8f1$6150b260$0201a8c0@zeug' \
    --to=herbszt@gmx.de \
    --cc=jkim@FreeBSD.org \
    --cc=nox@jelal.kn-bremen.de \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).