From nobody Thu Nov 6 20:29:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 148779151357918.867904487101328; Wed, 22 Feb 2017 11:25:13 -0800 (PST) Received: from localhost ([::1]:54892 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cgcXI-0005Xu-61 for importer@patchew.org; Wed, 22 Feb 2017 14:25:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cgcNU-0004cz-Ce for qemu-devel@nongnu.org; Wed, 22 Feb 2017 14:15:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cgcNR-0000di-D1 for qemu-devel@nongnu.org; Wed, 22 Feb 2017 14:15:04 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38966) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cgcNR-0000d2-3O for qemu-devel@nongnu.org; Wed, 22 Feb 2017 14:15:01 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5AB1C3B755 for ; Wed, 22 Feb 2017 19:15:01 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-55.ams2.redhat.com [10.36.116.55]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1MJExMg004689 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Wed, 22 Feb 2017 14:15:00 -0500 Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 52D6D113864D; Wed, 22 Feb 2017 20:14:58 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Wed, 22 Feb 2017 20:14:44 +0100 Message-Id: <1487790898-24921-3-git-send-email-armbru@redhat.com> In-Reply-To: <1487790898-24921-1-git-send-email-armbru@redhat.com> References: <1487790898-24921-1-git-send-email-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 22 Feb 2017 19:15:01 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 02/16] net: Flatten simple union NetLegacyOptions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simple unions are simpler than flat unions in the schema, but more complicated in C and on the QMP wire: there's extra indirection in C and extra nesting on the wire, both pointless. They're best avoided in new code. NetLegacyOptions isn't new, but it's only used internally, not in QMP. Convert it to a flat union. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Message-Id: <1487709988-14322-3-git-send-email-armbru@redhat.com> --- net/net.c | 44 ++++++++++++++++++++++---------------------- qapi-schema.json | 11 +++++++++++ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/net/net.c b/net/net.c index fb7af3a..0ac3b9e 100644 --- a/net/net.c +++ b/net/net.c @@ -993,47 +993,47 @@ static int net_client_init1(const void *object, bool = is_netdev, Error **errp) =20 /* Map the old options to the new flat type */ switch (opts->type) { - case NET_LEGACY_OPTIONS_KIND_NONE: + case NET_LEGACY_OPTIONS_TYPE_NONE: return 0; /* nothing to do */ - case NET_LEGACY_OPTIONS_KIND_NIC: + case NET_LEGACY_OPTIONS_TYPE_NIC: legacy.type =3D NET_CLIENT_DRIVER_NIC; - legacy.u.nic =3D *opts->u.nic.data; + legacy.u.nic =3D opts->u.nic; break; - case NET_LEGACY_OPTIONS_KIND_USER: + case NET_LEGACY_OPTIONS_TYPE_USER: legacy.type =3D NET_CLIENT_DRIVER_USER; - legacy.u.user =3D *opts->u.user.data; + legacy.u.user =3D opts->u.user; break; - case NET_LEGACY_OPTIONS_KIND_TAP: + case NET_LEGACY_OPTIONS_TYPE_TAP: legacy.type =3D NET_CLIENT_DRIVER_TAP; - legacy.u.tap =3D *opts->u.tap.data; + legacy.u.tap =3D opts->u.tap; break; - case NET_LEGACY_OPTIONS_KIND_L2TPV3: + case NET_LEGACY_OPTIONS_TYPE_L2TPV3: legacy.type =3D NET_CLIENT_DRIVER_L2TPV3; - legacy.u.l2tpv3 =3D *opts->u.l2tpv3.data; + legacy.u.l2tpv3 =3D opts->u.l2tpv3; break; - case NET_LEGACY_OPTIONS_KIND_SOCKET: + case NET_LEGACY_OPTIONS_TYPE_SOCKET: legacy.type =3D NET_CLIENT_DRIVER_SOCKET; - legacy.u.socket =3D *opts->u.socket.data; + legacy.u.socket =3D opts->u.socket; break; - case NET_LEGACY_OPTIONS_KIND_VDE: + case NET_LEGACY_OPTIONS_TYPE_VDE: legacy.type =3D NET_CLIENT_DRIVER_VDE; - legacy.u.vde =3D *opts->u.vde.data; + legacy.u.vde =3D opts->u.vde; break; - case NET_LEGACY_OPTIONS_KIND_DUMP: + case NET_LEGACY_OPTIONS_TYPE_DUMP: legacy.type =3D NET_CLIENT_DRIVER_DUMP; - legacy.u.dump =3D *opts->u.dump.data; + legacy.u.dump =3D opts->u.dump; break; - case NET_LEGACY_OPTIONS_KIND_BRIDGE: + case NET_LEGACY_OPTIONS_TYPE_BRIDGE: legacy.type =3D NET_CLIENT_DRIVER_BRIDGE; - legacy.u.bridge =3D *opts->u.bridge.data; + legacy.u.bridge =3D opts->u.bridge; break; - case NET_LEGACY_OPTIONS_KIND_NETMAP: + case NET_LEGACY_OPTIONS_TYPE_NETMAP: legacy.type =3D NET_CLIENT_DRIVER_NETMAP; - legacy.u.netmap =3D *opts->u.netmap.data; + legacy.u.netmap =3D opts->u.netmap; break; - case NET_LEGACY_OPTIONS_KIND_VHOST_USER: + case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: legacy.type =3D NET_CLIENT_DRIVER_VHOST_USER; - legacy.u.vhost_user =3D *opts->u.vhost_user.data; + legacy.u.vhost_user =3D opts->u.vhost_user; break; default: abort(); @@ -1048,7 +1048,7 @@ static int net_client_init1(const void *object, bool = is_netdev, Error **errp) =20 /* Do not add to a vlan if it's a nic with a netdev=3D parameter. = */ if (netdev->type !=3D NET_CLIENT_DRIVER_NIC || - !opts->u.nic.data->has_netdev) { + !opts->u.nic.has_netdev) { peer =3D net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL); } =20 diff --git a/qapi-schema.json b/qapi-schema.json index a448ea8..5347781 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3959,6 +3959,15 @@ 'opts': 'NetLegacyOptions' } } =20 ## +# @NetLegacyOptionsType: +# +# Since: 1.2 +## +{ 'enum': 'NetLegacyOptionsType', + 'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', + 'dump', 'bridge', 'netmap', 'vhost-user'] } + +## # @NetLegacyOptions: # # Like Netdev, but for use only by the legacy command line options @@ -3966,6 +3975,8 @@ # Since: 1.2 ## { 'union': 'NetLegacyOptions', + 'base': { 'type': 'NetLegacyOptionsType' }, + 'discriminator': 'type', 'data': { 'none': 'NetdevNoneOptions', 'nic': 'NetLegacyNicOptions', --=20 2.7.4