summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/HostdevMdev.java
blob: d25a6eb87a191e650653dcb06b2212d38978877c (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
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 );
	}

	/**
	 * 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", "domain", 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 HostdevPci createInstance( LibvirtXmlNode xmlNode )
	{
		return HostdevPci.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 HostdevPci newInstance( LibvirtXmlNode xmlNode )
	{
		return new HostdevPci( xmlNode );
	}

	/**
	 * Model for hostdev mediated device passthrough.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	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;
		}
	}
}