Oops, sorry. This e-mail is not valid since I did try using git send-email but I was unable to see it in the archives nor my inbox so I guess the issue was caused by my sendmail daemon that was not working properly. Please ignore this e-mail. Thanks, Michal On 08/11/2011 03:21 PM, Michal Novotny wrote: > From: Michal Novotny <mignov@xxxxxxxxx> > > Hi, > this is the second version of my patch to the bridge driver and > libvirt XML file to include support for the SRV records in the DNS. > The syntax is based on DNSMasq man page and tests for both xml2xml > and xml2argv were added as well. > > Differences between v1 and v2: > - A minor rewrite of integer parsing functionality > - Extend tests to test with both minimal and full set of attributes > - Check for service name length implemented > > Signed-off-by: Michal Novotny <minovotn@xxxxxxxxxx> > Signed-off-by: Michal Novotny <mignov@xxxxxxxxx> > --- > docs/formatnetwork.html.in | 12 ++ > docs/schemas/network.rng | 26 ++++ > src/conf/network_conf.c | 130 +++++++++++++++++++- > src/conf/network_conf.h | 16 +++ > src/network/bridge_driver.c | 43 +++++++ > .../nat-network-dns-srv-record-minimal.argv | 1 + > .../nat-network-dns-srv-record-minimal.xml | 26 ++++ > .../nat-network-dns-srv-record.argv | 1 + > .../nat-network-dns-srv-record.xml | 26 ++++ > tests/networkxml2argvtest.c | 2 + > .../nat-network-dns-srv-record-minimal.xml | 26 ++++ > .../nat-network-dns-srv-record.xml | 26 ++++ > .../nat-network-dns-srv-record-minimal.xml | 26 ++++ > .../nat-network-dns-srv-record.xml | 26 ++++ > tests/networkxml2xmltest.c | 2 + > tests/schematestutils.sh | 4 + > 16 files changed, 391 insertions(+), 2 deletions(-) > create mode 100644 tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv > create mode 100644 tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.xml > create mode 100644 tests/networkxml2argvdata/nat-network-dns-srv-record.argv > create mode 100644 tests/networkxml2argvdata/nat-network-dns-srv-record.xml > create mode 100644 tests/networkxml2xmlin/nat-network-dns-srv-record-minimal.xml > create mode 100644 tests/networkxml2xmlin/nat-network-dns-srv-record.xml > create mode 100644 tests/networkxml2xmlout/nat-network-dns-srv-record-minimal.xml > create mode 100644 tests/networkxml2xmlout/nat-network-dns-srv-record.xml > > diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in > index 99031d0..51b1581 100644 > --- a/docs/formatnetwork.html.in > +++ b/docs/formatnetwork.html.in > @@ -342,6 +342,7 @@ > <mac address='00:16:3E:5D:C7:9E'/> > <dns> > <txt name="example" value="example value" /> > + <srv service="name" protocol="tcp" domain="test-domain-name" target="." port="1024" priority="10" weight="10"/> > </dns> > <ip address="192.168.122.1" netmask="255.255.255.0"> > <dhcp> > @@ -390,6 +391,17 @@ > <span class="since">Since 0.9.3</span> > </dd> > </dl> > + <dl> > + <dt><code>srv</code></dt> > + <dd>The <code>dns</code> element can have also 0 or more <code>srv</code> > + record elements. Each <code>srv</code> record element defines a DNS SRV record > + and has 2 mandatory and 5 optional attributes. The mandatory attributes > + are service name and protocol (tcp, udp) and the optional attributes are > + target, port, priority, weight and domain as defined in DNS server SRV > + RFC (RFC 2782). > + <span class="since">Since 0.9.5</span> > + </dd> > + </dl> > </dd> > <dt><code>ip</code></dt> > <dd>The <code>address</code> attribute defines an IPv4 address in > diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng > index 1c44471..dae2799 100644 > --- a/docs/schemas/network.rng > +++ b/docs/schemas/network.rng > @@ -138,6 +138,19 @@ > </element> > </zeroOrMore> > <zeroOrMore> > + <element name="srv"> > + <attribute name="service"><text/></attribute> > + <attribute name="protocol"><ref name="protocol"/></attribute> > + <optional> > + <attribute name="domain"><ref name="dnsName"/></attribute> > + <attribute name="target"><text/></attribute> > + <attribute name="port"><ref name="unsignedShort"/></attribute> > + <attribute name="priority"><ref name="unsignedShort"/></attribute> > + <attribute name="weight"><ref name="unsignedShort"/></attribute> > + </optional> > + </element> > + </zeroOrMore> > + <zeroOrMore> > <element name="host"> > <attribute name="ip"><ref name="ipv4Addr"/></attribute> > <oneOrMore> > @@ -206,6 +219,19 @@ > </element> > </define> > > + <define name='unsignedShort'> > + <data type='integer'> > + <param name="minInclusive">0</param> > + <param name="maxInclusive">65535</param> > + </data> > + </define> > + > + <define name='protocol'> > + <data type='string'> > + <param name='pattern'>(tcp)|(udp)</param> > + </data> > + </define> > + > <define name='addr-family'> > <data type='string'> > <param name="pattern">(ipv4)|(ipv6)</param> > diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c > index b11c482..517c4d6 100644 > --- a/src/conf/network_conf.c > +++ b/src/conf/network_conf.c > @@ -137,6 +137,15 @@ static void virNetworkDNSDefFree(virNetworkDNSDefPtr def) > } > VIR_FREE(def->hosts); > } > + if (def->nsrvrecords) { > + while (def->nsrvrecords--) { > + VIR_FREE(def->srvrecords[def->nsrvrecords].domain); > + VIR_FREE(def->srvrecords[def->nsrvrecords].service); > + VIR_FREE(def->srvrecords[def->nsrvrecords].protocol); > + VIR_FREE(def->srvrecords[def->nsrvrecords].target); > + } > + VIR_FREE(def->srvrecords); > + } > VIR_FREE(def); > } > } > @@ -552,8 +561,99 @@ error: > } > > static int > +virNetworkDNSSrvDefParseXML(virNetworkDNSDefPtr def, > + xmlNodePtr cur, > + xmlXPathContextPtr ctxt) > +{ > + char *domain; > + char *service; > + char *protocol; > + char *target; > + int port; > + int priority; > + int weight; > + int ret = 0; > + char xpath[1024] = { 0 }; > + > + if (!(service = virXMLPropString(cur, "service"))) { > + virNetworkReportError(VIR_ERR_XML_DETAIL, > + "%s", _("Missing required service attribute in dns srv record")); > + goto error; > + } > + > + if (strlen(service) > DNS_RECORD_LENGTH_SRV) { > + virNetworkReportError(VIR_ERR_XML_DETAIL, > + "%s", _("Service name is too long, limit is %d bytes"), DNS_RECORD_LENGTH_SRV); > + goto error; > + } > + > + if (!(protocol = virXMLPropString(cur, "protocol"))) { > + virNetworkReportError(VIR_ERR_XML_DETAIL, > + _("Missing required protocol attribute in dns srv record '%s'"), service); > + goto error; > + } > + > + /* Check whether protocol value is the supported one */ > + if (STRNEQ(protocol, "tcp") && (STRNEQ(protocol, "udp"))) { > + virNetworkReportError(VIR_ERR_XML_DETAIL, > + _("Invalid protocol attribute value '%s'"), protocol); > + goto error; > + } > + > + if (VIR_REALLOC_N(def->srvrecords, def->nsrvrecords + 1) < 0) { > + virReportOOMError(); > + goto error; > + } > + > + def->srvrecords[def->nsrvrecords].service = service; > + def->srvrecords[def->nsrvrecords].protocol = protocol; > + def->srvrecords[def->nsrvrecords].domain = NULL; > + def->srvrecords[def->nsrvrecords].target = NULL; > + def->srvrecords[def->nsrvrecords].port = 0; > + def->srvrecords[def->nsrvrecords].priority = 0; > + def->srvrecords[def->nsrvrecords].weight = 0; > + > + /* Following attributes are optional but we had to make sure their NULL above */ > + if ((target = virXMLPropString(cur, "target")) && (domain = virXMLPropString(cur, "domain"))) { > + snprintf(xpath, sizeof(xpath), "string(//network/dns/srv[@service='%s']/@port)", service); > + if (virXPathInt(xpath, ctxt, &port)) > + def->srvrecords[def->nsrvrecords].port = port; > + > + snprintf(xpath, sizeof(xpath), "string(//network/dns/srv[@service='%s']/@priority)", service); > + if (virXPathInt(xpath, ctxt, &priority)) > + def->srvrecords[def->nsrvrecords].priority = priority; > + > + snprintf(xpath, sizeof(xpath), "string(//network/dns/srv[@service='%s']/@weight)", service); > + if (virXPathInt(xpath, ctxt, &weight)) > + def->srvrecords[def->nsrvrecords].weight = weight; > + > + def->srvrecords[def->nsrvrecords].domain = domain; > + def->srvrecords[def->nsrvrecords].target = target; > + def->srvrecords[def->nsrvrecords].port = port; > + def->srvrecords[def->nsrvrecords].priority = priority; > + def->srvrecords[def->nsrvrecords].weight = weight; > + } > + > + def->nsrvrecords++; > + > + goto cleanup; > + > +error: > + VIR_FREE(domain); > + VIR_FREE(service); > + VIR_FREE(protocol); > + VIR_FREE(target); > + > + ret = 1; > + > +cleanup: > + return ret; > +} > + > +static int > virNetworkDNSDefParseXML(virNetworkDNSDefPtr *dnsdef, > - xmlNodePtr node) > + xmlNodePtr node, > + xmlXPathContextPtr ctxt) > { > xmlNodePtr cur; > int ret = -1; > @@ -598,6 +698,11 @@ virNetworkDNSDefParseXML(virNetworkDNSDefPtr *dnsdef, > name = NULL; > value = NULL; > } else if (cur->type == XML_ELEMENT_NODE && > + xmlStrEqual(cur->name, BAD_CAST "srv")) { > + ret = virNetworkDNSSrvDefParseXML(def, cur, ctxt); > + if (ret < 0) > + goto error; > + } else if (cur->type == XML_ELEMENT_NODE && > xmlStrEqual(cur->name, BAD_CAST "host")) { > ret = virNetworkDNSHostsDefParseXML(def, cur); > if (ret < 0) > @@ -888,7 +993,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) > > dnsNode = virXPathNode("./dns", ctxt); > if (dnsNode != NULL) { > - if (virNetworkDNSDefParseXML(&def->dns, dnsNode) < 0) > + if (virNetworkDNSDefParseXML(&def->dns, dnsNode, ctxt) < 0) > goto error; > } > > @@ -1147,6 +1252,27 @@ virNetworkDNSDefFormat(virBufferPtr buf, > def->txtrecords[i].value); > } > > + for (i = 0 ; i < def->nsrvrecords ; i++) { > + if (def->srvrecords[i].service && def->srvrecords[i].protocol) { > + virBufferAsprintf(buf, " <srv service='%s' protocol='%s' ", > + def->srvrecords[i].service, > + def->srvrecords[i].protocol); > + > + if (def->srvrecords[i].domain) > + virBufferAsprintf(buf, "domain='%s' ", def->srvrecords[i].domain); > + if (def->srvrecords[i].target) > + virBufferAsprintf(buf, "target='%s' ", def->srvrecords[i].target); > + if (def->srvrecords[i].port) > + virBufferAsprintf(buf, "port='%d' ", def->srvrecords[i].port); > + if (def->srvrecords[i].priority) > + virBufferAsprintf(buf, "priority='%d' ", def->srvrecords[i].priority); > + if (def->srvrecords[i].weight) > + virBufferAsprintf(buf, "weight='%d' ", def->srvrecords[i].weight); > + > + virBufferAsprintf(buf, "/>\n"); > + } > + } > + > if (def->nhosts) { > int ii, j; > > diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h > index 869085e..5f05a3a 100644 > --- a/src/conf/network_conf.h > +++ b/src/conf/network_conf.h > @@ -24,6 +24,8 @@ > #ifndef __NETWORK_CONF_H__ > # define __NETWORK_CONF_H__ > > +#define DNS_RECORD_LENGTH_SRV (512 - 30) /* Limit minus overhead as mentioned in RFC-2782 */ > + > # include <libxml/parser.h> > # include <libxml/tree.h> > # include <libxml/xpath.h> > @@ -67,6 +69,18 @@ struct _virNetworkDNSTxtRecordsDef { > char *value; > }; > > +typedef struct _virNetworkDNSSrvRecordsDef virNetworkDNSSrvRecordsDef; > +typedef virNetworkDNSSrvRecordsDef *virNetworkDNSSrvRecordsDefPtr; > +struct _virNetworkDNSSrvRecordsDef { > + char *domain; > + char *service; > + char *protocol; > + char *target; > + int port; > + int priority; > + int weight; > +}; > + > struct _virNetworkDNSHostsDef { > virSocketAddr ip; > int nnames; > @@ -80,6 +94,8 @@ struct _virNetworkDNSDef { > virNetworkDNSTxtRecordsDefPtr txtrecords; > unsigned int nhosts; > virNetworkDNSHostsDefPtr hosts; > + unsigned int nsrvrecords; > + virNetworkDNSSrvRecordsDefPtr srvrecords; > }; > > typedef struct _virNetworkDNSDef *virNetworkDNSDefPtr; > diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c > index c90db63..f4d952f 100644 > --- a/src/network/bridge_driver.c > +++ b/src/network/bridge_driver.c > @@ -559,6 +559,49 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network, > virCommandAddArgPair(cmd, "--txt-record", record); > VIR_FREE(record); > } > + > + for (i = 0; i < dns->nsrvrecords; i++) { > + char *record = NULL; > + char *recordPort = NULL; > + char *recordPriority = NULL; > + char *recordWeight = NULL; > + > + if (dns->srvrecords[i].service && dns->srvrecords[i].protocol) { > + if (dns->srvrecords[i].port) { > + if (virAsprintf(&recordPort, "%d", dns->srvrecords[i].port) < 0) { > + virReportOOMError(); > + goto cleanup; > + } > + } > + if (dns->srvrecords[i].priority) { > + if (virAsprintf(&recordPriority, "%d", dns->srvrecords[i].priority) < 0) { > + virReportOOMError(); > + goto cleanup; > + } > + } > + if (dns->srvrecords[i].weight) { > + if (virAsprintf(&recordWeight, "%d", dns->srvrecords[i].weight) < 0) { > + virReportOOMError(); > + goto cleanup; > + } > + } > + > + if (virAsprintf(&record, "%s.%s.%s,%s,%s,%s,%s", > + dns->srvrecords[i].service, > + dns->srvrecords[i].protocol, > + dns->srvrecords[i].domain ? dns->srvrecords[i].domain : "", > + dns->srvrecords[i].target ? dns->srvrecords[i].target : "", > + recordPort ? recordPort : "", > + recordPriority ? recordPriority : "", > + recordWeight ? recordWeight : "") < 0) { > + virReportOOMError(); > + goto cleanup; > + } > + > + virCommandAddArgPair(cmd, "--srv-host", record); > + VIR_FREE(record); > + } > + } > } > > /* > diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv > new file mode 100644 > index 0000000..174f751 > --- /dev/null > +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv > @@ -0,0 +1 @@ > +/usr/sbin/dnsmasq --strict-order --bind-interfaces --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 > \ No newline at end of file > diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.xml b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.xml > new file mode 100644 > index 0000000..e9b7680 > --- /dev/null > +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv > new file mode 100644 > index 0000000..2ea9809 > --- /dev/null > +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv > @@ -0,0 +1 @@ > +/usr/sbin/dnsmasq --strict-order --bind-interfaces --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 > \ No newline at end of file > diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record.xml b/tests/networkxml2argvdata/nat-network-dns-srv-record.xml > new file mode 100644 > index 0000000..4be85b5 > --- /dev/null > +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2argvtest.c b/tests/networkxml2argvtest.c > index 4a11d6f..2dd9b7f 100644 > --- a/tests/networkxml2argvtest.c > +++ b/tests/networkxml2argvtest.c > @@ -120,6 +120,8 @@ mymain(void) > DO_TEST("netboot-network"); > DO_TEST("netboot-proxy-network"); > DO_TEST("nat-network-dns-txt-record"); > + DO_TEST("nat-network-dns-srv-record"); > + DO_TEST("nat-network-dns-srv-record-minimal"); > DO_TEST("nat-network-dns-hosts"); > > return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE); > diff --git a/tests/networkxml2xmlin/nat-network-dns-srv-record-minimal.xml b/tests/networkxml2xmlin/nat-network-dns-srv-record-minimal.xml > new file mode 100644 > index 0000000..e9b7680 > --- /dev/null > +++ b/tests/networkxml2xmlin/nat-network-dns-srv-record-minimal.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2xmlin/nat-network-dns-srv-record.xml b/tests/networkxml2xmlin/nat-network-dns-srv-record.xml > new file mode 100644 > index 0000000..4be85b5 > --- /dev/null > +++ b/tests/networkxml2xmlin/nat-network-dns-srv-record.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2xmlout/nat-network-dns-srv-record-minimal.xml b/tests/networkxml2xmlout/nat-network-dns-srv-record-minimal.xml > new file mode 100644 > index 0000000..e9b7680 > --- /dev/null > +++ b/tests/networkxml2xmlout/nat-network-dns-srv-record-minimal.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2xmlout/nat-network-dns-srv-record.xml b/tests/networkxml2xmlout/nat-network-dns-srv-record.xml > new file mode 100644 > index 0000000..4be85b5 > --- /dev/null > +++ b/tests/networkxml2xmlout/nat-network-dns-srv-record.xml > @@ -0,0 +1,26 @@ > +<network> > + <name>default</name> > + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> > + <forward dev='eth1' mode='nat'> > + <interface dev='eth1'/> > + </forward> > + <bridge name='virbr0' stp='on' delay='0' /> > + <dns> > + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10' /> > + </dns> > + <ip address='192.168.122.1' netmask='255.255.255.0'> > + <dhcp> > + <range start='192.168.122.2' end='192.168.122.254' /> > + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10' /> > + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11' /> > + </dhcp> > + </ip> > + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> > + </ip> > + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> > + </ip> > + <ip family='ipv4' address='10.24.10.1'> > + </ip> > +</network> > diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c > index 5cdbedb..b9f6546 100644 > --- a/tests/networkxml2xmltest.c > +++ b/tests/networkxml2xmltest.c > @@ -87,6 +87,8 @@ mymain(void) > DO_TEST("netboot-network"); > DO_TEST("netboot-proxy-network"); > DO_TEST("nat-network-dns-txt-record"); > + DO_TEST("nat-network-dns-srv-record"); > + DO_TEST("nat-network-dns-srv-record-minimal"); > DO_TEST("nat-network-dns-hosts"); > DO_TEST("8021Qbh-net"); > DO_TEST("direct-net"); > diff --git a/tests/schematestutils.sh b/tests/schematestutils.sh > index f2b3b50..5fe85ce 100644 > --- a/tests/schematestutils.sh > +++ b/tests/schematestutils.sh > @@ -20,6 +20,10 @@ do > result=`$cmd 2>&1` > ret=$? > > + if test "$ret" != "0"; then > + xmllint --relaxng $SCHEMA $xml > + fi > + > test_result $n $(basename $(dirname $xml))"/"$(basename $xml) $ret > if test "$verbose" = "1" && test $ret != 0 ; then > printf '%s\n' "$cmd" "$result" -- Michal Novotny <minovotn@xxxxxxxxxx>, RHCE, Red Hat Virtualization | libvirt-php bindings | php-virt-control.org -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list