static int testCompareXMLToXMLFiles(const char *xml) { char *xmlData = NULL; char *actual = NULL; int ret = -1; virNodeDeviceDefPtr dev = NULL; if (virtTestLoadFile(xml, &xmlData) < 0) goto fail; if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL))) goto fail; if (!(actual = virNodeDeviceDefFormat(dev))) goto fail; if (STRNEQ(xmlData, actual)) { virtTestDifferenceFull(stderr, xmlData, xml, actual, NULL); goto fail; } ret = 0; fail: VIR_FREE(xmlData); VIR_FREE(actual); virNodeDeviceDefFree(dev); return ret; }
virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags) { virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; virNodeDeviceDefPtr def = NULL; char *wwnn = NULL, *wwpn = NULL; int parent_host = -1; virNodeDevicePtr dev = NULL; const char *virt_type = NULL; virCheckFlags(0, NULL); virt_type = virConnectGetType(conn); nodeDeviceLock(driver); def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt_type); if (def == NULL) { goto cleanup; } if (virNodeDeviceCreateXMLEnsureACL(conn, def) < 0) goto cleanup; if (virNodeDeviceGetWWNs(def, &wwnn, &wwpn) == -1) { goto cleanup; } if (virNodeDeviceGetParentHost(&driver->devs, def->name, def->parent, &parent_host) == -1) { goto cleanup; } if (virManageVport(parent_host, wwpn, wwnn, VPORT_CREATE) == -1) { goto cleanup; } dev = find_new_device(conn, wwnn, wwpn); /* We don't check the return value, because one way or another, * we're returning what we get... */ if (dev == NULL) { virReportError(VIR_ERR_NO_NODE_DEVICE, NULL); } cleanup: nodeDeviceUnlock(driver); virNodeDeviceDefFree(def); VIR_FREE(wwnn); VIR_FREE(wwpn); return dev; }
static int testCompareXMLToXMLFiles(const char *xml) { char *xmlData = NULL; char *actual = NULL; int ret = -1; virNodeDeviceDefPtr dev = NULL; virNodeDevCapsDefPtr caps; if (virTestLoadFile(xml, &xmlData) < 0) goto fail; if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL))) goto fail; /* Calculate some things that are not read in */ for (caps = dev->caps; caps; caps = caps->next) { virNodeDevCapDataPtr data = &caps->data; if (caps->data.type == VIR_NODE_DEV_CAP_STORAGE) { if (data->storage.flags & VIR_NODE_DEV_CAP_STORAGE_REMOVABLE) { if (data->storage.flags & VIR_NODE_DEV_CAP_STORAGE_REMOVABLE_MEDIA_AVAILABLE) { data->storage.logical_block_size = 2048; data->storage.num_blocks = data->storage.removable_media_size / data->storage.logical_block_size; } } else { data->storage.logical_block_size = 512; data->storage.num_blocks = data->storage.size / data->storage.logical_block_size; } } } if (!(actual = virNodeDeviceDefFormat(dev))) goto fail; if (STRNEQ(xmlData, actual)) { virTestDifferenceFull(stderr, xmlData, xml, actual, NULL); goto fail; } ret = 0; fail: VIR_FREE(xmlData); VIR_FREE(actual); virNodeDeviceDefFree(dev); return ret; }
static virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = conn->devMonPrivateData; virNodeDeviceDefPtr def = NULL; char *wwnn = NULL, *wwpn = NULL; int parent_host = -1; virNodeDevicePtr dev = NULL; nodeDeviceLock(driver); def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE); if (def == NULL) { goto cleanup; } if (virNodeDeviceGetWWNs(def, &wwnn, &wwpn) == -1) { goto cleanup; } if (virNodeDeviceGetParentHost(&driver->devs, def->name, def->parent, &parent_host) == -1) { goto cleanup; } if (nodeDeviceVportCreateDelete(parent_host, wwpn, wwnn, VPORT_CREATE) == -1) { goto cleanup; } dev = find_new_device(conn, wwnn, wwpn); /* We don't check the return value, because one way or another, * we're returning what we get... */ if (dev == NULL) { virNodeDeviceReportError(VIR_ERR_NO_NODE_DEVICE, NULL); } cleanup: nodeDeviceUnlock(driver); virNodeDeviceDefFree(def); VIR_FREE(wwnn); VIR_FREE(wwpn); return dev; }
virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags) { virNodeDeviceDefPtr def = NULL; char *wwnn = NULL, *wwpn = NULL; int parent_host = -1; virNodeDevicePtr dev = NULL; const char *virt_type = NULL; virCheckFlags(0, NULL); virt_type = virConnectGetType(conn); nodeDeviceLock(); if (!(def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt_type))) goto cleanup; if (virNodeDeviceCreateXMLEnsureACL(conn, def) < 0) goto cleanup; if (virNodeDeviceGetWWNs(def, &wwnn, &wwpn) == -1) goto cleanup; if ((parent_host = virNodeDeviceObjGetParentHost(&driver->devs, def, CREATE_DEVICE)) < 0) goto cleanup; if (virVHBAManageVport(parent_host, wwpn, wwnn, VPORT_CREATE) < 0) goto cleanup; dev = nodeDeviceFindNewDevice(conn, wwnn, wwpn); /* We don't check the return value, because one way or another, * we're returning what we get... */ if (dev == NULL) virReportError(VIR_ERR_NO_NODE_DEVICE, _("no node device for '%s' with matching " "wwnn '%s' and wwpn '%s'"), def->name, wwnn, wwpn); cleanup: nodeDeviceUnlock(); virNodeDeviceDefFree(def); VIR_FREE(wwnn); VIR_FREE(wwpn); return dev; }