From nobody Mon Apr 29 01:26:03 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; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1600946111; cv=none; d=zohomail.com; s=zohoarc; b=iqKmnadEVS+YN74gBptgJNNDgOrJMUR2FkyCesVm5KjEbWl5zQtX9QMsNfob+iiQaSvLTRoRRf4TvNKbdrx59CkzNu7pYHR9KQXkblPF+iSE91oiY/0ksMIk8wpPBemvWYyMg+FbMcprQZs53gNlvd+vnFe0l2jveHsPj97CozQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1600946111; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=GpUrtrXEXIP0TCO+iVKL9UxAH/gjwiJoFv/4eBpNydE=; b=fIeJD6uhF5jRaXalluxJO5fh8+r5kb7qNSiLsHqoGCMGijUAAtGpDp6J3MNEXUOY2cAUUGwdMwc4PD6dJuBx9HOkYmfJen5j/udc0BeIOsSc5KxPsiiEt+HT/8bwxUUB7Okc2Ur8E0kuQHX8Syoc5NqNTHvr77PjWVs6PcBSVhQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1600946111311207.77122803570035; Thu, 24 Sep 2020 04:15:11 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-213-nMyZvIuFNa-OnAU3XtkwcQ-1; Thu, 24 Sep 2020 07:15:07 -0400 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 C3F3B800493; Thu, 24 Sep 2020 11:15:01 +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 1484775158; Thu, 24 Sep 2020 11:15:01 +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 9E0D21826D2A; Thu, 24 Sep 2020 11:14:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 08OBCmCr005148 for ; Thu, 24 Sep 2020 07:12:48 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2F2C473672; Thu, 24 Sep 2020 11:12:48 +0000 (UTC) Received: from localhost (ovpn-112-247.ams2.redhat.com [10.36.112.247]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BD5BF73662; Thu, 24 Sep 2020 11:12:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600946110; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=GpUrtrXEXIP0TCO+iVKL9UxAH/gjwiJoFv/4eBpNydE=; b=ehdOUE7xYpWr6PzGFSUSBc0wTcxDA/ohqGeD2EuUVZA1umIRaF4IzdKObJKrUtexwqhjmS GN2S7ZN64xGkaiYB5GFUbxMY2oJdr8BMUakQbTV5kBDHLZvhS72S6/uDfteneooj0UdajK je/mRvhYxuaSsBq+6lBZsKhiuBrptqY= X-MC-Unique: nMyZvIuFNa-OnAU3XtkwcQ-1 From: Cornelia Huck To: libvir-list@redhat.com Subject: [PATCH] virDomainNetFindIdx: add support for CCW addresses Date: Thu, 24 Sep 2020 13:12:39 +0200 Message-Id: <20200924111239.505079-1-cohuck@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Cc: Cornelia Huck 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 X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Allow to match with CCW addresses in addition to PCI addresses (and MAC addresses). Signed-off-by: Cornelia Huck Reviewed-by: J=C3=A1n Tomko --- src/conf/device_conf.c | 12 ++++++++++++ src/conf/device_conf.h | 3 +++ src/conf/domain_conf.c | 23 ++++++++++++++++++++++- src/libvirt_private.syms | 1 + 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index 9398191dfd84..87bf32bbc685 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -341,6 +341,18 @@ virDomainDeviceCCWAddressParseXML(xmlNodePtr node, return 0; } =20 +bool +virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1, + virDomainDeviceCCWAddressPtr addr2) +{ + if (addr1->cssid =3D=3D addr2->cssid && + addr1->ssid =3D=3D addr2->ssid && + addr1->devno =3D=3D addr2->devno) { + return true; + } + return false; +} + int virDomainDeviceDriveAddressParseXML(xmlNodePtr node, virDomainDeviceDriveAddressPtr addr) diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index d7395f220174..a51bdf10ee6e 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -207,6 +207,9 @@ void virPCIDeviceAddressFormat(virBufferPtr buf, bool virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr); int virDomainDeviceCCWAddressParseXML(xmlNodePtr node, virDomainDeviceCCWAddressPtr addr); +bool virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1, + virDomainDeviceCCWAddressPtr addr2); +#define VIR_CCW_DEVICE_ADDRESS_FMT "%x.%x.%04x" =20 int virDomainDeviceDriveAddressParseXML(xmlNodePtr node, virDomainDeviceDriveAddressPtr add= r); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8d30557bdcbe..a91dbd4aa95b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -17816,6 +17816,8 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainN= etDefPtr net) bool MACAddrSpecified =3D !net->mac_generated; bool PCIAddrSpecified =3D virDomainDeviceAddressIsValid(&net->info, VIR_DOMAIN_DEVIC= E_ADDRESS_TYPE_PCI); + bool CCWAddrSpecified =3D virDomainDeviceAddressIsValid(&net->info, + VIR_DOMAIN_DEVIC= E_ADDRESS_TYPE_CCW); =20 for (i =3D 0; i < def->nnets; i++) { if (MACAddrSpecified && @@ -17827,9 +17829,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomain= NetDefPtr net) &net->info.addr.pci)) continue; =20 + if (CCWAddrSpecified && + !virDomainDeviceCCWAddressEqual(&def->nets[i]->info.addr.ccw, + &net->info.addr.ccw)) + continue; + if (matchidx >=3D 0) { /* there were multiple matches on mac address, and no - * qualifying guest-side PCI address was given, so we must + * qualifying guest-side PCI/CCW address was given, so we must * fail (NB: a USB address isn't adequate, since it may * specify only vendor and product ID, and there may be * multiples of those. @@ -17859,6 +17866,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomain= NetDefPtr net) net->info.addr.pci.bus, net->info.addr.pci.slot, net->info.addr.pci.function); + } else if (MACAddrSpecified && CCWAddrSpecified) { + virReportError(VIR_ERR_DEVICE_MISSING, + _("no device matching MAC address %s found on " + VIR_CCW_DEVICE_ADDRESS_FMT), + virMacAddrFormat(&net->mac, mac), + net->info.addr.ccw.cssid, + net->info.addr.ccw.ssid, + net->info.addr.ccw.devno); } else if (PCIAddrSpecified) { virReportError(VIR_ERR_DEVICE_MISSING, _("no device found on " VIR_PCI_DEVICE_ADDRESS_= FMT), @@ -17866,6 +17881,12 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomain= NetDefPtr net) net->info.addr.pci.bus, net->info.addr.pci.slot, net->info.addr.pci.function); + } else if (CCWAddrSpecified) { + virReportError(VIR_ERR_DEVICE_MISSING, + _("no device found on " VIR_CCW_DEVICE_ADDRESS_= FMT), + net->info.addr.ccw.cssid, + net->info.addr.ccw.ssid, + net->info.addr.ccw.devno); } else if (MACAddrSpecified) { virReportError(VIR_ERR_DEVICE_MISSING, _("no device matching MAC address %s found"), diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 1db9970cca08..6bcbfa667d0e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -128,6 +128,7 @@ virDeviceInfoPCIAddressIsWanted; virDomainDeviceAddressIsValid; virDomainDeviceAddressTypeToString; virDomainDeviceCcidAddressParseXML; +virDomainDeviceCCWAddressEqual; virDomainDeviceCCWAddressIsValid; virDomainDeviceCCWAddressParseXML; virDomainDeviceDriveAddressParseXML; --=20 2.25.4