[libvirt] [PATCH 1/6] v6-6: put dnsmasq parameters into a file
Guido Günther
agx at sigxcpu.org
Fri Nov 9 12:36:14 UTC 2012
On Thu, Nov 08, 2012 at 04:13:41PM -0500, Gene Czarcinski wrote:
> This patch changes how parameters are passed to dnsmasq. Instead of
> being on the command line, the parameters are put into a file (one
> parameter per line) and a commandline --conf-file= specifies the
> location of the file. The file is located in the same directory as
> the leases file.
It'd be great if the commit message would state _why_ this is useful.
Cheers,
-- Guido
> ---
> src/network/bridge_driver.c | 153 ++++++++++++++-------
> src/network/bridge_driver.h | 7 +-
> tests/networkxml2argvdata/isolated-network.argv | 24 ++--
> .../networkxml2argvdata/nat-network-dns-hosts.argv | 14 +-
> .../nat-network-dns-srv-record-minimal.argv | 35 ++---
> .../nat-network-dns-srv-record.argv | 35 ++---
> .../nat-network-dns-txt-record.argv | 29 ++--
> tests/networkxml2argvdata/nat-network.argv | 27 ++--
> tests/networkxml2argvdata/netboot-network.argv | 28 ++--
> .../networkxml2argvdata/netboot-proxy-network.argv | 25 ++--
> tests/networkxml2argvdata/routed-network.argv | 12 +-
> tests/networkxml2argvtest.c | 43 +-----
> 12 files changed, 245 insertions(+), 187 deletions(-)
>
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index c153d36..508de3a 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -136,6 +136,16 @@ networkDnsmasqLeaseFileNameFunc networkDnsmasqLeaseFileName =
> networkDnsmasqLeaseFileNameDefault;
>
> static char *
> +networkDnsmasqConfigFileName(const char *netname)
> +{
> + char *conffile;
> +
> + ignore_value(virAsprintf(&conffile, DNSMASQ_STATE_DIR "/%s.conf",
> + netname));
> + return conffile;
> +}
> +
> +static char *
> networkRadvdPidfileBasename(const char *netname)
> {
> /* this is simple but we want to be sure it's consistently done */
> @@ -163,6 +173,7 @@ networkRemoveInactive(struct network_driver *driver,
> char *leasefile = NULL;
> char *radvdconfigfile = NULL;
> char *radvdpidbase = NULL;
> + char *configfile = NULL;
> dnsmasqContext *dctx = NULL;
> virNetworkDefPtr def = virNetworkObjGetPersistentDef(net);
>
> @@ -178,12 +189,16 @@ networkRemoveInactive(struct network_driver *driver,
> if (!(radvdconfigfile = networkRadvdConfigFileName(def->name)))
> goto no_memory;
>
> - if (!(radvdpidbase = networkRadvdPidfileBasename(def->name)))
> + if (!(radvdconfigfile = networkRadvdConfigFileName(def->name)))
> + goto no_memory;
> +
> + if (!(configfile = networkDnsmasqConfigFileName(def->name)))
> goto no_memory;
>
> /* dnsmasq */
> dnsmasqDelete(dctx);
> unlink(leasefile);
> + unlink(configfile);
>
> /* radvd */
> unlink(radvdconfigfile);
> @@ -196,6 +211,7 @@ networkRemoveInactive(struct network_driver *driver,
>
> cleanup:
> VIR_FREE(leasefile);
> + VIR_FREE(configfile);
> VIR_FREE(radvdconfigfile);
> VIR_FREE(radvdpidbase);
> dnsmasqContextFree(dctx);
> @@ -610,14 +626,15 @@ networkBuildDnsmasqHostsfile(dnsmasqContext *dctx,
> return 0;
> }
>
> -
> + /* build the dnsmasq conf file contents */
> static int
> -networkBuildDnsmasqArgv(virNetworkObjPtr network,
> +networkDnsmasqConfContents(virNetworkObjPtr network,
> virNetworkIpDefPtr ipdef,
> const char *pidfile,
> - virCommandPtr cmd,
> + char **configstr,
> dnsmasqContext *dctx)
> {
> + virBuffer configbuf = VIR_BUFFER_INITIALIZER;;
> int r, ret = -1;
> int nbleases = 0;
> int ii;
> @@ -627,6 +644,8 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> char *recordPriority = NULL;
> virNetworkIpDefPtr tmpipdef;
>
> + *configstr = NULL;
> +
> /*
> * NB, be careful about syntax for dnsmasq options in long format.
> *
> @@ -646,28 +665,22 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> * very explicit on this.
> */
>
> - /*
> - * Needed to ensure dnsmasq uses same algorithm for processing
> - * multiple namedriver entries in /etc/resolv.conf as GLibC.
> - */
> - virCommandAddArgList(cmd, "--strict-order", "--bind-interfaces", NULL);
> -
> + /* create dnsmasq config file appropriate for this network */
> + virBufferAsprintf(&configbuf, "# dnsmasq conf file created by libvirt\n"
> + "strict-order\n"
> + "bind-interfaces\n"
> + "except-interface=lo\n"
> + "domain-needed\n"
> + "local=/%s/\n",
> + network->def->domain ? network->def->domain : "");
> if (network->def->domain)
> - virCommandAddArgPair(cmd, "--domain", network->def->domain);
> - /* need to specify local even if no domain specified */
> - virCommandAddArgFormat(cmd, "--local=/%s/",
> - network->def->domain ? network->def->domain : "");
> - virCommandAddArg(cmd, "--domain-needed");
> + virBufferAsprintf(&configbuf,
> + "domain=%s\n"
> + "expand-hosts\n",
> + network->def->domain);
>
> if (pidfile)
> - virCommandAddArgPair(cmd, "--pid-file", pidfile);
> -
> - /* *no* conf file */
> - virCommandAddArg(cmd, "--conf-file=");
> -
> - virCommandAddArgList(cmd,
> - "--except-interface", "lo",
> - NULL);
> + virBufferAsprintf(&configbuf, "pid-file=%s\n", pidfile);
>
> /* If this is an isolated network, set the default route option
> * (3) to be empty to avoid setting a default route that's
> @@ -677,16 +690,21 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> * to build a connection to the outside).
> */
> if (network->def->forwardType == VIR_NETWORK_FORWARD_NONE) {
> - virCommandAddArgList(cmd, "--dhcp-option=3",
> - "--no-resolv", NULL);
> + virBufferAsprintf(&configbuf, "dhcp-option=3\n"
> + "no-resolv\n");
> }
>
> + /*
> + * Needed to ensure dnsmasq uses same algorithm for processing
> + * multiple namedriver entries in /etc/resolv.conf as GLibC.
> + */
> +
> if (network->def->dns != NULL) {
> virNetworkDNSDefPtr dns = network->def->dns;
> int i;
>
> for (i = 0; i < dns->ntxtrecords; i++) {
> - virCommandAddArgFormat(cmd, "--txt-record=%s,%s",
> + virBufferAsprintf(&configbuf, "txt-record=%s,%s\n",
> dns->txtrecords[i].name,
> dns->txtrecords[i].value);
> }
> @@ -724,7 +742,7 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> goto cleanup;
> }
>
> - virCommandAddArgPair(cmd, "--srv-host", record);
> + virBufferAsprintf(&configbuf, "srv-host=%s\n", record);
> VIR_FREE(record);
> VIR_FREE(recordPort);
> VIR_FREE(recordWeight);
> @@ -743,11 +761,12 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> */
> for (ii = 0;
> (tmpipdef = virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, ii));
> - ii++) {
> + ii++)
> + {
> char *ipaddr = virSocketAddrFormat(&tmpipdef->address);
> if (!ipaddr)
> goto cleanup;
> - virCommandAddArgList(cmd, "--listen-address", ipaddr, NULL);
> + virBufferAsprintf(&configbuf, "listen-address=%s\n", ipaddr);
> VIR_FREE(ipaddr);
> }
>
> @@ -761,8 +780,8 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> VIR_FREE(saddr);
> goto cleanup;
> }
> - virCommandAddArg(cmd, "--dhcp-range");
> - virCommandAddArgFormat(cmd, "%s,%s", saddr, eaddr);
> + virBufferAsprintf(&configbuf, "dhcp-range=%s,%s\n",
> + saddr, eaddr);
> VIR_FREE(saddr);
> VIR_FREE(eaddr);
> nbleases += virSocketAddrGetRange(&ipdef->ranges[r].start,
> @@ -778,8 +797,7 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> char *bridgeaddr = virSocketAddrFormat(&ipdef->address);
> if (!bridgeaddr)
> goto cleanup;
> - virCommandAddArg(cmd, "--dhcp-range");
> - virCommandAddArgFormat(cmd, "%s,static", bridgeaddr);
> + virBufferAsprintf(&configbuf, "dhcp-range=%s,static\n", bridgeaddr);
> VIR_FREE(bridgeaddr);
> }
>
> @@ -787,17 +805,13 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> char *leasefile = networkDnsmasqLeaseFileName(network->def->name);
> if (!leasefile)
> goto cleanup;
> - virCommandAddArgFormat(cmd, "--dhcp-leasefile=%s", leasefile);
> + virBufferAsprintf(&configbuf, "dhcp-leasefile=%s\n", leasefile);
> VIR_FREE(leasefile);
> - virCommandAddArgFormat(cmd, "--dhcp-lease-max=%d", nbleases);
> + virBufferAsprintf(&configbuf, "dhcp-lease-max=%d\n", nbleases);
> }
>
> if (ipdef->nranges || ipdef->nhosts)
> - virCommandAddArg(cmd, "--dhcp-no-override");
> -
> - /* add domain to any non-qualified hostnames in /etc/hosts or addn-hosts */
> - if (network->def->domain)
> - virCommandAddArg(cmd, "--expand-hosts");
> + virBufferAsprintf(&configbuf, "dhcp-no-override\n");
>
> if (networkBuildDnsmasqHostsfile(dctx, ipdef, network->def->dns) < 0)
> goto cleanup;
> @@ -807,38 +821,42 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
> * file to allow for runtime additions.
> */
> if (ipdef->nranges || ipdef->nhosts)
> - virCommandAddArgPair(cmd, "--dhcp-hostsfile",
> + virBufferAsprintf(&configbuf, "dhcp-hostsfile=%s\n",
> dctx->hostsfile->path);
>
> /* Likewise, always create this file and put it on the commandline, to allow for
> * for runtime additions.
> */
> - virCommandAddArgPair(cmd, "--addn-hosts",
> + virBufferAsprintf(&configbuf, "addn-hosts=%s\n",
> dctx->addnhostsfile->path);
>
> if (ipdef->tftproot) {
> - virCommandAddArgList(cmd, "--enable-tftp",
> - "--tftp-root", ipdef->tftproot,
> - NULL);
> + virBufferAsprintf(&configbuf, "enable-tftp\n");
> + virBufferAsprintf(&configbuf, "tftp-root=%s\n", ipdef->tftproot);
> }
> if (ipdef->bootfile) {
> - virCommandAddArg(cmd, "--dhcp-boot");
> if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) {
> char *bootserver = virSocketAddrFormat(&ipdef->bootserver);
>
> if (!bootserver)
> goto cleanup;
> - virCommandAddArgFormat(cmd, "%s%s%s",
> + virBufferAsprintf(&configbuf, "dhcp-boot=%s%s%s\n",
> ipdef->bootfile, ",,", bootserver);
> VIR_FREE(bootserver);
> } else {
> - virCommandAddArg(cmd, ipdef->bootfile);
> + virBufferAsprintf(&configbuf, "dhcp-boot=%s\n", ipdef->bootfile);
> }
> }
> }
> + if (!(*configstr = virBufferContentAndReset(&configbuf))) {
> + virReportOOMError();
> + goto cleanup;
> + }
>
> ret = 0;
> +
> cleanup:
> + virBufferFreeAndReset(&configbuf);
> VIR_FREE(record);
> VIR_FREE(recordPort);
> VIR_FREE(recordWeight);
> @@ -846,13 +864,17 @@ cleanup:
> return ret;
> }
>
> + /* build the dnsmasq command line */
> int
> networkBuildDhcpDaemonCommandLine(virNetworkObjPtr network, virCommandPtr *cmdout,
> - char *pidfile, dnsmasqContext *dctx)
> + char *pidfile, dnsmasqContext *dctx,
> + int testOnly, char **testConfigStr)
> {
> virCommandPtr cmd = NULL;
> int ret = -1, ii;
> virNetworkIpDefPtr ipdef;
> + char *configfile = NULL;
> + char *configstr = NULL;
>
> network->dnsmasqPid = -1;
>
> @@ -876,15 +898,40 @@ networkBuildDhcpDaemonCommandLine(virNetworkObjPtr network, virCommandPtr *cmdou
> if (!virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, 0))
> return 0;
>
> - cmd = virCommandNew(DNSMASQ);
> - if (networkBuildDnsmasqArgv(network, ipdef, pidfile, cmd, dctx) < 0) {
> + if (networkDnsmasqConfContents(network, ipdef, pidfile, &configstr, dctx) < 0)
> goto cleanup;
> + if (!configstr)
> + goto cleanup;
> +
> + if (testOnly) {
> + *testConfigStr = configstr;
> + return 0;
> }
>
> + /* construct the filename */
> + if (!(configfile = networkDnsmasqConfigFileName(network->def->name))) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + /* Write the file */
> + if (virFileWriteStr(configfile, configstr, 0600) < 0) {
> + virReportSystemError(errno,
> + _("couldn't write dnsmasq config file '%s'"),
> + configfile);
> + goto cleanup;
> + }
> + VIR_INFO("dnsmasq conf file %s written", configfile);
> +
> + cmd = virCommandNew(DNSMASQ);
> + virCommandAddArgFormat(cmd, "--conf-file=%s", configfile);
> +
> if (cmdout)
> *cmdout = cmd;
> ret = 0;
> cleanup:
> + VIR_FREE(configstr);
> + VIR_FREE(configfile);
> if (ret < 0)
> virCommandFree(cmd);
> return ret;
> @@ -895,6 +942,7 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
> {
> virCommandPtr cmd = NULL;
> char *pidfile = NULL;
> + char *testconfigstr = NULL;
> int ret = -1;
> dnsmasqContext *dctx = NULL;
> virNetworkIpDefPtr ipdef;
> @@ -935,7 +983,8 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
> if (dctx == NULL)
> goto cleanup;
>
> - ret = networkBuildDhcpDaemonCommandLine(network, &cmd, pidfile, dctx);
> + ret = networkBuildDhcpDaemonCommandLine(network, &cmd, pidfile, dctx,
> + 0, &testconfigstr);
> if (ret < 0)
> goto cleanup;
>
> diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h
> index 0fae275..b6dd6c9 100644
> --- a/src/network/bridge_driver.h
> +++ b/src/network/bridge_driver.h
> @@ -48,15 +48,16 @@ int networkGetNetworkAddress(const char *netname, char **netaddr)
>
> int networkBuildDhcpDaemonCommandLine(virNetworkObjPtr network,
> virCommandPtr *cmdout, char *pidfile,
> - dnsmasqContext *dctx)
> - ;
> + dnsmasqContext *dctx,
> + int testOnly, char **testConfigStr);
> # else
> /* Define no-op replacements that don't drag in any link dependencies. */
> # define networkAllocateActualDevice(iface) 0
> # define networkNotifyActualDevice(iface) 0
> # define networkReleaseActualDevice(iface) 0
> # define networkGetNetworkAddress(netname, netaddr) (-2)
> -# define networkBuildDhcpDaemonCommandLine(network, cmdout, pidfile, dctx) 0
> +# define networkBuildDhcpDaemonCommandLine(network, cmdout, pidfile, \
> + dctx, testOnly, testConfigStr) 0
> # endif
>
> typedef char *(*networkDnsmasqLeaseFileNameFunc)(const char *netname);
> diff --git a/tests/networkxml2argvdata/isolated-network.argv b/tests/networkxml2argvdata/isolated-network.argv
> index 13e77b2..042158b 100644
> --- a/tests/networkxml2argvdata/isolated-network.argv
> +++ b/tests/networkxml2argvdata/isolated-network.argv
> @@ -1,9 +1,15 @@
> - at DNSMASQ@ --strict-order --bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo --dhcp-option=3 --no-resolv \
> ---listen-address 192.168.152.1 \
> ---dhcp-range 192.168.152.2,192.168.152.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/private.leases --dhcp-lease-max=253 \
> ---dhcp-no-override \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/private.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/private.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +dhcp-option=3
> +no-resolv
> +listen-address=192.168.152.1
> +dhcp-range=192.168.152.2,192.168.152.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/private.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/private.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/private.addnhosts
> diff --git a/tests/networkxml2argvdata/nat-network-dns-hosts.argv b/tests/networkxml2argvdata/nat-network-dns-hosts.argv
> index 03a0676..91eb682 100644
> --- a/tests/networkxml2argvdata/nat-network-dns-hosts.argv
> +++ b/tests/networkxml2argvdata/nat-network-dns-hosts.argv
> @@ -1,4 +1,10 @@
> - at DNSMASQ@ --strict-order --bind-interfaces --domain=example.com \
> ---local=/example.com/ --domain-needed \
> ---conf-file= --except-interface lo --listen-address 192.168.122.1 \
> ---expand-hosts --addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=/example.com/
> +domain=example.com
> +expand-hosts
> +listen-address=192.168.122.1
> +addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
> diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv
> index 210a60c..d92497b 100644
> --- a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv
> +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv
> @@ -1,17 +1,18 @@
> - at DNSMASQ@ \
> ---strict-order \
> ---bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo \
> ---srv-host=name.tcp.,,,, \
> ---listen-address 192.168.122.1 \
> ---listen-address 192.168.123.1 \
> ---listen-address 2001:db8:ac10:fe01::1 \
> ---listen-address 2001:db8:ac10:fd01::1 \
> ---listen-address 10.24.10.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases \
> ---dhcp-lease-max=253 \
> ---dhcp-no-override \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +srv-host=name.tcp.,,,,
> +listen-address=192.168.122.1
> +listen-address=192.168.123.1
> +listen-address=2001:db8:ac10:fe01::1
> +listen-address=2001:db8:ac10:fd01::1
> +listen-address=10.24.10.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
> diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv
> index 833d3cd..d8846c2 100644
> --- a/tests/networkxml2argvdata/nat-network-dns-srv-record.argv
> +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv
> @@ -1,17 +1,18 @@
> - at DNSMASQ@ \
> ---strict-order \
> ---bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo \
> ---srv-host=name.tcp.test-domain-name,.,1024,10,10 \
> ---listen-address 192.168.122.1 \
> ---listen-address 192.168.123.1 \
> ---listen-address 2001:db8:ac10:fe01::1 \
> ---listen-address 2001:db8:ac10:fd01::1 \
> ---listen-address 10.24.10.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases \
> ---dhcp-lease-max=253 \
> ---dhcp-no-override \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +srv-host=name.tcp.test-domain-name,.,1024,10,10
> +listen-address=192.168.122.1
> +listen-address=192.168.123.1
> +listen-address=2001:db8:ac10:fe01::1
> +listen-address=2001:db8:ac10:fd01::1
> +listen-address=10.24.10.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
> diff --git a/tests/networkxml2argvdata/nat-network-dns-txt-record.argv b/tests/networkxml2argvdata/nat-network-dns-txt-record.argv
> index 3481507..bf00513 100644
> --- a/tests/networkxml2argvdata/nat-network-dns-txt-record.argv
> +++ b/tests/networkxml2argvdata/nat-network-dns-txt-record.argv
> @@ -1,11 +1,18 @@
> - at DNSMASQ@ --strict-order --bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo '--txt-record=example,example value' \
> ---listen-address 192.168.122.1 --listen-address 192.168.123.1 \
> ---listen-address 2001:db8:ac10:fe01::1 \
> ---listen-address 2001:db8:ac10:fd01::1 --listen-address 10.24.10.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases \
> ---dhcp-lease-max=253 --dhcp-no-override \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +txt-record=example,example value
> +listen-address=192.168.122.1
> +listen-address=192.168.123.1
> +listen-address=2001:db8:ac10:fe01::1
> +listen-address=2001:db8:ac10:fd01::1
> +listen-address=10.24.10.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
> diff --git a/tests/networkxml2argvdata/nat-network.argv b/tests/networkxml2argvdata/nat-network.argv
> index 37fd2fc..d542bbc 100644
> --- a/tests/networkxml2argvdata/nat-network.argv
> +++ b/tests/networkxml2argvdata/nat-network.argv
> @@ -1,10 +1,17 @@
> - at DNSMASQ@ --strict-order --bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo --listen-address 192.168.122.1 \
> ---listen-address 192.168.123.1 --listen-address 2001:db8:ac10:fe01::1 \
> ---listen-address 2001:db8:ac10:fd01::1 --listen-address 10.24.10.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases \
> ---dhcp-lease-max=253 --dhcp-no-override \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +listen-address=192.168.122.1
> +listen-address=192.168.123.1
> +listen-address=2001:db8:ac10:fe01::1
> +listen-address=2001:db8:ac10:fd01::1
> +listen-address=10.24.10.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
> diff --git a/tests/networkxml2argvdata/netboot-network.argv b/tests/networkxml2argvdata/netboot-network.argv
> index 5408eb7..4f5fedd 100644
> --- a/tests/networkxml2argvdata/netboot-network.argv
> +++ b/tests/networkxml2argvdata/netboot-network.argv
> @@ -1,10 +1,18 @@
> - at DNSMASQ@ --strict-order --bind-interfaces --domain=example.com \
> ---local=/example.com/ --domain-needed --conf-file= \
> ---except-interface lo --listen-address 192.168.122.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases \
> ---dhcp-lease-max=253 --dhcp-no-override --expand-hosts \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/netboot.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/netboot.addnhosts \
> ---enable-tftp \
> ---tftp-root /var/lib/tftproot --dhcp-boot pxeboot.img\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=/example.com/
> +domain=example.com
> +expand-hosts
> +listen-address=192.168.122.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/netboot.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/netboot.addnhosts
> +enable-tftp
> +tftp-root=/var/lib/tftproot
> +dhcp-boot=pxeboot.img
> diff --git a/tests/networkxml2argvdata/netboot-proxy-network.argv b/tests/networkxml2argvdata/netboot-proxy-network.argv
> index 21e01e3..8b9c03a 100644
> --- a/tests/networkxml2argvdata/netboot-proxy-network.argv
> +++ b/tests/networkxml2argvdata/netboot-proxy-network.argv
> @@ -1,9 +1,16 @@
> - at DNSMASQ@ --strict-order --bind-interfaces --domain=example.com \
> ---local=/example.com/ --domain-needed --conf-file= \
> ---except-interface lo --listen-address 192.168.122.1 \
> ---dhcp-range 192.168.122.2,192.168.122.254 \
> ---dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases \
> ---dhcp-lease-max=253 --dhcp-no-override --expand-hosts \
> ---dhcp-hostsfile=/var/lib/libvirt/dnsmasq/netboot.hostsfile \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/netboot.addnhosts \
> ---dhcp-boot pxeboot.img,,10.20.30.40\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=/example.com/
> +domain=example.com
> +expand-hosts
> +listen-address=192.168.122.1
> +dhcp-range=192.168.122.2,192.168.122.254
> +dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases
> +dhcp-lease-max=253
> +dhcp-no-override
> +dhcp-hostsfile=/var/lib/libvirt/dnsmasq/netboot.hostsfile
> +addn-hosts=/var/lib/libvirt/dnsmasq/netboot.addnhosts
> +dhcp-boot=pxeboot.img,,10.20.30.40
> diff --git a/tests/networkxml2argvdata/routed-network.argv b/tests/networkxml2argvdata/routed-network.argv
> index 9fedb2b..ad9e121 100644
> --- a/tests/networkxml2argvdata/routed-network.argv
> +++ b/tests/networkxml2argvdata/routed-network.argv
> @@ -1,4 +1,8 @@
> - at DNSMASQ@ --strict-order --bind-interfaces \
> ---local=// --domain-needed --conf-file= \
> ---except-interface lo --listen-address 192.168.122.1 \
> ---addn-hosts=/var/lib/libvirt/dnsmasq/local.addnhosts\
> +# dnsmasq conf file created by libvirt
> +strict-order
> +bind-interfaces
> +except-interface=lo
> +domain-needed
> +local=//
> +listen-address=192.168.122.1
> +addn-hosts=/var/lib/libvirt/dnsmasq/local.addnhosts
> diff --git a/tests/networkxml2argvtest.c b/tests/networkxml2argvtest.c
> index 87519e4..3738734 100644
> --- a/tests/networkxml2argvtest.c
> +++ b/tests/networkxml2argvtest.c
> @@ -15,37 +15,6 @@
> #include "memory.h"
> #include "network/bridge_driver.h"
>
> -/* Replace all occurrences of @token in @buf by @replacement and adjust size of
> - * @buf accordingly. Returns 0 on success and -1 on out-of-memory errors. */
> -static int replaceTokens(char **buf, const char *token, const char *replacement) {
> - size_t token_start, token_end;
> - size_t buf_len, rest_len;
> - const size_t token_len = strlen(token);
> - const size_t replacement_len = strlen(replacement);
> - const int diff = replacement_len - token_len;
> -
> - buf_len = rest_len = strlen(*buf) + 1;
> - token_end = 0;
> - for (;;) {
> - char *match = strstr(*buf + token_end, token);
> - if (match == NULL)
> - break;
> - token_start = match - *buf;
> - rest_len -= token_start + token_len - token_end;
> - token_end = token_start + token_len;
> - buf_len += diff;
> - if (diff > 0)
> - if (VIR_REALLOC_N(*buf, buf_len) < 0)
> - return -1;
> - if (diff != 0)
> - memmove(*buf + token_end + diff, *buf + token_end, rest_len);
> - memcpy(*buf + token_start, replacement, replacement_len);
> - token_end += diff;
> - }
> - /* if diff < 0, we could shrink the buffer here... */
> - return 0;
> -}
> -
> static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv) {
> char *inXmlData = NULL;
> char *outArgvData = NULL;
> @@ -62,10 +31,6 @@ static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv) {
>
> if (virtTestLoadFile(outargv, &outArgvData) < 0)
> goto fail;
> -
> - if (replaceTokens(&outArgvData, "@DNSMASQ@", DNSMASQ))
> - goto fail;
> -
> if (!(dev = virNetworkDefParseString(inXmlData)))
> goto fail;
>
> @@ -78,12 +43,9 @@ static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv) {
> if (dctx == NULL)
> goto fail;
>
> - if (networkBuildDhcpDaemonCommandLine(obj, &cmd, pidfile, dctx) < 0)
> - goto fail;
> -
> - if (!(actual = virCommandToString(cmd)))
> + if (networkBuildDhcpDaemonCommandLine(obj, &cmd, pidfile,
> + dctx, 1, &actual) < 0)
> goto fail;
> -
> if (STRNEQ(outArgvData, actual)) {
> virtTestDifference(stderr, outArgvData, actual);
> goto fail;
> @@ -147,7 +109,6 @@ mymain(void)
> if (virtTestRun("Network XML-2-Argv " name, \
> 1, testCompareXMLToArgvHelper, (name)) < 0) \
> ret = -1
> -
> DO_TEST("isolated-network");
> DO_TEST("routed-network");
> DO_TEST("nat-network");
> --
> 1.7.11.7
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list