summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/HostdevMdev.java
blob: 082ea5bd28b080e93e3d74ab844c7077ba58cc98 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
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;
		}
	}
}