All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>,
	qemu-devel@nongnu.org, Laine Stump <laine@redhat.com>
Subject: Re: [Qemu-devel] [RFC] net: Peer with existing NIC in netdev_add
Date: Thu, 1 Nov 2012 13:31:53 +0200	[thread overview]
Message-ID: <20121101113153.GA3993@redhat.com> (raw)
In-Reply-To: <20121101095352.GA16264@stefanha-thinkpad.redhat.com>

On Thu, Nov 01, 2012 at 10:53:52AM +0100, Stefan Hajnoczi wrote:
> On Wed, Oct 31, 2012 at 06:34:07PM +0200, Michael S. Tsirkin wrote:
> > On Wed, Oct 31, 2012 at 03:51:08PM +0100, Stefan Hajnoczi wrote:
> > > On Wed, Oct 31, 2012 at 10:57:24AM +0200, Michael S. Tsirkin wrote:
> > > > On Wed, Oct 31, 2012 at 09:07:27AM +0100, Stefan Hajnoczi wrote:
> > > > > On Tue, Oct 30, 2012 at 05:24:06PM +0200, Michael S. Tsirkin wrote:
> > > > > > On Wed, Oct 24, 2012 at 02:49:21PM +0200, Stefan Hajnoczi wrote:
> > > > > > > Allow netdev_del followed by netdev_add to re-peer a NIC and its netdev:
> > > > > > > 
> > > > > > >   (qemu) info network
> > > > > > >   virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
> > > > > > >    \ netdev0: type=user,net=10.0.2.0,restrict=off
> > > > > > > 
> > > > > > >   (qemu) netdev_del netdev0
> > > > > > > 
> > > > > > >   (qemu) netdev_add socket,id=netdev0,listen=:1234
> > > > > > > 
> > > > > > >   (qemu) info network
> > > > > > >   virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
> > > > > > >    \ netdev0: type=socket,
> > > > > > > 
> > > > > > > This makes it possible to switch netdev while the guest is running.  It
> > > > > > > is not necessary to reset the NIC.
> > > > > > > 
> > > > > > > Note that the NIC's link goes down in netdev_del and back up again in
> > > > > > > netdev_add.  Therefore the guest becomes aware that the network has
> > > > > > > changed, although this depends on the emulated NIC model providing link
> > > > > > > status change interrupts.
> > > > > > > 
> > > > > > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > > > > > 
> > > > > > I'd be surprised if this patch worked when one or both backends are tap.
> > > > > > tap supports offloads but slirp doesn't, since guest
> > > > > > probes offloads at startup, it assumes it can use offloads.
> > > > > > We also program tap during device operation e.g. on set features.
> > > > > > vhost operation could also be interesting, have not looked into it.
> > > > > 
> > > > > Yes, I left a TODO in the RFC patch and described the issue below.
> > > > > We'll have to reject incompatible netdevs.
> > > > 
> > > > Ideally, we'd probe all backend capabilities at init time.
> > > > However, looks like we allowed netdev and device creation in any order.
> > > > Can we change this and require netdev always be there before device?
> > > 
> > > I don't think the order is a problem.  The relaxed order is only
> > > relevant during startup from main() - but in that case we have no
> > > constraints yet anyway.
> > > The problem only occurs when netdev_add is used to create an
> > > incompatible netdev after devices have initialized.  We should be able
> > > to check and error out in the code that my RFC patch modifies.  If
> > > constraints are violated then netdev_add can fail with an error (the new
> > > netdev is not created and the QMP client needs to try again with a
> > > compatible netdev configuration).
> > > 
> > > Maybe I'm misunderstanding your point?
> > > 
> > > Stefan
> > 
> > OK so if we basically require same type backend then I think it's mostly
> > fine.  I was trying to think of a way to allow changing backend type,
> > this becomes messy very quickly.  In partuclar macvtap probably
> > shouldn't be swapped with tap even though they are the same type
> > formally.
> 
> As long as they are offload-compatible, I think they can be swapped.
> It's up to the user or the management stack to make sure switching
> netdevs makes "sense".  So the network may be different and the guest
> needs to DHCP again, but that's the user's problem.

I think a simple rule like "use same backend type" is better than
an opaque one "are offload-compatible" - user has no idea
which offloads do each of the frontends and backends support.
Also if in future we add offloads to backend X suddenly we
break ability to swap with backend Y.
Let's keep it simple.

> Is there a reason why macvtap <-> tap won't work given compatible
> vnet_hdr offload?
> 
> Stefan

There's no guarantee they will support same offload options in all
kernels, in fact thats' not the case in some kernel.org kernels.


-- 
MST

  reply	other threads:[~2012-11-01 11:29 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-24 12:49 [Qemu-devel] [RFC] net: Peer with existing NIC in netdev_add Stefan Hajnoczi
2012-10-30 15:24 ` Michael S. Tsirkin
2012-10-31  8:07   ` Stefan Hajnoczi
2012-10-31  8:57     ` Michael S. Tsirkin
2012-10-31 14:51       ` Stefan Hajnoczi
2012-10-31 16:34         ` Michael S. Tsirkin
2012-11-01  9:53           ` Stefan Hajnoczi
2012-11-01 11:31             ` Michael S. Tsirkin [this message]
2012-11-02 10:32               ` Stefan Hajnoczi
2012-11-02 10:34 ` Stefan Hajnoczi

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=20121101113153.GA3993@redhat.com \
    --to=mst@redhat.com \
    --cc=laine@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.