]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* include/libvirt/libvirt.h[.in] src/driver.h src/openvz_driver.c
authorDaniel Veillard <veillard@redhat.com>
Fri, 28 Sep 2007 14:28:12 +0000 (14:28 +0000)
committerDaniel Veillard <veillard@redhat.com>
Fri, 28 Sep 2007 14:28:12 +0000 (14:28 +0000)
  src/qemu_driver.c src/remote_internal.c src/test.c
  src/xen_internal.[ch] src/xen_unified.c src/xend_internal.[ch]
  src/libvirt.c src/libvirt_sym.version: adding NUMA support patches
  from Beth Kon adding new virNodeGetCellsFreeMemory entry point
  and extending the virConnectGetCapabilities one. Fix a couple of
  issues in the patch and add to exported symbols from shared lib.
* docs/virsh.pod docs/virsh.1 src/virsh.c: added new command
  freecell to get the available memory on the node or in a NUMA cell.
* docs/*: updated and regenerated the documentation
Daniel

35 files changed:
ChangeLog
docs/APIchunk0.html
docs/APIchunk1.html
docs/APIchunk2.html
docs/APIchunk3.html
docs/APIchunk4.html
docs/APIchunk5.html
docs/APIchunk6.html
docs/APIfiles.html
docs/APIfunctions.html
docs/APIsymbols.html
docs/devhelp/libvirt-libvirt.html
docs/html/libvirt-libvirt.html
docs/hvsupport.html
docs/libvir.html
docs/libvirt-api.xml
docs/libvirt-refs.xml
docs/remote.html
docs/virsh.pod
include/libvirt/libvirt.h
include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_sym.version
src/openvz_driver.c
src/qemu_driver.c
src/remote_internal.c
src/test.c
src/virsh.c
src/xen_internal.c
src/xen_internal.h
src/xen_unified.c
src/xend_internal.c
src/xend_internal.h
virsh.1

index 82a0830da1705e66e346d72d131b41cd98336b3e..b032655a5e91756eb3c28f34cdc51c85462a273b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Fri Sep 28 16:17:41 CEST 2007 Daniel Veillard <veillard@redhat.com>
+
+       * include/libvirt/libvirt.h[.in] src/driver.h src/openvz_driver.c
+         src/qemu_driver.c src/remote_internal.c src/test.c
+         src/xen_internal.[ch] src/xen_unified.c src/xend_internal.[ch]
+         src/libvirt.c src/libvirt_sym.version: adding NUMA support patches
+         from Beth Kon adding new virNodeGetCellsFreeMemory entry point
+         and extending the virConnectGetCapabilities one. Fix a couple of
+         issues in the patch and add to exported symbols from shared lib.
+       * docs/virsh.pod docs/virsh.1 src/virsh.c: added new command
+         freecell to get the available memory on the node or in a NUMA cell.
+       * docs/*: updated and regenerated the documentation
+
 Fri Sep 28 11:20:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
 
        * docs/libvir.html: Clarified configuration required for
index 212dae8cb996ed15af51ebab6c367ddef77dc46f..39c9938422fd87af34319d8d924dc29a60698990 100644 (file)
 </dd><dt>Linux</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
 </dd></dl><h2>Letter M:</h2><dl><dt>Macro</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
 <a href="html/libvirt-libvirt.html#VIR_DOMAIN_SCHED_FIELD_LENGTH">VIR_DOMAIN_SCHED_FIELD_LENGTH</a><br />
+</dd><dt>Maximum</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>Mbps</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>Migrate</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd></dl><h2>Letter N:</h2><dl><dt>NUMA</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>Normally</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
 </dd><dt>Note</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
index 8bd30237ec7bd4897197fcf50d825db86b37f97d..0d0cff0ed43a111372d1f5d497e583e70b4fc2e1 100644 (file)
@@ -54,6 +54,7 @@
 <a href="html/libvirt-libvirt.html#virConnectNumOfNetworks">virConnectNumOfNetworks</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
 </dd><dt>add</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
+</dd><dt>additional</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>address</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>after</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetCapabilities">virConnectGetCapabilities</a><br />
 <a href="html/libvirt-libvirt.html#virDomainReboot">virDomainReboot</a><br />
@@ -74,6 +75,7 @@
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 </dd><dt>allowed</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
 </dd><dt>already</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
@@ -83,6 +85,7 @@
 </dd><dt>amount</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>analysis</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
 </dd><dt>anymore</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
 </dd><dt>application</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetUUID">virNetworkGetUUID</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>associated</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
 </dd><dt>assumed</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkDestroy">virNetworkDestroy</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>callback</dt><dd><a href="html/libvirt-virterror.html#virConnSetErrorFunc">virConnSetErrorFunc</a><br />
 <a href="html/libvirt-virterror.html#virErrorFunc">virErrorFunc</a><br />
 <a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>calling</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
 </dd><dt>calloc</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>cannot</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
 <a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
 <a href="html/libvirt-libvirt.html#virDomainLookupByUUID">virDomainLookupByUUID</a><br />
 <a href="html/libvirt-virterror.html#virResetLastError">virResetLastError</a><br />
 <a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
 </dd><dt>cell</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
+</dd><dt>cells</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>change</dt><dd><a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
index 376a8b3a4d5f9a193b3bfbb1560c551bb361c647..5146301c9a4bda2d99fd633ecd95d4bd3ba128b5 100644 (file)
 <a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
+</dd><dt>either</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>element</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a><br />
 </dd><dt>else</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>encoded</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+</dd><dt>entries</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>especially</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
 </dd><dt>etc</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>even</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
 </dd><dt>filled</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetSchedulerParameters">virDomainGetSchedulerParameters</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>find</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>finding</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 </dd><dt>first</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
 <a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>flags</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
+</dd><dt>freeMems</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>freed</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetHostname">virConnectGetHostname</a><br />
 <a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
 <a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
index d52fbc80b7b0fc72ef613fadd6db1613a6b98c1d..a0842c522f27158212b269f6504aa2177d3b620f 100644 (file)
 <a href="html/libvirt-libvirt.html#virDomainGetMaxVcpus">virDomainGetMaxVcpus</a><br />
 </dd><dt>increased</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
+</dd><dt>index</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>indicates</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
 </dd><dt>indicating</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetAutostart">virDomainGetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
 </dd><dt>info</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>information</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetUUIDString">virDomainGetUUIDString</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 </dd><dt>informative</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
 </dd><dt>initializing</dt><dd><a href="html/libvirt-libvirt.html#virInitialize">virInitialize</a><br />
@@ -95,6 +98,7 @@
 <a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>knowing</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
 </dd></dl><h2>Letter l:</h2><dl><dt>lack</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
 </dd><dt>languages</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
 </dd><dt>listed</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
 </dd><dt>little-endian</dt><dd><a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
 </dd><dt>live</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
+</dd><dt>long</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>looked</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 </dd><dt>lookup</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
 <a href="html/libvirt-libvirt.html#virDomainLookupByUUID">virDomainLookupByUUID</a><br />
 </dd><dt>maplen</dt><dd><a href="">cpumap</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
+</dd><dt>maxCells</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>maximum</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
 <a href="html/libvirt-libvirt.html#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>message</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
 </dd><dt>method</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>moves</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreate">virDomainCreate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
 </dd><dt>msg00096</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>mysterious</dt><dd><a href="html/libvirt-libvirt.html#_virDomainBlockStats">_virDomainBlockStats</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-V</a>
 <a href="APIchunk1.html">W-c</a>
index fd9ee9e6bc4874903065c200aeabe2ef9ea64397..e87be5a0587ddf8f06e9564ff34548e9224b1624 100644 (file)
@@ -50,6 +50,7 @@
 <a href="html/libvirt-libvirt.html#virNetworkLookupByUUID">virNetworkLookupByUUID</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a><br />
 </dd><dt>node</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 </dd><dt>non</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a><br />
 </dd><dt>non-NULL</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
@@ -70,6 +71,7 @@
 <a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkCreateXML">virNetworkCreateXML</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>only</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
 </dd><dt>oo_req</dt><dd><a href="html/libvirt-libvirt.html#_virDomainBlockStats">_virDomainBlockStats</a><br />
 </dd><dt>reporting</dt><dd><a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a><br />
 </dd><dt>request</dt><dd><a href="html/libvirt-libvirt.html#virDomainReboot">virDomainReboot</a><br />
 <a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
+</dd><dt>requested</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>required</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
 <a href="html/libvirt-libvirt.html#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a><br />
 <a href="html/libvirt-libvirt.html#VIR_UUID_STRING_BUFLEN">VIR_UUID_STRING_BUFLEN</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkDestroy">virNetworkDestroy</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>returned</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetCapabilities">virConnectGetCapabilities</a><br />
 <a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>returns</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
 <a href="html/libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a><br />
 <a href="html/libvirt-libvirt.html#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a><br />
 <a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>reused</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
 </dd><dt>routine</dt><dd><a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a><br />
index b1be1d4db563b735fef7afbe909f1712a185655f..5c90c72ced1dc385bc175268adf35efd98c1a355 100644 (file)
@@ -67,6 +67,7 @@
 <a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
+</dd><dt>smaller</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>socket</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
 </dd><dt>software</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
 </dd><dt>source</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 </dd><dt>start</dt><dd><a href="html/libvirt-libvirt.html#virDomainDefineXML">virDomainDefineXML</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkCreateXML">virNetworkCreateXML</a><br />
+</dd><dt>startCell</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>started</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetAutostart">virDomainGetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSetAutostart">virDomainSetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
+</dd><dt>starting</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>startup</dt><dd><a href="html/libvirt-libvirt.html#virInitialize">virInitialize</a><br />
 </dd><dt>state</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
 <a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
index 7bedf5c1ce78049cdcf8c7b586a0219bf075fbb8..1b01dfc4ecd9db209c154440b9f65ecd8afc13fc 100644 (file)
@@ -16,6 +16,7 @@
 </dd><dt>uniform</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
 </dd><dt>unknown</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 </dd><dt>unsigned</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>unused</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
 </dd><dt>uri</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
 <a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
 <a href="html/libvirt-virterror.html#virGetLastError">virGetLastError</a><br />
 <a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
+</dd><dt>whichever</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>while</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 </dd><dt>will</dt><dd><a href="html/libvirt-virterror.html#virConnCopyLastError">virConnCopyLastError</a><br />
 <a href="html/libvirt-virterror.html#virConnSetErrorFunc">virConnSetErrorFunc</a><br />
 <a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
 <a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetName">virNetworkGetName</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
 </dd><dt>with</dt><dd><a href="html/libvirt-libvirt.html#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a><br />
 <a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
 <a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </dd><dt>within</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 <a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
 </dd><dt>without</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
index ea7433e42a65223fc6cc237dcc76355b4df4b18b..908a7d6c13b47be01f4c52f904a6aa7d5035cdf2 100644 (file)
 <a href="html/libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkUndefine">virNetworkUndefine</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 <a href="html/libvirt-libvirt.html#virNodeInfo">virNodeInfo</a><br />
 <a href="html/libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a><br />
index 7361ca55e5ce1a8b8f466622b992ba38f1b643bc..5c7d043e23e161f6177031ddfa6ca26aa2bf5fb6 100644 (file)
@@ -25,6 +25,7 @@
 <a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
 </p><h2>Type unsigned long *:</h2><p><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
 <a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
+</p><h2>Type unsigned long long *:</h2><p><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 </p><h2>Type virConnectPtr:</h2><p><a href="html/libvirt-virterror.html#virConnCopyLastError">virConnCopyLastError</a><br />
 <a href="html/libvirt-virterror.html#virConnGetLastError">virConnGetLastError</a><br />
 <a href="html/libvirt-virterror.html#virConnResetLastError">virConnResetLastError</a><br />
@@ -57,6 +58,7 @@
 <a href="html/libvirt-libvirt.html#virNetworkLookupByName">virNetworkLookupByName</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkLookupByUUID">virNetworkLookupByUUID</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 </p><h2>Type virDomainBlockStatsPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
 </p><h2>Type virDomainInfoPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
index 6a68f70c514bb83255b141887c67f0fb0a589f93..411a4369f60069d8b23e72585d82e031483b3c54 100644 (file)
 <a href="html/libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
 <a href="html/libvirt-libvirt.html#virNetworkUndefine">virNetworkUndefine</a><br />
+<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
 <a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
 <a href="html/libvirt-libvirt.html#virNodeInfo">virNodeInfo</a><br />
 <a href="html/libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a><br />
index cec369730403945c7380c4fcde009aceb18d4eac..d80856885a9f13fa9dae66f81634efa129b9cfc3 100644 (file)
@@ -124,6 +124,7 @@ int <a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a>      (
 <a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkDefineXML">virNetworkDefineXML</a>  (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>                                      const char * xml);
 int    <a href="#virNetworkCreate">virNetworkCreate</a>                (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
 int    <a href="#virDomainSetSchedulerParameters">virDomainSetSchedulerParameters</a>  (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>                                      <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br/>                                      int nparams);
+int    <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a>      (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>                                      unsigned long long * freeMems, <br/>                                    int startCell, <br/>                                    int maxCells);
 int    <a href="#virConnectClose">virConnectClose</a>                  (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
 int    <a href="#virDomainReboot">virDomainReboot</a>                  (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>                                      unsigned int flags);
 int    <a href="#virDomainBlockStats">virDomainBlockStats</a>          (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/>                                         const char * path, <br/>                                        <a href="libvirt-libvirt.html#virDomainBlockStatsPtr">virDomainBlockStatsPtr</a> stats, <br/>                                   size_t size);
@@ -683,6 +684,10 @@ The content of this structure is not made public by the API.
         <div class="refsect2" lang="en"><h3><a name="virNetworkUndefine"/>virNetworkUndefine ()</h3><pre class="programlisting">int    virNetworkUndefine              (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
 </pre><p>Undefine a network but does not stop it if it is running</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virNodeGetCellsFreeMemory"/>virNodeGetCellsFreeMemory ()</h3><pre class="programlisting">int      virNodeGetCellsFreeMemory       (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>                                      unsigned long long * freeMems, <br/>                                    int startCell, <br/>                                    int maxCells)<br/>
+</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="virNodeGetInfo"/>virNodeGetInfo ()</h3><pre class="programlisting">int    virNodeGetInfo                  (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>                                      <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br/>
 </pre><p>Extract hardware information about the node.</p>
index 6e290ba8de2b402db4cf5180d11de0e30061ba0c..2f2af53845e396bc5476d6eea5d139c25a0b6660 100644 (file)
@@ -105,6 +105,7 @@ The content of this structure is not made public by the API.
 <pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a>     <a href="#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a>        (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                             const char * uuidstr)</pre>
 <pre class="programlisting">int        <a href="#virNetworkSetAutostart">virNetworkSetAutostart</a>            (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br />                                  int autostart)</pre>
 <pre class="programlisting">int        <a href="#virNetworkUndefine">virNetworkUndefine</a>            (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)</pre>
+<pre class="programlisting">int        <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a>      (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                     unsigned long long * freeMems, <br />                                   int startCell, <br />                                   int maxCells)</pre>
 <pre class="programlisting">int        <a href="#virNodeGetInfo">virNodeGetInfo</a>                    (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                     <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)</pre>
 <h2>Description</h2>
 <h3><a name="LIBVIR_VERSION_NUMBER" id="LIBVIR_VERSION_NUMBER"></a>Macro: LIBVIR_VERSION_NUMBER</h3><pre>#define LIBVIR_VERSION_NUMBER</pre><p>Macro providing the version of the library as version * 1,000,000 + minor * 1000 + micro</p>
@@ -368,6 +369,8 @@ The content of this structure is not made public by the API.
 </pre><p>Configure the network to be automatically started when the host machine boots.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>whether the network should be automatically started 0 or 1</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virNetworkUndefine" id="virNetworkUndefine"></a>Function: virNetworkUndefine</h3><pre class="programlisting">int virNetworkUndefine              (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
 </pre><p>Undefine a network but does not stop it if it is running</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"></a>Function: virNodeGetInfo</h3><pre class="programlisting">int  virNodeGetInfo                  (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                     <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetCellsFreeMemory" id="virNodeGetCellsFreeMemory"></a>Function: virNodeGetCellsFreeMemory</h3><pre class="programlisting">int virNodeGetCellsFreeMemory       (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                     unsigned long long * freeMems, <br />                                   int startCell, <br />                                   int maxCells)<br />
+</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"></a>Function: virNodeGetInfo</h3><pre class="programlisting">int  virNodeGetInfo                  (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br />                                     <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
 </pre><p>Extract hardware information about the node.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> structure allocated by the user</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="../index.html">Home</a></li><li><a href="../html/index.html">API Menu</a></li><li><a href="../examples/index.html">C code examples</a></li><li><a href="../ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="https://bugzilla.redhat.com/bugzilla/buglist.cgi?product=Fedora+Core&amp;component=libvirt&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=MODIFIED&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr">Open bugs</a></li><li><a href="http://virt-manager.et.redhat.com/">virt-manager</a></li><li><a href="http://search.cpan.org/~danberr/Sys-Virt-0.1.0/">Perl bindings</a></li><li><a href="http://et.redhat.com/~rjones/ocaml-libvirt/">OCaml bindings</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
index f390d91090897a65b131c123e9f5e5c8e260bd2c..a874fe6563f315a53240e7011f4e76168005b50f 100644 (file)
@@ -352,6 +352,12 @@ updated on <i>2007-08-20</i>.
   <td> &#8805; 0.2.0 </td>
   <td> &#8805; 0.2.0 </td>
   <td> &#8805; 0.3.0 </td>
+</tr><tr><td> virNodeGetCellsFreeMemory </td>
+  <td> 0.3.3 </td>
+  <td> &#8805; 0.3.3 </td>
+  <td></td>
+  <td></td>
+  <td></td>
 </tr></table><h3>Network functions</h3><p>
 Network functions are not hypervisor-specific.  For historical
 reasons they require the QEMU daemon to be running (this
index 343de99dcb338b2a43533b1b5d0b6969e54bbc62..c64df30e141d4c82b580f19dc8a723df77600e85 100644 (file)
@@ -3235,6 +3235,14 @@ updated on <i>2007-08-20</i>.
   <td> &ge; 0.2.0 </td>
   <td> &ge; 0.3.0 </td>
 </tr>
+<tr>
+  <td> virNodeGetCellsFreeMemory </td>
+  <td> 0.3.3 </td>
+  <td> &ge; 0.3.3 </td>
+  <td></td>
+  <td></td>
+  <td></td>
+</tr>
 </table>
 
 <h3>Network functions</h3>
index 04f082ee21835fa6c5749cc245274499727c78e5..9b70dce3772edb3c77d9d16f6ec8175ce59010b9 100644 (file)
      <exports symbol='virNetworkDefineXML' type='function'/>
      <exports symbol='virNetworkCreate' type='function'/>
      <exports symbol='virDomainSetSchedulerParameters' type='function'/>
+     <exports symbol='virNodeGetCellsFreeMemory' type='function'/>
      <exports symbol='virConnectClose' type='function'/>
      <exports symbol='virDomainReboot' type='function'/>
      <exports symbol='virDomainBlockStats' type='function'/>
       <return type='int' info='0 in case of success, -1 in case of error'/>
       <arg name='network' type='virNetworkPtr' info='pointer to a defined network'/>
     </function>
+    <function name='virNodeGetCellsFreeMemory' file='libvirt' module='libvirt'>
+      <info>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</info>
+      <return type='int' info='the number of entries filled in freeMems, or -1 in case of error.'/>
+      <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
+      <arg name='freeMems' type='unsigned long long *' info='pointer to the array of unsigned long long'/>
+      <arg name='startCell' type='int' info='index of first cell to return freeMems info on.'/>
+      <arg name='maxCells' type='int' info='Maximum number of cells for which freeMems information can be returned.'/>
+    </function>
     <function name='virNodeGetInfo' file='libvirt' module='libvirt'>
       <info>Extract hardware information about the node.</info>
       <return type='int' info='0 in case of success and -1 in case of failure.'/>
index 7f77c047c6b185f5cfd97cb3d4aace66cddbe739..7bd87589f67c06f612691157f7baa7b6c6fee45f 100644 (file)
     <reference name='virNetworkPtr' href='html/libvirt-libvirt.html#virNetworkPtr'/>
     <reference name='virNetworkSetAutostart' href='html/libvirt-libvirt.html#virNetworkSetAutostart'/>
     <reference name='virNetworkUndefine' href='html/libvirt-libvirt.html#virNetworkUndefine'/>
+    <reference name='virNodeGetCellsFreeMemory' href='html/libvirt-libvirt.html#virNodeGetCellsFreeMemory'/>
     <reference name='virNodeGetInfo' href='html/libvirt-libvirt.html#virNodeGetInfo'/>
     <reference name='virNodeInfo' href='html/libvirt-libvirt.html#virNodeInfo'/>
     <reference name='virNodeInfoPtr' href='html/libvirt-libvirt.html#virNodeInfoPtr'/>
       <ref name='virNetworkPtr'/>
       <ref name='virNetworkSetAutostart'/>
       <ref name='virNetworkUndefine'/>
+      <ref name='virNodeGetCellsFreeMemory'/>
       <ref name='virNodeGetInfo'/>
       <ref name='virNodeInfo'/>
       <ref name='virNodeInfoPtr'/>
       <ref name='virConnectGetVersion'/>
       <ref name='virGetVersion'/>
     </type>
+    <type name='unsigned long long *'>
+      <ref name='virNodeGetCellsFreeMemory'/>
+    </type>
     <type name='virConnectPtr'>
       <ref name='virConnCopyLastError'/>
       <ref name='virConnGetLastError'/>
       <ref name='virNetworkLookupByName'/>
       <ref name='virNetworkLookupByUUID'/>
       <ref name='virNetworkLookupByUUIDString'/>
+      <ref name='virNodeGetCellsFreeMemory'/>
       <ref name='virNodeGetInfo'/>
     </type>
     <type name='virDomainBlockStatsPtr'>
       <ref name='virNetworkPtr'/>
       <ref name='virNetworkSetAutostart'/>
       <ref name='virNetworkUndefine'/>
+      <ref name='virNodeGetCellsFreeMemory'/>
       <ref name='virNodeGetInfo'/>
       <ref name='virNodeInfo'/>
       <ref name='virNodeInfoPtr'/>
           <ref name='LIBVIR_VERSION_NUMBER'/>
           <ref name='VIR_DOMAIN_SCHED_FIELD_LENGTH'/>
         </word>
+        <word name='Maximum'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='Mbps'>
           <ref name='virDomainMigrate'/>
         </word>
       <letter name='N'>
         <word name='NUMA'>
           <ref name='_virNodeInfo'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='Normally'>
           <ref name='virConnectGetURI'/>
         <word name='add'>
           <ref name='virDomainShutdown'/>
         </word>
+        <word name='additional'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='address'>
           <ref name='virDomainMigrate'/>
         </word>
           <ref name='virDomainSetMaxMemory'/>
           <ref name='virDomainSetMemory'/>
           <ref name='virDomainSuspend'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
           <ref name='virNodeGetInfo'/>
         </word>
         <word name='allowed'>
           <ref name='virDomainGetMaxMemory'/>
           <ref name='virDomainSetMaxMemory'/>
           <ref name='virDomainSetMemory'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='analysis'>
           <ref name='virDomainCoreDump'/>
           <ref name='virDomainGetVcpus'/>
           <ref name='virNetworkGetUUID'/>
           <ref name='virNetworkGetUUIDString'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='associated'>
           <ref name='virDomainGetConnect'/>
           <ref name='virNetworkCreate'/>
           <ref name='virNetworkDestroy'/>
           <ref name='virNetworkGetConnect'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='callback'>
           <ref name='virConnSetErrorFunc'/>
           <ref name='virDomainGetXMLDesc'/>
           <ref name='virNetworkGetBridgeName'/>
           <ref name='virNetworkGetXMLDesc'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='calling'>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainGetInfo'/>
           <ref name='virDomainMigrate'/>
           <ref name='virDomainPinVcpu'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='cannot'>
           <ref name='virDomainLookupByID'/>
         </word>
         <word name='cell'>
           <ref name='_virNodeInfo'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
+        <word name='cells'>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='change'>
           <ref name='virDomainPinVcpu'/>
           <ref name='virDomainInterfaceStats'/>
           <ref name='virDomainMigrate'/>
           <ref name='virDomainPinVcpu'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
+        <word name='either'>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='element'>
           <ref name='virConnectGetMaxVcpus'/>
           <ref name='virDomainGetXMLDesc'/>
           <ref name='virNetworkGetXMLDesc'/>
         </word>
+        <word name='entries'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='especially'>
           <ref name='virConnectClose'/>
         </word>
         <word name='filled'>
           <ref name='virDomainGetSchedulerParameters'/>
           <ref name='virDomainGetVcpus'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='find'>
           <ref name='virDomainLookupByID'/>
         <word name='first'>
           <ref name='virConnectOpen'/>
           <ref name='virConnectOpenReadOnly'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='flags'>
           <ref name='virDomainCoreDump'/>
           <ref name='virDomainGetXMLDesc'/>
           <ref name='virNetworkGetBridgeName'/>
           <ref name='virNetworkGetXMLDesc'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
+        <word name='freeMems'>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='freed'>
           <ref name='virConnectGetHostname'/>
           <ref name='virDomainGetConnect'/>
           <ref name='virNetworkGetConnect'/>
         </word>
+        <word name='index'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='indicates'>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainInterfaceStats'/>
         </word>
         <word name='info'>
           <ref name='virDomainGetVcpus'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='information'>
           <ref name='_virError'/>
           <ref name='virDomainGetVcpus'/>
           <ref name='virGetVersion'/>
           <ref name='virNetworkGetUUIDString'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
           <ref name='virNodeGetInfo'/>
         </word>
         <word name='informative'>
           <ref name='virDomainGetMaxMemory'/>
           <ref name='virDomainSetMaxMemory'/>
           <ref name='virDomainSetMemory'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='knowing'>
           <ref name='virDomainShutdown'/>
         <word name='live'>
           <ref name='virDomainMigrate'/>
         </word>
+        <word name='long'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='looked'>
           <ref name='virGetVersion'/>
         </word>
           <ref name='virDomainGetVcpus'/>
           <ref name='virDomainPinVcpu'/>
         </word>
+        <word name='maxCells'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='maximum'>
           <ref name='_virDomainInfo'/>
           <ref name='virConnectGetMaxVcpus'/>
           <ref name='virDomainSetMaxMemory'/>
           <ref name='virDomainSetMemory'/>
           <ref name='virDomainSuspend'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='message'>
           <ref name='_virError'/>
           <ref name='virDomainInterfaceStats'/>
           <ref name='virDomainMigrate'/>
           <ref name='virNetworkGetUUIDString'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='moves'>
           <ref name='virDomainCreate'/>
           <ref name='virDomainMigrate'/>
           <ref name='virNetworkGetBridgeName'/>
           <ref name='virNetworkGetXMLDesc'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='mysterious'>
           <ref name='_virDomainBlockStats'/>
         </word>
         <word name='node'>
           <ref name='_virNodeInfo'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
           <ref name='virNodeGetInfo'/>
         </word>
         <word name='non'>
           <ref name='virDomainGetVcpus'/>
           <ref name='virDomainMigrate'/>
           <ref name='virNetworkCreateXML'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='only'>
           <ref name='virConnectGetVersion'/>
           <ref name='virDomainReboot'/>
           <ref name='virDomainShutdown'/>
         </word>
+        <word name='requested'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='required'>
           <ref name='VIR_CPU_MAPLEN'/>
           <ref name='VIR_UUID_BUFLEN'/>
           <ref name='virDomainMigrate'/>
           <ref name='virGetVersion'/>
           <ref name='virNetworkDestroy'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='returned'>
           <ref name='virConnectGetCapabilities'/>
           <ref name='virNetworkGetAutostart'/>
           <ref name='virNetworkGetBridgeName'/>
           <ref name='virNetworkGetXMLDesc'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='returns'>
           <ref name='VIR_CPU_MAPLEN'/>
           <ref name='virConnectGetVersion'/>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainInterfaceStats'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='reused'>
           <ref name='virDomainGetXMLDesc'/>
           <ref name='virDomainSetMaxMemory'/>
           <ref name='virDomainSetMemory'/>
         </word>
+        <word name='smaller'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='socket'>
           <ref name='_virNodeInfo'/>
         </word>
           <ref name='virNetworkCreate'/>
           <ref name='virNetworkCreateXML'/>
         </word>
+        <word name='startCell'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='started'>
           <ref name='virDomainGetAutostart'/>
           <ref name='virDomainSetAutostart'/>
           <ref name='virNetworkGetAutostart'/>
           <ref name='virNetworkSetAutostart'/>
         </word>
+        <word name='starting'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='startup'>
           <ref name='virInitialize'/>
         </word>
         </word>
         <word name='unsigned'>
           <ref name='virDomainGetID'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='unused'>
           <ref name='virDomainCoreDump'/>
           <ref name='virGetLastError'/>
           <ref name='virGetVersion'/>
           <ref name='virNetworkGetBridgeName'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
           <ref name='virSetErrorFunc'/>
         </word>
+        <word name='whichever'>
+          <ref name='virNodeGetCellsFreeMemory'/>
+        </word>
         <word name='while'>
           <ref name='virGetVersion'/>
         </word>
           <ref name='virDomainSuspend'/>
           <ref name='virGetVersion'/>
           <ref name='virNetworkGetName'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
           <ref name='virSetErrorFunc'/>
         </word>
         <word name='with'>
           <ref name='virDomainMigrate'/>
           <ref name='virNetworkGetConnect'/>
           <ref name='virNetworkGetXMLDesc'/>
+          <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='within'>
           <ref name='virDomainBlockStats'/>
index 7598a268828362209811209b97d84d173e1125f3..e8626c1f002fa10ffd34428b21619c1c2ed608f4 100644 (file)
@@ -71,8 +71,8 @@ Remote libvirt supports a range of transports:
  <a href="http://www.openssh.com/" title="OpenSSH homepage">ssh
  (secure shell)</a> connection.
  Requires <a href="http://netcat.sourceforge.net/">Netcat (nc)</a>
- installed on the remote machine, and the remote libvirtd should
be listening on the unix transport.  You should use some sort of
+ installed and libvirtd should be running
on the remote machine.  You should use some sort of
  ssh key management (eg.
  <a href="http://mah.everybody.org/docs/ssh" title="Using ssh-agent with ssh">ssh-agent</a>)
  otherwise programs which use
index aff0e0c96a5451de0f7f2fc52778d8388e0a36fa..62e05f35faed359ea5d689664e59ba424d99434d 100644 (file)
@@ -121,6 +121,7 @@ capabilities in terms of CPU and features, and a set of description
 for each kind of guest which can be virtualized. For a more complete
 description see:
   L<http://libvirt.org/format.html#Capa1>
+The XML also show the NUMA topology informations if available.
 
 =item B<list>  
 
@@ -141,6 +142,11 @@ B<virsh> list
 Name is the name of the domain.  ID the domain numeric id.  
  State is the run state (see below).  
 
+=item B<freecell> optional I<cellno>
+
+Prints the available amount of memory on the machine or within a 
+NUMA cell if I<cellno> is provided.
+
 =over 4
 
 B<STATES>
index cacb258eb656920e92d7c6c0020e6ca9c7168e2c..9db6d7b6acb2b3399450ba0fa4e394232c8bf86e 100644 (file)
@@ -581,6 +581,15 @@ int                        virDomainGetVcpus       (virDomainPtr domain,
 int virDomainAttachDevice(virDomainPtr domain, char *xml);
 int virDomainDetachDevice(virDomainPtr domain, char *xml);
 
+/*
+ * NUMA support
+ */
+
+int                     virNodeGetCellsFreeMemory(virConnectPtr conn,
+                                                  unsigned long long *freeMems,
+                                                  int startCell,
+                                                  int maxCells);
+
 /*
  * Virtual Networks API
  */
