package org.libvirt;
import org.libvirt.jna.Libvirt;
import org.libvirt.jna.NetworkPointer;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
/**
* A network object defined by libvirt.
*/
public class Network {
/**
* The native virNetworkPtr
*/
NetworkPointer VNP;
/**
* The Connect Object that represents the Hypervisor of this Network
*/
protected Connect virConnect;
/**
* The libvirt connection from the hypervisor
*/
protected Libvirt libvirt;
/**
* Constructs a Network object from a known native virNetworkPtr, and a
* Connect object. For use when native libvirt returns a virConnectPtr, i.e.
* error handling.
*
* @param virConnect
* @param VNP
*/
Network(Connect virConnect, NetworkPointer VNP) {
this.virConnect = virConnect;
this.VNP = VNP;
libvirt = virConnect.libvirt;
}
/**
* Creates and starts this defined network. If the call succeeds the network
* moves from the defined to the running networks pools.
*
* @throws LibvirtException
*/
public void create() throws LibvirtException {
libvirt.virNetworkCreate(VNP);
processError();
}
/**
* Destroy this network object. The running instance is shutdown if not down
* already and all resources used by it are given back to the hypervisor.
* The object becomes invalid and should not be used thereafter if the call
* does not return an error. This function may require priviledged access
*
* @throws LibvirtException
*/
public void destroy() throws LibvirtException {
libvirt.virNetworkDestroy(VNP);
processError();
}
@Override
public void finalize() throws LibvirtException {
free();
}
/**
* Frees this network object. The running instance is kept alive. The object
* becomes invalid and should not be used thereafter if the call does not
* return an error.
*
* @throws LibvirtException
* @return number of references left (>= 0) for success, -1 for failure.
*/
public int free() throws LibvirtException {
int success = 0;
if (VNP != null) {
success = libvirt.virNetworkFree(VNP);
processError();
VNP = null;
}
return success;
}
/**
* Provides a boolean value indicating whether this network is configured to
* be automatically started when the host machine boots.
*
* @return true if autostarted, false otherwise
* @throws LibvirtException
*/
public boolean getAutostart() throws LibvirtException {
IntByReference autoStart = new IntByReference();
libvirt.virNetworkGetAutostart(VNP, autoStart);
processError();
return (autoStart.getValue() != 0) ? true : false;
}
/**
* Provides a bridge interface name to which a domain may connect a network
* interface in order to join this network.
*
* @return the interface name
* @throws LibvirtException
*/
public String getBridgeName() throws LibvirtException {
String returnValue = libvirt.virNetworkGetBridgeName(VNP);
processError();
return returnValue;
}
/**
* Provides the connection pointer associated with this network.
*
* @return the Connect object
*/
public Connect getConnect() {
return virConnect;
}
/**
* Gets the public name for this network
*
* @return the public name
* @throws LibvirtException
*/
public String getName() throws LibvirtException {
String returnValue = libvirt.virNetworkGetName(VNP);
processError();
return returnValue;
}
/**
* Gets the UUID for this network
*
* @return the UUID as an unpacked int array
* @throws LibvirtException
* @see <a href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a>
*/
public int[] getUUID() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN];
int success = libvirt.virNetworkGetUUID(VNP, bytes);
processError();
int[] returnValue = new int[0];
if (success == 0) {
returnValue = Connect.convertUUIDBytes(bytes);
}
return returnValue;
}
/**
* Gets the UUID for a network as string.
*
* @return the UUID in canonical String format
* @throws LibvirtException
* @see <a href="http://www.ietf.org/rfc/rfc4122.txt">rfc4122</a>
*/
public String getUUIDString() throws LibvirtException {
byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN];
int success = libvirt.virNetworkGetUUIDString(VNP, bytes);
processError();
String returnValue = null;
if (success == 0) {
returnValue = Native.toString(bytes);
}
return returnValue;
}
/**
* Provides an XML description of this network. The description may be
* reused later to relaunch the network with
* Virconnect.virNetworkCreateXML().
*
* @param flags
* and OR'ed set of extraction flags, not used yet
* @return The XML representation of this network
* @throws LibvirtException
*/
public String getXMLDesc(int flags) throws LibvirtException {
String returnValue = libvirt.virNetworkGetXMLDesc(VNP, flags);
processError();
return returnValue;
}
/**
* Determine if the network is currently running
*
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkIsActive">Libvirt
* Documentation</a>
* @return 1 if running, 0 if inactive, -1 on error
* @throws LibvirtException
*/
public int isActive() throws LibvirtException {
int returnValue = libvirt.virNetworkIsActive(VNP);
processError();
return returnValue;
}
/**
* Determine if the network has a persistent configuration which means it
* will still exist after shutting down
*
* @see <a
* href="http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkIsPersistent">Libvirt
* Documentation</a>
* @return 1 if persistent, 0 if transient, -1 on error
* @throws LibvirtException
*/
public int isPersistent() throws LibvirtException {
int returnValue = libvirt.virNetworkIsPersistent(VNP);
processError();
return returnValue;
}
protected void processError() throws LibvirtException {
virConnect.processError();
}
/**
* Configures this network to be automatically started when the host machine
* boots.
*
* @param autostart
* whether the network should be automatically started 0 or 1
* @throws LibvirtException
*/
public void setAutostart(boolean autostart) throws LibvirtException {
int autoValue = autostart ? 1 : 0;
libvirt.virNetworkSetAutostart(VNP, autoValue);
processError();
}
/**
* Undefines this network but does not stop it if it is running
*
* @throws LibvirtException
*/
public void undefine() throws LibvirtException {
libvirt.virNetworkUndefine(VNP);
processError();
}
}