[libvirt] [PATCH 03/34] Extend the virDomainDeviceAddress struture to allow disk controller addresses
Daniel Veillard
veillard at redhat.com
Fri Jan 15 12:45:24 UTC 2010
On Fri, Jan 08, 2010 at 05:22:59PM +0000, Daniel P. Berrange wrote:
> Introduce a new structure
>
> struct _virDomainDeviceDriveAddress {
> unsigned int controller;
> unsigned int bus;
> unsigned int unit;
> };
>
> and plug that into virDomainDeviceAddress and generates XML that
> looks like
>
> <address type='drive' controller='1' bus='0' unit='5'/>
>
> This syntax will be used by the QEMU driver to explicitly control
> how drives are attached to the bus
>
> * src/conf/domain_conf.h, src/conf/domain_conf.c: Parsing and
> formatting of drive addresses
> * docs/schemas/domain.rng: Define new address format for drives
[...]
> @@ -1434,6 +1455,21 @@
> <param name="pattern">(0x)?[0-7]</param>
> </data>
> </define>
> + <define name="driveController">
> + <data type="string">
> + <param name="pattern">[0-9]{1,2}</param>
> + </data>
> + </define>
> + <define name="driveBus">
> + <data type="string">
> + <param name="pattern">[0-9]{1,2}</param>
> + </data>
> + </define>
> + <define name="driveUnit">
> + <data type="string">
> + <param name="pattern">[0-9]{1,2}</param>
> + </data>
> + </define>
> <define name="featureName">
> <data type="string">
> <param name='pattern'>[a-zA-Z0-9\-_]+</param>
[...]
> +static int
> +virDomainDeviceDriveAddressParseXML(virConnectPtr conn,
> + xmlNodePtr node,
> + virDomainDeviceDriveAddressPtr addr)
> +{
> + char *bus, *unit, *controller;
> + int ret = -1;
> +
> + memset(addr, 0, sizeof(*addr));
> +
> + controller = virXMLPropString(node, "controller");
> + bus = virXMLPropString(node, "bus");
> + unit = virXMLPropString(node, "unit");
> +
> + if (controller &&
> + virStrToLong_ui(controller, NULL, 10, &addr->controller) < 0) {
> + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Cannot parse <address> 'controller' attribute"));
> + goto cleanup;
> + }
> +
> + if (bus &&
> + virStrToLong_ui(bus, NULL, 10, &addr->bus) < 0) {
> + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Cannot parse <address> 'bus' attribute"));
> + goto cleanup;
> + }
> +
> + if (unit &&
> + virStrToLong_ui(unit, NULL, 10, &addr->unit) < 0) {
> + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Cannot parse <address> 'unit' attribute"));
> + goto cleanup;
> + }
There is also a mismatch here, as the RNG will allow only values 0-99
and the parsing will allow any unsigned decimal.
But again that's not a blocker, the issue could be fixed later, just
keep a comment somewhere about the todo on the parser side.
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list