From nobody Sun Feb 8 20:53:42 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589556573; cv=none; d=zohomail.com; s=zohoarc; b=kauyfr5MRL5vhGmmX4yXxH3/kuzNG6xxVIA8PucWq3jbPvigQh8Pne4APp336vWc/j15l48K8G/ZR2ALIbDWh37w8HXwL1HoWL67mwCg+x0Qrz8yVNkWZ0rEBqMVwdO3BvkSgMhilWQ4yUVVIjtgUiN8X0h6DBqDt1+iUp4WbJA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589556573; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=f+DTrmA4ap1ixrXkyDKFKeWGpPEzwrolbk39GRsdWVo=; b=EApVn4rjmcp05owiDgR+nurjJFEE/neyQhVbMxbl1vWvjUjDack4+po1NPMx9YoWYJPZuEe6OrL3cgN9niIJ6zZEtnXxleG5dJuBQW5FyYIldIqMvTGMRmfUeBgd/6zZz/VaVuauFcHGZMcc/Me3KBH741HoDbS2KtJ9VZvCQSI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 1589556573869498.863732916157; Fri, 15 May 2020 08:29:33 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-47-Bd5DQIPqPB2xMmscGghHDQ-1; Fri, 15 May 2020 11:29:27 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1F081872FEA; Fri, 15 May 2020 15:29:22 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F37F6600F5; Fri, 15 May 2020 15:29:21 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C469B4E9FC; Fri, 15 May 2020 15:29:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04FFTJtM011408 for ; Fri, 15 May 2020 11:29:19 -0400 Received: by smtp.corp.redhat.com (Postfix) id B486C5D9F5; Fri, 15 May 2020 15:29:19 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.40.208.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2CE765D9D7 for ; Fri, 15 May 2020 15:29:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589556572; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=f+DTrmA4ap1ixrXkyDKFKeWGpPEzwrolbk39GRsdWVo=; b=c3/7mjMGEzHZxbTmGuX4JDqjfcI9GzgOeNz0YHiHlT2SBN9ah/tEX9nQLq3z6jBloj0afE PxtxCj80a97gCsj2vZjnKaVwAAlqGw+A0kuo9r1Iyq5ent+4EDZ8aZfq3bTBu7JQgBy2YZ Q6nnPL4ACfcSDo2EyLWb9VRguj70xrQ= X-MC-Unique: Bd5DQIPqPB2xMmscGghHDQ-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 16/21] qemuBuildChannelGuestfwdNetdevProps: Convert to generating JSON props Date: Fri, 15 May 2020 17:28:02 +0200 Message-Id: <2e10b8b04b3d42e70120f0022bdeb238de7eda56.1589556042.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Syntax of guestfwd channel also needs to be modified to conform to the QAPI schema. Signed-off-by: Peter Krempa Reviewed-by: Eric Blake --- src/qemu/qemu_command.c | 37 +++++++++++++++++++++++++++++++------ src/qemu/qemu_command.h | 2 +- src/qemu/qemu_hotplug.c | 6 +++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 00d1b4121d..2ed8e66f66 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8567,6 +8567,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logMana= ger, for (i =3D 0; i < def->nchannels; i++) { virDomainChrDefPtr channel =3D def->channels[i]; g_autofree char *chardevstr =3D NULL; + g_autoptr(virJSONValue) netdevprops =3D NULL; g_autofree char *netdevstr =3D NULL; if (!(chardevstr =3D qemuBuildChrChardevStr(logManager, secManager, @@ -8581,8 +8582,12 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logMan= ager, switch ((virDomainChrChannelTargetType) channel->targetType) { case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD: - if (!(netdevstr =3D qemuBuildChannelGuestfwdNetdevProps(channe= l))) + if (!(netdevprops =3D qemuBuildChannelGuestfwdNetdevProps(chan= nel))) return -1; + + if (!(netdevstr =3D virQEMUBuildNetdevCommandlineFromJSON(netd= evprops))) + return -1; + virCommandAddArgList(cmd, "-netdev", netdevstr, NULL); break; @@ -9850,19 +9855,39 @@ qemuBuildParallelChrDeviceStr(char **deviceStr, } -char * +virJSONValuePtr qemuBuildChannelGuestfwdNetdevProps(virDomainChrDefPtr chr) { + g_autoptr(virJSONValue) guestfwdarr =3D virJSONValueNewArray(); + g_autoptr(virJSONValue) guestfwdstrobj =3D virJSONValueNewObject(); g_autofree char *addr =3D NULL; - int port; + virJSONValuePtr ret =3D NULL; if (!(addr =3D virSocketAddrFormat(chr->target.addr))) return NULL; - port =3D virSocketAddrGetPort(chr->target.addr); + /* this may seem weird, but qemu indeed decided that 'guestfwd' parame= ter + * is an array of objects which have just one member named 'str' which + * contains the description */ + if (virJSONValueObjectAppendStringPrintf(guestfwdstrobj, "str", + "tcp:%s:%i-chardev:char%s", + addr, + virSocketAddrGetPort(chr->tar= get.addr), + chr->info.alias) < 0) + return NULL; + + if (virJSONValueArrayAppend(guestfwdarr, guestfwdstrobj) < 0) + return NULL; + guestfwdstrobj =3D NULL; - return g_strdup_printf("user,guestfwd=3Dtcp:%s:%i-chardev:char%s,id=3D= %s", - addr, port, chr->info.alias, chr->info.alias); + if (virJSONValueObjectCreate(&ret, + "s:type", "user", + "a:guestfwd", &guestfwdarr, + "s:id", chr->info.alias, + NULL) < 0) + return NULL; + + return ret; } diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 6cdd9debe0..1daa07982c 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -86,7 +86,7 @@ qemuBuildChrDeviceStr(char **deviceStr, virDomainChrDefPtr chr, virQEMUCapsPtr qemuCaps); -char * +virJSONValuePtr qemuBuildChannelGuestfwdNetdevProps(virDomainChrDefPtr chr); virJSONValuePtr qemuBuildHostNetStr(virDomainNetDefPtr net, diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index c6789dcef3..cd9bc9b2f8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2113,6 +2113,7 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virErrorPtr orig_err; virDomainDefPtr vmdef =3D vm->def; g_autofree char *devstr =3D NULL; + g_autoptr(virJSONValue) netdevprops =3D NULL; g_autofree char *netdevstr =3D NULL; virDomainChrSourceDefPtr dev =3D chr->source; g_autofree char *charAlias =3D NULL; @@ -2153,7 +2154,10 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr drive= r, teardowncgroup =3D true; if (guestfwd) { - if (!(netdevstr =3D qemuBuildChannelGuestfwdNetdevProps(chr))) + if (!(netdevprops =3D qemuBuildChannelGuestfwdNetdevProps(chr))) + goto cleanup; + + if (!(netdevstr =3D virQEMUBuildNetdevCommandlineFromJSON(netdevpr= ops))) goto cleanup; } else { if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0) --=20 2.26.2