From nobody Sun May 12 11:52:35 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.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=1653311889; cv=none; d=zohomail.com; s=zohoarc; b=dBQS4lGFVxJGMci96v6duQGAb98evDQpO1RgSCc4I+KuT6fh+9cB9Q2J9fybp6KI8OmDj1L9ioP0vsyf/zJ9YAQ9hSGlvS5CZ6vWotEKuhNnupwV1mj2caTsw02nx3zNmoHZAq+8tbb1XLq10OeCDychOOOyRJtlnUCxFXk3Qug= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653311889; 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=QCkrMWVHpPlzq2daPazLc6q+MjmrF4mf6E2ueX0XFo8=; b=H71ZbDiW5a/RlrOBJZrRE3W8LnONhVl05AzyfAlhBzaQ+7/d1xD2Ff0JBn3yqIGvtmphrNEkJoU+UAY6v4Bo6rf0EqE3c71e2HxlfX/176+Kn8LRl4d2OpbTGpBJmbr5SyRo0S0XiBRFFPpgbFNdiFpT9Iwf9w1bxVgl2U9cuV8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1653311889603321.23151756245954; Mon, 23 May 2022 06:18:09 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-414-_7U59weJPtu3_5abVV4B1A-1; Mon, 23 May 2022 09:17:09 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A77AE85A5B5; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 848BD2166B2F; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id D2A941947067; Mon, 23 May 2022 13:17:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id EFD6F1947059 for ; Mon, 23 May 2022 13:17:04 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id E2EAF407E1C1; Mon, 23 May 2022 13:17:04 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8A592407E1C0 for ; Mon, 23 May 2022 13:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653311885; 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=QCkrMWVHpPlzq2daPazLc6q+MjmrF4mf6E2ueX0XFo8=; b=NpW+Q99/977HZ0ss+PtRk3QNVkKMG3UX5e0yY5yDgpO/mXT4uY/pXpVq1RpqH/P8nno3I7 iD+g1SfpckJEHyTvMNjW+e945SY48OjTIGAZT3loyND1dIzvQevKQ1g1WcqmPkwrAciX3t w7hKG5WLc8sDDoUh+0ohISp/ocW6BKY= X-MC-Unique: _7U59weJPtu3_5abVV4B1A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 1/3] network: Initialize variables in networkDnsmasqConfContents() Date: Mon, 23 May 2022 15:17:00 +0200 Message-Id: <82ff0cadd55a8ae7b88087c99521ab256fa5adb1.1653311757.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 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) X-ZM-MESSAGEID: 1653311892005100001 Content-Type: text/plain; charset="utf-8"; x-default="true" In networkDnsmasqConfContents() there's a for() loop which initializes some variables in its initialization block. This makes both the loop() statement and variable declaration block look needlessly ugly. Speaking of variable declaration, also move some variables which are used only within blocks into their respective blocks. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/network/bridge_driver.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index ca1e0ca50f..10099571c2 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -1004,15 +1004,14 @@ networkDnsmasqConfContents(virNetworkObj *obj, { virNetworkDef *def =3D virNetworkObjGetDef(obj); g_auto(virBuffer) configbuf =3D VIR_BUFFER_INITIALIZER; - int r; int nbleases =3D 0; size_t i; virNetworkDNSDef *dns =3D &def->dns; bool wantDNS =3D dns->enable !=3D VIR_TRISTATE_BOOL_NO; - virNetworkIPDef *ipdef; - virNetworkIPDef *ipv4def; - virNetworkIPDef *ipv6def; - bool ipv6SLAAC; + virNetworkIPDef *ipdef =3D NULL; + virNetworkIPDef *ipv4def =3D NULL; + virNetworkIPDef *ipv6def =3D NULL; + bool ipv6SLAAC =3D false; =20 *configstr =3D NULL; =20 @@ -1211,9 +1210,7 @@ networkDnsmasqConfContents(virNetworkObj *obj, } =20 /* Find the first dhcp for both IPv4 and IPv6 */ - for (i =3D 0, ipv4def =3D NULL, ipv6def =3D NULL, ipv6SLAAC =3D false; - (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); - i++) { + for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))= ; i++) { if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { if (ipdef->nranges || ipdef->nhosts) { if (ipv4def) { @@ -1255,6 +1252,7 @@ networkDnsmasqConfContents(virNetworkObj *obj, =20 while (ipdef) { int prefix; + int r; =20 prefix =3D virNetworkIPDefPrefix(ipdef); if (prefix < 0) { --=20 2.35.1 From nobody Sun May 12 11:52:35 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.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=1653311835; cv=none; d=zohomail.com; s=zohoarc; b=n4pfFFAOwtMaiJk0zT6i98AQRlfeawK/6XWBsDXGzsRPEWaZocVqEkGZ3ruBisbQCgDY7NorrrQe6WvZyQ9A9Gv/fsMj4NZ/9mFmW5WdCA0kmDW/Am4iI+K3nUZiNi/z6XjsnDLUnGpvQDDuhVqYYJfpCY4JZPAs+VXNK2gd3kw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653311835; 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=nvHPy4uNdWTwPbkuArN3MUky2JqOIKcAAB+K+ZA6ye0=; b=JCGhfvQg8WNibRq3+tkgL0m4ViUMrw2dvOEf24YyqLTNMdhR+rAzID3bzDHBv44ZERrsPnlxUVSpyEwEHL6VwvAqwHMp292bWTWbRf7kq5IbdMPATuTkiSp0/5apdguIEBDE+JBeZPO/IyX7iddno2lhQelHnUKZ1GXxPF70+68= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1653311835441223.93008315918235; Mon, 23 May 2022 06:17:15 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-488--h1u8asPOY2mxhiSIJDa8A-1; Mon, 23 May 2022 09:17:09 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 112D938025E2; Mon, 23 May 2022 13:17:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB8372166B2D; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 2F471194705D; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id B91AE1947067 for ; Mon, 23 May 2022 13:17:05 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 9E55D407E1C1; Mon, 23 May 2022 13:17:05 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 28C3C407E1C0 for ; Mon, 23 May 2022 13:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653311834; 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=nvHPy4uNdWTwPbkuArN3MUky2JqOIKcAAB+K+ZA6ye0=; b=IPnIzowCA9VhSHdl5HHpAw2YRYFc+ZIrcnj7StvyFUaax+CuK1vXAoos5PItzvK+Z7r4HO dL4XEm0zKGlGmKpqReeXgD9uyWEV789elL2wsF/buarVbqcpVuYYHHyuVNGLd5uoII8c10 1k62OuMv13Yx+tU3mZ+rXPWSCr/j0F8= X-MC-Unique: -h1u8asPOY2mxhiSIJDa8A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 2/3] network: Separate DHCP config generator into a function Date: Mon, 23 May 2022 15:17:01 +0200 Message-Id: <800221d1c84626ccbf5e6926d5accfc9ebe128d0.1653311757.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 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) X-ZM-MESSAGEID: 1653311835738100004 Content-Type: text/plain; charset="utf-8"; x-default="true" Generating configuration file for dnsmasq is done in networkDnsmasqConfContents() which is this big, self-contained function. Separate at least DHCP part into its own function for better readability. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/network/bridge_driver.c | 227 +++++++++++++++++++----------------- 1 file changed, 120 insertions(+), 107 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 10099571c2..f087e07c52 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -994,6 +994,123 @@ networkDnsmasqConfLocalPTRs(virBuffer *buf, } =20 =20 +static int +networkDnsmasqConfDHCP(virBuffer *buf, + virNetworkIPDef *ipdef, + const char *bridge, + int *nbleases, + dnsmasqContext *dctx) +{ + int r; + int prefix; + + if (!ipdef) + return 0; + + prefix =3D virNetworkIPDefPrefix(ipdef); + if (prefix < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("bridge '%s' has an invalid prefix"), + bridge); + return -1; + } + for (r =3D 0; r < ipdef->nranges; r++) { + int thisRange; + virNetworkDHCPRangeDef range =3D ipdef->ranges[r]; + g_autofree char *leasetime =3D NULL; + g_autofree char *saddr =3D NULL; + g_autofree char *eaddr =3D NULL; + + if (!(saddr =3D virSocketAddrFormat(&range.addr.start)) || + !(eaddr =3D virSocketAddrFormat(&range.addr.end))) + return -1; + + if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) { + virBufferAsprintf(buf, "dhcp-range=3D%s,%s,%d", + saddr, eaddr, prefix); + } else { + /* IPv4 - dnsmasq requires a netmask rather than prefix */ + virSocketAddr netmask; + g_autofree char *netmaskStr =3D NULL; + + if (virSocketAddrPrefixToNetmask(prefix, &netmask, AF_INET) < = 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to translate bridge '%s' " + "prefix %d to netmask"), + bridge, prefix); + return -1; + } + + if (!(netmaskStr =3D virSocketAddrFormat(&netmask))) + return -1; + virBufferAsprintf(buf, "dhcp-range=3D%s,%s,%s", + saddr, eaddr, netmaskStr); + } + + if ((leasetime =3D networkBuildDnsmasqLeaseTime(range.lease))) + virBufferAsprintf(buf, ",%s", leasetime); + + virBufferAddLit(buf, "\n"); + + thisRange =3D virSocketAddrGetRange(&range.addr.start, + &range.addr.end, + &ipdef->address, + virNetworkIPDefPrefix(ipdef)); + if (thisRange < 0) + return -1; + *nbleases +=3D thisRange; + } + + /* + * For static-only DHCP, i.e. with no range but at least one + * host element, we have to add a special --dhcp-range option + * to enable the service in dnsmasq. (this is for dhcp-hosts=3D + * support) + */ + if (!ipdef->nranges && ipdef->nhosts) { + g_autofree char *bridgeaddr =3D virSocketAddrFormat(&ipdef->addres= s); + if (!bridgeaddr) + return -1; + virBufferAsprintf(buf, "dhcp-range=3D%s,static", + bridgeaddr); + if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) + virBufferAsprintf(buf, ",%d", prefix); + virBufferAddLit(buf, "\n"); + } + + if (networkBuildDnsmasqDhcpHostsList(dctx, ipdef) < 0) + return -1; + + /* Note: the following is IPv4 only */ + if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { + if (ipdef->nranges || ipdef->nhosts) { + virBufferAddLit(buf, "dhcp-no-override\n"); + virBufferAddLit(buf, "dhcp-authoritative\n"); + } + + if (ipdef->tftproot) { + virBufferAddLit(buf, "enable-tftp\n"); + virBufferAsprintf(buf, "tftp-root=3D%s\n", ipdef->tftproot); + } + + if (ipdef->bootfile) { + if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) { + g_autofree char *bootserver =3D virSocketAddrFormat(&ipdef= ->bootserver); + + if (!bootserver) + return -1; + virBufferAsprintf(buf, "dhcp-boot=3D%s%s%s\n", + ipdef->bootfile, ",,", bootserver); + } else { + virBufferAsprintf(buf, "dhcp-boot=3D%s\n", ipdef->bootfile= ); + } + } + } + + return 0; +} + + int networkDnsmasqConfContents(virNetworkObj *obj, const char *pidfile, @@ -1248,113 +1365,9 @@ networkDnsmasqConfContents(virNetworkObj *obj, "on the same network interface."); } =20 - ipdef =3D ipv4def ? ipv4def : ipv6def; - - while (ipdef) { - int prefix; - int r; - - prefix =3D virNetworkIPDefPrefix(ipdef); - if (prefix < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("bridge '%s' has an invalid prefix"), - def->bridge); - return -1; - } - for (r =3D 0; r < ipdef->nranges; r++) { - int thisRange; - virNetworkDHCPRangeDef range =3D ipdef->ranges[r]; - g_autofree char *leasetime =3D NULL; - g_autofree char *saddr =3D NULL; - g_autofree char *eaddr =3D NULL; - - if (!(saddr =3D virSocketAddrFormat(&range.addr.start)) || - !(eaddr =3D virSocketAddrFormat(&range.addr.end))) - return -1; - - if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) { - virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%d", - saddr, eaddr, prefix); - } else { - /* IPv4 - dnsmasq requires a netmask rather than prefix */ - virSocketAddr netmask; - g_autofree char *netmaskStr =3D NULL; - - if (virSocketAddrPrefixToNetmask(prefix, &netmask, AF_INET= ) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to translate bridge '%s' " - "prefix %d to netmask"), - def->bridge, prefix); - return -1; - } - - if (!(netmaskStr =3D virSocketAddrFormat(&netmask))) - return -1; - virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%s", - saddr, eaddr, netmaskStr); - } - - if ((leasetime =3D networkBuildDnsmasqLeaseTime(range.lease))) - virBufferAsprintf(&configbuf, ",%s", leasetime); - - virBufferAddLit(&configbuf, "\n"); - - thisRange =3D virSocketAddrGetRange(&range.addr.start, - &range.addr.end, - &ipdef->address, - virNetworkIPDefPrefix(ipdef)= ); - if (thisRange < 0) - return -1; - nbleases +=3D thisRange; - } - - /* - * For static-only DHCP, i.e. with no range but at least one - * host element, we have to add a special --dhcp-range option - * to enable the service in dnsmasq. (this is for dhcp-hosts=3D - * support) - */ - if (!ipdef->nranges && ipdef->nhosts) { - g_autofree char *bridgeaddr =3D virSocketAddrFormat(&ipdef->ad= dress); - if (!bridgeaddr) - return -1; - virBufferAsprintf(&configbuf, "dhcp-range=3D%s,static", - bridgeaddr); - if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) - virBufferAsprintf(&configbuf, ",%d", prefix); - virBufferAddLit(&configbuf, "\n"); - } - - if (networkBuildDnsmasqDhcpHostsList(dctx, ipdef) < 0) - return -1; - - /* Note: the following is IPv4 only */ - if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { - if (ipdef->nranges || ipdef->nhosts) { - virBufferAddLit(&configbuf, "dhcp-no-override\n"); - virBufferAddLit(&configbuf, "dhcp-authoritative\n"); - } - - if (ipdef->tftproot) { - virBufferAddLit(&configbuf, "enable-tftp\n"); - virBufferAsprintf(&configbuf, "tftp-root=3D%s\n", ipdef->t= ftproot); - } - - if (ipdef->bootfile) { - if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) { - g_autofree char *bootserver =3D virSocketAddrFormat(&i= pdef->bootserver); - - if (!bootserver) - return -1; - virBufferAsprintf(&configbuf, "dhcp-boot=3D%s%s%s\n", - ipdef->bootfile, ",,", bootserver); - } else { - virBufferAsprintf(&configbuf, "dhcp-boot=3D%s\n", ipde= f->bootfile); - } - } - } - ipdef =3D (ipdef =3D=3D ipv6def) ? NULL : ipv6def; - } + if (networkDnsmasqConfDHCP(&configbuf, ipv4def, def->bridge, &nbleases= , dctx) < 0 || + networkDnsmasqConfDHCP(&configbuf, ipv6def, def->bridge, &nbleases= , dctx) < 0) + return -1; =20 if (nbleases > 0) virBufferAsprintf(&configbuf, "dhcp-lease-max=3D%d\n", nbleases); --=20 2.35.1 From nobody Sun May 12 11:52:35 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.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=1653311833; cv=none; d=zohomail.com; s=zohoarc; b=jQ2bUNXhCHzHRSaXxAry49nF52Aui1jSD8bBH9Z00rTLbz/VJq6+pNC6S4j9nMDzEcvxxN7QmUnfwlYS9lkf5S+Co7Bl4Xwf0oYl+Y+1O9YWWQ17r2T77OJAgJzF8H2JNELzju/hm8VPxnNWYr1vxjb3+WI4z0s9L2oRNQ2OplE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653311833; 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=ZP/6yKpjnqQYFfzDVM64vKnWRfXecfHNSK9A8808EPA=; b=l6fFgfazK+CjhmJvt1+Jgj49Ki2370TKAdXcIOa5qdCN7NcI4qFUdve6SfJae/NwLK2Sut/vbCqhJs8IdKO4/spqxAeQkntW721ALikWwPygGQM1LWp9ujxYclvdfi1FlL97T1WV4rYe00Z8t/ui/4SK7oZ7ZfPCbeOs7ol/ScI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1653311833593283.45486905175585; Mon, 23 May 2022 06:17:13 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-70-fpcJas2SOMO7LPkl2v0asg-1; Mon, 23 May 2022 09:17:10 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C8774299E75E; Mon, 23 May 2022 13:17:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id B48627AD8; Mon, 23 May 2022 13:17:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 95627194705A; Mon, 23 May 2022 13:17:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 5AF291947079 for ; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 3CC0B407E1C1; Mon, 23 May 2022 13:17:06 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id D78FA407E1C0 for ; Mon, 23 May 2022 13:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653311832; 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=ZP/6yKpjnqQYFfzDVM64vKnWRfXecfHNSK9A8808EPA=; b=ME/Q/iX2PFez3Bkcr+5yOI7kAYB0y84H4mcK8V2y1hShnBZxV1MnJ5SifieUkhr6MiGYon lYBNoOnofhxFVzSGEnGVf8NoQ8qHgbwEJarWXmHvOupJfxOmBmBT46JWrY88kQEhHUO8qp Nx/donh85ktRyxGRb4EbU6AHQSI9au0= X-MC-Unique: fpcJas2SOMO7LPkl2v0asg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 3/3] network: Generate TFTP config regardless of DHCP Date: Mon, 23 May 2022 15:17:02 +0200 Message-Id: <7876683e451582a774d72e9556c0a2fa7cd1c60a.1653311757.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 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) X-ZM-MESSAGEID: 1653311835728100003 Content-Type: text/plain; charset="utf-8"; x-default="true" We already allow users to provide TFTP root path in network XML and not specify any DHCP. This makes sense, because dnsmasq is not only DHCP server but also TFTP server and users might have a DHCP server configured on their own, outside of libvirt's control and want just the TFTP part. By moving TFTP config generator out of DHCP generator and calling it for every IPv4 range, users can finally enable just TFTP. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D2026765 Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/network/bridge_driver.c | 30 ++++++++++++++----- .../networkxml2confdata/netboot-network.conf | 4 +-- tests/networkxml2confdata/netboot-tftp.conf | 13 ++++++++ tests/networkxml2confdata/netboot-tftp.xml | 9 ++++++ tests/networkxml2conftest.c | 1 + tests/networkxml2xmlin/netboot-tftp.xml | 1 + tests/networkxml2xmlout/netboot-tftp.xml | 1 + tests/networkxml2xmltest.c | 1 + 8 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 tests/networkxml2confdata/netboot-tftp.conf create mode 100644 tests/networkxml2confdata/netboot-tftp.xml create mode 120000 tests/networkxml2xmlin/netboot-tftp.xml create mode 120000 tests/networkxml2xmlout/netboot-tftp.xml diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index f087e07c52..7449c7e02a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -1088,11 +1088,6 @@ networkDnsmasqConfDHCP(virBuffer *buf, virBufferAddLit(buf, "dhcp-authoritative\n"); } =20 - if (ipdef->tftproot) { - virBufferAddLit(buf, "enable-tftp\n"); - virBufferAsprintf(buf, "tftp-root=3D%s\n", ipdef->tftproot); - } - if (ipdef->bootfile) { if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) { g_autofree char *bootserver =3D virSocketAddrFormat(&ipdef= ->bootserver); @@ -1111,6 +1106,22 @@ networkDnsmasqConfDHCP(virBuffer *buf, } =20 =20 +static void +networkDnsmasqConfTFTP(virBuffer *buf, + virNetworkIPDef *ipdef, + bool *enableTFTP) +{ + if (!ipdef->tftproot) + return; + + if (!*enableTFTP) { + virBufferAddLit(buf, "enable-tftp\n"); + *enableTFTP =3D true; + } + virBufferAsprintf(buf, "tftp-root=3D%s\n", ipdef->tftproot); +} + + int networkDnsmasqConfContents(virNetworkObj *obj, const char *pidfile, @@ -1129,6 +1140,7 @@ networkDnsmasqConfContents(virNetworkObj *obj, virNetworkIPDef *ipv4def =3D NULL; virNetworkIPDef *ipv6def =3D NULL; bool ipv6SLAAC =3D false; + bool enableTFTP =3D false; =20 *configstr =3D NULL; =20 @@ -1339,6 +1351,8 @@ networkDnsmasqConfContents(virNetworkObj *obj, ipv4def =3D ipdef; } } + + networkDnsmasqConfTFTP(&configbuf, ipdef, &enableTFTP); } if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) { if (ipdef->nranges || ipdef->nhosts) { @@ -1500,7 +1514,7 @@ networkStartDhcpDaemon(virNetworkDriverState *driver, i =3D 0; while ((ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))) { i++; - if (ipdef->nranges || ipdef->nhosts) + if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot) needDnsmasq =3D true; } =20 @@ -3255,7 +3269,7 @@ networkUpdate(virNetworkPtr net, for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET, i)); i++) { - if (ipdef->nranges || ipdef->nhosts) { + if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot) { oldDhcpActive =3D true; break; } @@ -3370,7 +3384,7 @@ networkUpdate(virNetworkPtr net, =20 for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INE= T, i)); i++) { - if (ipdef->nranges || ipdef->nhosts) { + if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot) { newDhcpActive =3D true; break; } diff --git a/tests/networkxml2confdata/netboot-network.conf b/tests/network= xml2confdata/netboot-network.conf index a13239a54f..32ef25b05f 100644 --- a/tests/networkxml2confdata/netboot-network.conf +++ b/tests/networkxml2confdata/netboot-network.conf @@ -10,11 +10,11 @@ expand-hosts except-interface=3Dlo bind-dynamic interface=3Dvirbr1 +enable-tftp +tftp-root=3D/var/lib/tftproot dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0 dhcp-no-override dhcp-authoritative -enable-tftp -tftp-root=3D/var/lib/tftproot dhcp-boot=3Dpxeboot.img dhcp-lease-max=3D253 dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/netboot.hostsfile diff --git a/tests/networkxml2confdata/netboot-tftp.conf b/tests/networkxml= 2confdata/netboot-tftp.conf new file mode 100644 index 0000000000..45615f3c33 --- /dev/null +++ b/tests/networkxml2confdata/netboot-tftp.conf @@ -0,0 +1,13 @@ +##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE +##OVERWRITTEN AND LOST. Changes to this configuration should be made usin= g: +## virsh net-edit tftp-only +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +enable-tftp +tftp-root=3D/var/lib/tftproot +addn-hosts=3D/var/lib/libvirt/dnsmasq/tftp-only.addnhosts diff --git a/tests/networkxml2confdata/netboot-tftp.xml b/tests/networkxml2= confdata/netboot-tftp.xml new file mode 100644 index 0000000000..297f5a7ba1 --- /dev/null +++ b/tests/networkxml2confdata/netboot-tftp.xml @@ -0,0 +1,9 @@ + + tftp-only + eb486e5c-4df5-42ee-ae4a-ad8557998d00 + + + + + + diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index 0bc9e128e3..a062ff9c3c 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -168,6 +168,7 @@ mymain(void) DO_TEST("isolated-network", full); DO_TEST("netboot-network", full); DO_TEST("netboot-proxy-network", full); + DO_TEST("netboot-tftp", full); DO_TEST("nat-network-dns-srv-record-minimal", full); DO_TEST("nat-network-name-with-quotes", full); DO_TEST("routed-network", full); diff --git a/tests/networkxml2xmlin/netboot-tftp.xml b/tests/networkxml2xml= in/netboot-tftp.xml new file mode 120000 index 0000000000..1487de558b --- /dev/null +++ b/tests/networkxml2xmlin/netboot-tftp.xml @@ -0,0 +1 @@ +../networkxml2confdata/netboot-tftp.xml \ No newline at end of file diff --git a/tests/networkxml2xmlout/netboot-tftp.xml b/tests/networkxml2xm= lout/netboot-tftp.xml new file mode 120000 index 0000000000..1487de558b --- /dev/null +++ b/tests/networkxml2xmlout/netboot-tftp.xml @@ -0,0 +1 @@ +../networkxml2confdata/netboot-tftp.xml \ No newline at end of file diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index ca24305ace..9e8d675a10 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -127,6 +127,7 @@ mymain(void) DO_TEST("nat-network"); DO_TEST("netboot-network"); DO_TEST("netboot-proxy-network"); + DO_TEST("netboot-tftp"); DO_TEST("nat-network-dns-txt-record"); DO_TEST("nat-network-dns-srv-record"); DO_TEST("nat-network-dns-srv-records"); --=20 2.35.1