--- src/org/libvirt/Connect.java | 9 + src/org/libvirt/Domain.java | 307 +++++++++++++--------- src/org/libvirt/DomainBlockStats.java | 13 + src/org/libvirt/DomainInfo.java | 14 + src/org/libvirt/DomainInterfaceStats.java | 17 ++ src/org/libvirt/ErrorHandler.java | 11 +- src/org/libvirt/Network.java | 8 +- src/org/libvirt/NodeInfo.java | 4 +- src/org/libvirt/SchedBooleanParameter.java | 20 ++- src/org/libvirt/SchedDoubleParameter.java | 13 + src/org/libvirt/SchedIntParameter.java | 13 + src/org/libvirt/SchedLongParameter.java | 14 + src/org/libvirt/SchedParameter.java | 43 +++ src/org/libvirt/SchedUintParameter.java | 13 + src/org/libvirt/SchedUlongParameter.java | 13 + src/org/libvirt/VcpuInfo.java | 13 + src/org/libvirt/jna/Libvirt.java | 42 +++- src/org/libvirt/jna/virDomainBlockStats.java | 12 + src/org/libvirt/jna/virDomainInfo.java | 13 + src/org/libvirt/jna/virDomainInterfaceStats.java | 16 ++ src/org/libvirt/jna/virSchedParameter.java | 11 + src/org/libvirt/jna/virSchedParameterValue.java | 13 + src/org/libvirt/jna/virVcpuInfo.java | 12 + src/test.java | 154 ++++++----- 24 files changed, 595 insertions(+), 203 deletions(-) create mode 100644 src/org/libvirt/jna/virDomainBlockStats.java create mode 100644 src/org/libvirt/jna/virDomainInfo.java create mode 100644 src/org/libvirt/jna/virDomainInterfaceStats.java create mode 100644 src/org/libvirt/jna/virSchedParameter.java create mode 100644 src/org/libvirt/jna/virSchedParameterValue.java create mode 100644 src/org/libvirt/jna/virVcpuInfo.java diff --git a/src/org/libvirt/Connect.java b/src/org/libvirt/Connect.java index 218bda3..bab1d23 100644 --- a/src/org/libvirt/Connect.java +++ b/src/org/libvirt/Connect.java @@ -820,4 +820,13 @@ public class Connect { protected void processError() throws LibvirtException { ErrorHandler.processError(libvirt, VCP) ; } + + public static int[] convertUUIDBytes(byte bytes[]) { + int[] returnValue = new int[Libvirt.VIR_UUID_BUFLEN] ; + for (int x = 0 ; x < Libvirt.VIR_UUID_BUFLEN ; x++) { + returnValue[x] = (int) bytes[x] ; + } + return returnValue ; + } + } diff --git a/src/org/libvirt/Domain.java b/src/org/libvirt/Domain.java index e9b5d57..ab8cd94 100644 --- a/src/org/libvirt/Domain.java +++ b/src/org/libvirt/Domain.java @@ -1,6 +1,16 @@ package org.libvirt; +import org.libvirt.jna.Libvirt; +import org.libvirt.jna.virDomainBlockStats; +import org.libvirt.jna.virDomainInfo; +import org.libvirt.jna.virDomainInterfaceStats; +import org.libvirt.jna.virSchedParameter; +import org.libvirt.jna.virVcpuInfo; + +import com.sun.jna.Native; +import com.sun.jna.NativeLong; import com.sun.jna.Pointer; +import com.sun.jna.ptr.IntByReference; public class Domain { @@ -35,6 +45,11 @@ public class Domain { * The Connect Object that represents the Hypervisor of this Domain */ private Connect virConnect; + + /** + * The libvirt connection from the hypervisor + */ + protected Libvirt libvirt ; /** @@ -47,6 +62,7 @@ public class Domain { Domain(Connect virConnect, Pointer VDP){ this.virConnect = virConnect; this.VDP = VDP; + this.libvirt = virConnect.libvirt ; } /** @@ -59,11 +75,11 @@ public class Domain { * @see <a href="http://libvirt.org/format.html#Normal1" >The XML Description format </a> */ public String getXMLDesc(int flags) throws LibvirtException{ -// return _getXMLDesc(VDP, flags); - throw new RuntimeException("Not Implemented") ; + String returnValue = libvirt.virDomainGetXMLDesc(VDP, flags) ; + processError() ; + return returnValue ; } -// private native String _getXMLDesc(long VDP, int flags) throws LibvirtException; /** * Provides a boolean value indicating whether the network is configured to be automatically started when the host machine boots. @@ -72,13 +88,13 @@ public class Domain { * @throws LibvirtException */ public boolean getAutostart() throws LibvirtException{ -// return _getAutostart(VDP); - throw new RuntimeException("Not Implemented") ; + IntByReference autoStart = new IntByReference() ; + libvirt.virDomainGetAutostart(VDP, autoStart) ; + processError() ; + return autoStart.getValue() != 0 ? true : false ; } -// private native boolean _getAutostart(long VDP) throws LibvirtException; - /** * Configures the network to be automatically started when the host machine boots. * @@ -86,11 +102,11 @@ public class Domain { * @throws LibvirtException */ public void setAutostart(boolean autostart) throws LibvirtException{ -// _setAutostart(VDP, autostart); - throw new RuntimeException("Not Implemented") ; + int autoValue = autostart ? 1 : 0 ; + libvirt.virDomainSetAutostart(VDP, autoValue) ; + processError() ; } -// private native int _setAutostart(long VDP, boolean autostart) throws LibvirtException; /** * Provides the connection object associated with a domain. @@ -108,11 +124,11 @@ public class Domain { * @throws LibvirtException */ public int getID() throws LibvirtException{ -// return _getID(VDP); - throw new RuntimeException("Not Implemented") ; + int returnValue = libvirt.virDomainGetID(VDP); + processError() ; + return returnValue ; } -// private native int _getID(long VDP) throws LibvirtException; /** @@ -123,12 +139,16 @@ public class Domain { * @throws LibvirtException */ public DomainInfo getInfo() throws LibvirtException{ -// return _getInfo(VDP); - throw new RuntimeException("Not Implemented") ; + DomainInfo returnValue = null ; + virDomainInfo vInfo = new virDomainInfo() ; + int success = libvirt.virDomainGetInfo(VDP, vInfo) ; + processError() ; + if (success == 0) { + returnValue = new DomainInfo(vInfo) ; + } + return returnValue ; } -// private native DomainInfo _getInfo(long VDP) throws LibvirtException; - /** * Retrieve the maximum amount of physical memory allocated to a domain. * @@ -136,11 +156,11 @@ public class Domain { * @throws LibvirtException */ public long getMaxMemory() throws LibvirtException{ -// return _getMaxMemory(VDP); - throw new RuntimeException("Not Implemented") ; + NativeLong returnValue = libvirt.virDomainGetMaxMemory(VDP) ; + processError() ; + return returnValue.longValue() ; } -// private native long _getMaxMemory(long VDP) throws LibvirtException; /** * * Dynamically change the maximum amount of physical memory allocated to a domain. @@ -150,12 +170,10 @@ public class Domain { * @throws LibvirtException */ public void setMaxMemory(long memory) throws LibvirtException{ -// _setMaxMemory(VDP, memory); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainSetMaxMemory(VDP, new NativeLong(memory)) ; + processError() ; } -// private native long _setMaxMemory(long VDP, long memory) throws LibvirtException; - /** * Provides the maximum number of virtual CPUs supported for the guest VM. @@ -166,12 +184,11 @@ public class Domain { * @throws LibvirtException */ public int getMaxVcpus() throws LibvirtException{ -// return _getMaxVcpus(VDP); - throw new RuntimeException("Not Implemented") ; + int returnValue = libvirt.virDomainGetMaxVcpus(VDP) ; + processError() ; + return returnValue ; } -// private native int _getMaxVcpus(long VDP) throws LibvirtException; - /** * Gets the public name for this domain @@ -180,11 +197,11 @@ public class Domain { * @throws LibvirtException */ public String getName() throws LibvirtException{ -// return _getName(VDP); - throw new RuntimeException("Not Implemented") ; + String returnValue = libvirt.virDomainGetName(VDP); + processError() ; + return returnValue ; } -// private native String _getName(long VDP) throws LibvirtException; /** * Gets the type of domain operation system. @@ -193,12 +210,11 @@ public class Domain { * @throws LibvirtException */ public String getOSType() throws LibvirtException{ -// return _getOSType(VDP); - throw new RuntimeException("Not Implemented") ; + String returnValue = libvirt.virDomainGetOSType(VDP); + processError() ; + return returnValue ; } -// private native String _getOSType(long VDP) throws LibvirtException; - /** * Gets the scheduler parameters. @@ -207,11 +223,23 @@ public class Domain { * @throws LibvirtException */ public SchedParameter[] getSchedulerParameters() throws LibvirtException{ -// return _getSchedulerParameters(VDP); - throw new RuntimeException("Not Implemented") ; + IntByReference nParams = new IntByReference() ; + SchedParameter[] returnValue = new SchedParameter[0] ; + String scheduler = libvirt.virDomainGetSchedulerType(VDP, nParams) ; + processError() ; + if (scheduler != null) { + virSchedParameter[] nativeParams = new virSchedParameter[nParams.getValue()] ; + returnValue = new SchedParameter[nParams.getValue()] ; + libvirt.virDomainGetSchedulerParameters(VDP, nativeParams, nParams) ; + processError() ; + for (int x = 0 ; x < nParams.getValue() ; x++ ) { + returnValue[x] = SchedParameter.create(nativeParams[x]) ; + } + } + + return returnValue ; } -// private native SchedParameter[] _getSchedulerParameters (long VDP) throws LibvirtException; /** * Changes the scheduler parameters @@ -220,11 +248,16 @@ public class Domain { * @throws LibvirtException */ public void setSchedulerParameters(SchedParameter[] params) throws LibvirtException{ -// _setSchedulerParameters(VDP, params); - throw new RuntimeException("Not Implemented") ; + IntByReference nParams = new IntByReference() ; + nParams.setValue(params.length) ; + virSchedParameter[] input = new virSchedParameter[params.length] ; + for (int x = 0 ; x < params.length ; x++) { + input[x] = SchedParameter.toNative(params[x]) ; + } + libvirt.virDomainSetSchedulerParameters(VDP, input, nParams) ; + processError() ; } -// private native int _setSchedulerParameters(long VDP, SchedParameter[] params) throws LibvirtException; //getSchedulerType //We don't expose the nparams return value, it's only needed for the SchedulerParameters allocations, @@ -236,11 +269,14 @@ public class Domain { * @throws LibvirtException */ public String[] getSchedulerType() throws LibvirtException{ -// return _getSchedulerType(VDP); - throw new RuntimeException("Not Implemented") ; + IntByReference nParams = new IntByReference() ; + String returnValue = libvirt.virDomainGetSchedulerType(VDP, nParams) ; + processError() ; + String[] array = new String[1] ; + array[0] = returnValue ; + return array; } -// private native String[] _getSchedulerType(long VDP) throws LibvirtException; /** * Get the UUID for this domain. @@ -250,11 +286,16 @@ public class Domain { * @see <a href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a> */ public int[] getUUID() throws LibvirtException{ -// return _getUUID(VDP); - throw new RuntimeException("Not Implemented") ; + byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN] ; + int success = libvirt.virDomainGetUUID(VDP, bytes) ; + processError() ; + int[] returnValue = new int[0] ; + if (success == 0) { + returnValue = Connect.convertUUIDBytes(bytes) ; + } + return returnValue ; } - -// private native int[] _getUUID(long VDP) throws LibvirtException; + /** * Gets the UUID for this domain as string. @@ -264,12 +305,16 @@ public class Domain { * @see <a href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a> */ public String getUUIDString() throws LibvirtException{ -// return _getUUIDString(VDP); - throw new RuntimeException("Not Implemented") ; + byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN] ; + int success = libvirt.virDomainGetUUIDString(VDP, bytes) ; + processError() ; + String returnValue = null ; + if (success == 0) { + returnValue = Native.toString(bytes) ; + } + return returnValue ; } -// private native String _getUUIDString(long VDP) throws LibvirtException; - /** * Extracts information about virtual CPUs of this domain * @@ -277,11 +322,18 @@ public class Domain { * @throws LibvirtException */ public VcpuInfo[] getVcpusInfo() throws LibvirtException{ -// return _getVcpusInfo(VDP); - throw new RuntimeException("Not Implemented") ; + int cpuCount = this.getMaxVcpus() ; + VcpuInfo[] returnValue = new VcpuInfo[cpuCount] ; + virVcpuInfo[] infos = new virVcpuInfo[cpuCount] ; + libvirt.virDomainGetVcpus(VDP, infos, cpuCount, null, 0) ; + processError() ; + for (int x = 0 ; x < cpuCount ; x++) { + returnValue[x] = new VcpuInfo(infos[x]) ; + } + return returnValue ; } -// private native VcpuInfo[] _getVcpusInfo(long VDP) throws LibvirtException; + /** * Returns the cpumaps for this domain @@ -291,12 +343,24 @@ public class Domain { * @throws LibvirtException */ public int[] getVcpusCpuMaps() throws LibvirtException{ -// return _getVcpusCpuMaps(VDP); - throw new RuntimeException("Not Implemented") ; + int[] returnValue = new int[0] ; + int cpuCount = this.getMaxVcpus() ; + + if (cpuCount >0) { + NodeInfo nodeInfo = virConnect.nodeInfo() ; + int maplength = cpuMapLength(nodeInfo.maxCpus()) ; + virVcpuInfo[] infos = new virVcpuInfo[cpuCount] ; + returnValue = new int[cpuCount*maplength] ; + byte[] cpumaps = new byte[cpuCount*maplength] ; + libvirt.virDomainGetVcpus(VDP, infos, cpuCount, cpumaps, maplength) ; + processError() ; + for (int x =0 ; x < cpuCount*maplength ; x++) { + returnValue[x] = (int) cpumaps[x] ; + } + } + return returnValue ; } -// private native int[] _getVcpusCpuMaps(long VDP) throws LibvirtException; - /** * Dynamically changes the real CPUs which can be allocated to a virtual CPU. @@ -307,11 +371,14 @@ public class Domain { * @throws LibvirtException */ public void pinVcpu(int vcpu, int[] cpumap) throws LibvirtException{ -// _pinVcpu(VDP, vcpu, cpumap); - throw new RuntimeException("Not Implemented") ; + byte[] packedMap = new byte[cpumap.length] ; + for (int x = 0 ; x < cpumap.length ; x++) { + packedMap[x] = (byte) cpumap[x] ; + } + libvirt.virDomainPinVcpu(VDP, vcpu, packedMap, cpumap.length) ; + processError() ; } -// private native int _pinVcpu(long VDP, int vcpu, int[]cpumap) throws LibvirtException; /** * Dynamically changes the number of virtual CPUs used by this domain. @@ -322,11 +389,10 @@ public class Domain { * @throws LibvirtException */ public void setVcpus(int nvcpus) throws LibvirtException{ -// _setVcpus(VDP, nvcpus); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainSetVcpus(VDP, nvcpus) ; + processError() ; } -// private native int _setVcpus(long VDP, int nvcpus) throws LibvirtException; /** * Creates a virtual device attachment to backend. @@ -335,12 +401,11 @@ public class Domain { * @throws LibvirtException */ public void attachDevice(String xmlDesc) throws LibvirtException{ -// _attachDevice(VDP, xmlDesc); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainAttachDevice(VDP, xmlDesc); + processError() ; } -// private native int _attachDevice(long VDP, String xmlDesc) throws LibvirtException; - + /** * Destroys a virtual device attachment to backend. * @@ -348,11 +413,10 @@ public class Domain { * @throws LibvirtException */ public void detachDevice(String xmlDesc) throws LibvirtException{ -// _detachDevice(VDP, xmlDesc); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainDetachDevice(VDP, xmlDesc); + processError() ; } -// private native int _detachDevice(long VDP, String xmlDesc) throws LibvirtException; /** @@ -368,11 +432,12 @@ public class Domain { * @throws LibvirtException */ public DomainBlockStats blockStats(String path) throws LibvirtException{ -// return _blockStats(VDP, path); - throw new RuntimeException("Not Implemented") ; + virDomainBlockStats stats = new virDomainBlockStats() ; + libvirt.virDomainBlockStats(VDP, path, stats, stats.size()) ; + processError() ; + return new DomainBlockStats(stats) ; } - -// private native DomainBlockStats _blockStats(long VDP, String path) throws LibvirtException; + /** * Returns network interface stats for interfaces attached to this domain. @@ -386,11 +451,12 @@ public class Domain { * @throws LibvirtException */ public DomainInterfaceStats interfaceStats(String path) throws LibvirtException{ -// return _interfaceStats(VDP, path); - throw new RuntimeException("Not Implemented") ; + virDomainInterfaceStats stats = new virDomainInterfaceStats() ; + libvirt.virDomainInterfaceStats(VDP, path, stats, stats.size()) ; + processError() ; + return new DomainInterfaceStats(stats) ; } -// private native DomainInterfaceStats _interfaceStats(long VDP, String path) throws LibvirtException; /** * Dumps the core of this domain on a given file for analysis. @@ -401,11 +467,10 @@ public class Domain { * @throws LibvirtException */ public void coreDump(String to, int flags) throws LibvirtException{ -// _coreDump(VDP, to, flags); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainCoreDump(VDP, to, flags) ; + processError() ; } -// private native int _coreDump(long VDP, String to, int flags) throws LibvirtException; /** * Launches this defined domain. @@ -414,11 +479,10 @@ public class Domain { * @throws LibvirtException */ public void create() throws LibvirtException{ -// _create(VDP); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainCreate(VDP); + processError() ; } -// private native int _create(long VDP) throws LibvirtException; /** * Destroys this domain object. @@ -429,11 +493,10 @@ public class Domain { * @throws LibvirtException */ public void destroy() throws LibvirtException{ -// _destroy(VDP); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainDestroy(VDP); + processError() ; } - -// private native int _destroy(long VDP) throws LibvirtException; + /** * Frees this domain object. @@ -443,12 +506,11 @@ public class Domain { * @throws LibvirtException */ public void free() throws LibvirtException{ -// _free(VDP); -// VDP=0; - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainFree(VDP); + processError() ; + VDP=null ; } -// private native int _free(long VDP) throws LibvirtException; /** @@ -478,11 +540,11 @@ public class Domain { * @throws LibvirtException */ public Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException{ -// return new Domain(dconn, _migrate(VDP, dconn, flags, dname, uri, bandwidth)); - throw new RuntimeException("Not Implemented") ; + Pointer newPtr = libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth)) ; + processError() ; + return new Domain(dconn, newPtr) ; } -// private native long _migrate(long VDP, Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException; /** * Reboot this domain, the domain object is still usable there after but the domain OS is being stopped for a restart. @@ -492,11 +554,10 @@ public class Domain { * @throws LibvirtException */ public void reboot(int flags) throws LibvirtException{ -// _reboot(VDP, flags); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainReboot(VDP, flags); + processError() ; } -// private native int _reboot(long VDP, int flags) throws LibvirtException; /** * Suspends this active domain, the process is frozen without further access to CPU resources and I/O but the memory used by the domain at the hypervisor level will stay allocated. @@ -505,11 +566,10 @@ public class Domain { * @throws LibvirtException */ public void suspend() throws LibvirtException{ -// _suspend(VDP); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainSuspend(VDP); + processError() ; } -// private native int _suspend(long VDP) throws LibvirtException; /** * Resume this suspended domain, the process is restarted from the state where it was frozen by calling virSuspendDomain(). @@ -518,11 +578,10 @@ public class Domain { * @throws LibvirtException */ public void resume() throws LibvirtException{ -// _resume(VDP); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainResume(VDP); + processError() ; } -// private native int _resume(long VDP) throws LibvirtException; /** * Suspends this domain and saves its memory contents to a file on disk. @@ -533,12 +592,11 @@ public class Domain { * @throws LibvirtException */ public void save(String to) throws LibvirtException{ -// _save(VDP, to); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainSave(VDP, to); + processError() ; } -// private native int _save(long VDP, String to) throws LibvirtException; - + /** * Shuts down this domain, the domain object is still usable there after but the domain OS is being stopped. * Note that the guest OS may ignore the request. @@ -547,11 +605,10 @@ public class Domain { * @throws LibvirtException */ public void shutdown() throws LibvirtException{ -// _shutdown(VDP); - throw new RuntimeException("Not Implemented") ; + libvirt.virDomainShutdown(VDP); + processError() ; } -// private native int _shutdown(long VDP) throws LibvirtException; /** * undefines this domain but does not stop it if it is running @@ -559,11 +616,10 @@ public class Domain { * @throws LibvirtException */ public void undefine() throws LibvirtException{ - throw new RuntimeException("Not Implemented") ; -// _undefine(VDP); + libvirt.virDomainUndefine(VDP); + processError() ; } -// private native int _undefine(long VDP) throws LibvirtException; /** * Dynamically changes the target amount of physical memory allocated to this domain. @@ -573,11 +629,26 @@ public class Domain { * @throws LibvirtException */ public void setMemory(long memory) throws LibvirtException{ - throw new RuntimeException("Not Implemented") ; -// _setMemory(VDP, memory); + libvirt.virDomainSetMemory(VDP, new NativeLong(memory)) ; + processError() ; } -// private native int _setMemory(long VDP, long memory) throws LibvirtException; + /** + * It returns the length (in bytes) required to store the complete + * CPU map between a single virtual & all physical CPUs of a domain. + * + */ + public int cpuMapLength(int maxCpus) { + return (((maxCpus)+7)/8) ; + } + + /** + * Error handling logic to throw errors. Must be called after every libvirt + * call. + */ + protected void processError() throws LibvirtException { + virConnect.processError() ; + } } diff --git a/src/org/libvirt/DomainBlockStats.java b/src/org/libvirt/DomainBlockStats.java index c5ed067..b48c066 100644 --- a/src/org/libvirt/DomainBlockStats.java +++ b/src/org/libvirt/DomainBlockStats.java @@ -1,5 +1,7 @@ package org.libvirt; +import org.libvirt.jna.virDomainBlockStats; + /** * This class holds the counters for block device statistics. * @@ -12,4 +14,15 @@ public class DomainBlockStats { public long wr_req; public long wr_bytes; public long errs; + + public DomainBlockStats() { + } + + public DomainBlockStats(virDomainBlockStats vStats) { + this.rd_req = vStats.rd_req ; + this.rd_bytes = vStats.rd_bytes ; + this.wr_req = vStats.wr_req ; + this.wr_bytes = vStats.wr_bytes ; + this.errs = vStats.errs ; + } } diff --git a/src/org/libvirt/DomainInfo.java b/src/org/libvirt/DomainInfo.java index ec493ff..e6a03f8 100644 --- a/src/org/libvirt/DomainInfo.java +++ b/src/org/libvirt/DomainInfo.java @@ -1,5 +1,7 @@ package org.libvirt; +import org.libvirt.jna.virDomainInfo; + /** * This object is returned by Domain.getInfo() * @@ -62,6 +64,18 @@ public class DomainInfo { */ VIR_DOMAIN_CRASHED } + + public DomainInfo() { + + } + + public DomainInfo(virDomainInfo info) { + this.cpuTime = info.cpuTime ; + this.maxMem = info.maxMem.longValue() ; + this.memory = info.memory.longValue() ; + this.nrVirtCpu = info.nrVirtCpu ; + this.state = DomainState.values()[info.state] ; + } public String toString(){ StringBuffer result = new StringBuffer(""); diff --git a/src/org/libvirt/DomainInterfaceStats.java b/src/org/libvirt/DomainInterfaceStats.java index fd3d392..b60b628 100644 --- a/src/org/libvirt/DomainInterfaceStats.java +++ b/src/org/libvirt/DomainInterfaceStats.java @@ -1,5 +1,7 @@ package org.libvirt; +import org.libvirt.jna.virDomainInterfaceStats; + /** * The Domain.interfaceStats method returns th network counters in this object @@ -16,4 +18,19 @@ public class DomainInterfaceStats { public long tx_packets; public long tx_errs; public long tx_drop; + + public DomainInterfaceStats() { + + } + + public DomainInterfaceStats(virDomainInterfaceStats vStats) { + this.rx_bytes = vStats.rx_bytes ; + this.rx_packets = vStats.rx_packets ; + this.rx_errs = vStats.rx_errs ; + this.rx_drop = vStats.rx_drop ; + this.tx_bytes = vStats.tx_bytes ; + this.tx_packets = vStats.tx_packets ; + this.tx_errs = vStats.tx_errs ; + this.tx_drop = vStats.tx_drop ; + } } diff --git a/src/org/libvirt/ErrorHandler.java b/src/org/libvirt/ErrorHandler.java index 0e322ba..7f77937 100644 --- a/src/org/libvirt/ErrorHandler.java +++ b/src/org/libvirt/ErrorHandler.java @@ -9,11 +9,17 @@ public class ErrorHandler { public static void processError(Libvirt libvirt) throws LibvirtException { - + virError vError = new virError() ; + int errorCode = libvirt.virCopyLastError(vError) ; + if (errorCode > 0) { + Error error = new Error(vError) ; + libvirt.virResetLastError() ; + throw new LibvirtException(error) ; + } } + public static void processError(Libvirt libvirt, Pointer conn) throws LibvirtException { - virError vError = new virError() ; int errorCode = libvirt.virConnCopyLastError(conn, vError) ; if (errorCode > 0) { @@ -21,6 +27,5 @@ public class ErrorHandler libvirt.virConnResetLastError(conn) ; throw new LibvirtException(error) ; } - } } diff --git a/src/org/libvirt/Network.java b/src/org/libvirt/Network.java index ce80f6f..c18f239 100644 --- a/src/org/libvirt/Network.java +++ b/src/org/libvirt/Network.java @@ -2,6 +2,7 @@ package org.libvirt; import org.libvirt.jna.Libvirt; +import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; @@ -133,10 +134,7 @@ public class Network { processError() ; int[] returnValue = new int[0] ; if (success == 0) { - returnValue = new int[Libvirt.VIR_UUID_BUFLEN] ; - for (int x = 0 ; x < Libvirt.VIR_UUID_BUFLEN ; x++) { - returnValue[x] = (int) bytes[x] ; - } + returnValue = Connect.convertUUIDBytes(bytes) ; } return returnValue ; } @@ -154,7 +152,7 @@ public class Network { processError() ; String returnValue = null ; if (success == 0) { - returnValue = new String(bytes) ; + returnValue = Native.toString(bytes) ; } return returnValue ; } diff --git a/src/org/libvirt/NodeInfo.java b/src/org/libvirt/NodeInfo.java index 16855ca..0431ed9 100644 --- a/src/org/libvirt/NodeInfo.java +++ b/src/org/libvirt/NodeInfo.java @@ -2,6 +2,8 @@ package org.libvirt; import org.libvirt.jna.virNodeInfo; +import com.sun.jna.Native; + public class NodeInfo { /** * string indicating the CPU model @@ -41,7 +43,7 @@ public class NodeInfo { } public NodeInfo(virNodeInfo vInfo) { -// this.model = new String(vInfo.model) ; + this.model = Native.toString(vInfo.model) ; this.memory = vInfo.memory.longValue() ; this.cpus = vInfo.cpus ; this.mhz = vInfo.mhz ; diff --git a/src/org/libvirt/SchedBooleanParameter.java b/src/org/libvirt/SchedBooleanParameter.java index adde0ec..5e681ca 100644 --- a/src/org/libvirt/SchedBooleanParameter.java +++ b/src/org/libvirt/SchedBooleanParameter.java @@ -11,12 +11,30 @@ public final class SchedBooleanParameter extends SchedParameter{ * The parameter value */ public boolean value; + + public SchedBooleanParameter() { + + } + + public SchedBooleanParameter(boolean value) + { + this.value = value; + } + + public SchedBooleanParameter(byte value) + { + this.value = (((int)value) != 0)? true : false ; + } - public String getValueAsString(){ + public String getValueAsString(){ return Boolean.toString(value); } public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_BOOLEAN"; } + + public int getType() { + return 6 ; + } } diff --git a/src/org/libvirt/SchedDoubleParameter.java b/src/org/libvirt/SchedDoubleParameter.java index 72e1afa..21bc217 100644 --- a/src/org/libvirt/SchedDoubleParameter.java +++ b/src/org/libvirt/SchedDoubleParameter.java @@ -11,6 +11,15 @@ public final class SchedDoubleParameter extends SchedParameter{ * The parameter value */ public double value; + + public SchedDoubleParameter() { + + } + + public SchedDoubleParameter(double value) + { + this.value = value; + } public String getValueAsString(){ return Double.toString(value); @@ -19,4 +28,8 @@ public final class SchedDoubleParameter extends SchedParameter{ public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_DOUBLE"; } + + public int getType() { + return 5 ; + } } diff --git a/src/org/libvirt/SchedIntParameter.java b/src/org/libvirt/SchedIntParameter.java index 0db5e81..af13933 100644 --- a/src/org/libvirt/SchedIntParameter.java +++ b/src/org/libvirt/SchedIntParameter.java @@ -3,6 +3,15 @@ package org.libvirt; public final class SchedIntParameter extends SchedParameter { public int value; + public SchedIntParameter() { + + } + + public SchedIntParameter(int value) + { + this.value = value; + } + public String getValueAsString(){ return Integer.toString(value); } @@ -10,4 +19,8 @@ public final class SchedIntParameter extends SchedParameter { public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_INT"; } + + public int getType() { + return 1 ; + } } diff --git a/src/org/libvirt/SchedLongParameter.java b/src/org/libvirt/SchedLongParameter.java index fafc33c..1b07971 100644 --- a/src/org/libvirt/SchedLongParameter.java +++ b/src/org/libvirt/SchedLongParameter.java @@ -11,6 +11,15 @@ public final class SchedLongParameter extends SchedParameter{ * The parameter value */ public long value; + + public SchedLongParameter() { + + } + + public SchedLongParameter(long value) + { + this.value = value; + } public String getValueAsString(){ return Long.toString(value); @@ -19,4 +28,9 @@ public final class SchedLongParameter extends SchedParameter{ public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_LLONG"; } + + public int getType() { + return 2 ; + } + } diff --git a/src/org/libvirt/SchedParameter.java b/src/org/libvirt/SchedParameter.java index 6ce7855..8f38ef8 100644 --- a/src/org/libvirt/SchedParameter.java +++ b/src/org/libvirt/SchedParameter.java @@ -1,5 +1,12 @@ package org.libvirt; +import java.util.Arrays; + +import org.libvirt.jna.Libvirt; +import org.libvirt.jna.virSchedParameter; + +import com.sun.jna.Native; + /** * The abstract parent of the actual Schedparameter classes * @@ -25,5 +32,41 @@ public abstract class SchedParameter { * @return the Type of the parameter as string */ public abstract String getTypeAsString(); + + /** + * The type of the parameter + * + * @return the Type of the parameter + */ + public abstract int getType() ; + public static SchedParameter create(virSchedParameter vParam) { + SchedParameter returnValue = null ; + switch (vParam.type) { + case (1): returnValue = new SchedIntParameter(vParam.value.i) ;break ; + case (2): returnValue = new SchedUintParameter(vParam.value.ui) ;break ; + case (3): returnValue = new SchedLongParameter(vParam.value.l) ;break ; + case (4): returnValue = new SchedUlongParameter(vParam.value.ul) ;break ; + case (5): returnValue = new SchedDoubleParameter(vParam.value.d) ;break ; + case (6): returnValue = new SchedBooleanParameter(vParam.value.b) ;break ; + } + returnValue.field = Native.toString(vParam.field) ; + return returnValue ; + } + + public static virSchedParameter toNative(SchedParameter param) { + virSchedParameter returnValue = new virSchedParameter() ; + returnValue.field = Arrays.copyOf(param.field.getBytes(), Libvirt.VIR_DOMAIN_SCHED_FIELD_LENGTH) ; + returnValue.type = param.getType() ; + switch (param.getType()) { + case (1): returnValue.value.i = ((SchedIntParameter)param).value ;break ; + case (2): returnValue.value.ui = ((SchedUintParameter)param).value ;break ; + case (3): returnValue.value.l = ((SchedLongParameter)param).value ;break ; + case (4): returnValue.value.ul = ((SchedUlongParameter)param).value ;break ; + case (5): returnValue.value.d = ((SchedDoubleParameter)param).value ;break ; + case (6): returnValue.value.b = (byte)(((SchedBooleanParameter)param).value?1:0) ;break ; + + } + return returnValue ; + } } diff --git a/src/org/libvirt/SchedUintParameter.java b/src/org/libvirt/SchedUintParameter.java index e9882ec..8a6ab75 100644 --- a/src/org/libvirt/SchedUintParameter.java +++ b/src/org/libvirt/SchedUintParameter.java @@ -12,6 +12,15 @@ public final class SchedUintParameter extends SchedParameter { * The parameter value */ public int value; + + public SchedUintParameter() { + + } + + public SchedUintParameter(int value) + { + this.value = value; + } public String getValueAsString(){ return Integer.toString(value); @@ -20,4 +29,8 @@ public final class SchedUintParameter extends SchedParameter { public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_UINT"; } + + public int getType() { + return 3 ; + } } diff --git a/src/org/libvirt/SchedUlongParameter.java b/src/org/libvirt/SchedUlongParameter.java index 96c1812..419c1a8 100644 --- a/src/org/libvirt/SchedUlongParameter.java +++ b/src/org/libvirt/SchedUlongParameter.java @@ -11,6 +11,15 @@ public final class SchedUlongParameter extends SchedParameter{ * The parameter value */ public long value; + + public SchedUlongParameter() { + + } + + public SchedUlongParameter(long value) + { + this.value = value; + } public String getValueAsString(){ return Long.toString(value); @@ -19,4 +28,8 @@ public final class SchedUlongParameter extends SchedParameter{ public String getTypeAsString(){ return "VIR_DOMAIN_SCHED_FIELD_ULLONG"; } + + public int getType() { + return 4 ; + } } diff --git a/src/org/libvirt/VcpuInfo.java b/src/org/libvirt/VcpuInfo.java index 55490e2..b10c07d 100644 --- a/src/org/libvirt/VcpuInfo.java +++ b/src/org/libvirt/VcpuInfo.java @@ -1,5 +1,7 @@ package org.libvirt; +import org.libvirt.jna.virVcpuInfo; + public class VcpuInfo { public int number; public VcpuState state; @@ -10,4 +12,15 @@ public class VcpuInfo { VIR_VCPU_OFFLINE, VIR_VCPU_RUNNING, VIR_VCPU_BLOCKED}; + + public VcpuInfo() { + + } + + public VcpuInfo(virVcpuInfo vVcpu) { + this.number = vVcpu.number ; + this.cpuTime = vVcpu.cpuTime ; + this.cpu = vVcpu.cpu ; + this.state = VcpuState.values()[vVcpu.state] ; + } } diff --git a/src/org/libvirt/jna/Libvirt.java b/src/org/libvirt/jna/Libvirt.java index 8727447..ec67c6f 100644 --- a/src/org/libvirt/jna/Libvirt.java +++ b/src/org/libvirt/jna/Libvirt.java @@ -4,6 +4,7 @@ package org.libvirt.jna; import com.sun.jna.Callback; import com.sun.jna.Library ; import com.sun.jna.Native; +import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.sun.jna.Structure.ByReference; import com.sun.jna.ptr.IntByReference; @@ -16,7 +17,8 @@ public interface Libvirt extends Library // Constants we need public static int VIR_UUID_BUFLEN = 16 ; - public static int VIR_UUID_STRING_BUFLEN = (36+1) ; + public static int VIR_UUID_STRING_BUFLEN = (36+1) ; + public static int VIR_DOMAIN_SCHED_FIELD_LENGTH = 80 ; // Global functions public int virCopyLastError(virError error) ; @@ -69,13 +71,45 @@ public interface Libvirt extends Library public int virNetworkUndefine(Pointer virConnectPtr) ; // Domain functions + public int virDomainAttachDevice(Pointer virDomainPtr, String deviceXML) ; + public int virDomainBlockStats(Pointer virDomainPtr, String path, virDomainBlockStats stats, int size) ; + public int virDomainCreate(Pointer virDomainPtr) ; public Pointer virDomainCreateLinux(Pointer virConnectPtr, String xmlDesc, int flags) ; public Pointer virDomainCreateXML(Pointer virConnectPtr, String xmlDesc, int flags) ; - public Pointer virDomainDefineXML(Pointer virConnectPtr, String xmlDesc) ; + public int virDomainCoreDump(Pointer virDomainPtr, String to, int flags) ; + public Pointer virDomainDefineXML(Pointer virConnectPtr, String xmlDesc) ; + public int virDomainDetachDevice(Pointer virDomainPtr, String deviceXML) ; + public int virDomainDestroy(Pointer virDomainPtr) ; + public int virDomainFree(Pointer virDomainPtr) ; + public int virDomainGetAutostart(Pointer virDomainPtr, IntByReference value) ; + public int virDomainGetID(Pointer virDomainPtr) ; + public int virDomainGetInfo(Pointer virDomainPtr, virDomainInfo vInfo) ; + public NativeLong virDomainGetMaxMemory(Pointer virDomainPtr) ; + public int virDomainGetMaxVcpus(Pointer virDomainPtr) ; + public String virDomainGetName(Pointer virDomainPtr) ; + public String virDomainGetOSType(Pointer virDomainPtr) ; + public int virDomainGetUUID(Pointer virDomainPtr, byte[] uuidString) ; + public int virDomainGetUUIDString(Pointer virDomainPtr, byte[] uuidString) ; + public String virDomainGetXMLDesc(Pointer virDomainPtr, int flags) ; + public String virDomainGetSchedulerType(Pointer virDomainPtr, IntByReference nparams) ; + public int virDomainGetSchedulerParameters(Pointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ; + public int virDomainGetVcpus(Pointer virDomainPtr, virVcpuInfo[] info, int maxInfo, byte[] cpumaps, int maplen) ; + public int virDomainInterfaceStats(Pointer virDomainPtr, String path, virDomainInterfaceStats stats, int size) ; public Pointer virDomainLookupByID(Pointer virConnectPtr, int id) ; public Pointer virDomainLookupByName(Pointer virConnectPtr, String name) ; public Pointer virDomainLookupByUUID(Pointer virConnectPtr, String uuidstr) ; public Pointer virDomainLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ; - - + public Pointer virDomainMigrate(Pointer virDomainPtr, Pointer virConnectPtr, NativeLong flags, String dname, String uri, NativeLong bandwidth) ; + public int virDomainPinVcpu(Pointer virDomainPtr, int vcpu, byte[] cpumap, int maplen) ; + public int virDomainReboot(Pointer virDomainPtr, int flags) ; + public int virDomainResume(Pointer virDomainPtr) ; + public int virDomainSave(Pointer virDomainPtr, String to) ; + public int virDomainSetAutostart(Pointer virDomainPtr, int autoStart) ; + public int virDomainSetSchedulerParameters(Pointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ; + public int virDomainSetMaxMemory(Pointer virDomainPtr, NativeLong maxMemory) ; + public int virDomainSetMemory(Pointer virDomainPtr, NativeLong maxMemory) ; + public int virDomainSetVcpus(Pointer virDomainPtr, int nvcpus) ; + public int virDomainShutdown(Pointer virDomainPtr) ; + public int virDomainSuspend(Pointer virDomainPtr) ; + public int virDomainUndefine(Pointer virDomainPtr) ; } diff --git a/src/org/libvirt/jna/virDomainBlockStats.java b/src/org/libvirt/jna/virDomainBlockStats.java new file mode 100644 index 0000000..446e016 --- /dev/null +++ b/src/org/libvirt/jna/virDomainBlockStats.java @@ -0,0 +1,12 @@ +package org.libvirt.jna; + +import com.sun.jna.Structure; + +public class virDomainBlockStats extends Structure +{ + public long rd_req ; + public long rd_bytes ; + public long wr_req ; + public long wr_bytes ; + public long errs ; +} diff --git a/src/org/libvirt/jna/virDomainInfo.java b/src/org/libvirt/jna/virDomainInfo.java new file mode 100644 index 0000000..15d4836 --- /dev/null +++ b/src/org/libvirt/jna/virDomainInfo.java @@ -0,0 +1,13 @@ +package org.libvirt.jna; + +import com.sun.jna.NativeLong; +import com.sun.jna.Structure ; + +public class virDomainInfo extends Structure +{ + public int state ; + public NativeLong maxMem ; + public NativeLong memory ; + public short nrVirtCpu ; + public long cpuTime ; +} diff --git a/src/org/libvirt/jna/virDomainInterfaceStats.java b/src/org/libvirt/jna/virDomainInterfaceStats.java new file mode 100644 index 0000000..3fda2dd --- /dev/null +++ b/src/org/libvirt/jna/virDomainInterfaceStats.java @@ -0,0 +1,16 @@ +package org.libvirt.jna; + +import com.sun.jna.Structure; + +public class virDomainInterfaceStats extends Structure +{ + public long rx_bytes; + public long rx_packets; + public long rx_errs; + public long rx_drop; + public long tx_bytes; + public long tx_packets; + public long tx_errs; + public long tx_drop; + +} diff --git a/src/org/libvirt/jna/virSchedParameter.java b/src/org/libvirt/jna/virSchedParameter.java new file mode 100644 index 0000000..f8440e1 --- /dev/null +++ b/src/org/libvirt/jna/virSchedParameter.java @@ -0,0 +1,11 @@ +package org.libvirt.jna; + +import com.sun.jna.Structure; + +public class virSchedParameter extends Structure +{ + public byte field[] = new byte[Libvirt.VIR_DOMAIN_SCHED_FIELD_LENGTH] ; + public int type ; + public virSchedParameterValue value ; + +} diff --git a/src/org/libvirt/jna/virSchedParameterValue.java b/src/org/libvirt/jna/virSchedParameterValue.java new file mode 100644 index 0000000..ff2cdfc --- /dev/null +++ b/src/org/libvirt/jna/virSchedParameterValue.java @@ -0,0 +1,13 @@ +package org.libvirt.jna; + +import com.sun.jna.Structure; + +public class virSchedParameterValue extends Structure +{ + public int i; /* data for integer case */ + public int ui; /* data for unsigned integer case */ + public long l; /* data for long long integer case */ + public long ul; /* data for unsigned long long integer case */ + public double d; /* data for double case */ + public byte b; /* data for char case */ +} diff --git a/src/org/libvirt/jna/virVcpuInfo.java b/src/org/libvirt/jna/virVcpuInfo.java new file mode 100644 index 0000000..ba72ce8 --- /dev/null +++ b/src/org/libvirt/jna/virVcpuInfo.java @@ -0,0 +1,12 @@ +package org.libvirt.jna; + +import com.sun.jna.Structure; + +public class virVcpuInfo extends Structure +{ + public int number ; + public int state ; + public long cpuTime ; + public int cpu ; + +} diff --git a/src/test.java b/src/test.java index a7d7ec8..40e0afc 100644 --- a/src/test.java +++ b/src/test.java @@ -177,81 +177,93 @@ public class test { //Domain stuff -// try{ + try{ // // // //Domain lookup -// //Domain testDomain=conn.domainLookupByID(1); -// //Domain testDomain=conn.domainLookupByName("test"); -// //Domain testDomain=conn.domainLookupByUUIDString("004b96e1-2d78-c30f-5aa5-f03c87d21e69"); + //Domain testDomain=conn.domainLookupByID(1); + //Domain testDomain=conn.domainLookupByName("test"); + //Domain testDomain=conn.domainLookupByUUIDString("004b96e1-2d78-c30f-5aa5-f03c87d21e69"); + Domain testDomain = conn.domainLookupByID(1); + System.out.println("domainLookupByID: " + testDomain) ; + testDomain = conn.domainLookupByName("test"); + System.out.println("domainLookupByName: " + testDomain) ; // Domain testDomain=conn.domainLookupByUUID(UUID); -// -// //Exercise the getter methods on the default domain -// System.out.println("virDomainGetXMLDesc:" + testDomain.getXMLDesc(0)); -// System.out.println("virDomainGetAutostart:" + testDomain.getAutostart()); -// System.out.println("virDomainGetConnect:" + testDomain.getConnect()); -// System.out.println("virDomainGetIDt:" + testDomain.getID()); -// System.out.println("virDomainGetInfo:" + testDomain.getInfo()); -// System.out.println("virDomainGetMaxMemory:" + testDomain.getMaxMemory()); -// //Should fail, test driver does not support it -// //System.out.println("virDomainGetMaxVcpus:" + testDomain.getMaxVcpus()); -// System.out.println("virDomainGetName:" + testDomain.getName()); -// System.out.println("virDomainGetOSType:" + testDomain.getOSType()); -// System.out.println("virDomainGetSchedulerType:" + testDomain.getSchedulerType()); -// System.out.println("virDomainGetSchedulerParameters:" + testDomain.getSchedulerParameters()); -// //Iterate over the parameters the painful way -// for(SchedParameter c: testDomain.getSchedulerParameters()){ -// if (c instanceof SchedIntParameter) -// System.out.println("Int:" + ((SchedIntParameter)c).field +":"+ ((SchedIntParameter)c).value); -// if (c instanceof SchedUintParameter) -// System.out.println("Uint:" + ((SchedUintParameter)c).field +":"+ ((SchedUintParameter)c).value); -// if (c instanceof SchedLongParameter) -// System.out.println("Long:" + ((SchedLongParameter)c).field +":"+ ((SchedLongParameter)c).value); -// if (c instanceof SchedUlongParameter) -// System.out.println("Ulong:" + ((SchedUlongParameter)c).field +":"+ ((SchedUlongParameter)c).value); -// if (c instanceof SchedDoubleParameter) -// System.out.println("Double:" + ((SchedDoubleParameter)c).field +":"+ ((SchedDoubleParameter)c).value); -// if (c instanceof SchedBooleanParameter) -// System.out.println("Boolean:" + ((SchedBooleanParameter)c).field +":"+ ((SchedBooleanParameter)c).value); -// } -// //Iterate over the parameters the easy way -// for(SchedParameter c: testDomain.getSchedulerParameters()){ -// System.out.println(c.getTypeAsString() +":"+ c.field +":"+ c.getValueAsString()); -// } -// System.out.println("virDomainGetUUID:" + testDomain.getUUID()); -// for(int c: testDomain.getUUID()) -// System.out.print(Integer.toHexString(c)); -// System.out.println(); -// System.out.println("virDomainGetUUIDString:" + testDomain.getUUIDString()); -// //Should fail, unimplemented in test driver -// //System.out.println("virDomainGetVcpusInfo:" + testDomain.getVcpusInfo()); -// //Same as above -// //System.out.println("virDomainGetVcpusCpuMap:" + testDomain.getVcpusCpuMaps()); -// //Should test pinVcpu, when we test with real xen -// //Here -// //Attach default network to test domain -// //System.out.println("virDomainGetVcpusCpuMap:" + testDomain.getVcpusCpuMaps()); -// -// //Should test interfacestats and blockstats with real xen -// -// //Close the connection -// -// conn.close(); -// } catch (LibvirtException e){ -// System.out.println("exception caught:"+e); -// System.out.println(e.getError()); -// } -// -// -// -// try{ -// //We should get an exception, not a crash -// System.out.println(conn.getHostName()); -// }catch (LibvirtException e){ -// System.out.println("exception caught:"+e); -// System.out.println(e.getError()); -// } -// System.out.println(); +// System.out.println("domainLookupByUUID: " + testDomain) ; + + //Exercise the getter methods on the default domain + System.out.println("virDomainGetXMLDesc:" + testDomain.getXMLDesc(0)); + System.out.println("virDomainGetAutostart:" + testDomain.getAutostart()); + System.out.println("virDomainGetConnect:" + testDomain.getConnect()); + System.out.println("virDomainGetID:" + testDomain.getID()); + System.out.println("virDomainGetInfo:" + testDomain.getInfo()); + System.out.println("virDomainGetMaxMemory:" + testDomain.getMaxMemory()); + //Should fail, test driver does not support it + try { + System.out.println("virDomainGetMaxVcpus:" + testDomain.getMaxVcpus()); + System.out.println(FIXME) ; + } + catch (LibvirtException e) { + + } + System.out.println("virDomainGetName:" + testDomain.getName()); + System.out.println("virDomainGetOSType:" + testDomain.getOSType()); + System.out.println("virDomainGetSchedulerType:" + testDomain.getSchedulerType()); + System.out.println("virDomainGetSchedulerParameters:" + testDomain.getSchedulerParameters()); + //Iterate over the parameters the painful way + for(SchedParameter c: testDomain.getSchedulerParameters()){ + if (c instanceof SchedIntParameter) + System.out.println("Int:" + ((SchedIntParameter)c).field +":"+ ((SchedIntParameter)c).value); + if (c instanceof SchedUintParameter) + System.out.println("Uint:" + ((SchedUintParameter)c).field +":"+ ((SchedUintParameter)c).value); + if (c instanceof SchedLongParameter) + System.out.println("Long:" + ((SchedLongParameter)c).field +":"+ ((SchedLongParameter)c).value); + if (c instanceof SchedUlongParameter) + System.out.println("Ulong:" + ((SchedUlongParameter)c).field +":"+ ((SchedUlongParameter)c).value); + if (c instanceof SchedDoubleParameter) + System.out.println("Double:" + ((SchedDoubleParameter)c).field +":"+ ((SchedDoubleParameter)c).value); + if (c instanceof SchedBooleanParameter) + System.out.println("Boolean:" + ((SchedBooleanParameter)c).field +":"+ ((SchedBooleanParameter)c).value); + } + //Iterate over the parameters the easy way + for(SchedParameter c: testDomain.getSchedulerParameters()){ + System.out.println(c.getTypeAsString() +":"+ c.field +":"+ c.getValueAsString()); + } + System.out.println("virDomainGetUUID:" + testDomain.getUUID()); + System.out.println(FIXME) ; + for(int c: testDomain.getUUID()) + System.out.print(String.format("%02x", c)); + System.out.println(); + System.out.println("virDomainGetUUIDString:" + testDomain.getUUIDString()); + //Should fail, unimplemented in test driver + //System.out.println("virDomainGetVcpusInfo:" + testDomain.getVcpusInfo()); + //Same as above + //System.out.println("virDomainGetVcpusCpuMap:" + testDomain.getVcpusCpuMaps()); + //Should test pinVcpu, when we test with real xen + //Here + //Attach default network to test domain + //System.out.println("virDomainGetVcpusCpuMap:" + testDomain.getVcpusCpuMaps()); + + //Should test interfacestats and blockstats with real xen + + //Close the connection + + conn.close(); + } catch (LibvirtException e){ + System.out.println("exception caught:"+e); + System.out.println(e.getError()); + } + + + + try{ + //We should get an exception, not a crash + System.out.println(conn.getHostName()); + }catch (LibvirtException e){ + System.out.println("exception caught:"+e); + System.out.println(e.getError()); + } + System.out.println("Fini!"); } } -- 1.6.0.6 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list