[libvirt] [PATCH] Fix docs and code disagreements for character devices.

Cole Robinson crobinso at redhat.com
Wed Jul 8 21:59:23 UTC 2009


The 'pipe' character type wasn't documented.
TCP uses a <protocol> element, not <wire>
We weren't doing strict validation for protocol and source mode values.

Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
 docs/formatdomain.html    |   18 +++++++++++++++++-
 docs/formatdomain.html.in |   17 ++++++++++++++++-
 src/domain_conf.c         |   23 ++++++++++++++++++-----
 3 files changed, 51 insertions(+), 7 deletions(-)

diff --git a/docs/formatdomain.html b/docs/formatdomain.html
index bb6da11..0b21c6b 100644
--- a/docs/formatdomain.html
+++ b/docs/formatdomain.html
@@ -181,6 +181,8 @@
                       </li><li>
                         <a href="#elementsCharHost">Host device proxy</a>
                       </li><li>
+                        <a href="#elementsCharPipe">Named pipe</a>
+                      </li><li>
                         <a href="#elementsCharTCP">TCP client/server</a>
                       </li><li>
                         <a href="#elementsCharUDP">UDP network console</a>
@@ -879,6 +881,20 @@ qemu-kvm -net nic,model=? /dev/null
       </serial>
       ...</pre>
         <h5>
+          <a name="elementsCharPipe" id="elementsCharPipe">Named pipe</a>
+        </h5>
+        <p>
+      The character device writes output to a named pipe. See pipe(7) for
+      more info.
+    </p>
+        <pre>
+      ...
+      <serial type="pipe">
+        <source path="/tmp/mypipe"/>
+        <target port="1"/>
+      </serial>
+      ...</pre>
+        <h5>
           <a name="elementsCharTCP" id="elementsCharTCP">TCP client/server</a>
         </h5>
         <p>
@@ -889,7 +905,7 @@ qemu-kvm -net nic,model=? /dev/null
       ...
       <serial type="tcp">
         <source mode="connect" host="0.0.0.0" service="2445"/>
-        <wiremode type="telnet"/>
+        <protocol type="telnet"/>
         <target port="1"/>
       </serial>
       ...</pre>
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 48d689d..191b03e 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -839,6 +839,21 @@ qemu-kvm -net nic,model=? /dev/null
       </serial>
       ...</pre>
 
+    <h5><a name="elementsCharPipe">Named pipe</a></h5>
+
+    <p>
+      The character device writes output to a named pipe. See pipe(7) for
+      more info.
+    </p>
+
+    <pre>
+      ...
+      <serial type="pipe">
+        <source path="/tmp/mypipe"/>
+        <target port="1"/>
+      </serial>
+      ...</pre>
+
     <h5><a name="elementsCharTCP">TCP client/server</a></h5>
 
     <p>
@@ -850,7 +865,7 @@ qemu-kvm -net nic,model=? /dev/null
       ...
       <serial type="tcp">
         <source mode="connect" host="0.0.0.0" service="2445"/>
-        <wiremode type="telnet"/>
+        <protocol type="telnet"/>
         <target port="1"/>
       </serial>
       ...</pre>
diff --git a/src/domain_conf.c b/src/domain_conf.c
index cc8c3ef..a04a131 100644
--- a/src/domain_conf.c
+++ b/src/domain_conf.c
@@ -1169,6 +1169,7 @@ error:
  * <serial type="tcp">
  *   <source mode="bind" host="0.0.0.0" service="2445"/>
  *   <target port="1"/>
+ *   <protocol type='raw'/>
  * </serial>
  *
  * <serial type="udp">
@@ -1257,11 +1258,16 @@ virDomainChrDefParseXML(virConnectPtr conn,
                             connectHost = virXMLPropString(cur, "host");
                         if (connectService == NULL)
                             connectService = virXMLPropString(cur, "service");
-                    } else {
+                    } else if (STREQ((const char *)mode, "bind")) {
                         if (bindHost == NULL)
                             bindHost = virXMLPropString(cur, "host");
                         if (bindService == NULL)
                             bindService = virXMLPropString(cur, "service");
+                    } else {
+                        virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+                                             _("Unknown source mode '%s'"),
+                                             mode);
+                        goto error;
                     }
 
                     if (def->type == VIR_DOMAIN_CHR_TYPE_UDP)
@@ -1340,11 +1346,18 @@ virDomainChrDefParseXML(virConnectPtr conn,
             bindService = NULL;
             def->data.tcp.listen = 1;
         }
-        if (protocol != NULL &&
-            STREQ(protocol, "telnet"))
-            def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET;
-        else
+
+        if (protocol == NULL ||
+            STREQ(protocol, "raw"))
             def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW;
+        else if (STREQ(protocol, "telnet"))
+            def->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET;
+        else {
+            virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+                                 _("Unknown protocol '%s'"), protocol);
+            goto error;
+        }
+
         break;
 
     case VIR_DOMAIN_CHR_TYPE_UDP:
-- 
1.6.0.6




More information about the libvir-list mailing list