From nobody Wed May 14 06:07:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1525880233592666.7260945625129; Wed, 9 May 2018 08:37:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EA7384E05F; Wed, 9 May 2018 15:37:11 +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 B0C742C8EF; Wed, 9 May 2018 15:37:11 +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 684CE4CAA1; Wed, 9 May 2018 15:37:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w49Fb8w8010575 for ; Wed, 9 May 2018 11:37:08 -0400 Received: by smtp.corp.redhat.com (Postfix) id B7AD610840D2; Wed, 9 May 2018 15:37:08 +0000 (UTC) Received: from mx1.redhat.com (ext-mx13.extmail.prod.ext.phx2.redhat.com [10.5.110.42]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AEDCF10840D8 for ; Wed, 9 May 2018 15:37:03 +0000 (UTC) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 8DAC73003A5B for ; Wed, 9 May 2018 15:37:02 +0000 (UTC) Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w49FZgGr056030 for ; Wed, 9 May 2018 11:37:02 -0400 Received: from e06smtp11.uk.ibm.com (e06smtp11.uk.ibm.com [195.75.94.107]) by mx0a-001b2d01.pphosted.com with ESMTP id 2hv1shqaxp-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 09 May 2018 11:37:01 -0400 Received: from localhost by e06smtp11.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 9 May 2018 16:36:58 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp11.uk.ibm.com (192.168.101.141) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 9 May 2018 16:36:57 +0100 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w49FWLp9262512 for ; Wed, 9 May 2018 15:36:57 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B4212B7466 for ; Wed, 9 May 2018 15:46:34 +0100 (BST) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 39D0AB714A for ; Wed, 9 May 2018 15:46:31 +0100 (BST) Received: from marc-ibm.boeblingen.de.ibm.com (unknown [9.152.224.71]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP for ; Wed, 9 May 2018 15:46:31 +0100 (BST) From: Marc Hartmayer To: Date: Wed, 9 May 2018 16:56:12 +0200 In-Reply-To: <20180509145622.23049-1-mhartmay@linux.vnet.ibm.com> References: <20180509145622.23049-1-mhartmay@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18050915-0040-0000-0000-00000457C1B7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18050915-0041-0000-0000-000020FBCE59 Message-Id: <20180509145622.23049-3-mhartmay@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-05-09_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1805090146 X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Wed, 09 May 2018 15:37:02 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Wed, 09 May 2018 15:37:02 +0000 (UTC) for IP:'148.163.156.1' DOMAIN:'mx0a-001b2d01.pphosted.com' HELO:'mx0a-001b2d01.pphosted.com' FROM:'mhartmay@linux.vnet.ibm.com' RCPT:'' X-RedHat-Spam-Score: -0.7 (RCVD_IN_DNSWL_LOW) 148.163.156.1 mx0a-001b2d01.pphosted.com 148.163.156.1 mx0a-001b2d01.pphosted.com X-Scanned-By: MIMEDefang 2.84 on 10.5.110.42 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 02/12] Introduce new domain create API virDomainCreateWithParams 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 09 May 2018 15:37:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Introduce new libvirt API virDomainCreateWithParams that allows to temporarily boot from another boot device, to use another kernel, initrd, and cmdline than defined in the persistent domain definition. All typed parameters are optional. The design of the API was chosen to ease future extensions. Signed-off-by: Marc Hartmayer Reviewed-by: Stefan Zimmermann Reviewed-by: Boris Fiuczynski --- include/libvirt/libvirt-domain.h | 37 +++++++++++++++++++++++ src/driver-hypervisor.h | 6 ++++ src/libvirt-domain.c | 64 ++++++++++++++++++++++++++++++++++++= ++++ src/libvirt_public.syms | 4 +++ 4 files changed, 111 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index 12fd34037e5d..58e4de048a4f 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1790,6 +1790,43 @@ int virConnectListAllDomains (vi= rConnectPtr conn, virDomainPtr **domains, unsigned int flags); int virDomainCreate (virDomainPtr domain); + +/** + * VIR_DOMAIN_CREATE_PARM_KERNEL: + * + * Macro for typed parameter name that represents the used kernel. It + * corresponds to the "kernel" node in the XML. + */ +# define VIR_DOMAIN_CREATE_PARM_KERNEL "kernel" + +/** + * VIR_DOMAIN_CREATE_PARM_CMDLINE: + * + * Macro for typed parameter name that represents the used cmdline. It + * corresponds to the "cmdline" node in the XML. + */ +# define VIR_DOMAIN_CREATE_PARM_CMDLINE "cmdline" + +/** + * VIR_DOMAIN_CREATE_PARM_INITRD: + * + * Macro for typed parameter name that represents the used initial + * ramdisk. It corresponds to the "initrd" node in the XML. + */ +# define VIR_DOMAIN_CREATE_PARM_INITRD "initrd" + +/** + * VIR_DOMAIN_CREATE_PARM_DEVICE_IDENTIFIER: + * + * Macro for typed parameter name that represents the identifier for + * the boot device. + */ +# define VIR_DOMAIN_CREATE_PARM_DEVICE_IDENTIFIER "bootdevice" + +int virDomainCreateWithParams (virDomainPtr domain, + virTypedParameterPtr pa= rams, + int nparams, + unsigned int flags); int virDomainCreateWithFlags (virDomainPtr domain, unsigned int flags); =20 diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index e71a72a44132..2fa9e09e12f6 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -313,6 +313,11 @@ typedef int unsigned int nfiles, int *files, unsigned int flags); +typedef int +(*virDrvDomainCreateWithParams)(virDomainPtr dom, + virTypedParameterPtr params, + int nparams, + unsigned int flags); =20 typedef virDomainPtr (*virDrvDomainDefineXML)(virConnectPtr conn, @@ -1383,6 +1388,7 @@ struct _virHypervisorDriver { virDrvDomainCreate domainCreate; virDrvDomainCreateWithFlags domainCreateWithFlags; virDrvDomainCreateWithFiles domainCreateWithFiles; + virDrvDomainCreateWithParams domainCreateWithParams; virDrvDomainDefineXML domainDefineXML; virDrvDomainDefineXMLFlags domainDefineXMLFlags; virDrvDomainUndefine domainUndefine; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 2d86e48979d3..36badab2d5d9 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -6682,6 +6682,70 @@ virDomainCreateWithFiles(virDomainPtr domain, unsign= ed int nfiles, =20 =20 /** + * virDomainCreateWithParams: + * @domain: pointer to a defined domain + * @params: pointer to boot parameter objects + * @nparams: number of boot parameter objects + * @flags: bitwise-OR of supported virDomainCreateFlags + * + * Launch a defined domain. If the call succeeds the domain moves from + * the defined to the running domains pools. + * + * @params provides an array of typed parameters with the length + * @nparams. This array will be used to configure the domain to be + * temporary started from the device specified by the typed parameter + * 'bootdevice'. With the typed parameters 'kernel', 'initrd', and + * 'cmdline' it's possible to temporarily override the corresponding + * values. All typed parameters are optional. + * + * For more control over @flags, see virDomainCreateWithFlags(). + * + * Returns 0 in case of success, -1 in case of error + */ +int +virDomainCreateWithParams(virDomainPtr domain, + virTypedParameterPtr params, + int nparams, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain, "params=3D%p, nparams=3D%d, flags=3D0x%x", + params, nparams, flags); + VIR_TYPED_PARAMS_DEBUG(params, nparams); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn =3D domain->conn; + + virCheckReadOnlyGoto(conn->flags, error); + virCheckNonNegativeArgGoto(nparams, error); + if (nparams > 0) + virCheckNonNullArgGoto(params, error); + + if (virTypedParameterValidateSet(conn, params, nparams) < 0) + goto error; + + if (conn->driver->domainCreateWithParams) { + int ret; + ret =3D conn->driver->domainCreateWithParams(domain, + params, + nparams, + flags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + error: + virDispatchError(domain->conn); + return -1; +} + + +/** * virDomainGetAutostart: * @domain: a domain object * @autostart: the value returned diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 95df3a0dbc7b..5d9b2697702c 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -785,4 +785,8 @@ LIBVIRT_4.1.0 { virStoragePoolLookupByTargetPath; } LIBVIRT_3.9.0; =20 +LIBVIRT_4.4.0 { + global: + virDomainCreateWithParams; +} LIBVIRT_4.1.0; # .... define new API here using predicted next version number .... --=20 2.13.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list