[libvirt] [PATCH 2/5] nodedev: add <devnode> paths
Daniel P. Berrange
berrange at redhat.com
Thu Feb 16 14:26:43 UTC 2017
On Wed, Feb 15, 2017 at 01:04:10AM +0400, marcandre.lureau at redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
>
> Add new <devnode> top-level <device> element, that list the associated
> /dev files. Distinguish the main /dev name from symlinks with a 'type'
> attribute of value 'dev' or 'symlink'.
>
> Update a test to check XML schema, and actually add it to the test list
> since it was missing.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> ---
> docs/formatnode.html.in | 6 +++
> docs/schemas/nodedev.rng | 16 +++++++
> src/conf/node_device_conf.c | 54 +++++++++++++++++++++-
> src/conf/node_device_conf.h | 12 +++++
> src/node_device/node_device_udev.c | 31 +++++++++++++
> ...ge_serial_3600c0ff000d7a2a5d463ff4902000000.xml | 4 ++
> tests/nodedevxml2xmltest.c | 1 +
> 7 files changed, 123 insertions(+), 1 deletion(-)
> @@ -1722,6 +1736,44 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
> goto error;
> }
>
> + /* Parse devnodes */
> + nodes = NULL;
> + if ((n = virXPathNodeSet("./devnode", ctxt, &nodes)) < 0)
> + goto error;
> +
> + if (VIR_ALLOC_N(def->devlinks, n + 1) < 0)
> + goto error;
Ok, n + 1 because we want to be able to treat it as a string
list with a trailing NULL element. Technically this is still
one element too large, since the first devnode is probably
going to be in dev->devnode intead of dev->devlinks, but
that's harmless enough that we can ignore it.
> +
> + for (i = 0, m = 0; i < n; i++) {
> + xmlNodePtr node = nodes[i];
> + char *tmp = virXMLPropString(node, "type");
> + virNodeDevDevnodeType type;
> +
> + if (!tmp) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("missing devnode type"));
> + goto error;
> + }
> +
> + if ((type = virNodeDevDevnodeTypeFromString(tmp)) < 0) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unknown devnode type '%s'"), tmp);
> + VIR_FREE(tmp);
> + goto error;
> + }
> +
> + switch (type) {
> + case VIR_NODE_DEV_DEVNODE_DEV:
> + def->devnode = (char*)xmlNodeGetContent(node);
> + break;
> + case VIR_NODE_DEV_DEVNODE_LINK:
> + def->devlinks[m++] = (char*)xmlNodeGetContent(node);
> + break;
> + case VIR_NODE_DEV_DEVNODE_LAST:
> + break;
> + }
> + }
> +
ACK
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
More information about the libvir-list
mailing list