---
README | 12 ++--
src/org/libvirt/Connect.java | 102 ++++++++++++++++++++++++++++----------
src/org/libvirt/Network.java | 65 +++++++++++-------------
src/org/libvirt/jna/Libvirt.java | 23 ++++++++-
src/test.java | 58 +++++++++++----------
5 files changed, 164 insertions(+), 96 deletions(-)
diff --git a/README b/README
index 4fd68be..655090f 100644
--- a/README
+++ b/README
@@ -4,7 +4,7 @@ To use it, your program needs to access both the java library (.jar
file),
and the JNI library (.so file)
1. You must have the libvirt.jar file in your classpath.
-By default the installs it to /usr/share/java/libvirt-0.2.1.jar
+By default the installs it to /usr/local/share/java/libvirt-0.2.1.jar
2. You must have the libvirt_jni.so accessible by the dynamic linker.
By default the RPM installs it to /usr/lib or /usr/lib64, so the linker will
@@ -13,16 +13,16 @@ the LD_LIBRARY_PATH variable to the directory containing the
libvirt_jni.so
file.
There is a rudimentary functional test program that the libvirt-java-devel
-installs put it into /usr/share/doc/libvirt-java-devel-0.2.1/test.java
+installs put it into /usr/local/share/doc/libvirt-java-devel-0.2.1/test.java
To run it, first copy the test.java file to writeable directory
-cp /usr/share/doc/libvirt-java-devel-0.2.1/test.java ~
+cp /usr/local/share/doc/libvirt-java-devel-0.2.1/test.java ~
Compile the java file to a class:
-javac -classpath /usr/share/java/libvirt-0.2.1.jar test.java
+javac -classpath /usr/local/share/java/libvirt-0.2.1.jar test.java
Then run the program:
-java -classpath .:/usr/share/java/libvirt-0.2.1.jar test
+java -classpath .:/usr/local/share/java/libvirt-0.2.1.jar test
-There is full javadoc for the API in /usr/share/javadoc/libvirt-java-0.2.1/
+There is full javadoc for the API in /usr/local/share/javadoc/libvirt-java-0.2.1/
diff --git a/src/org/libvirt/Connect.java b/src/org/libvirt/Connect.java
index bc560d0..b559b52 100644
--- a/src/org/libvirt/Connect.java
+++ b/src/org/libvirt/Connect.java
@@ -347,7 +347,12 @@ public class Connect {
*/
public Network networkLookupByName(String name)
throws LibvirtException {
- return new Network(this, libvirt.virNetworkLookupByName(VCP, name));
+ Network returnValue = null ;
+ Pointer ptr = libvirt.virNetworkLookupByName(VCP, name) ;
+ if (ptr != null) {
+ returnValue = new Network(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -365,7 +370,12 @@ public class Connect {
for (int i : UUID) {
uuidString.append(i) ;
}
- return new Network(this, libvirt.virNetworkLookupByUUID(VCP, uuidString.toString()));
+ Network returnValue = null ;
+ Pointer ptr = libvirt.virNetworkLookupByUUID(VCP, uuidString.toString()) ;
+ if (ptr != null) {
+ returnValue = new Network(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -378,12 +388,14 @@ public class Connect {
*/
public Network networkLookupByUUIDString(String UUID)
throws LibvirtException {
- return new Network(this, libvirt.virNetworkLookupByUUIDString(VCP, UUID));
+ Network returnValue = null ;
+ Pointer ptr = libvirt.virNetworkLookupByUUIDString(VCP, UUID);
+ if (ptr != null) {
+ returnValue = new Network(this, ptr) ;
+ }
+ return returnValue ;
}
-// private native long _virNetworkLookupByUUIDString(long VCP, String UUID)
-// throws LibvirtException;
-
/**
* Creates and starts a new virtual network.
@@ -396,7 +408,12 @@ public class Connect {
*/
public Network networkCreateXML(String xmlDesc)
throws LibvirtException {
- return new Network(this, libvirt.virNetworkCreateXML(VCP, xmlDesc));
+ Network returnValue = null ;
+ Pointer ptr = libvirt.virNetworkCreateXML(VCP, xmlDesc) ;
+ if (ptr != null) {
+ returnValue = new Network(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -411,7 +428,12 @@ public class Connect {
*/
public Network networkDefineXML(String xmlDesc)
throws LibvirtException {
- return new Network(this, libvirt.virNetworkDefineXML(VCP, xmlDesc));
+ Network returnValue = null ;
+ Pointer ptr = libvirt.virNetworkDefineXML(VCP, xmlDesc) ;
+ if (ptr != null) {
+ returnValue = new Network(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -423,12 +445,14 @@ public class Connect {
* @throws LibvirtException
*/
public Domain domainLookupByID(int id) throws LibvirtException {
- throw new RuntimeException("Not Implemented") ;
-// return new Domain(this, _virDomainLookupByID(VCP, id));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainLookupByID(VCP, id) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
-// private native long _virDomainLookupByID(long VCP, int id)
-// throws LibvirtException;
/**
* Looks up a domain based on its name.
@@ -438,13 +462,14 @@ public class Connect {
* @throws LibvirtException
*/
public Domain domainLookupByName(String name) throws LibvirtException {
- throw new RuntimeException("Not Implemented") ;
-// return new Domain(this, _virDomainLookupByName(VCP, name));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainLookupByName(VCP, name) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
-// private native long _virDomainLookupByName(long VCP, String name)
-// throws LibvirtException;
-
/**
* Looks up a domain based on its UUID in array form.
@@ -455,13 +480,18 @@ public class Connect {
* @throws LibvirtException
*/
public Domain domainLookupByUUID(int[] UUID) throws LibvirtException {
- throw new RuntimeException("Not Implemented") ;
-// return new Domain(this, _virDomainLookupByUUID(VCP, UUID));
+ StringBuilder uuidString = new StringBuilder() ;
+ for (int i : UUID) {
+ uuidString.append(i) ;
+ }
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainLookupByUUID(VCP, uuidString.toString()) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
-// private native long _virDomainLookupByUUID(long VCP, int[] UUID)
-// throws LibvirtException;
-
/**
* Looks up a domain based on its UUID in String form.
*
@@ -471,7 +501,12 @@ public class Connect {
*/
public Domain domainLookupByUUIDString(String UUID)
throws LibvirtException {
- return new Domain(this, libvirt.virDomainLookupByUUIDString(VCP, UUID));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainLookupByUUIDString(VCP, UUID) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -488,7 +523,12 @@ public class Connect {
*/
public Domain domainCreateLinux(String xmlDesc, int flags)
throws LibvirtException {
- return new Domain(this, libvirt.virDomainCreateLinux(VCP, xmlDesc, flags));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainCreateLinux(VCP, xmlDesc, flags) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -501,7 +541,12 @@ public class Connect {
* @see <a
href="http://libvirt.org/format.html#Normal1" > The XML
format description </a>
*/
public Domain domainDefineXML(String xmlDesc) throws LibvirtException {
- return new Domain(this, libvirt.virDomainDefineXML(VCP, xmlDesc));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainDefineXML(VCP, xmlDesc) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
@@ -514,7 +559,12 @@ public class Connect {
* @see <a
href="http://libvirt.org/format.html#Normal1" > The XML
format description </a>
*/
public Domain domainCreateXML(String xmlDesc, int flags) throws LibvirtException {
- return new Domain(this, libvirt.virDomainCreateXML(VCP, xmlDesc, flags));
+ Domain returnValue = null ;
+ Pointer ptr = libvirt.virDomainCreateXML(VCP, xmlDesc, flags) ;
+ if (ptr != null) {
+ returnValue = new Domain(this, ptr) ;
+ }
+ return returnValue ;
}
diff --git a/src/org/libvirt/Network.java b/src/org/libvirt/Network.java
index a194ca7..063345c 100644
--- a/src/org/libvirt/Network.java
+++ b/src/org/libvirt/Network.java
@@ -3,6 +3,8 @@ package org.libvirt;
import org.libvirt.jna.Libvirt;
import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+import com.sun.jna.ptr.PointerByReference;
public class Network {
@@ -47,11 +49,9 @@ public class Network {
* @throws LibvirtException
*/
public String getXMLDesc(int flags) throws LibvirtException{
-// return _getXMLDesc(VNP, flags);
- throw new RuntimeException("Not Implemented") ;
+ return libvirt.virNetworkGetXMLDesc(VNP, flags) ;
}
-// private native String _getXMLDesc(long VNP, int flags) throws LibvirtException;
/**
* Provides a boolean value indicating whether this network is configured to be
automatically started when the host machine boots.
@@ -60,11 +60,11 @@ public class Network {
* @throws LibvirtException
*/
public boolean getAutostart() throws LibvirtException{
-// return _getAutostart(VNP);
- throw new RuntimeException("Not Implemented") ;
+ IntByReference autoStart = new IntByReference() ;
+ libvirt.virNetworkGetAutostart(VNP, autoStart) ;
+ return autoStart.getValue() != 0 ? true : false ;
}
-// private native boolean _getAutostart(long VNP) throws LibvirtException;
/**
@@ -74,11 +74,10 @@ public class Network {
* @throws LibvirtException
*/
public void setAutostart(boolean autostart) throws LibvirtException{
-// _setAutostart(VNP, autostart);
- throw new RuntimeException("Not Implemented") ;
+ int autoValue = autostart ? 1 : 0 ;
+ libvirt.virNetworkSetAutostart(VNP, autoValue) ;
}
-// private native int _setAutostart(long VNP, boolean autostart) throws
LibvirtException;
/**
* Provides a bridge interface name to which a domain may connect a network interface in
order to join this network.
@@ -87,11 +86,8 @@ public class Network {
* @throws LibvirtException
*/
public String getBridgeName() throws LibvirtException{
-// return _getBridgeName(VNP);
- throw new RuntimeException("Not Implemented") ;
+ return libvirt.virNetworkGetBridgeName(VNP) ;
}
-
-// private native String _getBridgeName(long VNP) throws LibvirtException;
@@ -115,7 +111,6 @@ public class Network {
return libvirt.virNetworkGetName(VNP);
}
-// private native String _getName(long VNP) throws LibvirtException;
/**
* Gets the UUID for this network
@@ -125,12 +120,18 @@ public class Network {
* @see <a
href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a>
*/
public int[] getUUID() throws LibvirtException{
-// return _getUUID(VNP);
- throw new RuntimeException("Not Implemented") ;
+ byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN] ;
+ int success = libvirt.virNetworkGetUUID(VNP, bytes) ;
+ 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] ;
+ }
+ }
+ return returnValue ;
}
-// private native int[] _getUUID(long VNP) throws LibvirtException;
-
/**
* Gets the UUID for a network as string.
*
@@ -139,11 +140,15 @@ public class Network {
* @see <a
href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a>
*/
public String getUUIDString() throws LibvirtException{
-// return _getUUIDString(VNP);
- throw new RuntimeException("Not Implemented") ;
+ byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN] ;
+ int success = libvirt.virNetworkGetUUIDString(VNP, bytes) ;
+ String returnValue = null ;
+ if (success == 0) {
+ returnValue = new String(bytes) ;
+ }
+ return returnValue ;
}
-// private native String _getUUIDString(long VNP) throws LibvirtException;
/**
* Creates and starts this defined network.
@@ -152,11 +157,9 @@ public class Network {
* @throws LibvirtException
*/
public void create() throws LibvirtException{
-// _create(VNP);
- throw new RuntimeException("Not Implemented") ;
+ libvirt.virNetworkCreate(VNP) ;
}
-// private native int _create(long VNP) throws LibvirtException;
/**
* Destroy this network object.
@@ -167,11 +170,9 @@ public class Network {
* @throws LibvirtException
*/
public void destroy() throws LibvirtException{
-// _destroy(VNP);
- throw new RuntimeException("Not Implemented") ;
+ libvirt.virNetworkDestroy(VNP) ;
}
-// private native int _destroy(long VNP) throws LibvirtException;
/**
* Frees this network object.
@@ -181,12 +182,10 @@ public class Network {
* @throws LibvirtException
*/
public void free() throws LibvirtException{
- throw new RuntimeException("Not Implemented") ;
-// _free(VNP);
-// VNP=0;
+ libvirt.virNetworkFree(VNP) ;
+ VNP=null;
}
-// private native int _free(long VNP) throws LibvirtException;
/**
* Undefines this network but does not stop it if it is running
@@ -194,10 +193,8 @@ public class Network {
* @throws LibvirtException
*/
public void undefine() throws LibvirtException{
- throw new RuntimeException("Not Implemented") ;
-// _undefine(VNP);
+ libvirt.virNetworkUndefine(VNP) ;
}
-// private native int _undefine(long VNP) throws LibvirtException;
}
diff --git a/src/org/libvirt/jna/Libvirt.java b/src/org/libvirt/jna/Libvirt.java
index 1874d3e..30ab49d 100644
--- a/src/org/libvirt/jna/Libvirt.java
+++ b/src/org/libvirt/jna/Libvirt.java
@@ -6,6 +6,7 @@ import com.sun.jna.Library ;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure.ByReference;
+import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
import com.sun.jna.ptr.PointerByReference;
@@ -13,6 +14,10 @@ public interface Libvirt extends Library
{
Libvirt INSTANCE = (Libvirt) Native.loadLibrary("libvirt", Libvirt.class)
;
+ // Constants we need
+ public static int VIR_UUID_BUFLEN = 16 ;
+ public static int VIR_UUID_STRING_BUFLEN = (36+1) ;
+
//Callbacks
interface virErrorFunc extends Callback {
void handleError(Pointer userData, virError error) throws Exception ;
@@ -50,17 +55,31 @@ public interface Libvirt extends Library
public int virNodeGetInfo(Pointer virConnectPtr, virNodeInfo virNodeInfo) ;
// Network functions
+ public int virNetworkCreate(Pointer virConnectPtr) ;
public Pointer virNetworkCreateXML(Pointer virConnectPtr, String xmlDesc) ;
public Pointer virNetworkDefineXML(Pointer virConnectPtr, String xmlDesc) ;
- public String virNetworkGetName(Pointer virNetorkPtr) ;
+ public int virNetworkDestroy(Pointer virConnectPtr) ;
+ public int virNetworkFree(Pointer virConnectPtr) ;
+ public int virNetworkGetAutostart(Pointer virNetworkPtr, IntByReference value) ;
+ public String virNetworkGetBridgeName(Pointer virNetworkPtr) ;
+ public String virNetworkGetName(Pointer virNetworkPtr) ;
+ public int virNetworkGetUUID(Pointer virNetworkPtr, byte[] uuidString) ;
+ public int virNetworkGetUUIDString(Pointer virNetworkPtr, byte[] uuidString) ;
+ public String virNetworkGetXMLDesc(Pointer virNetworkPtr, int flags) ;
public Pointer virNetworkLookupByName(Pointer virConnectPtr, String name) ;
public Pointer virNetworkLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ;
- public Pointer virNetworkLookupByUUID(Pointer virConnectPtr, String uuidstr) ;
+ public Pointer virNetworkLookupByUUID(Pointer virConnectPtr, String uuidstr) ;
+ public int virNetworkSetAutostart(Pointer virConnectPtr, int autoStart) ;
+ public int virNetworkUndefine(Pointer virConnectPtr) ;
// Domain functions
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 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) ;
+
}
diff --git a/src/test.java b/src/test.java
index 2ca6a92..34d3518 100644
--- a/src/test.java
+++ b/src/test.java
@@ -2,6 +2,7 @@ import org.libvirt.*;
public class test {
+ public static String FIXME = "<============== FIXME ================>
" ;
/**
* @param args
*/
@@ -9,13 +10,13 @@ public class test {
//Create the connection
Connect conn=null;
Network testNetwork=null;
-
+
//Need this for the lookup method testing, it's absolutely horrible in java, but
let's be complete
int UUID[] = {Integer.decode("0x00"), Integer.decode("0x4b"),
Integer.decode("0x96"), Integer.decode("0xe1"),
Integer.decode("0x2d"), Integer.decode("0x78"),
Integer.decode("0xc3"), Integer.decode("0x0f"),
Integer.decode("0x5a"), Integer.decode("0xa5"),
- Integer.decode("0xf0"), Integer.decode("0x3c"),
Integer.decode("0x87"), Integer.decode("0xd2"),
Integer.decode("0x1e"), Integer.decode("0x69")} ;
+ Integer.decode("0xf0"), Integer.decode("0x3c"),
Integer.decode("0x87"), Integer.decode("0xd2"),
Integer.decode("0x1e"), Integer.decode("0x67")} ;
//For testing the authentication
// ConnectAuth defaultAuth = new ConnectAuthDefault();
@@ -140,38 +141,39 @@ public class test {
//Choose one, they should have the exact same effect
testNetwork = conn.networkLookupByName("deftest") ;
System.out.println("networkLookupByName: " + testNetwork.getName()) ;
-
+ System.out.println(FIXME) ;
+ testNetwork=conn.networkLookupByUUID(UUID);
+// System.out.println("networkLookupByUUID: " +
testNetwork.getName()) ;
testNetwork =
conn.networkLookupByUUIDString("004b96e1-2d78-c30f-5aa5-f03c87d21e67");
System.out.println("networkLookupByUUIDString: " +
testNetwork.getName()) ;
- testNetwork=conn.networkLookupByUUID(UUID);
- System.out.println("networkLookupByUUID: " + testNetwork.getName())
;
-//
-// //Exercise the getter methods on the default network
-// System.out.println("virNetworkGetXMLDesc:" + testNetwork.getXMLDesc(0));
-// System.out.println("virNetworkLookupByName:" + testNetwork);
-// System.out.println("virNetworkGetAutostart:" +
testNetwork.getAutostart());
-// System.out.println("virNetworkGetBridgeName:" +
testNetwork.getBridgeName());
-// System.out.println("virNetworkGetName:" + testNetwork.getName());
-// System.out.println("virNetworkGetUUID:" + testNetwork.getUUID() + "
");
-// for(int c: testNetwork.getUUID())
-// System.out.print(Integer.toHexString(c));
-// System.out.println();
-// System.out.println("virNetworkGetName:" + testNetwork.getUUIDString());
-//
-// //Destroy and create the network
-// System.out.println("virNetworkDestroy:"); testNetwork.destroy();
-// System.out.println("virNetworkCreate:"); testNetwork.create();
+
+ //Exercise the getter methods on the default network
+ System.out.println("virNetworkGetXMLDesc:" + testNetwork.getXMLDesc(0));
+ System.out.println("virNetworkGetAutostart:" + testNetwork.getAutostart());
+ System.out.println("virNetworkGetBridgeName:" +
testNetwork.getBridgeName());
+ System.out.println("virNetworkGetName:" + testNetwork.getName());
+ System.out.println("virNetworkGetUUID:" + testNetwork.getUUID() + "
");
+ System.out.println(FIXME) ;
+ for(int c: testNetwork.getUUID())
+ System.out.print(String.format("%02x", c));
+ System.out.println();
+ System.out.println("virNetworkGetName:" + testNetwork.getUUIDString());
+
+ //Destroy and create the network
+ System.out.println("virNetworkDestroy:"); testNetwork.destroy();
+ System.out.println("virNetworkCreate:"); testNetwork.create();
+ } catch (LibvirtException e){
+ System.out.println("exception caught:"+e);
+ System.out.println(e.getError());
+ }
+ //This should raise an excpetion
+ System.out.println(FIXME) ;
+ try{
+ System.out.println("virNetworkCreate:"); testNetwork.create();
} catch (LibvirtException e){
System.out.println("exception caught:"+e);
System.out.println(e.getError());
}
-// //This should raise an excpetion
-// try{
-// System.out.println("virNetworkCreate:"); testNetwork.create();
-// } catch (LibvirtException e){
-// System.out.println("exception caught:"+e);
-// System.out.println(e.getError());
-// }
//Domain stuff
--
1.6.0.6