static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, unsigned int flags) { char *inXmlData = NULL; char *outXmlData = NULL; char *actual = NULL; int ret = -1; virNetworkDefPtr dev = NULL; if (virtTestLoadFile(inxml, &inXmlData) < 0) goto fail; if (virtTestLoadFile(outxml, &outXmlData) < 0) goto fail; if (!(dev = virNetworkDefParseString(inXmlData))) goto fail; if (!(actual = virNetworkDefFormat(dev, flags))) goto fail; if (STRNEQ(outXmlData, actual)) { virtTestDifference(stderr, outXmlData, actual); goto fail; } ret = 0; fail: VIR_FREE(inXmlData); VIR_FREE(outXmlData); VIR_FREE(actual); virNetworkDefFree(dev); return ret; }
static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) { char inXmlData[MAX_FILE]; char *inXmlPtr = &(inXmlData[0]); char outXmlData[MAX_FILE]; char *outXmlPtr = &(outXmlData[0]); char *actual = NULL; int ret = -1; virNetworkDefPtr dev = NULL; if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0) goto fail; if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0) goto fail; if (!(dev = virNetworkDefParseString(inXmlData))) goto fail; if (!(actual = virNetworkDefFormat(dev))) goto fail; if (STRNEQ(outXmlData, actual)) { virtTestDifference(stderr, outXmlData, actual); goto fail; } ret = 0; fail: free(actual); virNetworkDefFree(dev); return ret; }
static char *parallelsNetworkGetXMLDesc(virNetworkPtr net, unsigned int flags) { parallelsConnPtr privconn = net->conn->privateData; virNetworkObjPtr network; char *ret = NULL; virCheckFlags(VIR_NETWORK_XML_INACTIVE, NULL); parallelsDriverLock(privconn); network = virNetworkFindByUUID(&privconn->networks, net->uuid); parallelsDriverUnlock(privconn); if (!network) { virReportError(VIR_ERR_NO_NETWORK, "%s", _("no network with matching uuid")); goto cleanup; } ret = virNetworkDefFormat(network->def, flags); cleanup: if (network) virNetworkObjUnlock(network); return ret; }
static int testCompareXMLToXMLFiles(const char *netxml, const char *updatexml, const char *outxml, unsigned int flags, unsigned int command, unsigned int section, int parentIndex, bool expectFailure) { char *netXmlData = NULL; char *updateXmlData = NULL; char *outXmlData = NULL; char *actual = NULL; int ret = -1; virNetworkDefPtr def = NULL; if (virtTestLoadFile(netxml, &netXmlData) < 0) goto error; if (virtTestLoadFile(updatexml, &updateXmlData) < 0) goto error; if (!(def = virNetworkDefParseString(netXmlData))) goto fail; if (virNetworkDefUpdateSection(def, command, section, parentIndex, updateXmlData, 0) < 0) goto fail; if (!(actual = virNetworkDefFormat(def, flags))) goto fail; if (!expectFailure) { if (virtTestLoadFile(outxml, &outXmlData) < 0) goto error; if (STRNEQ(outXmlData, actual)) { virtTestDifference(stderr, outXmlData, actual); goto fail; } } ret = 0; fail: if (expectFailure) { if (ret == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "Failed to fail."); ret = -1; } else { virResetLastError(); ret = 0; } } error: VIR_FREE(netXmlData); VIR_FREE(updateXmlData); VIR_FREE(outXmlData); VIR_FREE(actual); virNetworkDefFree(def); return ret; }
static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, unsigned int flags, testCompareNetXML2XMLResult expectResult) { char *actual = NULL; int ret; testCompareNetXML2XMLResult result = TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS; virNetworkDefPtr dev = NULL; if (!(dev = virNetworkDefParseFile(inxml))) { result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE; goto cleanup; } if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE) goto cleanup; if (!(actual = virNetworkDefFormat(dev, flags))) { result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT; goto cleanup; } if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT) goto cleanup; if (virTestCompareToFile(actual, outxml) < 0) { result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE; goto cleanup; } if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE) goto cleanup; cleanup: if (result == expectResult) { ret = 0; if (expectResult != TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS) { VIR_TEST_DEBUG("Got expected failure code=%d msg=%s", result, virGetLastErrorMessage()); } } else { ret = -1; VIR_TEST_DEBUG("Expected result code=%d but received code=%d", expectResult, result); } virResetLastError(); VIR_FREE(actual); virNetworkDefFree(dev); return ret; }
static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, unsigned int flags) { char *actual = NULL; int ret = -1; virNetworkDefPtr dev = NULL; if (!(dev = virNetworkDefParseFile(inxml))) goto fail; if (!(actual = virNetworkDefFormat(dev, flags))) goto fail; if (virtTestCompareToFile(actual, outxml) < 0) goto fail; ret = 0; fail: VIR_FREE(actual); virNetworkDefFree(dev); return ret; }
static char *vboxNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags) { vboxDriverPtr data = network->conn->privateData; virNetworkDefPtr def = NULL; virNetworkIPDefPtr ipdef = NULL; char *networkNameUtf8 = NULL; PRUnichar *networkInterfaceNameUtf16 = NULL; IHostNetworkInterface *networkInterface = NULL; PRUint32 interfaceType = 0; PRUnichar *networkNameUtf16 = NULL; IDHCPServer *dhcpServer = NULL; vboxIIDUnion vboxnet0IID; IHost *host = NULL; char *ret = NULL; nsresult rc; if (!data->vboxObj) return ret; gVBoxAPI.UIVirtualBox.GetHost(data->vboxObj, &host); if (!host) return ret; VBOX_IID_INITIALIZE(&vboxnet0IID); virCheckFlags(0, NULL); if (VIR_ALLOC(def) < 0) goto cleanup; if (VIR_ALLOC(ipdef) < 0) goto cleanup; def->ips = ipdef; def->nips = 1; if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", network->name) < 0) goto cleanup; VBOX_UTF8_TO_UTF16(network->name, &networkInterfaceNameUtf16); gVBoxAPI.UIHost.FindHostNetworkInterfaceByName(host, networkInterfaceNameUtf16, &networkInterface); if (!networkInterface) goto cleanup; gVBoxAPI.UIHNInterface.GetInterfaceType(networkInterface, &interfaceType); if (interfaceType != HostNetworkInterfaceType_HostOnly) goto cleanup; if (VIR_STRDUP(def->name, network->name) < 0) goto cleanup; rc = gVBoxAPI.UIHNInterface.GetId(networkInterface, &vboxnet0IID); if (NS_FAILED(rc)) goto cleanup; vboxIIDToUUID(&vboxnet0IID, def->uuid); VBOX_UTF8_TO_UTF16(networkNameUtf8, &networkNameUtf16); def->forward.type = VIR_NETWORK_FORWARD_NONE; gVBoxAPI.UIVirtualBox.FindDHCPServerByNetworkName(data->vboxObj, networkNameUtf16, &dhcpServer); if (dhcpServer) { ipdef->nranges = 1; if (VIR_ALLOC_N(ipdef->ranges, ipdef->nranges) >= 0) { PRUnichar *ipAddressUtf16 = NULL; PRUnichar *networkMaskUtf16 = NULL; PRUnichar *fromIPAddressUtf16 = NULL; PRUnichar *toIPAddressUtf16 = NULL; bool errorOccurred = false; gVBoxAPI.UIDHCPServer.GetIPAddress(dhcpServer, &ipAddressUtf16); gVBoxAPI.UIDHCPServer.GetNetworkMask(dhcpServer, &networkMaskUtf16); gVBoxAPI.UIDHCPServer.GetLowerIP(dhcpServer, &fromIPAddressUtf16); gVBoxAPI.UIDHCPServer.GetUpperIP(dhcpServer, &toIPAddressUtf16); /* Currently virtualbox supports only one dhcp server per network * with contigious address space from start to end */ if (vboxSocketParseAddrUtf16(data, ipAddressUtf16, &ipdef->address) < 0 || vboxSocketParseAddrUtf16(data, networkMaskUtf16, &ipdef->netmask) < 0 || vboxSocketParseAddrUtf16(data, fromIPAddressUtf16, &ipdef->ranges[0].start) < 0 || vboxSocketParseAddrUtf16(data, toIPAddressUtf16, &ipdef->ranges[0].end) < 0) { errorOccurred = true; } VBOX_UTF16_FREE(ipAddressUtf16); VBOX_UTF16_FREE(networkMaskUtf16); VBOX_UTF16_FREE(fromIPAddressUtf16); VBOX_UTF16_FREE(toIPAddressUtf16); if (errorOccurred) goto cleanup; } else { ipdef->nranges = 0; } ipdef->nhosts = 1; if (VIR_ALLOC_N(ipdef->hosts, ipdef->nhosts) >= 0) { if (VIR_STRDUP(ipdef->hosts[0].name, network->name) < 0) { VIR_FREE(ipdef->hosts); ipdef->nhosts = 0; } else { PRUnichar *macAddressUtf16 = NULL; PRUnichar *ipAddressUtf16 = NULL; bool errorOccurred = false; gVBoxAPI.UIHNInterface.GetHardwareAddress(networkInterface, &macAddressUtf16); gVBoxAPI.UIHNInterface.GetIPAddress(networkInterface, &ipAddressUtf16); VBOX_UTF16_TO_UTF8(macAddressUtf16, &ipdef->hosts[0].mac); if (vboxSocketParseAddrUtf16(data, ipAddressUtf16, &ipdef->hosts[0].ip) < 0) { errorOccurred = true; } VBOX_UTF16_FREE(macAddressUtf16); VBOX_UTF16_FREE(ipAddressUtf16); if (errorOccurred) goto cleanup; } } else { ipdef->nhosts = 0; } } else { PRUnichar *networkMaskUtf16 = NULL; PRUnichar *ipAddressUtf16 = NULL; bool errorOccurred = false; gVBoxAPI.UIHNInterface.GetNetworkMask(networkInterface, &networkMaskUtf16); gVBoxAPI.UIHNInterface.GetIPAddress(networkInterface, &ipAddressUtf16); if (vboxSocketParseAddrUtf16(data, networkMaskUtf16, &ipdef->netmask) < 0 || vboxSocketParseAddrUtf16(data, ipAddressUtf16, &ipdef->address) < 0) { errorOccurred = true; } VBOX_UTF16_FREE(networkMaskUtf16); VBOX_UTF16_FREE(ipAddressUtf16); if (errorOccurred) goto cleanup; } DEBUGIID("Network UUID", &vboxnet0IID); ret = virNetworkDefFormat(def, 0); cleanup: vboxIIDUnalloc(&vboxnet0IID); VBOX_UTF16_FREE(networkNameUtf16); VBOX_RELEASE(networkInterface); VBOX_UTF16_FREE(networkInterfaceNameUtf16); VBOX_RELEASE(host); virNetworkDefFree(def); VIR_FREE(networkNameUtf8); VBOX_RELEASE(dhcpServer); return ret; }