From nobody Sun Apr 28 19:35:38 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 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=1587585999; cv=none; d=zohomail.com; s=zohoarc; b=nXphyeIpqtt5YkNVkobOjMeZKPtVKjwACt/biLvE44HJzDnPNz2VhSoELdp3hEa6voTwbklPdrzfB5f76eFkwkrC6d+CxBVjmpr6tZbL5DUtOvMG0ijVNhgi1o0ic2xX9Ju51jmRLhOk4QaxMrG4WVdXIzY27kQpcZ6YkLsvxDg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587585999; 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=YZaLHwOBz/QTZ1oXBgsu4XbIKtd2pT28GAfLk2iMq1o=; b=VwtADYSqi73w8Ol6+yrg2Rmg6Oy+parLKOuVLsxsUbiXIjydgD0gWgXVZzkqU+uJvVd2PUH1EdBKbQ3Uk0A6FdIq+WmXAD1VaLSHJ3LaDYpYF3g4/LEYRe0twfyN9QwWg0BUaiWFuMhxvwGOfvI3K+Ee0Fr1FA14dOUd3VD6rew= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 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-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 1587585999570736.9708036753767; Wed, 22 Apr 2020 13:06:39 -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-248-ZcFrhX5_N_C6-rMQ4dKz1g-1; Wed, 22 Apr 2020 16:06:35 -0400 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 BC12018CA268; Wed, 22 Apr 2020 20:06:28 +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 82C006084B; Wed, 22 Apr 2020 20:06:28 +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 0106F180954D; Wed, 22 Apr 2020 20:06:27 +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 03MK6Mc0004571 for ; Wed, 22 Apr 2020 16:06:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id CBB032166B29; Wed, 22 Apr 2020 20:06:22 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C720C2166B27 for ; Wed, 22 Apr 2020 20:06:22 +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 9834B80CDAF for ; Wed, 22 Apr 2020 20:06:22 +0000 (UTC) Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-255-FceezbtwO6mmdszmelrT_g-1; Wed, 22 Apr 2020 16:06:20 -0400 Received: by mail-qv1-f46.google.com with SMTP id v18so1596972qvx.9 for ; Wed, 22 Apr 2020 13:06:19 -0700 (PDT) Received: from localhost.localdomain ([191.254.8.233]) by smtp.gmail.com with ESMTPSA id x34sm211249qta.43.2020.04.22.13.06.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 13:06:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1587585998; 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=YZaLHwOBz/QTZ1oXBgsu4XbIKtd2pT28GAfLk2iMq1o=; b=eOKAmiwWZHLJxfFPEGbZCleYkASAYG6NBICI7n9Ad/AePBR91+Xxjcqzy+7zFB2bcKm7lS cyxBtWuhiXqSP+wePfz4doNojvZpPt0JZZtsx/KcSlcXc/y09aRYefxOkmVQk8NxYYzb+I XhK7CrQNgWGfXSJd3iAIRFCyDWbEUPM= X-MC-Unique: ZcFrhX5_N_C6-rMQ4dKz1g-1 X-MC-Unique: FceezbtwO6mmdszmelrT_g-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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PATZj4XQ4jgoMcPZjaAcvFLi7NIMcRIgEuofz19eduM=; b=TyBeSgN9/u2zhupc5gdCbH017NipPJJ0lH6EkiXIXjtIPXYPGpdcHRlQo8oOLnCdpE /DKsww2HQ9aodJf6rlK0SDrxwfURUOo2ohY5DF6MCrj1KIMafGmvFU2XOJirjU8ykU9k OpAmommjjrcUJx+G7pQRL0GT7bJAP8vsHAgCtAtYPmNRREdAMdPmyNYuwdXX93lGumlF m3peUAALQ8OBR2mZG9TW0bgw8/AYUsKw0rKi+xFgURVHWn6NQli+95fy4hmRWXxZ2mFl rUdLCF87fIH3TFBz/xtmSYjGTr/8qX7dndroT9+7XIOtUg6CTkUr9pvoUt6FDmezCKdX ugTw== X-Gm-Message-State: AGi0PubF/xAxYo8Oua6O6d9LJeaZNvx2fI+eS9Yf0pU9K5MdldUk3fAH l8wF6CBV9Hk/y39xIFrjPlRBma/D X-Google-Smtp-Source: APiQypJrcfwN33THuDncI3/x/0vZf1Ni5uPii+Fo57L+CIPcgv0MI8OMtBLIfmp6Ax6NKvq+MI3i5g== X-Received: by 2002:a0c:d652:: with SMTP id e18mr718081qvj.58.1587585978011; Wed, 22 Apr 2020 13:06:18 -0700 (PDT) From: Julio Faracco To: libvir-list@redhat.com Subject: [PATCH v3 1/2] conf: Add option for settings Date: Wed, 22 Apr 2020 17:05:57 -0300 Message-Id: <20200422200558.868392-2-jcfaracco@gmail.com> In-Reply-To: <20200422200558.868392-1-jcfaracco@gmail.com> References: <20200422200558.868392-1-jcfaracco@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 03MK6Mc0004571 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.79 on 10.5.11.13 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" If an user is trying to configure a dhcp neetwork settings, it is not possible to change the leasetime of a range or a host entry. This is available using dnsmasq extra options, but they are associated with dhcp-range or dhcp-hosts fields. This patch implements a leasetime for range and hosts tags. They can be defined under that settings: Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D913446 Signed-off-by: Julio Faracco Reviewed-by: Michal Privoznik --- docs/schemas/basictypes.rng | 8 ++ docs/schemas/network.rng | 20 +++++ src/conf/network_conf.c | 159 +++++++++++++++++++++++++++++++----- src/conf/network_conf.h | 27 +++++- src/libvirt_private.syms | 3 + src/network/bridge_driver.c | 56 +++++++++++-- src/network/bridge_driver.h | 1 + src/test/test_driver.c | 2 +- src/util/virdnsmasq.c | 60 +++++++++----- src/util/virdnsmasq.h | 3 + src/vbox/vbox_network.c | 16 ++-- tests/networkxml2conftest.c | 15 ++-- 12 files changed, 306 insertions(+), 64 deletions(-) diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng index 81465273c8..271ed18afb 100644 --- a/docs/schemas/basictypes.rng +++ b/docs/schemas/basictypes.rng @@ -607,4 +607,12 @@ =20 + + + seconds + mins + hours + + + diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng index 60453225d6..88b6f4dfdd 100644 --- a/docs/schemas/network.rng +++ b/docs/schemas/network.rng @@ -371,6 +371,16 @@ + + + + + + + + + + @@ -388,6 +398,16 @@ + + + + + + + + + + diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 819b645df7..286a0edb7c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -70,6 +70,13 @@ VIR_ENUM_IMPL(virNetworkTaint, "hook-script", ); =20 +VIR_ENUM_IMPL(virNetworkDHCPLeaseTimeUnit, + VIR_NETWORK_DHCP_LEASETIME_UNIT_LAST, + "seconds", + "mins", + "hours", +); + static virClassPtr virNetworkXMLOptionClass; =20 static void @@ -132,12 +139,20 @@ virNetworkForwardPfDefClear(virNetworkForwardPfDefPtr= def) } =20 =20 +static void +virNetworkDHCPLeaseTimeDefClear(virNetworkDHCPLeaseTimeDefPtr lease) +{ + VIR_FREE(lease); +} + + static void virNetworkDHCPHostDefClear(virNetworkDHCPHostDefPtr def) { VIR_FREE(def->mac); VIR_FREE(def->id); VIR_FREE(def->name); + VIR_FREE(def->lease); } =20 =20 @@ -145,6 +160,9 @@ static void virNetworkIPDefClear(virNetworkIPDefPtr def) { VIR_FREE(def->family); + + while (def->nranges) + virNetworkDHCPLeaseTimeDefClear(def->ranges[--def->nranges].lease); VIR_FREE(def->ranges); =20 while (def->nhosts) @@ -391,11 +409,55 @@ int virNetworkIPDefNetmask(const virNetworkIPDef *def, =20 =20 static int -virSocketAddrRangeParseXML(const char *networkName, - virNetworkIPDefPtr ipdef, - xmlNodePtr node, - virSocketAddrRangePtr range) +virNetworkDHCPLeaseTimeDefParseXML(virNetworkDHCPLeaseTimeDefPtr *lease, + xmlNodePtr node) +{ + virNetworkDHCPLeaseTimeDefPtr new_lease =3D *lease; + g_autofree char *expiry =3D NULL, *unit =3D NULL; + + if (!(expiry =3D virXMLPropString(node, "expiry"))) + return 0; + + if (VIR_ALLOC(new_lease) < 0) + return -1; + + if (virStrToLong_ul(expiry, NULL, 10, &new_lease->expiry) < 0) + return -1; + + if (!(unit =3D virXMLPropString(node, "unit"))) + new_lease->unit =3D VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES; + else + new_lease->unit =3D virNetworkDHCPLeaseTimeUnitTypeFromString(unit= ); + + /* infinite */ + if (new_lease->expiry > 0) { + /* This boundary check is related to dnsmasq man page settings: + * "The minimum lease time is two minutes." */ + if ((new_lease->unit =3D=3D VIR_NETWORK_DHCP_LEASETIME_UNIT_SECOND= S && + new_lease->expiry < 120) || + (new_lease->unit =3D=3D VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTE= S && + new_lease->expiry < 2)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("The minimum lease time should be greater " + "than 2 minutes")); + return -1; + } + } + + *lease =3D new_lease; + + return 0; +} + + +static int +virNetworkDHCPRangeDefParseXML(const char *networkName, + virNetworkIPDefPtr ipdef, + xmlNodePtr node, + virNetworkDHCPRangeDefPtr range) { + virSocketAddrRangePtr addr =3D &range->addr; + xmlNodePtr cur =3D node->children; char *start =3D NULL, *end =3D NULL; int ret =3D -1; =20 @@ -405,7 +467,7 @@ virSocketAddrRangeParseXML(const char *networkName, networkName); goto cleanup; } - if (virSocketAddrParse(&range->start, start, AF_UNSPEC) < 0) + if (virSocketAddrParse(&addr->start, start, AF_UNSPEC) < 0) goto cleanup; =20 if (!(end =3D virXMLPropString(node, "end"))) { @@ -414,14 +476,24 @@ virSocketAddrRangeParseXML(const char *networkName, networkName); goto cleanup; } - if (virSocketAddrParse(&range->end, end, AF_UNSPEC) < 0) + if (virSocketAddrParse(&addr->end, end, AF_UNSPEC) < 0) goto cleanup; =20 /* do a sanity check of the range */ - if (virSocketAddrGetRange(&range->start, &range->end, &ipdef->address, + if (virSocketAddrGetRange(&addr->start, &addr->end, &ipdef->address, virNetworkIPDefPrefix(ipdef)) < 0) goto cleanup; =20 + while (cur !=3D NULL) { + if (cur->type =3D=3D XML_ELEMENT_NODE && + virXMLNodeNameEqual(cur, "lease")) { + + if (virNetworkDHCPLeaseTimeDefParseXML(&range->lease, cur) < 0) + goto cleanup; + } + cur =3D cur->next; + } + ret =3D 0; =20 cleanup: @@ -441,6 +513,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName, char *mac =3D NULL, *name =3D NULL, *ip =3D NULL, *id =3D NULL; virMacAddr addr; virSocketAddr inaddr; + xmlNodePtr cur =3D node->children; int ret =3D -1; =20 mac =3D virXMLPropString(node, "mac"); @@ -533,6 +606,16 @@ virNetworkDHCPHostDefParseXML(const char *networkName, } } =20 + while (cur !=3D NULL) { + if (cur->type =3D=3D XML_ELEMENT_NODE && + virXMLNodeNameEqual(cur, "lease")) { + + if (virNetworkDHCPLeaseTimeDefParseXML(&host->lease, cur) < 0) + goto cleanup; + } + cur =3D cur->next; + } + host->mac =3D mac; mac =3D NULL; host->id =3D id; @@ -559,7 +642,7 @@ virNetworkDHCPDefParseXML(const char *networkName, { int ret =3D -1; xmlNodePtr cur; - virSocketAddrRange range; + virNetworkDHCPRangeDef range; virNetworkDHCPHostDef host; =20 memset(&range, 0, sizeof(range)); @@ -570,7 +653,7 @@ virNetworkDHCPDefParseXML(const char *networkName, if (cur->type =3D=3D XML_ELEMENT_NODE && virXMLNodeNameEqual(cur, "range")) { =20 - if (virSocketAddrRangeParseXML(networkName, def, cur, &range) = < 0) + if (virNetworkDHCPRangeDefParseXML(networkName, def, cur, &ran= ge) < 0) goto cleanup; if (VIR_APPEND_ELEMENT(def->ranges, def->nranges, range) < 0) goto cleanup; @@ -583,7 +666,6 @@ virNetworkDHCPDefParseXML(const char *networkName, goto cleanup; if (VIR_APPEND_ELEMENT(def->hosts, def->nhosts, host) < 0) goto cleanup; - } else if (VIR_SOCKET_ADDR_IS_FAMILY(&def->address, AF_INET) && cur->type =3D=3D XML_ELEMENT_NODE && virXMLNodeNameEqual(cur, "bootp")) { @@ -2300,20 +2382,39 @@ virNetworkIPDefFormat(virBufferPtr buf, virBufferAdjustIndent(buf, 2); =20 for (i =3D 0; i < def->nranges; i++) { - char *saddr =3D virSocketAddrFormat(&def->ranges[i].start); + virSocketAddrRange addr =3D def->ranges[i].addr; + virNetworkDHCPLeaseTimeDefPtr lease =3D def->ranges[i].lease; + + char *saddr =3D virSocketAddrFormat(&addr.start); if (!saddr) return -1; - char *eaddr =3D virSocketAddrFormat(&def->ranges[i].end); + char *eaddr =3D virSocketAddrFormat(&addr.end); if (!eaddr) { VIR_FREE(saddr); return -1; } - virBufferAsprintf(buf, "\n", + virBufferAsprintf(buf, "\n"); + virBufferAdjustIndent(buf, 2); + if (!lease->expiry) { + virBufferAddLit(buf, "\n"); + } else { + virBufferAsprintf(buf, "\n", + lease->expiry, + virNetworkDHCPLeaseTimeUnitTypeToStr= ing(lease->unit)); + } + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + } else { + virBufferAddLit(buf, "/>\n"); + } VIR_FREE(saddr); VIR_FREE(eaddr); } for (i =3D 0; i < def->nhosts; i++) { + virNetworkDHCPLeaseTimeDefPtr lease =3D def->hosts[i].lease; virBufferAddLit(buf, "hosts[i].mac) virBufferAsprintf(buf, " mac=3D'%s'", def->hosts[i].mac); @@ -2328,7 +2429,21 @@ virNetworkIPDefFormat(virBufferPtr buf, virBufferAsprintf(buf, " ip=3D'%s'", ipaddr); VIR_FREE(ipaddr); } - virBufferAddLit(buf, "/>\n"); + if (lease) { + virBufferAddLit(buf, ">\n"); + virBufferAdjustIndent(buf, 2); + if (!lease->expiry) { + virBufferAddLit(buf, "\n"); + } else { + virBufferAsprintf(buf, "\n", + lease->expiry, + virNetworkDHCPLeaseTimeUnitTypeToStr= ing(lease->unit)); + } + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + } else { + virBufferAddLit(buf, "/>\n"); + } } if (def->bootfile) { virBufferEscapeString(buf, "\n"); =20 } - virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); } @@ -3080,7 +3194,7 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, { size_t i; virNetworkIPDefPtr ipdef =3D virNetworkIPDefByIndex(def, parentIndex); - virSocketAddrRange range; + virNetworkDHCPRangeDef range; =20 memset(&range, 0, sizeof(range)); =20 @@ -3100,11 +3214,11 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, return -1; } =20 - if (virSocketAddrRangeParseXML(def->name, ipdef, ctxt->node, &range) <= 0) + if (virNetworkDHCPRangeDefParseXML(def->name, ipdef, ctxt->node, &rang= e) < 0) return -1; =20 if (VIR_SOCKET_ADDR_FAMILY(&ipdef->address) - !=3D VIR_SOCKET_ADDR_FAMILY(&range.start)) { + !=3D VIR_SOCKET_ADDR_FAMILY(&range.addr.start)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("the address family of a dhcp range must match " "the address family of the dhcp element's parent"= )); @@ -3113,8 +3227,9 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, =20 /* check if an entry with same name/address/ip already exists */ for (i =3D 0; i < ipdef->nranges; i++) { - if (virSocketAddrEqual(&range.start, &ipdef->ranges[i].start) && - virSocketAddrEqual(&range.end, &ipdef->ranges[i].end)) { + virSocketAddrRange addr =3D ipdef->ranges[i].addr; + if (virSocketAddrEqual(&range.addr.start, &addr.start) && + virSocketAddrEqual(&range.addr.end, &addr.end)) { break; } } @@ -3126,8 +3241,8 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, return -1; =20 if (i < ipdef->nranges) { - char *startip =3D virSocketAddrFormat(&range.start); - char *endip =3D virSocketAddrFormat(&range.end); + char *startip =3D virSocketAddrFormat(&range.addr.start); + char *endip =3D virSocketAddrFormat(&range.addr.end); =20 virReportError(VIR_ERR_OPERATION_INVALID, _("there is an existing dhcp range entry in " diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index db7243eef5..f2dc388ef0 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -80,6 +80,16 @@ typedef enum { VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_LAST, } virNetworkForwardHostdevDeviceType; =20 +typedef enum { + VIR_NETWORK_DHCP_LEASETIME_UNIT_SECONDS =3D 0, + VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES, + VIR_NETWORK_DHCP_LEASETIME_UNIT_HOURS, + + VIR_NETWORK_DHCP_LEASETIME_UNIT_LAST, +} virNetworkDHCPLeaseTimeUnitType; + +VIR_ENUM_DECL(virNetworkDHCPLeaseTimeUnit); + /* The backend driver used for devices from the pool. Currently used * only for PCI devices (vfio vs. kvm), but could be used for other * device types in the future. @@ -94,6 +104,20 @@ typedef enum { =20 VIR_ENUM_DECL(virNetworkForwardDriverName); =20 +typedef struct _virNetworkDHCPLeaseTimeDef virNetworkDHCPLeaseTimeDef; +typedef virNetworkDHCPLeaseTimeDef *virNetworkDHCPLeaseTimeDefPtr; +struct _virNetworkDHCPLeaseTimeDef { + unsigned long expiry; + virNetworkDHCPLeaseTimeUnitType unit; +}; + +typedef struct _virNetworkDHCPRangeDef virNetworkDHCPRangeDef; +typedef virNetworkDHCPRangeDef *virNetworkDHCPRangeDefPtr; +struct _virNetworkDHCPRangeDef { + virSocketAddrRange addr; + virNetworkDHCPLeaseTimeDefPtr lease; +}; + typedef struct _virNetworkDHCPHostDef virNetworkDHCPHostDef; typedef virNetworkDHCPHostDef *virNetworkDHCPHostDefPtr; struct _virNetworkDHCPHostDef { @@ -101,6 +125,7 @@ struct _virNetworkDHCPHostDef { char *id; char *name; virSocketAddr ip; + virNetworkDHCPLeaseTimeDefPtr lease; }; =20 typedef struct _virNetworkDNSTxtDef virNetworkDNSTxtDef; @@ -171,7 +196,7 @@ struct _virNetworkIPDef { int localPTR; /* virTristateBool */ =20 size_t nranges; /* Zero or more dhcp ranges */ - virSocketAddrRangePtr ranges; + virNetworkDHCPRangeDefPtr ranges; =20 size_t nhosts; /* Zero or more dhcp hosts */ virNetworkDHCPHostDefPtr hosts; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 28610a837e..c43e8b0ca6 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -772,6 +772,8 @@ virNetworkDefParseNode; virNetworkDefParseString; virNetworkDefParseXML; virNetworkDefUpdateSection; +virNetworkDHCPLeaseTimeUnitTypeFromString; +virNetworkDHCPLeaseTimeUnitTypeToString; virNetworkForwardTypeToString; virNetworkIPDefNetmask; virNetworkIPDefPrefix; @@ -1950,6 +1952,7 @@ dnsmasqCapsRefresh; dnsmasqContextFree; dnsmasqContextNew; dnsmasqDelete; +dnsmasqDhcpHostsToString; dnsmasqReload; dnsmasqSave; =20 diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index f06099297a..87f0452611 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -966,6 +966,30 @@ static int networkConnectIsAlive(virConnectPtr conn G_= GNUC_UNUSED) } =20 =20 +static char * +networkBuildDnsmasqLeaseTime(virNetworkDHCPLeaseTimeDefPtr lease) +{ + char *leasetime =3D NULL; + const char *unit; + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + + if (!lease) + return NULL; + + if (lease->expiry =3D=3D 0) { + virBufferAddLit(&buf, "infinite"); + } else { + unit =3D virNetworkDHCPLeaseTimeUnitTypeToString(lease->unit); + /* We get only first compatible char from string: 's', 'm' or 'h' = */ + virBufferAsprintf(&buf, "%lu%c", lease->expiry, unit[0]); + } + + leasetime =3D virBufferContentAndReset(&buf); + + return leasetime; +} + + /* the following does not build a file, it builds a list * which is later saved into a file */ @@ -975,14 +999,18 @@ networkBuildDnsmasqDhcpHostsList(dnsmasqContext *dctx, { size_t i; bool ipv6 =3D false; + g_autofree char *leasetime =3D NULL; =20 if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) ipv6 =3D true; for (i =3D 0; i < ipdef->nhosts; i++) { virNetworkDHCPHostDefPtr host =3D &(ipdef->hosts[i]); + + leasetime =3D networkBuildDnsmasqLeaseTime(host->lease); if (VIR_SOCKET_ADDR_VALID(&host->ip)) if (dnsmasqAddDhcpHost(dctx, host->mac, &host->ip, - host->name, host->id, ipv6) < 0) + host->name, host->id, leasetime, + ipv6) < 0) return -1; } =20 @@ -1052,6 +1080,7 @@ int networkDnsmasqConfContents(virNetworkObjPtr obj, const char *pidfile, char **configstr, + char **hostsfilestr, dnsmasqContext *dctx, dnsmasqCapsPtr caps G_GNUC_UNUSED) { @@ -1381,13 +1410,15 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, } for (r =3D 0; r < ipdef->nranges; r++) { int thisRange; + virNetworkDHCPRangeDef range =3D ipdef->ranges[r]; + g_autofree char *leasetime =3D NULL; =20 - if (!(saddr =3D virSocketAddrFormat(&ipdef->ranges[r].start)) = || - !(eaddr =3D virSocketAddrFormat(&ipdef->ranges[r].end))) + if (!(saddr =3D virSocketAddrFormat(&range.addr.start)) || + !(eaddr =3D virSocketAddrFormat(&range.addr.end))) goto cleanup; =20 if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) { - virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%d\n", + virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%d", saddr, eaddr, prefix); } else { /* IPv4 - dnsmasq requires a netmask rather than prefix */ @@ -1404,14 +1435,19 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 if (!(netmaskStr =3D virSocketAddrFormat(&netmask))) goto cleanup; - virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%s\n", + virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%s", saddr, eaddr, netmaskStr); } =20 + if ((leasetime =3D networkBuildDnsmasqLeaseTime(range.lease))) + virBufferAsprintf(&configbuf, ",%s", leasetime); + + virBufferAddLit(&configbuf, "\n"); + VIR_FREE(saddr); VIR_FREE(eaddr); - thisRange =3D virSocketAddrGetRange(&ipdef->ranges[r].start, - &ipdef->ranges[r].end, + thisRange =3D virSocketAddrGetRange(&range.addr.start, + &range.addr.end, &ipdef->address, virNetworkIPDefPrefix(ipdef)= ); if (thisRange < 0) @@ -1525,6 +1561,9 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, if (!(*configstr =3D virBufferContentAndReset(&configbuf))) goto cleanup; =20 + *hostsfilestr =3D dnsmasqDhcpHostsToString(dctx->hostsfile->hosts, + dctx->hostsfile->nhosts); + ret =3D 0; =20 cleanup: @@ -1549,11 +1588,12 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverS= tatePtr driver, int ret =3D -1; char *configfile =3D NULL; char *configstr =3D NULL; + char *hostsfilestr =3D NULL; char *leaseshelper_path =3D NULL; =20 virNetworkObjSetDnsmasqPid(obj, -1); =20 - if (networkDnsmasqConfContents(obj, pidfile, &configstr, + if (networkDnsmasqConfContents(obj, pidfile, &configstr, &hostsfilestr, dctx, dnsmasq_caps) < 0) goto cleanup; if (!configstr) diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h index d35850d293..fb0ccad4b1 100644 --- a/src/network/bridge_driver.h +++ b/src/network/bridge_driver.h @@ -46,5 +46,6 @@ int networkDnsmasqConfContents(virNetworkObjPtr obj, const char *pidfile, char **configstr, + char **hostsfilestr, dnsmasqContext *dctx, dnsmasqCapsPtr caps); diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 7759847c2d..0506147888 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -5025,7 +5025,7 @@ testDomainInterfaceAddressFromNet(testDriverPtr drive= r, net_def->ips->prefix= ); =20 if (net_def->ips->nranges > 0) - addr =3D net_def->ips->ranges[0].start; + addr =3D net_def->ips->ranges[0].addr.start; else addr =3D net_def->ips->address; =20 diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c index adc6f96bb6..818219fbeb 100644 --- a/src/util/virdnsmasq.c +++ b/src/util/virdnsmasq.c @@ -296,11 +296,14 @@ hostsfileAdd(dnsmasqHostsfile *hostsfile, virSocketAddr *ip, const char *name, const char *id, + const char *leasetime, bool ipv6) { - char *ipstr =3D NULL; + g_autofree char *ipstr =3D NULL; + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + if (VIR_REALLOC_N(hostsfile->hosts, hostsfile->nhosts + 1) < 0) - goto error; + return -1; =20 if (!(ipstr =3D virSocketAddrFormat(ip))) return -1; @@ -308,34 +311,30 @@ hostsfileAdd(dnsmasqHostsfile *hostsfile, /* the first test determines if it is a dhcpv6 host */ if (ipv6) { if (name && id) { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("= id:%s,%s,[%s]", - id,= name, ipstr); + virBufferAsprintf(&buf, "id:%s,%s", id, name); } else if (name && !id) { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("= %s,[%s]", - nam= e, ipstr); + virBufferAsprintf(&buf, "%s", name); } else if (!name && id) { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("= id:%s,[%s]", - id,= ipstr); + virBufferAsprintf(&buf, "id:%s", id); } + virBufferAsprintf(&buf, ",[%s]", ipstr); } else if (name && mac) { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("%s,%= s,%s", - mac, ip= str, name); + virBufferAsprintf(&buf, "%s,%s,%s", mac, ipstr, name); } else if (name && !mac) { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("%s,%= s", name, - ipstr); + virBufferAsprintf(&buf, "%s,%s", name, ipstr); } else { - hostsfile->hosts[hostsfile->nhosts].host =3D g_strdup_printf("%s,%= s", mac, - ipstr); + virBufferAsprintf(&buf, "%s,%s", mac, ipstr); } - VIR_FREE(ipstr); + + if (leasetime) + virBufferAsprintf(&buf, ",%s", leasetime); + + if (!(hostsfile->hosts[hostsfile->nhosts].host =3D virBufferContentAnd= Reset(&buf))) + return -1; =20 hostsfile->nhosts++; =20 return 0; - - error: - VIR_FREE(ipstr); - return -1; } =20 static dnsmasqHostsfile * @@ -501,9 +500,10 @@ dnsmasqAddDhcpHost(dnsmasqContext *ctx, virSocketAddr *ip, const char *name, const char *id, + const char *leasetime, bool ipv6) { - return hostsfileAdd(ctx->hostsfile, mac, ip, name, id, ipv6); + return hostsfileAdd(ctx->hostsfile, mac, ip, name, id, leasetime, ipv6= ); } =20 /* @@ -862,3 +862,23 @@ dnsmasqCapsGet(dnsmasqCapsPtr caps, dnsmasqCapsFlags f= lag) { return caps && virBitmapIsBitSet(caps->flags, flag); } + + +/** dnsmasqDhcpHostsToString: + * + * Turns a vector of dnsmasqDhcpHost into the string that is ought to be + * stored in the hostsfile, this functionality is split to make hostsfil= es + * testable. Returs NULL if nhosts is 0. + */ +char * +dnsmasqDhcpHostsToString(dnsmasqDhcpHost *hosts, + unsigned int nhosts) +{ + size_t i; + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + + for (i =3D 0; i < nhosts; i++) + virBufferAsprintf(&buf, "%s\n", hosts[i].host); + + return virBufferContentAndReset(&buf); +} diff --git a/src/util/virdnsmasq.h b/src/util/virdnsmasq.h index ff0e56d635..4c14bc6ca7 100644 --- a/src/util/virdnsmasq.h +++ b/src/util/virdnsmasq.h @@ -87,6 +87,7 @@ int dnsmasqAddDhcpHost(dnsmasqContext *ctx, virSocketAddr *ip, const char *name, const char *id, + const char *leasetime, bool ipv6); int dnsmasqAddHost(dnsmasqContext *ctx, virSocketAddr *ip, @@ -104,6 +105,8 @@ int dnsmasqCapsRefresh(dnsmasqCapsPtr *caps, const char= *binaryPath); bool dnsmasqCapsGet(dnsmasqCapsPtr caps, dnsmasqCapsFlags flag); const char *dnsmasqCapsGetBinaryPath(dnsmasqCapsPtr caps); unsigned long dnsmasqCapsGetVersion(dnsmasqCapsPtr caps); +char *dnsmasqDhcpHostsToString(dnsmasqDhcpHost *hosts, + unsigned int nhosts); =20 #define DNSMASQ_DHCPv6_MAJOR_REQD 2 #define DNSMASQ_DHCPv6_MINOR_REQD 64 diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c index 19b4d23ed8..cf273b9a48 100644 --- a/src/vbox/vbox_network.c +++ b/src/vbox/vbox_network.c @@ -379,6 +379,7 @@ vboxNetworkDefineCreateXML(virConnectPtr conn, const ch= ar *xml, bool start) virNetworkIPDefPtr ipdef =3D NULL; unsigned char uuid[VIR_UUID_BUFLEN]; vboxIID vboxnetiid; + virSocketAddrRange addr; virSocketAddr netmask; IHost *host =3D NULL; virNetworkPtr ret =3D NULL; @@ -440,9 +441,10 @@ vboxNetworkDefineCreateXML(virConnectPtr conn, const c= har *xml, bool start) /* Currently support only one dhcp server per network * with contigious address space from start to end */ + addr =3D ipdef->ranges[0].addr; if ((ipdef->nranges >=3D 1) && - VIR_SOCKET_ADDR_VALID(&ipdef->ranges[0].start) && - VIR_SOCKET_ADDR_VALID(&ipdef->ranges[0].end)) { + VIR_SOCKET_ADDR_VALID(&addr.start) && + VIR_SOCKET_ADDR_VALID(&addr.end)) { IDHCPServer *dhcpServer =3D NULL; =20 gVBoxAPI.UIVirtualBox.FindDHCPServerByNetworkName(data->vboxObj, @@ -464,8 +466,8 @@ vboxNetworkDefineCreateXML(virConnectPtr conn, const ch= ar *xml, bool start) =20 ipAddressUtf16 =3D vboxSocketFormatAddrUtf16(data, &ipdef->add= ress); networkMaskUtf16 =3D vboxSocketFormatAddrUtf16(data, &netmask); - fromIPAddressUtf16 =3D vboxSocketFormatAddrUtf16(data, &ipdef-= >ranges[0].start); - toIPAddressUtf16 =3D vboxSocketFormatAddrUtf16(data, &ipdef->r= anges[0].end); + fromIPAddressUtf16 =3D vboxSocketFormatAddrUtf16(data, &addr.s= tart); + toIPAddressUtf16 =3D vboxSocketFormatAddrUtf16(data, &addr.end= ); =20 if (ipAddressUtf16 =3D=3D NULL || networkMaskUtf16 =3D=3D NULL= || fromIPAddressUtf16 =3D=3D NULL || toIPAddressUtf16 =3D=3D = NULL) { @@ -770,6 +772,7 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr networ= k, unsigned int flags) vboxIID vboxnet0IID; IHost *host =3D NULL; char *ret =3D NULL; + virSocketAddrRange addr; nsresult rc; =20 if (!data->vboxObj) @@ -833,14 +836,15 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr netw= ork, unsigned int flags) /* Currently virtualbox supports only one dhcp server per netw= ork * with contigious address space from start to end */ + addr =3D ipdef->ranges[0].addr; if (vboxSocketParseAddrUtf16(data, ipAddressUtf16, &ipdef->address) < 0 || vboxSocketParseAddrUtf16(data, networkMaskUtf16, &ipdef->netmask) < 0 || vboxSocketParseAddrUtf16(data, fromIPAddressUtf16, - &ipdef->ranges[0].start) < 0 || + &addr.start) < 0 || vboxSocketParseAddrUtf16(data, toIPAddressUtf16, - &ipdef->ranges[0].end) < 0) { + &addr.end) < 0) { errorOccurred =3D true; } =20 diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index a8355272b9..83b89dd361 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -18,7 +18,8 @@ static int testCompareXMLToConfFiles(const char *inxml, const char *outconf, dnsmasqC= apsPtr caps) { - char *actual =3D NULL; + char *confactual =3D NULL; + char *hostsfileactual =3D NULL; int ret =3D -1; virNetworkDefPtr def =3D NULL; virNetworkObjPtr obj =3D NULL; @@ -43,28 +44,30 @@ testCompareXMLToConfFiles(const char *inxml, const char= *outconf, dnsmasqCapsPtr if (dctx =3D=3D NULL) goto fail; =20 - if (networkDnsmasqConfContents(obj, pidfile, &actual, dctx, caps) < 0) + if (networkDnsmasqConfContents(obj, pidfile, &confactual, + &hostsfileactual, dctx, caps) < 0) goto fail; =20 /* Any changes to this function ^^ should be reflected here too. */ #ifndef __linux__ char * tmp; =20 - if (!(tmp =3D virStringReplace(actual, + if (!(tmp =3D virStringReplace(confactual, "except-interface=3Dlo0\n", "except-interface=3Dlo\n"))) goto fail; - VIR_FREE(actual); + VIR_FREE(confactual); actual =3D g_steal_pointer(&tmp); #endif =20 - if (virTestCompareToFile(actual, outconf) < 0) + if (virTestCompareToFile(confactual, outconf) < 0) goto fail; =20 ret =3D 0; =20 fail: - VIR_FREE(actual); + VIR_FREE(confactual); + VIR_FREE(hostsfileactual); VIR_FREE(pidfile); virCommandFree(cmd); virObjectUnref(xmlopt); --=20 2.25.3 From nobody Sun Apr 28 19:35:38 2024 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=1587586005; cv=none; d=zohomail.com; s=zohoarc; b=JksgxkG7XrXpZdIGFxss9cG1o4H2CyhB84IWa1DQjODD/4SkZ702FjSEJCYPEfwhMBJT503cxRD61XJ7RBOjfs+9RfYPFw/oAdsCsOBbPxkv4CjAy9Vub3t/3VsgGDnhkMz8exSkgTqb+ZybTJA3b+xEBLp4P52NEn2j7Kvd09g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587586005; 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=enil3YosMv1JQHEY5AgOovOsI8dmKnAH321Kf5PxfAY=; b=BW6XuqyO+aFJbL0JY14/RIh9MxTmhbJX3VDAY19LfzQmz2E4R4stPlYAdfXGwCA7JXGf7BNMbL0rVQTZurtC8iXstWU2R0wnl87yEI/eq15AWWhlSjQCeP2FMX9iTws5hwJDwOc/EMotwdBRh4daeSNLgwQNWh87szBCsWlXOhw= 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 1587586005017577.9108397388828; Wed, 22 Apr 2020 13:06:45 -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-168-T9ccyAPcNuGBb8C701n9Og-1; Wed, 22 Apr 2020 16:06:38 -0400 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 2017280069F; Wed, 22 Apr 2020 20:06:33 +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 E534760E1C; Wed, 22 Apr 2020 20:06:32 +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 9C258941C7; Wed, 22 Apr 2020 20:06:32 +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 03MK6SmQ004583 for ; Wed, 22 Apr 2020 16:06:28 -0400 Received: by smtp.corp.redhat.com (Postfix) id 351FA951AE; Wed, 22 Apr 2020 20:06:28 +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 30D51951AB for ; Wed, 22 Apr 2020 20:06:25 +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 55244185A78E for ; Wed, 22 Apr 2020 20:06:25 +0000 (UTC) Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-240-m3a64GE1P46T7jXC3PHqlQ-1; Wed, 22 Apr 2020 16:06:23 -0400 Received: by mail-qk1-f172.google.com with SMTP id s63so3871387qke.4 for ; Wed, 22 Apr 2020 13:06:23 -0700 (PDT) Received: from localhost.localdomain ([191.254.8.233]) by smtp.gmail.com with ESMTPSA id x34sm211249qta.43.2020.04.22.13.06.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 13:06:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1587586001; 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=enil3YosMv1JQHEY5AgOovOsI8dmKnAH321Kf5PxfAY=; b=SbqrFUwSv+gAVDYFwqXWEBH814HQPjNe3ISY/6eknYXvZjqSSPHHAJm1KR1e3IvZW5XJiX 3DeiEZ7JhliEoBflgcvu94oVeSbmtv8czKwqB36IwFzcg1XV3W0/DbtY6U0D2GstxxXIDx aOltljosHMxXVLT2fqDy2gdZfKnRSk0= X-MC-Unique: T9ccyAPcNuGBb8C701n9Og-1 X-MC-Unique: m3a64GE1P46T7jXC3PHqlQ-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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gpB6zrRp9ZC0PZW/c0x1xKU96z2b7cf7rLAoPTgraMw=; b=KygZyeoF8fBTMiQRWzuC6D80/9aDKulhzpRNh+Gj1ysOWz9dYQJCBBcTsNTIcYHsPy PvZirkKJ5LpCAU1uoCSgcHdizvCHTOc6uwvPxw0y6jZTcK78lox0AOFnBIOHvdjiJvmn jVmo3AtVQVN8EuTBOK6aB4ph6M097Oess1mxDovjz7fncUS2qW5y3XxWvyXwUg8+1MUL M7gbjsI7ku/tqZ7OzLONHSbxprgX/RRaXeqwPn+ionwYcg1DRv7NPDUls9MDvTQ9GKCq Vfbi4Q+zlYNbvYIOopguH7BTihb3yQUxzJFObkaVAoKFPDRwgj9ELXRDTcKw730aHSlg x1Cw== X-Gm-Message-State: AGi0Pua7o/BQRpKOl5cDzZoLkVnDdh5kk+uK1tA1BZDk/k+dHpQCGyg2 gVOIA7evvX5pW72bEHlnwAECy8+o X-Google-Smtp-Source: APiQypLZ8lPy+IK+JKtBbDlTSEDZlozIm99PItXTdiZOPP0Kq7zVTgujV4DuT2/BPVNqxpuC1TNK8w== X-Received: by 2002:a37:9e4a:: with SMTP id h71mr27525294qke.341.1587585981308; Wed, 22 Apr 2020 13:06:21 -0700 (PDT) From: Julio Faracco To: libvir-list@redhat.com Subject: [PATCH v3 2/2] tests: Add tests for to cover dnsmasq settings Date: Wed, 22 Apr 2020 17:05:58 -0300 Message-Id: <20200422200558.868392-3-jcfaracco@gmail.com> In-Reply-To: <20200422200558.868392-1-jcfaracco@gmail.com> References: <20200422200558.868392-1-jcfaracco@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 03MK6SmQ004583 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.79 on 10.5.11.12 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" New tests are required to cover some new XML syntax entry for option. This includes schema testing and other features like unit attribute and lease value. This commit includes hostsfile checks adding new files for each test case that is manipulating tag. Signed-off-by: Julio Faracco Reviewed-by: Michal Privoznik --- .../dhcp6-nat-network.hostsfile | 7 +++++ .../dhcp6-network.hostsfile | 5 ++++ .../dhcp6host-routed-network.hostsfile | 7 +++++ .../networkxml2confdata/leasetime-hours.conf | 16 +++++++++++ .../leasetime-hours.hostsfile | 2 ++ tests/networkxml2confdata/leasetime-hours.xml | 19 +++++++++++++ .../leasetime-infinite.conf | 16 +++++++++++ .../leasetime-infinite.hostsfile | 2 ++ .../leasetime-infinite.xml | 19 +++++++++++++ .../leasetime-minutes.conf | 16 +++++++++++ .../leasetime-minutes.hostsfile | 2 ++ .../networkxml2confdata/leasetime-minutes.xml | 19 +++++++++++++ .../leasetime-seconds.conf | 16 +++++++++++ .../leasetime-seconds.hostsfile | 2 ++ .../networkxml2confdata/leasetime-seconds.xml | 19 +++++++++++++ ...t-network-dns-srv-record-minimal.hostsfile | 2 ++ .../nat-network-dns-srv-record.hostsfile | 2 ++ .../nat-network-dns-txt-record.hostsfile | 2 ++ .../nat-network-mtu.hostsfile | 2 ++ .../nat-network-name-with-quotes.hostsfile | 2 ++ .../networkxml2confdata/nat-network.hostsfile | 2 ++ .../ptr-domains-auto.hostsfile | 2 ++ tests/networkxml2conftest.c | 27 +++++++++++++++++-- tests/networkxml2xmlin/leasetime-hours.xml | 19 +++++++++++++ tests/networkxml2xmlin/leasetime-infinite.xml | 19 +++++++++++++ tests/networkxml2xmlin/leasetime-minutes.xml | 19 +++++++++++++ tests/networkxml2xmlin/leasetime-seconds.xml | 19 +++++++++++++ tests/networkxml2xmlout/leasetime-hours.xml | 21 +++++++++++++++ .../networkxml2xmlout/leasetime-infinite.xml | 21 +++++++++++++++ tests/networkxml2xmlout/leasetime-minutes.xml | 21 +++++++++++++++ tests/networkxml2xmlout/leasetime-seconds.xml | 21 +++++++++++++++ tests/networkxml2xmltest.c | 4 +++ 32 files changed, 370 insertions(+), 2 deletions(-) create mode 100644 tests/networkxml2confdata/dhcp6-nat-network.hostsfile create mode 100644 tests/networkxml2confdata/dhcp6-network.hostsfile create mode 100644 tests/networkxml2confdata/dhcp6host-routed-network.host= sfile create mode 100644 tests/networkxml2confdata/leasetime-hours.conf create mode 100644 tests/networkxml2confdata/leasetime-hours.hostsfile create mode 100644 tests/networkxml2confdata/leasetime-hours.xml create mode 100644 tests/networkxml2confdata/leasetime-infinite.conf create mode 100644 tests/networkxml2confdata/leasetime-infinite.hostsfile create mode 100644 tests/networkxml2confdata/leasetime-infinite.xml create mode 100644 tests/networkxml2confdata/leasetime-minutes.conf create mode 100644 tests/networkxml2confdata/leasetime-minutes.hostsfile create mode 100644 tests/networkxml2confdata/leasetime-minutes.xml create mode 100644 tests/networkxml2confdata/leasetime-seconds.conf create mode 100644 tests/networkxml2confdata/leasetime-seconds.hostsfile create mode 100644 tests/networkxml2confdata/leasetime-seconds.xml create mode 100644 tests/networkxml2confdata/nat-network-dns-srv-record-mi= nimal.hostsfile create mode 100644 tests/networkxml2confdata/nat-network-dns-srv-record.ho= stsfile create mode 100644 tests/networkxml2confdata/nat-network-dns-txt-record.ho= stsfile create mode 100644 tests/networkxml2confdata/nat-network-mtu.hostsfile create mode 100644 tests/networkxml2confdata/nat-network-name-with-quotes.= hostsfile create mode 100644 tests/networkxml2confdata/nat-network.hostsfile create mode 100644 tests/networkxml2confdata/ptr-domains-auto.hostsfile create mode 100644 tests/networkxml2xmlin/leasetime-hours.xml create mode 100644 tests/networkxml2xmlin/leasetime-infinite.xml create mode 100644 tests/networkxml2xmlin/leasetime-minutes.xml create mode 100644 tests/networkxml2xmlin/leasetime-seconds.xml create mode 100644 tests/networkxml2xmlout/leasetime-hours.xml create mode 100644 tests/networkxml2xmlout/leasetime-infinite.xml create mode 100644 tests/networkxml2xmlout/leasetime-minutes.xml create mode 100644 tests/networkxml2xmlout/leasetime-seconds.xml diff --git a/tests/networkxml2confdata/dhcp6-nat-network.hostsfile b/tests/= networkxml2confdata/dhcp6-nat-network.hostsfile new file mode 100644 index 0000000000..de659b98c5 --- /dev/null +++ b/tests/networkxml2confdata/dhcp6-nat-network.hostsfile @@ -0,0 +1,7 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com +id:0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63,[2001:db8:ac10:fd01= ::1:20] +paul,[2001:db8:ac10:fd01::1:21] +id:0:3:0:1:0:16:3e:11:22:33,peter.xyz,[2001:db8:ac10:fd01::1:22] +id:0:3:0:1:0:16:3e:44:55:33,[2001:db8:ac10:fd01::1:23] +id:0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66,badbob,[2001:db8:ac10:fd01::1:24] diff --git a/tests/networkxml2confdata/dhcp6-network.hostsfile b/tests/netw= orkxml2confdata/dhcp6-network.hostsfile new file mode 100644 index 0000000000..9dfb172ce7 --- /dev/null +++ b/tests/networkxml2confdata/dhcp6-network.hostsfile @@ -0,0 +1,5 @@ +id:0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63,[2001:db8:ac10:fd01= ::1:20] +paul,[2001:db8:ac10:fd01::1:21] +id:0:3:0:1:0:16:3e:11:22:33,peter.xyz,[2001:db8:ac10:fd01::1:22] +id:0:3:0:1:0:16:3e:44:55:33,[2001:db8:ac10:fd01::1:23] +id:0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66,badbob,[2001:db8:ac10:fd01::1:24] diff --git a/tests/networkxml2confdata/dhcp6host-routed-network.hostsfile b= /tests/networkxml2confdata/dhcp6host-routed-network.hostsfile new file mode 100644 index 0000000000..de659b98c5 --- /dev/null +++ b/tests/networkxml2confdata/dhcp6host-routed-network.hostsfile @@ -0,0 +1,7 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com +id:0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63,[2001:db8:ac10:fd01= ::1:20] +paul,[2001:db8:ac10:fd01::1:21] +id:0:3:0:1:0:16:3e:11:22:33,peter.xyz,[2001:db8:ac10:fd01::1:22] +id:0:3:0:1:0:16:3e:44:55:33,[2001:db8:ac10:fd01::1:23] +id:0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66,badbob,[2001:db8:ac10:fd01::1:24] diff --git a/tests/networkxml2confdata/leasetime-hours.conf b/tests/network= xml2confdata/leasetime-hours.conf new file mode 100644 index 0000000000..1599d4633e --- /dev/null +++ b/tests/networkxml2confdata/leasetime-hours.conf @@ -0,0 +1,16 @@ +##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 default +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0,1h +dhcp-no-override +dhcp-authoritative +dhcp-lease-max=3D253 +dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/default.hostsfile +addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts diff --git a/tests/networkxml2confdata/leasetime-hours.hostsfile b/tests/ne= tworkxml2confdata/leasetime-hours.hostsfile new file mode 100644 index 0000000000..fb6bca4c41 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-hours.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com,2h +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com,3h diff --git a/tests/networkxml2confdata/leasetime-hours.xml b/tests/networkx= ml2confdata/leasetime-hours.xml new file mode 100644 index 0000000000..5427767a98 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-hours.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2confdata/leasetime-infinite.conf b/tests/netw= orkxml2confdata/leasetime-infinite.conf new file mode 100644 index 0000000000..883ced6ade --- /dev/null +++ b/tests/networkxml2confdata/leasetime-infinite.conf @@ -0,0 +1,16 @@ +##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 default +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0,infinite +dhcp-no-override +dhcp-authoritative +dhcp-lease-max=3D253 +dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/default.hostsfile +addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts diff --git a/tests/networkxml2confdata/leasetime-infinite.hostsfile b/tests= /networkxml2confdata/leasetime-infinite.hostsfile new file mode 100644 index 0000000000..e92bdc6142 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-infinite.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com,infinite +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com,infinite diff --git a/tests/networkxml2confdata/leasetime-infinite.xml b/tests/netwo= rkxml2confdata/leasetime-infinite.xml new file mode 100644 index 0000000000..3528ddc19d --- /dev/null +++ b/tests/networkxml2confdata/leasetime-infinite.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2confdata/leasetime-minutes.conf b/tests/netwo= rkxml2confdata/leasetime-minutes.conf new file mode 100644 index 0000000000..c093501a35 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-minutes.conf @@ -0,0 +1,16 @@ +##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 default +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0,10m +dhcp-no-override +dhcp-authoritative +dhcp-lease-max=3D253 +dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/default.hostsfile +addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts diff --git a/tests/networkxml2confdata/leasetime-minutes.hostsfile b/tests/= networkxml2confdata/leasetime-minutes.hostsfile new file mode 100644 index 0000000000..787d82f08e --- /dev/null +++ b/tests/networkxml2confdata/leasetime-minutes.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com,20m +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com,30m diff --git a/tests/networkxml2confdata/leasetime-minutes.xml b/tests/networ= kxml2confdata/leasetime-minutes.xml new file mode 100644 index 0000000000..0de8e2b94b --- /dev/null +++ b/tests/networkxml2confdata/leasetime-minutes.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2confdata/leasetime-seconds.conf b/tests/netwo= rkxml2confdata/leasetime-seconds.conf new file mode 100644 index 0000000000..8b2a81c308 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-seconds.conf @@ -0,0 +1,16 @@ +##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 default +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0,200s +dhcp-no-override +dhcp-authoritative +dhcp-lease-max=3D253 +dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/default.hostsfile +addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts diff --git a/tests/networkxml2confdata/leasetime-seconds.hostsfile b/tests/= networkxml2confdata/leasetime-seconds.hostsfile new file mode 100644 index 0000000000..ce77f2dcb9 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-seconds.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com,300s +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com,400s diff --git a/tests/networkxml2confdata/leasetime-seconds.xml b/tests/networ= kxml2confdata/leasetime-seconds.xml new file mode 100644 index 0000000000..c359df4292 --- /dev/null +++ b/tests/networkxml2confdata/leasetime-seconds.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.h= ostsfile b/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.hos= tsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/nat-network-dns-srv-record.hostsfile= b/tests/networkxml2confdata/nat-network-dns-srv-record.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-dns-srv-record.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/nat-network-dns-txt-record.hostsfile= b/tests/networkxml2confdata/nat-network-dns-txt-record.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-dns-txt-record.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/nat-network-mtu.hostsfile b/tests/ne= tworkxml2confdata/nat-network-mtu.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-mtu.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/nat-network-name-with-quotes.hostsfi= le b/tests/networkxml2confdata/nat-network-name-with-quotes.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-name-with-quotes.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/nat-network.hostsfile b/tests/networ= kxml2confdata/nat-network.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/nat-network.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2confdata/ptr-domains-auto.hostsfile b/tests/n= etworkxml2confdata/ptr-domains-auto.hostsfile new file mode 100644 index 0000000000..deb3f00ac1 --- /dev/null +++ b/tests/networkxml2confdata/ptr-domains-auto.hostsfile @@ -0,0 +1,2 @@ +00:16:3e:77:e2:ed,192.168.122.10,a.example.com +00:16:3e:3e:a9:1a,192.168.122.11,b.example.com diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index 83b89dd361..6696a41631 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -16,7 +16,8 @@ #define VIR_FROM_THIS VIR_FROM_NONE =20 static int -testCompareXMLToConfFiles(const char *inxml, const char *outconf, dnsmasqC= apsPtr caps) +testCompareXMLToConfFiles(const char *inxml, const char *outconf, + char *outhostsfile, dnsmasqCapsPtr caps) { char *confactual =3D NULL; char *hostsfileactual =3D NULL; @@ -63,6 +64,20 @@ testCompareXMLToConfFiles(const char *inxml, const char = *outconf, dnsmasqCapsPtr if (virTestCompareToFile(confactual, outconf) < 0) goto fail; =20 + if (virFileExists(outhostsfile)) { + if (!hostsfileactual) { + VIR_TEST_DEBUG("%s: hostsfile exists but the configuration did= " + "not specify any host", outhostsfile); + goto fail; + } else if (virTestCompareToFile(hostsfileactual, outhostsfile) < 0= ) { + goto fail; + } + } else if (hostsfileactual) { + VIR_TEST_DEBUG("%s: file does not exist but actual data was expect= ed", + outhostsfile); + goto fail; + } + ret =3D 0; =20 fail: @@ -88,14 +103,18 @@ testCompareXMLToConfHelper(const void *data) const testInfo *info =3D data; char *inxml =3D NULL; char *outconf =3D NULL; + char *outhostsfile =3D NULL; =20 inxml =3D g_strdup_printf("%s/networkxml2confdata/%s.xml", abs_srcdir,= info->name); outconf =3D g_strdup_printf("%s/networkxml2confdata/%s.conf", abs_srcd= ir, info->name); + outhostsfile =3D g_strdup_printf("%s/networkxml2confdata/%s.hostsfile"= , abs_srcdir, info->name); =20 - result =3D testCompareXMLToConfFiles(inxml, outconf, info->caps); + result =3D testCompareXMLToConfFiles(inxml, outconf, outhostsfile, + info->caps); =20 VIR_FREE(inxml); VIR_FREE(outconf); + VIR_FREE(outhostsfile); =20 return result; } @@ -145,6 +164,10 @@ mymain(void) DO_TEST("dhcp6host-routed-network", dhcpv6); DO_TEST("ptr-domains-auto", dhcpv6); DO_TEST("dnsmasq-options", dhcpv6); + DO_TEST("leasetime-seconds", full); + DO_TEST("leasetime-minutes", full); + DO_TEST("leasetime-hours", full); + DO_TEST("leasetime-infinite", full); =20 virObjectUnref(dhcpv6); virObjectUnref(full); diff --git a/tests/networkxml2xmlin/leasetime-hours.xml b/tests/networkxml2= xmlin/leasetime-hours.xml new file mode 100644 index 0000000000..5427767a98 --- /dev/null +++ b/tests/networkxml2xmlin/leasetime-hours.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlin/leasetime-infinite.xml b/tests/networkx= ml2xmlin/leasetime-infinite.xml new file mode 100644 index 0000000000..3528ddc19d --- /dev/null +++ b/tests/networkxml2xmlin/leasetime-infinite.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlin/leasetime-minutes.xml b/tests/networkxm= l2xmlin/leasetime-minutes.xml new file mode 100644 index 0000000000..6ed3814042 --- /dev/null +++ b/tests/networkxml2xmlin/leasetime-minutes.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlin/leasetime-seconds.xml b/tests/networkxm= l2xmlin/leasetime-seconds.xml new file mode 100644 index 0000000000..c359df4292 --- /dev/null +++ b/tests/networkxml2xmlin/leasetime-seconds.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/leasetime-hours.xml b/tests/networkxml= 2xmlout/leasetime-hours.xml new file mode 100644 index 0000000000..5c8bec8328 --- /dev/null +++ b/tests/networkxml2xmlout/leasetime-hours.xml @@ -0,0 +1,21 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/leasetime-infinite.xml b/tests/network= xml2xmlout/leasetime-infinite.xml new file mode 100644 index 0000000000..a5a9e6c5ed --- /dev/null +++ b/tests/networkxml2xmlout/leasetime-infinite.xml @@ -0,0 +1,21 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/leasetime-minutes.xml b/tests/networkx= ml2xmlout/leasetime-minutes.xml new file mode 100644 index 0000000000..b5c698076f --- /dev/null +++ b/tests/networkxml2xmlout/leasetime-minutes.xml @@ -0,0 +1,21 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/leasetime-seconds.xml b/tests/networkx= ml2xmlout/leasetime-seconds.xml new file mode 100644 index 0000000000..9d8efc2608 --- /dev/null +++ b/tests/networkxml2xmlout/leasetime-seconds.xml @@ -0,0 +1,21 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index ec679e72ee..700744785a 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -160,6 +160,10 @@ mymain(void) DO_TEST("metadata"); DO_TEST("set-mtu"); DO_TEST("dnsmasq-options"); + DO_TEST("leasetime-seconds"); + DO_TEST("leasetime-minutes"); + DO_TEST("leasetime-hours"); + DO_TEST("leasetime-infinite"); DO_TEST("isolated-ports"); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; --=20 2.25.3