You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
7.0 KiB
172 lines
7.0 KiB
7 years ago
|
From f70a8ea0305c82d14e47d08f2e130f8e11b0e9b3 Mon Sep 17 00:00:00 2001
|
||
|
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||
|
Date: Mon, 7 Oct 2013 16:02:35 +0200
|
||
|
Subject: [PATCH 22/60] libxkutil: Simplify XML handling of consoles
|
||
|
|
||
|
The attempt to avoid duplication of console definitions was a bit
|
||
|
too complicated and error prone. We move the generation of console
|
||
|
XML entirely to the new console code.
|
||
|
Further, it's incorrect to restrict PTY consoles being represented
|
||
|
as GraphicsRASDs to virtio only. At least serial must be allowed,
|
||
|
but it doesn't really hurt to map all PTYs to GraphicsRASD consoles.
|
||
|
|
||
|
Further, the parsing code returned two instances for serial consoles,
|
||
|
one from the /domain/devices/console and /domain/devices/serial
|
||
|
both representing the same device. This confuses cimtest and,
|
||
|
more problematic, will prevent DefineSystem to work, if a reference
|
||
|
VSSD with a serial console is passed in.
|
||
|
|
||
|
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||
|
Reviewed-by: Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
|
||
|
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||
|
---
|
||
|
libxkutil/device_parsing.c | 12 +-------
|
||
|
libxkutil/xmlgen.c | 76 ----------------------------------------------
|
||
|
2 files changed, 1 insertion(+), 87 deletions(-)
|
||
|
|
||
|
diff --git a/libxkutil/device_parsing.c b/libxkutil/device_parsing.c
|
||
|
index 55c8d57..aecca4c 100644
|
||
|
--- a/libxkutil/device_parsing.c
|
||
|
+++ b/libxkutil/device_parsing.c
|
||
|
@@ -47,7 +47,7 @@
|
||
|
* still part of the graphics.
|
||
|
*/
|
||
|
#define GRAPHICS_XPATH (xmlChar *)"/domain/devices/graphics | "\
|
||
|
- "/domain/devices/console | /domain/devices/serial"
|
||
|
+ "/domain/devices/console"
|
||
|
#define INPUT_XPATH (xmlChar *)"/domain/devices/input"
|
||
|
|
||
|
#define DEFAULT_BRIDGE "xenbr0"
|
||
|
@@ -948,16 +948,6 @@ static int parse_graphics_device(xmlNode *node, struct virt_device **vdevs)
|
||
|
else if (XSTREQ(child->name, "target")) {
|
||
|
gdev->dev.vnc.port =
|
||
|
get_attr_value(child, "port");
|
||
|
- /* The graphics pty console can only be a
|
||
|
- virtio console. If 'type' is not set in the
|
||
|
- xml, the default of libvirt is virtio.*/
|
||
|
- char *t_type = get_attr_value(child, "type");
|
||
|
- if (t_type != NULL && !STREQC(t_type, "virtio")) {
|
||
|
- CU_DEBUG("Not a pty-virtio graphics console");
|
||
|
- free(t_type);
|
||
|
- goto err;
|
||
|
- }
|
||
|
- free(t_type);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
diff --git a/libxkutil/xmlgen.c b/libxkutil/xmlgen.c
|
||
|
index 45bfb04..7e8801d 100644
|
||
|
--- a/libxkutil/xmlgen.c
|
||
|
+++ b/libxkutil/xmlgen.c
|
||
|
@@ -42,36 +42,11 @@ typedef const char *(*devfn_t)(xmlNodePtr node, struct domain *dominfo);
|
||
|
typedef const char *(*poolfn_t)(xmlNodePtr node, struct virt_pool *pool);
|
||
|
typedef const char *(*resfn_t)(xmlNodePtr node, struct virt_pool_res *res);
|
||
|
|
||
|
-static int _count_graphics_console_definitions(struct domain *dominfo)
|
||
|
-{
|
||
|
- int i;
|
||
|
- int num = 0;
|
||
|
-
|
||
|
- for (i = 0; i < dominfo->dev_graphics_ct; i++) {
|
||
|
- struct virt_device *_dev = &dominfo->dev_graphics[i];
|
||
|
- if (_dev->type == CIM_RES_TYPE_UNKNOWN)
|
||
|
- continue;
|
||
|
-
|
||
|
- struct graphics_device *dev = &_dev->dev.graphics;
|
||
|
-
|
||
|
- if (STREQC(dev->type, "console")) {
|
||
|
- num++;
|
||
|
- }
|
||
|
- }
|
||
|
- CU_DEBUG("Found %d console defintions in graphics devices.",num);
|
||
|
- return num;
|
||
|
-
|
||
|
-}
|
||
|
-
|
||
|
static const char *console_xml(xmlNodePtr root, struct domain *dominfo)
|
||
|
{
|
||
|
int i;
|
||
|
xmlNodePtr console;
|
||
|
xmlNodePtr tmp;
|
||
|
- int num_graphics_consol_def = 0;
|
||
|
- int num_suppressed_console_def = 0;
|
||
|
-
|
||
|
- num_graphics_consol_def = _count_graphics_console_definitions(dominfo);
|
||
|
|
||
|
for (i = 0; i < dominfo->dev_console_ct; i++) {
|
||
|
struct virt_device *_dev = &dominfo->dev_console[i];
|
||
|
@@ -80,25 +55,6 @@ static const char *console_xml(xmlNodePtr root, struct domain *dominfo)
|
||
|
|
||
|
struct console_device *cdev = &_dev->dev.console;
|
||
|
|
||
|
- /* Due to backward compatibility, the graphics device handling
|
||
|
- is still parsing consoles:
|
||
|
- source = pty, target = virtio (which is the default target)
|
||
|
- But the console device handling processes these kind of
|
||
|
- consoles too. This would lead to a duplication of these
|
||
|
- default consoles in the domain xml definition.
|
||
|
- This code prevents the console handling of writing xml for
|
||
|
- duplicate pty/virtio consoles which are written by the
|
||
|
- graphics device handling. */
|
||
|
- if (cdev->source_type == CIM_CHARDEV_SOURCE_TYPE_PTY &&
|
||
|
- (cdev->target_type == NULL ||
|
||
|
- STREQC(cdev->target_type, "virtio"))) {
|
||
|
- if (num_suppressed_console_def <
|
||
|
- num_graphics_consol_def) {
|
||
|
- num_suppressed_console_def++;
|
||
|
- continue;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
console = xmlNewChild(root, NULL, BAD_CAST "console", NULL);
|
||
|
if (console == NULL)
|
||
|
return XML_ERROR;
|
||
|
@@ -760,35 +716,6 @@ static const char *graphics_vnc_xml(xmlNodePtr root,
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
-static const char *graphics_pty_xml(xmlNodePtr root,
|
||
|
- struct graphics_device *dev)
|
||
|
-{
|
||
|
- xmlNodePtr pty = NULL;
|
||
|
- xmlNodePtr tmp = NULL;
|
||
|
-
|
||
|
- pty = xmlNewChild(root, NULL, BAD_CAST dev->type, NULL);
|
||
|
- if (pty == NULL)
|
||
|
- return XML_ERROR;
|
||
|
-
|
||
|
- xmlNewProp(pty, BAD_CAST "type", BAD_CAST "pty");
|
||
|
-
|
||
|
- tmp = xmlNewChild(pty, NULL, BAD_CAST "source", NULL);
|
||
|
- if (tmp == NULL)
|
||
|
- return XML_ERROR;
|
||
|
-
|
||
|
- if(dev->dev.vnc.host)
|
||
|
- xmlNewProp(tmp, BAD_CAST "path", BAD_CAST dev->dev.vnc.host);
|
||
|
-
|
||
|
- tmp = xmlNewChild(pty, NULL, BAD_CAST "target", NULL);
|
||
|
- if (tmp == NULL)
|
||
|
- return XML_ERROR;
|
||
|
-
|
||
|
- if(dev->dev.vnc.port)
|
||
|
- xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port);
|
||
|
-
|
||
|
- return NULL;
|
||
|
-}
|
||
|
-
|
||
|
static const char *graphics_xml(xmlNodePtr root, struct domain *dominfo)
|
||
|
{
|
||
|
const char *msg = NULL;
|
||
|
@@ -803,9 +730,6 @@ static const char *graphics_xml(xmlNodePtr root, struct domain *dominfo)
|
||
|
|
||
|
if (STREQC(dev->type, "vnc") || STREQC(dev->type, "sdl"))
|
||
|
msg = graphics_vnc_xml(root, dev);
|
||
|
- else if (STREQC(dev->type, "console") ||
|
||
|
- STREQC(dev->type, "serial"))
|
||
|
- msg = graphics_pty_xml(root, dev);
|
||
|
else
|
||
|
continue;
|
||
|
|
||
|
--
|
||
|
2.1.0
|