#include "cpu_conf.h"
#include "domain_conf.h"
#include "physmem.h"
+#include "storage_conf.h"
#include "viralloc.h"
#include "virarch.h"
#include "virbuffer.h"
VIR_FREE(guest);
}
+
+static void
+virCapabilitiesFreeStoragePool(virCapsStoragePoolPtr pool)
+{
+ if (!pool)
+ return;
+
+ VIR_FREE(pool);
+}
+
+
void
virCapabilitiesFreeNUMAInfo(virCapsPtr caps)
{
virCapsPtr caps = object;
size_t i;
+ for (i = 0; i < caps->npools; i++)
+ virCapabilitiesFreeStoragePool(caps->pools[i]);
+ VIR_FREE(caps->pools);
+
for (i = 0; i < caps->nguests; i++)
virCapabilitiesFreeGuest(caps->guests[i]);
VIR_FREE(caps->guests);
emulator, machinetype);
}
+
+int
+virCapabilitiesAddStoragePool(virCapsPtr caps,
+ int poolType)
+{
+ virCapsStoragePoolPtr pool;
+
+ if (VIR_ALLOC(pool) < 0)
+ goto error;
+
+ pool->type = poolType;
+
+ if (VIR_RESIZE_N(caps->pools, caps->npools_max, caps->npools, 1) < 0)
+ goto error;
+ caps->pools[caps->npools++] = pool;
+
+ return 0;
+
+ error:
+ virCapabilitiesFreeStoragePool(pool);
+ return -1;
+}
+
+
static int
virCapabilitiesFormatNUMATopology(virBufferPtr buf,
size_t ncells,
size_t i, j;
char host_uuid[VIR_UUID_STRING_BUFLEN];
+ /* The lack of some data means we have nothing
+ * minimally to format, so just return. */
+ if (!virUUIDIsValid(host->host_uuid) &&
+ !host->arch && !host->powerMgmt && !host->iommu)
+ return 0;
+
virBufferAddLit(buf, "<host>\n");
virBufferAdjustIndent(buf, 2);
if (virUUIDIsValid(host->host_uuid)) {
}
+static void
+virCapabilitiesFormatStoragePoolXML(virCapsStoragePoolPtr *pools,
+ size_t npools,
+ virBufferPtr buf)
+{
+ size_t i;
+
+ if (npools == 0)
+ return;
+
+ virBufferAddLit(buf, "<pool>\n");
+ virBufferAdjustIndent(buf, 2);
+
+ virBufferAddLit(buf, "<enum name='type'>\n");
+ virBufferAdjustIndent(buf, 2);
+ for (i = 0; i < npools; i++)
+ virBufferAsprintf(buf, "<value>%s</value>\n",
+ virStoragePoolTypeToString(pools[i]->type));
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "</enum>\n");
+
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "</pool>\n\n");
+}
+
+
/**
* virCapabilitiesFormatXML:
* @caps: capabilities to format
virCapabilitiesFormatGuestXML(caps->guests, caps->nguests, &buf);
+ virCapabilitiesFormatStoragePoolXML(caps->pools, caps->npools, &buf);
+
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</capabilities>\n");
bool iommu;
};
+typedef struct _virCapsStoragePool virCapsStoragePool;
+typedef virCapsStoragePool *virCapsStoragePoolPtr;
+struct _virCapsStoragePool {
+ int type;
+};
+
+
typedef int (*virDomainDefNamespaceParse)(xmlDocPtr, xmlNodePtr,
xmlXPathContextPtr, void **);
typedef void (*virDomainDefNamespaceFree)(void *);
size_t nguests;
size_t nguests_max;
virCapsGuestPtr *guests;
+
+ size_t npools;
+ size_t npools_max;
+ virCapsStoragePoolPtr *pools;
};
typedef struct _virCapsDomainData virCapsDomainData;
bool defaultOn,
bool toggle);
+int
+virCapabilitiesAddStoragePool(virCapsPtr caps,
+ int poolType);
+
int
virCapabilitiesHostSecModelAddBaseLabel(virCapsHostSecModelPtr secmodel,
const char *type,