</define>
<define name="capmdev">
- <attribute name="type">
- <value>mdev</value>
- </attribute>
- <element name="type">
- <attribute name="id">
- <data type="string"/>
+ <interleave>
+ <attribute name="type">
+ <value>mdev</value>
</attribute>
- </element>
- <optional>
- <element name="iommuGroup">
- <attribute name="number">
- <ref name="unsignedInt"/>
+ <element name="type">
+ <attribute name="id">
+ <data type="string"/>
</attribute>
</element>
- </optional>
- <zeroOrMore>
- <element name="attr">
- <attribute name="name"/>
- <attribute name="value"/>
- </element>
- </zeroOrMore>
+ <optional>
+ <element name="iommuGroup">
+ <attribute name="number">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </element>
+ </optional>
+ <optional>
+ <element name="uuid">
+ <ref name="UUID"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="attr">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ </element>
+ </zeroOrMore>
+ </interleave>
</define>
<define name="capccwdev">
size_t i;
virBufferEscapeString(buf, "<type id='%s'/>\n", data->mdev.type);
+ virBufferEscapeString(buf, "<uuid>%s</uuid>\n", data->mdev.uuid);
virBufferAsprintf(buf, "<iommuGroup number='%u'/>\n",
data->mdev.iommuGroupNumber);
int nattrs = 0;
g_autofree xmlNodePtr *attrs = NULL;
size_t i;
+ g_autofree char *uuidstr = NULL;
ctxt->node = node;
return -1;
}
+ if ((uuidstr = virXPathString("string(./uuid[1])", ctxt))) {
+ unsigned char uuidbuf[VIR_UUID_BUFLEN];
+ /* make sure that the provided uuid is valid */
+ if (virUUIDParse(uuidstr, uuidbuf) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Invalid uuid '%s' for new mdev device"), uuidstr);
+ return -1;
+ }
+ mdev->uuid = g_new0(char, VIR_UUID_STRING_BUFLEN);
+ virUUIDFormat(uuidbuf, mdev->uuid);
+ }
+
/* 'iommuGroup' is optional, only report an error if the supplied value is
* invalid (-2), not if it's missing (-1) */
if (virXPathUInt("number(./iommuGroup[1]/@number)",
<parent>0000:00:02.0</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
+ <uuid>200f228a-c80a-4d50-bfb7-f5a0e4e34045</uuid>
<iommuGroup number='0'/>
</capability>
</device>
<parent>0000:00:02.0</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
+ <uuid>de807ffc-1923-4d5f-b6c9-b20ecebc6d4b</uuid>
<iommuGroup number='0'/>
</capability>
</device>
<parent>0000:00:02.0</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_8'/>
+ <uuid>435722ea-5f43-468a-874f-da34f1217f13</uuid>
<iommuGroup number='0'/>
<attr name='testattr' value='42'/>
</capability>
<parent>matrix</parent>
<capability type='mdev'>
<type id='vfio_ap-passthrough'/>
+ <uuid>783e6dbb-ea0e-411f-94e2-717eaad438bf</uuid>
<iommuGroup number='0'/>
<attr name='assign_adapter' value='5'/>
<attr name='assign_adapter' value='6'/>