[PATCH 0 of 2] Add SDL frame buffer support in libvirt-cim, V5

these patches would add support for SDL frame buffer configuration, also fix some memory leak problem.

# HG changeset patch # User Wayne Xia <xiawenc@linux.vnet.ibm.com> # Date 1311593948 -28800 # Node ID 03cc267a3d534f19eb489be3c430ea5de8787ccc # Parent 8b4f6d69f40904ced24f7948f04f89e770e37bce (#5) made the graphic structure as union These change were made to allow SDL device properties added more clearly #5 removed tailing space and some comments, added different free functions for graphic device. Signed-off-by: Wayne Xia (Wayne) <xiawenc@linux.vnet.ibm.com> diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/device_parsing.c Mon Jul 25 19:39:08 2011 +0800 @@ -88,13 +88,30 @@ free(dev->path); } +static void cleanup_vnc_device(struct graphics_device *dev) +{ + free(dev->dev.vnc.port); + free(dev->dev.vnc.host); + free(dev->dev.vnc.keymap); + free(dev->dev.vnc.passwd); +} + +static void cleanup_sdl_device(struct graphics_device *dev) +{ + free(dev->dev.sdl.display); + free(dev->dev.sdl.xauth); + free(dev->dev.sdl.fullscreen); +} + static void cleanup_graphics_device(struct graphics_device *dev) { + if (STREQC(dev->type, "sdl")) { + cleanup_sdl_device(dev); + } + else { + cleanup_vnc_device(dev); + } free(dev->type); - free(dev->port); - free(dev->host); - free(dev->keymap); - free(dev->passwd); } static void cleanup_input_device(struct input_device *dev) @@ -530,12 +547,12 @@ CU_DEBUG("graphics device type = %s", gdev->type); if (STREQC(gdev->type, "vnc")) { - gdev->port = get_attr_value(node, "port"); - gdev->host = get_attr_value(node, "listen"); - gdev->keymap = get_attr_value(node, "keymap"); - gdev->passwd = get_attr_value(node, "passwd"); + gdev->dev.vnc.port = get_attr_value(node, "port"); + gdev->dev.vnc.host = get_attr_value(node, "listen"); + gdev->dev.vnc.keymap = get_attr_value(node, "keymap"); + gdev->dev.vnc.passwd = get_attr_value(node, "passwd"); - if (gdev->port == NULL || gdev->host == NULL) + if (gdev->dev.vnc.port == NULL || gdev->dev.vnc.host == NULL) goto err; } else if (STREQC(gdev->type, "pty")) { @@ -550,9 +567,9 @@ for (child = node->children; child != NULL; child = child->next) { if (XSTREQ(child->name, "source")) - gdev->host = get_attr_value(child, "path"); + gdev->dev.vnc.host = get_attr_value(child, "path"); else if (XSTREQ(child->name, "target")) - gdev->port = get_attr_value(child, "port"); + gdev->dev.vnc.port = get_attr_value(child, "port"); } } else { @@ -565,7 +582,7 @@ if (STREQC(gdev->type, "vnc")) ret = asprintf(&vdev->id, "%s", gdev->type); else - ret = asprintf(&vdev->id, "%s:%s", gdev->type, gdev->port); + ret = asprintf(&vdev->id, "%s:%s", gdev->type, gdev->dev.vnc.port); if (ret == -1) { CU_DEBUG("Failed to create graphics is string"); @@ -807,10 +824,10 @@ DUP_FIELD(dev, _dev, dev.emu.path); } else if (dev->type == CIM_RES_TYPE_GRAPHICS) { DUP_FIELD(dev, _dev, dev.graphics.type); - DUP_FIELD(dev, _dev, dev.graphics.port); - DUP_FIELD(dev, _dev, dev.graphics.host); - DUP_FIELD(dev, _dev, dev.graphics.keymap); - DUP_FIELD(dev, _dev, dev.graphics.passwd); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.host); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.port); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.keymap); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.passwd); } else if (dev->type == CIM_RES_TYPE_INPUT) { DUP_FIELD(dev, _dev, dev.input.type); DUP_FIELD(dev, _dev, dev.input.bus); diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/device_parsing.h --- a/libxkutil/device_parsing.h Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/device_parsing.h Mon Jul 25 19:39:08 2011 +0800 @@ -84,14 +84,27 @@ char *path; }; -struct graphics_device { - char *type; +struct vnc_device { char *port; char *host; char *keymap; char *passwd; }; +struct sdl_device { + char *display; + char *xauth; + char *fullscreen; +}; + +struct graphics_device { + char *type; + union { + struct vnc_device vnc; + struct sdl_device sdl; + } dev; +}; + struct input_device { char *type; char *bus; diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/xml_parse_test.c --- a/libxkutil/xml_parse_test.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/xml_parse_test.c Mon Jul 25 19:39:08 2011 +0800 @@ -116,7 +116,7 @@ FILE *d) { print_value(d, "Graphics Type", dev->dev.graphics.type); - print_value(d, "Graphics Port", dev->dev.graphics.port); + print_value(d, "Graphics Port", dev->dev.graphics.dev.vnc.port); } static void print_devices(struct domain *dominfo, diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/xmlgen.c Mon Jul 25 19:39:08 2011 +0800 @@ -424,22 +424,22 @@ if (STREQC(dev->type, "sdl")) return NULL; - if (dev->port) { - xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->port); - if (STREQC(dev->port, "-1")) + if (dev->dev.vnc.port) { + xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port); + if (STREQC(dev->dev.vnc.port, "-1")) xmlNewProp(tmp, BAD_CAST "autoport", BAD_CAST "yes"); else xmlNewProp(tmp, BAD_CAST "autoport", BAD_CAST "no"); } - if (dev->host) - xmlNewProp(tmp, BAD_CAST "listen", BAD_CAST dev->host); + if (dev->dev.vnc.host) + xmlNewProp(tmp, BAD_CAST "listen", BAD_CAST dev->dev.vnc.host); - if (dev->passwd) - xmlNewProp(tmp, BAD_CAST "passwd", BAD_CAST dev->passwd); + if (dev->dev.vnc.passwd) + xmlNewProp(tmp, BAD_CAST "passwd", BAD_CAST dev->dev.vnc.passwd); - if (dev->keymap) - xmlNewProp(tmp, BAD_CAST "keymap", BAD_CAST dev->keymap); + if (dev->dev.vnc.keymap) + xmlNewProp(tmp, BAD_CAST "keymap", BAD_CAST dev->dev.vnc.keymap); return NULL; } @@ -459,16 +459,16 @@ tmp = xmlNewChild(pty, NULL, BAD_CAST "source", NULL); if (tmp == NULL) return XML_ERROR; - - if(dev->host) - xmlNewProp(tmp, BAD_CAST "path", BAD_CAST dev->host); + + 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->port) - xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->port); + + if(dev->dev.vnc.port) + xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port); return NULL; } diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_ComputerSystem.c --- a/src/Virt_ComputerSystem.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_ComputerSystem.c Mon Jul 25 19:39:08 2011 +0800 @@ -104,7 +104,7 @@ "Virtual System (Console on %s://%s:%s)", domain->dev_graphics[0].dev.graphics.type, host, - domain->dev_graphics[0].dev.graphics.port); + domain->dev_graphics[0].dev.graphics.dev.vnc.port); else ret = asprintf(&cap, "Virtual System (No console)"); diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_Device.c --- a/src/Virt_Device.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_Device.c Mon Jul 25 19:39:08 2011 +0800 @@ -194,8 +194,8 @@ else rc = asprintf(&vp_str, "%s/%s:%s", dev->type, - dev->host, - dev->port); + dev->dev.vnc.host, + dev->dev.vnc.port); if (rc == -1) return 0; diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_KVMRedirectionSAP.c --- a/src/Virt_KVMRedirectionSAP.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_KVMRedirectionSAP.c Mon Jul 25 19:39:08 2011 +0800 @@ -366,7 +366,7 @@ continue; } - ret = sscanf(dominfo->dev_graphics->dev.graphics.port, + ret = sscanf(dominfo->dev_graphics->dev.graphics.dev.vnc.port, "%d", &lport); if (ret != 1) { diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_RASD.c --- a/src/Virt_RASD.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_RASD.c Mon Jul 25 19:39:08 2011 +0800 @@ -481,9 +481,9 @@ rc = asprintf(&addr_str, "%s", dev->dev.graphics.type); else { rc = asprintf(&addr_str, - "%s:%s", - dev->dev.graphics.host, - dev->dev.graphics.port); + "%s:%s", + dev->dev.graphics.dev.vnc.host, + dev->dev.graphics.dev.vnc.port); } CU_DEBUG("graphics Address = %s", addr_str); @@ -496,7 +496,7 @@ if (STREQC(dev->dev.graphics.type, "vnc")) { CMSetProperty(inst, "KeyMap", - (CMPIValue *)dev->dev.graphics.keymap, CMPI_chars); + (CMPIValue *)dev->dev.graphics.dev.vnc.keymap, CMPI_chars); conn = connect_by_classname(_BROKER, classname, &s); if (conn == NULL) @@ -511,7 +511,8 @@ goto out; } - if (dev->dev.graphics.passwd && strlen(dev->dev.graphics.passwd)) { + if (dev->dev.graphics.dev.vnc.passwd && + strlen(dev->dev.graphics.dev.vnc.passwd)) { CU_DEBUG("has password"); CMSetProperty(inst, "Password", (CMPIValue *)"********", CMPI_chars); diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Mon Jul 25 19:39:08 2011 +0800 @@ -370,10 +370,10 @@ } domain->dev_graphics->dev.graphics.type = strdup("vnc"); - domain->dev_graphics->dev.graphics.port = strdup("-1"); - domain->dev_graphics->dev.graphics.host = strdup("127.0.0.1"); - domain->dev_graphics->dev.graphics.keymap = strdup("en-us"); - domain->dev_graphics->dev.graphics.passwd = NULL; + domain->dev_graphics->dev.graphics.dev.vnc.port = strdup("-1"); + domain->dev_graphics->dev.graphics.dev.vnc.host = strdup("127.0.0.1"); + domain->dev_graphics->dev.graphics.dev.vnc.keymap = strdup("en-us"); + domain->dev_graphics->dev.graphics.dev.vnc.passwd = NULL; domain->dev_graphics_ct = 1; return true; @@ -1129,24 +1129,24 @@ } ret = parse_vnc_address(val, - &dev->dev.graphics.host, - &dev->dev.graphics.port); + &dev->dev.graphics.dev.vnc.host, + &dev->dev.graphics.dev.vnc.port); if (ret != 1) { msg = "GraphicsRASD field Address not valid"; goto out; } if (cu_get_str_prop(inst, "KeyMap", &val) != CMPI_RC_OK) - dev->dev.graphics.keymap = strdup("en-us"); + dev->dev.graphics.dev.vnc.keymap = strdup("en-us"); else - dev->dev.graphics.keymap = strdup(val); + dev->dev.graphics.dev.vnc.keymap = strdup(val); if (cu_get_str_prop(inst, "Password", &val) != CMPI_RC_OK) { CU_DEBUG("vnc password is not set"); - dev->dev.graphics.passwd = NULL; + dev->dev.graphics.dev.vnc.passwd = NULL; } else { CU_DEBUG("vnc password is set"); - dev->dev.graphics.passwd = strdup(val); + dev->dev.graphics.dev.vnc.passwd = strdup(val); } } else if (STREQC(dev->dev.graphics.type, "console") || @@ -1157,8 +1157,8 @@ } ret = parse_console_address(val, - &dev->dev.graphics.host, - &dev->dev.graphics.port); + &dev->dev.graphics.dev.vnc.host, + &dev->dev.graphics.dev.vnc.port); if (ret != 1) { msg = "GraphicsRASD field Address not valid"; goto out; @@ -1175,7 +1175,7 @@ ret = asprintf(&dev->id, "%s", dev->dev.graphics.type); else ret = asprintf(&dev->id, "%s:%s", - dev->dev.graphics.type, dev->dev.graphics.port); + dev->dev.graphics.type, dev->dev.graphics.dev.vnc.port); if (ret == -1) { msg = "Failed to create graphics is string";

