From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com
Subject: [PULL 01/15] net: Introduce NetClientInfo.check_peer_type()
Date: Fri, 15 Oct 2021 16:46:26 +0200 [thread overview]
Message-ID: <20211015144640.198044-2-kwolf@redhat.com> (raw)
In-Reply-To: <20211015144640.198044-1-kwolf@redhat.com>
Some network backends (vhost-user and vhost-vdpa) work only with
specific devices. At startup, they second guess what the command line
option handling will do and error out if they think a non-virtio device
will attach to them.
This second guessing is not only ugly, it can lead to wrong error
messages ('-device floppy,netdev=foo' should complain about an unknown
property, not about the wrong kind of network device being attached) and
completely ignores hotplugging.
Add a callback where backends can check compatibility with a device when
it actually tries to attach, even on hotplug.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20211008133442.141332-2-kwolf@redhat.com>
Reviewed-by: Damien Hedde <damien.hedde@greensocs.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/net/net.h | 2 ++
hw/core/qdev-properties-system.c | 6 ++++++
2 files changed, 8 insertions(+)
diff --git a/include/net/net.h b/include/net/net.h
index 5d1508081f..986288eb07 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -62,6 +62,7 @@ typedef struct SocketReadState SocketReadState;
typedef void (SocketReadStateFinalize)(SocketReadState *rs);
typedef void (NetAnnounce)(NetClientState *);
typedef bool (SetSteeringEBPF)(NetClientState *, int);
+typedef bool (NetCheckPeerType)(NetClientState *, ObjectClass *, Error **);
typedef struct NetClientInfo {
NetClientDriver type;
@@ -84,6 +85,7 @@ typedef struct NetClientInfo {
SetVnetBE *set_vnet_be;
NetAnnounce *announce;
SetSteeringEBPF *set_steering_ebpf;
+ NetCheckPeerType *check_peer_type;
} NetClientInfo;
struct NetClientState {
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index e71f5d64d1..a91f60567a 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -431,6 +431,12 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
goto out;
}
+ if (peers[i]->info->check_peer_type) {
+ if (!peers[i]->info->check_peer_type(peers[i], obj->class, errp)) {
+ goto out;
+ }
+ }
+
ncs[i] = peers[i];
ncs[i]->queue_index = i;
}
--
2.31.1
next prev parent reply other threads:[~2021-10-15 14:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-15 14:46 [PULL 00/15] qdev: Add JSON -device Kevin Wolf
2021-10-15 14:46 ` Kevin Wolf [this message]
2021-10-15 14:46 ` [PULL 02/15] net/vhost-user: Fix device compatibility check Kevin Wolf
2021-10-15 14:46 ` [PULL 03/15] net/vhost-vdpa: " Kevin Wolf
2021-10-15 14:46 ` [PULL 04/15] qom: Reduce use of error_propagate() Kevin Wolf
2021-10-15 14:46 ` [PULL 05/15] iotests/245: Fix type for iothread property Kevin Wolf
2021-10-15 14:46 ` [PULL 06/15] iotests/051: Fix typo Kevin Wolf
2021-10-15 14:46 ` [PULL 07/15] qdev: Avoid using string visitor for properties Kevin Wolf
2021-10-15 14:46 ` [PULL 08/15] qdev: Make DeviceState.id independent of QemuOpts Kevin Wolf
2021-10-15 14:46 ` [PULL 09/15] softmmu/qdev-monitor: add error handling in qdev_set_id Kevin Wolf
2021-10-15 14:46 ` [PULL 10/15] qemu-option: Allow deleting opts during qemu_opts_foreach() Kevin Wolf
2021-10-15 14:46 ` [PULL 11/15] qdev: Add Error parameter to hide_device() callbacks Kevin Wolf
2021-10-15 14:46 ` [PULL 12/15] virtio-net: Store failover primary opts pointer locally Kevin Wolf
2021-10-15 14:46 ` [PULL 13/15] virtio-net: Avoid QemuOpts in failover_find_primary_device() Kevin Wolf
2021-10-15 14:46 ` [PULL 14/15] qdev: Base object creation on QDict rather than QemuOpts Kevin Wolf
2022-07-01 13:37 ` Peter Maydell
2022-07-04 4:49 ` Markus Armbruster
2022-07-05 9:57 ` Markus Armbruster
2022-07-07 20:24 ` Peter Maydell
2022-07-08 11:40 ` The case for array properties (was: [PULL 14/15] qdev: Base object creation on QDict rather than QemuOpts) Markus Armbruster
2022-07-08 11:50 ` Daniel P. Berrangé
2022-07-08 12:41 ` The case for array properties Markus Armbruster
2022-07-11 10:48 ` The case for array properties (was: [PULL 14/15] qdev: Base object creation on QDict rather than QemuOpts) Peter Maydell
2022-07-27 19:59 ` [PULL 14/15] qdev: Base object creation on QDict rather than QemuOpts Kevin Wolf
2021-10-15 14:46 ` [PULL 15/15] vl: Enable JSON syntax for -device Kevin Wolf
2021-10-15 20:26 ` [PULL 00/15] qdev: Add JSON -device Richard Henderson
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=20211015144640.198044-2-kwolf@redhat.com \
--to=kwolf@redhat.com \
--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 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.