index 0cbb5e7c2ee1be413d6bb7c388d168e86449ebe9..fcfed43fe89ca2808d0544a5ef6db1c8d67f6f71 100644 (file)
@@ -581,6 +581,15 @@ int                        virDomainGetVcpus       (virDomainPtr domain,
 int virDomainAttachDevice(virDomainPtr domain, char *xml);
 int virDomainDetachDevice(virDomainPtr domain, char *xml);
 
+/*
+ * NUMA support
+ */
+
+int                     virNodeGetCellsFreeMemory(virConnectPtr conn,
+                                                  unsigned long long *freeMems,
+                                                  int startCell,
+                                                  int maxCells);
+
 /*
  * Virtual Networks API
  */
index 7d6a2d808f7659b90c28b223c4604f3a73b5f170..577fa6a8dcb81e511362019cc580551fed2389de 100644 (file)
@@ -255,6 +255,13 @@ typedef virDomainPtr
 typedef struct _virDriver virDriver;
 typedef virDriver *virDriverPtr;
 
+typedef int
+    (*virDrvNodeGetCellsFreeMemory)
+                    (virConnectPtr conn,
+                     unsigned long long *freeMems,
+                     int startCell,
+                     int maxCells);
+
 /**
  * _virDriver:
  *
@@ -322,6 +329,7 @@ struct _virDriver {
     virDrvDomainMigrateFinish  domainMigrateFinish;
     virDrvDomainBlockStats      domainBlockStats;
     virDrvDomainInterfaceStats  domainInterfaceStats;
+       virDrvNodeGetCellsFreeMemory    nodeGetCellsFreeMemory;
 };
 
 typedef int
index 8089ddecb307aadb3dd5ceca495b0ec6dcda920a..40df5394d4b17709db0867f0481ffbe44e3f7159 100644 (file)
@@ -2633,6 +2633,45 @@ virDomainDetachDevice(virDomainPtr domain, char *xml)
     return -1;
 }
 
+/**
+ * virNodeGetCellsFreeMemory:
+ * @conn: pointer to the hypervisor connection
+ * @freeMems: pointer to the array of unsigned long long
+ * @startCell: index of first cell to return freeMems info on.
+ * @maxCells: Maximum number of cells for which freeMems information can
+ *            be returned.
+ *
+ * This call returns the amount of free memory in one or more NUMA cells.
+ * The @freeMems array must be allocated by the caller and will be filled
+ * with the amount of free memory in kilobytes for each cell requested,
+ * starting with startCell (in freeMems[0]), up to either
+ * (startCell + maxCells), or the number of additional cells in the node,
+ * whichever is smaller.
+ *
+ * Returns the number of entries filled in freeMems, or -1 in case of error.
+ */
+
+int
+virNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *freeMems,
+                          int startCell, int maxCells)
+{
+    if (!VIR_IS_CONNECT(conn)) {
+        virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
+        return (-1);
+    }
+
+    if ((freeMems == NULL) || (maxCells <= 0)) {
+        virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
+        return (-1);
+    }
+
+    if (conn->driver->nodeGetCellsFreeMemory)
+        return conn->driver->nodeGetCellsFreeMemory (conn, freeMems, startCell, maxCells);
+
+    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
+
 /**
  * virNetworkGetConnect:
  * @net: pointer to a network
index d04a6cd5455eca36eb4476cbf97c3143f6421b25..fa7cda3225172fdb65d25e85356011d23110af6d 100644 (file)
@@ -20,6 +20,7 @@
        virDomainGetUUID;
        virDomainGetUUIDString;
        virDomainGetInfo;
+       virNodeGetCellsFreeMemory;
        virDomainGetMaxMemory;
        virDomainGetName;
        virDomainGetOSType;
@@ -57,6 +58,7 @@
        virDefaultErrorFunc;
        virNodeGetInfo;
        virConnectGetCapabilities;
+       virNodeGetCellsFreeMemory;
 
        virDomainSetVcpus;
        virDomainPinVcpu;
index 84c9e86f41e485845bd8f94b192a1bb3a0c95858..1f9c8c4512a69031ecd262084472fa7b9e2238c4 100644 (file)
@@ -753,6 +753,7 @@ static virDriver openvzDriver = {
     NULL, /* domainMigrateFinish */
     NULL, /* domainBlockStats */
     NULL, /* domainInterfaceStats */
+    NULL, /* nodeGetCellsFreeMemory */
 };
 
 static virNetworkDriver openvzNetworkDriver = {
index be75081002041c7de2f8874ebd8154a5939920ab..9be402392c6f61f8fe1d3f29d590658de83d5f58 100644 (file)
@@ -2704,6 +2704,7 @@ static virDriver qemuDriver = {
     NULL, /* domainMigrateFinish */
     NULL, /* domainBlockStats */
     NULL, /* domainInterfaceStats */
+    NULL, /* nodeGetCellsFreeMemory */
 };
 
 static virNetworkDriver qemuNetworkDriver = {
index 4f7e6ba938d683c5d150fbc6e35099df195e8932..fc9d3e27adf4b9fabd5bfc1a7b519dc240e03b14 100644 (file)
@@ -3150,6 +3150,7 @@ static virDriver driver = {
     .domainMigrateFinish = remoteDomainMigrateFinish,
     .domainBlockStats = remoteDomainBlockStats,
     .domainInterfaceStats = remoteDomainInterfaceStats,
+    .nodeGetCellsFreeMemory = NULL,
 };
 
 static virNetworkDriver network_driver = {
index 59e1d4b9587ce73c4e95dc7a6bb4ec6af23b3c30..03e49736baae361218ad6284daf9c9094449b0d4 100644 (file)
@@ -1969,6 +1969,7 @@ static virDriver testDriver = {
     NULL, /* domainMigrateFinish */
     NULL, /* domainBlockStats */
     NULL, /* domainInterfaceStats */
+    NULL, /* nodeGetCellsFreeMemory */
 };
 
 static virNetworkDriver testNetworkDriver = {
index c68e0dc805a0b4abe71b940db0f44de8f3ced9a1..585cc35d027530f311c3961ce90827cba12f8431 100644 (file)
@@ -1561,6 +1561,48 @@ cmdDominfo(vshControl * ctl, vshCmd * cmd)
     return ret;
 }
 
+/*
+ * "freecell" command
+ */
+static vshCmdInfo info_freecell[] = {
+    {"syntax", "freecell [<cellno>]"},
+    {"help", gettext_noop("NUMA free memory")},
+    {"desc", gettext_noop("display available free memory for the NUMA cell.")},
+    {NULL, NULL}
+};
+
+static vshCmdOptDef opts_freecell[] = {
+    {"cellno", VSH_OT_DATA, 0, gettext_noop("NUMA cell number")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdFreecell(vshControl * ctl, vshCmd * cmd)
+{
+    int ret;
+    int cell, cell_given;
+    unsigned long long memory;
+
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    cell = vshCommandOptInt(cmd, "cellno", &cell_given);
+    if (!cell_given) {
+        cell = -1;
+    }
+
+    ret = virNodeGetCellsFreeMemory(ctl->conn, &memory, cell, 1);
+    if (ret != 1)
+        return FALSE;
+    
+    if (cell == -1)
+       vshPrint(ctl, "%s: %llu kB\n", _("Total"), memory);
+    else
+       vshPrint(ctl, "%d: %llu kB\n", cell, memory);
+
+    return TRUE;
+}
+
 /*
  * "vcpuinfo" command
  */
@@ -3661,6 +3703,7 @@ static vshCmdDef commands[] = {
     {"domblkstat", cmdDomblkstat, opts_domblkstat, info_domblkstat},
     {"domifstat", cmdDomIfstat, opts_domifstat, info_domifstat},
     {"dumpxml", cmdDumpXML, opts_dumpxml, info_dumpxml},
+    {"freecell", cmdFreecell, opts_freecell, info_freecell},
     {"hostname", cmdHostname, NULL, info_hostname},
     {"list", cmdList, opts_list, info_list},
     {"migrate", cmdMigrate, opts_migrate, info_migrate},
index 148e731b51a688b8a312b414d01b454b064a4544..891e856a3613f5b3c2998f5ea1bfbb2c1bdab0c7 100644 (file)
@@ -28,6 +28,7 @@
 #include <errno.h>
 #include <sys/utsname.h>
 #include "xs_internal.h"
+#include "xend_internal.h"
 
 /* required for dom0_getdomaininfo_t */
 #include <xen/dom0_ops.h>
@@ -201,6 +202,15 @@ union xen_getschedulerid {
 };
 typedef union xen_getschedulerid xen_getschedulerid;
 
+struct xen_v2s4_availheap {
+    uint32_t min_bitwidth;  /* Smallest address width (zero if don't care). */
+    uint32_t max_bitwidth;  /* Largest address width (zero if don't care). */
+    int32_t  node;          /* NUMA node (-1 for sum across all nodes). */
+    uint64_t avail_bytes;   /* Bytes available in the specified region. */
+};
+
+typedef struct xen_v2s4_availheap  xen_v2s4_availheap;
+
 
 #define XEN_GETDOMAININFOLIST_ALLOC(domlist, size)                      \
     (hypervisor_version < 2 ?                                           \
@@ -523,6 +533,11 @@ typedef struct xen_v2d5_setvcpumap xen_v2d5_getvcpumap;
  */
 #define XEN_V2_OP_GETSCHEDULERID       4
 
+/*
+ * from V2 we get the available heap information
+ */
+#define XEN_V2_OP_GETAVAILHEAP         9
+
 /*
  * from V2 we get the scheduler parameter
  */
@@ -584,6 +599,7 @@ struct xen_op_v2_sys {
         xen_v2_getdomaininfolistop   getdomaininfolist;
         xen_v2s3_getdomaininfolistop getdomaininfolists3;
         xen_v2_getschedulerid        getschedulerid;
+        xen_v2s4_availheap           availheap;
         uint8_t padding[128];
     } u;
 };
@@ -2012,7 +2028,7 @@ xenHypervisorInit(void)
 #endif
         return(-1);
     }
-    /* Currently consider RHEL5.0 Fedora7 and xen-unstable */
+    /* Currently consider RHEL5.0 Fedora7, xen-3.1, and xen-unstable */
     sys_interface_version = 2; /* XEN_SYSCTL_INTERFACE_VERSION */
     if (virXen_getdomaininfo(fd, 0, &info) == 1) {
         /* RHEL 5.0 */
@@ -2035,7 +2051,7 @@ xenHypervisorInit(void)
 
     sys_interface_version = 3; /* XEN_SYSCTL_INTERFACE_VERSION */
     if (virXen_getdomaininfo(fd, 0, &info) == 1) {
-        /* xen-unstable */
+        /* xen-3.1 */
         dom_interface_version = 5; /* XEN_DOMCTL_INTERFACE_VERSION */
         if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){
 #ifdef DEBUG
@@ -2045,6 +2061,18 @@ xenHypervisorInit(void)
         }
     }
 
+    sys_interface_version = 4; /* XEN_SYSCTL_INTERFACE_VERSION */
+    if (virXen_getdomaininfo(fd, 0, &info) == 1) {
+        /* xen-unstable */
+        dom_interface_version = 5; /* XEN_DOMCTL_INTERFACE_VERSION */
+        if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){
+#ifdef DEBUG
+            fprintf(stderr, "Using hypervisor call v2, sys ver4 dom ver5\n");
+#endif
+            goto done;
+        }
+    }
+
     hypervisor_version = 1;
     sys_interface_version = -1;
     if (virXen_getdomaininfo(fd, 0, &info) == 1) {
@@ -2200,7 +2228,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
     char line[1024], *str, *token;
     regmatch_t subs[4];
     char *saveptr = NULL;
-    int i, r;
+    int i, r, topology;
 
     char hvm_type[4] = ""; /* "vmx" or "svm" (or "" if not in CPU). */
     int host_pae = 0;
@@ -2377,6 +2405,12 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
   </host>\n", -1);
     if (r == -1) goto vir_buffer_failed;
 
+    if (sys_interface_version >= 4) {
+        topology = xenDaemonNodeGetTopology(conn, xml);
+        if (topology != 0)
+            goto topology_failed;
+    }
+
     for (i = 0; i < nr_guest_archs; ++i) {
         r = virBufferVSprintf (xml,
                                "\
@@ -2438,6 +2472,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
   </guest>\n", -1);
         if (r == -1) goto vir_buffer_failed;
     }
+
     r = virBufferAdd (xml,
                       "\
 </capabilities>\n", -1);
@@ -2450,6 +2485,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
 
  vir_buffer_failed:
     virXenError(VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
+ topology_failed:
     virBufferFree (xml);
     return NULL;
 }
@@ -2938,6 +2974,79 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
 }
 
 #ifndef PROXY
+/**
+ * xenHypervisorNodeGetCellsFreeMemory:
+ * @conn: pointer to the hypervisor connection
+ * @freeMems: pointer to the array of unsigned long long
+ * @startCell: index of first cell to return freeMems info on. 
+ * @maxCells: Maximum number of cells for which freeMems information can 
+ *            be returned.
+ *
+ * This call returns the amount of free memory in one or more NUMA cells.
+ * The @freeMems array must be allocated by the caller and will be filled
+ * with the amount of free memory in kilobytes for each cell requested, 
+ * starting with startCell (in freeMems[0]), up to either 
+ * (startCell + maxCells), or the number of additional cells in the node, 
+ * whichever is smaller.
+ *
+ * Returns the number of entries filled in freeMems, or -1 in case of error.
+ */
+int
+xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *freeMems,
+                                    int startCell, int maxCells)
+{
+    xen_op_v2_sys op_sys;
+    int i, j, ret;
+    xenUnifiedPrivatePtr priv;
+    static int nbNodeCells = -1;
+    virNodeInfo nodeInfo;
+    
+
+    if (nbNodeCells == -1) {
+        if (xenDaemonNodeGetInfo(conn, &nodeInfo)) {
+            virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
+                             "cannot determine actual number of cells",0);
+            return -1;
+        }
+        nbNodeCells = nodeInfo.nodes;
+    }
+
+    if ((conn == NULL) || (maxCells < 1) || (startCell >= nbNodeCells)) {
+        virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+                        "invalid argument", 0);
+        return -1;
+    }
+    /*
+     * Support only sys_interface_version >=4
+     */
+    if (sys_interface_version < 4) {
+        virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
+                        "unsupported in sys interface < 4", 0);
+        return -1;
+    }
+
+    priv = (xenUnifiedPrivatePtr) conn->privateData;
+    if (priv->handle < 0) {
+        virXenErrorFunc (VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+                        "priv->handle invalid", 0);
+        return -1;
+    }
+
+    memset(&op_sys, 0, sizeof(op_sys));
+    op_sys.cmd = XEN_V2_OP_GETAVAILHEAP;
+
+    for (i = startCell, j = 0;(i < nbNodeCells) && (j < maxCells);i++,j++) {
+        op_sys.u.availheap.node = i;
+        ret = xenHypervisorDoV2Sys(priv->handle, &op_sys);
+        if (ret < 0) {
+            return(-1);
+        }
+        freeMems[j] = op_sys.u.availheap.avail_bytes;
+    }
+    return (j);
+}
+
+
 /**
  * xenHypervisorPauseDomain:
  * @domain: pointer to the domain block
index be4d79e834b389bf188ae40011c9b1381086451e..94f5abdb7e2f5fd29adfb21ef254089a23c307fe 100644 (file)
@@ -93,6 +93,10 @@ int     xenHypervisorDomainInterfaceStats (virDomainPtr domain,
                                         const char *path,
                                         struct _virDomainInterfaceStats *stats);
 
+int    xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn,
+                                         unsigned long long *freeMems,
+                                         int startCell,
+                                         int maxCells);
 #ifdef __cplusplus
 }
 #endif
index e7b8842e4ced68c4581fdd17ef7bd2542fbed4e4..cddda39bcb93ff3fbbb22de0ced4d89bf56266ac 100644 (file)
@@ -1053,6 +1053,20 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path,
     return -1;
 }
 
+static int
+xenUnifiedNodeGetCellsFreeMemory (virConnectPtr conn, unsigned long long *freeMems,
+                                  int startCell, int maxCells)
+{
+    GET_PRIVATE (conn);
+
+    if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET])
+        return xenHypervisorNodeGetCellsFreeMemory (conn, freeMems, 
+                                                    startCell, maxCells);
+
+    xenUnifiedError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
+
 /*----- Register with libvirt.c, and initialise Xen drivers. -----*/
 
 #define VERSION ((DOM0_INTERFACE_VERSION >> 24) * 1000000 +         \
@@ -1113,6 +1127,7 @@ static virDriver xenUnifiedDriver = {
     .domainMigrateFinish               = xenUnifiedDomainMigrateFinish,
     .domainBlockStats  = xenUnifiedDomainBlockStats,
     .domainInterfaceStats = xenUnifiedDomainInterfaceStats,
+    .nodeGetCellsFreeMemory = xenUnifiedNodeGetCellsFreeMemory,
 };
 
 /**
index 29a11f7ea9d06a34d38f0bba4ab15f6a98596d85..a1892a7fb5cede0264be884cd36f578494c2e83a 100644 (file)
@@ -30,6 +30,7 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <libxml/uri.h>
+#include <ctype.h>
 #include <errno.h>
 
 #include "libvirt/libvirt.h"
@@ -1871,6 +1872,198 @@ sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info)
     return (0);
 }
 
+/**
+ * getNumber:
+ * @pointer: pointer to string beginning with  numerical characters
+ * @result: pointer to integer for storing the numerical result
+ *
+ * Internal routine extracting a number from the beginning of a string
+ *
+ * Returns the number of characters that were extracted as digits
+ * or -1 if no digits were found.
+ */
+static int
+getNumber (const char * pointer, int * result) {
+    int len = 0;
+    while (isdigit(*(pointer + len)))
+        len++;
+    if (len == 0)
+        return -1;
+    *(result) = atoi(pointer);
+    return (len);
+}
+
+/**
+ * sexpr_to_xend_topology_xml:
+ * @root: an S-Expression describing a node
+ *
+ * Internal routine creating an XML string with the values from
+ * the node root provided.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+static int 
+sexpr_to_xend_topology_xml(virConnectPtr conn, struct sexpr *root, virBufferPtr xml)
+{
+    const char *nodeToCpu;
+    const char *offset;
+    int cellNum;
+    int numCells = 0;
+    int numCpus;
+    int cellCpuCount = 0; 
+    int nodeCpuCount = 0; 
+    int start; 
+    int finish;
+    int r;
+    int i;
+    int len; 
+    int cpuNum; 
+    int *cpuIdsPtr = NULL; 
+    int *iCpuIdsPtr = NULL;
+    char next;
+
+    nodeToCpu = sexpr_node(root, "node/node_to_cpu");
+    if (nodeToCpu == NULL) {
+        virXendError(conn, VIR_ERR_INTERNAL_ERROR,
+                     _("failed to parse topology information"));
+        goto error;
+    }
+
+    numCells = sexpr_int(root, "node/nr_nodes");
+    numCpus = sexpr_int(root, "node/nr_cpus");
+
+    /* array for holding all cpu numbers associated with a single cell. 
+     * Should never need more than numCpus (which is total number of 
+     * cpus for the node) 
+     */
+    cpuIdsPtr = iCpuIdsPtr = malloc(numCpus * sizeof(int));
+    if (cpuIdsPtr == NULL) {
+        goto vir_buffer_failed;
+    }
+
+    /* start filling in xml */
+    r = virBufferVSprintf (xml,
+                               "\
+  <topology>\n\
+    <cells num='%d'>\n",
+                           numCells);
+    if (r == -1) goto vir_buffer_failed;
+
+    offset = nodeToCpu;
+    /* now iterate through all cells and find associated cpu ids */
+    /* example of string being parsed: "node0:0-3,7,9-10\n   node1:11-14\n" */
+    while ((offset = strstr(offset, "node")) != NULL) {
+        cpuIdsPtr = iCpuIdsPtr;
+        cellCpuCount = 0;
+        offset +=4;
+        if ((len = getNumber(offset, &cellNum)) < 0) {
+            virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
+            goto error;
+        }
+        offset += len;
+        if (*(offset) != ':') {
+            virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
+            goto error;
+        }
+        offset++;
+        /* get list of cpus associated w/ single cell */
+        while (1) {
+            if ((len = getNumber(offset, &cpuNum)) < 0) {
+                virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
+                goto error;
+            }
+            offset += len;
+            next = *(offset);
+            if (next == '-') {
+                offset++;
+                start = cpuNum;
+                if ((len = getNumber(offset, &finish)) < 0) {
+                    virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
+                    goto error;
+                }
+                if (start > finish) {
+                    virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
+                    goto error;
+
+                }
+                for (i=start; i<=finish && nodeCpuCount<numCpus; i++) {
+                    *(cpuIdsPtr++) = i;
+                    cellCpuCount++;
+                    nodeCpuCount++;
+                }
+                if (nodeCpuCount > numCpus) {
+                    virXendError(conn, VIR_ERR_XEN_CALL, 
+                                 "conflicting cpu counts");
+                    goto error;
+                }
+                offset += len;
+                next = *(offset);
+                offset++;
+                if (next == ',') {
+                    continue;
+                } else if ((next == '\\') || (next =='\0')) {
+                    break;
+                } else {
+                    virXendError(conn, VIR_ERR_XEN_CALL, 
+                                 " topology string syntax error");
+                    goto error;
+                }
+            } else {
+                /* add the single number */
+                if (nodeCpuCount >= numCpus) {
+                    virXendError(conn, VIR_ERR_XEN_CALL, 
+                                 "conflicting cpu counts");
+                    goto error;
+                }
+                *(cpuIdsPtr++) = cpuNum;
+                cellCpuCount++;
+                nodeCpuCount++;
+                if (next == ',') {
+                    offset++;
+                    continue;
+                } else if ((next == '\\') || (next =='\0')) {
+                    break;
+                } else {
+                    virXendError(conn, VIR_ERR_XEN_CALL, 
+                                 " topology string syntax error");
+                    goto error;
+                }
+            }
+        }    
+
+        /* add xml for all cpus associated with one cell */
+        r = virBufferVSprintf (xml, "\
+      <cell id='%d'>\n\
+        <cpus num='%d'>\n", cellNum, cellCpuCount);
+        if (r == -1) goto vir_buffer_failed;
+
+        for (i = 0; i < cellCpuCount; i++) {
+            r = virBufferVSprintf (xml, "\
+           <cpu id='%d'/>\n", *(iCpuIdsPtr + i));
+        if (r == -1) goto vir_buffer_failed;
+        }
+        r = virBufferAdd (xml, "\
+        </cpus>\n\
+      </cell>\n", -1);
+        if (r == -1) goto vir_buffer_failed;
+    }            
+    r = virBufferAdd (xml, "\
+    </cells>\n\
+  </topology>\n", -1);
+    if (r == -1) goto vir_buffer_failed;
+    free(iCpuIdsPtr);
+    return (0);
+    
+
+vir_buffer_failed:
+    virXendError(conn, VIR_ERR_NO_MEMORY, _("allocate new buffer"));
+        
+error:
+    if (iCpuIdsPtr)
+        free(iCpuIdsPtr);
+    return (-1);
+}
+
 #ifndef PROXY
 /**
  * sexpr_to_domain:
@@ -1956,7 +2149,7 @@ xenDaemonOpen(virConnectPtr conn, const char *name,
 {
     xmlURIPtr uri = NULL;
     int ret;
-
+     
     /* If the name is just "xen" (it might originally have been NULL,
      * see xenUnifiedOpen) or any URI beginning with "xen:///" then
      * try default paths and methods to get to the xend socket.
@@ -2588,6 +2781,39 @@ xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
     return (ret);
 }
 
+/**
+ * xenDaemonNodeGetTopology:
+ * @conn: pointer to the Xen Daemon block
+ *
+ * This method retrieves a node's topology information.
+ *
+ * Returns -1 in case of error, 0 otherwise.
+ */
+int
+xenDaemonNodeGetTopology(virConnectPtr conn, virBufferPtr xml) {
+    int ret = -1;
+    struct sexpr *root;
+
+    if (!VIR_IS_CONNECT(conn)) {
+        virXendError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
+        return (-1);
+    }
+
+    if (xml == NULL) {
+        virXendError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
+        return (-1);
+        }
+
+    root = sexpr_get(conn, "/xend/node/");
+    if (root == NULL) {
+        return (-1);
+    }
+
+    ret = sexpr_to_xend_topology_xml(conn, root, xml);
+    sexpr_free(root);
+    return (ret);
+}
+
 #ifndef PROXY
 /**
  * xenDaemonGetType:
index 68833b0d755eff5f7ab69c8c6d75c6330bcd5cde..67c44ec8bdf828031d8f6849ca8e39547c7625b7 100644 (file)
@@ -19,6 +19,7 @@
 #include <stdbool.h>
 
 #include "libvirt/libvirt.h"
+#include "buf.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -182,6 +183,7 @@ int xenDaemonOpen(virConnectPtr conn, const char *name, int flags);
 int xenDaemonClose(virConnectPtr conn);
 int xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer);
 int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
+int xenDaemonNodeGetTopology(virConnectPtr conn, virBufferPtr xml);
 int xenDaemonDomainSuspend(virDomainPtr domain);
 int xenDaemonDomainResume(virDomainPtr domain);
 int xenDaemonDomainShutdown(virDomainPtr domain);
diff --git a/virsh.1 b/virsh.1
index 3030e8507b7d1f82c8e8ced79639183b2f02e82b..09df396e4b0b0477b2c2a2179f261ee35eb3f06a 100644 (file)
--- a/virsh.1
+++ b/virsh.1
 .\" ========================================================================
 .\"
 .IX Title "VIRSH 1"
-.TH VIRSH 1 "2007-08-14" "perl v5.8.8" "Virtualization Support"
+.TH VIRSH 1 "2007-09-28" "perl v5.8.8" "Virtualization Support"
 .SH "NAME"
 virsh \- management user interface
 .SH "SYNOPSIS"
@@ -241,6 +241,7 @@ capabilities in terms of \s-1CPU\s0 and features, and a set of description
 for each kind of guest which can be virtualized. For a more complete
 description see:
   <http://libvirt.org/format.html#Capa1>
+The \s-1XML\s0 also show the \s-1NUMA\s0 topology informations if available.
 .IP "\fBlist\fR" 4
 .IX Item "list"
 Prints information about one or more domains.  If no domains are
@@ -260,6 +261,10 @@ An example format for the list is as follows:
 .Sp
 Name is the name of the domain.  \s-1ID\s0 the domain numeric id.  
  State is the run state (see below).  
+.IP "\fBfreecell\fR optional \fIcellno\fR" 4
+.IX Item "freecell optional cellno"
+Prints the available amount of memory on the machine or within a 
+\&\s-1NUMA\s0 cell if \fIcellno\fR is provided.
 .RS 4
 .Sp
 .RS 4