[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL V2 33/33] net: Drop the NetLegacy structure, always use Netdev ins
From: |
Jason Wang |
Subject: |
[PULL V2 33/33] net: Drop the NetLegacy structure, always use Netdev instead |
Date: |
Thu, 18 Jun 2020 21:21:48 +0800 |
From: Thomas Huth <thuth@redhat.com>
Now that the "name" parameter is gone, there is hardly any difference
between NetLegacy and Netdev anymore, so we can drop NetLegacy and always
use Netdev to simplify the code quite a bit.
The only two differences that were really left between Netdev and NetLegacy:
1) NetLegacy does not allow a "hubport" type. We can continue to block
this with a simple check in net_client_init1() for this type.
2) The "id" parameter was optional in NetLegacy (and an internal id
was chosen via assign_name() during initialization), but it is mandatory
for Netdev. To avoid that the visitor code bails out here, we have to
add an internal id to the QemuOpts already earlier now.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
net/net.c | 77 ++++++++++-------------------------------------------------
qapi/net.json | 46 -----------------------------------
2 files changed, 13 insertions(+), 110 deletions(-)
diff --git a/net/net.c b/net/net.c
index e55d357..d113029 100644
--- a/net/net.c
+++ b/net/net.c
@@ -965,15 +965,11 @@ static int (* const
net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
};
-static int net_client_init1(const void *object, bool is_netdev, Error **errp)
+static int net_client_init1(const Netdev *netdev, bool is_netdev, Error **errp)
{
- Netdev legacy = {0};
- const Netdev *netdev;
NetClientState *peer = NULL;
if (is_netdev) {
- netdev = object;
-
if (netdev->type == NET_CLIENT_DRIVER_NIC ||
!net_client_init_fun[netdev->type]) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
@@ -981,56 +977,11 @@ static int net_client_init1(const void *object, bool
is_netdev, Error **errp)
return -1;
}
} else {
- const NetLegacy *net = object;
- const NetLegacyOptions *opts = net->opts;
- legacy.id = net->id;
- netdev = &legacy;
-
- /* Map the old options to the new flat type */
- switch (opts->type) {
- case NET_LEGACY_OPTIONS_TYPE_NONE:
+ if (netdev->type == NET_CLIENT_DRIVER_NONE) {
return 0; /* nothing to do */
- case NET_LEGACY_OPTIONS_TYPE_NIC:
- legacy.type = NET_CLIENT_DRIVER_NIC;
- legacy.u.nic = opts->u.nic;
- break;
- case NET_LEGACY_OPTIONS_TYPE_USER:
- legacy.type = NET_CLIENT_DRIVER_USER;
- legacy.u.user = opts->u.user;
- break;
- case NET_LEGACY_OPTIONS_TYPE_TAP:
- legacy.type = NET_CLIENT_DRIVER_TAP;
- legacy.u.tap = opts->u.tap;
- break;
- case NET_LEGACY_OPTIONS_TYPE_L2TPV3:
- legacy.type = NET_CLIENT_DRIVER_L2TPV3;
- legacy.u.l2tpv3 = opts->u.l2tpv3;
- break;
- case NET_LEGACY_OPTIONS_TYPE_SOCKET:
- legacy.type = NET_CLIENT_DRIVER_SOCKET;
- legacy.u.socket = opts->u.socket;
- break;
- case NET_LEGACY_OPTIONS_TYPE_VDE:
- legacy.type = NET_CLIENT_DRIVER_VDE;
- legacy.u.vde = opts->u.vde;
- break;
- case NET_LEGACY_OPTIONS_TYPE_BRIDGE:
- legacy.type = NET_CLIENT_DRIVER_BRIDGE;
- legacy.u.bridge = opts->u.bridge;
- break;
- case NET_LEGACY_OPTIONS_TYPE_NETMAP:
- legacy.type = NET_CLIENT_DRIVER_NETMAP;
- legacy.u.netmap = opts->u.netmap;
- break;
- case NET_LEGACY_OPTIONS_TYPE_VHOST_USER:
- legacy.type = NET_CLIENT_DRIVER_VHOST_USER;
- legacy.u.vhost_user = opts->u.vhost_user;
- break;
- default:
- abort();
}
-
- if (!net_client_init_fun[netdev->type]) {
+ if (netdev->type == NET_CLIENT_DRIVER_HUBPORT ||
+ !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)");
@@ -1039,7 +990,7 @@ static int net_client_init1(const void *object, bool
is_netdev, Error **errp)
/* Do not add to a hub if it's a nic with a netdev= parameter. */
if (netdev->type != NET_CLIENT_DRIVER_NIC ||
- !opts->u.nic.has_netdev) {
+ !netdev->u.nic.has_netdev) {
peer = net_hub_add_port(0, NULL, NULL);
}
}
@@ -1100,7 +1051,7 @@ static void show_netdevs(void)
static int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
{
gchar **substrings = NULL;
- void *object = NULL;
+ Netdev *object = NULL;
Error *err = NULL;
int ret = -1;
Visitor *v = opts_visitor_new(opts);
@@ -1143,21 +1094,19 @@ static int net_client_init(QemuOpts *opts, bool
is_netdev, Error **errp)
}
}
- if (is_netdev) {
- visit_type_Netdev(v, NULL, (Netdev **)&object, &err);
- } else {
- visit_type_NetLegacy(v, NULL, (NetLegacy **)&object, &err);
+ /* Create an ID for -net if the user did not specify one */
+ if (!is_netdev && !qemu_opts_id(opts)) {
+ static int idx;
+ qemu_opts_set_id(opts, g_strdup_printf("__org.qemu.net%i", idx++));
}
+ visit_type_Netdev(v, NULL, &object, &err);
+
if (!err) {
ret = net_client_init1(object, is_netdev, &err);
}
- if (is_netdev) {
- qapi_free_Netdev(object);
- } else {
- qapi_free_NetLegacy(object);
- }
+ qapi_free_Netdev(object);
out:
error_propagate(errp, err);
diff --git a/qapi/net.json b/qapi/net.json
index fc7c95f..9244c9a 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -468,52 +468,6 @@
'vhost-user': 'NetdevVhostUserOptions' } }
##
-# @NetLegacy:
-#
-# Captures the configuration of a network device; legacy.
-#
-# @id: identifier for monitor commands
-#
-# @opts: device type specific properties (legacy)
-#
-# Since: 1.2
-##
-{ 'struct': 'NetLegacy',
- 'data': {
- '*id': 'str',
- 'opts': 'NetLegacyOptions' } }
-
-##
-# @NetLegacyOptionsType:
-#
-# Since: 1.2
-##
-{ 'enum': 'NetLegacyOptionsType',
- 'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
- 'bridge', 'netmap', 'vhost-user'] }
-
-##
-# @NetLegacyOptions:
-#
-# Like Netdev, but for use only by the legacy command line options
-#
-# Since: 1.2
-##
-{ 'union': 'NetLegacyOptions',
- 'base': { 'type': 'NetLegacyOptionsType' },
- 'discriminator': 'type',
- 'data': {
- 'nic': 'NetLegacyNicOptions',
- 'user': 'NetdevUserOptions',
- 'tap': 'NetdevTapOptions',
- 'l2tpv3': 'NetdevL2TPv3Options',
- 'socket': 'NetdevSocketOptions',
- 'vde': 'NetdevVdeOptions',
- 'bridge': 'NetdevBridgeOptions',
- 'netmap': 'NetdevNetmapOptions',
- 'vhost-user': 'NetdevVhostUserOptions' } }
-
-##
# @NetFilterDirection:
#
# Indicates whether a netfilter is attached to a netdev's transmit queue or
--
2.5.0
- [PULL V2 22/33] net: cadence_gem: Fix RX address filtering, (continued)
- [PULL V2 22/33] net: cadence_gem: Fix RX address filtering, Jason Wang, 2020/06/18
- [PULL V2 23/33] net: use peer when purging queue in qemu_flush_or_purge_queue_packets(), Jason Wang, 2020/06/18
- [PULL V2 24/33] net/colo-compare.c: Create event_bh with the right AioContext, Jason Wang, 2020/06/18
- [PULL V2 25/33] chardev/char.c: Use qemu_co_sleep_ns if in coroutine, Jason Wang, 2020/06/18
- [PULL V2 26/33] net/colo-compare.c: Fix deadlock in compare_chr_send, Jason Wang, 2020/06/18
- [PULL V2 27/33] net/colo-compare.c: Only hexdump packets if tracing is enabled, Jason Wang, 2020/06/18
- [PULL V2 28/33] net/colo-compare.c: Check that colo-compare is active, Jason Wang, 2020/06/18
- [PULL V2 29/33] net/colo-compare.c: Correct ordering in complete and finalize, Jason Wang, 2020/06/18
- [PULL V2 31/33] hw/net/e1000e: Do not abort() on invalid PSRCTL register value, Jason Wang, 2020/06/18
- [PULL V2 32/33] net: Drop the legacy "name" parameter from the -net option, Jason Wang, 2020/06/18
- [PULL V2 33/33] net: Drop the NetLegacy structure, always use Netdev instead,
Jason Wang <=
- [PULL V2 30/33] colo-compare: Fix memory leak in packet_enqueue(), Jason Wang, 2020/06/18
- Re: [PULL V2 00/33] Net patches, no-reply, 2020/06/18
- Re: [PULL V2 00/33] Net patches, Peter Maydell, 2020/06/19