[libvirt] [PATCH go-xml] Add support for DNS in network

Thomas Hipp thipp at suse.de
Wed Jul 12 13:28:13 UTC 2017


Add support for DNS in network, and add test code.

Signed-off-by: Thomas Hipp <thipp at suse.de>
---
 network.go      | 39 ++++++++++++++++++++++++++++++++++
 network_test.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 99 insertions(+), 5 deletions(-)

diff --git a/network.go b/network.go
index cc850a1..e0baa96 100644
--- a/network.go
+++ b/network.go
@@ -84,6 +84,44 @@ type NetworkRoute struct {
 	Gateway string `xml:"gateway,attr,omitempty"`
 }
 
+type NetworkDNSForwarder struct {
+	Domain string `xml:"domain,attr,omitempty"`
+	Addr   string `xml:"addr,attr,omitempty"`
+}
+
+type NetworkDNSTXT struct {
+	Name  string `xml:"name,attr"`
+	Value string `xml:"value,attr"`
+}
+
+type NetworkDNSHostHostname struct {
+	Hostname string `xml:",chardata"`
+}
+
+type NetworkDNSHost struct {
+	IP        string                   `xml:"ip,attr"`
+	Hostnames []NetworkDNSHostHostname `xml:"hostname"`
+}
+
+type NetworkDNSSRV struct {
+	Service  string `xml:"service,attr"`
+	Protocol string `xml:"protocol,attr"`
+	Target   string `xml:"target,attr,omitempty"`
+	Port     uint   `xml:"port,attr,omitempty"`
+	Priority uint   `xml:"priority,attr,omitempty"`
+	Weight   uint   `xml:"weight,attr,omitempty"`
+	Domain   string `xml:"domain,attr,omitempty"`
+}
+
+type NetworkDNS struct {
+	Enable            string                `xml:"enable,attr,omitempty"`
+	ForwardPlainNames string                `xml:"forwardPlainNames,attr,omitempty"`
+	Forwarders        []NetworkDNSForwarder `xml:"forwarder"`
+	TXTs              []NetworkDNSTXT       `xml:"txt"`
+	Host              *NetworkDNSHost       `xml:"host"`
+	SRVs              []NetworkDNSSRV       `xml:"srv"`
+}
+
 type Network struct {
 	XMLName             xml.Name        `xml:"network"`
 	IPv6                string          `xml:"ipv6,attr,omitempty"`
@@ -96,6 +134,7 @@ type Network struct {
 	Domain              *NetworkDomain  `xml:"domain"`
 	IPs                 []NetworkIP     `xml:"ip"`
 	Routes              []NetworkRoute  `xml:"route"`
+	DNS                 *NetworkDNS     `xml:"dns"`
 }
 
 func (s *Network) Unmarshal(doc string) error {
diff --git a/network_test.go b/network_test.go
index 5269398..2eb81ab 100644
--- a/network_test.go
+++ b/network_test.go
@@ -89,9 +89,9 @@ var networkTestData = []struct {
 					},
 				},
 				NetworkIP{
-					Family: "ipv6",
-					Address:"2001:db8:ca2:2::1",
-					Prefix: "64",
+					Family:  "ipv6",
+					Address: "2001:db8:ca2:2::1",
+					Prefix:  "64",
 					DHCP: &NetworkDHCP{
 						Hosts: []NetworkDHCPHost{
 							NetworkDHCPHost{
@@ -99,13 +99,57 @@ var networkTestData = []struct {
 								Name: "paul",
 							},
 							NetworkDHCPHost{
-								ID:  "0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66",
-								IP:  "2001:db8:ca2:2:3::2",
+								ID: "0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66",
+								IP: "2001:db8:ca2:2:3::2",
 							},
 						},
 					},
 				},
 			},
+			DNS: &NetworkDNS{
+				Enable:            "yes",
+				ForwardPlainNames: "no",
+				Forwarders: []NetworkDNSForwarder{
+					NetworkDNSForwarder{
+						Addr: "8.8.8.8",
+					},
+					NetworkDNSForwarder{
+						Domain: "example.com",
+						Addr:   "8.8.4.4",
+					},
+					NetworkDNSForwarder{
+						Domain: "www.example.com",
+					},
+				},
+				TXTs: []NetworkDNSTXT{
+					NetworkDNSTXT{
+						Name:  "example",
+						Value: "example value",
+					},
+				},
+				Host: &NetworkDNSHost{
+					IP: "192.168.122.2",
+					Hostnames: []NetworkDNSHostHostname{
+						NetworkDNSHostHostname{
+							Hostname: "myhost",
+						},
+						NetworkDNSHostHostname{
+							Hostname: "myhostalias",
+						},
+					},
+				},
+				SRVs: []NetworkDNSSRV{
+					NetworkDNSSRV{
+						Service:  "name",
+						Protocol: "tcp",
+						Domain:   "test-domain-name",
+						Target:   ".",
+						Port:     1024,
+						Priority: 10,
+						Weight:   10,
+					},
+				},
+			},
 		},
 		Expected: []string{
 			`<network>`,
@@ -124,6 +168,17 @@ var networkTestData = []struct {
 			`      <host id="0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66" ip="2001:db8:ca2:2:3::2"></host>`,
 			`    </dhcp>`,
 			`  </ip>`,
+			`  <dns enable="yes" forwardPlainNames="no">`,
+			`    <forwarder addr="8.8.8.8"></forwarder>`,
+			`    <forwarder domain="example.com" addr="8.8.4.4"></forwarder>`,
+			`    <forwarder domain="www.example.com"></forwarder>`,
+			`    <txt name="example" value="example value"></txt>`,
+			`    <host ip="192.168.122.2">`,
+			`      <hostname>myhost</hostname>`,
+			`      <hostname>myhostalias</hostname>`,
+			`    </host>`,
+			`    <srv service="name" protocol="tcp" target="." port="1024" priority="10" weight="10" domain="test-domain-name"></srv>`,
+			`  </dns>`,
 			`</network>`,
 		},
 	},
-- 
2.13.2




More information about the libvir-list mailing list