[PATCH 0 of 3] (#3) Add graphics device support to VSMS

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1225319502 25200 # Node ID 371b42401b1ca462f9c485c6cf5af4873e0185e5 # Parent 0741392902634278daf88655883ce5f97f79ffea (#3) Add count field to dominfo. Add keymap support for graphics devices. Not really needed, but allows VSMS to treat this device in the same manner the other devices are treated. Updates from 2 to 3: -Change KeyMapping attribute to KeyMap Updates from 1 to 2: -Add KeyMapping attribute to GraphicsRASD - use this instead of ResourceSubType to store mapping. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 074139290263 -r 371b42401b1c libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Wed Nov 19 13:49:35 2008 -0800 +++ b/libxkutil/device_parsing.c Wed Oct 29 15:31:42 2008 -0700 @@ -926,8 +926,9 @@ goto err; parse_devices(xml, &(*dominfo)->dev_emu, CIM_RES_TYPE_EMU); - parse_devices(xml, &(*dominfo)->dev_graphics, CIM_RES_TYPE_GRAPHICS); - + (*dominfo)->dev_graphics_ct = parse_devices(xml, + &(*dominfo)->dev_graphics, + CIM_RES_TYPE_GRAPHICS); (*dominfo)->dev_input_ct = parse_devices(xml, &(*dominfo)->dev_input, CIM_RES_TYPE_INPUT); @@ -1000,6 +1001,7 @@ cleanup_virt_devices(&dom->dev_net, dom->dev_net_ct); cleanup_virt_devices(&dom->dev_disk, dom->dev_disk_ct); cleanup_virt_devices(&dom->dev_vcpu, dom->dev_vcpu_ct); + cleanup_virt_devices(&dom->dev_graphics, dom->dev_graphics_ct); cleanup_virt_devices(&dom->dev_input, dom->dev_input_ct); free(dom); diff -r 074139290263 -r 371b42401b1c libxkutil/device_parsing.h --- a/libxkutil/device_parsing.h Wed Nov 19 13:49:35 2008 -0800 +++ b/libxkutil/device_parsing.h Wed Oct 29 15:31:42 2008 -0700 @@ -125,6 +125,8 @@ int on_crash; struct virt_device *dev_graphics; + int dev_graphics_ct; + struct virt_device *dev_emu; struct virt_device *dev_input; diff -r 074139290263 -r 371b42401b1c libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Wed Nov 19 13:49:35 2008 -0800 +++ b/libxkutil/xmlgen.c Wed Oct 29 15:31:42 2008 -0700 @@ -703,7 +703,7 @@ if (dominfo->dev_graphics) concat_devxml(&devxml, dominfo->dev_graphics, - 1, + dominfo->dev_graphics_ct, graphics_to_xml); console_xml(dominfo, &devxml); diff -r 074139290263 -r 371b42401b1c schema/ResourceAllocationSettingData.mof --- a/schema/ResourceAllocationSettingData.mof Wed Nov 19 13:49:35 2008 -0800 +++ b/schema/ResourceAllocationSettingData.mof Wed Oct 29 15:31:42 2008 -0700 @@ -117,6 +117,8 @@ ] class Xen_GraphicsResourceAllocationSettingData : Xen_ResourceAllocationSettingData { + [Description ("Keyboard keymapping")] + string KeyMap; }; [Description ("KVM virtual graphics device"), @@ -124,6 +126,8 @@ ] class KVM_GraphicsResourceAllocationSettingData : KVM_ResourceAllocationSettingData { + [Description ("Keyboard keymapping")] + string KeyMap; }; [Description ("LXC virtual graphics device"), @@ -131,6 +135,8 @@ ] class LXC_GraphicsResourceAllocationSettingData : LXC_ResourceAllocationSettingData { + [Description ("Keyboard keymapping")] + string KeyMap; }; [Description ("Xen virtual input device"), diff -r 074139290263 -r 371b42401b1c src/Virt_RASD.c --- a/src/Virt_RASD.c Wed Nov 19 13:49:35 2008 -0800 +++ b/src/Virt_RASD.c Wed Oct 29 15:31:42 2008 -0700 @@ -279,6 +279,8 @@ } CMSetProperty(inst, "Address", (CMPIValue *)addr_str, CMPI_chars); + CMSetProperty(inst, "KeyMap", + (CMPIValue *)dev->dev.graphics.keymap, CMPI_chars); out: free(addr_str); diff -r 074139290263 -r 371b42401b1c src/Virt_SettingsDefineCapabilities.c --- a/src/Virt_SettingsDefineCapabilities.c Wed Nov 19 13:49:35 2008 -0800 +++ b/src/Virt_SettingsDefineCapabilities.c Wed Oct 29 15:31:42 2008 -0700 @@ -748,6 +748,8 @@ addr = "127.0.0.1:-1"; CMSetProperty(inst, "Address", (CMPIValue *)addr, CMPI_chars); + CMSetProperty(inst, "KeyMap", (CMPIValue *)"en-us", CMPI_chars); + inst_list_add(list, inst); out:

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1225319502 25200 # Node ID a2adbfbbd6343451bffb739cb503f2e942ad5c94 # Parent 371b42401b1ca462f9c485c6cf5af4873e0185e5 (#3) Add graphics device support to VSMS. Updates from 2 to 3: -Pass struct values directly to parse_id() -Change KeyMapping to KeyMap Updates from 1 to 2: -Remove double strdup in graphics_rasd_to_vdev() -parse_id() returns an int - check return appropriately Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 371b42401b1c -r a2adbfbbd634 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Wed Oct 29 15:31:42 2008 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Wed Oct 29 15:31:42 2008 -0700 @@ -211,8 +211,7 @@ return 1; } -static bool default_graphics_device(CMPIInstance *inst, - struct domain *domain) +static bool default_graphics_device(struct domain *domain) { free(domain->dev_graphics); domain->dev_graphics = calloc(1, sizeof(*domain->dev_graphics)); @@ -223,6 +222,19 @@ 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_ct = 1; + + return true; +} + +static bool add_default_devs(struct domain *domain) +{ + if (domain->dev_graphics_ct != 1) { + if (!default_graphics_device(domain)) + return false; + } return true; } @@ -275,9 +287,6 @@ else { CU_DEBUG("Unknown domain prefix: %s", pfx); } - - if (!default_graphics_device(inst, domain)) - ret = 0; out: free(pfx); @@ -554,6 +563,40 @@ return NULL; } +static const char *graphics_rasd_to_vdev(CMPIInstance *inst, + struct virt_device *dev) +{ + const char *val; + const char *msg = NULL; + const char *keymap; + int ret; + + dev->dev.graphics.type = strdup("vnc"); + + /* FIXME: Add logic to prevent address:port collisions */ + if (cu_get_str_prop(inst, "Address", &val) != CMPI_RC_OK) { + dev->dev.graphics.port = strdup("-1"); + dev->dev.graphics.host = strdup("127.0.0.1"); + } else { + ret = parse_id(val, + &dev->dev.graphics.host, + &dev->dev.graphics.port); + if (ret != 1) { + msg = "GraphicsRASD field Address not valid"; + goto out; + } + } + + if (cu_get_str_prop(inst, "KeyMap", &keymap) != CMPI_RC_OK) + keymap = "en-us"; + + dev->dev.graphics.keymap = strdup(keymap); + + out: + + return msg; +} + static const char *_sysvirt_rasd_to_vdev(CMPIInstance *inst, struct virt_device *dev, uint16_t type, @@ -567,6 +610,8 @@ return mem_rasd_to_vdev(inst, dev); } else if (type == CIM_RES_TYPE_PROC) { return proc_rasd_to_vdev(inst, dev); + } else if (type == CIM_RES_TYPE_GRAPHICS) { + return graphics_rasd_to_vdev(inst, dev); } return "Resource type not supported on this platform"; @@ -585,6 +630,8 @@ return net_rasd_to_vdev(inst, dev, ns); } else if (type == CIM_RES_TYPE_PROC) { return lxc_proc_rasd_to_vdev(inst, dev); + } else if (type == CIM_RES_TYPE_GRAPHICS) { + return graphics_rasd_to_vdev(inst, dev); } return "Resource type not supported on this platform"; @@ -688,6 +735,9 @@ if (!make_space(&domain->dev_net, domain->dev_net_ct, count)) return "Failed to alloc net list"; + if (!make_space(&domain->dev_graphics, domain->dev_graphics_ct, count)) + return "Failed to alloc graphics list"; + for (i = 0; i < count; i++) { CMPIObjectPath *op; CMPIData item; @@ -748,6 +798,12 @@ domain->dev_net, ncount, &domain->dev_net_ct); + } else if (type == CIM_RES_TYPE_GRAPHICS) { + domain->dev_graphics_ct = 1; + msg = rasd_to_vdev(inst, + domain, + &domain->dev_graphics[0], + ns); } if (msg != NULL) return msg; @@ -993,6 +1049,14 @@ goto out; } + if (!add_default_devs(domain)) { + CU_DEBUG("Failed to add default devices"); + cu_statusf(_BROKER, s, + CMPI_RC_ERR_FAILED, + "ResourceSettings Error"); + goto out; + } + xml = system_to_xml(domain); CU_DEBUG("System XML:\n%s", xml); @@ -1264,6 +1328,9 @@ } else if (type == CIM_RES_TYPE_MEM) { list = &dominfo->dev_mem; *count = &dominfo->dev_mem_ct; + } else if (type == CIM_RES_TYPE_GRAPHICS) { + list = &dominfo->dev_graphics; + *count = &dominfo->dev_graphics_ct; } return list;

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1225319502 25200 # Node ID 0d565002b6b2f75da0aebba6a6686b566e0d0889 # Parent a2adbfbbd6343451bffb739cb503f2e942ad5c94 (#2) Handle add/remove/modify support for graphics devices There's not dynamic update support for graphics devices. If a user add/removes/updates a graphics device while the guest is running, the changes aren't picked up until the guest is restarted. Updates from 1 to 2: -Fix typo in error message Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r a2adbfbbd634 -r 0d565002b6b2 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Wed Oct 29 15:31:42 2008 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Wed Oct 29 15:31:42 2008 -0700 @@ -1447,11 +1447,16 @@ struct virt_device *dev = &list[i]; if (STREQ(dev->id, devid)) { - s = _resource_dynamic(dominfo, - dev, - RESOURCE_DEL, - CLASSNAME(op)); dev->type = CIM_RES_TYPE_UNKNOWN; + + if (type == CIM_RES_TYPE_GRAPHICS) + cu_statusf(_BROKER, &s, CMPI_RC_OK, ""); + else { + s = _resource_dynamic(dominfo, + dev, + RESOURCE_DEL, + CLASSNAME(op)); + } break; } } @@ -1496,6 +1501,13 @@ goto out; } + if ((type == CIM_RES_TYPE_GRAPHICS) && (*count > 0)) { + cu_statusf(_BROKER, &s, + CMPI_RC_ERR_FAILED, + "A resource already exists for type %" PRIu16, type); + goto out; + } + list = realloc(*_list, ((*count)+1)*sizeof(struct virt_device)); if (list == NULL) { /* No memory */ @@ -1512,6 +1524,12 @@ dev->type = type; rasd_to_vdev(rasd, dominfo, dev, ns); + + if (type == CIM_RES_TYPE_GRAPHICS) { + (*count)++; + cu_statusf(_BROKER, &s, CMPI_RC_OK, ""); + goto out; + } s = _resource_dynamic(dominfo, dev, RESOURCE_ADD, CLASSNAME(op)); if (s.rc != CMPI_RC_OK) @@ -1569,10 +1587,15 @@ if (STREQ(dev->id, devid)) { rasd_to_vdev(rasd, dominfo, dev, ns); - s = _resource_dynamic(dominfo, - dev, - RESOURCE_MOD, - CLASSNAME(op)); + + if (type == CIM_RES_TYPE_GRAPHICS) + cu_statusf(_BROKER, &s, CMPI_RC_OK, ""); + else { + s = _resource_dynamic(dominfo, + dev, + RESOURCE_MOD, + CLASSNAME(op)); + } break; } }
participants (1)
-
Kaitlin Rupert