From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607710565; cv=none; d=zohomail.com; s=zohoarc; b=hg2pFL1XUWY1FJdq0RvlRVwnz8cHltl7KnPXHoj4xx02ndJIO61463Kzmg8uyc0bk3abcL8q15bhiAzSmCigSg7spJtNZbvlUkASXneoGp1cXEUuQdOG2p3qQFLWRQh0xg+y90lnj4T3EV+oxhWxfxBzqAK+6+mOna36ar/m6fM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607710565; h=Content-Type:Content-Transfer-Encoding:Cc: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=oEfZJ/oUXd6V90VzKaY746QT3OS4TULWg98CshRyOq4=; b=FNcNSoUz9EDcnSqj7QVKpQmVGLNo+1PKEcoaQTrOPPPR59nXcXVOotr/u052KLvghQtfMHgxv6MBht7uRFvXgaakjScQ6AwpTnozVtrlVvxWvGdV3wARnTMebZEhat6+5lsBrOx7LxUVFk0HABpQiCESl9H1kgF9QKwB4y+68s8= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607710565880603.9196187889813; Fri, 11 Dec 2020 10:16:05 -0800 (PST) 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-254-ODxPACKfOoidWqhNcnD7uw-1; Fri, 11 Dec 2020 13:05:57 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CD06CC73A0; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 402C310023B9; Fri, 11 Dec 2020 18:05:51 +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 09B331809CA3; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5Ym5027526 for ; Fri, 11 Dec 2020 13:05:34 -0500 Received: by smtp.corp.redhat.com (Postfix) id A417A115D7BD; Fri, 11 Dec 2020 18:05:34 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9FA2F115D7BA for ; Fri, 11 Dec 2020 18:05:32 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 40DDD858284 for ; Fri, 11 Dec 2020 18:05:32 +0000 (UTC) Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-353-EasDMpUgMgi1SS48n82AHw-1; Fri, 11 Dec 2020 13:05:30 -0500 Received: by mail-qv1-f50.google.com with SMTP id 4so4601946qvh.1 for ; Fri, 11 Dec 2020 10:05:29 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:28 -0800 (PST) X-MC-Unique: ODxPACKfOoidWqhNcnD7uw-1 X-MC-Unique: EasDMpUgMgi1SS48n82AHw-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oEfZJ/oUXd6V90VzKaY746QT3OS4TULWg98CshRyOq4=; b=Jy39SIkSAJF4IztnDQlknpwCaDbz0CBKjcOLCE3JBqgYoEkL19S7ZDtFW/wTpWnRCh lxdzLEWq+3Ik4bh1cZit2hWmFaXkbqbom01VDQcwAhywQRYGmtTYu/Sm75/ipDKUbiVF fpgzHGxca9mDAhkZoe7ZR619m9CtMon+OYqevUxpSOy77N9YqT919nY/DQvSbNoeGBkm Kd7o4b1llOcKMollmDkDBc4uebR81GWET4JGPMBx06Ftf88S+/eX++K4LwCmDGJVESxf 9FHQgXEv7JoOGpXGkp5LcnCNCQxDnPKfRuvmg57wXPC00vBXFbKEKy1LaAWLRVbl0ta6 JaNg== X-Gm-Message-State: AOAM533eW/JBaow3rOb7l0+3SLiDySvxLLXi7xayZx+8baV4oYXLVio9 3HBHnfsiP+Tz3RL5mfGHE0mChjdshUk= X-Google-Smtp-Source: ABdhPJwlYPqzrPm216A6KfGSlsSbOC4q0uGk5RUWa9odCdEdcssUW3W7YL+RaelDWgzpGkjnzxbTsg== X-Received: by 2002:a0c:ba8c:: with SMTP id x12mr17273428qvf.15.1607709928983; Fri, 11 Dec 2020 10:05:28 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 01/12] domain_conf: move duplicate check functions to domain_validate.c Date: Fri, 11 Dec 2020 15:05:05 -0300 Message-Id: <20201211180516.1952683-2-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" virDomainDefCheckDuplicateDiskInfo() and virDomainDefCheckDuplicateDriveAdd= resses() are static functions used by virDomainDefValidateInternal(). Let's move them to domain_validate.c to start clearing up the path to move virDomainDefValidateInternal(). Change the functions name slightly to be more on par with their new home. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 129 +------------------------------------ src/conf/domain_conf.h | 5 ++ src/conf/domain_validate.c | 125 +++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 2 + 4 files changed, 135 insertions(+), 126 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 23415b323c..0f5d314e2c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4867,7 +4867,7 @@ virDomainDefPostParseGraphics(virDomainDef *def) * Return true if any disk is already using the given address on the * given bus, false otherwise. */ -static bool +bool virDomainDriveAddressIsUsedByDisk(const virDomainDef *def, virDomainDiskBus bus_type, const virDomainDeviceDriveAddress *addr) @@ -6599,129 +6599,6 @@ virDomainDefValidateDeviceIterator(virDomainDefPtr = def, } =20 =20 -static int -virDomainDefCheckDuplicateDiskInfo(const virDomainDef *def) -{ - size_t i; - size_t j; - - for (i =3D 0; i < def->ndisks; i++) { - for (j =3D i + 1; j < def->ndisks; j++) { - if (virDomainDiskDefCheckDuplicateInfo(def->disks[i], - def->disks[j]) < 0) - return -1; - } - } - - return 0; -} - -/** - * virDomainDefCheckDuplicateDriveAddresses: - * @def: domain definition to check against - * - * This function checks @def for duplicate drive addresses. Drive - * addresses are only in use for disks and hostdevs at the moment. - * - * Returns 0 in case of there are no duplicate drive addresses, -1 - * otherwise. - */ -static int -virDomainDefCheckDuplicateDriveAddresses(const virDomainDef *def) -{ - size_t i; - size_t j; - - for (i =3D 0; i < def->ndisks; i++) { - virDomainDiskDefPtr disk_i =3D def->disks[i]; - virDomainDeviceInfoPtr disk_info_i =3D &disk_i->info; - - if (disk_info_i->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) - continue; - - for (j =3D i + 1; j < def->ndisks; j++) { - virDomainDiskDefPtr disk_j =3D def->disks[j]; - virDomainDeviceInfoPtr disk_info_j =3D &disk_j->info; - - if (disk_i->bus !=3D disk_j->bus) - continue; - - if (disk_info_j->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIV= E) - continue; - - if (virDomainDeviceInfoAddressIsEqual(disk_info_i, disk_info_j= )) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Found duplicate drive address for disk w= ith " - "target name '%s' controller=3D'%u' bus= =3D'%u' " - "target=3D'%u' unit=3D'%u'"), - disk_i->dst, - disk_info_i->addr.drive.controller, - disk_info_i->addr.drive.bus, - disk_info_i->addr.drive.target, - disk_info_i->addr.drive.unit); - return -1; - } - } - - /* Note: There is no need to check for conflicts with SCSI - * hostdevs above, because conflicts with hostdevs are checked - * in the next loop. - */ - } - - for (i =3D 0; i < def->nhostdevs; i++) { - virDomainHostdevDefPtr hdev_i =3D def->hostdevs[i]; - virDomainDeviceInfoPtr hdev_info_i =3D hdev_i->info; - virDomainDeviceDriveAddressPtr hdev_addr_i; - - if (!virHostdevIsSCSIDevice(hdev_i)) - continue; - - if (hdev_i->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) - continue; - - hdev_addr_i =3D &hdev_info_i->addr.drive; - for (j =3D i + 1; j < def->nhostdevs; j++) { - virDomainHostdevDefPtr hdev_j =3D def->hostdevs[j]; - virDomainDeviceInfoPtr hdev_info_j =3D hdev_j->info; - - if (!virHostdevIsSCSIDevice(hdev_j)) - continue; - - /* Address type check for hdev_j will be done implicitly - * in virDomainDeviceInfoAddressIsEqual() */ - - if (virDomainDeviceInfoAddressIsEqual(hdev_info_i, hdev_info_j= )) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("SCSI host address controller=3D'%u' " - "bus=3D'%u' target=3D'%u' unit=3D'%u' in " - "use by another SCSI host device"), - hdev_addr_i->bus, - hdev_addr_i->controller, - hdev_addr_i->target, - hdev_addr_i->unit); - return -1; - } - } - - if (virDomainDriveAddressIsUsedByDisk(def, VIR_DOMAIN_DISK_BUS_SCS= I, - hdev_addr_i)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("SCSI host address controller=3D'%u' " - "bus=3D'%u' target=3D'%u' unit=3D'%u' in " - "use by another SCSI disk"), - hdev_addr_i->bus, - hdev_addr_i->controller, - hdev_addr_i->target, - hdev_addr_i->unit); - return -1; - } - } - - return 0; -} - - bool virDomainDefLifecycleActionAllowed(virDomainLifecycle type, virDomainLifecycleAction action) @@ -6899,10 +6776,10 @@ static int virDomainDefValidateInternal(const virDomainDef *def, virDomainXMLOptionPtr xmlopt) { - if (virDomainDefCheckDuplicateDiskInfo(def) < 0) + if (virDomainDefDuplicateDiskInfoValidate(def) < 0) return -1; =20 - if (virDomainDefCheckDuplicateDriveAddresses(def) < 0) + if (virDomainDefDuplicateDriveAddressesValidate(def) < 0) return -1; =20 if (virDomainDefGetVcpusTopology(def, NULL) < 0) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 72771c46b9..71e42d6617 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3915,6 +3915,11 @@ bool virDomainBlockIoTuneInfoEqual(const virDomainBlockIoTuneInfo *a, const virDomainBlockIoTuneInfo *b); =20 +bool +virDomainDriveAddressIsUsedByDisk(const virDomainDef *def, + virDomainDiskBus bus_type, + const virDomainDeviceDriveAddress *addr); + bool virHostdevIsSCSIDevice(const virDomainHostdevDef *hostdev) ATTRIBUTE_NONNULL(1); diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 0eed1ba982..8bbd60c836 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -635,3 +635,128 @@ virDomainDefIdMapValidate(const virDomainDef *def) =20 return 0; } + + +int +virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def) +{ + size_t i; + size_t j; + + for (i =3D 0; i < def->ndisks; i++) { + for (j =3D i + 1; j < def->ndisks; j++) { + if (virDomainDiskDefCheckDuplicateInfo(def->disks[i], + def->disks[j]) < 0) + return -1; + } + } + + return 0; +} + + + +/** + * virDomainDefDuplicateDriveAddressesValidate: + * @def: domain definition to check against + * + * This function checks @def for duplicate drive addresses. Drive + * addresses are only in use for disks and hostdevs at the moment. + * + * Returns 0 in case of there are no duplicate drive addresses, -1 + * otherwise. + */ +int +virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def) +{ + size_t i; + size_t j; + + for (i =3D 0; i < def->ndisks; i++) { + virDomainDiskDefPtr disk_i =3D def->disks[i]; + virDomainDeviceInfoPtr disk_info_i =3D &disk_i->info; + + if (disk_info_i->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) + continue; + + for (j =3D i + 1; j < def->ndisks; j++) { + virDomainDiskDefPtr disk_j =3D def->disks[j]; + virDomainDeviceInfoPtr disk_info_j =3D &disk_j->info; + + if (disk_i->bus !=3D disk_j->bus) + continue; + + if (disk_info_j->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIV= E) + continue; + + if (virDomainDeviceInfoAddressIsEqual(disk_info_i, disk_info_j= )) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Found duplicate drive address for disk w= ith " + "target name '%s' controller=3D'%u' bus= =3D'%u' " + "target=3D'%u' unit=3D'%u'"), + disk_i->dst, + disk_info_i->addr.drive.controller, + disk_info_i->addr.drive.bus, + disk_info_i->addr.drive.target, + disk_info_i->addr.drive.unit); + return -1; + } + } + + /* Note: There is no need to check for conflicts with SCSI + * hostdevs above, because conflicts with hostdevs are checked + * in the next loop. + */ + } + + for (i =3D 0; i < def->nhostdevs; i++) { + virDomainHostdevDefPtr hdev_i =3D def->hostdevs[i]; + virDomainDeviceInfoPtr hdev_info_i =3D hdev_i->info; + virDomainDeviceDriveAddressPtr hdev_addr_i; + + if (!virHostdevIsSCSIDevice(hdev_i)) + continue; + + if (hdev_i->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) + continue; + + hdev_addr_i =3D &hdev_info_i->addr.drive; + for (j =3D i + 1; j < def->nhostdevs; j++) { + virDomainHostdevDefPtr hdev_j =3D def->hostdevs[j]; + virDomainDeviceInfoPtr hdev_info_j =3D hdev_j->info; + + if (!virHostdevIsSCSIDevice(hdev_j)) + continue; + + /* Address type check for hdev_j will be done implicitly + * in virDomainDeviceInfoAddressIsEqual() */ + + if (virDomainDeviceInfoAddressIsEqual(hdev_info_i, hdev_info_j= )) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("SCSI host address controller=3D'%u' " + "bus=3D'%u' target=3D'%u' unit=3D'%u' in " + "use by another SCSI host device"), + hdev_addr_i->bus, + hdev_addr_i->controller, + hdev_addr_i->target, + hdev_addr_i->unit); + return -1; + } + } + + if (virDomainDriveAddressIsUsedByDisk(def, VIR_DOMAIN_DISK_BUS_SCS= I, + hdev_addr_i)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("SCSI host address controller=3D'%u' " + "bus=3D'%u' target=3D'%u' unit=3D'%u' in " + "use by another SCSI disk"), + hdev_addr_i->bus, + hdev_addr_i->controller, + hdev_addr_i->target, + hdev_addr_i->unit); + return -1; + } + } + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 497a02b9b3..1f1a5b1bd1 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -45,3 +45,5 @@ int virDomainSmartcardDefValidate(const virDomainSmartcar= dDef *smartcard, int virDomainDefTunablesValidate(const virDomainDef *def); int virDomainControllerDefValidate(const virDomainControllerDef *controlle= r); int virDomainDefIdMapValidate(const virDomainDef *def); +int virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def); +int virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def); --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709953; cv=none; d=zohomail.com; s=zohoarc; b=lpfL2gCHop6YDVEZtRkFepT8G+Ks//CD8mPF4qP+jkNa0egWVk0H/Foz1c5AEOKUSPljetkCeWIe1jcOEK0ewoJzNWaAwMLk4ofrUBEWfpcdqZquROE/D2RhxGY1Y3YFG5g4+Y1IB5M4AREnwDLNNctu8EOfl1JNFN6dCQPxHrw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709953; h=Content-Type:Content-Transfer-Encoding:Cc: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=fmm8e43DgSBkOSKgth3ZbpQzEGKMxzDbMb+F/0pcLkc=; b=SBH/c9F1vEr01C2xHq6BlfgGaE1yGYm27YgrAvomQAEnbyqAtgTDYLOXHkbqgr+Erafdgp9GWct40zCFgjFobFJV+FCkzqwWUOIpPDY7Q5ZB8hFCcPiCrXetQG7DsambqrbKt6qkDWdK2Nvgkv51gd8TlbfafVu3wfPY0pp/NPE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607709953233976.4012060405939; Fri, 11 Dec 2020 10:05:53 -0800 (PST) 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-340-erSt0_F3N1WZjbYvOwLBFA-1; Fri, 11 Dec 2020 13:05:46 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B4734C73A0; Fri, 11 Dec 2020 18:05:39 +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 27C8E5D71D; Fri, 11 Dec 2020 18:05:39 +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 8658B4BB7B; Fri, 11 Dec 2020 18:05:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5Yao027525 for ; Fri, 11 Dec 2020 13:05:34 -0500 Received: by smtp.corp.redhat.com (Postfix) id A4142115D7BC; Fri, 11 Dec 2020 18:05:34 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9F9C1115D7B6 for ; Fri, 11 Dec 2020 18:05:33 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5AF98811E78 for ; Fri, 11 Dec 2020 18:05:33 +0000 (UTC) Received: from mail-qt1-f196.google.com (mail-qt1-f196.google.com [209.85.160.196]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-470-D4aptZ-TMzatI1QF3uJFfg-1; Fri, 11 Dec 2020 13:05:31 -0500 Received: by mail-qt1-f196.google.com with SMTP id b9so7079987qtr.2 for ; Fri, 11 Dec 2020 10:05:31 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:30 -0800 (PST) X-MC-Unique: erSt0_F3N1WZjbYvOwLBFA-1 X-MC-Unique: D4aptZ-TMzatI1QF3uJFfg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fmm8e43DgSBkOSKgth3ZbpQzEGKMxzDbMb+F/0pcLkc=; b=gsw19GTREyv20j6RzTfF0Oi9w/KJCx/NfPFyP8ajzZ82lsFAA1nSxSGI38Qj6bdKrb 46yxfA1FynaEDfa925vJ1PjxeriDx8Yfx00dc9R115TFoVWYUVP5jMVhXbuIhqHwp+JQ 2rH+LTyE3vT6dC69/XfwreNgpTu+7f746Suu+xCfjrYJ3zpuQQNojwP9NaHdAN/3kmZD j57Znrcih5WdC1N858XMzINJjxlmA39xhR6b4/PkG/Pi8c0I305+wJM4ejP8LnzyiBwJ cCP4PVCt7fouh3jmsJ2r1/EtIa+PBaSjyl0esOZw8G1nh1CRevJGjP13UAD7zEZWxmuu 88Tw== X-Gm-Message-State: AOAM5314/uEAdqJLK0diigKkJZdDfXcKnksuccOnLCpcYCUa2qXhN78x gHpjumKNQ88mmx+hdVFY+kl5e747yx4+VA== X-Google-Smtp-Source: ABdhPJwgUFpXBqyRIJ0QGvFX0g9LYc370nEv0kD8i6wHNwoDtc0len5+GU7QUQxrHygKw/hbco+i1g== X-Received: by 2002:aed:2d83:: with SMTP id i3mr17727917qtd.248.1607709930797; Fri, 11 Dec 2020 10:05:30 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 02/12] domain_conf.c: rename virDomainDeviceInfoIterateInternal() Date: Fri, 11 Dec 2020 15:05:06 -0300 Message-Id: <20201211180516.1952683-3-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Next patch will move virDomainDefValidateAliases() to domain_validate.c, which uses virDomainDeviceInfoIterateInternal(), meaning that this function will be made public. Rename it now to remove the 'Internal' of its name. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 52 +++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0f5d314e2c..d3ea79b708 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4223,10 +4223,10 @@ enum { * behaviour can be altered with virDomainDeviceIterateFlags. */ static int -virDomainDeviceInfoIterateInternal(virDomainDefPtr def, - virDomainDeviceInfoCallback cb, - unsigned int iteratorFlags, - void *opaque) +virDomainDeviceInfoIterateFlags(virDomainDefPtr def, + virDomainDeviceInfoCallback cb, + unsigned int iteratorFlags, + void *opaque) { size_t i; int rc; @@ -4452,7 +4452,7 @@ virDomainDeviceInfoIterate(virDomainDefPtr def, virDomainDeviceInfoCallback cb, void *opaque) { - return virDomainDeviceInfoIterateInternal(def, cb, 0, opaque); + return virDomainDeviceInfoIterateFlags(def, cb, 0, opaque); } =20 =20 @@ -4460,10 +4460,10 @@ bool virDomainDefHasDeviceAddress(virDomainDefPtr def, virDomainDeviceInfoPtr info) { - if (virDomainDeviceInfoIterateInternal(def, - virDomainDefHasDeviceAddressIte= rator, - DOMAIN_DEVICE_ITERATE_ALL_CONSO= LES, - info) < 0) + if (virDomainDeviceInfoIterateFlags(def, + virDomainDefHasDeviceAddressIterat= or, + DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, + info) < 0) return true; =20 return false; @@ -6007,11 +6007,11 @@ virDomainDefPostParse(virDomainDefPtr def, } =20 /* iterate the devices */ - ret =3D virDomainDeviceInfoIterateInternal(def, - virDomainDefPostParseDeviceIt= erator, - DOMAIN_DEVICE_ITERATE_ALL_CON= SOLES | - DOMAIN_DEVICE_ITERATE_MISSING= _INFO, - &data); + ret =3D virDomainDeviceInfoIterateFlags(def, + virDomainDefPostParseDeviceItera= tor, + DOMAIN_DEVICE_ITERATE_ALL_CONSOL= ES | + DOMAIN_DEVICE_ITERATE_MISSING_IN= FO, + &data); =20 if (virDomainDefPostParseCheckFailure(def, parseFlags, ret) < 0) goto cleanup; @@ -6496,10 +6496,10 @@ virDomainDefValidateAliases(const virDomainDef *def, if (!(data.aliases =3D virHashNew(NULL))) goto cleanup; =20 - if (virDomainDeviceInfoIterateInternal((virDomainDefPtr) def, - virDomainDeviceDefValidateAlias= esIterator, - DOMAIN_DEVICE_ITERATE_ALL_CONSO= LES, - &data) < 0) + if (virDomainDeviceInfoIterateFlags((virDomainDefPtr) def, + virDomainDeviceDefValidateAliasesI= terator, + DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, + &data) < 0) goto cleanup; =20 if (aliases) @@ -6874,11 +6874,11 @@ virDomainDefValidate(virDomainDefPtr def, return -1; =20 /* iterate the devices */ - if (virDomainDeviceInfoIterateInternal(def, - virDomainDefValidateDeviceItera= tor, - (DOMAIN_DEVICE_ITERATE_ALL_CONS= OLES | - DOMAIN_DEVICE_ITERATE_MISSING_= INFO), - &data) < 0) + if (virDomainDeviceInfoIterateFlags(def, + virDomainDefValidateDeviceIterator, + (DOMAIN_DEVICE_ITERATE_ALL_CONSOLE= S | + DOMAIN_DEVICE_ITERATE_MISSING_INF= O), + &data) < 0) return -1; =20 if (virDomainDefValidateInternal(def, xmlopt) < 0) @@ -30846,9 +30846,9 @@ virDomainDefFindDevice(virDomainDefPtr def, virDomainDefFindDeviceCallbackData data =3D { devAlias, dev }; =20 dev->type =3D VIR_DOMAIN_DEVICE_NONE; - virDomainDeviceInfoIterateInternal(def, virDomainDefFindDeviceCallback, - DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, - &data); + virDomainDeviceInfoIterateFlags(def, virDomainDefFindDeviceCallback, + DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, + &data); =20 if (dev->type =3D=3D VIR_DOMAIN_DEVICE_NONE) { if (reportError) { --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709969; cv=none; d=zohomail.com; s=zohoarc; b=lA9msUFjUpEnFt7mYaTpiQQu+BdAoV4i1IBE80XRWIfU/feT5PVWF/sfnIEFj1zvF6V7Tjl7DZDWpPjmb/EKh0LQymAOfoEmtNNzPP50igNdG0BdzqefItkJbaDyRWywa64vgfFojvjO95yrEd9HWUvDeGAWD/VxRwq6LlC8hLQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709969; h=Content-Type:Content-Transfer-Encoding:Cc: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=qebHr6IKHxmKmvmyGxKfnK8DdZdjCSl2xj9PCn+CZK4=; b=T5ysqwgV6RfA64V3Q6x28aJa0PnRIi5R+oEt4bLuEsCzhT5xKP/6yqPVgb8+fVAUTjohFOcNxVAtFnq74PwcmaS0cWLt1gW/wOgcqcuXNONDS7yuY90qmRDkw9eIszwhZlcKLdx65g5pJKmFSeqZcORCWsm3NGzemRELWoKuNvY= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607709968847923.1306974944963; Fri, 11 Dec 2020 10:06:08 -0800 (PST) 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-243-vltiiYIZOpin1NPlsDSTVQ-1; Fri, 11 Dec 2020 13:06:01 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 666A9107ACE6; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3FD221002393; Fri, 11 Dec 2020 18:05:51 +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 07EEE1809CA2; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5a33027541 for ; Fri, 11 Dec 2020 13:05:36 -0500 Received: by smtp.corp.redhat.com (Postfix) id 389492166B2A; Fri, 11 Dec 2020 18:05:36 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast04.extmail.prod.ext.rdu2.redhat.com [10.11.55.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3365C2166B29 for ; Fri, 11 Dec 2020 18:05:36 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1B0CC1010424 for ; Fri, 11 Dec 2020 18:05:36 +0000 (UTC) Received: from mail-qt1-f195.google.com (mail-qt1-f195.google.com [209.85.160.195]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-592-AvXrKBedP0eN2s_0naCejg-1; Fri, 11 Dec 2020 13:05:33 -0500 Received: by mail-qt1-f195.google.com with SMTP id y15so7062937qtv.5 for ; Fri, 11 Dec 2020 10:05:33 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:32 -0800 (PST) X-MC-Unique: vltiiYIZOpin1NPlsDSTVQ-1 X-MC-Unique: AvXrKBedP0eN2s_0naCejg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qebHr6IKHxmKmvmyGxKfnK8DdZdjCSl2xj9PCn+CZK4=; b=hOIa1TmCdT5A9+7jKzDk4k8qT42zUuazmvBgD9UAwEeXBiWoIIuEmTGhYpB2zTeJ86 JS2kDeumUku+rO6y4GdUmp2DYQ4EKnziVyklo4CRDAOpTveBZgKvOjVCCU45KctoU/ar db6sYufSRxiev670OLj4sSGIE+XyoIpO8qxD7G6dNUfdgs4cj61onbEydUNWUXeL5nq7 sAr/GvoTRIyNwqyUywwPe4qLWpV9tWX9xgndz17ltgcAJOxgtW5ImqCRBYE/D9tGa5P0 pk/60WcK1oopmq70+pv13ZF5liWJi088YJ/TsUH7NiAR40KL1jW7nK+Pj/sZ0i0qkpYs u6Rw== X-Gm-Message-State: AOAM532eQV8OdyPdvSN2YfnvHKwNg+2QAvJayTRZ2h8sN161ejfFzN6C l8RW+BJQLnxUjkKytGZ3zmlt9sMvfzfW9Q== X-Google-Smtp-Source: ABdhPJxpJmqd2RJcrizCZL5HUNQKr69OIOaTWlzsfkM+ivfYjEE8ghWadoK7lGyE/PgJ+4BgK2c46Q== X-Received: by 2002:ac8:6bc2:: with SMTP id b2mr17684988qtt.286.1607709932968; Fri, 11 Dec 2020 10:05:32 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 03/12] domain_conf: move address validation functions to domain_validate.c Date: Fri, 11 Dec 2020 15:05:07 -0300 Message-Id: <20201211180516.1952683-4-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" virDomainDefValidateAliases() is one of the static functions that needs to be handled before moving virDomainDefValidateInternal(). Let's move all related validate functions to domain_validate.c at the same time. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 144 +------------------------------------ src/conf/domain_conf.h | 14 ++-- src/conf/domain_validate.c | 138 +++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 5 ++ src/libvirt_private.syms | 5 +- src/qemu/qemu_driver.c | 1 + 6 files changed, 159 insertions(+), 148 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d3ea79b708..0425fbaca3 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4213,16 +4213,11 @@ virDomainSkipBackcompatConsole(virDomainDefPtr def, } =20 =20 -enum { - DOMAIN_DEVICE_ITERATE_ALL_CONSOLES =3D 1 << 0, - DOMAIN_DEVICE_ITERATE_MISSING_INFO =3D 1 << 1, -} virDomainDeviceIterateFlags; - /* * Iterates over domain devices calling @cb on each device. The default * behaviour can be altered with virDomainDeviceIterateFlags. */ -static int +int virDomainDeviceInfoIterateFlags(virDomainDefPtr def, virDomainDeviceInfoCallback cb, unsigned int iteratorFlags, @@ -6427,143 +6422,6 @@ virDomainDeviceDefValidateInternal(const virDomainD= eviceDef *dev, } =20 =20 -struct virDomainDefValidateAliasesData { - GHashTable *aliases; -}; - - -static int -virDomainDeviceDefValidateAliasesIterator(virDomainDefPtr def, - virDomainDeviceDefPtr dev, - virDomainDeviceInfoPtr info, - void *opaque) -{ - struct virDomainDefValidateAliasesData *data =3D opaque; - const char *alias =3D info->alias; - - if (!virDomainDeviceAliasIsUserAlias(alias)) - return 0; - - /* Some crazy backcompat for consoles. */ - if (def->nserials && def->nconsoles && - def->consoles[0]->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_CON= SOLE && - def->consoles[0]->targetType =3D=3D VIR_DOMAIN_CHR_CONSOLE_TARGET_= TYPE_SERIAL && - dev->type =3D=3D VIR_DOMAIN_DEVICE_CHR && - virDomainChrEquals(def->serials[0], dev->data.chr)) - return 0; - - if (dev->type =3D=3D VIR_DOMAIN_DEVICE_HOSTDEV && - dev->data.hostdev->parentnet) { - /* This hostdev is a copy of some previous interface. - * Aliases are duplicated. */ - return 0; - } - - if (virHashLookup(data->aliases, alias)) { - virReportError(VIR_ERR_XML_ERROR, - _("non unique alias detected: %s"), - alias); - return -1; - } - - if (virHashAddEntry(data->aliases, alias, (void *) 1) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to construct table of device aliases")); - return -1; - } - - return 0; -} - - -/** - * virDomainDefValidateAliases: - * - * Check for uniqueness of device aliases. If @aliases is not - * NULL return hash table of all the aliases in it. - * - * Returns 0 on success, - * -1 otherwise (with error reported). - */ -static int -virDomainDefValidateAliases(const virDomainDef *def, - GHashTable **aliases) -{ - struct virDomainDefValidateAliasesData data; - int ret =3D -1; - - /* We are not storing copies of aliases. Don't free them. */ - if (!(data.aliases =3D virHashNew(NULL))) - goto cleanup; - - if (virDomainDeviceInfoIterateFlags((virDomainDefPtr) def, - virDomainDeviceDefValidateAliasesI= terator, - DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, - &data) < 0) - goto cleanup; - - if (aliases) - *aliases =3D g_steal_pointer(&data.aliases); - - ret =3D 0; - cleanup: - virHashFree(data.aliases); - return ret; -} - - -static int -virDomainDeviceValidateAliasImpl(const virDomainDef *def, - virDomainDeviceDefPtr dev) -{ - GHashTable *aliases =3D NULL; - virDomainDeviceInfoPtr info =3D virDomainDeviceGetInfo(dev); - int ret =3D -1; - - if (!info || !info->alias) - return 0; - - if (virDomainDefValidateAliases(def, &aliases) < 0) - goto cleanup; - - if (virHashLookup(aliases, info->alias)) { - virReportError(VIR_ERR_XML_ERROR, - _("non unique alias detected: %s"), - info->alias); - goto cleanup; - } - - ret =3D 0; - cleanup: - - virHashFree(aliases); - return ret; -} - - -int -virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, - virDomainDeviceDefPtr dev, - unsigned int flags) -{ - virDomainDefPtr persDef =3D NULL; - virDomainDefPtr liveDef =3D NULL; - - if (virDomainObjGetDefs(vm, flags, &liveDef, &persDef) < 0) - return -1; - - if (persDef && - virDomainDeviceValidateAliasImpl(persDef, dev) < 0) - return -1; - - if (liveDef && - virDomainDeviceValidateAliasImpl(liveDef, dev) < 0) - return -1; - - return 0; -} - - static int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 71e42d6617..ba03a55c7b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2759,6 +2759,11 @@ typedef enum { VIR_DOMAIN_TAINT_LAST } virDomainTaintFlags; =20 +typedef enum { + DOMAIN_DEVICE_ITERATE_ALL_CONSOLES =3D 1 << 0, + DOMAIN_DEVICE_ITERATE_MISSING_INFO =3D 1 << 1, +} virDomainDeviceIterateFlags; + /* Guest VM runtime state */ typedef struct _virDomainStateReason virDomainStateReason; struct _virDomainStateReason { @@ -2987,10 +2992,6 @@ int virDomainDefPostParse(virDomainDefPtr def, void *parseOpaque); bool virDomainDefHasUSB(const virDomainDef *def); =20 -int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, - virDomainDeviceDefPtr dev, - unsigned int flags); - bool virDomainDeviceAliasIsUserAlias(const char *aliasStr); =20 int virDomainDefValidate(virDomainDefPtr def, @@ -3130,6 +3131,11 @@ virDomainChrSourceDefNew(virDomainXMLOptionPtr xmlop= t); =20 virDomainChrDefPtr virDomainChrDefNew(virDomainXMLOptionPtr xmlopt); =20 +int virDomainDeviceInfoIterateFlags(virDomainDefPtr def, + virDomainDeviceInfoCallback cb, + unsigned int iteratorFlags, + void *opaque); + virDomainGraphicsDefPtr virDomainGraphicsDefNew(virDomainXMLOptionPtr xmlopt); =20 diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 8bbd60c836..962336033f 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -760,3 +760,141 @@ virDomainDefDuplicateDriveAddressesValidate(const vir= DomainDef *def) =20 return 0; } + + + +struct virDomainDefValidateAliasesData { + GHashTable *aliases; +}; + + +static int +virDomainDeviceDefValidateAliasesIterator(virDomainDefPtr def, + virDomainDeviceDefPtr dev, + virDomainDeviceInfoPtr info, + void *opaque) +{ + struct virDomainDefValidateAliasesData *data =3D opaque; + const char *alias =3D info->alias; + + if (!virDomainDeviceAliasIsUserAlias(alias)) + return 0; + + /* Some crazy backcompat for consoles. */ + if (def->nserials && def->nconsoles && + def->consoles[0]->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_CON= SOLE && + def->consoles[0]->targetType =3D=3D VIR_DOMAIN_CHR_CONSOLE_TARGET_= TYPE_SERIAL && + dev->type =3D=3D VIR_DOMAIN_DEVICE_CHR && + virDomainChrEquals(def->serials[0], dev->data.chr)) + return 0; + + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_HOSTDEV && + dev->data.hostdev->parentnet) { + /* This hostdev is a copy of some previous interface. + * Aliases are duplicated. */ + return 0; + } + + if (virHashLookup(data->aliases, alias)) { + virReportError(VIR_ERR_XML_ERROR, + _("non unique alias detected: %s"), + alias); + return -1; + } + + if (virHashAddEntry(data->aliases, alias, (void *) 1) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to construct table of device aliases")); + return -1; + } + + return 0; +} + + +/** + * virDomainDefValidateAliases: + * + * Check for uniqueness of device aliases. If @aliases is not + * NULL return hash table of all the aliases in it. + * + * Returns 0 on success, + * -1 otherwise (with error reported). + */ +int +virDomainDefValidateAliases(const virDomainDef *def, + GHashTable **aliases) +{ + struct virDomainDefValidateAliasesData data; + int ret =3D -1; + + /* We are not storing copies of aliases. Don't free them. */ + if (!(data.aliases =3D virHashNew(NULL))) + goto cleanup; + + if (virDomainDeviceInfoIterateFlags((virDomainDefPtr) def, + virDomainDeviceDefValidateAliasesI= terator, + DOMAIN_DEVICE_ITERATE_ALL_CONSOLES, + &data) < 0) + goto cleanup; + + if (aliases) + *aliases =3D g_steal_pointer(&data.aliases); + + ret =3D 0; + cleanup: + virHashFree(data.aliases); + return ret; +} + + +static int +virDomainDeviceValidateAliasImpl(const virDomainDef *def, + virDomainDeviceDefPtr dev) +{ + GHashTable *aliases =3D NULL; + virDomainDeviceInfoPtr info =3D virDomainDeviceGetInfo(dev); + int ret =3D -1; + + if (!info || !info->alias) + return 0; + + if (virDomainDefValidateAliases(def, &aliases) < 0) + goto cleanup; + + if (virHashLookup(aliases, info->alias)) { + virReportError(VIR_ERR_XML_ERROR, + _("non unique alias detected: %s"), + info->alias); + goto cleanup; + } + + ret =3D 0; + cleanup: + + virHashFree(aliases); + return ret; +} + + +int +virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, + virDomainDeviceDefPtr dev, + unsigned int flags) +{ + virDomainDefPtr persDef =3D NULL; + virDomainDefPtr liveDef =3D NULL; + + if (virDomainObjGetDefs(vm, flags, &liveDef, &persDef) < 0) + return -1; + + if (persDef && + virDomainDeviceValidateAliasImpl(persDef, dev) < 0) + return -1; + + if (liveDef && + virDomainDeviceValidateAliasImpl(liveDef, dev) < 0) + return -1; + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 1f1a5b1bd1..521a98ef11 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -47,3 +47,8 @@ int virDomainControllerDefValidate(const virDomainControl= lerDef *controller); int virDomainDefIdMapValidate(const virDomainDef *def); int virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def); int virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def); +int virDomainDefValidateAliases(const virDomainDef *def, + GHashTable **aliases); +int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, + virDomainDeviceDefPtr dev, + unsigned int flags); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 992488f754..c3056232db 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -354,7 +354,6 @@ virDomainDeviceGetInfo; virDomainDeviceInfoIterate; virDomainDeviceSetData; virDomainDeviceTypeToString; -virDomainDeviceValidateAliasForHotplug; virDomainDiskBackingStoreFormat; virDomainDiskBackingStoreParse; virDomainDiskBusTypeToString; @@ -744,6 +743,10 @@ virDomainConfNWFilterTeardown; virDomainConfVMNWFilterTeardown; =20 =20 +# conf/domain_validate.h +virDomainDeviceValidateAliasForHotplug; + + # conf/interface_conf.h virInterfaceDefFormat; virInterfaceDefFree; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 58c376fbe5..5f0fb0a55f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -70,6 +70,7 @@ #include "domain_audit.h" #include "domain_cgroup.h" #include "domain_driver.h" +#include "domain_validate.h" #include "node_device_conf.h" #include "virpci.h" #include "virusb.h" --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709953; cv=none; d=zohomail.com; s=zohoarc; b=epZM/oKON2D2bfRay50HrtDjkAc9GpUNNLIg5+iBXTg7md5yukdxk8hmmOMeF98kAwcI51KqQH7yhm93juMC/ynZZv11HChavft1FO/e+fWN1KsCTzOKU7Gomf4NjbOsi9uNd8oQY4eU5LWibqxp7cyQLBgx+aUKgJ9q0FoZlPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709953; h=Content-Type:Content-Transfer-Encoding:Cc: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=4DFSp0ovBkAOMB1brCBfImn9QtFQGJqTO+cu6iwAa3I=; b=iI8CMf+B58U1f9T6HaQiWLUjRkuMPmE2/798F1v8WgLvJj9Oa7rM2GZ+tr8mjBLkMMRSg81XmQYX4cqvMEwSZVtQzqjcuxXNkEIS2Dpnt2G9M3zEKMtmr2aaPmcuBBHzqpIkZkUggsyzT/aV766bi0TljeAyMhp/4dsIXVLoK+g= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607709953475974.3478694999636; Fri, 11 Dec 2020 10:05:53 -0800 (PST) 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-177-EDICFEdBP3O7aOThPLdnfg-1; Fri, 11 Dec 2020 13:05:48 -0500 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 8CDB4190A7A0; Fri, 11 Dec 2020 18:05:42 +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 685DA60657; Fri, 11 Dec 2020 18:05:42 +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 2E3274E58E; Fri, 11 Dec 2020 18:05:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5ecX027566 for ; Fri, 11 Dec 2020 13:05:40 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9264D2026D12; Fri, 11 Dec 2020 18:05:40 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast04.extmail.prod.ext.rdu2.redhat.com [10.11.55.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D2622026D11 for ; Fri, 11 Dec 2020 18:05:37 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 85AE71010426 for ; Fri, 11 Dec 2020 18:05:37 +0000 (UTC) Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-567-PdCZKjfIMZ2btKvYHtNwmQ-1; Fri, 11 Dec 2020 13:05:35 -0500 Received: by mail-qt1-f193.google.com with SMTP id z3so7071880qtw.9 for ; Fri, 11 Dec 2020 10:05:35 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:34 -0800 (PST) X-MC-Unique: EDICFEdBP3O7aOThPLdnfg-1 X-MC-Unique: PdCZKjfIMZ2btKvYHtNwmQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4DFSp0ovBkAOMB1brCBfImn9QtFQGJqTO+cu6iwAa3I=; b=DqjMCuG4SDo1Zvvb2YI1ZjTL/cQWCvWcmoLQbSYU2O+5WcUSEX7AnKBqU8zbXbodzL 5XeMm1SuQeLxcYGtXCUHE6LU2AOzUUBWOBuwds2iCIbQuRrTSdVTyFfTBJIgJhZWm0lC XOJXUAziFNMK/NN3Jvveq+mIsxNut/ER5unJ/oAUCRoETFfcK/4KsBAZg++yT3OxcTtW uyVuc/3uHffH1/Z7vH98tLYgxKB/vfwFwkmDEphRCj3eO4M5bgVolBmiMkfB0nkJmL5Z BXr9FoyJU6/PRk2qkFOWXOL6qI34NcTQAGbjSnMTpKHL2NtDq0jnmpWy0mnj9iyTfoC8 dC1w== X-Gm-Message-State: AOAM532ROEYwablFYFX0LSFfo/BEKFhixc7iwWjq/qWth7NEopZtuYeB 7jFaOJPVmchVrKlivA/c1TyUSDNJo+S9TQ== X-Google-Smtp-Source: ABdhPJy2E+LIb+OL1CYnAyJ0LG/ecr13FeO76ng8DF2HXkPQ0gESpKVPTmz9Ji/WZgLjomiEvH/WCQ== X-Received: by 2002:ac8:1486:: with SMTP id l6mr16117714qtj.123.1607709934573; Fri, 11 Dec 2020 10:05:34 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 04/12] domain_conf: move all virDomainDefValidateInternal() helpers to domain_validate.c Date: Fri, 11 Dec 2020 15:05:08 -0300 Message-Id: <20201211180516.1952683-5-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patches moves the remaining static functions that virDomainDefValidateInternal() uses to domain_validate.c. This allows the next patch to move virDomainDefValidateInternal(), and virDomainDefValidate(), without too much hassle. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 165 ------------------------------------- src/conf/domain_conf.h | 24 ++++++ src/conf/domain_validate.c | 142 +++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 6 ++ 4 files changed, 172 insertions(+), 165 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0425fbaca3..1cd7733652 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -68,30 +68,6 @@ =20 VIR_LOG_INIT("conf.domain_conf"); =20 -/* This structure holds various callbacks and data needed - * while parsing and creating domain XMLs */ -struct _virDomainXMLOption { - virObject parent; - - /* XML parser callbacks and defaults */ - virDomainDefParserConfig config; - - /* domain private data management callbacks */ - virDomainXMLPrivateDataCallbacks privateData; - - /* XML namespace callbacks */ - virXMLNamespace ns; - - /* ABI stability callbacks */ - virDomainABIStability abi; - - /* Private data for save image stored in snapshot XML */ - virSaveCookieCallbacks saveCookie; - - /* Snapshot postparse callbacks */ - virDomainMomentPostParseCallback momentPostParse; -}; - #define VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS \ (VIR_DOMAIN_DEF_FORMAT_SECURE | \ VIR_DOMAIN_DEF_FORMAT_INACTIVE | \ @@ -6489,147 +6465,6 @@ virDomainDefLifecycleActionAllowed(virDomainLifecyc= le type, } =20 =20 -static int -virDomainDefLifecycleActionValidate(const virDomainDef *def) -{ - if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_POWEROFF, - def->onPoweroff)) { - return -1; - } - - if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_REBOOT, - def->onReboot)) { - return -1; - } - - if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_CRASH, - def->onCrash)) { - return -1; - } - - return 0; -} - - -#define CPUTUNE_VALIDATE_PERIOD(name) \ - do { \ - if (def->cputune.name > 0 && \ - (def->cputune.name < 1000 || def->cputune.name > 1000000)) { \ - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ - _("Value of cputune '%s' must be in range " \ - "[1000, 1000000]"), #name); \ - return -1; \ - } \ - } while (0) - -#define CPUTUNE_VALIDATE_QUOTA(name) \ - do { \ - if (def->cputune.name > 0 && \ - (def->cputune.name < 1000 || \ - def->cputune.name > 18446744073709551LL)) { \ - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ - _("Value of cputune '%s' must be in range " \ - "[1000, 18446744073709551]"), #name); \ - return -1; \ - } \ - } while (0) - -static int -virDomainDefCputuneValidate(const virDomainDef *def) -{ - CPUTUNE_VALIDATE_PERIOD(period); - CPUTUNE_VALIDATE_PERIOD(global_period); - CPUTUNE_VALIDATE_PERIOD(emulator_period); - CPUTUNE_VALIDATE_PERIOD(iothread_period); - - CPUTUNE_VALIDATE_QUOTA(quota); - CPUTUNE_VALIDATE_QUOTA(global_quota); - CPUTUNE_VALIDATE_QUOTA(emulator_quota); - CPUTUNE_VALIDATE_QUOTA(iothread_quota); - - return 0; -} -#undef CPUTUNE_VALIDATE_PERIOD -#undef CPUTUNE_VALIDATE_QUOTA - - -static int -virDomainDefMemtuneValidate(const virDomainDef *def) -{ - const virDomainMemtune *mem =3D &(def->mem); - size_t i; - ssize_t pos =3D virDomainNumaGetNodeCount(def->numa) - 1; - - for (i =3D 0; i < mem->nhugepages; i++) { - size_t j; - ssize_t nextBit; - - for (j =3D 0; j < i; j++) { - if (mem->hugepages[i].nodemask && - mem->hugepages[j].nodemask && - virBitmapOverlaps(mem->hugepages[i].nodemask, - mem->hugepages[j].nodemask)) { - virReportError(VIR_ERR_XML_DETAIL, - _("nodeset attribute of hugepages " - "of sizes %llu and %llu intersect"), - mem->hugepages[i].size, - mem->hugepages[j].size); - return -1; - } else if (!mem->hugepages[i].nodemask && - !mem->hugepages[j].nodemask) { - virReportError(VIR_ERR_XML_DETAIL, - _("two master hugepages detected: " - "%llu and %llu"), - mem->hugepages[i].size, - mem->hugepages[j].size); - return -1; - } - } - - if (!mem->hugepages[i].nodemask) { - /* This is the master hugepage to use. Skip it as it has no - * nodemask anyway. */ - continue; - } - - nextBit =3D virBitmapNextSetBit(mem->hugepages[i].nodemask, pos); - if (nextBit >=3D 0) { - virReportError(VIR_ERR_XML_DETAIL, - _("hugepages: node %zd not found"), - nextBit); - return -1; - } - } - - return 0; -} - - -static int -virDomainDefOSValidate(const virDomainDef *def, - virDomainXMLOptionPtr xmlopt) -{ - if (!def->os.loader) - return 0; - - if (def->os.firmware && - !(xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_FW_AUTOSELECT))= { - virReportError(VIR_ERR_XML_DETAIL, "%s", - _("firmware auto selection not implemented for this= driver")); - return -1; - } - - if (!def->os.loader->path && - def->os.firmware =3D=3D VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) { - virReportError(VIR_ERR_XML_DETAIL, "%s", - _("no loader path specified and firmware auto selec= tion disabled")); - return -1; - } - - return 0; -} - - static int virDomainDefValidateInternal(const virDomainDef *def, virDomainXMLOptionPtr xmlopt) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ba03a55c7b..5f8ec16b7d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2982,6 +2982,30 @@ virXMLNamespacePtr virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt) ATTRIBUTE_NONNULL(1); =20 +/* This structure holds various callbacks and data needed + * while parsing and creating domain XMLs */ +struct _virDomainXMLOption { + virObject parent; + + /* XML parser callbacks and defaults */ + virDomainDefParserConfig config; + + /* domain private data management callbacks */ + virDomainXMLPrivateDataCallbacks privateData; + + /* XML namespace callbacks */ + virXMLNamespace ns; + + /* ABI stability callbacks */ + virDomainABIStability abi; + + /* Private data for save image stored in snapshot XML */ + virSaveCookieCallbacks saveCookie; + + /* Snapshot postparse callbacks */ + virDomainMomentPostParseCallback momentPostParse; +}; + bool virDomainSCSIDriveAddressIsUsed(const virDomainDef *def, const virDomainDeviceDriveAddress *addr); diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 962336033f..02cd761ee2 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -22,6 +22,7 @@ =20 #include "domain_validate.h" #include "domain_conf.h" +#include "virconftypes.h" #include "virlog.h" #include "virutil.h" =20 @@ -898,3 +899,144 @@ virDomainDeviceValidateAliasForHotplug(virDomainObjPt= r vm, =20 return 0; } + + +int +virDomainDefLifecycleActionValidate(const virDomainDef *def) +{ + if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_POWEROFF, + def->onPoweroff)) { + return -1; + } + + if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_REBOOT, + def->onReboot)) { + return -1; + } + + if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_CRASH, + def->onCrash)) { + return -1; + } + + return 0; +} + + +int +virDomainDefMemtuneValidate(const virDomainDef *def) +{ + const virDomainMemtune *mem =3D &(def->mem); + size_t i; + ssize_t pos =3D virDomainNumaGetNodeCount(def->numa) - 1; + + for (i =3D 0; i < mem->nhugepages; i++) { + size_t j; + ssize_t nextBit; + + for (j =3D 0; j < i; j++) { + if (mem->hugepages[i].nodemask && + mem->hugepages[j].nodemask && + virBitmapOverlaps(mem->hugepages[i].nodemask, + mem->hugepages[j].nodemask)) { + virReportError(VIR_ERR_XML_DETAIL, + _("nodeset attribute of hugepages " + "of sizes %llu and %llu intersect"), + mem->hugepages[i].size, + mem->hugepages[j].size); + return -1; + } else if (!mem->hugepages[i].nodemask && + !mem->hugepages[j].nodemask) { + virReportError(VIR_ERR_XML_DETAIL, + _("two master hugepages detected: " + "%llu and %llu"), + mem->hugepages[i].size, + mem->hugepages[j].size); + return -1; + } + } + + if (!mem->hugepages[i].nodemask) { + /* This is the master hugepage to use. Skip it as it has no + * nodemask anyway. */ + continue; + } + + nextBit =3D virBitmapNextSetBit(mem->hugepages[i].nodemask, pos); + if (nextBit >=3D 0) { + virReportError(VIR_ERR_XML_DETAIL, + _("hugepages: node %zd not found"), + nextBit); + return -1; + } + } + + return 0; +} + + +int +virDomainDefOSValidate(const virDomainDef *def, + virDomainXMLOptionPtr xmlopt) +{ + if (!def->os.loader) + return 0; + + if (def->os.firmware && + !(xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_FW_AUTOSELECT))= { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("firmware auto selection not implemented for this= driver")); + return -1; + } + + if (!def->os.loader->path && + def->os.firmware =3D=3D VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("no loader path specified and firmware auto selec= tion disabled")); + return -1; + } + + return 0; +} + + +#define CPUTUNE_VALIDATE_PERIOD(name) \ + do { \ + if (def->cputune.name > 0 && \ + (def->cputune.name < 1000 || def->cputune.name > 1000000)) { \ + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ + _("Value of cputune '%s' must be in range " \ + "[1000, 1000000]"), #name); \ + return -1; \ + } \ + } while (0) + +#define CPUTUNE_VALIDATE_QUOTA(name) \ + do { \ + if (def->cputune.name > 0 && \ + (def->cputune.name < 1000 || \ + def->cputune.name > 18446744073709551LL)) { \ + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ + _("Value of cputune '%s' must be in range " \ + "[1000, 18446744073709551]"), #name); \ + return -1; \ + } \ + } while (0) + +int +virDomainDefCputuneValidate(const virDomainDef *def) +{ + CPUTUNE_VALIDATE_PERIOD(period); + CPUTUNE_VALIDATE_PERIOD(global_period); + CPUTUNE_VALIDATE_PERIOD(emulator_period); + CPUTUNE_VALIDATE_PERIOD(iothread_period); + + CPUTUNE_VALIDATE_QUOTA(quota); + CPUTUNE_VALIDATE_QUOTA(global_quota); + CPUTUNE_VALIDATE_QUOTA(emulator_quota); + CPUTUNE_VALIDATE_QUOTA(iothread_quota); + + return 0; +} +#undef CPUTUNE_VALIDATE_PERIOD +#undef CPUTUNE_VALIDATE_QUOTA diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 521a98ef11..4247dfd758 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -23,6 +23,7 @@ #include =20 #include "domain_conf.h" +#include "virconftypes.h" =20 int virDomainDefBootValidate(const virDomainDef *def); int virDomainDefVideoValidate(const virDomainDef *def); @@ -52,3 +53,8 @@ int virDomainDefValidateAliases(const virDomainDef *def, int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, virDomainDeviceDefPtr dev, unsigned int flags); +int virDomainDefLifecycleActionValidate(const virDomainDef *def); +int virDomainDefMemtuneValidate(const virDomainDef *def); +int virDomainDefOSValidate(const virDomainDef *def, + virDomainXMLOptionPtr xmlopt); +int virDomainDefCputuneValidate(const virDomainDef *def); --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709962; cv=none; d=zohomail.com; s=zohoarc; b=Nzdnd3J/f7y8OdvwPXhww95HCDpsPKK4GDF4j2k5azqL/hpH4q35PIRIYc1EIbR+Y3KLlB6yLm0ZbglSjxJUcxCAtACps+ewNO160DWhC03pLnX/NFy4F/5B34oQVUc4J+wjFhvJhnPuWft2lZdMEGwj+3uHTT0LvcMjANlS4OA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709962; h=Content-Type:Content-Transfer-Encoding:Cc: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=OhbbjvGLQfCECzKUjXgyex8++xpgEnWnhYBAPH4mEGw=; b=De8SZQkunvWbCVc8D+epzP3b7xJUM+9U7K/8VMLJrPjq5eKihLobvrPZTZN8a/44p0xld58YU6nWNEMXVQn7wp/00Q5JdpufdU1htJELoC0mC5fjMM8teRRZoR/RfP/vAdPFn6Ea3Gm9RA7CxS0qWPHlqJpShEb4azP1AC329Qg= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607709962766929.6926817559398; Fri, 11 Dec 2020 10:06:02 -0800 (PST) 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-476-If3m2M1SPCybOIweiuxFsg-1; Fri, 11 Dec 2020 13:05:58 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 64677800D53; Fri, 11 Dec 2020 18:05:51 +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 3D4151992D; Fri, 11 Dec 2020 18:05:51 +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 0A9054EEF6; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5gd5027576 for ; Fri, 11 Dec 2020 13:05:42 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9BE4F2026D3B; Fri, 11 Dec 2020 18:05:42 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9565C2026D11 for ; Fri, 11 Dec 2020 18:05:39 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C3D931875041 for ; Fri, 11 Dec 2020 18:05:39 +0000 (UTC) Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-53-o6zVxeQLMoiSqFmMAm3ILQ-1; Fri, 11 Dec 2020 13:05:37 -0500 Received: by mail-qk1-f194.google.com with SMTP id w79so9285925qkb.5 for ; Fri, 11 Dec 2020 10:05:37 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:35 -0800 (PST) X-MC-Unique: If3m2M1SPCybOIweiuxFsg-1 X-MC-Unique: o6zVxeQLMoiSqFmMAm3ILQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OhbbjvGLQfCECzKUjXgyex8++xpgEnWnhYBAPH4mEGw=; b=mEd4aGhmWM9qbiv98B3p0LyXJTnbvhk0WE5ICdnL0swqMvknhKqnoXG97Ey+5bviee mCZd8geBrxlgX5ELpHi+H4A5JEOD8hsRP3Zs/dP7OPeC3DcAESzwmwjHE2IEmrBET2Lh 4ZxDvN56byOuw7QO0hVOLyqA2YQNwp8FHIyA18Wb0a1EY0MsvCAfT9yTeihlf2f3TJas 1lWIoxVnW+P4f1iyimNKbY+Mo1jBp1LNAVRZYZNm/TK6yh7BU+C6iGtNz88P8weKHVBS gK0/7ea7NT1gd/kHlHJD7GKnPy630CZbBp5Ow4OiAFg5XKijoAOHam0nYD6smSx0m1/F mHfQ== X-Gm-Message-State: AOAM531lGtFGeIJdz40OVEj9KKLleqTVaCO2m77Hb78XSSmcCamtVew+ EIbky37uoVM4xqqZPwIEXKpsGC9T06SjCA== X-Google-Smtp-Source: ABdhPJxpUGDeDVOJcmw/v/GH9V/CwbJYK3GlK1QzxunYJy7m0jf8trNkkOao31Jz1jg0/ZvfsuXABQ== X-Received: by 2002:a37:478f:: with SMTP id u137mr17321531qka.16.1607709936388; Fri, 11 Dec 2020 10:05:36 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 05/12] domain_conf.c: move virDomainDeviceDefValidate() to domain_validate.c Date: Fri, 11 Dec 2020 15:05:09 -0300 Message-Id: <20201211180516.1952683-6-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move virDomainDeviceDefValidate() and all its helper functions to domain_validate.c. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 137 +------------------------------------ src/conf/domain_conf.h | 16 +++-- src/conf/domain_validate.c | 129 ++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 4 ++ src/libvirt_private.syms | 2 +- src/qemu/qemu_process.c | 1 + 6 files changed, 147 insertions(+), 142 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1cd7733652..bf9d00094c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5643,13 +5643,6 @@ virDomainDeviceDefPostParseOne(virDomainDeviceDefPtr= dev, } =20 =20 -struct virDomainDefPostParseDeviceIteratorData { - virDomainXMLOptionPtr xmlopt; - void *parseOpaque; - unsigned int parseFlags; -}; - - static int virDomainDefPostParseDeviceIterator(virDomainDefPtr def, virDomainDeviceDefPtr dev, @@ -6398,7 +6391,7 @@ virDomainDeviceDefValidateInternal(const virDomainDev= iceDef *dev, } =20 =20 -static int +int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, unsigned int parseFlags, @@ -6420,19 +6413,6 @@ virDomainDeviceDefValidate(const virDomainDeviceDef = *dev, } =20 =20 -static int -virDomainDefValidateDeviceIterator(virDomainDefPtr def, - virDomainDeviceDefPtr dev, - virDomainDeviceInfoPtr info G_GNUC_UNUS= ED, - void *opaque) -{ - struct virDomainDefPostParseDeviceIteratorData *data =3D opaque; - return virDomainDeviceDefValidate(dev, def, - data->parseFlags, data->xmlopt, - data->parseOpaque); -} - - bool virDomainDefLifecycleActionAllowed(virDomainLifecycle type, virDomainLifecycleAction action) @@ -6465,121 +6445,6 @@ virDomainDefLifecycleActionAllowed(virDomainLifecyc= le type, } =20 =20 -static int -virDomainDefValidateInternal(const virDomainDef *def, - virDomainXMLOptionPtr xmlopt) -{ - if (virDomainDefDuplicateDiskInfoValidate(def) < 0) - return -1; - - if (virDomainDefDuplicateDriveAddressesValidate(def) < 0) - return -1; - - if (virDomainDefGetVcpusTopology(def, NULL) < 0) - return -1; - - if (virDomainDefValidateAliases(def, NULL) < 0) - return -1; - - if (def->iommu && - def->iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ON && - def->features[VIR_DOMAIN_FEATURE_IOAPIC] !=3D VIR_DOMAIN_IOAPIC_QE= MU) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("IOMMU interrupt remapping requires split I/O API= C " - "(ioapic driver=3D'qemu')")); - return -1; - } - - if (def->iommu && - def->iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ON && - def->iommu->intremap !=3D VIR_TRISTATE_SWITCH_ON) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("IOMMU eim requires interrupt remapping to be ena= bled")); - return -1; - } - - if (virDomainDefLifecycleActionValidate(def) < 0) - return -1; - - if (virDomainDefMemtuneValidate(def) < 0) - return -1; - - if (virDomainDefOSValidate(def, xmlopt) < 0) - return -1; - - if (virDomainDefCputuneValidate(def) < 0) - return -1; - - if (virDomainDefBootValidate(def) < 0) - return -1; - - if (virDomainDefVideoValidate(def) < 0) - return -1; - - if (virDomainDefTunablesValidate(def) < 0) - return -1; - - if (virDomainDefIdMapValidate(def) < 0) - return -1; - - if (virDomainNumaDefValidate(def->numa) < 0) - return -1; - - return 0; -} - - -/** - * virDomainDefValidate: - * @def: domain definition - * @caps: driver capabilities object - * @parseFlags: virDomainDefParseFlags - * @xmlopt: XML parser option object - * @parseOpaque: hypervisor driver specific data for this validation run - * - * This validation function is designed to take checks of globally invalid - * configurations that the parser needs to accept so that VMs don't vanish= upon - * daemon restart. Such definition can be rejected upon startup or define,= where - * this function shall be called. - * - * Returns 0 if domain definition is valid, -1 on error and reports an - * appropriate message. - */ -int -virDomainDefValidate(virDomainDefPtr def, - unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt, - void *parseOpaque) -{ - struct virDomainDefPostParseDeviceIteratorData data =3D { - .xmlopt =3D xmlopt, - .parseFlags =3D parseFlags, - .parseOpaque =3D parseOpaque, - }; - - /* validate configuration only in certain places */ - if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) - return 0; - - /* call the domain config callback */ - if (xmlopt->config.domainValidateCallback && - xmlopt->config.domainValidateCallback(def, xmlopt->config.priv, pa= rseOpaque) < 0) - return -1; - - /* iterate the devices */ - if (virDomainDeviceInfoIterateFlags(def, - virDomainDefValidateDeviceIterator, - (DOMAIN_DEVICE_ITERATE_ALL_CONSOLE= S | - DOMAIN_DEVICE_ITERATE_MISSING_INF= O), - &data) < 0) - return -1; - - if (virDomainDefValidateInternal(def, xmlopt) < 0) - return -1; - - return 0; -} - int virDomainObjCheckActive(virDomainObjPtr dom) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 5f8ec16b7d..1c1533ed2f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3006,6 +3006,12 @@ struct _virDomainXMLOption { virDomainMomentPostParseCallback momentPostParse; }; =20 +struct virDomainDefPostParseDeviceIteratorData { + virDomainXMLOptionPtr xmlopt; + void *parseOpaque; + unsigned int parseFlags; +}; + bool virDomainSCSIDriveAddressIsUsed(const virDomainDef *def, const virDomainDeviceDriveAddress *addr); @@ -3018,11 +3024,6 @@ bool virDomainDefHasUSB(const virDomainDef *def); =20 bool virDomainDeviceAliasIsUserAlias(const char *aliasStr); =20 -int virDomainDefValidate(virDomainDefPtr def, - unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt, - void *parseOpaque); - int virDomainActualNetDefValidate(const virDomainNetDef *net); =20 @@ -3124,6 +3125,11 @@ void virDomainRedirdevDefFree(virDomainRedirdevDefPt= r def); void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def); void virDomainShmemDefFree(virDomainShmemDefPtr def); void virDomainDeviceDefFree(virDomainDeviceDefPtr def); +int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, + const virDomainDef *def, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt, + void *parseOpaque); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDeviceDef, virDomainDeviceDefFree); virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src, const virDomainDef *def, diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 02cd761ee2..47aa3e4375 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1040,3 +1040,132 @@ virDomainDefCputuneValidate(const virDomainDef *def) } #undef CPUTUNE_VALIDATE_PERIOD #undef CPUTUNE_VALIDATE_QUOTA + + +static int +virDomainDefValidateInternal(const virDomainDef *def, + virDomainXMLOptionPtr xmlopt) +{ + if (virDomainDefDuplicateDiskInfoValidate(def) < 0) + return -1; + + if (virDomainDefDuplicateDriveAddressesValidate(def) < 0) + return -1; + + if (virDomainDefGetVcpusTopology(def, NULL) < 0) + return -1; + + if (virDomainDefValidateAliases(def, NULL) < 0) + return -1; + + if (def->iommu && + def->iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ON && + def->features[VIR_DOMAIN_FEATURE_IOAPIC] !=3D VIR_DOMAIN_IOAPIC_QE= MU) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("IOMMU interrupt remapping requires split I/O API= C " + "(ioapic driver=3D'qemu')")); + return -1; + } + + if (def->iommu && + def->iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ON && + def->iommu->intremap !=3D VIR_TRISTATE_SWITCH_ON) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("IOMMU eim requires interrupt remapping to be ena= bled")); + return -1; + } + + if (virDomainDefLifecycleActionValidate(def) < 0) + return -1; + + if (virDomainDefMemtuneValidate(def) < 0) + return -1; + + if (virDomainDefOSValidate(def, xmlopt) < 0) + return -1; + + if (virDomainDefCputuneValidate(def) < 0) + return -1; + + if (virDomainDefBootValidate(def) < 0) + return -1; + + if (virDomainDefVideoValidate(def) < 0) + return -1; + + if (virDomainDefTunablesValidate(def) < 0) + return -1; + + if (virDomainDefIdMapValidate(def) < 0) + return -1; + + if (virDomainNumaDefValidate(def->numa) < 0) + return -1; + + return 0; +} + + +static int +virDomainDefValidateDeviceIterator(virDomainDefPtr def, + virDomainDeviceDefPtr dev, + virDomainDeviceInfoPtr info G_GNUC_UNUS= ED, + void *opaque) +{ + struct virDomainDefPostParseDeviceIteratorData *data =3D opaque; + return virDomainDeviceDefValidate(dev, def, + data->parseFlags, data->xmlopt, + data->parseOpaque); +} + + +/** + * virDomainDefValidate: + * @def: domain definition + * @caps: driver capabilities object + * @parseFlags: virDomainDefParseFlags + * @xmlopt: XML parser option object + * @parseOpaque: hypervisor driver specific data for this validation run + * + * This validation function is designed to take checks of globally invalid + * configurations that the parser needs to accept so that VMs don't vanish= upon + * daemon restart. Such definition can be rejected upon startup or define,= where + * this function shall be called. + * + * Returns 0 if domain definition is valid, -1 on error and reports an + * appropriate message. + */ +int +virDomainDefValidate(virDomainDefPtr def, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt, + void *parseOpaque) +{ + struct virDomainDefPostParseDeviceIteratorData data =3D { + .xmlopt =3D xmlopt, + .parseFlags =3D parseFlags, + .parseOpaque =3D parseOpaque, + }; + + /* validate configuration only in certain places */ + if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) + return 0; + + /* call the domain config callback */ + if (xmlopt->config.domainValidateCallback && + xmlopt->config.domainValidateCallback(def, xmlopt->config.priv, pa= rseOpaque) < 0) + return -1; + + /* iterate the devices */ + if (virDomainDeviceInfoIterateFlags(def, + virDomainDefValidateDeviceIterator, + (DOMAIN_DEVICE_ITERATE_ALL_CONSOLE= S | + DOMAIN_DEVICE_ITERATE_MISSING_INF= O), + &data) < 0) + return -1; + + if (virDomainDefValidateInternal(def, xmlopt) < 0) + return -1; + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 4247dfd758..309ae5f950 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -58,3 +58,7 @@ int virDomainDefMemtuneValidate(const virDomainDef *def); int virDomainDefOSValidate(const virDomainDef *def, virDomainXMLOptionPtr xmlopt); int virDomainDefCputuneValidate(const virDomainDef *def); +int virDomainDefValidate(virDomainDefPtr def, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt, + void *parseOpaque); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c3056232db..3cbc336bad 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -342,7 +342,6 @@ virDomainDefSave; virDomainDefSetMemoryTotal; virDomainDefSetVcpus; virDomainDefSetVcpusMax; -virDomainDefValidate; virDomainDefVcpuOrderClear; virDomainDeleteConfig; virDomainDeviceAliasIsUserAlias; @@ -744,6 +743,7 @@ virDomainConfVMNWFilterTeardown; =20 =20 # conf/domain_validate.h +virDomainDefValidate; virDomainDeviceValidateAliasForHotplug; =20 =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3b64caa619..bb78967ca3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -74,6 +74,7 @@ #include "virhostcpu.h" #include "domain_audit.h" #include "domain_nwfilter.h" +#include "domain_validate.h" #include "locking/domain_lock.h" #include "viruuid.h" #include "virprocess.h" --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709968; cv=none; d=zohomail.com; s=zohoarc; b=n2BMiwfw8R5lbOQ3RPTNOOrT8LAmacxO9nWwozeEUzVkS7ByydpkMCPxMwbG7pi4fkBe+fAJAqAaNmdvvQBJuctHepf+8IduPQm0tv/abTCwiKTl5nVVO+Eh2NKBdG+oLL4CWq7007LqKU7A0/RXEv5lbUHbzQbdBCadkGvTfbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709968; h=Content-Type:Content-Transfer-Encoding:Cc: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=gT1GF/TBhwrNCtaBjM3d0QL3QtUMjX1PuTEKMmAMiKQ=; b=f+DnOCp1zljCt/jfeFHjAPjzA7zYRSa+v3sbj58nVZ4XPPEgtQU6Y1u69hjo6YuF909noZwHTb2fdlnVeygN+vTGG9uPI5OsRHG0P5dEYxHMUw5rVAiKOyZewsYr6Q1Y6inhvEUTQjQqxHWF49YY1zTozOADQLzKSn5Yc6HRmzo= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607709968223173.73097172301175; Fri, 11 Dec 2020 10:06:08 -0800 (PST) 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-441-wpcuxXbsPKiTZ7W29529rg-1; Fri, 11 Dec 2020 13:06:01 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 12566803628; Fri, 11 Dec 2020 18:05:54 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E590F60BF1; Fri, 11 Dec 2020 18:05:53 +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 AF1B61809CA8; Fri, 11 Dec 2020 18:05:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5eFh027567 for ; Fri, 11 Dec 2020 13:05:41 -0500 Received: by smtp.corp.redhat.com (Postfix) id C187C2166B2C; Fri, 11 Dec 2020 18:05:40 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BC69D2166B29 for ; Fri, 11 Dec 2020 18:05:40 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A7C9C800B3B for ; Fri, 11 Dec 2020 18:05:40 +0000 (UTC) Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-114-nS1yF19YOXuruv-J38SIrw-1; Fri, 11 Dec 2020 13:05:38 -0500 Received: by mail-qk1-f195.google.com with SMTP id n142so9270439qkn.2 for ; Fri, 11 Dec 2020 10:05:38 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:37 -0800 (PST) X-MC-Unique: wpcuxXbsPKiTZ7W29529rg-1 X-MC-Unique: nS1yF19YOXuruv-J38SIrw-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gT1GF/TBhwrNCtaBjM3d0QL3QtUMjX1PuTEKMmAMiKQ=; b=Y7YTgulW+ZLwaKHbNUivjVKfxJlWVY9LLdEQRARJDFhNn0feByeowsMSY3eBKNfc+4 pseMJcRGIl6cuCLKfM5AJY8/vao+sa8S89IYxve5aXZ+ijga6+BlzZmV+dgJNyPCPxvt 1Yf0n0TSA7xVrd6wE09svWRVuyN1xhz8c8Da44TIi9gV6H6J0YXRkHMcHJOqPAQVs5/E evhanqC1b76K25M/pVrsvkRrytJEgGj++kBk9p2J8M61R/UuP4KkU76YkMRRde6+vc6s bM7wuKRINGvkHCUVFV0QaWaCbCb1lvycb7oYqHzE9t/nTK2l8Qowt2CQJ8QXzGTueMlX KmCw== X-Gm-Message-State: AOAM531BeFrxNmyDAYQtcciDdjdiPjKaJdilwJggrlXnw6Gv+yn5te2m PYJhSgKiTTmMnD+RUishlchLHB1OS/Vf9w== X-Google-Smtp-Source: ABdhPJzBFau0zA2TZ9uel9YyeXBOo1qf0lWk7lj50vvsUEH4VbUuSJyBlF/rY7eI7qaZxxubKmgdlw== X-Received: by 2002:a37:a0c6:: with SMTP id j189mr17875830qke.142.1607709937910; Fri, 11 Dec 2020 10:05:37 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 06/12] domain_validate.c: make local functions static Date: Fri, 11 Dec 2020 15:05:10 -0300 Message-Id: <20201211180516.1952683-7-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" virDomainDefValidateInternal() helpers can now be made static again since they're all in the same file. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_validate.c | 22 +++++++++++----------- src/conf/domain_validate.h | 13 ------------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 47aa3e4375..6632262ca2 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -30,7 +30,7 @@ =20 VIR_LOG_INIT("conf.domain_validate"); =20 -int +static int virDomainDefBootValidate(const virDomainDef *def) { if (def->os.bm_timeout_set && def->os.bm_timeout > 65535) { @@ -52,7 +52,7 @@ virDomainDefBootValidate(const virDomainDef *def) } =20 =20 -int +static int virDomainDefVideoValidate(const virDomainDef *def) { size_t i; @@ -499,7 +499,7 @@ virDomainSmartcardDefValidate(const virDomainSmartcardD= ef *smartcard, } =20 =20 -int +static int virDomainDefTunablesValidate(const virDomainDef *def) { size_t i, j; @@ -615,7 +615,7 @@ virDomainControllerDefValidate(const virDomainControlle= rDef *controller) } =20 =20 -int +static int virDomainDefIdMapValidate(const virDomainDef *def) { if ((def->idmap.uidmap && !def->idmap.gidmap) || @@ -638,7 +638,7 @@ virDomainDefIdMapValidate(const virDomainDef *def) } =20 =20 -int +static int virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def) { size_t i; @@ -667,7 +667,7 @@ virDomainDefDuplicateDiskInfoValidate(const virDomainDe= f *def) * Returns 0 in case of there are no duplicate drive addresses, -1 * otherwise. */ -int +static int virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def) { size_t i; @@ -822,7 +822,7 @@ virDomainDeviceDefValidateAliasesIterator(virDomainDefP= tr def, * Returns 0 on success, * -1 otherwise (with error reported). */ -int +static int virDomainDefValidateAliases(const virDomainDef *def, GHashTable **aliases) { @@ -901,7 +901,7 @@ virDomainDeviceValidateAliasForHotplug(virDomainObjPtr = vm, } =20 =20 -int +static int virDomainDefLifecycleActionValidate(const virDomainDef *def) { if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_POWEROFF, @@ -923,7 +923,7 @@ virDomainDefLifecycleActionValidate(const virDomainDef = *def) } =20 =20 -int +static int virDomainDefMemtuneValidate(const virDomainDef *def) { const virDomainMemtune *mem =3D &(def->mem); @@ -975,7 +975,7 @@ virDomainDefMemtuneValidate(const virDomainDef *def) } =20 =20 -int +static int virDomainDefOSValidate(const virDomainDef *def, virDomainXMLOptionPtr xmlopt) { @@ -1023,7 +1023,7 @@ virDomainDefOSValidate(const virDomainDef *def, } \ } while (0) =20 -int +static int virDomainDefCputuneValidate(const virDomainDef *def) { CPUTUNE_VALIDATE_PERIOD(period); diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 309ae5f950..e89cadab75 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -25,8 +25,6 @@ #include "domain_conf.h" #include "virconftypes.h" =20 -int virDomainDefBootValidate(const virDomainDef *def); -int virDomainDefVideoValidate(const virDomainDef *def); int virDomainVideoDefValidate(const virDomainVideoDef *video, const virDomainDef *def); int virSecurityDeviceLabelDefValidate(virSecurityDeviceLabelDefPtr *seclab= els, @@ -43,21 +41,10 @@ int virDomainRNGDefValidate(const virDomainRNGDef *rng, const virDomainDef *def); int virDomainSmartcardDefValidate(const virDomainSmartcardDef *smartcard, const virDomainDef *def); -int virDomainDefTunablesValidate(const virDomainDef *def); int virDomainControllerDefValidate(const virDomainControllerDef *controlle= r); -int virDomainDefIdMapValidate(const virDomainDef *def); -int virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def); -int virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def); -int virDomainDefValidateAliases(const virDomainDef *def, - GHashTable **aliases); int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, virDomainDeviceDefPtr dev, unsigned int flags); -int virDomainDefLifecycleActionValidate(const virDomainDef *def); -int virDomainDefMemtuneValidate(const virDomainDef *def); -int virDomainDefOSValidate(const virDomainDef *def, - virDomainXMLOptionPtr xmlopt); -int virDomainDefCputuneValidate(const virDomainDef *def); int virDomainDefValidate(virDomainDefPtr def, unsigned int parseFlags, virDomainXMLOptionPtr xmlopt, --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709966; cv=none; d=zohomail.com; s=zohoarc; b=HDodm2D+Yx42j7YFaAoXe0LsskCsoFPoqzq447n85xfLKvcPEDSQDkSysAxIA0vsyy3SqfEmkzvgo4kJKU8cJU72Y/LOG2nCGZWG5h38hF/JYsqjislDIQEhQ8Fe7Sutuhi8qcBwfSOt16mbKtavDrh1DbJUTy6KTs2GnLehVKA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709966; h=Content-Type:Content-Transfer-Encoding:Cc: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=WLzegb/MG1ObgWuGPgHXDQj9z9vx5JxsGFTifDwMcyA=; b=B9TTj7YZtyIRiSsh88Ie6GqY48a3wDVbCXofIwfMhk0N9bB3Rq7pKdUd52HQOFtgHx1884/RfWj9+I7ra5Io4CcIQDlXax8378pvIW8730lI6WfZWDYAgo4nO+wjPgzUS/I64shEgdFojH2VyG3XEIyMrkSSMG1NYS2N8e0t8NE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607709966628121.74162880002666; Fri, 11 Dec 2020 10:06:06 -0800 (PST) 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-236-J548S3vUMc-lSynITbRenw-1; Fri, 11 Dec 2020 13:06:00 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 197D51005D52; Fri, 11 Dec 2020 18:05:54 +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 E75B819C78; Fri, 11 Dec 2020 18:05:53 +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 B03055002F; Fri, 11 Dec 2020 18:05:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5i1U027594 for ; Fri, 11 Dec 2020 13:05:45 -0500 Received: by smtp.corp.redhat.com (Postfix) id D8402115D7BA; Fri, 11 Dec 2020 18:05:44 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast04.extmail.prod.ext.rdu2.redhat.com [10.11.55.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D3795115D7BC for ; Fri, 11 Dec 2020 18:05:44 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BBBB41010427 for ; Fri, 11 Dec 2020 18:05:44 +0000 (UTC) Received: from mail-qk1-f196.google.com (mail-qk1-f196.google.com [209.85.222.196]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-274-a6NjBYCjO2ejAyDLKlsdPw-1; Fri, 11 Dec 2020 13:05:42 -0500 Received: by mail-qk1-f196.google.com with SMTP id i67so1757219qkf.11 for ; Fri, 11 Dec 2020 10:05:42 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:39 -0800 (PST) X-MC-Unique: J548S3vUMc-lSynITbRenw-1 X-MC-Unique: a6NjBYCjO2ejAyDLKlsdPw-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WLzegb/MG1ObgWuGPgHXDQj9z9vx5JxsGFTifDwMcyA=; b=S4bp9x+1Is1tlPKXpE+dcDPd1aLH4yvTY4nPDk6eMkF5qU9cSxCQa2VxTm8Ery2IGP L3AV0IwYA/eUxVuIUFaY0XgdkkvrIt9/Um484CSFur4GNb5D9TmYtJ5MePQ8rMlAOCyh ohtfy/CQtjXRFMBQR4S0GDIbhADwe3vAB2Yr07L275k2F2gWn/pfLs3lOsfq1b9n+lFs YKkqxrecdp9OLM5D+u5QIBgG4f0jbDN9teLuAAyHuQgFS2sPluR4uCh+UcdGttqy27+d ge314jN1NSWtt72ngba+zujHzHXm/72A0qp8gmXu+/P3pW5FzbxQ0jXZrwfiXwh8DXdy ZYcw== X-Gm-Message-State: AOAM5311eeVm7KH/J/faz14/zXDl/mYZZYhF3zSKC2RLmQnlozWYRwj7 RmbYkAAHeFbvhkBS8hJDONYAI9Clvo8jDQ== X-Google-Smtp-Source: ABdhPJznJcAyLfCHluZl7bQw0peNEfGxV3iEDMibo4pfZGCg1nZdkZPyZXFsPvj66CfD3c7EkfR2xA== X-Received: by 2002:a05:620a:5ad:: with SMTP id q13mr17574873qkq.135.1607709941407; Fri, 11 Dec 2020 10:05:41 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 07/12] domain_conf: move net device validation to domain_validate.c Date: Fri, 11 Dec 2020 15:05:11 -0300 Message-Id: <20201211180516.1952683-8-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The next objective is to move virDomainDeviceDefValidate() to domain_validate.c. First let's move all the static helpers. The net device validation functions are used across multiple drivers, so let's move them separately first. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 153 ------------------------------------- src/conf/domain_conf.h | 3 - src/conf/domain_validate.c | 152 ++++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 2 + src/libvirt_private.syms | 2 +- src/libxl/libxl_domain.c | 1 + src/libxl/libxl_driver.c | 1 + src/lxc/lxc_driver.c | 1 + src/lxc/lxc_process.c | 1 + src/qemu/qemu_domain.c | 1 + 10 files changed, 160 insertions(+), 157 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bf9d00094c..a541e7bca6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6022,159 +6022,6 @@ virDomainDefHasUSB(const virDomainDef *def) } =20 =20 - -static int -virDomainNetDefValidatePortOptions(const char *macstr, - virDomainNetType type, - const virNetDevVPortProfile *vport, - virTristateBool isolatedPort) -{ - /* - * This function can be called for either a config interface - * object (NetDef) or a runtime interface object (ActualNetDef), - * by calling it with either, e.g., the "type" (what is in the - * config) or the "actualType" (what is determined at runtime by - * acquiring a port from the network). - */ - /* - * port isolation can only be set for an interface that is - * connected to a Linux host bridge (either a libvirt-managed - * network, or plain type=3D'bridge') - */ - if (isolatedPort =3D=3D VIR_TRISTATE_BOOL_YES) { - if (!(type =3D=3D VIR_DOMAIN_NET_TYPE_NETWORK || - type =3D=3D VIR_DOMAIN_NET_TYPE_BRIDGE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("interface %s - is n= ot supported for network interfaces with type=3D'%s'"), - macstr, virDomainNetTypeToString(type)); - return -1; - } - /* - * also not allowed for anything with setting - * (openvswitch or 802.11Qb[gh]) - */ - if (vport && vport->virtPortType !=3D VIR_NETDEV_VPORT_PROFILE_NON= E) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("interface %s - is n= ot supported for network interfaces with virtualport type=3D'%s'"), - macstr, virNetDevVPortTypeToString(vport->virtP= ortType)); - return -1; - } - } - return 0; -} - - -int -virDomainActualNetDefValidate(const virDomainNetDef *net) -{ - /* Unlike virDomainNetDefValidate(), which is a static function - * called internally to this file, virDomainActualNetDefValidate() - * is a public function that can be called from a hypervisor after - * it has completely setup the NetDef for use by a domain, - * including possibly allocating a port from the network driver - * (which could change the effective/"actual" type of the NetDef, - * thus changing what should/shouldn't be allowed by validation). - * - * This function should contain validations not specific to a - * particular hypervisor (e.g. whether or not specifying bandwidth - * is allowed for a type of interface), but *not* - * hypervisor-specific things. - */ - char macstr[VIR_MAC_STRING_BUFLEN]; - virDomainNetType actualType =3D virDomainNetGetActualType(net); - const virNetDevVPortProfile *vport =3D virDomainNetGetActualVirtPortPr= ofile(net); - const virNetDevBandwidth *bandwidth =3D virDomainNetGetActualBandwidth= (net); - - virMacAddrFormat(&net->mac, macstr); - - if (virDomainNetGetActualVlan(net)) { - /* vlan configuration via libvirt is only supported for PCI - * Passthrough SR-IOV devices (hostdev or macvtap passthru - * mode) and openvswitch bridges. Otherwise log an error and - * fail - */ - if (!(actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV || - (actualType =3D=3D VIR_DOMAIN_NET_TYPE_DIRECT && - virDomainNetGetActualDirectMode(net) =3D=3D VIR_NETDEV_MACV= LAN_MODE_PASSTHRU) || - (actualType =3D=3D VIR_DOMAIN_NET_TYPE_BRIDGE && - vport && vport->virtPortType =3D=3D VIR_NETDEV_VPORT_PROFI= LE_OPENVSWITCH))) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("interface %s - vlan tag not supported for th= is connection type"), - macstr); - return -1; - } - } - - /* bandwidth configuration via libvirt is not supported for - * hostdev network devices - */ - if (bandwidth && actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("interface %s - bandwidth settings are not suppor= ted " - "for hostdev interfaces"), - macstr); - return -1; - } - - if (virDomainNetDefValidatePortOptions(macstr, actualType, vport, - virDomainNetGetActualPortOption= sIsolated(net)) < 0) { - return -1; - } - - return 0; -} - - -static int -virDomainNetDefValidate(const virDomainNetDef *net) -{ - char macstr[VIR_MAC_STRING_BUFLEN]; - - virMacAddrFormat(&net->mac, macstr); - - if ((net->hostIP.nroutes || net->hostIP.nips) && - net->type !=3D VIR_DOMAIN_NET_TYPE_ETHERNET) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Invalid attempt to set network interface " - "host-side IP route and/or address info on " - "interface of type '%s'. This is only supported " - "on interfaces of type 'ethernet'"), - virDomainNetTypeToString(net->type)); - return -1; - } - if (net->managed_tap =3D=3D VIR_TRISTATE_BOOL_NO && - net->type !=3D VIR_DOMAIN_NET_TYPE_ETHERNET) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unmanaged target dev is not supported on " - "interfaces of type '%s'"), - virDomainNetTypeToString(net->type)); - return -1; - } - - if (net->teaming.type =3D=3D VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) { - if (!net->teaming.persistent) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("teaming persistent attribute must be set if = teaming type is 'transient'")); - return -1; - } - } else { - if (net->teaming.persistent) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("teaming persistent attribute not allowed if = teaming type is '%s'"), - virDomainNetTeamingTypeToString(net->teaming.ty= pe)); - return -1; - } - } - - if (virDomainNetDefValidatePortOptions(macstr, net->type, net->virtPor= tProfile, - net->isolatedPort) < 0) { - return -1; - } - - return 0; -} - - static int virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 1c1533ed2f..e35c4206df 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3024,9 +3024,6 @@ bool virDomainDefHasUSB(const virDomainDef *def); =20 bool virDomainDeviceAliasIsUserAlias(const char *aliasStr); =20 -int -virDomainActualNetDefValidate(const virDomainNetDef *net); - static inline bool virDomainObjIsActive(virDomainObjPtr dom) { diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 6632262ca2..6ca4ebb0ea 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1169,3 +1169,155 @@ virDomainDefValidate(virDomainDefPtr def, =20 return 0; } + + +static int +virDomainNetDefValidatePortOptions(const char *macstr, + virDomainNetType type, + const virNetDevVPortProfile *vport, + virTristateBool isolatedPort) +{ + /* + * This function can be called for either a config interface + * object (NetDef) or a runtime interface object (ActualNetDef), + * by calling it with either, e.g., the "type" (what is in the + * config) or the "actualType" (what is determined at runtime by + * acquiring a port from the network). + */ + /* + * port isolation can only be set for an interface that is + * connected to a Linux host bridge (either a libvirt-managed + * network, or plain type=3D'bridge') + */ + if (isolatedPort =3D=3D VIR_TRISTATE_BOOL_YES) { + if (!(type =3D=3D VIR_DOMAIN_NET_TYPE_NETWORK || + type =3D=3D VIR_DOMAIN_NET_TYPE_BRIDGE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("interface %s - is n= ot supported for network interfaces with type=3D'%s'"), + macstr, virDomainNetTypeToString(type)); + return -1; + } + /* + * also not allowed for anything with setting + * (openvswitch or 802.11Qb[gh]) + */ + if (vport && vport->virtPortType !=3D VIR_NETDEV_VPORT_PROFILE_NON= E) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("interface %s - is n= ot supported for network interfaces with virtualport type=3D'%s'"), + macstr, virNetDevVPortTypeToString(vport->virtP= ortType)); + return -1; + } + } + return 0; +} + + +int +virDomainActualNetDefValidate(const virDomainNetDef *net) +{ + /* Unlike virDomainNetDefValidate(), which is a static function + * called internally to this file, virDomainActualNetDefValidate() + * is a public function that can be called from a hypervisor after + * it has completely setup the NetDef for use by a domain, + * including possibly allocating a port from the network driver + * (which could change the effective/"actual" type of the NetDef, + * thus changing what should/shouldn't be allowed by validation). + * + * This function should contain validations not specific to a + * particular hypervisor (e.g. whether or not specifying bandwidth + * is allowed for a type of interface), but *not* + * hypervisor-specific things. + */ + char macstr[VIR_MAC_STRING_BUFLEN]; + virDomainNetType actualType =3D virDomainNetGetActualType(net); + const virNetDevVPortProfile *vport =3D virDomainNetGetActualVirtPortPr= ofile(net); + const virNetDevBandwidth *bandwidth =3D virDomainNetGetActualBandwidth= (net); + + virMacAddrFormat(&net->mac, macstr); + + if (virDomainNetGetActualVlan(net)) { + /* vlan configuration via libvirt is only supported for PCI + * Passthrough SR-IOV devices (hostdev or macvtap passthru + * mode) and openvswitch bridges. Otherwise log an error and + * fail + */ + if (!(actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV || + (actualType =3D=3D VIR_DOMAIN_NET_TYPE_DIRECT && + virDomainNetGetActualDirectMode(net) =3D=3D VIR_NETDEV_MACV= LAN_MODE_PASSTHRU) || + (actualType =3D=3D VIR_DOMAIN_NET_TYPE_BRIDGE && + vport && vport->virtPortType =3D=3D VIR_NETDEV_VPORT_PROFI= LE_OPENVSWITCH))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("interface %s - vlan tag not supported for th= is connection type"), + macstr); + return -1; + } + } + + /* bandwidth configuration via libvirt is not supported for + * hostdev network devices + */ + if (bandwidth && actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("interface %s - bandwidth settings are not suppor= ted " + "for hostdev interfaces"), + macstr); + return -1; + } + + if (virDomainNetDefValidatePortOptions(macstr, actualType, vport, + virDomainNetGetActualPortOption= sIsolated(net)) < 0) { + return -1; + } + + return 0; +} + + +int +virDomainNetDefValidate(const virDomainNetDef *net) +{ + char macstr[VIR_MAC_STRING_BUFLEN]; + + virMacAddrFormat(&net->mac, macstr); + + if ((net->hostIP.nroutes || net->hostIP.nips) && + net->type !=3D VIR_DOMAIN_NET_TYPE_ETHERNET) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Invalid attempt to set network interface " + "host-side IP route and/or address info on " + "interface of type '%s'. This is only supported " + "on interfaces of type 'ethernet'"), + virDomainNetTypeToString(net->type)); + return -1; + } + if (net->managed_tap =3D=3D VIR_TRISTATE_BOOL_NO && + net->type !=3D VIR_DOMAIN_NET_TYPE_ETHERNET) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unmanaged target dev is not supported on " + "interfaces of type '%s'"), + virDomainNetTypeToString(net->type)); + return -1; + } + + if (net->teaming.type =3D=3D VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) { + if (!net->teaming.persistent) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("teaming persistent attribute must be set if = teaming type is 'transient'")); + return -1; + } + } else { + if (net->teaming.persistent) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("teaming persistent attribute not allowed if = teaming type is '%s'"), + virDomainNetTeamingTypeToString(net->teaming.ty= pe)); + return -1; + } + } + + if (virDomainNetDefValidatePortOptions(macstr, net->type, net->virtPor= tProfile, + net->isolatedPort) < 0) { + return -1; + } + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index e89cadab75..d38d2f4e06 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -49,3 +49,5 @@ int virDomainDefValidate(virDomainDefPtr def, unsigned int parseFlags, virDomainXMLOptionPtr xmlopt, void *parseOpaque); +int virDomainActualNetDefValidate(const virDomainNetDef *net); +int virDomainNetDefValidate(const virDomainNetDef *net); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3cbc336bad..d0e548b0a3 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -226,7 +226,6 @@ virDiskNameParse; virDiskNameToBusDeviceIndex; virDiskNameToIndex; virDomainActualNetDefFree; -virDomainActualNetDefValidate; virDomainAudioTypeTypeFromString; virDomainAudioTypeTypeToString; virDomainBlockedReasonTypeFromString; @@ -743,6 +742,7 @@ virDomainConfVMNWFilterTeardown; =20 =20 # conf/domain_validate.h +virDomainActualNetDefValidate; virDomainDefValidate; virDomainDeviceValidateAliasForHotplug; =20 diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 3669b358f6..ab838b317c 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -35,6 +35,7 @@ #include "locking/domain_lock.h" #include "xen_common.h" #include "driver.h" +#include "domain_validate.h" =20 #define VIR_FROM_THIS VIR_FROM_LIBXL =20 diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 6af274cb1b..c2563ef872 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -55,6 +55,7 @@ #include "virnetdevtap.h" #include "cpu/cpu.h" #include "virutil.h" +#include "domain_validate.h" =20 #define VIR_FROM_THIS VIR_FROM_LIBXL =20 diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index b1295e71da..88d3890de7 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -58,6 +58,7 @@ #include "domain_cgroup.h" #include "domain_driver.h" #include "domain_nwfilter.h" +#include "domain_validate.h" #include "virinitctl.h" #include "virnetdev.h" #include "virnetdevtap.h" diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 0f818e2ee0..937e9a3fc1 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -42,6 +42,7 @@ #include "domain_nwfilter.h" #include "viralloc.h" #include "domain_audit.h" +#include "domain_validate.h" #include "virerror.h" #include "virlog.h" #include "vircommand.h" diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 766f76020c..bfb6e23942 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -48,6 +48,7 @@ #include "domain_capabilities.h" #include "domain_driver.h" #include "domain_event.h" +#include "domain_validate.h" #include "virtime.h" #include "virnetdevopenvswitch.h" #include "virstoragefile.h" --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709977; cv=none; d=zohomail.com; s=zohoarc; b=Gxfma2YoOzuWB4JHTqpRlVoCX3dkzxvA+RWZQSZbwqXhxEAFTnk0d/N9ovXznjL2zRZUThRvhxSzBkV5yKtWbVj7aE+/VDXFUvIp7ZsMvKrZ+EGYRP6wta03iFxLj/P1uWau+TLk8OJ4tdUTRcOR/RQdhP1BP53UazX2fA6VJa0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709977; h=Content-Type:Content-Transfer-Encoding:Cc: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=HSFFe2lL6Kc3CUz2hr9oZs3mDPCrjL3EGfNqiQ4YZMI=; b=fkkZTRUjVRar2c0LcbFqGqPr5WPziOiPRbYUQEP2AlAvax59O1zQSaMdeqRhMQSq3fXI5UcTjrXhnw1/eW0YQwewUUCj3K9dfa686HjnIu6SQ2Hu06XCOULKEO4DP0DZs26wP1iUlGP14T1hdGbF1hw6KaaRCNpC8d/aOdV9szw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607709977199903.0373465278573; Fri, 11 Dec 2020 10:06:17 -0800 (PST) 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-332-IMV0hxdHMh-XU6qge6vAXg-1; Fri, 11 Dec 2020 13:06:10 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0F70CC73B1; Fri, 11 Dec 2020 18:05:57 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E04F45D9E8; Fri, 11 Dec 2020 18:05:56 +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 AB8911809CA9; Fri, 11 Dec 2020 18:05:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5kqF027605 for ; Fri, 11 Dec 2020 13:05:46 -0500 Received: by smtp.corp.redhat.com (Postfix) id 735372166B2A; Fri, 11 Dec 2020 18:05:46 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6DDC02166B29 for ; Fri, 11 Dec 2020 18:05:46 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 53BFD800B3B for ; Fri, 11 Dec 2020 18:05:46 +0000 (UTC) Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-159-JGQmk99TMCyYKqkgBsN-SQ-1; Fri, 11 Dec 2020 13:05:43 -0500 Received: by mail-qt1-f177.google.com with SMTP id z3so7072301qtw.9 for ; Fri, 11 Dec 2020 10:05:43 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:42 -0800 (PST) X-MC-Unique: IMV0hxdHMh-XU6qge6vAXg-1 X-MC-Unique: JGQmk99TMCyYKqkgBsN-SQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HSFFe2lL6Kc3CUz2hr9oZs3mDPCrjL3EGfNqiQ4YZMI=; b=JIT0Rzr7/p1A1IgCeCgATql08FVCec2PUel8kpYn3vXdTObRHFbpKdktQKG6ZmMeQ1 pM4tuTJazC3aZq9J/Na2mkj59g9dwMWjXTn1wsCs2+5H3oe4ll0idWg+4WHmWDVh8rYU Xv3nGeA8eOg5Ccr9PO1Zf7rxfh971LibtW6lKElOtXfDINAnyKvo/Yu72XpsGs21zEhU ZUEwxMoH/7so8xXLVtVzQ+C7bQXTew0FFfdALiI/jmFFqCE6E+mV1XSsEOELuHrMNStJ tG/tOhpSjNsBmWrNdr/wWb+cuX12p15zl7LkJBBEwcGYZfeFD3WPaaZKdquTyeAcF51+ Z7bg== X-Gm-Message-State: AOAM533IVqejiah6BBq/DgM3weo50yd2DGTkqsAuhqatzC5PD23QIBw/ IhEECqJXDgrubWoHmfbC2gOSEojD8/vL6g== X-Google-Smtp-Source: ABdhPJwOe/gO3CDpd25Vlv3lD541RpQ46KlfYofYV5OiK2Ge7foAptI70IpVKObHUP8ZZBCaMxXXKQ== X-Received: by 2002:ac8:490a:: with SMTP id e10mr16928270qtq.15.1607709943030; Fri, 11 Dec 2020 10:05:43 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 08/12] domain_conf: move all DeviceDefValidateInternal() helpers to domain_validate Date: Fri, 11 Dec 2020 15:05:12 -0300 Message-Id: <20201211180516.1952683-9-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Moving all remaining static helpers of virDomainDeviceDefValidateInternal() will allow the next patch to move the function itself, and virDomainDeviceDefValidate(), to domain_validate.c. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 150 ------------------------------------- src/conf/domain_validate.c | 150 +++++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 6 ++ 3 files changed, 156 insertions(+), 150 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a541e7bca6..ebe895948f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6022,156 +6022,6 @@ virDomainDefHasUSB(const virDomainDef *def) } =20 =20 -static int -virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev) -{ - if (hostdev->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { - switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) { - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UN= ASSIGNED && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("PCI host devices must use 'pci' or " - "'unassigned' address type")); - return -1; - } - break; - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DR= IVE) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("SCSI host device must use 'drive' " - "address type")); - return -1; - } - break; - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: - if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CC= W) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("SCSI_host host device must use 'pci' " - "or 'ccw' address type")); - return -1; - } - break; - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: - if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && - hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_US= B) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("USB host device must use 'usb' address t= ype")); - return -1; - } - break; - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: - break; - } - } - return 0; -} - - -static int -virDomainMemoryDefValidate(const virDomainMemoryDef *mem, - const virDomainDef *def) -{ - if (mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) { - if (!mem->nvdimmPath) { - virReportError(VIR_ERR_XML_DETAIL, "%s", - _("path is required for model 'nvdimm'")); - return -1; - } - - if (mem->discard =3D=3D VIR_TRISTATE_BOOL_YES) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("discard is not supported for nvdimms")); - return -1; - } - - if (ARCH_IS_PPC64(def->os.arch) && mem->labelsize =3D=3D 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("label size is required for NVDIMM device")); - return -1; - } - } - - return 0; -} - - -static int -virDomainVsockDefValidate(const virDomainVsockDef *vsock) -{ - if (vsock->guest_cid > 0 && vsock->guest_cid <=3D 2) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("guest CIDs must be >=3D 3")); - return -1; - } - - return 0; -} - -static int -virDomainInputDefValidate(const virDomainInputDef *input) -{ - switch ((virDomainInputType) input->type) { - case VIR_DOMAIN_INPUT_TYPE_MOUSE: - case VIR_DOMAIN_INPUT_TYPE_TABLET: - case VIR_DOMAIN_INPUT_TYPE_KBD: - if (input->source.evdev) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("setting source evdev path only supporte= d for " - "passthrough input devices")); - return -1; - } - break; - - case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: - if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("only bus 'virtio' is supported for 'pass= through' " - "input devices")); - return -1; - } - break; - - case VIR_DOMAIN_INPUT_TYPE_LAST: - default: - virReportEnumRangeError(virDomainInputType, input->type); - return -1; - } - - return 0; -} - - -static int -virDomainShmemDefValidate(const virDomainShmemDef *shmem) -{ - if (strchr(shmem->name, '/')) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("shmem name cannot include '/' character")); - return -1; - } - - if (STREQ(shmem->name, ".")) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("shmem name cannot be equal to '.'")); - return -1; - } - - if (STREQ(shmem->name, "..")) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("shmem name cannot be equal to '..'")); - return -1; - } - - return 0; -} - - static int virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, const virDomainDef *def) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 6ca4ebb0ea..ec955daf66 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1321,3 +1321,153 @@ virDomainNetDefValidate(const virDomainNetDef *net) =20 return 0; } + + +int +virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev) +{ + if (hostdev->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { + switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UN= ASSIGNED && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("PCI host devices must use 'pci' or " + "'unassigned' address type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DR= IVE) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("SCSI host device must use 'drive' " + "address type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CC= W) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("SCSI_host host device must use 'pci' " + "or 'ccw' address type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_US= B) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("USB host device must use 'usb' address t= ype")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: + break; + } + } + return 0; +} + + +int +virDomainMemoryDefValidate(const virDomainMemoryDef *mem, + const virDomainDef *def) +{ + if (mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) { + if (!mem->nvdimmPath) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("path is required for model 'nvdimm'")); + return -1; + } + + if (mem->discard =3D=3D VIR_TRISTATE_BOOL_YES) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("discard is not supported for nvdimms")); + return -1; + } + + if (ARCH_IS_PPC64(def->os.arch) && mem->labelsize =3D=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("label size is required for NVDIMM device")); + return -1; + } + } + + return 0; +} + + +int +virDomainVsockDefValidate(const virDomainVsockDef *vsock) +{ + if (vsock->guest_cid > 0 && vsock->guest_cid <=3D 2) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("guest CIDs must be >=3D 3")); + return -1; + } + + return 0; +} + +int +virDomainInputDefValidate(const virDomainInputDef *input) +{ + switch ((virDomainInputType) input->type) { + case VIR_DOMAIN_INPUT_TYPE_MOUSE: + case VIR_DOMAIN_INPUT_TYPE_TABLET: + case VIR_DOMAIN_INPUT_TYPE_KBD: + if (input->source.evdev) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("setting source evdev path only supporte= d for " + "passthrough input devices")); + return -1; + } + break; + + case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: + if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("only bus 'virtio' is supported for 'pass= through' " + "input devices")); + return -1; + } + break; + + case VIR_DOMAIN_INPUT_TYPE_LAST: + default: + virReportEnumRangeError(virDomainInputType, input->type); + return -1; + } + + return 0; +} + + +int +virDomainShmemDefValidate(const virDomainShmemDef *shmem) +{ + if (strchr(shmem->name, '/')) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("shmem name cannot include '/' character")); + return -1; + } + + if (STREQ(shmem->name, ".")) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("shmem name cannot be equal to '.'")); + return -1; + } + + if (STREQ(shmem->name, "..")) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("shmem name cannot be equal to '..'")); + return -1; + } + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index d38d2f4e06..e04ecab065 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -51,3 +51,9 @@ int virDomainDefValidate(virDomainDefPtr def, void *parseOpaque); int virDomainActualNetDefValidate(const virDomainNetDef *net); int virDomainNetDefValidate(const virDomainNetDef *net); +int virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev); +int virDomainMemoryDefValidate(const virDomainMemoryDef *mem, + const virDomainDef *def); +int virDomainVsockDefValidate(const virDomainVsockDef *vsock); +int virDomainInputDefValidate(const virDomainInputDef *input); +int virDomainShmemDefValidate(const virDomainShmemDef *shmem); --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709969; cv=none; d=zohomail.com; s=zohoarc; b=eu6w1vdTv9hobtYn8jw0spiLmFdQZqIlglPxwHko/qKlymI2hg7O52XCU91RzRvUAI7u8qqrTjV1BjPXwmgpfp6sdOMN8v+UoamUY2Wylk6a6MEbmATOEczXJugVZ4dOfYWoCdplT6OE81pTKQe4rD4Zb4Fhnz8TF3L/yy5DJpg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709969; h=Content-Type:Content-Transfer-Encoding:Cc: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=1hhPR0JiD10kLuIATCXApFf8IlHi9LJH3n+jOMTo44Q=; b=RgsnpoRFzALmsxO9XB2C1SdRBI/9AODVu5B9iy0XkV3ZRiBKtlbYeXBWN6FUdxaz60zSVpFLUoE5cRwwg0oRYXRwea5IpYAni5Sa9IVTDO8kpRPPqrsWAC8glS8xexhODg/r4gC6/ZBp44BDixbvlRA/OpalQcFMe5aOBQqjlSM= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1607709969478105.36134200478364; Fri, 11 Dec 2020 10:06:09 -0800 (PST) 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-594-pv_LT3tIO_SyZGZjpRSPKg-1; Fri, 11 Dec 2020 13:06:04 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 45F5E80362F; Fri, 11 Dec 2020 18:05:57 +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 22C6E5F9D0; Fri, 11 Dec 2020 18:05:57 +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 E41585002E; Fri, 11 Dec 2020 18:05:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5pSa027626 for ; Fri, 11 Dec 2020 13:05:51 -0500 Received: by smtp.corp.redhat.com (Postfix) id 87BDF2026D12; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 831222026D11 for ; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6ACA8858287 for ; Fri, 11 Dec 2020 18:05:51 +0000 (UTC) Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-391-iVkSQqmtMVS47ormtiJmkg-1; Fri, 11 Dec 2020 13:05:48 -0500 Received: by mail-qt1-f172.google.com with SMTP id z3so7072483qtw.9 for ; Fri, 11 Dec 2020 10:05:48 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:44 -0800 (PST) X-MC-Unique: pv_LT3tIO_SyZGZjpRSPKg-1 X-MC-Unique: iVkSQqmtMVS47ormtiJmkg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1hhPR0JiD10kLuIATCXApFf8IlHi9LJH3n+jOMTo44Q=; b=CUNKUOzhrY/mMMzWoweAT98nXm6yA2pf5eo6tLnb2o7PNWH6OCe1DbkNw6uGFBCEQm 2bJ6e59HP84J/pVWANxvreVTzAoedgwTnioSRS2NPsxZ0vtFL/Onf6otO5dxj2xf3gqM VVmsXQkzJgZD77KdSFOcBdCnCBPLqzcqOCoOcAbp9bRn1XxvLUt0TpUeGMB5iP3M1UeW rYZDvD+Dvln+mMUTDhezudI/FYplnxiQr3LjAWvvUORhIURoQ+1wFi7Xr+L50GVMdhPw j47auiCByoFhTjCY9o3tBo+T+cbIq8mSOP/I5+lT5zPVCpTr34IJEgVNS/c2UKkYTnPj 45ww== X-Gm-Message-State: AOAM530iKXgM/rZ6N/H7H2FnWGAazPBBG1PKQCIDEhugLzB+tvWU0LJx 6nNc11QY6FdqW7C+wRcdjJGavDjEv7q43g== X-Google-Smtp-Source: ABdhPJyqh8srcMsSvIhGypnBwX+DHgDF+s+WImKobC40kaK3c1D4s7O3t3dRawWgmp32u5mlXi+tIQ== X-Received: by 2002:a05:622a:207:: with SMTP id b7mr17077201qtx.117.1607709944554; Fri, 11 Dec 2020 10:05:44 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 09/12] domain_conf.c: move virDomainDeviceDefValidate() to domain_validate.c Date: Fri, 11 Dec 2020 15:05:13 -0300 Message-Id: <20201211180516.1952683-10-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 88 -------------------------------------- src/conf/domain_conf.h | 6 +-- src/conf/domain_validate.c | 88 ++++++++++++++++++++++++++++++++++++++ src/conf/domain_validate.h | 5 +++ 4 files changed, 94 insertions(+), 93 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ebe895948f..26c48ef38c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6022,94 +6022,6 @@ virDomainDefHasUSB(const virDomainDef *def) } =20 =20 -static int -virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, - const virDomainDef *def) -{ - switch ((virDomainDeviceType) dev->type) { - case VIR_DOMAIN_DEVICE_DISK: - return virDomainDiskDefValidate(def, dev->data.disk); - - case VIR_DOMAIN_DEVICE_REDIRDEV: - return virDomainRedirdevDefValidate(def, dev->data.redirdev); - - case VIR_DOMAIN_DEVICE_NET: - return virDomainNetDefValidate(dev->data.net); - - case VIR_DOMAIN_DEVICE_CONTROLLER: - return virDomainControllerDefValidate(dev->data.controller); - - case VIR_DOMAIN_DEVICE_CHR: - return virDomainChrDefValidate(dev->data.chr, def); - - case VIR_DOMAIN_DEVICE_SMARTCARD: - return virDomainSmartcardDefValidate(dev->data.smartcard, def); - - case VIR_DOMAIN_DEVICE_RNG: - return virDomainRNGDefValidate(dev->data.rng, def); - - case VIR_DOMAIN_DEVICE_HOSTDEV: - return virDomainHostdevDefValidate(dev->data.hostdev); - - case VIR_DOMAIN_DEVICE_VIDEO: - return virDomainVideoDefValidate(dev->data.video, def); - - case VIR_DOMAIN_DEVICE_MEMORY: - return virDomainMemoryDefValidate(dev->data.memory, def); - - case VIR_DOMAIN_DEVICE_VSOCK: - return virDomainVsockDefValidate(dev->data.vsock); - - case VIR_DOMAIN_DEVICE_INPUT: - return virDomainInputDefValidate(dev->data.input); - - case VIR_DOMAIN_DEVICE_SHMEM: - return virDomainShmemDefValidate(dev->data.shmem); - - case VIR_DOMAIN_DEVICE_AUDIO: - /* TODO: validate? */ - case VIR_DOMAIN_DEVICE_LEASE: - case VIR_DOMAIN_DEVICE_FS: - case VIR_DOMAIN_DEVICE_SOUND: - case VIR_DOMAIN_DEVICE_WATCHDOG: - case VIR_DOMAIN_DEVICE_GRAPHICS: - case VIR_DOMAIN_DEVICE_HUB: - case VIR_DOMAIN_DEVICE_MEMBALLOON: - case VIR_DOMAIN_DEVICE_NVRAM: - case VIR_DOMAIN_DEVICE_TPM: - case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: - case VIR_DOMAIN_DEVICE_NONE: - case VIR_DOMAIN_DEVICE_LAST: - break; - } - - return 0; -} - - -int -virDomainDeviceDefValidate(const virDomainDeviceDef *dev, - const virDomainDef *def, - unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt, - void *parseOpaque) -{ - /* validate configuration only in certain places */ - if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) - return 0; - - if (xmlopt->config.deviceValidateCallback && - xmlopt->config.deviceValidateCallback(dev, def, xmlopt->config.pri= v, parseOpaque)) - return -1; - - if (virDomainDeviceDefValidateInternal(dev, def) < 0) - return -1; - - return 0; -} - - bool virDomainDefLifecycleActionAllowed(virDomainLifecycle type, virDomainLifecycleAction action) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e35c4206df..ce8ed48a04 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3122,11 +3122,7 @@ void virDomainRedirdevDefFree(virDomainRedirdevDefPt= r def); void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def); void virDomainShmemDefFree(virDomainShmemDefPtr def); void virDomainDeviceDefFree(virDomainDeviceDefPtr def); -int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, - const virDomainDef *def, - unsigned int parseFlags, - virDomainXMLOptionPtr xmlopt, - void *parseOpaque); + G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDeviceDef, virDomainDeviceDefFree); virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src, const virDomainDef *def, diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index ec955daf66..8acb7c1044 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1471,3 +1471,91 @@ virDomainShmemDefValidate(const virDomainShmemDef *s= hmem) =20 return 0; } + + +static int +virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, + const virDomainDef *def) +{ + switch ((virDomainDeviceType) dev->type) { + case VIR_DOMAIN_DEVICE_DISK: + return virDomainDiskDefValidate(def, dev->data.disk); + + case VIR_DOMAIN_DEVICE_REDIRDEV: + return virDomainRedirdevDefValidate(def, dev->data.redirdev); + + case VIR_DOMAIN_DEVICE_NET: + return virDomainNetDefValidate(dev->data.net); + + case VIR_DOMAIN_DEVICE_CONTROLLER: + return virDomainControllerDefValidate(dev->data.controller); + + case VIR_DOMAIN_DEVICE_CHR: + return virDomainChrDefValidate(dev->data.chr, def); + + case VIR_DOMAIN_DEVICE_SMARTCARD: + return virDomainSmartcardDefValidate(dev->data.smartcard, def); + + case VIR_DOMAIN_DEVICE_RNG: + return virDomainRNGDefValidate(dev->data.rng, def); + + case VIR_DOMAIN_DEVICE_HOSTDEV: + return virDomainHostdevDefValidate(dev->data.hostdev); + + case VIR_DOMAIN_DEVICE_VIDEO: + return virDomainVideoDefValidate(dev->data.video, def); + + case VIR_DOMAIN_DEVICE_MEMORY: + return virDomainMemoryDefValidate(dev->data.memory, def); + + case VIR_DOMAIN_DEVICE_VSOCK: + return virDomainVsockDefValidate(dev->data.vsock); + + case VIR_DOMAIN_DEVICE_INPUT: + return virDomainInputDefValidate(dev->data.input); + + case VIR_DOMAIN_DEVICE_SHMEM: + return virDomainShmemDefValidate(dev->data.shmem); + + case VIR_DOMAIN_DEVICE_AUDIO: + /* TODO: validate? */ + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_FS: + case VIR_DOMAIN_DEVICE_SOUND: + case VIR_DOMAIN_DEVICE_WATCHDOG: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_LAST: + break; + } + + return 0; +} + + +int +virDomainDeviceDefValidate(const virDomainDeviceDef *dev, + const virDomainDef *def, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt, + void *parseOpaque) +{ + /* validate configuration only in certain places */ + if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) + return 0; + + if (xmlopt->config.deviceValidateCallback && + xmlopt->config.deviceValidateCallback(dev, def, xmlopt->config.pri= v, parseOpaque)) + return -1; + + if (virDomainDeviceDefValidateInternal(dev, def) < 0) + return -1; + + return 0; +} diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index e04ecab065..710515a6ff 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -57,3 +57,8 @@ int virDomainMemoryDefValidate(const virDomainMemoryDef *= mem, int virDomainVsockDefValidate(const virDomainVsockDef *vsock); int virDomainInputDefValidate(const virDomainInputDef *input); int virDomainShmemDefValidate(const virDomainShmemDef *shmem); +int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, + const virDomainDef *def, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt, + void *parseOpaque); --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607709976; cv=none; d=zohomail.com; s=zohoarc; b=SmPIHHOc00MX5MJ0xarn1/iJN9wRW6LtVZdTXIE2l9zeqI6lEEQZPKRyydmYF8/OaN0iWUjWbu0fYcwF7R4k8x8lPPLw9OA37ehxKEFhTMh3XERS6io4lvlKbbfyqk6bgco97MHQBy606Fz8V9jtwOROhPErYvVshVOmvKt+TT4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607709976; h=Content-Type:Content-Transfer-Encoding:Cc: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=zdQnRlbmwbP4J9NM1Br9t8AqFYILsqP78q9WQtgbFRA=; b=PLQVgvx78DvTHOjEwrEqAfo4GYc+CYMZ73Yxj/EA+Cwk6o5RgcQNSSZOLeSJsVzOvl9WJVOczsTFmf+/EhqZY6yTzPce6UDSxrRBONj7SFQXbeIzGKAxmZgNfK1icoaSaFgYroar2n/C48Fp7vp3ucEZyB9FHeLA4LPP9Gy35Hs= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607709976746973.0034330536301; Fri, 11 Dec 2020 10:06:16 -0800 (PST) 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-567-oRpPSBLEOQ-q2Lge5uRbgA-1; Fri, 11 Dec 2020 13:06:11 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D3E1C8030BC; Fri, 11 Dec 2020 18:05:58 +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 ACE5E57; Fri, 11 Dec 2020 18:05:58 +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 7C03850038; Fri, 11 Dec 2020 18:05:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5u8v027648 for ; Fri, 11 Dec 2020 13:05:56 -0500 Received: by smtp.corp.redhat.com (Postfix) id 1327BF3D28; Fri, 11 Dec 2020 18:05:56 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0CA82F3D25 for ; Fri, 11 Dec 2020 18:05:53 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B4AB8858284 for ; Fri, 11 Dec 2020 18:05:53 +0000 (UTC) Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-234-4d_z55RvMxa7067idclvbw-1; Fri, 11 Dec 2020 13:05:49 -0500 Received: by mail-qt1-f182.google.com with SMTP id h19so7048216qtq.13 for ; Fri, 11 Dec 2020 10:05:49 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:48 -0800 (PST) X-MC-Unique: oRpPSBLEOQ-q2Lge5uRbgA-1 X-MC-Unique: 4d_z55RvMxa7067idclvbw-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zdQnRlbmwbP4J9NM1Br9t8AqFYILsqP78q9WQtgbFRA=; b=RBee93dwOQDoulGK6YTJE4nhstGcal0bjqdvfrQvCp2xb/SYAfAM/t9RRPUHnF9pLN W06LOotWZL8jI5RDx0NKgRY6FxogFSz4NvYZWquhv9N9yP0XMwRNhAlej7dMNDc6RId0 YXyQonqoHodupjWIuj+X5UKu53fYlGTYVuAKIZ5IIGEGhJzLffr9zqTTW5etrusWBPzJ 4KNqhOYUsG6lhwEEPAC9nk0gCm9M02P8bUvA/8Gq4fMG+VGncf6KSD0YmIjK+ULQveaW zB6mWCBoIDhmthX8DfKG8gX5tADkEDOdBaQ4z0EYQyd1nBbT60Ma5G96ImLE0IQqY5Bf gBeQ== X-Gm-Message-State: AOAM531zUGoiLLDghS6iObyHbGBBru58yxL5oQTBQcghc2XNEZbGR7yN S8BV5pHA4+UU7QggftyKLZi17SMgcdZ5rQ== X-Google-Smtp-Source: ABdhPJwea0O1rjqmabRrSFni0E6XcyF0XrZAlVvJBx0/Dqe4Vf/uFQHXAJMCQOPuOSVAWZclKZryZQ== X-Received: by 2002:ac8:7a95:: with SMTP id x21mr17780364qtr.307.1607709949159; Fri, 11 Dec 2020 10:05:49 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 10/12] domain_validate.c: make virDomainDeviceDefValidateInternal() helpers static Date: Fri, 11 Dec 2020 15:05:14 -0300 Message-Id: <20201211180516.1952683-11-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After the move from the previous patch, these functions are now all used in domain_validate.c and doesn't need to be public. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_validate.c | 27 ++++++++++++++------------- src/conf/domain_validate.h | 20 -------------------- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 8acb7c1044..2a881f1f06 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -76,7 +76,7 @@ virDomainDefVideoValidate(const virDomainDef *def) } =20 =20 -int +static int virDomainVideoDefValidate(const virDomainVideoDef *video, const virDomainDef *def) { @@ -229,7 +229,7 @@ virSecurityDeviceLabelDefValidate(virSecurityDeviceLabe= lDefPtr *seclabels, #define VENDOR_LEN 8 #define PRODUCT_LEN 16 =20 -int +static int virDomainDiskDefValidate(const virDomainDef *def, const virDomainDiskDef *disk) { @@ -446,7 +446,7 @@ virDomainChrSourceDefValidate(const virDomainChrSourceD= ef *src_def, } =20 =20 -int +static int virDomainRedirdevDefValidate(const virDomainDef *def, const virDomainRedirdevDef *redirdev) { @@ -462,7 +462,7 @@ virDomainRedirdevDefValidate(const virDomainDef *def, } =20 =20 -int +static int virDomainChrDefValidate(const virDomainChrDef *chr, const virDomainDef *def) { @@ -470,7 +470,7 @@ virDomainChrDefValidate(const virDomainChrDef *chr, } =20 =20 -int +static int virDomainRNGDefValidate(const virDomainRNGDef *rng, const virDomainDef *def) { @@ -481,7 +481,7 @@ virDomainRNGDefValidate(const virDomainRNGDef *rng, } =20 =20 -int +static int virDomainSmartcardDefValidate(const virDomainSmartcardDef *smartcard, const virDomainDef *def) { @@ -520,7 +520,7 @@ virDomainDefTunablesValidate(const virDomainDef *def) } =20 =20 -int +static int virDomainControllerDefValidate(const virDomainControllerDef *controller) { if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI) { @@ -1273,7 +1273,7 @@ virDomainActualNetDefValidate(const virDomainNetDef *= net) } =20 =20 -int +static int virDomainNetDefValidate(const virDomainNetDef *net) { char macstr[VIR_MAC_STRING_BUFLEN]; @@ -1323,7 +1323,7 @@ virDomainNetDefValidate(const virDomainNetDef *net) } =20 =20 -int +static int virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev) { if (hostdev->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { @@ -1374,7 +1374,7 @@ virDomainHostdevDefValidate(const virDomainHostdevDef= *hostdev) } =20 =20 -int +static int virDomainMemoryDefValidate(const virDomainMemoryDef *mem, const virDomainDef *def) { @@ -1402,7 +1402,7 @@ virDomainMemoryDefValidate(const virDomainMemoryDef *= mem, } =20 =20 -int +static int virDomainVsockDefValidate(const virDomainVsockDef *vsock) { if (vsock->guest_cid > 0 && vsock->guest_cid <=3D 2) { @@ -1414,7 +1414,8 @@ virDomainVsockDefValidate(const virDomainVsockDef *vs= ock) return 0; } =20 -int + +static int virDomainInputDefValidate(const virDomainInputDef *input) { switch ((virDomainInputType) input->type) { @@ -1448,7 +1449,7 @@ virDomainInputDefValidate(const virDomainInputDef *in= put) } =20 =20 -int +static int virDomainShmemDefValidate(const virDomainShmemDef *shmem) { if (strchr(shmem->name, '/')) { diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h index 710515a6ff..addffc3819 100644 --- a/src/conf/domain_validate.h +++ b/src/conf/domain_validate.h @@ -25,23 +25,10 @@ #include "domain_conf.h" #include "virconftypes.h" =20 -int virDomainVideoDefValidate(const virDomainVideoDef *video, - const virDomainDef *def); int virSecurityDeviceLabelDefValidate(virSecurityDeviceLabelDefPtr *seclab= els, size_t nseclabels, virSecurityLabelDefPtr *vmSeclabels, size_t nvmSeclabels); -int virDomainDiskDefValidate(const virDomainDef *def, - const virDomainDiskDef *disk); -int virDomainRedirdevDefValidate(const virDomainDef *def, - const virDomainRedirdevDef *redirdev); -int virDomainChrDefValidate(const virDomainChrDef *chr, - const virDomainDef *def); -int virDomainRNGDefValidate(const virDomainRNGDef *rng, - const virDomainDef *def); -int virDomainSmartcardDefValidate(const virDomainSmartcardDef *smartcard, - const virDomainDef *def); -int virDomainControllerDefValidate(const virDomainControllerDef *controlle= r); int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm, virDomainDeviceDefPtr dev, unsigned int flags); @@ -50,13 +37,6 @@ int virDomainDefValidate(virDomainDefPtr def, virDomainXMLOptionPtr xmlopt, void *parseOpaque); int virDomainActualNetDefValidate(const virDomainNetDef *net); -int virDomainNetDefValidate(const virDomainNetDef *net); -int virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev); -int virDomainMemoryDefValidate(const virDomainMemoryDef *mem, - const virDomainDef *def); -int virDomainVsockDefValidate(const virDomainVsockDef *vsock); -int virDomainInputDefValidate(const virDomainInputDef *input); -int virDomainShmemDefValidate(const virDomainShmemDef *shmem); int virDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, unsigned int parseFlags, --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607710218; cv=none; d=zohomail.com; s=zohoarc; b=jJmsD+xnqlBs8c2PjHKTZS0Fo5KsjtPOfQqZQK9ZcVlc8XTgE6ReoG++Q5mzIf9HdmA2qIamg/W0dWV1IQPdQNEvEdnirfZpG9XgUmllqt0Vz0HAQU3W5RwhFRzPCs01XVWfacdPCYJuPJa+8xgow3fyexPZ1h9MTuIitK5kWaw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607710218; h=Content-Type:Content-Transfer-Encoding:Cc: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=q6lhAF1fwAvWMgKPZholHuKHtSW7LhUoJmw3469VLyM=; b=PhzjAd1I8pV0KBF/ZDPPj4ExR4i6u+LMUs41ANK3oXC5pj0G5h7cGiD6JWFEJCGNeKbB9xGcnq63ZDZBi9ow4mhtnE0zH/psFJGo2V0qeBZ2Z9BclV3Ihhl8LaMyG0LjgiSHZJ9PDN4ej5WuMFDGshhuMyU4W+aPKJhx6am5TrE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607710218009350.8971801140476; Fri, 11 Dec 2020 10:10:18 -0800 (PST) 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-237-olfj6-QkM-yGcW6sUKubSQ-1; Fri, 11 Dec 2020 13:06:10 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 15502190A7A0; Fri, 11 Dec 2020 18:06:00 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E56C86F999; Fri, 11 Dec 2020 18:05:59 +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 B0B661809CAD; Fri, 11 Dec 2020 18:05:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5tUb027640 for ; Fri, 11 Dec 2020 13:05:55 -0500 Received: by smtp.corp.redhat.com (Postfix) id EFA932026D12; Fri, 11 Dec 2020 18:05:54 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id EA8AD2026D11 for ; Fri, 11 Dec 2020 18:05:54 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D5AFC85828C for ; Fri, 11 Dec 2020 18:05:54 +0000 (UTC) Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-263-HL-GEsIEPqKPxgQpdRnFpg-1; Fri, 11 Dec 2020 13:05:51 -0500 Received: by mail-qt1-f193.google.com with SMTP id k4so7058504qtj.10 for ; Fri, 11 Dec 2020 10:05:51 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:50 -0800 (PST) X-MC-Unique: olfj6-QkM-yGcW6sUKubSQ-1 X-MC-Unique: HL-GEsIEPqKPxgQpdRnFpg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q6lhAF1fwAvWMgKPZholHuKHtSW7LhUoJmw3469VLyM=; b=ebR7Hf18L2nXH6nkjogDwu86RkiepJYglr/tThK9KTCrtA3AQztSrNeJrxRH+mRifL 3fXKcTuGY+0Rl8hhd5RYZnhTT7ZPF781pYUBR8ZoFq3QJzJvvEyVaCAt32emlaMvjr5m HAbAp+EFGxrJ98825gSI+PEY/mnn8dGjI1Eau8pUEBU14wQHW3/R5wlBlPzbV42QVXe/ dunQlFAFgEWpG6An4cLyeBgS1BWi81GR341Cx+I4ux0synq7G+yU+PHKHX0CWVllujZg nLsKHyWF45Jxhxlt8Qt1Li0H4upyJ8H00ezdWZ2f11ZrHl9JaVLtTmmeIS/wXumhRVXM MJbA== X-Gm-Message-State: AOAM531MWanxFbXfeaBH32OkXcOfCDErchmTb0CkzhhtAITPmo6aKhE0 siEDPjDtvQc/cV5eK4wrlMtI/uMJsfVAtQ== X-Google-Smtp-Source: ABdhPJztGLzCPjGXiZaldGHY2R2hiLit3Z21lNDPLdDcKdWloU7Z0l1uPe9MNQ/68d6Dy2g9EkVZqA== X-Received: by 2002:aed:2986:: with SMTP id o6mr16780581qtd.274.1607709950747; Fri, 11 Dec 2020 10:05:50 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 11/12] domain_validate.c: put IOMMU validation into a new function Date: Fri, 11 Dec 2020 15:05:15 -0300 Message-Id: <20201211180516.1952683-12-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" All other validations from virDomainDefValidateInternal() are done in their own functions. Take IOMMU validation out of the function body and into its own function. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_validate.c | 41 ++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 2a881f1f06..4cc1d11647 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1042,6 +1042,31 @@ virDomainDefCputuneValidate(const virDomainDef *def) #undef CPUTUNE_VALIDATE_QUOTA =20 =20 +static int +virDomainDefIOMMUValidate(const virDomainDef *def) +{ + if (!def->iommu) + return 0; + + if (def->iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ON && + def->features[VIR_DOMAIN_FEATURE_IOAPIC] !=3D VIR_DOMAIN_IOAPIC_QE= MU) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("IOMMU interrupt remapping requires split I/O API= C " + "(ioapic driver=3D'qemu')")); + return -1; + } + + if (def->iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ON && + def->iommu->intremap !=3D VIR_TRISTATE_SWITCH_ON) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("IOMMU eim requires interrupt remapping to be ena= bled")); + return -1; + } + + return 0; +} + + static int virDomainDefValidateInternal(const virDomainDef *def, virDomainXMLOptionPtr xmlopt) @@ -1058,22 +1083,8 @@ virDomainDefValidateInternal(const virDomainDef *def, if (virDomainDefValidateAliases(def, NULL) < 0) return -1; =20 - if (def->iommu && - def->iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ON && - def->features[VIR_DOMAIN_FEATURE_IOAPIC] !=3D VIR_DOMAIN_IOAPIC_QE= MU) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("IOMMU interrupt remapping requires split I/O API= C " - "(ioapic driver=3D'qemu')")); - return -1; - } - - if (def->iommu && - def->iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ON && - def->iommu->intremap !=3D VIR_TRISTATE_SWITCH_ON) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("IOMMU eim requires interrupt remapping to be ena= bled")); + if (virDomainDefIOMMUValidate(def) < 0) return -1; - } =20 if (virDomainDefLifecycleActionValidate(def) < 0) return -1; --=20 2.26.2 From nobody Wed May 15 21:13:22 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1607710289; cv=none; d=zohomail.com; s=zohoarc; b=OGBYDcrhuGTqXmp5klwaIYwJdUyEVbho5PDvJH5PL1F0yyeHX+m4MOcYA/kHCGaEPi7s98NFBZbH67houGHtpzTfHs7OwAN0YInlTxgsxU42zsfnwgPOu9MrtWh2zx6hfwa9snEgtb7Hw7VK+H5XxQFgj6G8AtULDafqP3pz4Yo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607710289; h=Content-Type:Content-Transfer-Encoding:Cc: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=18T8v7sDJT/2qFD2NZHbghXA7Wbn1m0jRjXt3DImv3g=; b=hVgyy4HUWKdMDCEeSQlupfn7tGzAxaZrV/V96/+IIO6XMzamsy5Igzz3Q0HPJNCIi2IDoq/FwVJYqRrHsI+o7ta1BNQRQfvaOVwRV/zakTRS01gZa86m5Zf3U+SE9hI4dhQh4mRprS0CZY3t/YkLu6ZxAwQKL53oCYSi8+PNi7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1607710289566759.6036796434637; Fri, 11 Dec 2020 10:11:29 -0800 (PST) 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-139-TJTygpl9NEW3a9pbsy78rw-1; Fri, 11 Dec 2020 13:06:09 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C5A641074650; Fri, 11 Dec 2020 18:05:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A530660C15; Fri, 11 Dec 2020 18:05:59 +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 6E2C31809CAC; Fri, 11 Dec 2020 18:05:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0BBI5uL7027647 for ; Fri, 11 Dec 2020 13:05:56 -0500 Received: by smtp.corp.redhat.com (Postfix) id 131F9B6B5E; Fri, 11 Dec 2020 18:05:56 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0BD02EB323 for ; Fri, 11 Dec 2020 18:05:55 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 51E9985828B for ; Fri, 11 Dec 2020 18:05:55 +0000 (UTC) Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-37-wHNXyp5JPFWQWuQNa6526Q-1; Fri, 11 Dec 2020 13:05:53 -0500 Received: by mail-qt1-f179.google.com with SMTP id z20so7084558qtq.3 for ; Fri, 11 Dec 2020 10:05:52 -0800 (PST) Received: from rekt.ibmuc.com ([2804:431:c7c6:9e32:a7fb:6602:e8c2:3c0f]) by smtp.gmail.com with ESMTPSA id y6sm7585703qkj.60.2020.12.11.10.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Dec 2020 10:05:51 -0800 (PST) X-MC-Unique: TJTygpl9NEW3a9pbsy78rw-1 X-MC-Unique: wHNXyp5JPFWQWuQNa6526Q-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=18T8v7sDJT/2qFD2NZHbghXA7Wbn1m0jRjXt3DImv3g=; b=h8GDJLroUBHtDJa2cHHrWyPj3i546ARVeaFYvAwB2p/k3jIQ8ybD4NVTAipp1mH0Ii 87EcQignrDvmh4CEO9Og2WVByZbmiOeQheSlb4Jn0XG+L+JvRmEV+5gqSZ/UUUw2Q2iR SWSeWv5sR87P9ZubtHJz8VhRrH+agCBSsstpVmNjB5vMQcNDFaNfJm48z5JwgfL5WfnU WsT1jgsoLVbL1X9w2q3svuRbc5aORYrtNwipxxygXQSiUoTe0xOK5JMGgp+2VB/KIZr2 YiDxTg4u57SpWc+fLHvJagZZbVmbpVBlht7L+oPIwuac1r808FSf4/ViVVcmDEU+3vOF 2L+w== X-Gm-Message-State: AOAM530DvblBLH4XdD8BFxLjmEqdAP79jDtDQqDStYG8QJr24GNfts39 avqX0S/FK2eYWTiwH+97KFU1N3HiSj1Hpw== X-Google-Smtp-Source: ABdhPJyiyHRBZAThvYxD4Cd9L3a2W7BbRM1iVqJTCjBuNI5Y2QjNZQHCidTHZjL1Tyg33JrHWzN/3Q== X-Received: by 2002:ac8:6d05:: with SMTP id o5mr17855155qtt.6.1607709952329; Fri, 11 Dec 2020 10:05:52 -0800 (PST) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 12/12] domain_validate.c: use VIR_ERR_CONFIG_UNSUPPORTED in validate functions Date: Fri, 11 Dec 2020 15:05:16 -0300 Message-Id: <20201211180516.1952683-13-danielhb413@gmail.com> In-Reply-To: <20201211180516.1952683-1-danielhb413@gmail.com> References: <20201211180516.1952683-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some functions in domain_validate.c are throwing VIR_ERR_XML_ERROR, when in reality none of these errors are exclusive to XML parsing. Change to VIR_ERR_CONFIG_UNSUPPORTED to be more adequate. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik --- src/conf/domain_validate.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 4cc1d11647..4ae9f1e1b2 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -291,7 +291,7 @@ virDomainDiskDefValidate(const virDomainDef *def, if (disk->src->type =3D=3D VIR_STORAGE_TYPE_NVME) { /* NVMe namespaces start from 1 */ if (disk->src->nvme->namespc =3D=3D 0) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("NVMe namespace can't be zero")); return -1; } @@ -423,7 +423,7 @@ virDomainChrSourceDefValidate(const virDomainChrSourceD= ef *src_def, =20 case VIR_DOMAIN_CHR_TYPE_SPICEPORT: if (!src_def->data.spiceport.channel) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Missing source channel attribute for char de= vice")); return -1; } @@ -547,7 +547,7 @@ virDomainControllerDefValidate(const virDomainControlle= rDef *controller) if (opts->targetIndex !=3D -1) { =20 if (opts->targetIndex < 0 || opts->targetIndex > 30) { - virReportError(VIR_ERR_XML_ERROR, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("PCI controller target index '%d' out of " "range - must be 0-30"), opts->targetIndex); @@ -556,7 +556,7 @@ virDomainControllerDefValidate(const virDomainControlle= rDef *controller) =20 if ((controller->idx =3D=3D 0 && opts->targetIndex !=3D 0) || (controller->idx !=3D 0 && opts->targetIndex =3D=3D 0)) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Only the PCI controller with index 0 can= " "have target index 0, and vice versa")); return -1; @@ -797,7 +797,7 @@ virDomainDeviceDefValidateAliasesIterator(virDomainDefP= tr def, } =20 if (virHashLookup(data->aliases, alias)) { - virReportError(VIR_ERR_XML_ERROR, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("non unique alias detected: %s"), alias); return -1; @@ -864,7 +864,7 @@ virDomainDeviceValidateAliasImpl(const virDomainDef *de= f, goto cleanup; =20 if (virHashLookup(aliases, info->alias)) { - virReportError(VIR_ERR_XML_ERROR, + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("non unique alias detected: %s"), info->alias); goto cleanup; @@ -1050,7 +1050,7 @@ virDomainDefIOMMUValidate(const virDomainDef *def) =20 if (def->iommu->intremap =3D=3D VIR_TRISTATE_SWITCH_ON && def->features[VIR_DOMAIN_FEATURE_IOAPIC] !=3D VIR_DOMAIN_IOAPIC_QE= MU) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("IOMMU interrupt remapping requires split I/O API= C " "(ioapic driver=3D'qemu')")); return -1; @@ -1058,7 +1058,7 @@ virDomainDefIOMMUValidate(const virDomainDef *def) =20 if (def->iommu->eim =3D=3D VIR_TRISTATE_SWITCH_ON && def->iommu->intremap !=3D VIR_TRISTATE_SWITCH_ON) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("IOMMU eim requires interrupt remapping to be ena= bled")); return -1; } @@ -1352,7 +1352,7 @@ virDomainHostdevDefValidate(const virDomainHostdevDef= *hostdev) case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DR= IVE) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("SCSI host device must use 'drive' " "address type")); return -1; @@ -1362,7 +1362,7 @@ virDomainHostdevDefValidate(const virDomainHostdevDef= *hostdev) if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I && hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CC= W) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("SCSI_host host device must use 'pci' " "or 'ccw' address type")); return -1; @@ -1371,7 +1371,7 @@ virDomainHostdevDefValidate(const virDomainHostdevDef= *hostdev) case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_US= B) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("USB host device must use 'usb' address t= ype")); return -1; } @@ -1417,7 +1417,7 @@ static int virDomainVsockDefValidate(const virDomainVsockDef *vsock) { if (vsock->guest_cid > 0 && vsock->guest_cid <=3D 2) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("guest CIDs must be >=3D 3")); return -1; } @@ -1434,7 +1434,7 @@ virDomainInputDefValidate(const virDomainInputDef *in= put) case VIR_DOMAIN_INPUT_TYPE_TABLET: case VIR_DOMAIN_INPUT_TYPE_KBD: if (input->source.evdev) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("setting source evdev path only supporte= d for " "passthrough input devices")); return -1; @@ -1443,7 +1443,7 @@ virDomainInputDefValidate(const virDomainInputDef *in= put) =20 case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("only bus 'virtio' is supported for 'pass= through' " "input devices")); return -1; @@ -1464,19 +1464,19 @@ static int virDomainShmemDefValidate(const virDomainShmemDef *shmem) { if (strchr(shmem->name, '/')) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("shmem name cannot include '/' character")); return -1; } =20 if (STREQ(shmem->name, ".")) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("shmem name cannot be equal to '.'")); return -1; } =20 if (STREQ(shmem->name, "..")) { - virReportError(VIR_ERR_XML_ERROR, "%s", + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("shmem name cannot be equal to '..'")); return -1; } --=20 2.26.2