summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/Shmem.java
blob: 3c48c95847f0123ea5d25f6553524555f82b01bd (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
package org.openslx.libvirt.domain.device;

import java.math.BigInteger;

import org.openslx.libvirt.domain.DomainUtils;
import org.openslx.libvirt.xml.LibvirtXmlNode;

/**
 * A shared memory device node in a Libvirt domain XML document.
 * 
 * @author Manuel Bentele
 * @version 1.0
 */
public class Shmem extends Device
{
	/**
	 * Creates an empty sound device.
	 */
	public Shmem()
	{
		super();
	}

	/**
	 * Creates a shared memory device representing an existing Libvirt XML shared memory device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML shared memory device element.
	 */
	public Shmem( LibvirtXmlNode xmlNode )
	{
		super( xmlNode );
	}

	/**
	 * Returns the model of the shared memory device.
	 * 
	 * @return model of the shared memory device.
	 */
	public Model getModel()
	{
		String model = this.getXmlElementAttributeValue( "model", "type" );
		return Model.fromString( model );
	}

	/**
	 * Sets the model for the shared memory device.
	 * 
	 * @param model model for the shared memory device.
	 */
	public void setModel( Model model )
	{
		this.setXmlElementAttributeValue( "model", "type", model.toString() );
	}

	/**
	 * Returns the name of the shared memory device.
	 * 
	 * @return name of the shared memory device.
	 */
	public String getName()
	{
		return this.getXmlElementAttributeValue( "name" );
	}

	/**
	 * Sets the name for the shared memory device.
	 * 
	 * @param name name for the shared memory device.
	 */
	public void setName( String name )
	{
		this.setXmlElementAttributeValue( "name", name );
	}

	/**
	 * Returns the memory size of the shared memory device.
	 * 
	 * @return memory size of the shared memory device in bytes.
	 */
	public BigInteger getSize()
	{
		final String unit = this.getXmlElementAttributeValue( "size", "unit" );
		final String size = this.getXmlElementValue( "size" );

		return DomainUtils.decodeMemory( size, unit );
	}

	/**
	 * Sets the memory size for the shared memory device.
	 * 
	 * @param size memory size for the shared memory device in bytes.
	 */
	public void setSize( BigInteger memory )
	{
		final String unit = "M";
		final String size = DomainUtils.encodeMemory( memory, unit );

		this.setXmlElementAttributeValue( "size", "unit", unit );
		this.setXmlElementValue( "size", size );
	}

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

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

	/**
	 * Model of shared memory device.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	public enum Model
	{
		// @formatter:off
		IVSHMEM         ( "ivshmem" ),
		IVSHMEM_PLAIN   ( "ivshmem-plain" ),
		IVSHMEM_DOORBELL( "ivshmem-doorbell" );
		// @formatter:on

		/**
		 * Name of the shared memory device model.
		 */
		private String model;

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

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

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

			return null;
		}
	}
}