From nobody Mon Feb 9 11:04:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 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=1579577879; cv=none; d=zohomail.com; s=zohoarc; b=Xz/HsWKBMatWmnCT4euW9DT3G/r7r9YRnZ0OJ1F09ZLycvdvmp/ViuZ92JXeyEChpVkZjvoReeaFcoljrCFqJVxMGo534fm0cZ5x/jorEbBZlcc8jdnN3htDhCdq5HJ0xrjdA174W6kfBRLGA4ES0syakKjMkfgl8jZN47s1M4w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579577879; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Y/bI3694U+NrlOYmLRTPYuJdUJ2x4Np43KPi/g3R2Pk=; b=YmrodnzxaK/PuHpI3JrKVZoNz1vw+D0jeUSDyzp5oXskpB1nKJERhd5HsKaO2d3yXjdoiS8poP/1SOATu5CtxrFrFLQ14MWtjpXP5N49bL/gEAqxg9BVICURFLME9+5rCZ1av9mASAtwoSbE2kaygKZ37in0V2agvDUKxjjYP2Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 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-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 157957787946561.06296045362524; Mon, 20 Jan 2020 19:37:59 -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-378-lJ9j999pNeyC8WNIhpGwsg-1; Mon, 20 Jan 2020 22:37:56 -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 5DE47107ACC7; Tue, 21 Jan 2020 03:37: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 1C29C10016EB; Tue, 21 Jan 2020 03:37: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 BC19F81986; Tue, 21 Jan 2020 03:37:50 +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 00L3bjTG029102 for ; Mon, 20 Jan 2020 22:37:45 -0500 Received: by smtp.corp.redhat.com (Postfix) id BF55110BE391; Tue, 21 Jan 2020 03:37:45 +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 BA64910BE390 for ; Tue, 21 Jan 2020 03:37:43 +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 C1676185B0B6 for ; Tue, 21 Jan 2020 03:37:43 +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-43-3kuU4_JKPKux1A1CL9CrRw-1; Mon, 20 Jan 2020 22:37:40 -0500 Received: by mail-qt1-f195.google.com with SMTP id w8so1512799qts.11 for ; Mon, 20 Jan 2020 19:37:40 -0800 (PST) Received: from localhost.localdomain ([2804:431:c7cb:f18:1999:d682:4c95:e72e]) by smtp.gmail.com with ESMTPSA id k88sm18532568qte.32.2020.01.20.19.37.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Jan 2020 19:37:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579577878; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Y/bI3694U+NrlOYmLRTPYuJdUJ2x4Np43KPi/g3R2Pk=; b=JybSlExjd+ObgsR5Ydy0SZYgUhWEU+sHC8Hhykl4fh4Ka8ueVA7pT8AzE9HdQylskg2KkY zlCo/pTUqSQFJNqsjFuvlujsmQM13jDs5al6UtUO+mk1g2kTHUfZxQZdZ3BI0xoOP7qzzY 441u4dF7p34sQbAByKRzobvxQQIILZ0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DY/VqkEIJqA188dbK7ayAhsMZ1aV27clIc7hUGYZ5Pw=; b=XAtVBuCF1gcsqvemh0LFOcQQwqLDLLLjtDVdfsBFWkWGnTkQkdpfIKygNN/l2dpnkS f9psf74HGsISQQjnQ+PIEPNbkVnBr1BrrL1nEs25XbLH3puTsbFHJp0U+vQ+DvCYcg7r UDbMRwGWpaN3FXpIsy8T7BfgryhxJ7kApwN+pdDRHkt/r27fHk12Ufiq4FJ0/DAvA/vz z5rEPEr6iqPPDQZZ/C/SMeOx6TtcoMSBpcGxhxsLeDNtkBNeQPckZzNVEIX9BinmdT9t yb0p0kUd6Kfhny4mbhOx0pi8uN77sYpkZIJanP7+HaY8Supj/p89Mb0AHouNLeIT54VD EnTw== X-Gm-Message-State: APjAAAXLwmtVSUvCzC5o1909ols26rHILyQr4abqqXHEVkO8Oe0qwqIa wsEBKKVrzeIYkQ2e3eX2Cd86QdHv X-Google-Smtp-Source: APXvYqwiyybiTMS2FoALfn22M7wa3smxmudTos71ANcEnXy5dwzi4nKvRTOsbVQsDhkCtldpPBinWg== X-Received: by 2002:ac8:6910:: with SMTP id e16mr2554927qtr.273.1579577859483; Mon, 20 Jan 2020 19:37:39 -0800 (PST) From: Julio Faracco To: libvir-list@redhat.com Subject: [PATCH 1/2] qemu: Converting DHCP and ARP functions to domain conf Date: Tue, 21 Jan 2020 00:37:10 -0300 Message-Id: <20200121033710.15548-2-jcfaracco@gmail.com> In-Reply-To: <20200121033710.15548-1-jcfaracco@gmail.com> References: <20200121033710.15548-1-jcfaracco@gmail.com> MIME-Version: 1.0 X-MC-Unique: 3kuU4_JKPKux1A1CL9CrRw-1 X-MC-Unique: lJ9j999pNeyC8WNIhpGwsg-1 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 00L3bjTG029102 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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" QEMU driver has two functions: qemuGetDHCPInterfaces() and qemuARPGetInterfaces() that are being used inside only one single function. They can be turned into generic functions that other drivers can use. This commit move both from QEMU driver tree to domain conf tree. Signed-off-by: Julio Faracco --- src/conf/domain_conf.c | 134 ++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 2 + src/libvirt_private.syms | 2 + src/qemu/qemu_driver.c | 137 +-------------------------------------- 4 files changed, 140 insertions(+), 135 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f920d1dc39..707d58e1a4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -57,6 +57,7 @@ #include "virnetdev.h" #include "virnetdevtap.h" #include "virnetdevmacvlan.h" +#include "virarptable.h" #include "virhostdev.h" #include "virmdev.h" #include "virdomainsnapshotobjlist.h" @@ -17267,6 +17268,139 @@ virDomainNetUpdate(virDomainDefPtr def, } =20 =20 +int +virDomainNetDHCPInterfaces(virDomainDefPtr def, + virDomainInterfacePtr **ifaces) +{ + g_autoptr(virConnect) conn =3D NULL; + virDomainInterfacePtr *ifaces_ret =3D NULL; + size_t ifaces_count =3D 0; + size_t i; + + if (!(conn =3D virGetConnectNetwork())) + return -1; + + for (i =3D 0; i < def->nnets; i++) { + g_autoptr(virNetwork) network =3D NULL; + char macaddr[VIR_MAC_STRING_BUFLEN]; + virNetworkDHCPLeasePtr *leases =3D NULL; + int n_leases =3D 0; + virDomainInterfacePtr iface =3D NULL; + size_t j; + + if (def->nets[i]->type !=3D VIR_DOMAIN_NET_TYPE_NETWORK) + continue; + + virMacAddrFormat(&(def->nets[i]->mac), macaddr); + + network =3D virNetworkLookupByName(conn, + def->nets[i]->data.network.name); + if (!network) + goto error; + + if ((n_leases =3D virNetworkGetDHCPLeases(network, macaddr, + &leases, 0)) < 0) + goto error; + + if (n_leases) { + ifaces_ret =3D g_renew(typeof(*ifaces_ret), ifaces_ret, ifaces= _count + 1); + ifaces_ret[ifaces_count] =3D g_new0(typeof(**ifaces_ret), 1); + iface =3D ifaces_ret[ifaces_count]; + ifaces_count++; + + /* Assuming each lease corresponds to a separate IP */ + iface->naddrs =3D n_leases; + iface->addrs =3D g_new0(typeof(*iface->addrs), iface->naddrs); + iface->name =3D g_strdup(def->nets[i]->ifname); + iface->hwaddr =3D g_strdup(macaddr); + } + + for (j =3D 0; j < n_leases; j++) { + virNetworkDHCPLeasePtr lease =3D leases[j]; + virDomainIPAddressPtr ip_addr =3D &iface->addrs[j]; + + ip_addr->addr =3D g_strdup(lease->ipaddr); + ip_addr->type =3D lease->type; + ip_addr->prefix =3D lease->prefix; + + virNetworkDHCPLeaseFree(lease); + } + + VIR_FREE(leases); + } + + *ifaces =3D g_steal_pointer(&ifaces_ret); + return ifaces_count; + + error: + if (ifaces_ret) { + for (i =3D 0; i < ifaces_count; i++) + virDomainInterfaceFree(ifaces_ret[i]); + } + VIR_FREE(ifaces_ret); + + return -1; +} + + +int +virDomainNetARPInterfaces(virDomainDefPtr def, + virDomainInterfacePtr **ifaces) +{ + size_t i, j; + size_t ifaces_count =3D 0; + int ret =3D -1; + char macaddr[VIR_MAC_STRING_BUFLEN]; + virDomainInterfacePtr *ifaces_ret =3D NULL; + virDomainInterfacePtr iface =3D NULL; + virArpTablePtr table; + + table =3D virArpTableGet(); + if (!table) + goto cleanup; + + for (i =3D 0; i < def->nnets; i++) { + virMacAddrFormat(&(def->nets[i]->mac), macaddr); + for (j =3D 0; j < table->n; j++) { + virArpTableEntry entry =3D table->t[j]; + + if (STREQ(entry.mac, macaddr)) { + if (VIR_ALLOC(iface) < 0) + goto cleanup; + + iface->name =3D g_strdup(def->nets[i]->ifname); + + iface->hwaddr =3D g_strdup(macaddr); + + if (VIR_ALLOC(iface->addrs) < 0) + goto cleanup; + iface->naddrs =3D 1; + + iface->addrs->addr =3D g_strdup(entry.ipaddr); + + if (VIR_APPEND_ELEMENT(ifaces_ret, ifaces_count, iface) < = 0) + goto cleanup; + } + } + } + + *ifaces =3D g_steal_pointer(&ifaces_ret); + ret =3D ifaces_count; + + cleanup: + virArpTableFree(table); + virDomainInterfaceFree(iface); + + if (ifaces_ret) { + for (i =3D 0; i < ifaces_count; i++) + virDomainInterfaceFree(ifaces_ret[i]); + } + VIR_FREE(ifaces_ret); + + return ret; +} + + int virDomainControllerInsert(virDomainDefPtr def, virDomainControllerDefPtr controller) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6ae89fa498..9ae8411f6c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3186,6 +3186,8 @@ virDomainNetDefPtr virDomainNetFindByName(virDomainDe= fPtr def, const char *ifnam bool virDomainHasNet(virDomainDefPtr def, virDomainNetDefPtr net); int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net); int virDomainNetUpdate(virDomainDefPtr def, size_t netidx, virDomainNetDef= Ptr newnet); +int virDomainNetDHCPInterfaces(virDomainDefPtr def, virDomainInterfacePtr = **ifaces); +int virDomainNetARPInterfaces(virDomainDefPtr def, virDomainInterfacePtr *= *ifaces); virDomainNetDefPtr virDomainNetRemove(virDomainDefPtr def, size_t i); void virDomainNetRemoveHostdev(virDomainDefPtr def, virDomainNetDefPtr net= ); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b63feb4054..3cfeebb220 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -524,6 +524,8 @@ virDomainNetTypeFromString; virDomainNetTypeSharesHostView; virDomainNetTypeToString; virDomainNetUpdate; +virDomainNetDHCPInterfaces; +virDomainNetARPInterfaces; virDomainNostateReasonTypeFromString; virDomainNostateReasonTypeToString; virDomainObjAssignDef; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2f66d7cd9a..0a1dc414ae 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -22040,139 +22040,6 @@ qemuDomainGetFSInfo(virDomainPtr dom, } =20 =20 -static int -qemuGetDHCPInterfaces(virDomainObjPtr vm, - virDomainInterfacePtr **ifaces) -{ - g_autoptr(virConnect) conn =3D NULL; - virDomainInterfacePtr *ifaces_ret =3D NULL; - size_t ifaces_count =3D 0; - size_t i; - - if (!(conn =3D virGetConnectNetwork())) - return -1; - - for (i =3D 0; i < vm->def->nnets; i++) { - g_autoptr(virNetwork) network =3D NULL; - char macaddr[VIR_MAC_STRING_BUFLEN]; - virNetworkDHCPLeasePtr *leases =3D NULL; - int n_leases =3D 0; - virDomainInterfacePtr iface =3D NULL; - size_t j; - - if (vm->def->nets[i]->type !=3D VIR_DOMAIN_NET_TYPE_NETWORK) - continue; - - virMacAddrFormat(&(vm->def->nets[i]->mac), macaddr); - - network =3D virNetworkLookupByName(conn, - vm->def->nets[i]->data.network.na= me); - if (!network) - goto error; - - if ((n_leases =3D virNetworkGetDHCPLeases(network, macaddr, - &leases, 0)) < 0) - goto error; - - if (n_leases) { - ifaces_ret =3D g_renew(typeof(*ifaces_ret), ifaces_ret, ifaces= _count + 1); - ifaces_ret[ifaces_count] =3D g_new0(typeof(**ifaces_ret), 1); - iface =3D ifaces_ret[ifaces_count]; - ifaces_count++; - - /* Assuming each lease corresponds to a separate IP */ - iface->naddrs =3D n_leases; - iface->addrs =3D g_new0(typeof(*iface->addrs), iface->naddrs); - iface->name =3D g_strdup(vm->def->nets[i]->ifname); - iface->hwaddr =3D g_strdup(macaddr); - } - - for (j =3D 0; j < n_leases; j++) { - virNetworkDHCPLeasePtr lease =3D leases[j]; - virDomainIPAddressPtr ip_addr =3D &iface->addrs[j]; - - ip_addr->addr =3D g_strdup(lease->ipaddr); - ip_addr->type =3D lease->type; - ip_addr->prefix =3D lease->prefix; - - virNetworkDHCPLeaseFree(lease); - } - - VIR_FREE(leases); - } - - *ifaces =3D g_steal_pointer(&ifaces_ret); - return ifaces_count; - - error: - if (ifaces_ret) { - for (i =3D 0; i < ifaces_count; i++) - virDomainInterfaceFree(ifaces_ret[i]); - } - VIR_FREE(ifaces_ret); - - return -1; -} - - -static int -qemuARPGetInterfaces(virDomainObjPtr vm, - virDomainInterfacePtr **ifaces) -{ - size_t i, j; - size_t ifaces_count =3D 0; - int ret =3D -1; - char macaddr[VIR_MAC_STRING_BUFLEN]; - virDomainInterfacePtr *ifaces_ret =3D NULL; - virDomainInterfacePtr iface =3D NULL; - virArpTablePtr table; - - table =3D virArpTableGet(); - if (!table) - goto cleanup; - - for (i =3D 0; i < vm->def->nnets; i++) { - virMacAddrFormat(&(vm->def->nets[i]->mac), macaddr); - for (j =3D 0; j < table->n; j++) { - virArpTableEntry entry =3D table->t[j]; - - if (STREQ(entry.mac, macaddr)) { - if (VIR_ALLOC(iface) < 0) - goto cleanup; - - iface->name =3D g_strdup(vm->def->nets[i]->ifname); - - iface->hwaddr =3D g_strdup(macaddr); - - if (VIR_ALLOC(iface->addrs) < 0) - goto cleanup; - iface->naddrs =3D 1; - - iface->addrs->addr =3D g_strdup(entry.ipaddr); - - if (VIR_APPEND_ELEMENT(ifaces_ret, ifaces_count, iface) < = 0) - goto cleanup; - } - } - } - - *ifaces =3D g_steal_pointer(&ifaces_ret); - ret =3D ifaces_count; - - cleanup: - virArpTableFree(table); - virDomainInterfaceFree(iface); - - if (ifaces_ret) { - for (i =3D 0; i < ifaces_count; i++) - virDomainInterfaceFree(ifaces_ret[i]); - } - VIR_FREE(ifaces_ret); - - return ret; -} - - static int qemuDomainInterfaceAddresses(virDomainPtr dom, virDomainInterfacePtr **ifaces, @@ -22197,7 +22064,7 @@ qemuDomainInterfaceAddresses(virDomainPtr dom, =20 switch (source) { case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE: - ret =3D qemuGetDHCPInterfaces(vm, ifaces); + ret =3D virDomainNetDHCPInterfaces(vm->def, ifaces); break; =20 case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT: @@ -22217,7 +22084,7 @@ qemuDomainInterfaceAddresses(virDomainPtr dom, break; =20 case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_ARP: - ret =3D qemuARPGetInterfaces(vm, ifaces); + ret =3D virDomainNetARPInterfaces(vm->def, ifaces); break; =20 default: --=20 2.20.1