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

Signed-off-by: Thomas Hipp <[email protected]>
---
 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

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to