qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Jim C. Brown" <jma5@umd.edu>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] tun/tap networking
Date: Fri, 30 Sep 2005 19:01:49 -0400	[thread overview]
Message-ID: <20050930230149.GA20433@jbrown.mylinuxbox.org> (raw)
In-Reply-To: <20050930221321.C7BED31C14@ravel.n2.net>

On Fri, Sep 30, 2005 at 03:13:21PM -0700, Don Kitchen wrote:
> I've used that one "pricey" product at work, but it always seemed a bit
> expensive for home users. But I only knew about some of the other emulators,
> the ones that are so slow you wonder why didn't they warn you not to
> bother downloading the thing to start with. But qemu has definately made
> it past usability barrier.
> 

Because qemu is not an emulator per se, it is properly called a dynamic
translator.

(It's a distinction that many will quarrel over for a long time. ;)

> I have some questions about the networking that I hope someone can answer.
> Qemu is able to use tun & tap devices. I've taken the tundev.c program,
> which opens a tun device and passes the fd to qemu, and compared it to
> the tapdev.c program (which qemu is also able to use) and there's very
> little difference to how it's opened. According to the little tun/tap
> documentation I understand, the tap descriptor should be providing
> ethernet frames instead of the IP packets [ethernet payloads] that tun
> should be providing. But qemu does not seem to differentiate between the
> two types of file descriptors passed by tundev and tapdev respectively,
> so I am a little confused how qemu can work with both types of fd's.
> 

I am confused as well. Are you sure that tundev.c creates a tun device? Or
is it creating a tap device that is named tun0?

Typically, tapX (tap0, tap1, etc) names are reserved for tap devices (ethernet
frames) and tunX (tun0, tun1, etc) are reserved for tun devices (IP frames).

qemu breaks those rules and calls the tap device that it creates tun0. This is
done for reasons that Fabrice has not made clear. (I assume there is a reason
for it because he has refused to apply any of the patches that fix this.)

qemu has no support for true tun devices. It only deals with ethernet frames,
so it only works with tap devices. You can tell because a tap device is
opened when you add a special flag, IFF_TAP, to the ifr_flags of the TUNSETIFF
ioctl call.

> I'm interested in the handling of ethernet frames because I haven't been
> able to get the bridge to pass packets between added interfaces (yes,
> they're all up and promisc) and I'm not too thrilled with networking being
> bridged anyway,

Do you mean the kernel bridge, br0? Or are you talking about some sort of
user space bridge, like bridged (which uses a series of packet sockets to
bridge between multiple ethernet (ethX) devices) ?

> and it seems to me that if an fd were hooked up to a
> BPF capturing everything from the real ethernet device in promiscuous
> mode, and pushing out any raw frames it receives, that I could bypass
> the bridge and make it as if the emulator's virtual ethernet device is
> a real one. Or is there some reason this won't work? (after all, other
> products don't have this, there must be a reason right?)

Ah, you're talking about using a packet socket, right?

That works fine for the most part. There is one thing that you have missed
though: guest->host communication doesn't work when you do that.

When you push out a raw frame, it leaves the real ethernet device before the
host sees it. So guest->host doesn't work. You need to find another way to
send packets from the guest to the host. Most host OSes will not let you
do this at all. (Windows seems to be the exception, winpcap's pcap_sendpacket()
appears to work fine for that job.)

VMware gets around this by using its kernel module: when the guest sends something
to the host, VMware passes the packet to its kernel module, which injects it
into the incoming packet stream. Without your own kernel module though, you
can't do this.

> 
> Thanks
> 
> 
> 
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
> 

-- 
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.

  parent reply	other threads:[~2005-09-30 23:07 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-30 22:13 [Qemu-devel] tun/tap networking Don Kitchen
2005-09-30 22:21 ` Henrik Nordstrom
2005-09-30 22:21 ` Paul Brook
2005-09-30 23:01 ` Jim C. Brown [this message]
2005-10-01  8:12   ` Jean-Christian de Rivaz
2005-10-01 13:12     ` Jim C. Brown
2005-10-01 20:24       ` Jean-Christian de Rivaz
2005-10-01 21:09         ` Jim C. Brown
2005-10-01 21:17           ` Jean-Christian de Rivaz
2005-10-01 20:47       ` [Qemu-devel] tun/tap networking: patch for existing tun Jean-Christian de Rivaz
2005-10-02  2:42         ` Henrik Nordstrom
2005-10-02  7:56           ` Jean-Christian de Rivaz
2005-10-02 10:24             ` Henrik Nordstrom
2005-10-02 16:53               ` Lars Munch
2005-10-02 17:50                 ` Jean-Christian de Rivaz
2005-10-02 19:47                   ` Jim C. Brown
2005-10-02 20:27                     ` Jean-Christian de Rivaz
2005-10-02 18:45             ` Anthony Liguori
2005-10-02 19:39               ` Jim C. Brown
2005-10-02 20:23                 ` Jean-Christian de Rivaz
2005-10-02 22:37                   ` Jim C. Brown
2005-10-03  9:46                     ` Jean-Christian de Rivaz
2005-10-03 12:04                       ` Jim C. Brown
2005-10-03 13:10                         ` Jean-Christian de Rivaz
2005-10-03 13:19                         ` Henrik Nordstrom
2005-10-03 13:13                       ` Henrik Nordstrom
2005-10-03 14:14                         ` Jean-Christian de Rivaz
2005-10-03 13:07                     ` Henrik Nordstrom
2005-10-03 14:00                       ` Jean-Christian de Rivaz
2005-10-03 15:04                       ` Jim C. Brown
2005-10-03 13:01                   ` Henrik Nordstrom
2005-10-03 13:58                     ` Jean-Christian de Rivaz
2005-10-03 15:06                     ` Jim C. Brown
2005-10-03 12:54                 ` Henrik Nordstrom
2005-10-03 15:14                   ` Jim C. Brown
2005-10-03 18:29                     ` Fabrice Bellard
2005-10-03 19:22                       ` Christian MICHON
2005-10-03 20:29                         ` Jean-Christian de Rivaz
2005-10-04  7:09                           ` Christian MICHON
2005-10-04  7:56                             ` Jean-Christian de Rivaz
2005-10-03 21:36                       ` Jim C. Brown
2005-10-04  8:23                       ` Matteo
2005-10-04 11:34                         ` Jim C. Brown
2005-10-01 17:49     ` [Qemu-devel] tun/tap networking Henrik Nordstrom
2005-10-01 20:54       ` Jean-Christian de Rivaz
2005-10-01 11:30   ` Oliver Gerlich
2005-10-01 13:07     ` Jim C. Brown
2005-10-01 13:50       ` Paul Brook
2005-10-01 21:15         ` Jim C. Brown
2005-10-02  2:21           ` Henrik Nordstrom
2005-10-01 17:52     ` Henrik Nordstrom

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=20050930230149.GA20433@jbrown.mylinuxbox.org \
    --to=jma5@umd.edu \
    --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).