summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/Device.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/libvirt/domain/device/Device.java')
-rw-r--r--src/main/java/org/openslx/libvirt/domain/device/Device.java59
1 files changed, 58 insertions, 1 deletions
diff --git a/src/main/java/org/openslx/libvirt/domain/device/Device.java b/src/main/java/org/openslx/libvirt/domain/device/Device.java
index 1e0e031..31a54ca 100644
--- a/src/main/java/org/openslx/libvirt/domain/device/Device.java
+++ b/src/main/java/org/openslx/libvirt/domain/device/Device.java
@@ -11,7 +11,7 @@ import org.w3c.dom.Node;
* @author Manuel Bentele
* @version 1.0
*/
-public class Device extends LibvirtXmlNode
+public class Device extends LibvirtXmlNode implements HostdevAddressableTarget<HostdevPciDeviceAddress>
{
/**
* Creates an empty virtual machine device.
@@ -171,6 +171,63 @@ public class Device extends LibvirtXmlNode
}
/**
+ * Sets the PCI device address for an XML address element selected by a XPath expression.
+ *
+ * @param expression XPath expression to select the XML address element.
+ * @param address PCI device address for the selected XML address element.
+ */
+ protected void setPciAddress( final String expression, final HostdevPciDeviceAddress address )
+ {
+ final String pciDomain = HostdevUtils.appendHexPrefix( address.getPciDomainAsString() );
+ final String pciBus = HostdevUtils.appendHexPrefix( address.getPciBusAsString() );
+ final String pciDevice = HostdevUtils.appendHexPrefix( address.getPciDeviceAsString() );
+ final String pciFunction = HostdevUtils.appendHexPrefix( address.getPciFunctionAsString() );
+
+ this.setXmlElementAttributeValue( expression, "domain", pciDomain );
+ this.setXmlElementAttributeValue( expression, "bus", pciBus );
+ this.setXmlElementAttributeValue( expression, "slot", pciDevice );
+ this.setXmlElementAttributeValue( expression, "function", pciFunction );
+ }
+
+ /**
+ * Returns the PCI device address from an address XML element selected by a XPath expression.
+ *
+ * @param expression XPath expression to select the XML address element.
+ * @return PCI device address from the selected XML address element.
+ */
+ protected HostdevPciDeviceAddress getPciAddress( final String expression )
+ {
+ String pciDomain = this.getXmlElementAttributeValue( expression, "domain" );
+ String pciBus = this.getXmlElementAttributeValue( expression, "bus" );
+ String pciDevice = this.getXmlElementAttributeValue( expression, "slot" );
+ String pciFunction = this.getXmlElementAttributeValue( expression, "function" );
+
+ pciDomain = HostdevUtils.removeHexPrefix( pciDomain );
+ pciBus = HostdevUtils.removeHexPrefix( pciBus );
+ pciDevice = HostdevUtils.removeHexPrefix( pciDevice );
+ pciFunction = HostdevUtils.removeHexPrefix( pciFunction );
+
+ return HostdevPciDeviceAddress.valueOf( pciDomain + ":" + pciBus + ":" + pciDevice + "." + pciFunction );
+ }
+
+ /**
+ * Returns this devices PCI bus address, or null if it doesn't have an explicit one
+ * set, or if the address type isn't PCI.
+ */
+ public HostdevPciDeviceAddress getPciTarget()
+ {
+ if ( !"pci".equals( this.getXmlElementAttributeValue( "address", "type" ) ) )
+ return null;
+ return this.getPciAddress( "address" );
+ }
+
+ public void setPciTarget( HostdevPciDeviceAddress address )
+ {
+ this.setPciAddress( "address", address );
+ this.setXmlElementAttributeValue( "address", "type", "pci" );
+ }
+
+ /**
* Type of virtual machine devices.
*
* @author Manuel Bentele