*Warning* this is a BWC breaking change!

This will change the type of `DomainSerial.Source` from
`*DomainChardevSource` to a new `*DomainSerialSource`.

This is done to add support for networked serial ports and
keep the original DomainChardevSource unchanged.

DomainSerialSource contains all possible xml variations
for a serial device source.

Signed-off-by: Jeroen Simonetti <jer...@simonetti.nl>
---
 domain.go      | 32 ++++++++++++++++++++++++++------
 domain_test.go | 30 ++++++++++++++++++++++++++++--
 2 files changed, 54 insertions(+), 8 deletions(-)

diff --git a/domain.go b/domain.go
index 8c2cc1b..3221423 100644
--- a/domain.go
+++ b/domain.go
@@ -309,12 +309,32 @@ type DomainConsole struct {
 }
 
 type DomainSerial struct {
-       XMLName xml.Name             `xml:"serial"`
-       Type    string               `xml:"type,attr"`
-       Source  *DomainChardevSource `xml:"source"`
-       Target  *DomainSerialTarget  `xml:"target"`
-       Alias   *DomainAlias         `xml:"alias"`
-       Address *DomainAddress       `xml:"address"`
+       XMLName  xml.Name              `xml:"serial"`
+       Type     string                `xml:"type,attr"`
+       Source   *DomainSerialSource   `xml:"source"`
+       Protocol *DomainSerialProtocol `xml:"protocol"`
+       Target   *DomainSerialTarget   `xml:"target"`
+       Alias    *DomainAlias          `xml:"alias"`
+       Address  *DomainAddress        `xml:"address"`
+}
+
+type DomainSerialSource struct {
+       Mode     string                      `xml:"mode,attr,omitempty"`
+       Path     string                      `xml:"path,attr,omitempty"`
+       Append   string                      `xml:"append,attr,omitempty"`
+       Host     string                      `xml:"host,attr,omitempty"`
+       Service  string                      `xml:"service,attr,omitempty"`
+       TLS      string                      `xml:"tls,attr,omitempty"`
+       SecLabel *DomainSerialSourceSecLabel `xml:"seclabel"`
+}
+
+type DomainSerialProtocol struct {
+       Type string `xml:"type,attr"`
+}
+
+type DomainSerialSourceSecLabel struct {
+       Model   string `xml:"model,attr,omitempty"`
+       Relabel string `xml:"relabel,attr,omitempty"`
 }
 
 type DomainChannel struct {
diff --git a/domain_test.go b/domain_test.go
index 4fe6bfe..d301ace 100644
--- a/domain_test.go
+++ b/domain_test.go
@@ -314,9 +314,28 @@ var domainTestData = []struct {
                                        },
                                        DomainSerial{
                                                Type: "file",
-                                               Source: &DomainChardevSource{
+                                               Source: &DomainSerialSource{
                                                        Path:   
"/tmp/serial.log",
                                                        Append: "off",
+                                                       SecLabel: 
&DomainSerialSourceSecLabel{
+                                                               Model:   "dac",
+                                                               Relabel: "no",
+                                                       },
+                                               },
+                                               Target: &DomainSerialTarget{
+                                                       Port: &serialPort,
+                                               },
+                                       },
+                                       DomainSerial{
+                                               Type: "tcp",
+                                               Source: &DomainSerialSource{
+                                                       Mode:    "bind",
+                                                       Host:    "127.0.0.1",
+                                                       Service: "1234",
+                                                       TLS:     "yes",
+                                               },
+                                               Protocol: &DomainSerialProtocol{
+                                                       Type: "telnet",
                                                },
                                                Target: &DomainSerialTarget{
                                                        Port: &serialPort,
@@ -382,7 +401,14 @@ var domainTestData = []struct {
                        `      <target type="isa" port="0"></target>`,
                        `    </serial>`,
                        `    <serial type="file">`,
-                       `      <source path="/tmp/serial.log" 
append="off"></source>`,
+                       `      <source path="/tmp/serial.log" append="off">`,
+                       `        <seclabel model="dac" 
relabel="no"></seclabel>`,
+                       `      </source>`,
+                       `      <target port="0"></target>`,
+                       `    </serial>`,
+                       `    <serial type="tcp">`,
+                       `      <source mode="bind" host="127.0.0.1" 
service="1234" tls="yes"></source>`,
+                       `      <protocol type="telnet"></protocol>`,
                        `      <target port="0"></target>`,
                        `    </serial>`,
                        `    <console type="pty">`,
-- 
2.14.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to