+1 and pushed. On 08/11/2011 11:00 PM, Wayne Xia wrote:
# HG changeset patch # User Wayne Xia<xiawenc@linux.vnet.ibm.com> # Date 1311593948 -28800 # Node ID 03cc267a3d534f19eb489be3c430ea5de8787ccc # Parent 8b4f6d69f40904ced24f7948f04f89e770e37bce (#5) made the graphic structure as union
These change were made to allow SDL device properties added more clearly
#5 removed tailing space and some comments, added different free functions for graphic device.
Signed-off-by: Wayne Xia (Wayne)<xiawenc@linux.vnet.ibm.com>
diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/device_parsing.c Mon Jul 25 19:39:08 2011 +0800 @@ -88,13 +88,30 @@ free(dev->path); }
+static void cleanup_vnc_device(struct graphics_device *dev) +{ + free(dev->dev.vnc.port); + free(dev->dev.vnc.host); + free(dev->dev.vnc.keymap); + free(dev->dev.vnc.passwd); +} + +static void cleanup_sdl_device(struct graphics_device *dev) +{ + free(dev->dev.sdl.display); + free(dev->dev.sdl.xauth); + free(dev->dev.sdl.fullscreen); +} + static void cleanup_graphics_device(struct graphics_device *dev) { + if (STREQC(dev->type, "sdl")) { + cleanup_sdl_device(dev); + } + else { + cleanup_vnc_device(dev); + } free(dev->type); - free(dev->port); - free(dev->host); - free(dev->keymap); - free(dev->passwd); }
static void cleanup_input_device(struct input_device *dev) @@ -530,12 +547,12 @@ CU_DEBUG("graphics device type = %s", gdev->type);
if (STREQC(gdev->type, "vnc")) { - gdev->port = get_attr_value(node, "port"); - gdev->host = get_attr_value(node, "listen"); - gdev->keymap = get_attr_value(node, "keymap"); - gdev->passwd = get_attr_value(node, "passwd"); + gdev->dev.vnc.port = get_attr_value(node, "port"); + gdev->dev.vnc.host = get_attr_value(node, "listen"); + gdev->dev.vnc.keymap = get_attr_value(node, "keymap"); + gdev->dev.vnc.passwd = get_attr_value(node, "passwd");
- if (gdev->port == NULL || gdev->host == NULL) + if (gdev->dev.vnc.port == NULL || gdev->dev.vnc.host == NULL) goto err; } else if (STREQC(gdev->type, "pty")) { @@ -550,9 +567,9 @@ for (child = node->children; child != NULL; child = child->next) { if (XSTREQ(child->name, "source")) - gdev->host = get_attr_value(child, "path"); + gdev->dev.vnc.host = get_attr_value(child, "path"); else if (XSTREQ(child->name, "target")) - gdev->port = get_attr_value(child, "port"); + gdev->dev.vnc.port = get_attr_value(child, "port"); } } else { @@ -565,7 +582,7 @@ if (STREQC(gdev->type, "vnc")) ret = asprintf(&vdev->id, "%s", gdev->type); else - ret = asprintf(&vdev->id, "%s:%s", gdev->type, gdev->port); + ret = asprintf(&vdev->id, "%s:%s", gdev->type, gdev->dev.vnc.port);
if (ret == -1) { CU_DEBUG("Failed to create graphics is string"); @@ -807,10 +824,10 @@ DUP_FIELD(dev, _dev, dev.emu.path); } else if (dev->type == CIM_RES_TYPE_GRAPHICS) { DUP_FIELD(dev, _dev, dev.graphics.type); - DUP_FIELD(dev, _dev, dev.graphics.port); - DUP_FIELD(dev, _dev, dev.graphics.host); - DUP_FIELD(dev, _dev, dev.graphics.keymap); - DUP_FIELD(dev, _dev, dev.graphics.passwd); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.host); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.port); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.keymap); + DUP_FIELD(dev, _dev, dev.graphics.dev.vnc.passwd); } else if (dev->type == CIM_RES_TYPE_INPUT) { DUP_FIELD(dev, _dev, dev.input.type); DUP_FIELD(dev, _dev, dev.input.bus); diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/device_parsing.h --- a/libxkutil/device_parsing.h Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/device_parsing.h Mon Jul 25 19:39:08 2011 +0800 @@ -84,14 +84,27 @@ char *path; };
-struct graphics_device { - char *type; +struct vnc_device { char *port; char *host; char *keymap; char *passwd; };
+struct sdl_device { + char *display; + char *xauth; + char *fullscreen; +}; + +struct graphics_device { + char *type; + union { + struct vnc_device vnc; + struct sdl_device sdl; + } dev; +}; + struct input_device { char *type; char *bus; diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/xml_parse_test.c --- a/libxkutil/xml_parse_test.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/xml_parse_test.c Mon Jul 25 19:39:08 2011 +0800 @@ -116,7 +116,7 @@ FILE *d) { print_value(d, "Graphics Type", dev->dev.graphics.type); - print_value(d, "Graphics Port", dev->dev.graphics.port); + print_value(d, "Graphics Port", dev->dev.graphics.dev.vnc.port); }
static void print_devices(struct domain *dominfo, diff -r 8b4f6d69f409 -r 03cc267a3d53 libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Mon Aug 08 11:40:09 2011 -0700 +++ b/libxkutil/xmlgen.c Mon Jul 25 19:39:08 2011 +0800 @@ -424,22 +424,22 @@ if (STREQC(dev->type, "sdl")) return NULL;
- if (dev->port) { - xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->port); - if (STREQC(dev->port, "-1")) + if (dev->dev.vnc.port) { + xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port); + if (STREQC(dev->dev.vnc.port, "-1")) xmlNewProp(tmp, BAD_CAST "autoport", BAD_CAST "yes"); else xmlNewProp(tmp, BAD_CAST "autoport", BAD_CAST "no"); }
- if (dev->host) - xmlNewProp(tmp, BAD_CAST "listen", BAD_CAST dev->host); + if (dev->dev.vnc.host) + xmlNewProp(tmp, BAD_CAST "listen", BAD_CAST dev->dev.vnc.host);
- if (dev->passwd) - xmlNewProp(tmp, BAD_CAST "passwd", BAD_CAST dev->passwd); + if (dev->dev.vnc.passwd) + xmlNewProp(tmp, BAD_CAST "passwd", BAD_CAST dev->dev.vnc.passwd);
- if (dev->keymap) - xmlNewProp(tmp, BAD_CAST "keymap", BAD_CAST dev->keymap); + if (dev->dev.vnc.keymap) + xmlNewProp(tmp, BAD_CAST "keymap", BAD_CAST dev->dev.vnc.keymap);
return NULL; } @@ -459,16 +459,16 @@ tmp = xmlNewChild(pty, NULL, BAD_CAST "source", NULL); if (tmp == NULL) return XML_ERROR; - - if(dev->host) - xmlNewProp(tmp, BAD_CAST "path", BAD_CAST dev->host); + + 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->port) - xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->port); + + if(dev->dev.vnc.port) + xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port);
return NULL; } diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_ComputerSystem.c --- a/src/Virt_ComputerSystem.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_ComputerSystem.c Mon Jul 25 19:39:08 2011 +0800 @@ -104,7 +104,7 @@ "Virtual System (Console on %s://%s:%s)", domain->dev_graphics[0].dev.graphics.type, host, - domain->dev_graphics[0].dev.graphics.port); + domain->dev_graphics[0].dev.graphics.dev.vnc.port); else ret = asprintf(&cap, "Virtual System (No console)"); diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_Device.c --- a/src/Virt_Device.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_Device.c Mon Jul 25 19:39:08 2011 +0800 @@ -194,8 +194,8 @@ else rc = asprintf(&vp_str, "%s/%s:%s", dev->type, - dev->host, - dev->port); + dev->dev.vnc.host, + dev->dev.vnc.port); if (rc == -1) return 0;
diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_KVMRedirectionSAP.c --- a/src/Virt_KVMRedirectionSAP.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_KVMRedirectionSAP.c Mon Jul 25 19:39:08 2011 +0800 @@ -366,7 +366,7 @@ continue; }
- ret = sscanf(dominfo->dev_graphics->dev.graphics.port, + ret = sscanf(dominfo->dev_graphics->dev.graphics.dev.vnc.port, "%d", &lport); if (ret != 1) { diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_RASD.c --- a/src/Virt_RASD.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_RASD.c Mon Jul 25 19:39:08 2011 +0800 @@ -481,9 +481,9 @@ rc = asprintf(&addr_str, "%s", dev->dev.graphics.type); else { rc = asprintf(&addr_str, - "%s:%s", - dev->dev.graphics.host, - dev->dev.graphics.port); + "%s:%s", + dev->dev.graphics.dev.vnc.host, + dev->dev.graphics.dev.vnc.port); }
CU_DEBUG("graphics Address = %s", addr_str); @@ -496,7 +496,7 @@
if (STREQC(dev->dev.graphics.type, "vnc")) { CMSetProperty(inst, "KeyMap", - (CMPIValue *)dev->dev.graphics.keymap, CMPI_chars); + (CMPIValue *)dev->dev.graphics.dev.vnc.keymap, CMPI_chars);
conn = connect_by_classname(_BROKER, classname,&s); if (conn == NULL) @@ -511,7 +511,8 @@ goto out; }
- if (dev->dev.graphics.passwd&& strlen(dev->dev.graphics.passwd)) { + if (dev->dev.graphics.dev.vnc.passwd&& + strlen(dev->dev.graphics.dev.vnc.passwd)) { CU_DEBUG("has password"); CMSetProperty(inst, "Password", (CMPIValue *)"********", CMPI_chars); diff -r 8b4f6d69f409 -r 03cc267a3d53 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Aug 08 11:40:09 2011 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Mon Jul 25 19:39:08 2011 +0800 @@ -370,10 +370,10 @@ }
domain->dev_graphics->dev.graphics.type = strdup("vnc"); - domain->dev_graphics->dev.graphics.port = strdup("-1"); - domain->dev_graphics->dev.graphics.host = strdup("127.0.0.1"); - domain->dev_graphics->dev.graphics.keymap = strdup("en-us"); - domain->dev_graphics->dev.graphics.passwd = NULL; + domain->dev_graphics->dev.graphics.dev.vnc.port = strdup("-1"); + domain->dev_graphics->dev.graphics.dev.vnc.host = strdup("127.0.0.1"); + domain->dev_graphics->dev.graphics.dev.vnc.keymap = strdup("en-us"); + domain->dev_graphics->dev.graphics.dev.vnc.passwd = NULL; domain->dev_graphics_ct = 1;
return true; @@ -1129,24 +1129,24 @@ }
ret = parse_vnc_address(val, -&dev->dev.graphics.host, -&dev->dev.graphics.port); +&dev->dev.graphics.dev.vnc.host, +&dev->dev.graphics.dev.vnc.port); if (ret != 1) { msg = "GraphicsRASD field Address not valid"; goto out; }
if (cu_get_str_prop(inst, "KeyMap",&val) != CMPI_RC_OK) - dev->dev.graphics.keymap = strdup("en-us"); + dev->dev.graphics.dev.vnc.keymap = strdup("en-us"); else - dev->dev.graphics.keymap = strdup(val); + dev->dev.graphics.dev.vnc.keymap = strdup(val);
if (cu_get_str_prop(inst, "Password",&val) != CMPI_RC_OK) { CU_DEBUG("vnc password is not set"); - dev->dev.graphics.passwd = NULL; + dev->dev.graphics.dev.vnc.passwd = NULL; } else { CU_DEBUG("vnc password is set"); - dev->dev.graphics.passwd = strdup(val); + dev->dev.graphics.dev.vnc.passwd = strdup(val); } } else if (STREQC(dev->dev.graphics.type, "console") || @@ -1157,8 +1157,8 @@ }
ret = parse_console_address(val, -&dev->dev.graphics.host, -&dev->dev.graphics.port); +&dev->dev.graphics.dev.vnc.host, +&dev->dev.graphics.dev.vnc.port); if (ret != 1) { msg = "GraphicsRASD field Address not valid"; goto out; @@ -1175,7 +1175,7 @@ ret = asprintf(&dev->id, "%s", dev->dev.graphics.type); else ret = asprintf(&dev->id, "%s:%s", - dev->dev.graphics.type, dev->dev.graphics.port); + dev->dev.graphics.type, dev->dev.graphics.dev.vnc.port);
if (ret == -1) { msg = "Failed to create graphics is string";
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Chip Vincent Open Virtualization IBM Linux Technology Center cvincent@linux.vnet.ibm.com

# HG changeset patch # User Wayne Xia <xiawenc@linux.vnet.ibm.com> # Date 1311670971 -28800 # Node ID 80f69bdadfe2ffe057873f4c0f6c8d6a0ef60816 # Parent 03cc267a3d534f19eb489be3c430ea5de8787ccc (#5) add sdl frame buffer support. Now libvirt still supports sdl frame buffer, and it may take three parameters: display,xauth,fullscreen. This patch enable the libvirt-cim to accept these configuration and pass them in XML define to let libvirt know about it. Exposed interface could be found in the file ResourceAllocationSettingData.mof. This Patch also fix some memory leak problem. #5 fixed the memory leak problem in Virt_VirtualSystemManagementService.c. Signed-off-by: Wayne Xia (Wayne) <xiawenc@linux.vnet.ibm.com> diff -r 03cc267a3d53 -r 80f69bdadfe2 libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Mon Jul 25 19:39:08 2011 +0800 +++ b/libxkutil/device_parsing.c Tue Jul 26 17:02:51 2011 +0800 @@ -555,6 +555,11 @@ if (gdev->dev.vnc.port == NULL || gdev->dev.vnc.host == NULL) goto err; } + else if (STREQC(gdev->type, "sdl")) { + gdev->dev.sdl.display = get_attr_value(node, "display"); + gdev->dev.sdl.xauth = get_attr_value(node, "xauth"); + gdev->dev.sdl.fullscreen = get_attr_value(node, "fullscreen"); + } else if (STREQC(gdev->type, "pty")) { if (node->name == NULL) goto err; diff -r 03cc267a3d53 -r 80f69bdadfe2 libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Mon Jul 25 19:39:08 2011 +0800 +++ b/libxkutil/xmlgen.c Tue Jul 26 17:02:51 2011 +0800 @@ -421,8 +421,21 @@ xmlNewProp(tmp, BAD_CAST "type", BAD_CAST dev->type); - if (STREQC(dev->type, "sdl")) - return NULL; + if (STREQC(dev->type, "sdl")) { + if (dev->dev.sdl.display) { + xmlNewProp(tmp, BAD_CAST "display", + BAD_CAST dev->dev.sdl.display); + } + if (dev->dev.sdl.xauth) { + xmlNewProp(tmp, BAD_CAST "xauth", + BAD_CAST dev->dev.sdl.xauth); + } + if (dev->dev.sdl.fullscreen) { + xmlNewProp(tmp, BAD_CAST "fullscreen", + BAD_CAST dev->dev.sdl.fullscreen); + } + return NULL; + } if (dev->dev.vnc.port) { xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port); diff -r 03cc267a3d53 -r 80f69bdadfe2 schema/ResourceAllocationSettingData.mof --- a/schema/ResourceAllocationSettingData.mof Mon Jul 25 19:39:08 2011 +0800 +++ b/schema/ResourceAllocationSettingData.mof Tue Jul 26 17:02:51 2011 +0800 @@ -219,7 +219,9 @@ [Description ("If ResourceSubType is 'vnc', this is a VNC Address. " "IPv4 in a.b.c.d:port or IPv6 in [ip]:port format. If ResourceSubType " "is 'console', this is a character device path in " - "path:port format (e.g., '/dev/pts/3:0'\)")] + "path:port format (e.g., '/dev/pts/3:0'\) " + "if ResourceSubType is 'sdl', this is a combination of its params as " + "xauth:display (e.g., '/root/.Xauthority::0'\)")] string Address; [Description ("Keyboard keymapping")] @@ -228,7 +230,8 @@ [Description ("VNC password")] string Password; - [Description ("Is IPv6 only addressing is to be used")] + [Description ("Is IPv6 only addressing is to be used." + "if ResourceSubType is 'sdl', this means whether sdl is fullscreen")] boolean IsIPv6Only; }; diff -r 03cc267a3d53 -r 80f69bdadfe2 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Jul 25 19:39:08 2011 +0800 +++ b/src/Virt_VirtualSystemManagementService.c Tue Jul 26 17:02:51 2011 +0800 @@ -1057,6 +1057,58 @@ CU_DEBUG("Exiting parse_console_address, ip is %s, port is %s", *path, *port); + free(tmp_path); + free(tmp_port); + + return ret; +} + +static int parse_sdl_address(const char *id, + char **display, + char **xauth) +{ + int ret; + char *tmp_display = NULL; + char *tmp_xauth = NULL; + + CU_DEBUG("Entering parse_sdl_address, address is %s", id); + + ret = sscanf(id, "%a[^:]:%as", &tmp_xauth, &tmp_display); + + if (ret <= 0) { + ret = sscanf(id, ":%as", &tmp_display); + if (ret <= 0) { + if (STREQC(id, ":")) { + /* do nothing, it is empty */ + } + else { + ret = 0; + goto out; + } + } + } + + if (display) { + if (tmp_display == NULL) + *display = NULL; + else + *display = strdup(tmp_display); + } + if (xauth) { + if (tmp_xauth == NULL) + *xauth = NULL; + else + *xauth = strdup(tmp_xauth); + } + ret = 1; + + out: + CU_DEBUG("Exiting parse_sdl_address, display is %s, xauth is %s", + *display, *xauth); + + free(tmp_display); + free(tmp_xauth); + return ret; } @@ -1094,6 +1146,9 @@ CU_DEBUG("Exiting parse_vnc_address, ip is %s, port is %s", *ip, *port); + free(tmp_ip); + free(tmp_port); + return ret; } @@ -1163,6 +1218,30 @@ msg = "GraphicsRASD field Address not valid"; goto out; } + } + else if (STREQC(dev->dev.graphics.type, "sdl")) { + if (cu_get_str_prop(inst, "Address", &val) != CMPI_RC_OK) { + CU_DEBUG("sdl graphics Address empty, using default"); + dev->dev.graphics.dev.sdl.display = NULL; + dev->dev.graphics.dev.sdl.xauth = NULL; + } + else { + ret = parse_sdl_address(val, + &dev->dev.graphics.dev.sdl.display, + &dev->dev.graphics.dev.sdl.xauth); + if (ret != 1) { + msg = "GraphicsRASD sdl Address not valid"; + goto out; + } + } + dev->dev.graphics.dev.sdl.fullscreen = NULL; + if (cu_get_bool_prop(inst, "IsIPV6Only", &ipv6) == + CMPI_RC_OK) { + if (ipv6) + dev->dev.graphics.dev.sdl.fullscreen = strdup("yes"); + else + dev->dev.graphics.dev.sdl.fullscreen = strdup("no"); + } } else { CU_DEBUG("Unsupported graphics type %s", dev->dev.graphics.type); @@ -1171,7 +1250,8 @@ } free(dev->id); - if (STREQC(dev->dev.graphics.type, "vnc")) + if ((STREQC(dev->dev.graphics.type, "vnc"))|| + (STREQC(dev->dev.graphics.type, "sdl"))) ret = asprintf(&dev->id, "%s", dev->dev.graphics.type); else ret = asprintf(&dev->id, "%s:%s",

+1 and pushed. On 08/11/2011 11:00 PM, Wayne Xia wrote:
# HG changeset patch # User Wayne Xia<xiawenc@linux.vnet.ibm.com> # Date 1311670971 -28800 # Node ID 80f69bdadfe2ffe057873f4c0f6c8d6a0ef60816 # Parent 03cc267a3d534f19eb489be3c430ea5de8787ccc (#5) add sdl frame buffer support.
Now libvirt still supports sdl frame buffer, and it may take three parameters: display,xauth,fullscreen. This patch enable the libvirt-cim to accept these configuration and pass them in XML define to let libvirt know about it. Exposed interface could be found in the file ResourceAllocationSettingData.mof. This Patch also fix some memory leak problem.
#5 fixed the memory leak problem in Virt_VirtualSystemManagementService.c.
Signed-off-by: Wayne Xia (Wayne)<xiawenc@linux.vnet.ibm.com>
diff -r 03cc267a3d53 -r 80f69bdadfe2 libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Mon Jul 25 19:39:08 2011 +0800 +++ b/libxkutil/device_parsing.c Tue Jul 26 17:02:51 2011 +0800 @@ -555,6 +555,11 @@ if (gdev->dev.vnc.port == NULL || gdev->dev.vnc.host == NULL) goto err; } + else if (STREQC(gdev->type, "sdl")) { + gdev->dev.sdl.display = get_attr_value(node, "display"); + gdev->dev.sdl.xauth = get_attr_value(node, "xauth"); + gdev->dev.sdl.fullscreen = get_attr_value(node, "fullscreen"); + } else if (STREQC(gdev->type, "pty")) { if (node->name == NULL) goto err; diff -r 03cc267a3d53 -r 80f69bdadfe2 libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Mon Jul 25 19:39:08 2011 +0800 +++ b/libxkutil/xmlgen.c Tue Jul 26 17:02:51 2011 +0800 @@ -421,8 +421,21 @@
xmlNewProp(tmp, BAD_CAST "type", BAD_CAST dev->type);
- if (STREQC(dev->type, "sdl")) - return NULL; + if (STREQC(dev->type, "sdl")) { + if (dev->dev.sdl.display) { + xmlNewProp(tmp, BAD_CAST "display", + BAD_CAST dev->dev.sdl.display); + } + if (dev->dev.sdl.xauth) { + xmlNewProp(tmp, BAD_CAST "xauth", + BAD_CAST dev->dev.sdl.xauth); + } + if (dev->dev.sdl.fullscreen) { + xmlNewProp(tmp, BAD_CAST "fullscreen", + BAD_CAST dev->dev.sdl.fullscreen); + } + return NULL; + }
if (dev->dev.vnc.port) { xmlNewProp(tmp, BAD_CAST "port", BAD_CAST dev->dev.vnc.port); diff -r 03cc267a3d53 -r 80f69bdadfe2 schema/ResourceAllocationSettingData.mof --- a/schema/ResourceAllocationSettingData.mof Mon Jul 25 19:39:08 2011 +0800 +++ b/schema/ResourceAllocationSettingData.mof Tue Jul 26 17:02:51 2011 +0800 @@ -219,7 +219,9 @@ [Description ("If ResourceSubType is 'vnc', this is a VNC Address. " "IPv4 in a.b.c.d:port or IPv6 in [ip]:port format. If ResourceSubType " "is 'console', this is a character device path in " - "path:port format (e.g., '/dev/pts/3:0'\)")] + "path:port format (e.g., '/dev/pts/3:0'\) " + "if ResourceSubType is 'sdl', this is a combination of its params as " + "xauth:display (e.g., '/root/.Xauthority::0'\)")] string Address;
[Description ("Keyboard keymapping")] @@ -228,7 +230,8 @@ [Description ("VNC password")] string Password;
- [Description ("Is IPv6 only addressing is to be used")] + [Description ("Is IPv6 only addressing is to be used." + "if ResourceSubType is 'sdl', this means whether sdl is fullscreen")] boolean IsIPv6Only; };
diff -r 03cc267a3d53 -r 80f69bdadfe2 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Jul 25 19:39:08 2011 +0800 +++ b/src/Virt_VirtualSystemManagementService.c Tue Jul 26 17:02:51 2011 +0800 @@ -1057,6 +1057,58 @@ CU_DEBUG("Exiting parse_console_address, ip is %s, port is %s", *path, *port);
+ free(tmp_path); + free(tmp_port); + + return ret; +} + +static int parse_sdl_address(const char *id, + char **display, + char **xauth) +{ + int ret; + char *tmp_display = NULL; + char *tmp_xauth = NULL; + + CU_DEBUG("Entering parse_sdl_address, address is %s", id); + + ret = sscanf(id, "%a[^:]:%as",&tmp_xauth,&tmp_display); + + if (ret<= 0) { + ret = sscanf(id, ":%as",&tmp_display); + if (ret<= 0) { + if (STREQC(id, ":")) { + /* do nothing, it is empty */ + } + else { + ret = 0; + goto out; + } + } + } + + if (display) { + if (tmp_display == NULL) + *display = NULL; + else + *display = strdup(tmp_display); + } + if (xauth) { + if (tmp_xauth == NULL) + *xauth = NULL; + else + *xauth = strdup(tmp_xauth); + } + ret = 1; + + out: + CU_DEBUG("Exiting parse_sdl_address, display is %s, xauth is %s", + *display, *xauth); + + free(tmp_display); + free(tmp_xauth); + return ret; }
@@ -1094,6 +1146,9 @@ CU_DEBUG("Exiting parse_vnc_address, ip is %s, port is %s", *ip, *port);
+ free(tmp_ip); + free(tmp_port); + return ret; }
@@ -1163,6 +1218,30 @@ msg = "GraphicsRASD field Address not valid"; goto out; } + } + else if (STREQC(dev->dev.graphics.type, "sdl")) { + if (cu_get_str_prop(inst, "Address",&val) != CMPI_RC_OK) { + CU_DEBUG("sdl graphics Address empty, using default"); + dev->dev.graphics.dev.sdl.display = NULL; + dev->dev.graphics.dev.sdl.xauth = NULL; + } + else { + ret = parse_sdl_address(val, +&dev->dev.graphics.dev.sdl.display, +&dev->dev.graphics.dev.sdl.xauth); + if (ret != 1) { + msg = "GraphicsRASD sdl Address not valid"; + goto out; + } + } + dev->dev.graphics.dev.sdl.fullscreen = NULL; + if (cu_get_bool_prop(inst, "IsIPV6Only",&ipv6) == + CMPI_RC_OK) { + if (ipv6) + dev->dev.graphics.dev.sdl.fullscreen = strdup("yes"); + else + dev->dev.graphics.dev.sdl.fullscreen = strdup("no"); + } } else { CU_DEBUG("Unsupported graphics type %s", dev->dev.graphics.type); @@ -1171,7 +1250,8 @@ }
free(dev->id); - if (STREQC(dev->dev.graphics.type, "vnc")) + if ((STREQC(dev->dev.graphics.type, "vnc"))|| + (STREQC(dev->dev.graphics.type, "sdl"))) ret = asprintf(&dev->id, "%s", dev->dev.graphics.type); else ret = asprintf(&dev->id, "%s:%s",
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Chip Vincent Open Virtualization IBM Linux Technology Center cvincent@linux.vnet.ibm.com
participants (2)
-
Chip Vincent
-
Wayne Xia