Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2016-07-19' into staging
QAPI patches for 2016-07-19 # gpg: Signature made Tue 19 Jul 2016 19:35:27 BST # gpg: using RSA key 0x3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-qapi-2016-07-19: net: Use correct type for bool flag qapi: Change Netdev into a flat union block: Simplify drive-mirror block: Simplify block_set_io_throttle qapi: Implement boxed types for commands/events qapi: Plumb in 'boxed' to qapi generator lower levels qapi-event: Simplify visit of non-implicit data qapi: Drop useless gen_err_check() qapi: Add type.is_empty() helper qapi: Hide tag_name data member of variants qapi: Special case c_name() for empty type qapi: Require all branches of flat union enum to be covered net: use Netdev instead of NetClientOptions in client init qapi: change QmpInputVisitor to QSLIST qapi: change QmpOutputVisitor to QSLIST Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3b2e6798ff
95 files changed
+700
-509
No files matched your search
+10
-10
@@ -27,39 +27,39 @@
|
||||
#include "net/net.h"
|
||||
#include "qapi-types.h"
|
||||
|
||||
int net_init_dump(const NetClientOptions *opts, const char *name,
|
||||
int net_init_dump(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
#ifdef CONFIG_SLIRP
|
||||
int net_init_slirp(const NetClientOptions *opts, const char *name,
|
||||
int net_init_slirp(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
#endif
|
||||
|
||||
int net_init_hubport(const NetClientOptions *opts, const char *name,
|
||||
int net_init_hubport(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
int net_init_socket(const NetClientOptions *opts, const char *name,
|
||||
int net_init_socket(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
int net_init_tap(const NetClientOptions *opts, const char *name,
|
||||
int net_init_tap(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
int net_init_bridge(const NetClientOptions *opts, const char *name,
|
||||
int net_init_bridge(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
int net_init_l2tpv3(const NetClientOptions *opts, const char *name,
|
||||
int net_init_l2tpv3(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
#ifdef CONFIG_VDE
|
||||
int net_init_vde(const NetClientOptions *opts, const char *name,
|
||||
int net_init_vde(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NETMAP
|
||||
int net_init_netmap(const NetClientOptions *opts, const char *name,
|
||||
int net_init_netmap(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
#endif
|
||||
|
||||
int net_init_vhost_user(const NetClientOptions *opts, const char *name,
|
||||
int net_init_vhost_user(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp);
|
||||
|
||||
#endif /* QEMU_NET_CLIENTS_H */
|
||||
+4
-4
@@ -172,14 +172,14 @@ static void dumpclient_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_dump_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_DUMP,
|
||||
.type = NET_CLIENT_DRIVER_DUMP,
|
||||
.size = sizeof(DumpNetClient),
|
||||
.receive = dumpclient_receive,
|
||||
.receive_iov = dumpclient_receive_iov,
|
||||
.cleanup = dumpclient_cleanup,
|
||||
};
|
||||
|
||||
int net_init_dump(const NetClientOptions *opts, const char *name,
|
||||
int net_init_dump(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
int len, rc;
|
||||
@@ -189,8 +189,8 @@ int net_init_dump(const NetClientOptions *opts, const char *name,
|
||||
NetClientState *nc;
|
||||
DumpNetClient *dnc;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
|
||||
dump = opts->u.dump.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_DUMP);
|
||||
dump = &netdev->u.dump;
|
||||
|
||||
assert(peer);
|
||||
|
||||
|
||||
+1
-1
@@ -201,7 +201,7 @@ static void netfilter_complete(UserCreatable *uc, Error **errp)
|
||||
}
|
||||
|
||||
queues = qemu_find_net_clients_except(nf->netdev_id, ncs,
|
||||
NET_CLIENT_OPTIONS_KIND_NIC,
|
||||
NET_CLIENT_DRIVER_NIC,
|
||||
MAX_QUEUE_NUM);
|
||||
if (queues < 1) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "netdev",
|
||||
|
||||
@@ -131,7 +131,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_hub_port_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_HUBPORT,
|
||||
.type = NET_CLIENT_DRIVER_HUBPORT,
|
||||
.size = sizeof(NetHubPort),
|
||||
.can_receive = net_hub_port_can_receive,
|
||||
.receive = net_hub_port_receive,
|
||||
@@ -266,10 +266,10 @@ int net_hub_id_for_client(NetClientState *nc, int *id)
|
||||
{
|
||||
NetHubPort *port;
|
||||
|
||||
if (nc->info->type == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_HUBPORT) {
|
||||
port = DO_UPCAST(NetHubPort, nc, nc);
|
||||
} else if (nc->peer != NULL && nc->peer->info->type ==
|
||||
NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
||||
NET_CLIENT_DRIVER_HUBPORT) {
|
||||
port = DO_UPCAST(NetHubPort, nc, nc->peer);
|
||||
} else {
|
||||
return -ENOENT;
|
||||
@@ -281,14 +281,14 @@ int net_hub_id_for_client(NetClientState *nc, int *id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_init_hubport(const NetClientOptions *opts, const char *name,
|
||||
int net_init_hubport(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
const NetdevHubPortOptions *hubport;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_HUBPORT);
|
||||
assert(!peer);
|
||||
hubport = opts->u.hubport.data;
|
||||
hubport = &netdev->u.hubport;
|
||||
|
||||
net_hub_add_port(hubport->hubid, name);
|
||||
return 0;
|
||||
@@ -315,14 +315,14 @@ void net_hub_check_clients(void)
|
||||
}
|
||||
|
||||
switch (peer->info->type) {
|
||||
case NET_CLIENT_OPTIONS_KIND_NIC:
|
||||
case NET_CLIENT_DRIVER_NIC:
|
||||
has_nic = 1;
|
||||
break;
|
||||
case NET_CLIENT_OPTIONS_KIND_USER:
|
||||
case NET_CLIENT_OPTIONS_KIND_TAP:
|
||||
case NET_CLIENT_OPTIONS_KIND_SOCKET:
|
||||
case NET_CLIENT_OPTIONS_KIND_VDE:
|
||||
case NET_CLIENT_OPTIONS_KIND_VHOST_USER:
|
||||
case NET_CLIENT_DRIVER_USER:
|
||||
case NET_CLIENT_DRIVER_TAP:
|
||||
case NET_CLIENT_DRIVER_SOCKET:
|
||||
case NET_CLIENT_DRIVER_VDE:
|
||||
case NET_CLIENT_DRIVER_VHOST_USER:
|
||||
has_host_dev = 1;
|
||||
break;
|
||||
default:
|
||||
|
||||
+4
-4
@@ -516,7 +516,7 @@ static void net_l2tpv3_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_l2tpv3_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_L2TPV3,
|
||||
.type = NET_CLIENT_DRIVER_L2TPV3,
|
||||
.size = sizeof(NetL2TPV3State),
|
||||
.receive = net_l2tpv3_receive_dgram,
|
||||
.receive_iov = net_l2tpv3_receive_dgram_iov,
|
||||
@@ -524,7 +524,7 @@ static NetClientInfo net_l2tpv3_info = {
|
||||
.cleanup = net_l2tpv3_cleanup,
|
||||
};
|
||||
|
||||
int net_init_l2tpv3(const NetClientOptions *opts,
|
||||
int net_init_l2tpv3(const Netdev *netdev,
|
||||
const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
@@ -545,8 +545,8 @@ int net_init_l2tpv3(const NetClientOptions *opts,
|
||||
s->queue_tail = 0;
|
||||
s->header_mismatch = false;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
|
||||
l2tpv3 = opts->u.l2tpv3.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_L2TPV3);
|
||||
l2tpv3 = &netdev->u.l2tpv3;
|
||||
|
||||
if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
|
||||
s->ipv6 = l2tpv3->ipv6;
|
||||
|
||||
@@ -289,7 +289,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
|
||||
NICState *nic;
|
||||
int i, queues = MAX(1, conf->peers.queues);
|
||||
|
||||
assert(info->type == NET_CLIENT_OPTIONS_KIND_NIC);
|
||||
assert(info->type == NET_CLIENT_DRIVER_NIC);
|
||||
assert(info->size >= sizeof(NICState));
|
||||
|
||||
nic = g_malloc0(info->size + sizeof(NetClientState) * queues);
|
||||
@@ -360,13 +360,13 @@ void qemu_del_net_client(NetClientState *nc)
|
||||
int queues, i;
|
||||
NetFilterState *nf, *next;
|
||||
|
||||
assert(nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC);
|
||||
assert(nc->info->type != NET_CLIENT_DRIVER_NIC);
|
||||
|
||||
/* If the NetClientState belongs to a multiqueue backend, we will change all
|
||||
* other NetClientStates also.
|
||||
*/
|
||||
queues = qemu_find_net_clients_except(nc->name, ncs,
|
||||
NET_CLIENT_OPTIONS_KIND_NIC,
|
||||
NET_CLIENT_DRIVER_NIC,
|
||||
MAX_QUEUE_NUM);
|
||||
assert(queues != 0);
|
||||
|
||||
@@ -375,7 +375,7 @@ void qemu_del_net_client(NetClientState *nc)
|
||||
}
|
||||
|
||||
/* If there is a peer NIC, delete and cleanup client, but do not free. */
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_NIC) {
|
||||
NICState *nic = qemu_get_nic(nc->peer);
|
||||
if (nic->peer_deleted) {
|
||||
return;
|
||||
@@ -431,7 +431,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
|
||||
NetClientState *nc;
|
||||
|
||||
QTAILQ_FOREACH(nc, &net_clients, next) {
|
||||
if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_NIC) {
|
||||
if (nc->queue_index == 0) {
|
||||
func(qemu_get_nic(nc), opaque);
|
||||
}
|
||||
@@ -603,7 +603,7 @@ void qemu_flush_or_purge_queued_packets(NetClientState *nc, bool purge)
|
||||
{
|
||||
nc->receive_disabled = 0;
|
||||
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_HUBPORT) {
|
||||
if (net_hub_flush(nc->peer)) {
|
||||
qemu_notify_event();
|
||||
}
|
||||
@@ -777,7 +777,7 @@ NetClientState *qemu_find_netdev(const char *id)
|
||||
NetClientState *nc;
|
||||
|
||||
QTAILQ_FOREACH(nc, &net_clients, next) {
|
||||
if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC)
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_NIC)
|
||||
continue;
|
||||
if (!strcmp(nc->name, id)) {
|
||||
return nc;
|
||||
@@ -788,7 +788,7 @@ NetClientState *qemu_find_netdev(const char *id)
|
||||
}
|
||||
|
||||
int qemu_find_net_clients_except(const char *id, NetClientState **ncs,
|
||||
NetClientOptionsKind type, int max)
|
||||
NetClientDriver type, int max)
|
||||
{
|
||||
NetClientState *nc;
|
||||
int ret = 0;
|
||||
@@ -862,15 +862,15 @@ int qemu_find_nic_model(NICInfo *nd, const char * const *models,
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int net_init_nic(const NetClientOptions *opts, const char *name,
|
||||
static int net_init_nic(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
int idx;
|
||||
NICInfo *nd;
|
||||
const NetLegacyNicOptions *nic;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_NIC);
|
||||
nic = opts->u.nic.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_NIC);
|
||||
nic = &netdev->u.nic;
|
||||
|
||||
idx = nic_get_free_idx();
|
||||
if (idx == -1 || nb_nics >= MAX_NICS) {
|
||||
@@ -930,70 +930,111 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
|
||||
}
|
||||
|
||||
|
||||
static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
|
||||
const NetClientOptions *opts,
|
||||
static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
|
||||
const Netdev *netdev,
|
||||
const char *name,
|
||||
NetClientState *peer, Error **errp) = {
|
||||
[NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic,
|
||||
[NET_CLIENT_DRIVER_NIC] = net_init_nic,
|
||||
#ifdef CONFIG_SLIRP
|
||||
[NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp,
|
||||
[NET_CLIENT_DRIVER_USER] = net_init_slirp,
|
||||
#endif
|
||||
[NET_CLIENT_OPTIONS_KIND_TAP] = net_init_tap,
|
||||
[NET_CLIENT_OPTIONS_KIND_SOCKET] = net_init_socket,
|
||||
[NET_CLIENT_DRIVER_TAP] = net_init_tap,
|
||||
[NET_CLIENT_DRIVER_SOCKET] = net_init_socket,
|
||||
#ifdef CONFIG_VDE
|
||||
[NET_CLIENT_OPTIONS_KIND_VDE] = net_init_vde,
|
||||
[NET_CLIENT_DRIVER_VDE] = net_init_vde,
|
||||
#endif
|
||||
#ifdef CONFIG_NETMAP
|
||||
[NET_CLIENT_OPTIONS_KIND_NETMAP] = net_init_netmap,
|
||||
[NET_CLIENT_DRIVER_NETMAP] = net_init_netmap,
|
||||
#endif
|
||||
[NET_CLIENT_OPTIONS_KIND_DUMP] = net_init_dump,
|
||||
[NET_CLIENT_DRIVER_DUMP] = net_init_dump,
|
||||
#ifdef CONFIG_NET_BRIDGE
|
||||
[NET_CLIENT_OPTIONS_KIND_BRIDGE] = net_init_bridge,
|
||||
[NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge,
|
||||
#endif
|
||||
[NET_CLIENT_OPTIONS_KIND_HUBPORT] = net_init_hubport,
|
||||
[NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport,
|
||||
#ifdef CONFIG_VHOST_NET_USED
|
||||
[NET_CLIENT_OPTIONS_KIND_VHOST_USER] = net_init_vhost_user,
|
||||
[NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user,
|
||||
#endif
|
||||
#ifdef CONFIG_L2TPV3
|
||||
[NET_CLIENT_OPTIONS_KIND_L2TPV3] = net_init_l2tpv3,
|
||||
[NET_CLIENT_DRIVER_L2TPV3] = net_init_l2tpv3,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||
static int net_client_init1(const void *object, bool is_netdev, Error **errp)
|
||||
{
|
||||
const NetClientOptions *opts;
|
||||
Netdev legacy = {0};
|
||||
const Netdev *netdev;
|
||||
const char *name;
|
||||
NetClientState *peer = NULL;
|
||||
|
||||
if (is_netdev) {
|
||||
const Netdev *netdev = object;
|
||||
opts = netdev->opts;
|
||||
netdev = object;
|
||||
name = netdev->id;
|
||||
|
||||
if (opts->type == NET_CLIENT_OPTIONS_KIND_DUMP ||
|
||||
opts->type == NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||
!net_client_init_fun[opts->type]) {
|
||||
if (netdev->type == NET_CLIENT_DRIVER_DUMP ||
|
||||
netdev->type == NET_CLIENT_DRIVER_NIC ||
|
||||
!net_client_init_fun[netdev->type]) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||
"a netdev backend type");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
const NetLegacy *net = object;
|
||||
opts = net->opts;
|
||||
const NetLegacyOptions *opts = net->opts;
|
||||
legacy.id = net->id;
|
||||
netdev = &legacy;
|
||||
/* missing optional values have been initialized to "all bits zero" */
|
||||
name = net->has_id ? net->id : net->name;
|
||||
|
||||
if (opts->type == NET_CLIENT_OPTIONS_KIND_NONE) {
|
||||
/* Map the old options to the new flat type */
|
||||
switch (opts->type) {
|
||||
case NET_LEGACY_OPTIONS_KIND_NONE:
|
||||
return 0; /* nothing to do */
|
||||
}
|
||||
if (opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||
"a net type");
|
||||
return -1;
|
||||
case NET_LEGACY_OPTIONS_KIND_NIC:
|
||||
legacy.type = NET_CLIENT_DRIVER_NIC;
|
||||
legacy.u.nic = *opts->u.nic.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_USER:
|
||||
legacy.type = NET_CLIENT_DRIVER_USER;
|
||||
legacy.u.user = *opts->u.user.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_TAP:
|
||||
legacy.type = NET_CLIENT_DRIVER_TAP;
|
||||
legacy.u.tap = *opts->u.tap.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_L2TPV3:
|
||||
legacy.type = NET_CLIENT_DRIVER_L2TPV3;
|
||||
legacy.u.l2tpv3 = *opts->u.l2tpv3.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_SOCKET:
|
||||
legacy.type = NET_CLIENT_DRIVER_SOCKET;
|
||||
legacy.u.socket = *opts->u.socket.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_VDE:
|
||||
legacy.type = NET_CLIENT_DRIVER_VDE;
|
||||
legacy.u.vde = *opts->u.vde.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_DUMP:
|
||||
legacy.type = NET_CLIENT_DRIVER_DUMP;
|
||||
legacy.u.dump = *opts->u.dump.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_BRIDGE:
|
||||
legacy.type = NET_CLIENT_DRIVER_BRIDGE;
|
||||
legacy.u.bridge = *opts->u.bridge.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_NETMAP:
|
||||
legacy.type = NET_CLIENT_DRIVER_NETMAP;
|
||||
legacy.u.netmap = *opts->u.netmap.data;
|
||||
break;
|
||||
case NET_LEGACY_OPTIONS_KIND_VHOST_USER:
|
||||
legacy.type = NET_CLIENT_DRIVER_VHOST_USER;
|
||||
legacy.u.vhost_user = *opts->u.vhost_user.data;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
if (!net_client_init_fun[opts->type]) {
|
||||
if (!net_client_init_fun[netdev->type]) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||
"a net backend type (maybe it is not compiled "
|
||||
"into this binary)");
|
||||
@@ -1001,17 +1042,17 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||
}
|
||||
|
||||
/* Do not add to a vlan if it's a nic with a netdev= parameter. */
|
||||
if (opts->type != NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||
if (netdev->type != NET_CLIENT_DRIVER_NIC ||
|
||||
!opts->u.nic.data->has_netdev) {
|
||||
peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (net_client_init_fun[opts->type](opts, name, peer, errp) < 0) {
|
||||
if (net_client_init_fun[netdev->type](netdev, name, peer, errp) < 0) {
|
||||
/* FIXME drop when all init functions store an Error */
|
||||
if (errp && !*errp) {
|
||||
error_setg(errp, QERR_DEVICE_INIT_FAILED,
|
||||
NetClientOptionsKind_lookup[opts->type]);
|
||||
NetClientDriver_lookup[netdev->type]);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -1019,7 +1060,7 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||
}
|
||||
|
||||
|
||||
int net_client_init(QemuOpts *opts, int is_netdev, Error **errp)
|
||||
int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
|
||||
{
|
||||
void *object = NULL;
|
||||
Error *err = NULL;
|
||||
@@ -1112,7 +1153,7 @@ void hmp_host_net_add(Monitor *mon, const QDict *qdict)
|
||||
|
||||
qemu_opt_set(opts, "type", device, &error_abort);
|
||||
|
||||
net_client_init(opts, 0, &local_err);
|
||||
net_client_init(opts, false, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
monitor_printf(mon, "adding host network device %s failed\n", device);
|
||||
@@ -1131,7 +1172,7 @@ void hmp_host_net_remove(Monitor *mon, const QDict *qdict)
|
||||
device, vlan_id);
|
||||
return;
|
||||
}
|
||||
if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_NIC) {
|
||||
error_report("invalid host network device '%s'", device);
|
||||
return;
|
||||
}
|
||||
@@ -1142,7 +1183,7 @@ void hmp_host_net_remove(Monitor *mon, const QDict *qdict)
|
||||
|
||||
void netdev_add(QemuOpts *opts, Error **errp)
|
||||
{
|
||||
net_client_init(opts, 1, errp);
|
||||
net_client_init(opts, true, errp);
|
||||
}
|
||||
|
||||
void qmp_netdev_add(QDict *qdict, QObject **ret, Error **errp)
|
||||
@@ -1222,7 +1263,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)
|
||||
|
||||
monitor_printf(mon, "%s: index=%d,type=%s,%s\n", nc->name,
|
||||
nc->queue_index,
|
||||
NetClientOptionsKind_lookup[nc->info->type],
|
||||
NetClientDriver_lookup[nc->info->type],
|
||||
nc->info_str);
|
||||
if (!QTAILQ_EMPTY(&nc->filters)) {
|
||||
monitor_printf(mon, "filters:\n");
|
||||
@@ -1252,7 +1293,7 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
|
||||
}
|
||||
|
||||
/* only query rx-filter information of NIC */
|
||||
if (nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->info->type != NET_CLIENT_DRIVER_NIC) {
|
||||
if (has_name) {
|
||||
error_setg(errp, "net client(%s) isn't a NIC", name);
|
||||
return NULL;
|
||||
@@ -1298,7 +1339,7 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
|
||||
void hmp_info_network(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
NetClientState *nc, *peer;
|
||||
NetClientOptionsKind type;
|
||||
NetClientDriver type;
|
||||
|
||||
net_hub_info(mon);
|
||||
|
||||
@@ -1311,10 +1352,10 @@ void hmp_info_network(Monitor *mon, const QDict *qdict)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!peer || type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (!peer || type == NET_CLIENT_DRIVER_NIC) {
|
||||
print_net_client(mon, nc);
|
||||
} /* else it's a netdev connected to a NIC, printed with the NIC */
|
||||
if (peer && type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (peer && type == NET_CLIENT_DRIVER_NIC) {
|
||||
monitor_printf(mon, " \\ ");
|
||||
print_net_client(mon, peer);
|
||||
}
|
||||
@@ -1328,7 +1369,7 @@ void qmp_set_link(const char *name, bool up, Error **errp)
|
||||
int queues, i;
|
||||
|
||||
queues = qemu_find_net_clients_except(name, ncs,
|
||||
NET_CLIENT_OPTIONS_KIND__MAX,
|
||||
NET_CLIENT_DRIVER__MAX,
|
||||
MAX_QUEUE_NUM);
|
||||
|
||||
if (queues == 0) {
|
||||
@@ -1355,7 +1396,7 @@ void qmp_set_link(const char *name, bool up, Error **errp)
|
||||
* multiple clients that can still communicate with each other in
|
||||
* disconnected mode. For now maintain this compatibility.
|
||||
*/
|
||||
if (nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->peer->info->type == NET_CLIENT_DRIVER_NIC) {
|
||||
for (i = 0; i < queues; i++) {
|
||||
ncs[i]->peer->link_down = !up;
|
||||
}
|
||||
@@ -1396,7 +1437,7 @@ void net_cleanup(void)
|
||||
*/
|
||||
while (!QTAILQ_EMPTY(&net_clients)) {
|
||||
nc = QTAILQ_FIRST(&net_clients);
|
||||
if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_NIC) {
|
||||
qemu_del_nic(qemu_get_nic(nc));
|
||||
} else {
|
||||
qemu_del_net_client(nc);
|
||||
@@ -1416,7 +1457,7 @@ void net_check_clients(void)
|
||||
QTAILQ_FOREACH(nc, &net_clients, next) {
|
||||
if (!nc->peer) {
|
||||
fprintf(stderr, "Warning: %s %s has no peer\n",
|
||||
nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC ?
|
||||
nc->info->type == NET_CLIENT_DRIVER_NIC ?
|
||||
"nic" : "netdev", nc->name);
|
||||
}
|
||||
}
|
||||
@@ -1440,7 +1481,7 @@ static int net_init_client(void *dummy, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
|
||||
net_client_init(opts, 0, &local_err);
|
||||
net_client_init(opts, false, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
return -1;
|
||||
@@ -1454,7 +1495,7 @@ static int net_init_netdev(void *dummy, QemuOpts *opts, Error **errp)
|
||||
Error *local_err = NULL;
|
||||
int ret;
|
||||
|
||||
ret = net_client_init(opts, 1, &local_err);
|
||||
ret = net_client_init(opts, true, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
return -1;
|
||||
|
||||
+3
-3
@@ -400,7 +400,7 @@ static void netmap_set_offload(NetClientState *nc, int csum, int tso4, int tso6,
|
||||
|
||||
/* NetClientInfo methods */
|
||||
static NetClientInfo net_netmap_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_NETMAP,
|
||||
.type = NET_CLIENT_DRIVER_NETMAP,
|
||||
.size = sizeof(NetmapState),
|
||||
.receive = netmap_receive,
|
||||
.receive_iov = netmap_receive_iov,
|
||||
@@ -418,10 +418,10 @@ static NetClientInfo net_netmap_info = {
|
||||
*
|
||||
* ... -net netmap,ifname="..."
|
||||
*/
|
||||
int net_init_netmap(const NetClientOptions *opts,
|
||||
int net_init_netmap(const Netdev *netdev,
|
||||
const char *name, NetClientState *peer, Error **errp)
|
||||
{
|
||||
const NetdevNetmapOptions *netmap_opts = opts->u.netmap.data;
|
||||
const NetdevNetmapOptions *netmap_opts = &netdev->u.netmap;
|
||||
struct nm_desc *nmd;
|
||||
NetClientState *nc;
|
||||
Error *err = NULL;
|
||||
|
||||
+4
-4
@@ -137,7 +137,7 @@ static void net_slirp_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_slirp_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_USER,
|
||||
.type = NET_CLIENT_DRIVER_USER,
|
||||
.size = sizeof(SlirpState),
|
||||
.receive = net_slirp_receive,
|
||||
.cleanup = net_slirp_cleanup,
|
||||
@@ -828,7 +828,7 @@ static const char **slirp_dnssearch(const StringList *dnsname)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int net_init_slirp(const NetClientOptions *opts, const char *name,
|
||||
int net_init_slirp(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
/* FIXME error_setg(errp, ...) on failure */
|
||||
@@ -839,8 +839,8 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,
|
||||
const char **dnssearch;
|
||||
bool ipv4 = true, ipv6 = true;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_USER);
|
||||
user = opts->u.user.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_USER);
|
||||
user = &netdev->u.user;
|
||||
|
||||
if ((user->has_ipv6 && user->ipv6 && !user->has_ipv4) ||
|
||||
(user->has_ipv4 && !user->ipv4)) {
|
||||
|
||||
+5
-5
@@ -311,7 +311,7 @@ static void net_socket_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_dgram_socket_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_SOCKET,
|
||||
.type = NET_CLIENT_DRIVER_SOCKET,
|
||||
.size = sizeof(NetSocketState),
|
||||
.receive = net_socket_receive_dgram,
|
||||
.cleanup = net_socket_cleanup,
|
||||
@@ -395,7 +395,7 @@ static void net_socket_connect(void *opaque)
|
||||
}
|
||||
|
||||
static NetClientInfo net_socket_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_SOCKET,
|
||||
.type = NET_CLIENT_DRIVER_SOCKET,
|
||||
.size = sizeof(NetSocketState),
|
||||
.receive = net_socket_receive,
|
||||
.cleanup = net_socket_cleanup,
|
||||
@@ -663,15 +663,15 @@ static int net_socket_udp_init(NetClientState *peer,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_init_socket(const NetClientOptions *opts, const char *name,
|
||||
int net_init_socket(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
/* FIXME error_setg(errp, ...) on failure */
|
||||
Error *err = NULL;
|
||||
const NetdevSocketOptions *sock;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
|
||||
sock = opts->u.socket.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_SOCKET);
|
||||
sock = &netdev->u.socket;
|
||||
|
||||
if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast +
|
||||
sock->has_udp != 1) {
|
||||
|
||||
+4
-4
@@ -750,7 +750,7 @@ static void tap_set_vnet_hdr_len(NetClientState *nc, int len)
|
||||
}
|
||||
|
||||
static NetClientInfo net_tap_win32_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_TAP,
|
||||
.type = NET_CLIENT_DRIVER_TAP,
|
||||
.size = sizeof(TAPState),
|
||||
.receive = tap_receive,
|
||||
.cleanup = tap_cleanup,
|
||||
@@ -788,14 +788,14 @@ static int tap_win32_init(NetClientState *peer, const char *model,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_init_tap(const NetClientOptions *opts, const char *name,
|
||||
int net_init_tap(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
/* FIXME error_setg(errp, ...) on failure */
|
||||
const NetdevTapOptions *tap;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
tap = opts->u.tap.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_TAP);
|
||||
tap = &netdev->u.tap;
|
||||
|
||||
if (!tap->has_ifname) {
|
||||
error_report("tap: no interface name");
|
||||
|
||||
@@ -223,7 +223,7 @@ static bool tap_has_ufo(NetClientState *nc)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
|
||||
return s->has_ufo;
|
||||
}
|
||||
@@ -232,7 +232,7 @@ static bool tap_has_vnet_hdr(NetClientState *nc)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
|
||||
return !!s->host_vnet_hdr_len;
|
||||
}
|
||||
@@ -241,7 +241,7 @@ static bool tap_has_vnet_hdr_len(NetClientState *nc, int len)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
|
||||
return !!tap_probe_vnet_hdr_len(s->fd, len);
|
||||
}
|
||||
@@ -250,7 +250,7 @@ static void tap_set_vnet_hdr_len(NetClientState *nc, int len)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
assert(len == sizeof(struct virtio_net_hdr_mrg_rxbuf) ||
|
||||
len == sizeof(struct virtio_net_hdr));
|
||||
|
||||
@@ -262,7 +262,7 @@ static void tap_using_vnet_hdr(NetClientState *nc, bool using_vnet_hdr)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
assert(!!s->host_vnet_hdr_len == using_vnet_hdr);
|
||||
|
||||
s->using_vnet_hdr = using_vnet_hdr;
|
||||
@@ -336,14 +336,14 @@ static void tap_poll(NetClientState *nc, bool enable)
|
||||
int tap_get_fd(NetClientState *nc)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
return s->fd;
|
||||
}
|
||||
|
||||
/* fd support */
|
||||
|
||||
static NetClientInfo net_tap_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_TAP,
|
||||
.type = NET_CLIENT_DRIVER_TAP,
|
||||
.size = sizeof(TAPState),
|
||||
.receive = tap_receive,
|
||||
.receive_raw = tap_receive_raw,
|
||||
@@ -571,7 +571,7 @@ static int net_bridge_run_helper(const char *helper, const char *bridge,
|
||||
}
|
||||
}
|
||||
|
||||
int net_init_bridge(const NetClientOptions *opts, const char *name,
|
||||
int net_init_bridge(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
const NetdevBridgeOptions *bridge;
|
||||
@@ -579,8 +579,8 @@ int net_init_bridge(const NetClientOptions *opts, const char *name,
|
||||
TAPState *s;
|
||||
int fd, vnet_hdr;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
|
||||
bridge = opts->u.bridge.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_BRIDGE);
|
||||
bridge = &netdev->u.bridge;
|
||||
|
||||
helper = bridge->has_helper ? bridge->helper : DEFAULT_BRIDGE_HELPER;
|
||||
br = bridge->has_br ? bridge->br : DEFAULT_BRIDGE_INTERFACE;
|
||||
@@ -735,7 +735,7 @@ static int get_fds(char *str, char *fds[], int max)
|
||||
return i;
|
||||
}
|
||||
|
||||
int net_init_tap(const NetClientOptions *opts, const char *name,
|
||||
int net_init_tap(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
const NetdevTapOptions *tap;
|
||||
@@ -747,8 +747,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
|
||||
const char *vhostfdname;
|
||||
char ifname[128];
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
tap = opts->u.tap.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_TAP);
|
||||
tap = &netdev->u.tap;
|
||||
queues = tap->has_queues ? tap->queues : 1;
|
||||
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;
|
||||
|
||||
@@ -921,7 +921,7 @@ free_fail:
|
||||
VHostNetState *tap_get_vhost_net(NetClientState *nc)
|
||||
{
|
||||
TAPState *s = DO_UPCAST(TAPState, nc, nc);
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
|
||||
return s->vhost_net;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ static void vde_cleanup(NetClientState *nc)
|
||||
}
|
||||
|
||||
static NetClientInfo net_vde_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_VDE,
|
||||
.type = NET_CLIENT_DRIVER_VDE,
|
||||
.size = sizeof(VDEState),
|
||||
.receive = vde_receive,
|
||||
.cleanup = vde_cleanup,
|
||||
@@ -109,14 +109,14 @@ static int net_vde_init(NetClientState *peer, const char *model,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_init_vde(const NetClientOptions *opts, const char *name,
|
||||
int net_init_vde(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
/* FIXME error_setg(errp, ...) on failure */
|
||||
const NetdevVdeOptions *vde;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VDE);
|
||||
vde = opts->u.vde.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_VDE);
|
||||
vde = &netdev->u.vde;
|
||||
|
||||
/* missing optional values have been initialized to "all bits zero" */
|
||||
if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
|
||||
|
||||
+11
-11
@@ -34,14 +34,14 @@ typedef struct VhostUserChardevProps {
|
||||
VHostNetState *vhost_user_get_vhost_net(NetClientState *nc)
|
||||
{
|
||||
VhostUserState *s = DO_UPCAST(VhostUserState, nc, nc);
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
return s->vhost_net;
|
||||
}
|
||||
|
||||
uint64_t vhost_user_get_acked_features(NetClientState *nc)
|
||||
{
|
||||
VhostUserState *s = DO_UPCAST(VhostUserState, nc, nc);
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
return s->acked_features;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ static void vhost_user_stop(int queues, NetClientState *ncs[])
|
||||
int i;
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
assert (ncs[i]->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(ncs[i]->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
|
||||
s = DO_UPCAST(VhostUserState, nc, ncs[i]);
|
||||
if (!vhost_user_running(s)) {
|
||||
@@ -82,7 +82,7 @@ static int vhost_user_start(int queues, NetClientState *ncs[])
|
||||
options.backend_type = VHOST_BACKEND_TYPE_USER;
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
assert (ncs[i]->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(ncs[i]->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
|
||||
s = DO_UPCAST(VhostUserState, nc, ncs[i]);
|
||||
if (vhost_user_running(s)) {
|
||||
@@ -163,20 +163,20 @@ static void vhost_user_cleanup(NetClientState *nc)
|
||||
|
||||
static bool vhost_user_has_vnet_hdr(NetClientState *nc)
|
||||
{
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool vhost_user_has_ufo(NetClientState *nc)
|
||||
{
|
||||
assert(nc->info->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static NetClientInfo net_vhost_user_info = {
|
||||
.type = NET_CLIENT_OPTIONS_KIND_VHOST_USER,
|
||||
.type = NET_CLIENT_DRIVER_VHOST_USER,
|
||||
.size = sizeof(VhostUserState),
|
||||
.receive = vhost_user_receive,
|
||||
.cleanup = vhost_user_cleanup,
|
||||
@@ -207,7 +207,7 @@ static void net_vhost_user_event(void *opaque, int event)
|
||||
int queues;
|
||||
|
||||
queues = qemu_find_net_clients_except(name, ncs,
|
||||
NET_CLIENT_OPTIONS_KIND_NIC,
|
||||
NET_CLIENT_DRIVER_NIC,
|
||||
MAX_QUEUE_NUM);
|
||||
assert(queues < MAX_QUEUE_NUM);
|
||||
|
||||
@@ -334,15 +334,15 @@ static int net_vhost_check_net(void *opaque, QemuOpts *opts, Error **errp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_init_vhost_user(const NetClientOptions *opts, const char *name,
|
||||
int net_init_vhost_user(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
int queues;
|
||||
const NetdevVhostUserOptions *vhost_user_opts;
|
||||
CharDriverState *chr;
|
||||
|
||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||
vhost_user_opts = opts->u.vhost_user.data;
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_VHOST_USER);
|
||||
vhost_user_opts = &netdev->u.vhost_user;
|
||||
|
||||
chr = net_vhost_parse_chardev(vhost_user_opts, errp);
|
||||
if (!chr) {
|
||||
|
||||
Reference in new issue
Block a user