summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/HostdevMdev.java
blob: 082ea5bd28b080e93e3d74ab844c7077ba58cc98 (plain) (tree)



















































                                                                                                         



















                                                                                               





























                                                                                                              
                                                                                                                







                                                                                        
                                                                          
         
                                                          








                                                                                                         
                                                                       
         
                                                  







                                                         
                         














































                                                                                                           
package org.openslx.libvirt.domain.device;

import org.openslx.libvirt.xml.LibvirtXmlNode;

/**
 * A hostdev mediated device node in a Libvirt domain XML document for mediated device passthrough.
 * 
 * @author Manuel Bentele
 * @version 1.0
 */
public class HostdevMdev extends Hostdev implements HostdevAddressableSource<HostdevMdevDeviceAddress>
{
	/**
	 * Creates an empty hostdev mediated device.
	 */
	public HostdevMdev()
	{
		super();
	}

	/**
	 * Creates a hostdev mediated device representing an existing Libvirt XML hostdev mediated device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML hostdev mediated device element.
	 */
	public HostdevMdev( LibvirtXmlNode xmlNode )
	{
		super( xmlNode );
	}

	/**
	 * Checks whether the hostdev mediated device display is on or off.
	 * 
	 * @return state whether the hostdev mediated device display is on or off.
	 */
	public boolean isDisplayOn()
	{
		return this.getXmlElementAttributeValueAsBool( "display" );
	}

	/**
	 * Sets the state of the hostdev mediated device display.
	 * 
	 * @param on state whether the hostdev mediated device display is on or off.
	 */
	public void setDisplayOn( boolean on )
	{
		this.setXmlElementAttributeValueOnOff( "display", on );
	}

	/**
	 * Checks whether the hostdev mediated device memory framebuffer is on or off.
	 * 
	 * @return state whether the hostdev mediated device memory framebuffer is on or off.
	 */
	public boolean isMemoryFramebufferOn()
	{
		return this.getXmlElementAttributeValueAsBool( "ramfb" );
	}

	/**
	 * Sets the state of the hostdev mediated device memory framebuffer.
	 * 
	 * @param on state whether the hostdev mediated device memory framebuffer is on or off.
	 */
	public void setMemoryFramebufferOn( boolean on )
	{
		this.setXmlElementAttributeValueOnOff( "ramfb", on );
	}

	/**
	 * Returns the hostdev mediated device model.
	 * 
	 * @return hostdev mediated device model.
	 */
	public Model getModel()
	{
		final String model = this.getXmlElementAttributeValue( "model" );
		return Model.fromString( model );
	}

	/**
	 * Sets the hostdev mediated device model.
	 * 
	 * @param model hostdev mediated device model that is set.
	 */
	public void setModel( Model model )
	{
		this.setXmlElementAttributeValue( "model", model.toString() );
	}

	@Override
	public HostdevMdevDeviceAddress getSource()
	{
		final String mdevDeviceAddress = this.getXmlElementAttributeValue( "source/address", "uuid" );
		return HostdevMdevDeviceAddress.valueOf( mdevDeviceAddress );
	}

	@Override
	public void setSource( HostdevMdevDeviceAddress source )
	{
		this.setXmlElementAttributeValue( "source/address", "uuid", source.getDeviceAddressAsString() );
	}

	/**
	 * Creates a non-existent hostdev mediated device as Libvirt XML device element.
	 * 
	 * @param xmlNode Libvirt XML node of the Libvirt XML device that is created.
	 * @return created hostdev mediated device instance.
	 */
	public static HostdevMdev createInstance( LibvirtXmlNode xmlNode )
	{
		return HostdevMdev.newInstance( xmlNode );
	}

	/**
	 * Creates a hostdev mediated device representing an existing Libvirt XML hostdev mediated device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML hostdev mediated device element.
	 * @return hostdev mediated device instance.
	 */
	public static HostdevMdev newInstance( LibvirtXmlNode xmlNode )
	{
		return new HostdevMdev( xmlNode );
	}

	/**
	 * Model for hostdev mediated device passthrough.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	public enum Model
	{
		// @formatter:off
		VFIO_PCI( "vfio-pci" ),
		VFIO_CCW( "vfio-ccw" ),
		VFIO_AP ( "vfio-ap" );
		// @formatter:on

		/**
		 * Name of the hostdev mediated device model.
		 */
		private String model = null;

		/**
		 * Creates hostdev mediated device model.
		 * 
		 * @param type valid name of the hostdev mediated device model in a Libvirt domain XML
		 *           document.
		 */
		Model( String model )
		{
			this.model = model;
		}

		@Override
		public String toString()
		{
			return this.model;
		}

		/**
		 * Creates hostdev mediated device model from its name with error check.
		 * 
		 * @param model name of the hostdev mediated device model in a Libvirt domain XML document.
		 * @return valid hostdev mediated device model.
		 */
		public static Model fromString( String model )
		{
			for ( Model m : Model.values() ) {
				if ( m.model.equalsIgnoreCase( model ) ) {
					return m;
				}
			}

			return null;
		}
	}
}