Attached is a proposed API for probing the capabilities and supported guest architectures of the hypervisor / driver.
I've implemented the virCapabilities part already. My original implementation of the guest architectures had virCapabilities containing a list of supported architectures, but that doesn't nearly cover the richness of what the underlying drivers could support, so I'm currently separating that out into a separate virConnectGetGuestArchitectures call.
Let me know your opinions of this API.As an aside, the current virt-manager "choose paravirt / fullvirt" screen doesn't really capture the full, shall I say, ugliness of the possible choices for architecture, particularly when we add qemu, kqemu, and emulation in the mix. I suspect that presenting a list of architectures here, perhaps with some options to show only paravirt, show only fullvirt, show only accelerated ...
Rich. -- Emerging Technologies, Red Hat http://et.redhat.com/~rjones/ 64 Baker Street, London, W1U 7DF Mobile: +44 7866 314 421 "[Negative numbers] darken the very whole doctrines of the equations and make dark of the things which are in their nature excessively obvious and simple" (Francis Maseres FRS, mathematician, 1759)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index bd8f6a1..5a84bf5 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -188,6 +188,52 @@ struct _virNodeInfo {
typedef virNodeInfo *virNodeInfoPtr;
/**
+ * virCapabilitiesPtr:
+ *
+ * a virCapabilitiesPtr contains the capabilities of the hypervisor or
+ * driver that we have connected to, returned by virConnectGetCapabilities.
+ * Use virCapabilitiesFree to free the structure after use.
+ */
+
+struct _virCapabilities;
+typedef struct _virCapabilities virCapabilities;
+typedef virCapabilities *virCapabilitiesPtr;
+
+int virCapabilitiesFree (virCapabilitiesPtr caps);
+
+/* Accessors for fields in the virCapabilitiesPtr structure. */
+int virCapabilitiesGetHostSupportsHVM (virCapabilitiesPtr caps);
+int virCapabilitiesGetHostHVMDisabledByBIOS (virCapabilitiesPtr caps);
+ /* XXX Other things which virtinst needs:
+ * blktap
+ * KVM/KQEMU available in kernel
+ */
+
+/**
+ * virGuestArchitecturesPtr
+ *
+ * a virGuestArchitecturesPtr contains a list of the guest architectures
+ * supported by the driver, returned by virConnectGetGuestArchitectures.
+ * Use virGuestArchitecturesFree to free the structure after use.
+ */
+
+struct _virGuestArchitectures;
+typedef struct _virGuestArchitectures virGuestArchitectures;
+typedef struct virGuestArchitectures *virGuestArchitecturesPtr;
+
+int virGuestArchitecturesFree (virGuestArchitecturesPtr archs);
+
+/* Accessors for elements in the virGuestArchitecturesPtr structure. */
+int virGuestArchitecturesGetCount (virGuestArchitecturesPtr archs);
+char *virGuestArchitecturesGetName (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetIsHVM (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetIsAccelerated (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetIsEmulated (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetIsBigEndian (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetBits (virGuestArchitecturesPtr archs, int n);
+int virGuestArchitecturesGetIsPAE (virGuestArchitecturesPtr archs, int n);
+
+/**
* VIR_UUID_STRING_BUFLEN:
*
* This macro provides the length of the buffer required
@@ -231,8 +277,14 @@ int virConnectClose (virConnectPtr conn);
const char * virConnectGetType (virConnectPtr conn);
int virConnectGetVersion (virConnectPtr conn,
unsigned long *hvVer);
+/*
+ * Capabilities of the connection / driver.
+ */
+
int virNodeGetInfo (virConnectPtr conn,
virNodeInfoPtr info);
+virCapabilitiesPtr virConnectGetCapabilities (virConnectPtr conn);
+virGuestArchitecturesPtr virConnectGetGuestArchitectures (virConnectPtr conn);
/*
* Gather list of running domains
smime.p7s
Description: S/MIME Cryptographic Signature
-- Libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
