All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Tim Foerster <tim.foerster@hetzner.com>,
	qemu-devel@nongnu.org, Jason Wang <jasowangio@gmail.com>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: QMP: exposing the host TAP interface name
Date: Thu, 17 Sep 2026 09:27:57 +0100	[thread overview]
Message-ID: <aqukjSkXD5XycdN-@redhat.com> (raw)
In-Reply-To: <CAJ+F1CLxsqfT302SGcq9vx5pgjrY3OiibmTpZHVtx1d-rXroVQ@mail.gmail.com>

On Wed, Sep 16, 2026 at 05:18:05PM +0400, Marc-André Lureau wrote:
> Hi
> 
> On Wed, Sep 16, 2026 at 10:22 AM Tim Foerster via qemu development
> <qemu-devel@nongnu.org> wrote:
> >
> > Hi,
> >
> > I'd like to query the host TAP interface name of a network backend via QMP, especially when the TAP FD is passed to QEMU using SCM_RIGHTS
> > and then assigned to a backend through fd=.
> >
> > In my current setup, retrieving this information externally requires CAP_SYS_PTRACE. This gives the management process far more access
> > than needed and conflicts with the Landlock sandboxing I want to apply, due to Landlock's ptrace restrictions [1].
> >
> > QEMU already owns the FD, and tap_fd_get_ifname() can retrieve the name using TUNGETIFF on Linux. For a TAP passed through fd=, x-query-
> > network currently reports the following (simplified):
> >
> > {
> >   "name": "hostnet0",
> >   "type": "tap",
> >   "info-str": "fd=42"
> > }
> >
> > I'd like to obtain the actual interface name in a structured field, regardless of how the TAP was created or passed to QEMU. For example:
> >
> > {
> >   "name": "hostnet0",
> >   "type": "tap",
> >   "info-str": "fd=42",
> >   "data": {
> >     "ifname": "vnet7"
> >   }
> > }
> >
> > Would extending x-query-network be the preferred approach? If so, would you prefer a dedicated ifname field or a type-specific data object
> > selected by the existing type field?
> 
> x- QMP commands are not meant for any other usage than debugging and
> testing (in fact, we should probably exclude them in production
> builds!). In particular, this command is currently only meant to be a
> HMP "info network" substitute for test/debugging only atm.
> 
> >
> > Personally, I'd prefer an approach that is reasonably easy to backport downstream to older QEMU releases. Since x-query-network is
> > relatively new, extending it would also require bringing that command to releases which don't have it yet, potentially increasing the
> > backporting effort.
> >
> > A type-specific data object could also accommodate additional TAP properties later, such as multiqueue mode or vnet_hdr. However, those
> > are outside my current scope, I only need the interface name.
> 
> I'd suggest a new query-network-tap(name: hostnet0) -> TAPInfo command
> for your specific case. Eventually, later, NetworkClientInfo could
> later embed that data.
> 
> Let see what other people & maintainers think

A minor nitpick about naming, on the command line and QMP command
we use the term 'netdev' for the modern config approach, rather
than "net" or "network" which is the original terminology prior
to "netdev".

On the general design though, IMHO, adding such narrow commands
is not very desirable.

On the input side we already have a data structure defined for
the input arguments to 'netdev-add', namely "Netdev", which
has fields for all the possible config options of all the
backends via a discriminated union.

In the case of TAP devices there are two scenarios - the low
level backend represented in NetdevTapOptions, and the high
level backend rerpesented in NetdevBridgeOptions.

The NetdevTapOptions struct already includes a "ifname" field.v
In the case of passing in an FD during 'netdev-add', 'fd' would
be set, while 'ifname' would be left unset.

It is reasonable to say, however, then upon querying the live
NetdevTapOptions, *only* the "ifname" field ought to be present,
either the orignal value from the user, or the derived value
from calling tap_fd_get_ifname(). 

IOW, what I'm saying is that if we want to query the live netdv
backend config, we should have:

   { 'command': 'query-netdevs', 'data': ['Netdev'] }

as a formal QAPI model.

Aside from the general plumbing work, two things to be aware of

 * After creating the netdev initially, we throw away the
   original "Netdev" struct data. We would need to preserve
   that struct, so that we can later report it back with
   query-netdevs. The TAP backend would also have to fill-in
   the 'ifname' field when given an 'fd' initially.


 * In theory someone could still be using '-net' instead
   of '-netdev', where IIUC, we will have an "Netdev"
   struct at any point.

   The idealized thing todo is to fold "-net" onto "-netdev"
   by making it synthesize a "Netdev" and then go through
   the Netdev setup code path, but their semantics aren't a
   perfect match which is why they're separate to begin
   with. So ignore that idea.

   The more practical thing to do is merely document that
   'query-netdevs' only reports on backends created via
   '-netdev' and thus declare '-net' compatibility entirely
   out of scope.

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



  parent reply	other threads:[~2026-09-17  8:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16  6:22 QMP: exposing the host TAP interface name Tim Foerster via qemu development
2026-09-16 13:18 ` Marc-André Lureau
2026-09-17  6:12   ` Tim Foerster via qemu development
2026-09-17  8:27   ` Daniel P. Berrangé [this message]
2026-09-17  9:13     ` Tim Foerster via qemu development
2026-09-17  9:51       ` Daniel P. Berrangé
2026-09-17 10:07         ` Tim Foerster via qemu development

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=aqukjSkXD5XycdN-@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=jasowangio@gmail.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tim.foerster@hetzner.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.